From c2f53bea3ef53f7ca181595ec14cf0dfbdda9958 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Mon, 20 May 2024 12:11:16 +0100 Subject: [PATCH 01/90] fix: remove description refactor steps --- .../CreateWallet/lib/create-multisig-utils.ts | 24 +++ .../widgets/CreateWallet/lib/types.ts | 7 + .../model/create-multisig-wallet-model.ts | 14 +- .../CreateWallet/ui/CreateWalletProvider.tsx | 2 +- ...gWallet.tsx => FlexibleMultisigWallet.tsx} | 0 .../ui/MultisigWallet/MultisigWallet.tsx | 170 ++++++++++++++---- .../MultisigWallet/MultisigWalletWizard.tsx | 65 +++++++ .../SingleChainMultisigWallet.tsx | 163 ----------------- .../MultisigWallet/components/WalletForm.tsx | 8 +- .../widgets/Transfer/ui/TransferForm.tsx | 30 ---- 10 files changed, 242 insertions(+), 241 deletions(-) create mode 100644 src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts create mode 100644 src/renderer/widgets/CreateWallet/lib/types.ts rename src/renderer/widgets/CreateWallet/ui/MultisigWallet/{MultiChainMultisigWallet.tsx => FlexibleMultisigWallet.tsx} (100%) create mode 100644 src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWalletWizard.tsx delete mode 100644 src/renderer/widgets/CreateWallet/ui/MultisigWallet/SingleChainMultisigWallet.tsx diff --git a/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts b/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts new file mode 100644 index 0000000000..4ecebaf3ea --- /dev/null +++ b/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts @@ -0,0 +1,24 @@ +import { Step } from './types'; + +export const createMultisigUtils = { + isSignStep, + isSubmitStep, + isConfirmStep, + isInitStep, +}; + +function isConfirmStep(step: Step) { + return step === Step.CONFIRM; +} + +function isInitStep(step: Step) { + return step === Step.INIT; +} + +function isSignStep(step: Step) { + return step === Step.SIGN; +} + +function isSubmitStep(step: Step) { + return step === Step.SUBMIT; +} diff --git a/src/renderer/widgets/CreateWallet/lib/types.ts b/src/renderer/widgets/CreateWallet/lib/types.ts new file mode 100644 index 0000000000..59605ac619 --- /dev/null +++ b/src/renderer/widgets/CreateWallet/lib/types.ts @@ -0,0 +1,7 @@ +export const enum Step { + NONE, + INIT, + CONFIRM, + SIGN, + SUBMIT, +} diff --git a/src/renderer/widgets/CreateWallet/model/create-multisig-wallet-model.ts b/src/renderer/widgets/CreateWallet/model/create-multisig-wallet-model.ts index d4f94d8691..3adabf1189 100644 --- a/src/renderer/widgets/CreateWallet/model/create-multisig-wallet-model.ts +++ b/src/renderer/widgets/CreateWallet/model/create-multisig-wallet-model.ts @@ -4,26 +4,28 @@ import sortBy from 'lodash/sortBy'; import { AccountType, ChainId, ChainType, CryptoType, Signatory, SigningType, WalletType } from '@shared/core'; import { accountUtils, walletModel, walletUtils } from '@entities/wallet'; import { networkModel, networkUtils } from '@entities/network'; +import { Step } from '../lib/types'; const reset = createEvent(); +const stepChanged = createEvent(); export type Callbacks = { onComplete: () => void; }; -const $callbacks = createStore(null).reset(reset); -const callbacksApi = createApi($callbacks, { - callbacksChanged: (state, props: Callbacks) => ({ ...state, ...props }), -}); - const walletCreated = createEvent<{ name: string; threshold: number; creatorId: string; }>(); +const $step = createStore(Step.INIT); const chainSelected = createEvent(); const signatoriesChanged = createEvent(); +const $callbacks = createStore(null).reset(reset); +const callbacksApi = createApi($callbacks, { + callbacksChanged: (state, props: Callbacks) => ({ ...state, ...props }), +}); const $chain = createStore(null).reset(reset); const $signatories = createStore([]).reset(reset); const $error = createStore('').reset(reset); @@ -134,11 +136,13 @@ export const createMultisigWalletModel = { $chain, $isLoading: createWalletFx.pending, $error, + $step, events: { reset, callbacksChanged: callbacksApi.callbacksChanged, walletCreated, chainSelected, signatoriesChanged, + stepChanged, }, }; diff --git a/src/renderer/widgets/CreateWallet/ui/CreateWalletProvider.tsx b/src/renderer/widgets/CreateWallet/ui/CreateWalletProvider.tsx index 6efa60e824..9cc65754d4 100644 --- a/src/renderer/widgets/CreateWallet/ui/CreateWalletProvider.tsx +++ b/src/renderer/widgets/CreateWallet/ui/CreateWalletProvider.tsx @@ -6,7 +6,7 @@ import WatchOnly from '@pages/Onboarding/WatchOnly/WatchOnly'; import { Vault } from '@pages/Onboarding/Vault/Vault'; import { NovaWallet } from '@pages/Onboarding/WalletConnect/NovaWallet'; import { WalletConnect } from '@pages/Onboarding/WalletConnect/WalletConnect'; -import { MultisigWallet } from './MultisigWallet/MultisigWallet'; +import { MultisigWallet } from './MultisigWallet/MultisigWalletWizard'; import { WalletType, WalletFamily } from '@shared/core'; import { walletPairingModel } from '@features/wallets'; import { proxiesModel } from '@features/proxies'; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultiChainMultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx similarity index 100% rename from src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultiChainMultisigWallet.tsx rename to src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx index e508e657db..0a507abf14 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx @@ -1,66 +1,160 @@ -import { useState } from 'react'; +import { ComponentProps, useState, useEffect } from 'react'; +import { useUnit } from 'effector-react'; +import noop from 'lodash/noop'; +import { BaseModal, HeaderTitleText, Button, IconButton } from '@shared/ui'; +import { useI18n } from '@app/providers'; import { useToggle } from '@shared/lib/hooks'; -import { DEFAULT_TRANSITION } from '@shared/lib/utils'; -import { SelectMultisigWalletType } from './SelectMultisigWalletType'; -import { MultisigWalletType } from './common/constants'; -import { SingleChainMultisigWallet } from './SingleChainMultisigWallet'; -import { MultiChainMultisigWallet } from './MultiChainMultisigWallet'; +import { OperationResult } from '@entities/transaction'; +import { ExtendedAccount, ExtendedContact } from './common/types'; +import { ConfirmSignatories, WalletForm } from './components'; +import { contactModel } from '@entities/contact'; +import { DEFAULT_TRANSITION, dictionary } from '@shared/lib/utils'; +import { createMultisigWalletModel } from '../../model/create-multisig-wallet-model'; +import { SelectAccountSignatories } from './components/SelectAccountSignatories'; +import { walletModel } from '@entities/wallet'; +import { networkModel } from '@entities/network'; +import { createMultisigUtils } from '../../lib/create-multisig-utils'; +import { Step } from '../../lib/types'; + +type OperationResultProps = Pick, 'variant' | 'description'>; type Props = { isOpen: boolean; onClose: () => void; onComplete: () => void; + // onBack: () => void; }; -const enum Step { - SELECT_WALLET_TYPE, - CREATE_WALLET, -} +export const SingleChainMultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { + const { t } = useI18n(); + + const accounts = useUnit(createMultisigWalletModel.$availableAccounts); + const wallets = useUnit(walletModel.$wallets); + const contacts = useUnit(contactModel.$contacts); + const chain = useUnit(createMultisigWalletModel.$chain); + const chains = useUnit(networkModel.$chains); + const isLoading = useUnit(createMultisigWalletModel.$isLoading); + const error = useUnit(createMultisigWalletModel.$error); + const activeStep = useUnit(createMultisigWalletModel.$step); -export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { const [isModalOpen, toggleIsModalOpen] = useToggle(isOpen); - const [step, setStep] = useState(Step.SELECT_WALLET_TYPE); - const [walletType, setWalletType] = useState(); + const [isResultModalOpen, toggleResultModal] = useToggle(); - const selectWalletType = (type: MultisigWalletType) => { - setWalletType(type); + const [name, setName] = useState(''); - setStep(Step.CREATE_WALLET); - }; + const [signatoryAccounts, setSignatoryAccounts] = useState([]); + const [signatoryContacts, setSignatoryContacts] = useState([]); + + const signatories = (signatoryAccounts as ExtendedContact[]).concat(signatoryContacts); + + useEffect(() => { + createMultisigWalletModel.events.signatoriesChanged(signatories); + }, [signatories.length]); - const closeMultisigModal = (params?: { complete: boolean }) => { + useEffect(() => { + createMultisigWalletModel.events.callbacksChanged({ onComplete }); + }, [onComplete]); + + useEffect(() => { + if (isOpen && !isModalOpen) { + toggleIsModalOpen(); + } + + if (!isOpen && isModalOpen) { + closeMultisigModal({ closeAll: false }); + } + }, [isOpen]); + + // const goToPrevStep = () => { + // if (activeStep === Step.INIT) { + // onBack(); + // } else { + // setActiveStep((prev) => prev - 1); + // } + // }; + + const closeMultisigModal = (params: { complete?: boolean; closeAll?: boolean } = { closeAll: true }) => { toggleIsModalOpen(); - setTimeout(params?.complete ? onComplete : onClose, DEFAULT_TRANSITION); + setTimeout(params?.complete ? onComplete : params?.closeAll ? onClose : noop, DEFAULT_TRANSITION); }; - const goBack = () => { - setWalletType(undefined); - setStep(Step.SELECT_WALLET_TYPE); + const getResultProps = (): OperationResultProps => { + if (isLoading) return { variant: 'loading' }; + if (error) return { variant: 'error', description: error }; + + return { variant: 'success', description: t('createMultisigAccount.successMessage') }; + }; + + const modalTitle = ( +
+ {t('createMultisigAccount.title')} +
+ ); + + const submitHandler = (args: any) => { + toggleResultModal(); + setName(args.name); + + createMultisigWalletModel.events.walletCreated(args); }; return ( <> - + > + createMultisigWalletModel.events.stepChanged(Step.CONFIRM)} + onChainChange={createMultisigWalletModel.events.chainSelected} + onSubmit={submitHandler} + /> - +
+ closeMultisigModal()} + /> - + { + setSignatoryAccounts(accounts); + setSignatoryContacts(contacts); + }} + /> + + {createMultisigUtils.isConfirmStep(activeStep) && ( + + )} +
+ + + closeMultisigModal({ complete: true })} + > + {error && } + ); }; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWalletWizard.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWalletWizard.tsx new file mode 100644 index 0000000000..2e97bd88bc --- /dev/null +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWalletWizard.tsx @@ -0,0 +1,65 @@ +import { useToggle } from '@shared/lib/hooks'; +import { DEFAULT_TRANSITION } from '@shared/lib/utils'; +import { SingleChainMultisigWallet } from './MultisigWallet'; + +type Props = { + isOpen: boolean; + onClose: () => void; + onComplete: () => void; +}; + +// const enum Step { +// SELECT_WALLET_TYPE, +// CREATE_WALLET, +// } + +export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { + const [isModalOpen, toggleIsModalOpen] = useToggle(isOpen); + // const [step, setStep] = useState(Step.CREATE_WALLET); + // const [walletType, setWalletType] = useState(MultisigWalletType.SINGLE_CHAIN); + + // const selectWalletType = (type: MultisigWalletType) => { + // setWalletType(type); + + // setStep(Step.CREATE_WALLET); + // }; + + const closeMultisigModal = (params?: { complete: boolean }) => { + toggleIsModalOpen(); + + setTimeout(params?.complete ? onComplete : onClose, DEFAULT_TRANSITION); + }; + + // const goBack = () => { + // setWalletType(undefined); + // setStep(Step.SELECT_WALLET_TYPE); + // }; + + return ( + <> + {/* */} + + + + {/* */} + + ); +}; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SingleChainMultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SingleChainMultisigWallet.tsx deleted file mode 100644 index 0e9f90e748..0000000000 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SingleChainMultisigWallet.tsx +++ /dev/null @@ -1,163 +0,0 @@ -import { ComponentProps, useState, useEffect } from 'react'; -import { useUnit } from 'effector-react'; -import noop from 'lodash/noop'; - -import { BaseModal, HeaderTitleText, Button, IconButton } from '@shared/ui'; -import { useI18n } from '@app/providers'; -import { useToggle } from '@shared/lib/hooks'; -import { OperationResult } from '@entities/transaction'; -import { ExtendedAccount, ExtendedContact } from './common/types'; -import { ConfirmSignatories, WalletForm } from './components'; -import { contactModel } from '@entities/contact'; -import { DEFAULT_TRANSITION, dictionary } from '@shared/lib/utils'; -import { createMultisigWalletModel } from '../../model/create-multisig-wallet-model'; -import { SelectAccountSignatories } from './components/SelectAccountSignatories'; -import { walletModel } from '@entities/wallet'; -import { networkModel } from '@entities/network'; - -type OperationResultProps = Pick, 'variant' | 'description'>; - -const enum Step { - INIT, - CONFIRMATION, -} - -type Props = { - isOpen: boolean; - onClose: () => void; - onComplete: () => void; - onBack: () => void; -}; - -export const SingleChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack }: Props) => { - const { t } = useI18n(); - - const accounts = useUnit(createMultisigWalletModel.$availableAccounts); - const wallets = useUnit(walletModel.$wallets); - const contacts = useUnit(contactModel.$contacts); - const chain = useUnit(createMultisigWalletModel.$chain); - const chains = useUnit(networkModel.$chains); - const isLoading = useUnit(createMultisigWalletModel.$isLoading); - const error = useUnit(createMultisigWalletModel.$error); - - const [isModalOpen, toggleIsModalOpen] = useToggle(isOpen); - const [isResultModalOpen, toggleResultModal] = useToggle(); - - const [activeStep, setActiveStep] = useState(Step.INIT); - const [name, setName] = useState(''); - - const [signatoryAccounts, setSignatoryAccounts] = useState([]); - const [signatoryContacts, setSignatoryContacts] = useState([]); - - const signatories = (signatoryAccounts as ExtendedContact[]).concat(signatoryContacts); - - useEffect(() => { - createMultisigWalletModel.events.signatoriesChanged(signatories); - }, [signatories.length]); - - useEffect(() => { - createMultisigWalletModel.events.callbacksChanged({ onComplete }); - }, [onComplete]); - - useEffect(() => { - if (isOpen && !isModalOpen) { - toggleIsModalOpen(); - } - - if (!isOpen && isModalOpen) { - closeMultisigModal({ closeAll: false }); - } - }, [isOpen]); - - const goToPrevStep = () => { - if (activeStep === Step.INIT) { - onBack(); - } else { - setActiveStep((prev) => prev - 1); - } - }; - - const closeMultisigModal = (params: { complete?: boolean; closeAll?: boolean } = { closeAll: true }) => { - toggleIsModalOpen(); - - setTimeout(params?.complete ? onComplete : params?.closeAll ? onClose : noop, DEFAULT_TRANSITION); - }; - - const getResultProps = (): OperationResultProps => { - if (isLoading) return { variant: 'loading' }; - if (error) return { variant: 'error', description: error }; - - return { variant: 'success', description: t('createMultisigAccount.successMessage') }; - }; - - const modalTitle = ( -
- {t('createMultisigAccount.title')} -
- ); - - const submitHandler = (args: any) => { - toggleResultModal(); - setName(args.name); - - createMultisigWalletModel.events.walletCreated(args); - }; - - return ( - <> - - setActiveStep(Step.CONFIRMATION)} - onChainChange={createMultisigWalletModel.events.chainSelected} - onSubmit={submitHandler} - /> - -
- closeMultisigModal()} - /> - - { - setSignatoryAccounts(accounts); - setSignatoryContacts(contacts); - }} - /> - - {activeStep === Step.CONFIRMATION && ( - - )} -
-
- - closeMultisigModal({ complete: true })} - > - {error && } - - - ); -}; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/WalletForm.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/WalletForm.tsx index b5fa778fde..359a1a63bd 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/WalletForm.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/WalletForm.tsx @@ -42,7 +42,7 @@ type Props = { isLoading: boolean; withChain?: boolean; onContinue: () => void; - onGoBack: () => void; + // onGoBack: () => void; onChainChange?: (chainId: ChainId) => void; onSubmit: ({ name, threshold, creatorId }: { name: string; threshold: number; creatorId: AccountId }) => void; }; @@ -54,7 +54,7 @@ export const WalletForm = ({ isActive, isLoading, onChainChange, - onGoBack, + // onGoBack, onSubmit, }: Props) => { const { t } = useI18n(); @@ -224,9 +224,9 @@ export const WalletForm = ({
- + */} {isActive ? ( // without key continue button triggers form submit
- - {t('createMultisigAccount.walletAlertText')} - - { {t('createMultisigAccount.multisigExistText')} - + {t('createMultisigAccount.noOwnSignatory')} @@ -141,16 +130,16 @@ Props) => { {/* */} - {isActive ? ( + {/* {isActive ? ( // without key continue button triggers form submit - ) : ( - - )} + ) : ( */} + + {/* )} */} From eed0cc0e91f1b2204381dae5241d56ba0b6dcdf4 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Thu, 23 May 2024 17:21:20 +0200 Subject: [PATCH 04/90] chore: refactor-small-modal --- .../shared/ui/Modals/BaseModal/BaseModal.tsx | 8 +- .../CreateWallet/lib/create-multisig-utils.ts | 5 ++ .../widgets/CreateWallet/lib/types.ts | 1 + .../MultisigWallet/FlexibleMultisigWallet.tsx | 4 +- .../ui/MultisigWallet/MultisigWallet.tsx | 82 +++++++----------- .../components/ConfirmSignatories.tsx | 14 +++- .../{WalletForm.tsx => NameThreshold.tsx} | 11 ++- .../components/SelectSignatoriesForm.tsx | 83 +++++++++++++++++++ .../ui/MultisigWallet/components/index.ts | 2 +- 9 files changed, 148 insertions(+), 62 deletions(-) rename src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/{WalletForm.tsx => NameThreshold.tsx} (93%) create mode 100644 src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatoriesForm.tsx diff --git a/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx b/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx index d69d913246..63f98cd514 100644 --- a/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx +++ b/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx @@ -40,10 +40,10 @@ export const BaseModal = ({
{headerExist && (
diff --git a/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts b/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts index ad6e98b78b..93de2da94d 100644 --- a/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts +++ b/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts @@ -8,12 +8,17 @@ export const createMultisigUtils = { isConfirmStep, isInitStep, noSignatoryWallet, + isNameThresholdStep, }; function isConfirmStep(step: Step) { return step === Step.CONFIRM; } +function isNameThresholdStep(step: Step) { + return step === Step.NAMETHRESHOLD; +} + function isInitStep(step: Step) { return step === Step.INIT; } diff --git a/src/renderer/widgets/CreateWallet/lib/types.ts b/src/renderer/widgets/CreateWallet/lib/types.ts index dffb32b306..3db8d5ace6 100644 --- a/src/renderer/widgets/CreateWallet/lib/types.ts +++ b/src/renderer/widgets/CreateWallet/lib/types.ts @@ -1,5 +1,6 @@ export const enum Step { INIT, + NAMETHRESHOLD, CONFIRM, SIGN, SUBMIT, diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx index b11151b96e..ffd1a08f57 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx @@ -7,7 +7,7 @@ import { useI18n } from '@app/providers'; import { useToggle } from '@shared/lib/hooks'; import { OperationResult } from '@entities/transaction'; import { ExtendedContact, ExtendedWallet } from './common/types'; -import { SelectSignatories, ConfirmSignatories, WalletForm } from './components'; +import { SelectSignatories, ConfirmSignatories, NameThreshold } from './components'; import { contactModel } from '@entities/contact'; import { DEFAULT_TRANSITION } from '@shared/lib/utils'; import { walletModel } from '@entities/wallet'; @@ -106,7 +106,7 @@ export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack } contentClass="flex h-[524px]" onClose={closeMultisigModal} > - diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx index 1aa9c2ff18..cf6c188e76 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx @@ -7,16 +7,16 @@ import { BaseModal, HeaderTitleText, Button, IconButton } from '@shared/ui'; import { useI18n } from '@app/providers'; import { useToggle } from '@shared/lib/hooks'; import { OperationResult } from '@entities/transaction'; -import { ConfirmSignatories, WalletForm } from './components'; -import { contactModel } from '@entities/contact'; -import { DEFAULT_TRANSITION, dictionary } from '@shared/lib/utils'; +import { ConfirmSignatories, NameThreshold } from './components'; +import { DEFAULT_TRANSITION } from '@shared/lib/utils'; import { flowModel } from '../../model/create-multisig-flow-model'; -import { SelectSignatories } from './components/SelectAccountSignatories'; -import { walletModel } from '@entities/wallet'; +// import { SelectSignatories } from './components/SelectAccountSignatories'; +// import { walletModel } from '@entities/wallet'; import { networkModel } from '@entities/network'; import { createMultisigUtils } from '../../lib/create-multisig-utils'; -import { Step } from '../../lib/types'; +// import { Step } from '../../lib/types'; import { formModel } from '../../model/create-multisig-form-model'; +import { SelectSignatoriesForm } from './components/SelectSignatoriesForm'; type OperationResultProps = Pick, 'variant' | 'description'>; @@ -30,9 +30,9 @@ type Props = { export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { const { t } = useI18n(); - const accounts = useUnit(formModel.$availableAccounts); - const wallets = useUnit(walletModel.$wallets); - const contacts = useUnit(contactModel.$contacts); + // const accounts = useUnit(formModel.$availableAccounts); + // const wallets = useUnit(walletModel.$wallets); + // const contacts = useUnit(contactModel.$contacts); const { fields: { chain }, } = useForm(formModel.$createMultisigForm); @@ -83,7 +83,7 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { }; const modalTitle = ( -
+
{t('createMultisigAccount.title')}
); @@ -100,55 +100,37 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { title={modalTitle} isOpen={isModalOpen && !isResultModalOpen} headerClass="bg-input-background-disabled" - panelClass="w-[944px] h-[576px]" + panelClass="w-[440px]" contentClass="flex h-[524px]" onClose={closeMultisigModal} > - {createMultisigUtils.isInitStep(activeStep) && ( - - )} - -
- closeMultisigModal()} - /> - - { - formModel.events.accountSignatoriesChanged(accounts); - formModel.events.contactSignatoriesChanged(contacts); - }} - /> - - {createMultisigUtils.isConfirmStep(activeStep) && ( + {createMultisigUtils.isInitStep(activeStep) && } + {createMultisigUtils.isNameThresholdStep(activeStep) && } + {createMultisigUtils.isConfirmStep(activeStep) && ( +
- )} -
- +
+ )} - closeMultisigModal({ complete: true })} - > - {error && } - + closeMultisigModal({ complete: true })} + > + {error && } + + closeMultisigModal()} + /> + ); }; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmSignatories.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmSignatories.tsx index cc71d30843..cb5daaaf85 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmSignatories.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmSignatories.tsx @@ -1,10 +1,12 @@ import { cnTw, RootExplorers } from '@shared/lib/utils'; import { useI18n } from '@app/providers'; -import { FootnoteText, SmallTitleText } from '@shared/ui'; +import { Button, FootnoteText, SmallTitleText } from '@shared/ui'; import { ExtendedWallet, ExtendedContact, ExtendedAccount } from '../common/types'; import { WalletItem } from './WalletItem'; import { ContactItem, ExplorersPopover } from '@entities/wallet'; import { Chain, WalletType } from '@shared/core'; +import { flowModel } from '../../../model/create-multisig-flow-model'; +import { Step } from '../../../lib/types'; type Props = { wallets?: ExtendedWallet[]; @@ -37,7 +39,6 @@ export const ConfirmSignatories = ({ chain, wallets = [], accounts = [], contact )} - {accounts.length > 0 && ( <> @@ -56,7 +57,6 @@ export const ConfirmSignatories = ({ chain, wallets = [], accounts = [], contact )} - {contacts.length > 0 && ( <> @@ -75,6 +75,14 @@ export const ConfirmSignatories = ({ chain, wallets = [], accounts = [], contact )} +
+ + +
); diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/WalletForm.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/NameThreshold.tsx similarity index 93% rename from src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/WalletForm.tsx rename to src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/NameThreshold.tsx index 73be693c6b..742a8f874d 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/WalletForm.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/NameThreshold.tsx @@ -10,6 +10,8 @@ import { ChainTitle } from '@entities/chain'; import { Signatory, type Chain, type ChainId } from '@shared/core'; import { formModel } from '../../../model/create-multisig-form-model'; import { flowModel } from '../../../model/create-multisig-flow-model'; +import { walletModel } from '@entities/wallet'; +import { contactModel } from '@entities/contact'; const getThresholdOptions = (optionsAmount: number): DropdownOption[] => { if (optionsAmount === 0) return []; @@ -40,17 +42,22 @@ type Props = { // onGoBack: () => void; }; -export const WalletForm = ({ +export const NameThreshold = ({ signatories, }: // onGoBack, Props) => { const { t } = useI18n(); const chains = useUnit(networkModel.$chains); - + const { + fields: { chain }, + } = useForm(formModel.$createMultisigForm); const { fields, submit } = useForm(formModel.$createMultisigForm); const multisigAlreadyExists = useUnit(formModel.$multisigAlreadyExists); const hasOwnSignatory = useUnit(flowModel.$hasOwnSignatory); + const accounts = useUnit(formModel.$availableAccounts); + const wallets = useUnit(walletModel.$wallets); + const contacts = useUnit(contactModel.$contacts); //fixme this is now how we do it // probably put that in the model diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatoriesForm.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatoriesForm.tsx new file mode 100644 index 0000000000..2316804a5a --- /dev/null +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatoriesForm.tsx @@ -0,0 +1,83 @@ +import { useUnit } from 'effector-react'; +import { useForm } from 'effector-forms'; + +import { Alert, Button, SmallTitleText } from '@shared/ui'; +import { useI18n } from '@app/providers'; +import { networkModel } from '@entities/network'; +import { formModel } from '../../../model/create-multisig-form-model'; +import { flowModel } from '../../../model/create-multisig-flow-model'; +import { walletModel } from '@entities/wallet'; +import { contactModel } from '@entities/contact'; +import { SelectSignatories } from './SelectAccountSignatories'; +import { dictionary } from '@shared/lib/utils'; +import { Step } from '../../../lib/types'; + +type Props = { + // signatories: Signatory[]; + // onGoBack: () => void; +}; + +export const SelectSignatoriesForm = () => { + const { t } = useI18n(); + + const chains = useUnit(networkModel.$chains); + const { + fields: { chain }, + } = useForm(formModel.$createMultisigForm); + const multisigAlreadyExists = useUnit(formModel.$multisigAlreadyExists); + const hasOwnSignatory = useUnit(flowModel.$hasOwnSignatory); + const accounts = useUnit(formModel.$availableAccounts); + const signatories = useUnit(formModel.$signatories); + const wallets = useUnit(walletModel.$wallets); + const contacts = useUnit(contactModel.$contacts); + + //fixme this is now how we do it + // probably put that in the model + const canContinue = () => { + const hasEnoughSignatories = signatories.length >= 2; + + return hasOwnSignatory && hasEnoughSignatories && !multisigAlreadyExists; + }; + + return ( +
+ {t('createMultisigAccount.walletFormTitle')} + + { + formModel.events.accountSignatoriesChanged(accounts); + formModel.events.contactSignatoriesChanged(contacts); + }} + /> +
+ + {t('createMultisigAccount.noOwnSignatory')} + +
+
+ {/* */} + {/* {isActive ? ( + // without key continue button triggers form submit + + ) : ( */} + + {/* )} */} +
+
+ ); +}; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/index.ts b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/index.ts index 85126b38ea..d63c367cc5 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/index.ts +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/index.ts @@ -1,3 +1,3 @@ export { SelectSignatories } from './SelectSignatories'; export { ConfirmSignatories } from './ConfirmSignatories'; -export { WalletForm } from './WalletForm'; +export { NameThreshold } from './NameThreshold'; From 752260567e4832b2a5876e3311e17a158b3d8938 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Mon, 27 May 2024 11:59:14 +0200 Subject: [PATCH 05/90] feat: remark signing --- .../transaction/lib/callDataDecoder.ts | 3 + .../entities/transaction/lib/common/types.ts | 10 +- .../entities/transaction/lib/common/utils.ts | 4 + .../transaction/lib/extrinsicService.ts | 11 + .../transaction/lib/transactionConfirmIcon.ts | 2 + .../transaction/lib/transactionIcon.ts | 2 + .../transaction/lib/transactionService.ts | 20 +- .../shared/api/translation/locales/en.json | 9 +- src/renderer/shared/core/types/transaction.ts | 2 + .../widgets/CreateWallet/lib/types.ts | 20 ++ .../model/create-multisig-flow-model.ts | 197 +++++++++++++++++- .../model/create-multisig-form-model.ts | 7 +- .../MultisigWallet/FlexibleMultisigWallet.tsx | 8 +- .../ui/MultisigWallet/MultisigWallet.tsx | 10 +- ...rmSignatories.tsx => ConfirmationStep.tsx} | 36 +++- ...ameThreshold.tsx => NameThresholdStep.tsx} | 10 +- ...natories.tsx => SelectSignatoriesStep.tsx} | 2 +- .../MultisigWallet/components/WalletItem.tsx | 6 +- .../ui/MultisigWallet/components/index.ts | 6 +- 19 files changed, 299 insertions(+), 66 deletions(-) rename src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/{ConfirmSignatories.tsx => ConfirmationStep.tsx} (72%) rename src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/{NameThreshold.tsx => NameThresholdStep.tsx} (93%) rename src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/{SelectSignatories.tsx => SelectSignatoriesStep.tsx} (98%) diff --git a/src/renderer/entities/transaction/lib/callDataDecoder.ts b/src/renderer/entities/transaction/lib/callDataDecoder.ts index 504987c991..eb772b9d1a 100644 --- a/src/renderer/entities/transaction/lib/callDataDecoder.ts +++ b/src/renderer/entities/transaction/lib/callDataDecoder.ts @@ -361,6 +361,9 @@ export const useCallDataDecoder = (): ICallDataDecoder => { call: decoded.args[2].toHex(), }; }, + [TransactionType.REMARK]: (decoded): Record => { + return { remark: decoded.args[0].toString() }; + }, }; const isBatchExtrinsic = (method: string, section: string): boolean => { diff --git a/src/renderer/entities/transaction/lib/common/types.ts b/src/renderer/entities/transaction/lib/common/types.ts index 1625febbe3..9136956299 100644 --- a/src/renderer/entities/transaction/lib/common/types.ts +++ b/src/renderer/entities/transaction/lib/common/types.ts @@ -4,8 +4,8 @@ import { Weight } from '@polkadot/types/interfaces'; import { SubmittableExtrinsic } from '@polkadot/api/types'; import { AnyJson } from '@polkadot/types/types'; -import type { Address, CallData, HexString, Timepoint, AccountId, ChainId, TxWrappers_OLD } from '@shared/core'; -import { DecodedTransaction, Transaction, TransactionType } from '@shared/core'; +import type { Address, CallData, HexString, Timepoint, AccountId, TxWrappers_OLD } from '@shared/core'; +import { DecodedTransaction, Transaction } from '@shared/core'; // ===================================================== // =========== ITransactionService interface =========== @@ -21,12 +21,6 @@ export type ITransactionService = { txs: Transaction[]; setWrappers: (wrappers: TxWrappers_OLD[]) => void; wrapTx: (tx: Transaction, api: ApiPromise, addressPrefix: number) => Transaction; - buildTransaction: ( - type: TransactionType, - address: Address, - chainId: ChainId, - args: Record, - ) => Transaction; }; // ===================================================== diff --git a/src/renderer/entities/transaction/lib/common/utils.ts b/src/renderer/entities/transaction/lib/common/utils.ts index 0e4e72092e..1259314a21 100644 --- a/src/renderer/entities/transaction/lib/common/utils.ts +++ b/src/renderer/entities/transaction/lib/common/utils.ts @@ -153,6 +153,8 @@ const TransactionTitles: Record = { [TransactionType.REMOVE_PROXY]: 'operations.titles.removeProxy', [TransactionType.REMOVE_PURE_PROXY]: 'operations.titles.removePureProxy', [TransactionType.PROXY]: 'operations.titles.proxy', + // Remark + [TransactionType.REMARK]: 'operations.titles.remark', }; const TransactionTitlesModal: Record string> = { @@ -193,6 +195,8 @@ const TransactionTitlesModal: Record s [TransactionType.REMOVE_PROXY]: () => 'operations.modalTitles.removeProxy', [TransactionType.REMOVE_PURE_PROXY]: () => 'operations.modalTitles.removePureProxy', [TransactionType.PROXY]: () => 'operations.modalTitles.proxy', + // Remark + [TransactionType.REMARK]: () => 'operations.modalTitles.remark', }; export const getTransactionTitle = (transaction?: Transaction | DecodedTransaction): string => { diff --git a/src/renderer/entities/transaction/lib/extrinsicService.ts b/src/renderer/entities/transaction/lib/extrinsicService.ts index a09b0729db..91fc7e4013 100644 --- a/src/renderer/entities/transaction/lib/extrinsicService.ts +++ b/src/renderer/entities/transaction/lib/extrinsicService.ts @@ -363,6 +363,16 @@ export const getUnsignedTransaction: Record< options, ); }, + + [TransactionType.REMARK]: (transaction, info, options) => { + return methods.system.remark( + { + remark: transaction.args.remark, + }, + info, + options, + ); + }, }; export const getExtrinsic: Record< @@ -451,6 +461,7 @@ export const getExtrinsic: Record< [TransactionType.CREATE_PURE_PROXY]: ({ proxyType, delay, index }, api) => { return api.tx.proxy.createPure(proxyType, delay, index); }, + [TransactionType.REMARK]: ({ remark }, api) => api.tx.system.remark(remark), }; type WrapAsMultiParams = { diff --git a/src/renderer/entities/transaction/lib/transactionConfirmIcon.ts b/src/renderer/entities/transaction/lib/transactionConfirmIcon.ts index 18f186760e..6f230eede1 100644 --- a/src/renderer/entities/transaction/lib/transactionConfirmIcon.ts +++ b/src/renderer/entities/transaction/lib/transactionConfirmIcon.ts @@ -32,6 +32,8 @@ const TransactionIcons: Record = { [TransactionType.REMOVE_PROXY]: 'proxyConfirm', [TransactionType.REMOVE_PURE_PROXY]: 'proxyConfirm', [TransactionType.PROXY]: 'unknownConfirm', + // Remark + [TransactionType.REMARK]: 'unknownConfirm', }; export const getIconName = (transaction?: Transaction | DecodedTransaction): IconNames => { diff --git a/src/renderer/entities/transaction/lib/transactionIcon.ts b/src/renderer/entities/transaction/lib/transactionIcon.ts index 37ecabf85f..4a5751161d 100644 --- a/src/renderer/entities/transaction/lib/transactionIcon.ts +++ b/src/renderer/entities/transaction/lib/transactionIcon.ts @@ -32,6 +32,8 @@ const TransactionIcons: Record = { [TransactionType.REMOVE_PROXY]: 'proxyMst', [TransactionType.REMOVE_PURE_PROXY]: 'proxyMst', [TransactionType.PROXY]: 'unknownMst', + // Remark + [TransactionType.REMARK]: 'unknownMst', }; export const getIconName = (transaction?: Transaction | DecodedTransaction): IconNames => { diff --git a/src/renderer/entities/transaction/lib/transactionService.ts b/src/renderer/entities/transaction/lib/transactionService.ts index 79ad2b49ca..f32a589fff 100644 --- a/src/renderer/entities/transaction/lib/transactionService.ts +++ b/src/renderer/entities/transaction/lib/transactionService.ts @@ -6,7 +6,7 @@ import { construct, UnsignedTransaction } from '@substrate/txwrapper-polkadot'; import { Weight } from '@polkadot/types/interfaces'; import { blake2AsU8a, signatureVerify } from '@polkadot/util-crypto'; -import { Transaction, TransactionType, WrapperKind } from '@shared/core'; +import { Transaction, WrapperKind } from '@shared/core'; import { createTxMetadata, toAccountId, dictionary } from '@shared/lib/utils'; import { getExtrinsic, getUnsignedTransaction, wrapAsMulti, wrapAsProxy } from './extrinsicService'; import { decodeDispatchError } from './common/utils'; @@ -14,8 +14,6 @@ import { useCallDataDecoder } from './callDataDecoder'; import { walletUtils } from '../../wallet'; import type { AccountId, - Address, - ChainId, HexString, Threshold, Wallet, @@ -40,6 +38,7 @@ export const transactionService = { createPayload, signAndSubmit, + getMultisigWrapper, getTxWrappers, getWrappedTransaction, }; @@ -333,20 +332,6 @@ export const useTransaction = (): ITransactionService => { return transaction; }; - const buildTransaction = ( - type: TransactionType, - address: Address, - chainId: ChainId, - args: Record, - ): Transaction => { - return { - type: type, - address: address, - chainId: chainId, - args: args, - }; - }; - return { getExtrinsicWeight, getTxWeight, @@ -357,6 +342,5 @@ export const useTransaction = (): ITransactionService => { setTxs, setWrappers, wrapTx, - buildTransaction, }; }; diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index 8876cbb78d..175c2a426a 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -120,7 +120,8 @@ "noWallets": "Looks like you don't have any non-watch only wallets", "noWalletsLabel": "The wallet list is empty", "searchContactPlaceholder": "Search", - "selectedSignatoriesTitle": "Check your signatories and proceed", + "newMultisigTitle": "New multisig", + "selectedSignatoriesTitle": "Selected signatories", "signatoriesDescription": "Add signatories to your multisig account", "signatoriesLabel": "Signatories", "signatoryTitle": "Select signatories", @@ -569,7 +570,8 @@ "transferFrom": "Transfer { asset } from", "transferOn": "Transfer { asset } on", "unknownOn": "Unknown Operation on", - "unstakeOn": "Unstake { asset } on" + "unstakeOn": "Unstake { asset } on", + "remark": "System Remark" }, "noOperationsDescription": "Your operation history will appear here", "noOperationsFilters": "Nothing was found for the filters. Try changing filters or canceling filtering.", @@ -591,7 +593,8 @@ "startStaking": "Start Staking", "transfer": "Transfer", "unknown": "Unknown Operation", - "unstake": "Unstake" + "unstake": "Unstake", + "remark": "Remark" } }, "price": { diff --git a/src/renderer/shared/core/types/transaction.ts b/src/renderer/shared/core/types/transaction.ts index a9a5d30378..ff98225fb6 100644 --- a/src/renderer/shared/core/types/transaction.ts +++ b/src/renderer/shared/core/types/transaction.ts @@ -42,6 +42,8 @@ export const enum TransactionType { PROXY = 'proxy', CREATE_PURE_PROXY = 'create_pure_proxy', REMOVE_PURE_PROXY = 'kill_pure_proxy', + + REMARK = 'remark', } export type SigningStatus = diff --git a/src/renderer/widgets/CreateWallet/lib/types.ts b/src/renderer/widgets/CreateWallet/lib/types.ts index 3db8d5ace6..7c908ff218 100644 --- a/src/renderer/widgets/CreateWallet/lib/types.ts +++ b/src/renderer/widgets/CreateWallet/lib/types.ts @@ -1,3 +1,5 @@ +import { ChainId, Transaction } from '@shared/core'; + export const enum Step { INIT, NAMETHRESHOLD, @@ -5,3 +7,21 @@ export const enum Step { SIGN, SUBMIT, } + +export type FormParams = { + threshold: number; + chain: ChainId; + name: string; +}; + +export type FormSubmitEvent = { + transactions: { + wrappedTx: Transaction; + multisigTx?: Transaction; + coreTx: Transaction; + }; + formData: FormParams & { + fee: string; + multisigDeposit: string; + }; +}; diff --git a/src/renderer/widgets/CreateWallet/model/create-multisig-flow-model.ts b/src/renderer/widgets/CreateWallet/model/create-multisig-flow-model.ts index 19451d1edb..87d96a6a2f 100644 --- a/src/renderer/widgets/CreateWallet/model/create-multisig-flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/create-multisig-flow-model.ts @@ -1,14 +1,34 @@ import { combine, createApi, createEffect, createEvent, createStore, restore, sample } from 'effector'; import sortBy from 'lodash/sortBy'; -import { AccountType, ChainId, ChainType, CryptoType, Signatory, SigningType, WalletType } from '@shared/core'; +import { + Account, + AccountType, + ChainId, + ChainType, + CryptoType, + MultisigTxWrapper, + ProxyTxWrapper, + Signatory, + SigningType, + Transaction, + TransactionType, + WalletType, +} from '@shared/core'; import { accountUtils, walletModel, walletUtils } from '@entities/wallet'; import { networkModel, networkUtils } from '@entities/network'; -import { Step } from '../lib/types'; +import { FormSubmitEvent, Step } from '../lib/types'; import { formModel } from './create-multisig-form-model'; +import { walletSelectModel } from '@features/wallets'; +import { transactionService } from '@entities/transaction'; +import { TEST_ACCOUNTS, ZERO_BALANCE, toAddress } from '@shared/lib/utils'; const reset = createEvent(); const stepChanged = createEvent(); +const feeChanged = createEvent(); +const multisigDepositChanged = createEvent(); +const isFeeLoadingChanged = createEvent(); +const formSubmitted = createEvent(); export type Callbacks = { onComplete: () => void; @@ -19,13 +39,123 @@ const walletCreated = createEvent<{ threshold: number; }>(); const $step = restore(stepChanged, Step.INIT); - +const $fee = restore(feeChanged, ZERO_BALANCE); +const $multisigDeposit = restore(multisigDepositChanged, ZERO_BALANCE); +const $isFeeLoading = restore(isFeeLoadingChanged, true); const $callbacks = createStore(null).reset(reset); const callbacksApi = createApi($callbacks, { callbacksChanged: (state, props: Callbacks) => ({ ...state, ...props }), }); const $error = createStore('').reset(reset); + +// Options for selectors + +const $txWrappers = combine( + { + wallet: walletSelectModel.$walletForDetails, + wallets: walletModel.$wallets, + threshold: formModel.$createMultisigForm.fields.threshold.$value, + chains: networkModel.$chains, + chain: formModel.$createMultisigForm.fields.chain.$value, + accountSignatories: formModel.$accountSignatories, + constactSignatories: formModel.$contactSignatories, + }, + ({ wallet, threshold, chains, chain, wallets, accountSignatories, constactSignatories }) => { + if (!wallet || !chain || !threshold || !accountSignatories.length) return []; + + const filteredWallets = walletUtils.getWalletsFilteredAccounts(wallets, { + walletFn: (w) => !walletUtils.isProxied(w) && !walletUtils.isWatchOnly(w), + accountFn: (a, w) => { + const isBase = accountUtils.isBaseAccount(a); + const isPolkadotVault = walletUtils.isPolkadotVault(w); + + return (!isBase || !isPolkadotVault) && accountUtils.isChainAndCryptoMatch(a, chains[chain]); + }, + }); + + // fixme see if we can remove the type casting + return transactionService.getMultisigWrapper({ + wallets: filteredWallets || [], + account: accountSignatories[0] as unknown as Account, + signatories: [...constactSignatories, ...accountSignatories] as unknown as Account[], + }); + }, +); + +const $signer = combine( + { + txWrappers: $txWrappers, + accounts: formModel.$accountSignatories, + }, + ({ txWrappers, accounts }) => { + if (txWrappers.length === 0) return accounts[0]; + + if (transactionService.hasMultisig([txWrappers[0]])) { + return (txWrappers[0] as MultisigTxWrapper).multisigAccount; + } + + return (txWrappers[0] as ProxyTxWrapper).proxyAccount; + }, +); + +// Miscellaneous + +const $isChainConnected = combine( + { + chain: formModel.$createMultisigForm.fields.chain.$value, + statuses: networkModel.$connectionStatuses, + }, + ({ chain, statuses }) => { + if (!chain) return false; + + return networkUtils.isConnectedStatus(statuses[chain]); + }, +); + +const $remarkTx = combine( + { + chains: networkModel.$chains, + form: formModel.$createMultisigForm.$values, + account: $signer, + isConnected: $isChainConnected, + }, + ({ chains, form, account, isConnected }): Transaction | undefined => { + if (!isConnected || !account || !form.chain || !form.threshold) return undefined; + + return { + chainId: form.chain, + address: toAddress(account.accountId, { prefix: chains[form.chain].addressPrefix }), + type: TransactionType.REMARK, + args: { + remark: 'Multisig created with Nova Spektr', + }, + }; + }, + { skipVoid: false }, +); + +const $transaction = combine( + { + apis: networkModel.$apis, + chains: networkModel.$chains, + chain: formModel.$createMultisigForm.fields.chain.$value, + remarkTx: $remarkTx, + txWrappers: $txWrappers, + }, + ({ apis, chain, chains, remarkTx, txWrappers }) => { + if (!chain || !remarkTx) return undefined; + + return transactionService.getWrappedTransaction({ + api: apis[chain], + addressPrefix: chains[chain].addressPrefix, + transaction: remarkTx, + txWrappers, + }); + }, + { skipVoid: false }, +); + const $api = combine( { apis: networkModel.$apis, @@ -82,6 +212,26 @@ const $hasOwnSignatory = combine( }), ); +const $fakeTx = combine( + { + chain: formModel.$createMultisigForm.fields.chain.$value, + isConnected: $isChainConnected, + }, + ({ isConnected, chain }): Transaction | undefined => { + if (!chain || !isConnected) return undefined; + + return { + chainId: chain, + address: toAddress(TEST_ACCOUNTS[0], { prefix: 42 }), + type: TransactionType.ADD_PROXY, + args: { + remark: 'Multisig created with Nova Spektr', + }, + }; + }, + { skipVoid: false }, +); + sample({ clock: formModel.$createMultisigForm.submit, fn: () => Step.CONFIRM, @@ -110,15 +260,56 @@ sample({ target: $error, }); +// Submit + +sample({ + clock: formModel.$createMultisigForm.formValidated, + source: { + signer: $signer, + transaction: $transaction, + fee: $fee, + multisigDeposit: $multisigDeposit, + }, + filter: ({ transaction }) => { + return Boolean(transaction); + }, + fn: ({ multisigDeposit, signer, transaction, fee }, formData) => { + return { + transactions: { + wrappedTx: transaction!.wrappedTx, + multisigTx: transaction!.multisigTx, + coreTx: transaction!.coreTx, + }, + formData: { + ...formData, + fee, + account: signer, + multisigDeposit, + }, + }; + }, + target: formSubmitted, +}); + export const flowModel = { $isLoading: createWalletFx.pending, $error, $step, $hasOwnSignatory, + $fee, + $fakeTx, + $api, + $isFeeLoading, events: { reset, callbacksChanged: callbacksApi.callbacksChanged, walletCreated, stepChanged, + feeChanged, + multisigDepositChanged, + isFeeLoadingChanged, + }, + output: { + formSubmitted, }, }; diff --git a/src/renderer/widgets/CreateWallet/model/create-multisig-form-model.ts b/src/renderer/widgets/CreateWallet/model/create-multisig-form-model.ts index ca076da6fa..eb3439df80 100644 --- a/src/renderer/widgets/CreateWallet/model/create-multisig-form-model.ts +++ b/src/renderer/widgets/CreateWallet/model/create-multisig-form-model.ts @@ -7,12 +7,7 @@ import chains from '@shared/config/chains/chains.json'; import { accountUtils, walletModel, walletUtils } from '@entities/wallet'; import { networkModel, networkUtils } from '@entities/network'; import { ExtendedAccount, ExtendedContact } from '../ui/MultisigWallet/common/types'; - -type FormParams = { - threshold: number; - chain: ChainId; - name: string; -}; +import { FormParams } from '../lib/types'; const $createMultisigForm = createForm({ fields: { diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx index ffd1a08f57..9be7d8fbc0 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx @@ -7,7 +7,7 @@ import { useI18n } from '@app/providers'; import { useToggle } from '@shared/lib/hooks'; import { OperationResult } from '@entities/transaction'; import { ExtendedContact, ExtendedWallet } from './common/types'; -import { SelectSignatories, ConfirmSignatories, NameThreshold } from './components'; +import { SelectSignatoriesStep, ConfirmationStep, NameThresholdStep } from './components'; import { contactModel } from '@entities/contact'; import { DEFAULT_TRANSITION } from '@shared/lib/utils'; import { walletModel } from '@entities/wallet'; @@ -106,7 +106,7 @@ export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack } contentClass="flex h-[524px]" onClose={closeMultisigModal} > - @@ -121,10 +121,10 @@ export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack } {/* Should be before SelectSignatories to avoid hidden nova wallet icon */} {activeStep === Step.CONFIRMATION && ( - + )} - wallet.accounts).flat()} diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx index cf6c188e76..f350bfc24c 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx @@ -7,7 +7,7 @@ import { BaseModal, HeaderTitleText, Button, IconButton } from '@shared/ui'; import { useI18n } from '@app/providers'; import { useToggle } from '@shared/lib/hooks'; import { OperationResult } from '@entities/transaction'; -import { ConfirmSignatories, NameThreshold } from './components'; +import { ConfirmationStep, NameThresholdStep } from './components'; import { DEFAULT_TRANSITION } from '@shared/lib/utils'; import { flowModel } from '../../model/create-multisig-flow-model'; // import { SelectSignatories } from './components/SelectAccountSignatories'; @@ -105,14 +105,10 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { onClose={closeMultisigModal} > {createMultisigUtils.isInitStep(activeStep) && } - {createMultisigUtils.isNameThresholdStep(activeStep) && } + {createMultisigUtils.isNameThresholdStep(activeStep) && } {createMultisigUtils.isConfirmStep(activeStep) && (
- +
)} diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmSignatories.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmationStep.tsx similarity index 72% rename from src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmSignatories.tsx rename to src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmationStep.tsx index cb5daaaf85..36b9f5e770 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmSignatories.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmationStep.tsx @@ -1,3 +1,6 @@ +import { useForm } from 'effector-forms'; +import { useUnit } from 'effector-react'; + import { cnTw, RootExplorers } from '@shared/lib/utils'; import { useI18n } from '@app/providers'; import { Button, FootnoteText, SmallTitleText } from '@shared/ui'; @@ -7,6 +10,8 @@ import { ContactItem, ExplorersPopover } from '@entities/wallet'; import { Chain, WalletType } from '@shared/core'; import { flowModel } from '../../../model/create-multisig-flow-model'; import { Step } from '../../../lib/types'; +import { formModel } from '../../../model/create-multisig-form-model'; +import { FeeWithLabel, MultisigDepositWithLabel } from '@entities/transaction'; type Props = { wallets?: ExtendedWallet[]; @@ -15,15 +20,28 @@ type Props = { chain?: Chain; }; -export const ConfirmSignatories = ({ chain, wallets = [], accounts = [], contacts }: Props) => { +export const ConfirmationStep = ({ chain, wallets = [], accounts = [], contacts }: Props) => { const { t } = useI18n(); + const { + fields: { name, threshold }, + } = useForm(formModel.$createMultisigForm); + const signatories = useUnit(formModel.$signatories); + const api = useUnit(flowModel.$api); + const fakeTx = useUnit(flowModel.$fakeTx); const explorers = chain ? chain.explorers : RootExplorers; return (
- {t('createMultisigAccount.selectedSignatoriesTitle')} + {t('createMultisigAccount.newMultisigTitle')} + + + {t('createMultisigAccount.thresholdName')} +
+ {threshold.value}/{signatories.length} +
+ {t('createMultisigAccount.selectedSignatoriesTitle')}
{wallets.length > 0 && ( <> @@ -75,6 +93,20 @@ export const ConfirmSignatories = ({ chain, wallets = [], accounts = [], contact )} + + +
- -
+
+
+ +
); diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/NameThresholdStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/NameThresholdStep.tsx index c0fa3f23e7..8587e81028 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/NameThresholdStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/NameThresholdStep.tsx @@ -89,9 +89,9 @@ Props) => { placeholder={t('createMultisigAccount.chainPlaceholder')} label={t('createMultisigAccount.chainName')} className="w-[204px]" - selectedId={fields.chain.value} + selectedId={fields.chainId.value} options={chainOptions} - onChange={({ id }) => fields.chain.onChange(id as ChainId)} + onChange={({ id }) => fields.chainId.onChange(id as ChainId)} />
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatoriesForm.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatoriesForm.tsx index 2316804a5a..65fbec9340 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatoriesForm.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatoriesForm.tsx @@ -22,7 +22,7 @@ export const SelectSignatoriesForm = () => { const chains = useUnit(networkModel.$chains); const { - fields: { chain }, + fields: { chainId: chain }, } = useForm(formModel.$createMultisigForm); const multisigAlreadyExists = useUnit(formModel.$multisigAlreadyExists); const hasOwnSignatory = useUnit(flowModel.$hasOwnSignatory); diff --git a/src/renderer/widgets/RemoveProxyModal/model/remove-proxy-model.ts b/src/renderer/widgets/RemoveProxyModal/model/remove-proxy-model.ts index 3874641827..c8b9e1965a 100644 --- a/src/renderer/widgets/RemoveProxyModal/model/remove-proxy-model.ts +++ b/src/renderer/widgets/RemoveProxyModal/model/remove-proxy-model.ts @@ -348,7 +348,7 @@ sample({ filter: ({ removeProxyStore, wrappedTx }) => Boolean(removeProxyStore) && Boolean(wrappedTx), fn: ({ removeProxyStore, signatories, wrappedTx }) => ({ event: { - chain: removeProxyStore!.chain, + chainId: removeProxyStore!.chain.chainId, accounts: [removeProxyStore!.account], signatory: signatories?.[0], transactions: [wrappedTx!], @@ -378,7 +378,7 @@ sample({ fn: (proxyData, signParams) => ({ event: { ...signParams, - chain: proxyData.removeProxyStore!.chain, + chainId: proxyData.removeProxyStore!.chain.chainId, account: proxyData.removeProxyStore!.account, signatory: proxyData.removeProxyStore!.signatory, description: proxyData.removeProxyStore!.description, diff --git a/src/renderer/widgets/RemovePureProxyModal/model/remove-pure-proxy-model.ts b/src/renderer/widgets/RemovePureProxyModal/model/remove-pure-proxy-model.ts index e78225aaeb..5de1632cd8 100644 --- a/src/renderer/widgets/RemovePureProxyModal/model/remove-pure-proxy-model.ts +++ b/src/renderer/widgets/RemovePureProxyModal/model/remove-pure-proxy-model.ts @@ -379,7 +379,7 @@ sample({ }, fn: ({ removeProxyStore, signatories, wrappedTx, realAccount }) => ({ event: { - chain: removeProxyStore!.chain, + chainId: removeProxyStore!.chain.chainId, accounts: [realAccount!], signatory: signatories?.[0], transactions: [wrappedTx!], @@ -407,7 +407,7 @@ sample({ fn: (proxyData, signParams) => ({ event: { ...signParams, - chain: proxyData.removeProxyStore!.chain, + chainId: proxyData.removeProxyStore!.chain.chainId, account: proxyData.removeProxyStore!.account, signatory: proxyData.removeProxyStore!.signatory, description: proxyData.removeProxyStore!.description, diff --git a/src/renderer/widgets/Staking/BondExtra/model/bond-extra-model.ts b/src/renderer/widgets/Staking/BondExtra/model/bond-extra-model.ts index bc5e139edf..9912ca4897 100644 --- a/src/renderer/widgets/Staking/BondExtra/model/bond-extra-model.ts +++ b/src/renderer/widgets/Staking/BondExtra/model/bond-extra-model.ts @@ -272,7 +272,7 @@ sample({ return { event: { - chain: walletData!.chain, + chainId: walletData!.chain.chainId, accounts: wrapper ? [wrapper.proxyAccount] : bondData!.shards, signatory: bondData!.signatory, transactions: transactions!.map((tx) => tx.wrappedTx), @@ -299,7 +299,7 @@ sample({ fn: (bondFlowData, signParams) => ({ event: { ...signParams, - chain: bondFlowData.walletData!.chain, + chainId: bondFlowData.walletData!.chain.chainId, account: bondFlowData.bondData!.shards[0], signatory: bondFlowData.bondData!.signatory, description: bondFlowData.bondData!.description, diff --git a/src/renderer/widgets/Staking/BondNominate/model/bond-nominate-model.ts b/src/renderer/widgets/Staking/BondNominate/model/bond-nominate-model.ts index 9dd3ae8a9e..f5c61d9660 100644 --- a/src/renderer/widgets/Staking/BondNominate/model/bond-nominate-model.ts +++ b/src/renderer/widgets/Staking/BondNominate/model/bond-nominate-model.ts @@ -329,7 +329,7 @@ sample({ return { event: { - chain: walletData!.chain, + chainId: walletData!.chain.chainId, accounts: wrapper ? [wrapper.proxyAccount] : bondData!.shards, signatory: bondData!.signatory, transactions: transactions!.map((tx) => tx.wrappedTx), @@ -356,7 +356,7 @@ sample({ fn: (bondFlowData, signParams) => ({ event: { ...signParams, - chain: bondFlowData.walletData!.chain, + chainId: bondFlowData.walletData!.chain.chainId, account: bondFlowData.bondData!.shards[0], signatory: bondFlowData.bondData!.signatory, description: bondFlowData.bondData!.description, diff --git a/src/renderer/widgets/Staking/Nominate/model/nominate-model.ts b/src/renderer/widgets/Staking/Nominate/model/nominate-model.ts index 9e78f06654..b002050670 100644 --- a/src/renderer/widgets/Staking/Nominate/model/nominate-model.ts +++ b/src/renderer/widgets/Staking/Nominate/model/nominate-model.ts @@ -326,7 +326,7 @@ sample({ return { event: { - chain: walletData!.chain, + chainId: walletData!.chain.chainId, accounts: wrapper ? [wrapper.proxyAccount] : nominateData!.shards, signatory: nominateData!.signatory, transactions: transactions!.map((tx) => tx.wrappedTx), @@ -353,7 +353,7 @@ sample({ fn: (nominateFlowData, signParams) => ({ event: { ...signParams, - chain: nominateFlowData.walletData!.chain, + chainId: nominateFlowData.walletData!.chain.chainId, account: nominateFlowData.nominateData!.shards[0], signatory: nominateFlowData.nominateData!.signatory, description: nominateFlowData.nominateData!.description, diff --git a/src/renderer/widgets/Staking/Payee/model/payee-model.ts b/src/renderer/widgets/Staking/Payee/model/payee-model.ts index b970fe7a6f..615ccb8e53 100644 --- a/src/renderer/widgets/Staking/Payee/model/payee-model.ts +++ b/src/renderer/widgets/Staking/Payee/model/payee-model.ts @@ -271,7 +271,7 @@ sample({ return { event: { - chain: walletData!.chain, + chainId: walletData!.chain.chainId, accounts: wrapper ? [wrapper.proxyAccount] : payeeData!.shards, signatory: payeeData!.signatory, transactions: transactions!.map((tx) => tx.wrappedTx), @@ -298,7 +298,7 @@ sample({ fn: (payeeFlowData, signParams) => ({ event: { ...signParams, - chain: payeeFlowData.walletData!.chain, + chainId: payeeFlowData.walletData!.chain.chainId, account: payeeFlowData.payeeData!.shards[0], signatory: payeeFlowData.payeeData!.signatory, description: payeeFlowData.payeeData!.description, diff --git a/src/renderer/widgets/Staking/Restake/model/restake-model.ts b/src/renderer/widgets/Staking/Restake/model/restake-model.ts index cdab2aed60..75e56db547 100644 --- a/src/renderer/widgets/Staking/Restake/model/restake-model.ts +++ b/src/renderer/widgets/Staking/Restake/model/restake-model.ts @@ -101,7 +101,7 @@ sample({ }, fn: ({ restakeStore, networkStore, wrappedTxs }) => ({ event: { - chain: networkStore!.chain, + chainId: networkStore!.chain.chainId, accounts: restakeStore!.shards, signatory: restakeStore!.signatory, transactions: wrappedTxs!, @@ -134,7 +134,7 @@ sample({ fn: (transferData, signParams) => ({ event: { ...signParams, - chain: transferData.networkStore!.chain, + chainId: transferData.networkStore!.chain.chainId, account: transferData.restakeStore!.shards[0], signatory: transferData.restakeStore!.signatory, description: transferData.restakeStore!.description, diff --git a/src/renderer/widgets/Staking/Unstake/model/unstake-model.ts b/src/renderer/widgets/Staking/Unstake/model/unstake-model.ts index 3716ae6146..dbda1803da 100644 --- a/src/renderer/widgets/Staking/Unstake/model/unstake-model.ts +++ b/src/renderer/widgets/Staking/Unstake/model/unstake-model.ts @@ -101,7 +101,7 @@ sample({ }, fn: ({ unstakeStore, networkStore, wrappedTxs }) => ({ event: { - chain: networkStore!.chain, + chainId: networkStore!.chain.chainId, accounts: unstakeStore!.shards, signatory: unstakeStore!.signatory, transactions: wrappedTxs!, @@ -134,7 +134,7 @@ sample({ fn: (transferData, signParams) => ({ event: { ...signParams, - chain: transferData.networkStore!.chain, + chainId: transferData.networkStore!.chain.chainId, account: transferData.unstakeStore!.shards[0], signatory: transferData.unstakeStore!.signatory, description: transferData.unstakeStore!.description, diff --git a/src/renderer/widgets/Staking/Withdraw/model/withdraw-model.ts b/src/renderer/widgets/Staking/Withdraw/model/withdraw-model.ts index d62419ab06..714ed9bc42 100644 --- a/src/renderer/widgets/Staking/Withdraw/model/withdraw-model.ts +++ b/src/renderer/widgets/Staking/Withdraw/model/withdraw-model.ts @@ -101,7 +101,7 @@ sample({ }, fn: ({ withdrawData, networkStore, wrappedTxs }) => ({ event: { - chain: networkStore!.chain, + chainId: networkStore!.chain.chainId, accounts: withdrawData!.shards, signatory: withdrawData!.signatory, transactions: wrappedTxs!, @@ -134,7 +134,7 @@ sample({ fn: (withdrawData, signParams) => ({ event: { ...signParams, - chain: withdrawData.networkStore!.chain, + chainId: withdrawData.networkStore!.chain.chainId, account: withdrawData.withdrawData!.shards[0], signatory: withdrawData.withdrawData!.signatory, description: withdrawData.withdrawData!.description, diff --git a/src/renderer/widgets/Transfer/model/transfer-model.ts b/src/renderer/widgets/Transfer/model/transfer-model.ts index ffef7fb9ba..6fcbbfff33 100644 --- a/src/renderer/widgets/Transfer/model/transfer-model.ts +++ b/src/renderer/widgets/Transfer/model/transfer-model.ts @@ -114,7 +114,7 @@ sample({ }, fn: ({ transferStore, networkStore, wrappedTx }) => ({ event: { - chain: networkStore!.chain, + chainId: networkStore!.chain.chainId, accounts: [transferStore!.account], signatory: transferStore!.signatory, transactions: [wrappedTx!], @@ -147,7 +147,7 @@ sample({ fn: (transferData, signParams) => ({ event: { ...signParams, - chain: transferData.networkStore!.chain, + chainId: transferData.networkStore!.chain.chainId, account: transferData.transferStore!.account, signatory: transferData.transferStore!.signatory, description: transferData.transferStore!.description, From 7b05a3cca4af27eab0f52191b9a8478925ccc6d5 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 28 May 2024 14:57:06 +0200 Subject: [PATCH 07/90] fix: signer selection --- .../shared/api/translation/locales/en.json | 1 + .../model/create-multisig-flow-model.ts | 16 ++++- .../components/ConfirmationStep.tsx | 70 +++++++++++++++++-- 3 files changed, 80 insertions(+), 7 deletions(-) diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index 7c95623512..cbf12b82e6 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -120,6 +120,7 @@ "noWallets": "Looks like you don't have any non-watch only wallets", "noWalletsLabel": "The wallet list is empty", "searchContactPlaceholder": "Search", + "signingWith": "Signing with", "newMultisigTitle": "New multisig", "selectedSignatoriesTitle": "Selected signatories", "signatoriesDescription": "Add signatories to your multisig account", diff --git a/src/renderer/widgets/CreateWallet/model/create-multisig-flow-model.ts b/src/renderer/widgets/CreateWallet/model/create-multisig-flow-model.ts index adefa90d06..3ab53e9591 100644 --- a/src/renderer/widgets/CreateWallet/model/create-multisig-flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/create-multisig-flow-model.ts @@ -33,6 +33,7 @@ const multisigDepositChanged = createEvent(); const isFeeLoadingChanged = createEvent(); const formSubmitted = createEvent(); const flowFinished = createEvent(); +const selectedSignerChanged = createEvent(); export type Callbacks = { onComplete: () => void; @@ -42,6 +43,7 @@ const walletCreated = createEvent<{ name: string; threshold: number; }>(); +const $selectedSigner = restore(selectedSignerChanged, null); const $step = restore(stepChanged, Step.INIT); const $fee = restore(feeChanged, ZERO_BALANCE); const $multisigDeposit = restore(multisigDepositChanged, ZERO_BALANCE); @@ -92,14 +94,19 @@ const $txWrappers = combine( }, ); +// $selected signer will be taken into account in case we have +// several accountSignatories. Otherwise it is the first accountSignatory const $signer = combine( { txWrappers: $txWrappers, - accounts: formModel.$accountSignatories, + accountSignatories: formModel.$accountSignatories, + selectedSigner: $selectedSigner, }, - ({ txWrappers, accounts }) => { + ({ txWrappers, accountSignatories, selectedSigner }) => { // fixme this should be dynamic depending on if the signer is a proxy - return accounts[0] as unknown as Account; + return accountSignatories.length > 1 && selectedSigner + ? selectedSigner + : (accountSignatories[0] as unknown as Account); // if (txWrappers.length === 0) return accounts[0]; // if (transactionService.hasMultisig([txWrappers[0]])) { @@ -399,6 +406,8 @@ export const flowModel = { $fakeTx, $api, $isFeeLoading, + $selectedSigner, + $signer, events: { reset, callbacksChanged: callbacksApi.callbacksChanged, @@ -407,5 +416,6 @@ export const flowModel = { feeChanged, multisigDepositChanged, isFeeLoadingChanged, + selectedSignerChanged, }, }; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmationStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmationStep.tsx index 78ebf18485..d50ee96e26 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmationStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmationStep.tsx @@ -1,12 +1,12 @@ import { useForm } from 'effector-forms'; import { useUnit } from 'effector-react'; -import { cnTw, RootExplorers } from '@shared/lib/utils'; +import { cnTw, RootExplorers, toAddress } from '@shared/lib/utils'; import { useI18n } from '@app/providers'; -import { BodyText, Button, FootnoteText, SmallTitleText } from '@shared/ui'; +import { BodyText, Button, FootnoteText, Select, SmallTitleText } from '@shared/ui'; import { ExtendedWallet, ExtendedContact, ExtendedAccount } from '../common/types'; import { WalletItem } from './WalletItem'; -import { ContactItem, ExplorersPopover } from '@entities/wallet'; +import { AccountAddress, ContactItem, ExplorersPopover, walletModel, walletUtils } from '@entities/wallet'; import { Chain, WalletType } from '@shared/core'; import { flowModel } from '../../../model/create-multisig-flow-model'; import { Step } from '../../../lib/types'; @@ -25,6 +25,7 @@ export const ConfirmationStep = ({ chain, wallets = [], accounts = [], contacts const { fields: { name, threshold }, } = useForm(formModel.$createMultisigForm); + const accountSignatories = useUnit(formModel.$accountSignatories); const signatories = useUnit(formModel.$signatories); const api = useUnit(flowModel.$api); const fakeTx = useUnit(flowModel.$fakeTx); @@ -33,6 +34,13 @@ export const ConfirmationStep = ({ chain, wallets = [], accounts = [], contacts return (
+ {accountSignatories.length > 1 && ( + <> + {t('createMultisigAccount.signingWith')} + + + )} + {t('createMultisigAccount.newMultisigTitle')} @@ -93,7 +101,8 @@ export const ConfirmationStep = ({ chain, wallets = [], accounts = [], contacts )} - +
+
); }; + +const AccountSelector = ({ chain }: { chain?: Chain }) => { + const { t } = useI18n(); + + const selectedSigner = useUnit(flowModel.$selectedSigner); + const accountSignatories = useUnit(formModel.$accountSignatories); + const wallets = useUnit(walletModel.$wallets); + // const proxiedAccounts = useUnit(formModel.$proxiedAccounts); + + // if (proxiedAccounts.length <= 1) return null; + + if (!chain) return null; + + const options = accountSignatories.map(({ accountId, name }) => { + // const isShard = accountUtils.isShardAccount(account); + const address = toAddress(accountId, { prefix: chain.addressPrefix }); + + return { + id: accountId, + value: accountId, + element: ( +
+ + {/* */} +
+ ), + }; + }); + + return ( +
+ + + {t(description.errorText())} + +
+ ); +}; + const FeeSection = () => { const { fields: { account }, From 851be1c471d1c0a710ae345f00a34e1634f79d98 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Wed, 29 May 2024 11:56:54 +0200 Subject: [PATCH 13/90] chore: wip --- .../CreateWallet/ui/MultisigWallet/MultisigWallet.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx index 1feac9793d..a0a0c00073 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx @@ -1,11 +1,12 @@ import { useForm } from 'effector-forms'; -import { useEffect } from 'react'; +import { ComponentProps, useEffect } from 'react'; import { useUnit } from 'effector-react'; import noop from 'lodash/noop'; import { BaseModal, HeaderTitleText, IconButton } from '@shared/ui'; import { useI18n } from '@app/providers'; import { useToggle } from '@shared/lib/hooks'; +import { OperationResult } from '@entities/transaction'; import { ConfirmationStep, NameThresholdStep } from './components'; import { DEFAULT_TRANSITION } from '@shared/lib/utils'; import { flowModel } from '../../model/flow-model'; @@ -15,7 +16,7 @@ import { SelectSignatoriesForm } from './components/SelectSignatoriesForm'; import { Step } from '../../lib/types'; import { OperationSign } from '@features/operations'; -// type OperationResultProps = Pick, 'variant' | 'description'>; +type OperationResultProps = Pick, 'variant' | 'description'>; type Props = { isOpen: boolean; @@ -30,8 +31,8 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { const { fields: { chain }, } = useForm(formModel.$createMultisigForm); - // const isLoading = useUnit(flowModel.$isLoading); - // const error = useUnit(flowModel.$error); + const isLoading = useUnit(flowModel.$isLoading); + const error = useUnit(flowModel.$error); const activeStep = useUnit(flowModel.$step); const accountSignatories = useUnit(formModel.$accountSignatories); const contactSignatories = useUnit(formModel.$contactSignatories); From 89ba44b7d671544f24a4e881091006ce09df042b Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Wed, 29 May 2024 14:32:03 +0200 Subject: [PATCH 14/90] feat: submition ok --- .../OperationSubmit/model/submit-model.ts | 1 + .../shared/config/chains/chains_dev.json | 370 +++++------------- .../ui/MultisigWallet/MultisigWallet.tsx | 43 +- .../components/NameThresholdStep.tsx | 7 +- 4 files changed, 103 insertions(+), 318 deletions(-) diff --git a/src/renderer/features/operations/OperationSubmit/model/submit-model.ts b/src/renderer/features/operations/OperationSubmit/model/submit-model.ts index 04f19879b8..09c297e588 100644 --- a/src/renderer/features/operations/OperationSubmit/model/submit-model.ts +++ b/src/renderer/features/operations/OperationSubmit/model/submit-model.ts @@ -60,6 +60,7 @@ const signAndSubmitExtrinsicsFx = createEffect( const boundExtrinsicFailed = scopeBind(extrinsicFailed, { safe: true }); wrappedTxs.forEach((transaction, index) => { + console.log('<><> go', index, transaction, signatures[index], txPayloads[index]); transactionService.signAndSubmit(transaction, signatures[index], txPayloads[index], api, (executed, params) => { if (executed) { boundExtrinsicSucceeded(params as ExtrinsicResultParams); diff --git a/src/renderer/shared/config/chains/chains_dev.json b/src/renderer/shared/config/chains/chains_dev.json index 806a690dab..a9133d40ed 100644 --- a/src/renderer/shared/config/chains/chains_dev.json +++ b/src/renderer/shared/config/chains/chains_dev.json @@ -5,11 +5,7 @@ "addressPrefix": 0, "chainId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot.svg", - "options": [ - "multisig", - "regular_proxy", - "pure_proxy" - ], + "options": ["multisig", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://polkadot.public.curie.radiumblock.co/ws", @@ -100,11 +96,7 @@ "addressPrefix": 2, "chainId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama.svg", - "options": [ - "multisig", - "regular_proxy", - "pure_proxy" - ], + "options": ["multisig", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://kusama-rpc.dwellir.com", @@ -195,12 +187,7 @@ "addressPrefix": 42, "chainId": "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Westend_Testnet.svg", - "options": [ - "testnet", - "multisig", - "regular_proxy", - "pure_proxy" - ], + "options": ["testnet", "multisig", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://westend-rpc.dwellir.com", @@ -259,6 +246,12 @@ "type": "subquery", "url": "https://api.subquery.network/sq/nova-wallet/novasama-westend-proxy" } + ], + "multisig": [ + { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/novasama-westend-proxy__bm92Y" + } ] } }, @@ -269,9 +262,7 @@ "chainId": "0x67f9723393ef76214df0118c34bbbd3dbebc8ed46a10973a8c969d48fe7598c9", "parentId": "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Westmint_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://westmint-rpc.dwellir.com", @@ -349,9 +340,7 @@ "chainId": "0x48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama_Asset_Hub.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://sys.ibp.network/statemine", @@ -482,9 +471,7 @@ "chainId": "0xbaf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Karura.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://karura-rpc-0.aca-api.network", @@ -920,9 +907,7 @@ "chainId": "0xf1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Shiden.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.shiden.astar.network", @@ -1128,9 +1113,7 @@ "chainId": "0x9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bifrost_Kusama.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://bifrost-rpc.liebi.com/ws", @@ -1386,9 +1369,7 @@ "chainId": "0x9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kintsugi.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://api-kusama.interlay.io/parachain", @@ -1603,9 +1584,7 @@ "addressPrefix": 7, "chainId": "0x742a2ca70c2fda6cee4f8df98d64c4c670a052d9568058982dad9d5a7a135c5b", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Edgeware.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://edgeware-rpc.dwellir.com", @@ -1664,9 +1643,7 @@ "chainId": "0x64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/ParallelHeiko.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://heiko-rpc.parallel.fi", @@ -1842,9 +1819,7 @@ "chainId": "0xa85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Basilisk.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.basilisk.cloud", @@ -1972,9 +1947,7 @@ "chainId": "0xaa3876c1dc8a1afcc2e9a685a49ff7704cfd36ad8c90bf2702b9d1b00cc40011", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Altair.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://altair.api.onfinality.io/public-ws", @@ -2024,9 +1997,7 @@ "chainId": "0xd43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Khala.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://khala-api.phala.network/ws", @@ -2266,9 +2237,7 @@ "chainId": "0x411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/KILT_Spiritnet.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://kilt-rpc.dwellir.com", @@ -2325,9 +2294,7 @@ "addressPrefix": 38, "chainId": "0xa0c6e3bac382b316a68bca7141af1fba507207594c761076847ce358aeedcc21", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/KILT_Peregrine_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://peregrine.kilt.io/parachain-public-ws/", @@ -2359,9 +2326,7 @@ "chainId": "0x4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Calamari.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://calamari.systems", @@ -2619,9 +2584,7 @@ "chainId": "0xfc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Acala.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc-acala.luckyfriday.io", @@ -2907,9 +2870,7 @@ "chainId": "0x9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Astar.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.astar.network", @@ -3123,9 +3084,7 @@ "chainId": "0xe61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Parallel.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://parallel-rpc.dwellir.com", @@ -3411,9 +3370,7 @@ } ] }, - "options": [ - "multisig" - ] + "options": ["multisig"] }, { "name": "Polkadot Asset Hub", @@ -3422,9 +3379,7 @@ "chainId": "0x68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Asset_Hub.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://sys.ibp.network/statemint", @@ -3522,9 +3477,7 @@ "chainId": "0x631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Robonomics.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://kusama.rpc.robonomics.network/", @@ -3644,9 +3597,7 @@ "chainId": "0x6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Picasso.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://picasso-rpc.composable.finance", @@ -3741,9 +3692,7 @@ "chainId": "0x1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Zeitgeist.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://zeitgeist-rpc.dwellir.com", @@ -3844,9 +3793,7 @@ } ] }, - "options": [ - "multisig" - ] + "options": ["multisig"] }, { "name": "Subsocial", @@ -3894,9 +3841,7 @@ } ] }, - "options": [ - "multisig" - ] + "options": ["multisig"] }, { "name": "Crust Shadow", @@ -3905,9 +3850,7 @@ "chainId": "0xd4c0c08ca49dc7c680c3dac71a7c0703e5b222f4b6c03fe4c5219bb8f22c18dc", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Crust_Shadow.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc2-shadow.crust.network/", @@ -3957,9 +3900,7 @@ "chainId": "0xcdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Integritee.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://kusama.api.integritee.network", @@ -4013,9 +3954,7 @@ "chainId": "0xb3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Centrifuge.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://centrifuge-rpc.dwellir.com", @@ -4069,11 +4008,7 @@ "chainId": "0xafdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/HydraDX.svg", - "options": [ - "multisig", - "regular_proxy", - "pure_proxy" - ], + "options": ["multisig", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://hydradx-rpc.dwellir.com", @@ -4545,9 +4480,7 @@ "chainId": "0xbf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Interlay.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://api.interlay.io/parachain", @@ -4797,9 +4730,7 @@ "chainId": "0x97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Nodle.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://eden-rpc.dwellir.com", @@ -4853,9 +4784,7 @@ "chainId": "0x1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Phala.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://phala-rpc.dwellir.com", @@ -4913,9 +4842,7 @@ "chainId": "0x0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Turing.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.turing.oak.tech", @@ -5073,9 +5000,7 @@ "addressPrefix": 42, "chainId": "0x70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/AlephZero.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://ws.azero.dev", @@ -5122,9 +5047,7 @@ "chainId": "0xdaab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Composable.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.composable.finance", @@ -5213,9 +5136,7 @@ "addressPrefix": 88, "chainId": "0x3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadex.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://polkadex.api.onfinality.io/public-ws", @@ -5386,9 +5307,7 @@ "chainId": "0x262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bifrost_Polkadot.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", @@ -5595,9 +5514,7 @@ "chainId": "0x2fc8bb6ed7c0051bdcf4866c322ed32b6276572713607e3297ccf411b8f14aa9", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Litentry.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.litentry-parachain.litentry.io", @@ -5862,9 +5779,7 @@ "addressPrefix": 42, "chainId": "0x05d5279c52c484cc80396535a316add7d47b1c5b9e0398dd1f584149341460c5", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/AlephZero_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://ws.test.azero.dev", @@ -5887,9 +5802,7 @@ "addressPrefix": 42, "chainId": "0xe1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonbase_Alpha_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://frag-moonbase-relay-rpc-ws.g.moonbase.moonbeam.network", @@ -5912,9 +5825,7 @@ "addressPrefix": 42, "chainId": "0x3c3183f6d701500766ff7d147b79c4f10014a095eaaa98e960dcef6b3ead50ee", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polymesh_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://testnet-rpc.polymesh.live", @@ -5947,9 +5858,7 @@ "chainId": "0xfeb426ca713f0f46c96465b8f039890370cf6bfd687c9076ea2843f58a6ae8a7", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kabocha.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://kabocha.jelliedowl.com", @@ -5988,9 +5897,7 @@ "chainId": "0x35a06bfec2edf0ff4be89a6428ccd9ff5bd0167d618c5a0d4341f9600a458d14", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bajun.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc-parachain.bajun.network", @@ -6044,9 +5951,7 @@ "chainId": "0xca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Imbue.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://kusama.imbuenetwork.com", @@ -6084,9 +5989,7 @@ "addressPrefix": 42, "chainId": "0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Rococo_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://rococo-rpc.polkadot.io/", @@ -6110,9 +6013,7 @@ "chainId": "0xd42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Tinkernet.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://tinkernet-rpc.dwellir.com", @@ -6151,9 +6052,7 @@ "chainId": "0xcceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Amplitude.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc-amplitude.pendulumchain.tech", @@ -6252,9 +6151,7 @@ } ] }, - "options": [ - "multisig" - ] + "options": ["multisig"] }, { "name": "Ternoa Alphanet", @@ -6262,9 +6159,7 @@ "addressPrefix": 42, "chainId": "0x18bcdb75a0bba577b084878db2dc2546eb21504eaad4b564bb7d47f9d02b6ace", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Ternoa_Alphanet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://alphanet.ternoa.com", @@ -6295,9 +6190,7 @@ "addressPrefix": 51, "chainId": "0xd54f0988402deb4548538626ce37e4a318441ea0529ca369400ebec4e04dfe4b", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Turing_Staging.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://rpc.turing-staging.oak.tech", @@ -6320,9 +6213,7 @@ "addressPrefix": 42, "chainId": "0xa2ee5a1f55a23dccd0c35e36512f9009e6e50a5654e8e5e469445d0748632aa8", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Governance2_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://governance2-testnet.litentry.io", @@ -6391,9 +6282,7 @@ "addressPrefix": 7, "chainId": "0x8da6a03e0989154ff8c1977cbc0cbd55f6879d8759c272a4f3c078cef794bf5f", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Beresheet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://beresheet.jelliedowl.net", @@ -6447,9 +6336,7 @@ } ] }, - "options": [ - "multisig" - ] + "options": ["multisig"] }, { "name": "Myriad", @@ -6525,9 +6412,7 @@ "addressPrefix": 55, "chainId": "0x50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/XX_network.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://xxnetwork-rpc.dwellir.com", @@ -6584,9 +6469,7 @@ "chainId": "0x5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Pendulum.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc-pendulum.prd.pendulumchain.tech", @@ -6648,9 +6531,7 @@ "addressPrefix": 42, "chainId": "0xa6ffcef7fb8caadf7f6c5ad8ada65e3eaa90d1604f3eabda546ff1d486865a0c", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Aventus_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://public-rpc.public-testnet.aventus.io", @@ -6721,9 +6602,7 @@ "chainId": "0x4319cc49ee79495b57a1fec4d2bd43f59052dcc690276de566c2691d6df4f7b8", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Crust_Parachain.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://crust-parachain.crustapps.net", @@ -6764,9 +6643,7 @@ "chainId": "0x3a5a5cd27eb15fd26c37315a0f0b938733bb798c897428448efac5e6150cad06", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kintsugi_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://api-dev-kintsugi.interlay.io:443/parachain", @@ -6951,9 +6828,7 @@ "chainId": "0xdce5477cfca571c2cb652f38bbb70429004be3cf9649dd2b4ad9455b2251fe43", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Hashed.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://c3.hashed.live", @@ -6988,9 +6863,7 @@ "addressPrefix": 42, "chainId": "0x2f0555cc76fc2840a25a6ea3b9637146806f1f44b090c175ffde2a7e5ab36c03", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bittensor.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://entrypoint-finney.opentensor.ai:443", @@ -7028,9 +6901,7 @@ "addressPrefix": 71, "chainId": "0x6c5894837ad89b6d92b114a2fb3eafa8fe3d26a54848e3447015442cd6ef4e66", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/3DPass.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.3dpscan.io", @@ -7074,9 +6945,7 @@ "chainId": "0xe358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Ajuna.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc-parachain.ajuna.network", @@ -7112,9 +6981,7 @@ "chainId": "0x4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Frequency.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://0.rpc.frequency.xyz", @@ -7156,9 +7023,7 @@ "addressPrefix": 137, "chainId": "0xfe1b4c55fd4d668101126434206571a7838a8b6b93a6d1b95d607e78e6c53763", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Vara.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.vara-network.io", @@ -7229,9 +7094,7 @@ "chainId": "0xdcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Bridge_Hub.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://sys.ibp.network/bridgehub-polkadot", @@ -7272,9 +7135,7 @@ "chainId": "0x00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama_Bridge_Hub.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://sys.ibp.network/bridgehub-kusama", @@ -7315,9 +7176,7 @@ "chainId": "0x46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Collectives.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://sys.ibp.network/collectives-polkadot", @@ -7366,9 +7225,7 @@ "chainId": "0x67221cd96c1551b72d55f65164d6a39f31b570c77a05c90e31931b0e2f379e13", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Amplitude_foucoco.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://rpc-foucoco.pendulumchain.tech/", @@ -7392,9 +7249,7 @@ "chainId": "0x418ae94c9fce02b1ab3b5bc211cd2f2133426f2861d97482bbdfdac1bbb0fb92", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Interlay_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://api-testnet.interlay.io:443/parachain", @@ -7615,9 +7470,7 @@ "chainId": "0xb3dd5ad6a82872b30aabaede8f41dfd4ff6c32ff82f8757d034a45be63cf104c", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/krest.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://wss-krest.peaq.network", @@ -7657,9 +7510,7 @@ "addressPrefix": 42, "chainId": "0x58d1393b47b11707978fbc07e77d7b6f7d9aa88d207dc008a52385f7dba6156a", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Jur.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://jur-mainnet-archive-rpc-1.icebergnodes.io", @@ -7806,9 +7657,7 @@ "chainId": "0x7c34d42fc815d392057c78b49f2755c753440ccd38bcb0405b3bcfb601d08734", "parentId": "0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/AssetHub_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://rococo-asset-hub-rpc.dwellir.com", @@ -7864,9 +7713,7 @@ "chainId": "0x6ab1bd8aed6d5fdcaf347826bfcd0172681181edf8356b90cb3cf47076698ae2", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Energy_Web_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://ewx-staging-parachain-argon-wmfbanx0xb.energyweb.org/ws", @@ -7890,9 +7737,7 @@ "chainId": "0x161db6cdc5896fe55ef12b4778fe78dd65d7af43f65c601786b88d7a93ebc58a", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Watr.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://watr-rpc.watr-api.network", @@ -7915,9 +7760,7 @@ "addressPrefix": 126, "chainId": "0x6b5e488e0fa8f9821110d5c13f4c468abcd43ce5e297e62b34c53c3346465956", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Joystream.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.joystream.org", @@ -8012,9 +7855,7 @@ "name": "Polimec token" } ], - "options": [ - "multisig" - ], + "options": ["multisig"], "externalApi": { "history": [ { @@ -8053,9 +7894,7 @@ "name": "Energy Web token" } ], - "options": [ - "multisig" - ], + "options": ["multisig"], "externalApi": { "history": [ { @@ -8071,9 +7910,7 @@ "addressPrefix": 42, "chainId": "0xac123be800b7c9a3e3449bb70edd8e3d9008d27826381451eebf94bce1db1fbe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Energy_Web_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://public-rpc.testnet.energywebx.com", @@ -8169,11 +8006,7 @@ "chainId": "0x401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonriver.svg", - "options": [ - "ethereum_based", - "regular_proxy", - "pure_proxy" - ], + "options": ["ethereum_based", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://wss.api.moonriver.moonbeam.network", @@ -8508,10 +8341,7 @@ "chainId": "0x91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", "parentId": "0xe1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonbase_Alpha_Testnet.svg", - "options": [ - "testnet", - "ethereum_based" - ], + "options": ["testnet", "ethereum_based"], "nodes": [ { "url": "wss://wss.testnet.moonbeam.network", @@ -8558,11 +8388,7 @@ "chainId": "0xfe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonbeam.svg", - "options": [ - "ethereum_based", - "regular_proxy", - "pure_proxy" - ], + "options": ["ethereum_based", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://wss.api.moonbeam.network", @@ -8912,11 +8738,7 @@ "addressPrefix": 42, "chainId": "0xeb9f47779a9f5033c160c03511b5e4c1b2869210d7bc78a6ad7d0f28897455a7", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Governance2_Testnet.svg", - "options": [ - "testnet", - "regular_proxy", - "pure_proxy" - ], + "options": ["testnet", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://novasama.co", @@ -8954,9 +8776,7 @@ "addressPrefix": 42, "chainId": "0x77afd6190f1554ad45fd0d31aee62aacc33c6db0ea801129acb813f913e0764f", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Paseo_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://rpc.ibp.network/paseo", @@ -8992,9 +8812,7 @@ "chainId": "0x0441383e31d1266a92b4cb2ddd4c2e3661ac476996db7e5844c52433b81fe782", "parentId": "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/BridgeHub_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://westend-bridge-hub-rpc.dwellir.com", @@ -9033,9 +8851,7 @@ "addressPrefix": 41, "chainId": "0x7bbb72faf3d6d997ebe622a4e0ebfb6fdacf905b6141c86a3122cd479213a8d8", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polimec_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://rpc.rolimec.org", diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx index a0a0c00073..cf1ac7d9d2 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx @@ -1,12 +1,11 @@ import { useForm } from 'effector-forms'; -import { ComponentProps, useEffect } from 'react'; +import { useEffect } from 'react'; import { useUnit } from 'effector-react'; import noop from 'lodash/noop'; -import { BaseModal, HeaderTitleText, IconButton } from '@shared/ui'; +import { BaseModal, HeaderTitleText } from '@shared/ui'; import { useI18n } from '@app/providers'; import { useToggle } from '@shared/lib/hooks'; -import { OperationResult } from '@entities/transaction'; import { ConfirmationStep, NameThresholdStep } from './components'; import { DEFAULT_TRANSITION } from '@shared/lib/utils'; import { flowModel } from '../../model/flow-model'; @@ -14,9 +13,7 @@ import { createMultisigUtils } from '../../lib/create-multisig-utils'; import { formModel } from '../../model/form-model'; import { SelectSignatoriesForm } from './components/SelectSignatoriesForm'; import { Step } from '../../lib/types'; -import { OperationSign } from '@features/operations'; - -type OperationResultProps = Pick, 'variant' | 'description'>; +import { OperationSign, OperationSubmit } from '@features/operations'; type Props = { isOpen: boolean; @@ -31,8 +28,6 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { const { fields: { chain }, } = useForm(formModel.$createMultisigForm); - const isLoading = useUnit(flowModel.$isLoading); - const error = useUnit(flowModel.$error); const activeStep = useUnit(flowModel.$step); const accountSignatories = useUnit(formModel.$accountSignatories); const contactSignatories = useUnit(formModel.$contactSignatories); @@ -61,12 +56,8 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { setTimeout(params?.complete ? onComplete : params?.closeAll ? onClose : noop, DEFAULT_TRANSITION); }; - // const getResultProps = (): OperationResultProps => { - // if (isLoading) return { variant: 'loading' }; - // if (error) return { variant: 'error', description: error }; - - // return { variant: 'success', description: t('createMultisigAccount.successMessage') }; - // }; + if (createMultisigUtils.isSubmitStep(activeStep)) + return ; const modalTitle = (
@@ -76,14 +67,7 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { return ( <> - + {createMultisigUtils.isInitStep(activeStep) && } {createMultisigUtils.isNameThresholdStep(activeStep) && } {createMultisigUtils.isConfirmStep(activeStep) && ( @@ -94,21 +78,6 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { {createMultisigUtils.isSignStep(activeStep) && ( flowModel.events.stepChanged(Step.CONFIRM)} /> )} - - {/* closeMultisigModal({ complete: true })} - > - {error && } - */} - closeMultisigModal()} - /> ); diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/NameThresholdStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/NameThresholdStep.tsx index 41515a8347..3c6e9dc972 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/NameThresholdStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/NameThresholdStep.tsx @@ -7,7 +7,7 @@ import { useI18n } from '@app/providers'; import { DropdownOption } from '@shared/ui/types'; import { networkModel, networkUtils } from '@entities/network'; import { ChainTitle } from '@entities/chain'; -import { Signatory, type Chain, type ChainId } from '@shared/core'; +import { Signatory, type Chain } from '@shared/core'; import { formModel } from '../../../model/form-model'; import { flowModel } from '../../../model/flow-model'; import { Step } from '../../../lib/types'; @@ -26,13 +26,13 @@ const getThresholdOptions = (optionsAmount: number): DropdownOption[] => }); }; -const getChainOptions = (chains: Chain[]): DropdownOption[] => { +const getChainOptions = (chains: Chain[]): DropdownOption[] => { return chains .filter((c) => networkUtils.isMultisigSupported(c.options)) .map((chain) => ({ id: chain.chainId.toString(), element: , - value: chain.chainId, + value: chain, })); }; @@ -133,7 +133,6 @@ Props) => { - {/* )} */}
From 3fa1ff8270b61f33c10bbb8a7fe2431fc1c85894 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Wed, 29 May 2024 14:49:16 +0200 Subject: [PATCH 15/90] feat: some console lgos --- .../OperationSubmit/model/submit-model.ts | 2 +- .../widgets/CreateWallet/model/flow-model.ts | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/renderer/features/operations/OperationSubmit/model/submit-model.ts b/src/renderer/features/operations/OperationSubmit/model/submit-model.ts index 09c297e588..a908e7987f 100644 --- a/src/renderer/features/operations/OperationSubmit/model/submit-model.ts +++ b/src/renderer/features/operations/OperationSubmit/model/submit-model.ts @@ -60,7 +60,6 @@ const signAndSubmitExtrinsicsFx = createEffect( const boundExtrinsicFailed = scopeBind(extrinsicFailed, { safe: true }); wrappedTxs.forEach((transaction, index) => { - console.log('<><> go', index, transaction, signatures[index], txPayloads[index]); transactionService.signAndSubmit(transaction, signatures[index], txPayloads[index], api, (executed, params) => { if (executed) { boundExtrinsicSucceeded(params as ExtrinsicResultParams); @@ -179,5 +178,6 @@ export const submitModel = { }, output: { formSubmitted, + extrinsicSucceeded, }, }; diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index 2dea4ce33e..0971df91ae 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -55,7 +55,6 @@ const callbacksApi = createApi($callbacks, { }); const $error = createStore('').reset(reset); - const $wrappedTx = createStore(null).reset(flowFinished); const $coreTx = createStore(null).reset(flowFinished); const $multisigTx = createStore(null).reset(flowFinished); @@ -138,7 +137,7 @@ const $transaction = combine( threshold: formModel.$createMultisigForm.fields.threshold.$value, multisigAccountId: formModel.$multisigAccountId, }, - ({ apis, chain, chains, remarkTx, signatories, signer, threshold, multisigAccountId }) => { + ({ apis, chain, remarkTx, signatories, signer, threshold, multisigAccountId }) => { if (!chain || !remarkTx) return undefined; return transactionService.getWrappedTransaction({ @@ -183,6 +182,8 @@ const createWalletFx = createEffect( const accountIds = signatories.map((s) => s.accountId); const accountId = accountUtils.getMultisigAccountId(accountIds, threshold, cryptoType); + console.log('<><>Multisig wallet creation', accountId, name, threshold, signatories, chainId, cryptoType); + walletModel.events.multisigCreated({ wallet: { name, @@ -249,13 +250,16 @@ sample({ }); sample({ - clock: walletCreated, + clock: submitModel.output.extrinsicSucceeded, source: { + name: formModel.$createMultisigForm.fields.name.$value, + threshold: formModel.$createMultisigForm.fields.threshold.$value, signatories: formModel.$signatories, chain: formModel.$createMultisigForm.fields.chain.$value, }, - fn: ({ signatories, chain }, resultValues) => ({ - ...resultValues, + fn: ({ signatories, chain, name, threshold }) => ({ + name, + threshold, chainId: chain.chainId, signatories: sortBy(signatories, 'accountId'), isEthereumChain: networkUtils.isEthereumBased(chain.options), From 37bd073a3b2172590382cb5f6d0ed825cd095f30 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Wed, 29 May 2024 18:50:32 +0200 Subject: [PATCH 16/90] chore: refactor --- .../shared/api/translation/locales/en.json | 6 +- .../widgets/CreateWallet/model/flow-model.ts | 15 +- .../widgets/CreateWallet/model/form-model.ts | 15 +- .../ui/MultisigWallet/ConfirmationStep.tsx | 176 +++++++++++ .../ui/MultisigWallet/MultisigWallet.tsx | 21 +- .../{components => }/NameThresholdStep.tsx | 29 +- ...riesForm.tsx => SelectSignatoriesStep.tsx} | 39 +-- .../components/ConfirmationStep.tsx | 174 ----------- ...tSignatories.tsx => SelectSignatories.tsx} | 15 +- .../components/SelectSignatoriesStep.tsx | 292 ------------------ .../ui/MultisigWallet/components/index.ts | 5 +- 11 files changed, 241 insertions(+), 546 deletions(-) create mode 100644 src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx rename src/renderer/widgets/CreateWallet/ui/MultisigWallet/{components => }/NameThresholdStep.tsx (81%) rename src/renderer/widgets/CreateWallet/ui/MultisigWallet/{components/SelectSignatoriesForm.tsx => SelectSignatoriesStep.tsx} (61%) delete mode 100644 src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmationStep.tsx rename src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/{SelectAccountSignatories.tsx => SelectSignatories.tsx} (98%) delete mode 100644 src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatoriesStep.tsx diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index 063d3a01d8..b36a685bda 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -117,7 +117,10 @@ "nameLabel": "Account", "namePlaceholder": "Choose wallet name", "newMultisigTitle": "New multisig", - "noOwnSignatory": "You need at least one owned account as part of the signatories", + "noOwnSignatory": "You need at least 1 owned account as part of the signatories", + "noOwnSignatoryTitle": "No owned account", + "notEnoughSignatories": "You need to select at least 2 signatories", + "notEnoughSignatoriesTitle": "Not enough signatories", "noWallets": "Looks like you don't have any non-watch only wallets", "noWalletsLabel": "The wallet list is empty", "searchContactPlaceholder": "Search", @@ -140,7 +143,6 @@ "thresholdName": "Threshold", "thresholdPlaceholder": "Select threshold", "title": "Create Multisig Wallet", - "walletAlertTitle": "Select wallet", "walletFormTitle": "Set up your wallet", "walletNameLabel": "Wallet name", "walletsTab": "Your wallets", diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index 0971df91ae..9cc5d717cb 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -182,8 +182,6 @@ const createWalletFx = createEffect( const accountIds = signatories.map((s) => s.accountId); const accountId = accountUtils.getMultisigAccountId(accountIds, threshold, cryptoType); - console.log('<><>Multisig wallet creation', accountId, name, threshold, signatories, chainId, cryptoType); - walletModel.events.multisigCreated({ wallet: { name, @@ -206,15 +204,6 @@ const createWalletFx = createEffect( }, ); -const $hasOwnSignatory = combine( - { wallets: walletModel.$wallets, signatories: formModel.$signatories }, - ({ wallets, signatories }) => - walletUtils.getWalletsFilteredAccounts(wallets, { - walletFn: (w) => !walletUtils.isWatchOnly(w) && !walletUtils.isMultisig(w), - accountFn: (a) => signatories.some((s) => s.accountId === a.accountId), - }), -); - const $fakeTx = combine( { chain: formModel.$createMultisigForm.fields.chain.$value, @@ -237,6 +226,8 @@ const $fakeTx = combine( sample({ clock: formModel.$createMultisigForm.submit, + source: formModel.$createMultisigForm.$isValid, + filter: (isValid) => isValid, fn: () => Step.CONFIRM, target: stepChanged, }); @@ -393,10 +384,8 @@ sample({ }); export const flowModel = { - $isLoading: createWalletFx.pending, $error, $step, - $hasOwnSignatory, $fee, $fakeTx, $api, diff --git a/src/renderer/widgets/CreateWallet/model/form-model.ts b/src/renderer/widgets/CreateWallet/model/form-model.ts index b138ed245f..2da3344eff 100644 --- a/src/renderer/widgets/CreateWallet/model/form-model.ts +++ b/src/renderer/widgets/CreateWallet/model/form-model.ts @@ -58,7 +58,7 @@ const $multisigAccountId = combine( chains: networkModel.$chains, signatories: $signatories, }, - ({ chains, formValues: { threshold, chain }, signatories }) => { + ({ formValues: { threshold, chain }, signatories }) => { if (!threshold) return null; const cryptoType = networkUtils.isEthereumBased(chain.options) ? CryptoType.ETHEREUM : CryptoType.SR25519; @@ -89,10 +89,9 @@ const $multisigAlreadyExists = combine( const $availableAccounts = combine( { wallets: walletModel.$wallets, - chains: networkModel.$chains, formValues: $createMultisigForm.$values, }, - ({ formValues: { chain }, wallets, chains }) => { + ({ formValues: { chain }, wallets }) => { if (!chain) return []; const filteredAccounts = walletUtils.getAccountsBy(wallets, (a, w) => { @@ -109,6 +108,15 @@ const $availableAccounts = combine( { skipVoid: false }, ); +const $hasOwnSignatory = combine( + { wallets: walletModel.$wallets, signatories: $signatories }, + ({ wallets, signatories }) => + !!walletUtils.getWalletsFilteredAccounts(wallets, { + walletFn: (w) => !walletUtils.isWatchOnly(w) && !walletUtils.isMultisig(w), + accountFn: (a) => signatories.some((s) => s.accountId === a.accountId), + })?.length, +); + export const formModel = { $createMultisigForm, $multisigAccountId, @@ -117,6 +125,7 @@ export const formModel = { $signatories, $accountSignatories, $contactSignatories, + $hasOwnSignatory, events: { contactSignatoriesChanged, accountSignatoriesChanged, diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx new file mode 100644 index 0000000000..0b4d7702f7 --- /dev/null +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx @@ -0,0 +1,176 @@ +import { useForm } from 'effector-forms'; +import { useUnit } from 'effector-react'; + +import { cnTw, RootExplorers, toAddress } from '@shared/lib/utils'; +import { useI18n } from '@app/providers'; +import { BodyText, Button, FootnoteText, Select, SmallTitleText } from '@shared/ui'; +import { ExtendedWallet, ExtendedContact, ExtendedAccount } from './common/types'; +import { WalletItem } from './components/WalletItem'; +import { AccountAddress, ContactItem, ExplorersPopover, walletModel, walletUtils } from '@entities/wallet'; +import { Chain, WalletType } from '@shared/core'; +import { flowModel } from '../../model/flow-model'; +import { Step } from '../../lib/types'; +import { formModel } from '../../model/form-model'; +import { FeeWithLabel, MultisigDepositWithLabel } from '@entities/transaction'; +import { SignButton } from '@entities/operations'; +import { confirmModel } from '../../model/confirm-model'; + +type Props = { + wallets?: ExtendedWallet[]; + accounts?: ExtendedAccount[]; + contacts: ExtendedContact[]; + chain?: Chain; +}; + +export const ConfirmationStep = ({ chain, wallets = [], accounts = [], contacts }: Props) => { + const { t } = useI18n(); + const { + fields: { name, threshold }, + } = useForm(formModel.$createMultisigForm); + const accountSignatories = useUnit(formModel.$accountSignatories); + const signatories = useUnit(formModel.$signatories); + const api = useUnit(flowModel.$api); + const fakeTx = useUnit(flowModel.$fakeTx); + const signerWallet = useUnit(flowModel.$signerWallet); + + const explorers = chain ? chain.explorers : RootExplorers; + + return ( +
+
+ {accountSignatories.length > 1 && ( + <> + {t('createMultisigAccount.signingWith')} + + + )} + + {t('createMultisigAccount.newMultisigTitle')} + + + {t('createMultisigAccount.thresholdName')} + + {threshold.value}/{signatories.length} + + + {t('createMultisigAccount.selectedSignatoriesTitle')} +
+ {wallets.length > 0 && ( + <> + + {t('createMultisigAccount.walletsTab')} {wallets.length} + +
    + {wallets.map(({ index, name, type }) => ( +
  • + +
  • + ))} +
+ + )} + {accounts.length > 0 && ( + <> + + {t('createMultisigAccount.yourAccounts')} {accounts.length} + +
    + {accounts.map(({ index, name, accountId }) => ( +
  • + } + /> +
  • + ))} +
+ + )} + {contacts.length > 0 && ( + <> + + {t('createMultisigAccount.contactsTab')} {contacts.length} + +
    + {contacts.map(({ index, accountId, name }) => ( +
  • + } + /> +
  • + ))} +
+ + )} +
+
+ + +
+
+ + +
+
+
+ ); +}; + +const AccountSelector = ({ chain }: { chain?: Chain }) => { + const { t } = useI18n(); + + const selectedSigner = useUnit(flowModel.$selectedSigner); + const accountSignatories = useUnit(formModel.$accountSignatories); + const wallets = useUnit(walletModel.$wallets); + // const proxiedAccounts = useUnit(formModel.$proxiedAccounts); + + if (!chain) return null; + + const options = accountSignatories.map(({ accountId, name }) => { + // const isShard = accountUtils.isShardAccount(account); + const address = toAddress(accountId, { prefix: chain.addressPrefix }); + + return { + id: accountId, + value: accountId, + element: ( +
+ +
+ ), + }; + }); + + return ( +
+ { - const selected = walletUtils.getAccountsBy(wallets, (account) => account.accountId === value)[0]; - - flowModel.events.selectedSignerChanged(selected!); - }} - /> -
- ); -}; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectAccountSignatories.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx similarity index 98% rename from src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectAccountSignatories.tsx rename to src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx index d11d914871..b2d7316ebb 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectAccountSignatories.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx @@ -171,14 +171,13 @@ export const SelectSignatories = ({ isActive, accounts, wallets, contacts, chain const AccountsTab = hasAccounts ? (
-
    - - + +
      {Object.entries(accountsList).map(([walletId, accounts]) => { const wallet = wallets[Number(walletId)]; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatoriesStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatoriesStep.tsx deleted file mode 100644 index e01ad7ee48..0000000000 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatoriesStep.tsx +++ /dev/null @@ -1,292 +0,0 @@ -import { useEffect, useState } from 'react'; - -import { cnTw, includes, toAddress, RootExplorers, isEthereumAccountId } from '@shared/lib/utils'; -import { useI18n } from '@app/providers'; -import { useToggle } from '@shared/lib/hooks'; -import { Button, Checkbox, FootnoteText, Icon, SearchInput, SmallTitleText, Tabs, Tooltip } from '@shared/ui'; -import { TabItem } from '@shared/ui/types'; -import { CreateContactModal } from '@widgets/ManageContactModal'; -import { ExtendedContact, ExtendedWallet } from '../common/types'; -import { EmptyContactList } from '@entities/contact'; -import { type Contact, type Wallet, type Account, WalletType } from '@shared/core'; -import { ContactItem, ExplorersPopover, accountUtils, walletUtils } from '@entities/wallet'; -import { WalletItem } from './WalletItem'; - -const enum SignatoryTabs { - WALLETS = 'wallets', - CONTACTS = 'contacts', -} - -type Props = { - isActive: boolean; - wallets: Wallet[]; - accounts: Account[]; - contacts: Contact[]; - onSelect: (wallets: ExtendedWallet[], contacts: ExtendedContact[]) => void; -}; - -export const SelectSignatoriesStep = ({ isActive, wallets, accounts, contacts, onSelect }: Props) => { - const { t } = useI18n(); - - const [query, setQuery] = useState(''); - const [contactList, setContactList] = useState([]); - const [availableWallets, setAvailableWallets] = useState([]); - const [disabledWallets, setDisabledWallets] = useState([]); - const [isContactModalOpen, toggleContactModalOpen] = useToggle(); - - const [selectedWallets, setSelectedWallets] = useState>({}); - const [selectedContacts, setSelectedContacts] = useState>({}); - - const selectedWalletsList = Object.values(selectedWallets); - const selectedContactsList = Object.values(selectedContacts); - - useEffect(() => { - if (accounts.length === 0) return; - - const addressBookContacts = contacts - .filter((c) => { - return !isEthereumAccountId(c.accountId); - }) - .map((contact, index) => ({ ...contact, index: index.toString() })); - - const { available, disabled } = wallets.reduce<{ - available: ExtendedWallet[]; - disabled: Wallet[]; - }>( - (acc, wallet, index) => { - const walletAccounts = accounts.filter((a) => a.walletId === wallet.id); - - if (!walletAccounts.length) return acc; - - // TODO: Check why it can be empty - const accountId = walletAccounts[0]?.accountId; - const isSameAccounts = walletAccounts.every((a) => a.accountId === accountId); - const isEvmAccount = accountUtils.isEthereumBased(walletAccounts[0]); - - if (isSameAccounts && !isEvmAccount && walletUtils.isValidSignatory(wallet)) { - acc.available.push({ - ...wallet, - index: index.toString(), - address: toAddress(accountId), - accountId: accountId, - }); - } else { - acc.disabled.push(wallet); - } - - return acc; - }, - { available: [], disabled: [] }, - ); - - setContactList(addressBookContacts); - setAvailableWallets(available); - setDisabledWallets(disabled); - }, [accounts.length, contacts.length, wallets.length]); - - useEffect(() => { - onSelect(selectedWalletsList, selectedContactsList); - }, [selectedWalletsList.length, selectedContactsList.length]); - - const selectWallet = (wallet: ExtendedWallet) => { - setSelectedWallets((selectedWallets) => { - if (selectedWallets[wallet.id]) { - const { [wallet.id]: removedWallet, ...newWallets } = selectedWallets; - - return newWallets; - } - - return { ...selectedWallets, [wallet.id]: wallet }; - }); - }; - - const selectContact = (contact: ExtendedContact) => { - setSelectedContacts((selectedContacts) => { - if (selectedContacts[contact.index]) { - const { [contact.index]: removedContact, ...newContacts } = selectedContacts; - - return newContacts; - } - - return { ...selectedContacts, [contact.index]: contact }; - }); - }; - - const isDisabledContact = (contact: ExtendedContact): boolean => { - const isThisContact = selectedContactsList.includes(contact); - const isSameContactSelected = selectedContactsList.some((c) => c.accountId === contact.accountId); - const isSameWalletSelected = selectedWalletsList.some((w) => w.accountId === contact.accountId); - - return !isThisContact && (isSameContactSelected || isSameWalletSelected); - }; - - const isDisabledWallet = (wallet: ExtendedWallet): boolean => { - const isThisWallet = selectedWalletsList.includes(wallet); - const isSameContactSelected = selectedContactsList.some((c) => c.accountId === wallet.accountId); - const isSameWalletSelected = selectedWalletsList.some((w) => w.accountId === wallet.accountId); - - return !isThisWallet && (isSameContactSelected || isSameWalletSelected); - }; - - const searchedContactList = contactList.filter((c) => { - return includes(c.address, query) || includes(c.name, query); - }); - - const getDisabledMessage = (type: WalletType) => { - const UnsupportedTypes = [WalletType.WATCH_ONLY, WalletType.MULTISIG, WalletType.PROXIED]; - if (UnsupportedTypes.includes(type)) { - return t('createMultisigAccount.disabledError.unsupportedType'); - } - - return t('createMultisigAccount.disabledError.differentAccounts'); - }; - - const hasWallets = Boolean(availableWallets.length); - const hasContacts = Boolean(contactList.length); - - const selectedWalletsLength = Object.values(selectedWallets).length; - const selectedContactsLength = Object.values(selectedContacts).length; - - const WalletsTab = hasWallets ? ( -
      - {Boolean(disabledWallets) && ( - {t('createMultisigAccount.availableLabel')} - )} - -
        - {availableWallets.map((wallet) => { - const disabled = isDisabledWallet(wallet); - - return ( -
      • - selectWallet(wallet)} - > - - -
      • - ); - })} -
      - - {Boolean(disabledWallets.length) && ( - {t('createMultisigAccount.disabledLabel')} - )} - -
        - {disabledWallets.map(({ id, name, type }) => ( -
      • - - - - - -
      • - ))} -
      -
      - ) : ( - - ); - - const ContactsTab = ( -
      -
      - - {hasContacts && ( - - )} -
      - - {hasContacts ? ( -
        - {searchedContactList.map((contact) => { - const disabled = isDisabledContact(contact); - - return ( -
      • - selectContact(contact)} - > - } - /> - -
      • - ); - })} -
      - ) : ( - - )} -
      - ); - - const TabItems: TabItem[] = [ - { - id: SignatoryTabs.WALLETS, - panel: WalletsTab, - title: ( - <> - {t('createMultisigAccount.walletsTab')} - {selectedWalletsLength > 0 && ( - - {selectedWalletsLength} - - )} - - ), - }, - { - id: SignatoryTabs.CONTACTS, - panel: ContactsTab, - title: ( - <> - {t('createMultisigAccount.contactsTab')} - {selectedContactsLength > 0 && ( - - {selectedContactsLength} - - )} - - ), - }, - ]; - - return ( - <> -
      - {t('createMultisigAccount.signatoryTitle')} - - -
      - - - - ); -}; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/index.ts b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/index.ts index 635f17f411..f706e37051 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/index.ts +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/index.ts @@ -1,3 +1,2 @@ -export { SelectSignatoriesStep } from './SelectSignatoriesStep'; -export { ConfirmationStep } from './ConfirmationStep'; -export { NameThresholdStep } from './NameThresholdStep'; +export { SelectSignatories } from './SelectSignatories'; +export { WalletItem } from './WalletItem'; From a1be2d7bb5b6d020bdc7460f4ba6e48390fd3283 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Wed, 29 May 2024 19:08:30 +0200 Subject: [PATCH 17/90] fix: lint --- src/renderer/shared/api/translation/locales/en.json | 4 ++-- .../CreateWallet/ui/MultisigWallet/NameThresholdStep.tsx | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index b36a685bda..6582f7f6ec 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -119,10 +119,10 @@ "newMultisigTitle": "New multisig", "noOwnSignatory": "You need at least 1 owned account as part of the signatories", "noOwnSignatoryTitle": "No owned account", - "notEnoughSignatories": "You need to select at least 2 signatories", - "notEnoughSignatoriesTitle": "Not enough signatories", "noWallets": "Looks like you don't have any non-watch only wallets", "noWalletsLabel": "The wallet list is empty", + "notEnoughSignatories": "You need to select at least 2 signatories", + "notEnoughSignatoriesTitle": "Not enough signatories", "searchContactPlaceholder": "Search", "selectedSignatoriesTitle": "Selected signatories", "signatoriesDescription": "Add signatories to your multisig account", diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameThresholdStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameThresholdStep.tsx index 3b5f0ed2aa..106f1a5fee 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameThresholdStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameThresholdStep.tsx @@ -38,13 +38,9 @@ const getChainOptions = (chains: Chain[]): DropdownOption[] => { type Props = { signatories: Signatory[]; - // onGoBack: () => void; }; -export const NameThresholdStep = ({ - signatories, -}: // onGoBack, -Props) => { +export const NameThresholdStep = ({ signatories }: Props) => { const { t } = useI18n(); const chains = useUnit(networkModel.$chains); From 273179a3712588778dbd76957824db0cff318004 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Thu, 30 May 2024 10:52:54 +0200 Subject: [PATCH 18/90] chore: add tests on form-model --- .../AddProxyModal/model/__tests__/mock.ts | 4 +- .../model/__tests__/form-model.test.ts | 96 +++++++++++++++++++ .../CreateWallet/model/__tests__/mock.ts | 90 +++++++++++++++++ .../widgets/CreateWallet/model/form-model.ts | 8 +- 4 files changed, 191 insertions(+), 7 deletions(-) create mode 100644 src/renderer/widgets/CreateWallet/model/__tests__/form-model.test.ts create mode 100644 src/renderer/widgets/CreateWallet/model/__tests__/mock.ts diff --git a/src/renderer/widgets/AddProxyModal/model/__tests__/mock.ts b/src/renderer/widgets/AddProxyModal/model/__tests__/mock.ts index 1b2d46e6a7..9317c6d292 100644 --- a/src/renderer/widgets/AddProxyModal/model/__tests__/mock.ts +++ b/src/renderer/widgets/AddProxyModal/model/__tests__/mock.ts @@ -1,6 +1,6 @@ import { ApiPromise } from '@polkadot/api'; -import { Chain, SigningType, Wallet, WalletType } from '@shared/core'; +import { Chain, ChainOptions, SigningType, Wallet, WalletType } from '@shared/core'; export const testApi = { key: 'test-api', @@ -9,7 +9,7 @@ export const testApi = { export const testChain = { name: 'test-chain', chainId: '0x00', - options: ['regular_proxy'], + options: [ChainOptions.REGULAR_PROXY], } as unknown as Chain; export const initiatorWallet = { diff --git a/src/renderer/widgets/CreateWallet/model/__tests__/form-model.test.ts b/src/renderer/widgets/CreateWallet/model/__tests__/form-model.test.ts new file mode 100644 index 0000000000..c298273d23 --- /dev/null +++ b/src/renderer/widgets/CreateWallet/model/__tests__/form-model.test.ts @@ -0,0 +1,96 @@ +import { allSettled, fork } from 'effector'; + +import { formModel } from '../form-model'; +import { networkModel } from '@entities/network'; +import { walletModel } from '@entities/wallet'; +import { initiatorWallet, multisigWallet, signerWallet, testApi, testChain } from './mock'; +import { ConnectionStatus } from '@shared/core'; +import { ExtendedAccount, ExtendedContact } from '../../ui/MultisigWallet/common/types'; + +jest.mock('@shared/lib/utils', () => ({ + ...jest.requireActual('@shared/lib/utils'), + getProxyTypes: jest.fn().mockReturnValue(['Any', 'Staking']), +})); + +describe('widgets/CreateWallet/model/form-model', () => { + beforeEach(() => { + jest.restoreAllMocks(); + }); + + test('should error out for empty name', async () => { + const scope = fork({ + values: new Map() + .set(networkModel.$apis, { '0x00': testApi }) + .set(networkModel.$chains, { '0x00': testChain }) + .set(networkModel.$connectionStatuses, { '0x00': ConnectionStatus.CONNECTED }) + .set(walletModel.$wallets, [initiatorWallet, signerWallet]), + }); + + await allSettled(formModel.$createMultisigForm.fields.name.onChange, { scope, params: '' }); + await allSettled(formModel.$createMultisigForm.submit, { scope }); + + expect(scope.getState(formModel.$createMultisigForm.fields.name.$errorText)).toEqual( + scope.getState(formModel.$createMultisigForm.fields.name.$errors)[0].errorText, + ); + }); + + test('should error out for low threshold', async () => { + const scope = fork({ + values: new Map() + .set(networkModel.$apis, { '0x00': testApi }) + .set(networkModel.$chains, { '0x00': testChain }) + .set(networkModel.$connectionStatuses, { '0x00': ConnectionStatus.CONNECTED }) + .set(walletModel.$wallets, [initiatorWallet, signerWallet]), + }); + + await allSettled(formModel.$createMultisigForm.fields.threshold.onChange, { scope, params: 1 }); + await allSettled(formModel.$createMultisigForm.submit, { scope }); + + expect(scope.getState(formModel.$createMultisigForm.fields.threshold.$errors)[0].rule).toEqual('moreOrEqualToTwo'); + }); + + test('should have correct value for $multisigAccountId', async () => { + const scope = fork({ + values: new Map() + .set(networkModel.$apis, { '0x00': testApi }) + .set(networkModel.$chains, { '0x00': testChain }) + .set(networkModel.$connectionStatuses, { '0x00': ConnectionStatus.CONNECTED }) + .set(walletModel.$wallets, [initiatorWallet, signerWallet, multisigWallet]), + }); + + await allSettled(formModel.events.accountSignatoriesChanged, { + scope, + params: [initiatorWallet.accounts[0] as unknown as ExtendedAccount], + }); + await allSettled(formModel.events.contactSignatoriesChanged, { + scope, + params: [signerWallet.accounts[0] as unknown as ExtendedContact], + }); + + await allSettled(formModel.$createMultisigForm.fields.threshold.onChange, { scope, params: 2 }); + await allSettled(formModel.$createMultisigForm.fields.chain.onChange, { scope, params: testChain }); + + expect(scope.getState(formModel.$multisigAccountId)).toEqual(multisigWallet.accounts[0].accountId); + }); + + // test('should have correct value for $availableAccounts', async () => { + // const scope = fork({ + // values: new Map() + // .set(networkModel.$apis, { '0x00': testApi }) + // .set(networkModel.$chains, { '0x00': testChain }) + // .set(networkModel.$connectionStatuses, { '0x00': ConnectionStatus.CONNECTED }) + // .set(walletModel.$wallets, [initiatorWallet, signerWallet, wrongChainWallet]), + // }); + + // // await allSettled(formModel.events.accountSignatoriesChanged, { + // // scope, + // // params: [initiatorWallet.accounts[0] as unknown as ExtendedAccount], + // // }); + // // await allSettled(formModel.events.contactSignatoriesChanged, { + // // scope, + // // params: [signerWallet.accounts[0] as unknown as ExtendedContact], + // // }); + + // expect(scope.getState(formModel.$availableAccounts)).toEqual([initiatorWallet, signerWallet]); + // }); +}); diff --git a/src/renderer/widgets/CreateWallet/model/__tests__/mock.ts b/src/renderer/widgets/CreateWallet/model/__tests__/mock.ts new file mode 100644 index 0000000000..9c837b6b60 --- /dev/null +++ b/src/renderer/widgets/CreateWallet/model/__tests__/mock.ts @@ -0,0 +1,90 @@ +import { ApiPromise } from '@polkadot/api'; + +import { + Chain, + SigningType, + Wallet, + WalletType, + ChainOptions, + AccountType, + ChainType, + Account, + ChainAccount, +} from '@shared/core'; + +export const testApi = { + key: 'test-api', +} as unknown as ApiPromise; + +export const testChain = { + name: 'test-chain', + chainId: '0x00', + options: [ChainOptions.MULTISIG], + type: ChainType.SUBSTRATE, +} as unknown as Chain; + +export const multisigWallet = { + id: 3, + name: 'multisig Wallet', + isActive: false, + type: WalletType.MULTISIG, + signingType: SigningType.MULTISIG, + accounts: [{ accountId: '0x3003f217fc9972c122371905dbb12bea27dbec95b11aa102ffe6b51bb0f0c753' } as unknown as Account], +} as Wallet; + +export const signerWallet = { + id: 2, + name: 'Signer Wallet', + isActive: true, + type: WalletType.WALLET_CONNECT, + signingType: SigningType.WALLET_CONNECT, + accounts: [ + { + id: 2, + walletId: 2, + name: 'account 2', + type: AccountType.WALLET_CONNECT, + accountId: '0x04dd9807d3f7008abfcbffc8cb96e8e26a71a839c7c18d471b0eea782c1b8521', + chainType: ChainType.SUBSTRATE, + chain: '0x00', + } as unknown as ChainAccount, + ], +} as Wallet; + +export const initiatorWallet = { + id: 1, + name: 'Wallet', + isActive: true, + type: WalletType.POLKADOT_VAULT, + signingType: SigningType.POLKADOT_VAULT, + accounts: [ + { + id: 1, + walletId: 1, + name: 'account 1', + type: AccountType.WALLET_CONNECT, + accountId: '0x960d75eab8e58bffcedf1fa51d85e2acb37d107e9bd7009a3473d3809122493c', + chainType: ChainType.SUBSTRATE, + chain: '0x00', + } as unknown as ChainAccount, + ], +} as Wallet; + +export const wrongChainWallet = { + id: 4, + name: 'Wallet Wrong Chain', + isActive: true, + type: WalletType.POLKADOT_VAULT, + signingType: SigningType.POLKADOT_VAULT, + accounts: [ + { + id: 4, + walletId: 4, + name: 'account 4', + type: AccountType.WALLET_CONNECT, + accountId: '0x00', + chainType: ChainType.SUBSTRATE, + chain: '0x01', + } as unknown as ChainAccount, + ], +} as Wallet; diff --git a/src/renderer/widgets/CreateWallet/model/form-model.ts b/src/renderer/widgets/CreateWallet/model/form-model.ts index 2da3344eff..59597f5f1e 100644 --- a/src/renderer/widgets/CreateWallet/model/form-model.ts +++ b/src/renderer/widgets/CreateWallet/model/form-model.ts @@ -1,11 +1,10 @@ import { createForm } from 'effector-forms'; -import { t } from 'i18next'; import { combine, createEvent, restore } from 'effector'; import { Chain, CryptoType, MultisigAccount } from '@shared/core'; import chains from '@shared/config/chains/chains.json'; import { accountUtils, walletModel, walletUtils } from '@entities/wallet'; -import { networkModel, networkUtils } from '@entities/network'; +import { networkUtils } from '@entities/network'; import { ExtendedAccount, ExtendedContact } from '../ui/MultisigWallet/common/types'; import { FormParams } from '../lib/types'; @@ -29,7 +28,7 @@ const $createMultisigForm = createForm({ { name: 'notEmpty', validator: (name) => name !== '', - errorText: t('createMultisigAccount.disabledError.emptyName'), + errorText: 'createMultisigAccount.disabledError.emptyName', }, ], }, @@ -55,7 +54,6 @@ const $signatories = combine( const $multisigAccountId = combine( { formValues: $createMultisigForm.$values, - chains: networkModel.$chains, signatories: $signatories, }, ({ formValues: { threshold, chain }, signatories }) => { @@ -84,6 +82,7 @@ const $multisigAlreadyExists = combine( return isSameAccountId && isSameChainId; }, }), + { skipVoid: false }, ); const $availableAccounts = combine( @@ -105,7 +104,6 @@ const $availableAccounts = combine( return [...accountUtils.getAccountsAndShardGroups(filteredAccounts), ...baseAccounts]; }, - { skipVoid: false }, ); const $hasOwnSignatory = combine( From e226f124843713c5eaa9c6ab3052ebff4700e8f9 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Thu, 30 May 2024 11:06:50 +0200 Subject: [PATCH 19/90] chore: address comments --- .../MultisigWallet/FlexibleMultisigWallet.tsx | 36 +++---------------- .../MultisigWallet/SelectSignatoriesStep.tsx | 3 -- 2 files changed, 4 insertions(+), 35 deletions(-) diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx index a2ec6bb404..03d1476424 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx @@ -7,10 +7,10 @@ import { useI18n } from '@app/providers'; import { useToggle } from '@shared/lib/hooks'; import { OperationResult } from '@entities/transaction'; import { ExtendedContact, ExtendedWallet } from './common/types'; -import { SelectSignatoriesStep, ConfirmationStep, NameThresholdStep } from './components'; -import { contactModel } from '@entities/contact'; +import { ConfirmationStep } from './ConfirmationStep'; +import { NameThresholdStep } from './NameThresholdStep'; +import { SelectSignatoriesStep } from './SelectSignatoriesStep'; import { DEFAULT_TRANSITION } from '@shared/lib/utils'; -import { walletModel } from '@entities/wallet'; import { flowModel } from '../../model/flow-model'; type OperationResultProps = Pick, 'variant' | 'description'>; @@ -29,10 +29,7 @@ type Props = { export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack }: Props) => { const { t } = useI18n(); - const wallets = useUnit(walletModel.$wallets); - const contacts = useUnit(contactModel.$contacts); - const isLoading = useUnit(flowModel.$isLoading); const error = useUnit(flowModel.$error); const [isModalOpen, toggleIsModalOpen] = useToggle(isOpen); @@ -62,29 +59,13 @@ export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack } flowModel.events.callbacksChanged({ onComplete }); }, [onComplete]); - // const goToPrevStep = () => { - // if (activeStep === Step.INIT) { - // onBack(); - // } else { - // setActiveStep((prev) => prev - 1); - // } - // }; - const closeMultisigModal = (params: { complete?: boolean; closeAll?: boolean } = { closeAll: true }) => { toggleIsModalOpen(); setTimeout(params?.complete ? onComplete : params?.closeAll ? onClose : noop, DEFAULT_TRANSITION); }; - // const submitHandler = (args: any) => { - // toggleResultModal(); - // setName(args.name); - - // flowModel.events.walletCreated(args); - // }; - const getResultProps = (): OperationResultProps => { - if (isLoading) return { variant: 'loading' }; if (error) return { variant: 'error', description: error }; return { variant: 'success', description: t('createMultisigAccount.successMessage') }; @@ -124,16 +105,7 @@ export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack } )} - wallet.accounts).flat()} - contacts={contacts} - onSelect={(wallets, contacts) => { - setSignatoryWallets(wallets); - setSignatoryContacts(contacts); - }} - /> + diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesStep.tsx index d8fc9b60bd..5f915a84e9 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesStep.tsx @@ -27,9 +27,6 @@ export const SelectSignatoriesStep = () => { const hasEnoughSignatories = signatories.length >= 2; const canContinue = hasOwnSignatory && hasEnoughSignatories && !multisigAlreadyExists; - console.log('<><> canContinue', canContinue); - console.log('<><> hasOwnSignatory', hasOwnSignatory); - return (
      Date: Thu, 30 May 2024 11:56:25 +0200 Subject: [PATCH 20/90] chore: more tests --- .../model/__tests__/form-model.test.ts | 82 ++++++++++++++----- .../CreateWallet/model/__tests__/mock.ts | 6 +- 2 files changed, 64 insertions(+), 24 deletions(-) diff --git a/src/renderer/widgets/CreateWallet/model/__tests__/form-model.test.ts b/src/renderer/widgets/CreateWallet/model/__tests__/form-model.test.ts index c298273d23..0cb3a5e1a1 100644 --- a/src/renderer/widgets/CreateWallet/model/__tests__/form-model.test.ts +++ b/src/renderer/widgets/CreateWallet/model/__tests__/form-model.test.ts @@ -3,7 +3,7 @@ import { allSettled, fork } from 'effector'; import { formModel } from '../form-model'; import { networkModel } from '@entities/network'; import { walletModel } from '@entities/wallet'; -import { initiatorWallet, multisigWallet, signerWallet, testApi, testChain } from './mock'; +import { initiatorWallet, multisigWallet, signerWallet, testApi, testChain, wrongChainWallet } from './mock'; import { ConnectionStatus } from '@shared/core'; import { ExtendedAccount, ExtendedContact } from '../../ui/MultisigWallet/common/types'; @@ -73,24 +73,64 @@ describe('widgets/CreateWallet/model/form-model', () => { expect(scope.getState(formModel.$multisigAccountId)).toEqual(multisigWallet.accounts[0].accountId); }); - // test('should have correct value for $availableAccounts', async () => { - // const scope = fork({ - // values: new Map() - // .set(networkModel.$apis, { '0x00': testApi }) - // .set(networkModel.$chains, { '0x00': testChain }) - // .set(networkModel.$connectionStatuses, { '0x00': ConnectionStatus.CONNECTED }) - // .set(walletModel.$wallets, [initiatorWallet, signerWallet, wrongChainWallet]), - // }); - - // // await allSettled(formModel.events.accountSignatoriesChanged, { - // // scope, - // // params: [initiatorWallet.accounts[0] as unknown as ExtendedAccount], - // // }); - // // await allSettled(formModel.events.contactSignatoriesChanged, { - // // scope, - // // params: [signerWallet.accounts[0] as unknown as ExtendedContact], - // // }); - - // expect(scope.getState(formModel.$availableAccounts)).toEqual([initiatorWallet, signerWallet]); - // }); + test('should have correct value for $availableAccounts', async () => { + const scope = fork({ + values: new Map() + .set(networkModel.$apis, { '0x00': testApi }) + .set(networkModel.$chains, { '0x00': testChain }) + .set(networkModel.$connectionStatuses, { '0x00': ConnectionStatus.CONNECTED }) + .set(walletModel.$wallets, [initiatorWallet, signerWallet, wrongChainWallet]), + }); + + await allSettled(formModel.$createMultisigForm.fields.chain.onChange, { scope, params: testChain }); + + expect(scope.getState(formModel.$availableAccounts)).toEqual([ + ...initiatorWallet.accounts, + ...signerWallet.accounts, + ]); + }); + + test('should have correct value for $hasOwnSignatory', async () => { + const scope = fork({ + values: new Map() + .set(networkModel.$apis, { '0x00': testApi }) + .set(networkModel.$chains, { '0x00': testChain }) + .set(networkModel.$connectionStatuses, { '0x00': ConnectionStatus.CONNECTED }) + .set(walletModel.$wallets, [initiatorWallet, signerWallet]), + }); + + await allSettled(formModel.$createMultisigForm.fields.chain.onChange, { scope, params: testChain }); + + expect(scope.getState(formModel.$hasOwnSignatory)).toEqual(false); + + await allSettled(formModel.events.accountSignatoriesChanged, { + scope, + params: [initiatorWallet.accounts[0] as unknown as ExtendedAccount], + }); + + expect(scope.getState(formModel.$hasOwnSignatory)).toEqual(true); + }); + + test('should have correct value for $multisigAlreadyExists', async () => { + const scope = fork({ + values: new Map() + .set(networkModel.$apis, { '0x00': testApi }) + .set(networkModel.$chains, { '0x00': testChain }) + .set(networkModel.$connectionStatuses, { '0x00': ConnectionStatus.CONNECTED }) + .set(walletModel.$wallets, [initiatorWallet, signerWallet, multisigWallet]), + }); + + await allSettled(formModel.$createMultisigForm.fields.chain.onChange, { scope, params: testChain }); + await allSettled(formModel.events.accountSignatoriesChanged, { + scope, + params: [initiatorWallet.accounts[0] as unknown as ExtendedAccount], + }); + await allSettled(formModel.events.contactSignatoriesChanged, { + scope, + params: [signerWallet.accounts[0] as unknown as ExtendedContact], + }); + await allSettled(formModel.$createMultisigForm.fields.threshold.onChange, { scope, params: 2 }); + + expect(scope.getState(formModel.$multisigAlreadyExists)).toEqual(true); + }); }); diff --git a/src/renderer/widgets/CreateWallet/model/__tests__/mock.ts b/src/renderer/widgets/CreateWallet/model/__tests__/mock.ts index 9c837b6b60..551967fe0d 100644 --- a/src/renderer/widgets/CreateWallet/model/__tests__/mock.ts +++ b/src/renderer/widgets/CreateWallet/model/__tests__/mock.ts @@ -46,7 +46,7 @@ export const signerWallet = { type: AccountType.WALLET_CONNECT, accountId: '0x04dd9807d3f7008abfcbffc8cb96e8e26a71a839c7c18d471b0eea782c1b8521', chainType: ChainType.SUBSTRATE, - chain: '0x00', + chainId: '0x00', } as unknown as ChainAccount, ], } as Wallet; @@ -65,7 +65,7 @@ export const initiatorWallet = { type: AccountType.WALLET_CONNECT, accountId: '0x960d75eab8e58bffcedf1fa51d85e2acb37d107e9bd7009a3473d3809122493c', chainType: ChainType.SUBSTRATE, - chain: '0x00', + chainId: '0x00', } as unknown as ChainAccount, ], } as Wallet; @@ -84,7 +84,7 @@ export const wrongChainWallet = { type: AccountType.WALLET_CONNECT, accountId: '0x00', chainType: ChainType.SUBSTRATE, - chain: '0x01', + chainId: '0x01', } as unknown as ChainAccount, ], } as Wallet; From 23d8df8e1650a3c83d164a77067c6a2609f8563e Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Thu, 30 May 2024 13:06:51 +0200 Subject: [PATCH 21/90] chore: test for confirm wallet --- .../model/__tests__/confirm-model.test.ts | 37 +++++++++++++++++++ .../CreateWallet/model/confirm-model.ts | 26 ++++++------- .../widgets/CreateWallet/model/form-model.ts | 2 +- 3 files changed, 51 insertions(+), 14 deletions(-) create mode 100644 src/renderer/widgets/CreateWallet/model/__tests__/confirm-model.test.ts diff --git a/src/renderer/widgets/CreateWallet/model/__tests__/confirm-model.test.ts b/src/renderer/widgets/CreateWallet/model/__tests__/confirm-model.test.ts new file mode 100644 index 0000000000..b2b595ebdc --- /dev/null +++ b/src/renderer/widgets/CreateWallet/model/__tests__/confirm-model.test.ts @@ -0,0 +1,37 @@ +import { allSettled, fork } from 'effector'; + +import { confirmModel } from '../confirm-model'; +import { networkModel } from '@entities/network'; +import { walletModel } from '@entities/wallet'; +import { Account, Chain } from '@shared/core'; +import { initiatorWallet, signerWallet, testApi } from './mock'; + +describe('widgets/CreateWallet/model/confirm-model', () => { + beforeEach(() => { + jest.restoreAllMocks(); + }); + + test('should fill data for confirm model for multisig account', async () => { + const scope = fork({ + values: new Map() + .set(networkModel.$apis, { '0x00': testApi }) + .set(walletModel.$wallets, [initiatorWallet, signerWallet]), + }); + + const store = { + chain: { chainId: '0x00' } as unknown as Chain, + account: { walletId: signerWallet.id } as unknown as Account, + signer: { walletId: signerWallet.id } as unknown as Account, + threshold: 2, + name: 'multisig name', + fee: '', + multisigDeposit: '', + }; + + await allSettled(confirmModel.events.formInitiated, { scope, params: store }); + + expect(scope.getState(confirmModel.$api)).toEqual(testApi); + expect(scope.getState(confirmModel.$confirmStore)).toEqual(store); + expect(scope.getState(confirmModel.$signerWallet)).toEqual(signerWallet); + }); +}); diff --git a/src/renderer/widgets/CreateWallet/model/confirm-model.ts b/src/renderer/widgets/CreateWallet/model/confirm-model.ts index d6e3b08dac..b4cc1c9a34 100644 --- a/src/renderer/widgets/CreateWallet/model/confirm-model.ts +++ b/src/renderer/widgets/CreateWallet/model/confirm-model.ts @@ -20,18 +20,18 @@ const $api = combine( { skipVoid: false }, ); -const $initiatorWallet = combine( - { - store: $confirmStore, - wallets: walletModel.$wallets, - }, - ({ store, wallets }) => { - if (!store) return null; +// const $initiatorWallet = combine( +// { +// store: $confirmStore, +// wallets: walletModel.$wallets, +// }, +// ({ store, wallets }) => { +// if (!store) return null; - return walletUtils.getWalletById(wallets, store.signer.walletId); - }, - { skipVoid: false }, -); +// return walletUtils.getWalletById(wallets, store.signer.walletId); +// }, +// { skipVoid: false }, +// ); // const $proxiedWallet = combine( // { @@ -55,15 +55,15 @@ const $signerWallet = combine( ({ store, wallets }) => { if (!store) return null; - return walletUtils.getWalletById(wallets, store.signer.walletId || store.signer.walletId); + return walletUtils.getWalletById(wallets, store.signer.walletId); }, { skipVoid: false }, ); export const confirmModel = { $confirmStore, - $initiatorWallet, $signerWallet, + // $initiatorWallet, // $proxiedWallet, $api, events: { diff --git a/src/renderer/widgets/CreateWallet/model/form-model.ts b/src/renderer/widgets/CreateWallet/model/form-model.ts index 59597f5f1e..23fdb41517 100644 --- a/src/renderer/widgets/CreateWallet/model/form-model.ts +++ b/src/renderer/widgets/CreateWallet/model/form-model.ts @@ -72,7 +72,7 @@ const $multisigAccountId = combine( const $multisigAlreadyExists = combine( { wallets: walletModel.$wallets, multisigAccountId: $multisigAccountId, formValues: $createMultisigForm.$values }, ({ multisigAccountId, wallets, formValues: { chain } }) => - walletUtils.getWalletFilteredAccounts(wallets, { + !!walletUtils.getWalletFilteredAccounts(wallets, { walletFn: (w) => walletUtils.isMultisig(w), accountFn: (multisigAccount) => { const isSameAccountId = multisigAccount.accountId === multisigAccountId; From 864cf1912bbaba71b1c4982157edae0073e9044f Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Thu, 30 May 2024 17:24:10 +0200 Subject: [PATCH 22/90] chore: flow-model tests --- .../model/__tests__/flow-model.test.ts | 107 ++++++++++++++++++ .../widgets/CreateWallet/model/flow-model.ts | 18 ++- 2 files changed, 119 insertions(+), 6 deletions(-) create mode 100644 src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts diff --git a/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts b/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts new file mode 100644 index 0000000000..703fae8110 --- /dev/null +++ b/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts @@ -0,0 +1,107 @@ +import { allSettled, fork } from 'effector'; + +import { networkModel } from '@entities/network'; +import { walletModel } from '@entities/wallet'; +import { initiatorWallet, signerWallet, testApi, testChain } from './mock'; +import { Account, Chain, ConnectionStatus } from '@shared/core'; +import { Step } from '../../lib/types'; +import { formModel } from '../form-model'; +import { flowModel } from '../flow-model'; +import { ExtendedAccount, ExtendedContact } from '../../ui/MultisigWallet/common/types'; +import { confirmModel } from '../confirm-model'; +import { signModel } from '@features/operations/OperationSign/model/sign-model'; +import { submitModel } from '@features/operations/OperationSubmit'; + +jest.mock('@entities/transaction/lib/extrinsicService', () => ({ + ...jest.requireActual('@entities/transaction/lib/extrinsicService'), + wrapAsMulti: jest.fn().mockResolvedValue({ + chainId: '0x00', + address: 'mockAddress', + type: 'multisig_as_multi', + args: { + threshold: 1, + otherSignatories: ['mockSignatory1', 'mockSignatory2'], + maybeTimepoint: null, + callData: 'mockCallData', + callHash: 'mockCallHash', + }, + }), +})); + +describe('widgets/CreateWallet/model/add-proxy-model', () => { + beforeAll(() => { + jest.useFakeTimers(); + }); + + test('should go through the process of multisig creation', async () => { + const scope = fork({ + values: new Map() + .set(networkModel.$apis, { '0x00': testApi }) + .set(networkModel.$chains, { '0x00': testChain }) + .set(networkModel.$connectionStatuses, { '0x00': ConnectionStatus.CONNECTED }) + .set(walletModel.$wallets, [initiatorWallet, signerWallet]), + }); + + await allSettled(formModel.events.accountSignatoriesChanged, { + scope, + params: [initiatorWallet.accounts[0] as unknown as ExtendedAccount], + }); + await allSettled(formModel.events.contactSignatoriesChanged, { + scope, + params: [signerWallet.accounts[0] as unknown as ExtendedContact], + }); + + expect(scope.getState(flowModel.$step)).toEqual(Step.INIT); + await allSettled(formModel.$createMultisigForm.fields.chain.onChange, { scope, params: testChain }); + await allSettled(formModel.$createMultisigForm.fields.name.onChange, { scope, params: 'some name' }); + await allSettled(formModel.$createMultisigForm.fields.threshold.onChange, { scope, params: 2 }); + + await allSettled(formModel.$createMultisigForm.submit, { scope }); + + const store = { + chain: { chainId: '0x00' } as unknown as Chain, + account: { walletId: signerWallet.id } as unknown as Account, + signer: { walletId: signerWallet.id } as unknown as Account, + threshold: 2, + name: 'multisig name', + fee: '', + multisigDeposit: '', + }; + + await allSettled(confirmModel.events.formInitiated, { scope, params: store }); + + expect(scope.getState(flowModel.$step)).toEqual(Step.CONFIRM); + + await allSettled(confirmModel.output.formSubmitted, { scope }); + + expect(scope.getState(flowModel.$step)).toEqual(Step.SIGN); + + await allSettled(signModel.output.formSubmitted, { + scope, + params: { + signatures: ['0x00'], + txPayloads: [{}] as unknown as Uint8Array[], + }, + }); + + expect(scope.getState(flowModel.$step)).toEqual(Step.SUBMIT); + + const action = allSettled(submitModel.output.formSubmitted, { + scope, + params: { + timepoint: { + height: 1, + index: 1, + }, + extrinsicHash: '0x00', + isFinalApprove: true, + multisigError: '', + }, + }); + + await jest.runAllTimersAsync(); + await action; + + // expect(scope.getState(addProxyModel.$step)).toEqual(Step.NONE); + }); +}); diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index 9cc5d717cb..75e700491c 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -83,12 +83,16 @@ const $signer = combine( { skipVoid: false }, ); -const $signerWallet = combine({ signer: $signer, wallets: walletModel.$wallets }, ({ signer, wallets }) => { - return walletUtils.getWalletFilteredAccounts(wallets, { - accountFn: (a) => a.accountId === signer.accountId, - walletFn: (w) => walletUtils.isValidSignatory(w), - }); -}); +const $signerWallet = combine( + { signer: $signer, wallets: walletModel.$wallets }, + ({ signer, wallets }) => { + return walletUtils.getWalletFilteredAccounts(wallets, { + accountFn: (a) => a.accountId === signer.accountId, + walletFn: (w) => walletUtils.isValidSignatory(w), + }); + }, + { skipVoid: false }, +); // Miscellaneous @@ -402,5 +406,7 @@ export const flowModel = { multisigDepositChanged, isFeeLoadingChanged, selectedSignerChanged, + //for tests + formSubmitted, }, }; From ba120dbab53aa885a027782b2f74aa3d5323bd70 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Fri, 31 May 2024 08:38:08 +0200 Subject: [PATCH 23/90] fix: remove most comments --- .../CreateWallet/model/confirm-model.ts | 29 ------------------- .../widgets/CreateWallet/model/flow-model.ts | 8 ----- .../ui/MultisigWallet/ConfirmationStep.tsx | 2 -- .../MultisigWallet/FlexibleMultisigWallet.tsx | 5 +--- 4 files changed, 1 insertion(+), 43 deletions(-) diff --git a/src/renderer/widgets/CreateWallet/model/confirm-model.ts b/src/renderer/widgets/CreateWallet/model/confirm-model.ts index b4cc1c9a34..6472884a4c 100644 --- a/src/renderer/widgets/CreateWallet/model/confirm-model.ts +++ b/src/renderer/widgets/CreateWallet/model/confirm-model.ts @@ -20,33 +20,6 @@ const $api = combine( { skipVoid: false }, ); -// const $initiatorWallet = combine( -// { -// store: $confirmStore, -// wallets: walletModel.$wallets, -// }, -// ({ store, wallets }) => { -// if (!store) return null; - -// return walletUtils.getWalletById(wallets, store.signer.walletId); -// }, -// { skipVoid: false }, -// ); - -// const $proxiedWallet = combine( -// { -// store: $confirmStore, -// wallets: walletModel.$wallets, -// }, -// ({ store, wallets }) => { - -// if (!store || !store.proxiedAccount) return undefined; - -// return walletUtils.getWalletById(wallets, store.proxiedAccount.walletId); -// }, -// { skipVoid: false }, -// ); - const $signerWallet = combine( { store: $confirmStore, @@ -63,8 +36,6 @@ const $signerWallet = combine( export const confirmModel = { $confirmStore, $signerWallet, - // $initiatorWallet, - // $proxiedWallet, $api, events: { formInitiated, diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index 75e700491c..2ee7d8126e 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -68,17 +68,9 @@ const $signer = combine( selectedSigner: $selectedSigner, }, ({ accountSignatories, selectedSigner }) => { - // fixme this should be dynamic depending on if the signer is a proxy return accountSignatories.length > 1 && selectedSigner ? selectedSigner : (accountSignatories[0] as unknown as Account); - // if (txWrappers.length === 0) return accounts[0]; - - // if (transactionService.hasMultisig([txWrappers[0]])) { - // return (txWrappers[0] as MultisigTxWrapper).multisigAccount; - // } - - // return (txWrappers[0] as ProxyTxWrapper).proxyAccount; }, { skipVoid: false }, ); diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx index 0b4d7702f7..78e3499f5a 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx @@ -138,12 +138,10 @@ const AccountSelector = ({ chain }: { chain?: Chain }) => { const selectedSigner = useUnit(flowModel.$selectedSigner); const accountSignatories = useUnit(formModel.$accountSignatories); const wallets = useUnit(walletModel.$wallets); - // const proxiedAccounts = useUnit(formModel.$proxiedAccounts); if (!chain) return null; const options = accountSignatories.map(({ accountId, name }) => { - // const isShard = accountUtils.isShardAccount(account); const address = toAddress(accountId, { prefix: chain.addressPrefix }); return { diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx index 03d1476424..c08e49d7a1 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx @@ -87,10 +87,7 @@ export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack } contentClass="flex h-[524px]" onClose={closeMultisigModal} > - +
      Date: Fri, 31 May 2024 11:22:26 +0200 Subject: [PATCH 24/90] fix: Update chains_dev.json --- .../shared/config/chains/chains_dev.json | 3352 +++-------------- 1 file changed, 452 insertions(+), 2900 deletions(-) diff --git a/src/renderer/shared/config/chains/chains_dev.json b/src/renderer/shared/config/chains/chains_dev.json index 65a947ee9b..5cb08cc01d 100644 --- a/src/renderer/shared/config/chains/chains_dev.json +++ b/src/renderer/shared/config/chains/chains_dev.json @@ -5,7 +5,12 @@ "addressPrefix": 0, "chainId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot.svg", - "options": ["multisig", "regular_proxy", "pure_proxy"], + "options": [ + "multisig", + "governance", + "regular_proxy", + "pure_proxy" + ], "nodes": [ { "url": "wss://rpc-polkadot.novasamatech.org", @@ -94,7 +99,12 @@ "addressPrefix": 2, "chainId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama.svg", - "options": ["multisig", "regular_proxy", "pure_proxy"], + "options": [ + "multisig", + "governance", + "regular_proxy", + "pure_proxy" + ], "nodes": [ { "url": "wss://rpc-kusama.novasamatech.org", @@ -183,7 +193,13 @@ "addressPrefix": 42, "chainId": "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Westend_Testnet.svg", - "options": ["testnet", "multisig", "regular_proxy", "pure_proxy"], + "options": [ + "testnet", + "multisig", + "governance", + "regular_proxy", + "pure_proxy" + ], "nodes": [ { "url": "wss://westend-rpc.dwellir.com", @@ -242,12 +258,6 @@ "type": "subquery", "url": "https://api.subquery.network/sq/nova-wallet/novasama-westend-proxy" } - ], - "multisig": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/novasama-westend-proxy__bm92Y" - } ] } }, @@ -258,7 +268,9 @@ "chainId": "0x67f9723393ef76214df0118c34bbbd3dbebc8ed46a10973a8c969d48fe7598c9", "parentId": "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Westmint_Testnet.svg", - "options": ["testnet"], + "options": [ + "testnet" + ], "nodes": [ { "url": "wss://westmint-rpc.dwellir.com", @@ -336,7 +348,9 @@ "chainId": "0x48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama_Asset_Hub.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://sys.ibp.network/statemine", @@ -462,7 +476,9 @@ "chainId": "0xbaf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Karura.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://karura-rpc-0.aca-api.network", @@ -893,7 +909,9 @@ "chainId": "0xf1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Shiden.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc.shiden.astar.network", @@ -1094,7 +1112,9 @@ "chainId": "0x9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bifrost_Kusama.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://bifrost-rpc.liebi.com/ws", @@ -1345,7 +1365,9 @@ "chainId": "0x9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kintsugi.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://api-kusama.interlay.io/parachain", @@ -1549,64 +1571,6 @@ ] } }, - { - "name": "Edgeware", - "specName": "edgeware", - "addressPrefix": 7, - "chainId": "0x742a2ca70c2fda6cee4f8df98d64c4c670a052d9568058982dad9d5a7a135c5b", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Edgeware.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://edgeware-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://edgeware.jelliedowl.net", - "name": "JelliedOwl node" - }, - { - "url": "wss://mainnet2.edgewa.re", - "name": "Edgeware node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "EDG", - "precision": 18, - "priceId": "edgeware", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Edgeware_(EDG).svg", - "name": "Edgeware" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://edgeware.subscan.io/extrinsic/{hash}", - "account": "https://edgeware.subscan.io/account/{address}", - "multisig": "https://edgeware.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - }, - { - "name": "Sub.ID", - "account": "https://sub.id/{address}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-edgeware" - } - ], - "staking": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-edgeware" - } - ] - } - }, { "name": "Parallel Heiko", "specName": "kusama", @@ -1614,7 +1578,9 @@ "chainId": "0x64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/ParallelHeiko.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://heiko-rpc.parallel.fi", @@ -1785,7 +1751,9 @@ "chainId": "0xa85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Basilisk.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc.basilisk.cloud", @@ -1908,7 +1876,9 @@ "chainId": "0xaa3876c1dc8a1afcc2e9a685a49ff7704cfd36ad8c90bf2702b9d1b00cc40011", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Altair.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://altair.api.onfinality.io/public-ws", @@ -1953,7 +1923,9 @@ "chainId": "0xd43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Khala.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://khala-api.phala.network/ws", @@ -2188,7 +2160,9 @@ "chainId": "0x411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/KILT_Spiritnet.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://kilt-rpc.dwellir.com", @@ -2234,165 +2208,6 @@ ] } }, - { - "name": "KILT Peregrine", - "specName": "mashnet-node", - "addressPrefix": 38, - "chainId": "0xa0c6e3bac382b316a68bca7141af1fba507207594c761076847ce358aeedcc21", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/KILT_Peregrine_Testnet.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://peregrine.kilt.io/parachain-public-ws/", - "name": "KILT Protocol Node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "PILT", - "precision": 15, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Default.svg", - "name": "KILT Peregrine" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://kilt-testnet.subscan.io/extrinsic/{hash}", - "account": "https://kilt-testnet.subscan.io/account/{address}", - "multisig": "https://kilt-testnet.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - } - ] - }, - { - "name": "Calamari", - "specName": "kusama", - "addressPrefix": 78, - "chainId": "0x4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", - "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Calamari.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://calamari.systems", - "name": "Manta network node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "KMA", - "precision": 12, - "priceId": "calamari-network", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Calamari_(KMA).svg", - "name": "Calamari Network" - }, - { - "assetId": 1, - "symbol": "KAR", - "precision": 12, - "type": "statemine", - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Karura_(KAR).svg", - "typeExtras": { - "assetId": "8" - }, - "name": "Karura" - }, - { - "assetId": 2, - "symbol": "KSM", - "precision": 12, - "type": "statemine", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kusama_(KSM).svg", - "typeExtras": { - "assetId": "12" - }, - "name": "Kusama" - }, - { - "assetId": 3, - "symbol": "MOVR", - "precision": 18, - "type": "statemine", - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Moonriver_(MOVR).svg", - "typeExtras": { - "assetId": "11" - }, - "name": "Moonriver" - }, - { - "assetId": 4, - "symbol": "USDT", - "precision": 6, - "type": "statemine", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDT.svg", - "typeExtras": { - "assetId": "14" - }, - "name": "USD Tether" - }, - { - "assetId": 5, - "symbol": "DAI-Karura", - "precision": 18, - "type": "statemine", - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/DAI.svg", - "typeExtras": { - "assetId": "15" - }, - "name": "DAI-Karura" - }, - { - "assetId": 6, - "symbol": "USDC-Karura", - "precision": 6, - "type": "statemine", - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDC.svg", - "typeExtras": { - "assetId": "16" - }, - "name": "USDC-Karura" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://calamari.subscan.io/extrinsic/{hash}", - "account": "https://calamari.subscan.io/account/{address}", - "multisig": "https://calamari.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - }, - { - "name": "Sub.ID", - "account": "https://sub.id/{address}" - }, - { - "name": "Polkaholic", - "account": "https://polkaholic.io/account/{address}", - "extrinsic": "https://polkaholic.io/tx/{hash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-calamari" - } - ], - "staking": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-calamari" - } - ] - } - }, { "name": "QUARTZ", "specName": "kusama", @@ -2457,7 +2272,9 @@ "chainId": "0xfc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Acala.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc-acala.luckyfriday.io", @@ -2752,7 +2569,9 @@ "chainId": "0x9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Astar.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc.astar.network", @@ -2961,7 +2780,9 @@ "chainId": "0xe61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Parallel.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://parallel-rpc.dwellir.com", @@ -3198,52 +3019,6 @@ ] } }, - { - "name": "CLV Parachain", - "specName": "polkadot", - "addressPrefix": 128, - "chainId": "0x5c7bd13edf349b33eb175ffae85210299e324d852916336027391536e686f267", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/CLV_Parachain.svg", - "nodes": [ - { - "url": "wss://rpc-para.clover.finance", - "name": "Clover node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "CLV", - "precision": 18, - "priceId": "clover-finance", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/CLV_(CLV).svg", - "name": "Clover Finance" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://clv.subscan.io/extrinsic/{hash}", - "account": "https://clv.subscan.io/account/{address}", - "multisig": "https://clv.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - }, - { - "name": "Polkaholic", - "account": "https://polkaholic.io/account/{address}", - "extrinsic": "https://polkaholic.io/tx/{hash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-clover" - } - ] - }, - "options": ["multisig"] - }, { "name": "Polkadot Asset Hub", "specName": "polkadot", @@ -3251,7 +3026,9 @@ "chainId": "0x68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Asset_Hub.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://sys.ibp.network/statemint", @@ -3400,7 +3177,9 @@ "chainId": "0x631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Robonomics.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://kusama.rpc.robonomics.network/", @@ -3455,205 +3234,58 @@ } }, { - "name": "Encointer", + "name": "Zeitgeist", "specName": "kusama", - "addressPrefix": 2, - "chainId": "0x7dd99936c1e9e6d1ce7d90eb6f33bea8393b4bf87677d675aa63c9cb3e8c5b5b", + "addressPrefix": 73, + "chainId": "0x1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Encointer.svg", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Zeitgeist.svg", + "options": [ + "multisig" + ], "nodes": [ { - "url": "wss://sys.ibp.network/encointer-kusama", - "name": "IBP network node" - }, - { - "url": "wss://sys.dotters.network/encointer-kusama", - "name": "Dotters Net node" + "url": "wss://zeitgeist-rpc.dwellir.com", + "name": "Dwellir node" }, { - "url": "wss://api.kusama.encointer.org", - "name": "Encointer association node" + "url": "wss://zeitgeist.api.onfinality.io/public-ws", + "name": "OnFinality node" } ], "assets": [ { "assetId": 0, - "symbol": "KSM", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kusama_(KSM).svg", - "name": "Kusama" + "symbol": "ZTG", + "precision": 10, + "priceId": "zeitgeist", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Zeitgeist_(ZTG).svg", + "name": "Zeitgeist" } ], "explorers": [ { "name": "Subscan", - "extrinsic": "https://encointer.subscan.io/extrinsic/{hash}", - "account": "https://encointer.subscan.io/account/{address}", - "multisig": "https://encointer.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" + "extrinsic": "https://zeitgeist.subscan.io/extrinsic/{hash}", + "account": "https://zeitgeist.subscan.io/account/{address}", + "multisig": "https://zeitgeist.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" }, { - "name": "Polkaholic", - "account": "https://polkaholic.io/account/{address}", - "extrinsic": "https://polkaholic.io/tx/{hash}" + "name": "Sub.ID", + "account": "https://sub.id/{address}" } ], "externalApi": { "history": [ { "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-encointer" - } - ] - }, - "options": [] - }, - { - "name": "Picasso", - "specName": "kusama", - "addressPrefix": 49, - "chainId": "0x6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc", - "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Picasso.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://picasso-rpc.composable.finance", - "name": "Composable node" - }, - { - "url": "wss://rpc.composablenodes.tech", - "name": "Composable node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "PICA", - "precision": 12, - "priceId": "picasso", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Picasso_(PICA).svg", - "name": "Picasso" - }, - { - "assetId": 1, - "symbol": "DOT", - "precision": 10, - "type": "orml", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", - "typeExtras": { - "currencyIdScale": "0x06000000000000000000000000000000", - "currencyIdType": "u128", - "existentialDeposit": "21430000", - "transfersEnabled": true - }, - "name": "Polkadot" - }, - { - "assetId": 2, - "symbol": "KSM", - "precision": 12, - "type": "orml", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kusama_(KSM).svg", - "typeExtras": { - "currencyIdScale": "0x04000000000000000000000000000000", - "currencyIdType": "u128", - "existentialDeposit": "375000000", - "transfersEnabled": true - }, - "name": "Kusama" - }, - { - "assetId": 3, - "symbol": "USDT", - "precision": 6, - "type": "orml", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDT.svg", - "typeExtras": { - "currencyIdScale": "0x82000000000000000000000000000000", - "currencyIdType": "u128", - "existentialDeposit": "1500", - "transfersEnabled": true - }, - "name": "USD Tether" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://picasso.subscan.io/extrinsic/{hash}", - "account": "https://picasso.subscan.io/account/{address}", - "multisig": "https://picasso.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - }, - { - "name": "Polkaholic", - "account": "https://polkaholic.io/account/{address}", - "extrinsic": "https://polkaholic.io/tx/{hash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-picasso" - } - ] - } - }, - { - "name": "Zeitgeist", - "specName": "kusama", - "addressPrefix": 73, - "chainId": "0x1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", - "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Zeitgeist.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://zeitgeist-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://zeitgeist.api.onfinality.io/public-ws", - "name": "OnFinality node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "ZTG", - "precision": 10, - "priceId": "zeitgeist", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Zeitgeist_(ZTG).svg", - "name": "Zeitgeist" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://zeitgeist.subscan.io/extrinsic/{hash}", - "account": "https://zeitgeist.subscan.io/account/{address}", - "multisig": "https://zeitgeist.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - }, - { - "name": "Sub.ID", - "account": "https://sub.id/{address}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-zeitgeist" - } - ], - "staking": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-zeitgeist" + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-zeitgeist" + } + ], + "staking": [ + { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-zeitgeist" } ] } @@ -3701,7 +3333,9 @@ } ] }, - "options": ["multisig"] + "options": [ + "multisig" + ] }, { "name": "Subsocial", @@ -3744,57 +3378,9 @@ } ] }, - "options": ["multisig"] - }, - { - "name": "Crust Shadow", - "specName": "kusama", - "addressPrefix": 66, - "chainId": "0xd4c0c08ca49dc7c680c3dac71a7c0703e5b222f4b6c03fe4c5219bb8f22c18dc", - "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Crust_Shadow.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://rpc2-shadow.crust.network/", - "name": "Crust node" - }, - { - "url": "wss://rpc-shadow.crust.network/", - "name": "Public Crust node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "CSM", - "precision": 12, - "priceId": "crust-storage-market", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Crust_Shadow_(CSM).svg", - "name": "Crust Shadow" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://shadow.subscan.io/extrinsic/{hash}", - "account": "https://shadow.subscan.io/account/{address}", - "multisig": "https://shadow.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - }, - { - "name": "Polkaholic", - "account": "https://polkaholic.io/account/{address}", - "extrinsic": "https://polkaholic.io/tx/{hash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-shadow" - } - ] - } + "options": [ + "multisig" + ] }, { "name": "Integritee Parachain", @@ -3803,7 +3389,9 @@ "chainId": "0xcdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Integritee.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://kusama.api.integritee.network", @@ -3852,7 +3440,9 @@ "chainId": "0xb3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Centrifuge.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://centrifuge-rpc.dwellir.com", @@ -3901,7 +3491,11 @@ "chainId": "0xafdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/HydraDX.svg", - "options": ["multisig", "regular_proxy", "pure_proxy"], + "options": [ + "multisig", + "regular_proxy", + "pure_proxy" + ], "nodes": [ { "url": "wss://hydradx-rpc.dwellir.com", @@ -4468,7 +4062,9 @@ "chainId": "0xbf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Interlay.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://api.interlay.io/parachain", @@ -4721,60 +4317,6 @@ ] } }, - { - "name": "Nodle Parachain", - "specName": "polkadot", - "addressPrefix": 37, - "chainId": "0x97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Nodle.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://eden-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://nodle-parachain.api.onfinality.io/public-ws", - "name": "OnFinality node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "NODL", - "precision": 11, - "priceId": "nodle-network", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Nodle_(NODL).svg", - "name": "Nodle" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://nodle.subscan.io/extrinsic/{hash}", - "account": "https://nodle.subscan.io/account/{address}", - "multisig": "https://nodle.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - }, - { - "name": "Sub.ID", - "account": "https://sub.id/{address}" - }, - { - "name": "Polkaholic", - "account": "https://polkaholic.io/account/{address}", - "extrinsic": "https://polkaholic.io/tx/{hash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-nodle" - } - ] - } - }, { "name": "Phala", "specName": "polkadot", @@ -4782,7 +4324,9 @@ "chainId": "0x1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Phala.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://phala-rpc.dwellir.com", @@ -4835,7 +4379,9 @@ "chainId": "0x0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Turing.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc.turing.oak.tech", @@ -4988,7 +4534,9 @@ "addressPrefix": 42, "chainId": "0x70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/AlephZero.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://ws.azero.dev", @@ -5029,56 +4577,59 @@ } }, { - "name": "Composable Finance", + "name": "Bifrost Polkadot", "specName": "polkadot", - "addressPrefix": 50, - "chainId": "0xdaab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d", + "addressPrefix": 6, + "chainId": "0x262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Composable.svg", - "options": ["multisig"], + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bifrost_Polkadot.svg", + "options": [ + "multisig" + ], "nodes": [ { - "url": "wss://rpc.composable.finance", - "name": "Composable node" + "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", + "name": "Liebi node" } ], "assets": [ { "assetId": 0, - "symbol": "LAYR", + "symbol": "BNC", "precision": 12, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Composable_Finance_(LAYR).svg", - "name": "Composable Finance" + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Bifrost_(BNC).svg", + "name": "Bifrost" }, { "assetId": 1, - "symbol": "DOT", - "precision": 10, + "symbol": "GLMR", + "precision": 18, "type": "orml", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Moonbeam_(GLMR).svg", "typeExtras": { - "currencyIdScale": "0x06000000000000000000000000000000", - "currencyIdType": "u128", - "existentialDeposit": "21430000", + "currencyIdScale": "0x0801", + "currencyIdType": "BifrostPrimitivesCurrencyCurrencyId", + "existentialDeposit": "1000000000000", "transfersEnabled": true }, - "name": "Polkadot" + "name": "Moonbeam" }, { "assetId": 2, - "symbol": "KSM", - "precision": 12, + "symbol": "DOT", + "precision": 10, "type": "orml", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kusama_(KSM).svg", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", "typeExtras": { - "currencyIdScale": "0x04000000000000000000000000000000", - "currencyIdType": "u128", - "existentialDeposit": "375000000", + "currencyIdScale": "0x0800", + "currencyIdType": "BifrostPrimitivesCurrencyCurrencyId", + "existentialDeposit": "1000000", "transfersEnabled": true }, - "name": "Kusama" + "name": "Polkadot" }, { "assetId": 3, @@ -5088,270 +4639,9 @@ "priceId": "tether", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDT.svg", "typeExtras": { - "currencyIdScale": "0x82000000000000000000000000000000", - "currencyIdType": "u128", - "existentialDeposit": "1500", - "transfersEnabled": true - }, - "name": "USD Tether" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://composable.subscan.io/extrinsic/{hash}", - "account": "https://composable.subscan.io/account/{address}", - "multisig": "https://composable.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - }, - { - "name": "Polkaholic", - "account": "https://polkaholic.io/account/{address}", - "extrinsic": "https://polkaholic.io/tx/{hash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-composable" - } - ] - } - }, - { - "name": "Polkadex", - "specName": "node", - "addressPrefix": 88, - "chainId": "0x3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadex.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://polkadex.api.onfinality.io/public-ws", - "name": "OnFinality node" - }, - { - "url": "wss://polkadex.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "PDEX", - "precision": 12, - "priceId": "polkadex", - "staking": "relaychain", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadex_(PDEX).svg", - "name": "Polkadex" - }, - { - "assetId": 1, - "symbol": "DOT", - "precision": 12, - "type": "statemine", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", - "typeExtras": { - "assetId": "95930534000017180603917534864279132680" - }, - "name": "Polkadot" - }, - { - "assetId": 2, - "symbol": "USDT", - "precision": 12, - "type": "statemine", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDT.svg", - "typeExtras": { - "assetId": "3496813586714279103986568049643838918" - }, - "name": "USD Tether" - }, - { - "assetId": 3, - "symbol": "ASTR", - "precision": 12, - "type": "statemine", - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Astar_(ASTR).svg", - "typeExtras": { - "assetId": "222121451965151777636299756141619631150" - }, - "name": "Astar" - }, - { - "assetId": 4, - "symbol": "PHA", - "precision": 12, - "type": "statemine", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Phala_(PHA).svg", - "typeExtras": { - "assetId": "193492391581201937291053139015355410612" - }, - "name": "Phala" - }, - { - "assetId": 5, - "symbol": "iBTC", - "precision": 12, - "type": "statemine", - "priceId": "bitcoin", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/iBTC.svg", - "typeExtras": { - "assetId": "226557799181424065994173367616174607641" - }, - "name": "Interlay Bitcoin" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://polkadex.subscan.io/extrinsic/{hash}", - "account": "https://polkadex.subscan.io/account/{address}", - "multisig": "https://polkadex.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - }, - { - "name": "Sub.ID", - "account": "https://sub.id/{address}" - } - ], - "externalApi": { - "staking": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-polkadex" - } - ], - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-polkadex" - } - ] - } - }, - { - "name": "NeuroWeb", - "specName": "polkadot", - "addressPrefix": 101, - "chainId": "0xe7e0962324a3b86c83404dbea483f25fb5dab4c224791c81b756cfc948006174", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/NeuroWeb.svg", - "nodes": [ - { - "url": "wss://parachain-rpc.origin-trail.network", - "name": "TraceLabs node" - }, - { - "url": "wss://origintrail-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "NEURO", - "precision": 12, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/NEURO.svg", - "name": "NEURO" - }, - { - "assetId": 1, - "symbol": "TRAC", - "precision": 18, - "type": "statemine", - "priceId": "origintrail", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/OriginTrail_(TRAC).svg", - "typeExtras": { - "assetId": "1" - }, - "name": "OriginTrail Parachain" - } - ], - "explorers": [ - { - "name": "Polkaholic", - "account": "https://polkaholic.io/account/{address}", - "extrinsic": "https://polkaholic.io/tx/{hash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-origin-trail" - } - ] - }, - "options": [] - }, - { - "name": "Bifrost Polkadot", - "specName": "polkadot", - "addressPrefix": 6, - "chainId": "0x262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bifrost_Polkadot.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", - "name": "Liebi node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "BNC", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Bifrost_(BNC).svg", - "name": "Bifrost" - }, - { - "assetId": 1, - "symbol": "GLMR", - "precision": 18, - "type": "orml", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Moonbeam_(GLMR).svg", - "typeExtras": { - "currencyIdScale": "0x0801", - "currencyIdType": "BifrostPrimitivesCurrencyCurrencyId", - "existentialDeposit": "1000000000000", - "transfersEnabled": true - }, - "name": "Moonbeam" - }, - { - "assetId": 2, - "symbol": "DOT", - "precision": 10, - "type": "orml", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", - "typeExtras": { - "currencyIdScale": "0x0800", - "currencyIdType": "BifrostPrimitivesCurrencyCurrencyId", - "existentialDeposit": "1000000", - "transfersEnabled": true - }, - "name": "Polkadot" - }, - { - "assetId": 3, - "symbol": "USDT", - "precision": 6, - "type": "orml", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDT.svg", - "typeExtras": { - "currencyIdScale": "0x0802", - "currencyIdType": "BifrostPrimitivesCurrencyCurrencyId", - "existentialDeposit": "1000", + "currencyIdScale": "0x0802", + "currencyIdType": "BifrostPrimitivesCurrencyCurrencyId", + "existentialDeposit": "1000", "transfersEnabled": true }, "name": "USD Tether" @@ -5497,7 +4787,9 @@ "chainId": "0x2fc8bb6ed7c0051bdcf4866c322ed32b6276572713607e3297ccf411b8f14aa9", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Litentry.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc.litentry-parachain.litentry.io", @@ -5698,36 +4990,15 @@ ], "options": [] }, - { - "name": "Aleph Zero Testnet", - "specName": "aleph-node", - "addressPrefix": 42, - "chainId": "0x05d5279c52c484cc80396535a316add7d47b1c5b9e0398dd1f584149341460c5", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/AlephZero_Testnet.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://ws.test.azero.dev", - "name": "Aleph Zero node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "TZERO", - "precision": 12, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Default.svg", - "name": "Aleph Zero Testnet" - } - ] - }, { "name": "Moonbase Relay Testnet", "specName": "westend", "addressPrefix": 42, "chainId": "0xe1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonbase_Alpha_Testnet.svg", - "options": ["testnet"], + "options": [ + "testnet" + ], "nodes": [ { "url": "wss://fro-moon-rpc-1-moonbase-relay-rpc-1.moonbase.ol-infra.network", @@ -5745,158 +5016,35 @@ ] }, { - "name": "Polymesh Testnet", - "specName": "polymesh_testnet", - "addressPrefix": 42, - "chainId": "0x3c3183f6d701500766ff7d147b79c4f10014a095eaaa98e960dcef6b3ead50ee", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polymesh_Testnet.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://testnet-rpc.polymesh.live", - "name": "Polymath node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "POLYX", - "precision": 6, - "priceId": "polymesh", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polymesh_(POLYX).svg", - "name": "Polymesh Testnet" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://polymesh.subscan.io/extrinsic/{hash}", - "account": "https://polymesh.subscan.io/account/{address}", - "multisig": "https://polymesh.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - } - ] - }, - { - "name": "Kabocha", + "name": "Imbue", "specName": "kusama", - "addressPrefix": 27, - "chainId": "0xfeb426ca713f0f46c96465b8f039890370cf6bfd687c9076ea2843f58a6ae8a7", + "addressPrefix": 42, + "chainId": "0xca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kabocha.svg", - "options": ["multisig"], + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Imbue.svg", + "options": [ + "multisig" + ], "nodes": [ { - "url": "wss://kabocha.jelliedowl.com", - "name": "JelliedOwl node" + "url": "wss://kusama.imbuenetwork.com", + "name": "Imbue node" } ], "assets": [ { "assetId": 0, - "symbol": "KAB", + "symbol": "IMBU", "precision": 12, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kabocha_(KAB).svg", - "name": "Kabocha" - } - ], - "explorers": [ - { - "name": "Polkaholic", - "account": "https://polkaholic.io/account/{address}", - "extrinsic": "https://polkaholic.io/tx/{hash}" + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Imbue_(IMBU).svg", + "name": "Imbue" } ], "externalApi": { "history": [ { "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-kabocha" - } - ] - } - }, - { - "name": "Bajun", - "specName": "kusama", - "addressPrefix": 1337, - "chainId": "0x35a06bfec2edf0ff4be89a6428ccd9ff5bd0167d618c5a0d4341f9600a458d14", - "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bajun.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://rpc-parachain.bajun.network", - "name": "AjunaNetwork node" - }, - { - "url": "wss://bajun.public.curie.radiumblock.co/ws", - "name": "Radium node" - }, - { - "url": "wss://bajun.api.onfinality.io/public-ws", - "name": "OnFinality node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "BAJU", - "precision": 12, - "priceId": "ajuna-network", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Bajun_(BAJU).svg", - "name": "Bajun" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://bajun.subscan.io/extrinsic/{hash}", - "account": "https://bajun.subscan.io/account/{address}", - "multisig": "https://bajun.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - }, - { - "name": "Polkaholic", - "account": "https://polkaholic.io/account/{address}", - "extrinsic": "https://polkaholic.io/tx/{hash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-bajun" - } - ] - } - }, - { - "name": "Imbue", - "specName": "kusama", - "addressPrefix": 42, - "chainId": "0xca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", - "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Imbue.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://kusama.imbuenetwork.com", - "name": "Imbue node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "IMBU", - "precision": 12, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Imbue_(IMBU).svg", - "name": "Imbue" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-imbue" + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-imbue" } ] } @@ -5907,7 +5055,9 @@ "addressPrefix": 42, "chainId": "0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Rococo_Testnet.svg", - "options": ["testnet"], + "options": [ + "testnet" + ], "nodes": [ { "url": "wss://rococo-rpc.polkadot.io/", @@ -5931,7 +5081,9 @@ "chainId": "0xd42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Tinkernet.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://tinkernet-rpc.dwellir.com", @@ -5963,7 +5115,9 @@ "chainId": "0xcceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Amplitude.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc-amplitude.pendulumchain.tech", @@ -6034,1923 +5188,371 @@ } }, { - "name": "Ternoa", - "specName": "mainnet", - "addressPrefix": 42, - "chainId": "0x6859c81ca95ef624c9dfe4dc6e3381c33e5d6509e35e147092bfbc780f777c4e", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Ternoa.svg", - "nodes": [ - { - "url": "wss://mainnet.ternoa.network", - "name": "CapsuleCorp node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "CAPS", - "precision": 18, - "priceId": "coin-capsule", - "staking": "relaychain", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Ternoa_(CAPS).svg", - "name": "Ternoa" - } - ], - "explorers": [ - { - "name": "Ternoa explorer", - "extrinsic": "https://explorer.ternoa.com/extrinsic/{hash}", - "account": "https://explorer.ternoa.com/account/{address}" - } - ], - "externalApi": { - "staking": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-ternoa" - } - ], - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-ternoa" - } - ] - }, - "options": ["multisig"] - }, - { - "name": "Ternoa Alphanet", - "specName": "alphanet", - "addressPrefix": 42, - "chainId": "0x18bcdb75a0bba577b084878db2dc2546eb21504eaad4b564bb7d47f9d02b6ace", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Ternoa_Alphanet.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://alphanet.ternoa.com", - "name": "Ternoa Alphanet node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "CAPS", - "precision": 18, - "priceId": "coin-capsule", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Ternoa_(CAPS).svg", - "name": "Ternoa" - } - ], - "explorers": [ - { - "name": "Ternoa Alphanet explorer", - "extrinsic": "https://explorer-alphanet.ternoa.dev/extrinsic/{hash}", - "account": "https://explorer-alphanet.ternoa.dev/{address}" - } - ] - }, - { - "name": "Turing Staging", - "specName": "turing", - "addressPrefix": 51, - "chainId": "0xd54f0988402deb4548538626ce37e4a318441ea0529ca369400ebec4e04dfe4b", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Turing_Staging.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://rpc.turing-staging.oak.tech", - "name": "OAK node" - } + "name": "Pendulum", + "specName": "polkadot", + "addressPrefix": 56, + "chainId": "0x5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Pendulum.svg", + "options": [ + "multisig" ], - "assets": [ - { - "assetId": 0, - "symbol": "TUR", - "precision": 10, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Turing_(TUR).svg", - "name": "Turing" - } - ] - }, - { - "name": "Governance2 Testnet", - "specName": "governance2", - "addressPrefix": 42, - "chainId": "0xa2ee5a1f55a23dccd0c35e36512f9009e6e50a5654e8e5e469445d0748632aa8", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Governance2_Testnet.svg", - "options": ["testnet"], "nodes": [ { - "url": "wss://governance2-testnet.litentry.io", - "name": "Development node" + "url": "wss://rpc-pendulum.prd.pendulumchain.tech", + "name": "Pendulum node" } ], "assets": [ { "assetId": 0, - "symbol": "Unit", + "symbol": "PEN", "precision": 12, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Default.svg", - "name": "Test token" - } - ], - "explorers": [ + "priceId": "pendulum-chain", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Pendulum_(PEN).svg", + "name": "Pendulum token" + }, { - "name": "Governance2 Testnet explorer", - "account": "https://gov2.statescan.io/#/accounts/{address}" - } - ] - }, - { - "name": "Polymesh", - "specName": "polymesh_mainnet", - "addressPrefix": 12, - "chainId": "0x6fbd74e5e1d0a61d52ccfe9d4adaed16dd3a7caa37c6bc4d0c2fa12e8b2f4063", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polymesh.svg", - "nodes": [ + "assetId": 1, + "symbol": "DOT", + "precision": 10, + "type": "orml", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", + "typeExtras": { + "currencyIdScale": "0x0100", + "currencyIdType": "SpacewalkPrimitivesCurrencyId", + "existentialDeposit": "1000", + "transfersEnabled": true + }, + "name": "Polkadot" + }, { - "url": "wss://mainnet-rpc.polymesh.network", - "name": "Polymesh node" - } - ], - "assets": [ + "assetId": 2, + "symbol": "USDT", + "precision": 6, + "type": "orml", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDT.svg", + "typeExtras": { + "currencyIdScale": "0x0101", + "currencyIdType": "SpacewalkPrimitivesCurrencyId", + "existentialDeposit": "1000", + "transfersEnabled": true + }, + "name": "USD Tether" + }, { - "assetId": 0, - "symbol": "POLYX", + "assetId": 3, + "symbol": "USDC", "precision": 6, - "priceId": "polymesh", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polymesh_(POLYX).svg", - "name": "Polymesh Testnet" - } - ], - "explorers": [ + "type": "orml", + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDC.svg", + "typeExtras": { + "currencyIdScale": "0x0102", + "currencyIdType": "SpacewalkPrimitivesCurrencyId", + "existentialDeposit": "1000", + "transfersEnabled": true + }, + "name": "USD Coin" + }, { - "name": "Subscan", - "extrinsic": "https://polymesh.subscan.io/extrinsic/{hash}", - "account": "https://polymesh.subscan.io/account/{address}", - "multisig": "https://polymesh.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" + "assetId": 11, + "symbol": "GLMR", + "precision": 18, + "type": "orml", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Moonbeam_(GLMR).svg", + "typeExtras": { + "currencyIdScale": "0x0106", + "currencyIdType": "SpacewalkPrimitivesCurrencyId", + "existentialDeposit": "1000", + "transfersEnabled": true + }, + "name": "Moonbeam" } ], "externalApi": { "history": [ { "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-polymesh" + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-pendulum" } ] }, - "options": [] - }, - { - "name": "Beresheet", - "specName": "beresheet", - "addressPrefix": 7, - "chainId": "0x8da6a03e0989154ff8c1977cbc0cbd55f6879d8759c272a4f3c078cef794bf5f", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Beresheet.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://beresheet.jelliedowl.net", - "name": "JelliedOwl node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "tEDG", - "precision": 18, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Default.svg", - "name": "Beresheet" - } - ] - }, - { - "name": "DAO IPCI", - "specName": "kusama", - "addressPrefix": 32, - "chainId": "0x6f0f071506de39058fe9a95bbca983ac0e9c5da3443909574e95d52eb078d348", - "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/DAOIPCI.svg", - "nodes": [ - { - "url": "wss://kusama.rpc.ipci.io", - "name": "Airalab node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "MITO", - "precision": 12, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/DAO_IPCI_(MITO).svg", - "name": "DAO IPCI" - } - ], "explorers": [ { - "name": "Polkaholic", - "account": "https://polkaholic.io/account/{address}", - "extrinsic": "https://polkaholic.io/tx/{hash}" + "name": "Subscan", + "extrinsic": "https://pendulum.subscan.io/extrinsic/{hash}", + "account": "https://pendulum.subscan.io/account/{address}", + "multisig": "https://pendulum.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-dao-ipci" - } - ] - }, - "options": ["multisig"] + ] }, { - "name": "Myriad", - "specName": "appchain", - "addressPrefix": 42, - "chainId": "0x74ed91fbc18497f011290f9119a2217908649170337b6414a2d44923ade07063", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Myriad.svg", - "nodes": [ - { - "url": "wss://gateway.mainnet.octopus.network/myriad/a4cb0a6e30ff5233a3567eb4e8cb71e0", - "name": "Octopus node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "MYRIA", - "precision": 18, - "priceId": "myriad-social", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Myriad_(MYRIA).svg", - "name": "Myriad" - } - ], - "explorers": [ - { - "name": "Explorer", - "account": "https://explorer.mainnet.oct.network/myriad/accounts/{address}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-myriad" - } - ] - }, - "options": [] - }, - { - "name": "Fusotao", - "specName": "fusotao", - "addressPrefix": 42, - "chainId": "0xa7113159e275582ee71ee499b24378a2416f34dc5aaf714443f0d11c6c3d99d3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Fusotao.svg", - "nodes": [ - { - "url": "wss://gateway.mainnet.octopus.network/fusotao/0efwa9v0crdx4dg3uj8jdmc5y7dj4ir2", - "name": "Octopus node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "TAO", - "precision": 18, - "priceId": "fusotao", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Bittensor_(TAO).svg", - "name": "TAO" - } - ], - "explorers": [ - { - "name": "Explorer", - "account": "https://explorer.mainnet.oct.network/fusotao/accounts/{address}" - } - ], - "options": [] - }, - { - "name": "XX network", - "specName": "xxnetwork", - "addressPrefix": 55, - "chainId": "0x50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/XX_network.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://xxnetwork-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc.xx.network", - "name": "xx Foundation node" - }, - { - "url": "wss://rpc-hetzner.xx.network", - "name": "xx Foundation node" - }, - { - "url": "wss://rpc-do.xx.network", - "name": "xx Foundation node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "XX", - "precision": 9, - "priceId": "xxcoin", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/xx_network_(XX).svg", - "name": "XX network" - } - ], - "explorers": [ - { - "name": "XX explorer", - "extrinsic": "https://explorer.xx.network/extrinsics/{hash}", - "account": "https://explorer.xx.network/accounts/{address}" - }, - { - "name": "Polkastats", - "extrinsic": "https://xx.polkastats.io/extrinsic/{hash}", - "account": "https://xx.polkastats.io/account/{address}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-xx-network" - } - ] - } - }, - { - "name": "Pendulum", - "specName": "polkadot", - "addressPrefix": 56, - "chainId": "0x5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Pendulum.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://rpc-pendulum.prd.pendulumchain.tech", - "name": "Pendulum node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "PEN", - "precision": 12, - "priceId": "pendulum-chain", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Pendulum_(PEN).svg", - "name": "Pendulum token" - }, - { - "assetId": 1, - "symbol": "DOT", - "precision": 10, - "type": "orml", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", - "typeExtras": { - "currencyIdScale": "0x0100", - "currencyIdType": "SpacewalkPrimitivesCurrencyId", - "existentialDeposit": "1000", - "transfersEnabled": true - }, - "name": "Polkadot" - }, - { - "assetId": 2, - "symbol": "USDT", - "precision": 6, - "type": "orml", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDT.svg", - "typeExtras": { - "currencyIdScale": "0x0101", - "currencyIdType": "SpacewalkPrimitivesCurrencyId", - "existentialDeposit": "1000", - "transfersEnabled": true - }, - "name": "USD Tether" - }, - { - "assetId": 3, - "symbol": "USDC", - "precision": 6, - "type": "orml", - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDC.svg", - "typeExtras": { - "currencyIdScale": "0x0102", - "currencyIdType": "SpacewalkPrimitivesCurrencyId", - "existentialDeposit": "1000", - "transfersEnabled": true - }, - "name": "USD Coin" - }, - { - "assetId": 11, - "symbol": "GLMR", - "precision": 18, - "type": "orml", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Moonbeam_(GLMR).svg", - "typeExtras": { - "currencyIdScale": "0x0106", - "currencyIdType": "SpacewalkPrimitivesCurrencyId", - "existentialDeposit": "1000", - "transfersEnabled": true - }, - "name": "Moonbeam" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-pendulum" - } - ] - } - }, - { - "name": "Aventus Testnet", - "specName": "avn-parachain", - "addressPrefix": 42, - "chainId": "0xa6ffcef7fb8caadf7f6c5ad8ada65e3eaa90d1604f3eabda546ff1d486865a0c", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Aventus_Testnet.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://public-rpc.public-testnet.aventus.io", - "name": "Aventus testnet node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "AVT", - "precision": 18, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Aventus_(AVT).svg", - "name": "Aventus" - } - ], - "explorers": [ - { - "name": "Aventus testnet explorer", - "extrinsic": "https://explorer.testnet.aventus.io/transaction/{hash}", - "account": "https://explorer.testnet.aventus.io/address/{address}" - } - ] - }, - { - "name": "Aventus", - "specName": "polkadot", - "addressPrefix": 42, - "chainId": "0x8b5c955b5c8fd7112562327e3859473df4e3dff49bd72a113dbb668d2cfa20d7", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Aventus.svg", - "nodes": [ - { - "url": "wss://public-rpc.mainnet.aventus.io", - "name": "Aventus node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "AVT", - "precision": 18, - "priceId": "aventus", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Aventus_(AVT).svg", - "name": "Aventus" - } - ], - "explorers": [ - { - "name": "Aventus explorer", - "extrinsic": "https://explorer.mainnet.aventus.io/transaction/{hash}", - "account": "https://explorer.mainnet.aventus.io/address/{address}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-aventus" - } - ] - }, - "options": [] - }, - { - "name": "Crust Polkadot Parachain", - "specName": "polkadot", - "addressPrefix": 88, - "chainId": "0x4319cc49ee79495b57a1fec4d2bd43f59052dcc690276de566c2691d6df4f7b8", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Crust_Parachain.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://crust-parachain.crustapps.net", - "name": "Crust node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "CRU", - "precision": 12, - "priceId": "crust-network", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Crust_(CRU).svg", - "name": "Crust" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://crust-parachain.subscan.io/extrinsic/{hash}", - "account": "https://crust-parachain.subscan.io/account/{address}", - "multisig": "https://crust-parachain.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-crust" - } - ] - } - }, - { - "name": "Kintsugi Testnet", - "specName": "kusama", - "addressPrefix": 2092, - "chainId": "0x3a5a5cd27eb15fd26c37315a0f0b938733bb798c897428448efac5e6150cad06", - "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kintsugi_Testnet.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://api-dev-kintsugi.interlay.io:443/parachain", - "name": "Kintsugi Labs" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "KINT", - "precision": 12, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kintsugi_(KINT).svg", - "typeExtras": { - "currencyIdScale": "0x000c", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "Kintsugi" - }, - { - "assetId": 1, - "symbol": "kBTC", - "precision": 8, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/kBTC.svg", - "typeExtras": { - "currencyIdScale": "0x000b", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "KINT Bitcoin" - }, - { - "assetId": 3, - "symbol": "LKSM", - "precision": 12, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/lKSM.svg", - "typeExtras": { - "currencyIdScale": "0x0102000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "Liquid KSM" - }, - { - "assetId": 4, - "symbol": "USDT", - "precision": 6, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDT.svg", - "typeExtras": { - "currencyIdScale": "0x0103000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "USD Tether" - }, - { - "assetId": 5, - "symbol": "aSEED", - "precision": 12, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/aSEED.svg", - "typeExtras": { - "currencyIdScale": "0x0101000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "Acala SEED" - }, - { - "assetId": 6, - "symbol": "KSM", - "precision": 12, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kusama_(KSM).svg", - "typeExtras": { - "currencyIdScale": "0x000a", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "Kusama" - }, - { - "assetId": 7, - "symbol": "LP KSM-kBTC", - "precision": 18, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/KSM-kBTC.svg", - "typeExtras": { - "currencyIdScale": "0x03000a000b", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": false - }, - "name": "LP token KSM-kBTC" - }, - { - "assetId": 8, - "symbol": "LP kBTC-USDT", - "precision": 18, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/kBTC-USDT.svg", - "typeExtras": { - "currencyIdScale": "0x03000b0101000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": false - }, - "name": "LP token kBTC-USDT" - }, - { - "assetId": 9, - "symbol": "LP KSM-KINT", - "precision": 18, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/KSM-KINT.svg", - "typeExtras": { - "currencyIdScale": "0x03000a000c", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": false - }, - "name": "LP token KSM-KINT" - }, - { - "assetId": 10, - "symbol": "qkBTC", - "precision": 8, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/kBTC.svg", - "typeExtras": { - "currencyIdScale": "0x0201000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": false - }, - "name": "Kitsugi BTC" - }, - { - "assetId": 11, - "symbol": "qKSM", - "precision": 12, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kusama_(KSM).svg", - "typeExtras": { - "currencyIdScale": "0x0202000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": false - }, - "name": "Kitsugi KSM" - }, - { - "assetId": 12, - "symbol": "qUSDT", - "precision": 6, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDT.svg", - "typeExtras": { - "currencyIdScale": "0x0203000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": false - }, - "name": "USD Tether" - } - ] - }, - { - "name": "Hashed Network", - "specName": "polkadot", - "addressPrefix": 42, - "chainId": "0xdce5477cfca571c2cb652f38bbb70429004be3cf9649dd2b4ad9455b2251fe43", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Hashed.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://c3.hashed.live", - "name": "Hashed systems 3 node" - }, - { - "url": "wss://c2.hashed.network", - "name": "Hashed systems 2 node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "HASH", - "precision": 18, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Hashed_Network_(HASH).svg", - "name": "Hashed" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-hashed-network" - } - ] - } - }, - { - "name": "Bittensor", - "specName": "node-subtensor", - "addressPrefix": 42, - "chainId": "0x2f0555cc76fc2840a25a6ea3b9637146806f1f44b090c175ffde2a7e5ab36c03", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bittensor.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://entrypoint-finney.opentensor.ai:443", - "name": "Opentensor Fdn node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "TAO", - "precision": 9, - "priceId": "bittensor", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Bittensor_(TAO).svg", - "name": "TAO" - } - ], - "explorers": [ - { - "name": "SCAN", - "account": "https://bittensor.com/scan/address/{address}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-bittensor" - } - ] - } - }, - { - "name": "3DPass", - "specName": "poscan-runtime", - "addressPrefix": 71, - "chainId": "0x6c5894837ad89b6d92b114a2fb3eafa8fe3d26a54848e3447015442cd6ef4e66", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/3DPass.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://rpc.3dpscan.io", - "name": "3DPass node" - }, - { - "url": "wss://rpc2.3dpass.org", - "name": "3DPass node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "P3D", - "precision": 12, - "priceId": "3dpass", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/3DPass_(P3D).svg", - "name": "3DPass" - } - ], - "explorers": [ - { - "name": "3DPass explorer", - "extrinsic": "https://explorer.3dpass.org/extrinsic/{hash}", - "account": "https://explorer.3dpass.org/account/{address}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-3dpass" - } - ] - } - }, - { - "name": "Ajuna", - "specName": "polkadot", - "addressPrefix": 1328, - "chainId": "0xe358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Ajuna.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://rpc-parachain.ajuna.network", - "name": "Ajuna node" - }, - { - "url": "wss://ajuna.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "AJUN", - "precision": 12, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Ajuna_(AJUN).svg", - "name": "Ajuna" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---ajuna" - } - ] - } - }, - { - "name": "Frequency", - "specName": "polkadot", - "addressPrefix": 90, - "chainId": "0x4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Frequency.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://0.rpc.frequency.xyz", - "name": "Frequency0 node" - }, - { - "url": "wss://1.rpc.frequency.xyz", - "name": "Frequency1 node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "FRQCY", - "precision": 8, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/FREQUENCY_(FRQCY).svg", - "name": "Frequency" - } - ], - "explorers": [ - { - "name": "Polkaholic", - "account": "https://polkaholic.io/account/{address}", - "extrinsic": "https://polkaholic.io/tx/{hash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/frequency" - } - ] - } - }, - { - "name": "Vara", - "specName": "vara", - "addressPrefix": 137, - "chainId": "0xfe1b4c55fd4d668101126434206571a7838a8b6b93a6d1b95d607e78e6c53763", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Vara.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://rpc.vara-network.io", - "name": "Gear Tech node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "VARA", - "precision": 12, - "priceId": "vara-network", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Vara.svg", - "name": "Vara" - } - ], - "explorers": [ - { - "name": "Varascan", - "account": "https://explorer.vara-network.io/account/{address}", - "event": "https://explorer.vara-network.io/event/{event}" - }, - { - "name": "Subscan", - "extrinsic": "https://vara.subscan.io/extrinsic/{hash}", - "account": "https://vara.subscan.io/account/{address}", - "multisig": "https://vara.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---vara" - } - ], - "staking": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---vara" - } - ] - } - }, - { - "name": "Polkadot Bridge Hub", - "specName": "polkadot", - "addressPrefix": 0, - "chainId": "0xdcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Bridge_Hub.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://sys.ibp.network/bridgehub-polkadot", - "name": "IBP network node" - }, - { - "url": "wss://sys.dotters.network/bridgehub-polkadot", - "name": "Dotters Net node" - }, - { - "url": "wss://dot-rpc.stakeworld.io/bridgehub", - "name": "Stakeworld node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "DOT", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", - "name": "Polkadot" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/polkadot-bridgehub" - } - ] - }, - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://bridgehub-polkadot.subscan.io/extrinsic/{hash}", - "account": "https://bridgehub-polkadot.subscan.io/account/{address}", - "multisig": "https://bridgehub-polkadot.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - } - ] - }, - { - "name": "Kusama Bridge Hub", - "specName": "kusama", - "addressPrefix": 2, - "chainId": "0x00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", - "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama_Bridge_Hub.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://sys.ibp.network/bridgehub-kusama", - "name": "IBP network node" - }, - { - "url": "wss://sys.dotters.network/bridgehub-kusama", - "name": "Dotters Net node" - }, - { - "url": "wss://ksm-rpc.stakeworld.io/bridgehub", - "name": "Stakeworld node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "KSM", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kusama_(KSM).svg", - "name": "Kusama" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---kusama-bridgehub" - } - ] - }, - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://bridgehub-kusama.subscan.io/extrinsic/{hash}", - "account": "https://bridgehub-kusama.subscan.io/account/{address}", - "multisig": "https://bridgehub-kusama.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - } - ] - }, - { - "name": "Polkadot Collectives", - "specName": "polkadot", - "addressPrefix": 0, - "chainId": "0x46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Collectives.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://sys.ibp.network/collectives-polkadot", - "name": "IBP network node" - }, - { - "url": "wss://sys.dotters.network/collectives-polkadot", - "name": "Dotters Net node" - }, - { - "url": "wss://collectives.public.curie.radiumblock.co/ws", - "name": "Radium node" - }, - { - "url": "wss://dot-rpc.stakeworld.io/collectives", - "name": "Stakeworld node" - }, - { - "url": "wss://collectives.api.onfinality.io/public-ws", - "name": "Onfinality node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "DOT", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", - "name": "Polkadot" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/polkadot-collectives" - } - ] - } - }, - { - "name": "Amplitude Foucoco", - "specName": "kusama", - "addressPrefix": 57, - "chainId": "0x67221cd96c1551b72d55f65164d6a39f31b570c77a05c90e31931b0e2f379e13", - "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Amplitude_foucoco.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://rpc-foucoco.pendulumchain.tech/", - "name": "PendulumChain node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "AMPE", - "precision": 12, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Amplitude_(AMPE).svg", - "name": "Amplitude" - } - ] - }, - { - "name": "Interlay Testnet", - "specName": "polkadot", - "addressPrefix": 2032, - "chainId": "0x418ae94c9fce02b1ab3b5bc211cd2f2133426f2861d97482bbdfdac1bbb0fb92", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Interlay_Testnet.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://api-testnet.interlay.io:443/parachain", - "name": "Kintsugi Labs node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "INTR", - "precision": 10, - "type": "orml", - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Interlay_(INTR).svg", - "typeExtras": { - "currencyIdScale": "0x0002", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "Interlay" - }, - { - "assetId": 1, - "symbol": "iBTC", - "precision": 8, - "type": "orml", - "priceId": "bitcoin", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/iBTC.svg", - "typeExtras": { - "currencyIdScale": "0x0001", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "Interlay Bitcoin" - }, - { - "assetId": 2, - "symbol": "DOT", - "precision": 10, - "type": "orml", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", - "typeExtras": { - "currencyIdScale": "0x0000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "Polkadot" - }, - { - "assetId": 3, - "symbol": "KINT", - "precision": 12, - "type": "orml", - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kintsugi_(KINT).svg", - "typeExtras": { - "currencyIdScale": "0x000c", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "Kintsugi" - }, - { - "assetId": 4, - "symbol": "kBTC", - "precision": 8, - "type": "orml", - "priceId": "bitcoin", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/kBTC.svg", - "typeExtras": { - "currencyIdScale": "0x000b", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "KINT Bitcoin" - }, - { - "assetId": 5, - "symbol": "KSM", - "precision": 12, - "type": "orml", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kusama_(KSM).svg", - "typeExtras": { - "currencyIdScale": "0x000a", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "Kusama" - }, - { - "assetId": 6, - "symbol": "LDOT", - "precision": 10, - "type": "orml", - "priceId": "liquid-staking-dot", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/lDOT.svg", - "typeExtras": { - "currencyIdScale": "0x0101000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "Liquid DOT" - }, - { - "assetId": 7, - "symbol": "USDT", - "precision": 6, - "type": "orml", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDT.svg", - "typeExtras": { - "currencyIdScale": "0x0102000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": true - }, - "name": "USD Tether" - }, - { - "assetId": 8, - "symbol": "LP iBTC-USDT", - "precision": 18, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/iBTC-USDT.svg", - "typeExtras": { - "currencyIdScale": "0x0300010102000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": false - }, - "name": "LP token iBTC-USDT" - }, - { - "assetId": 9, - "symbol": "LP DOT-iBTC", - "precision": 18, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/DOT-iBTC.svg", - "typeExtras": { - "currencyIdScale": "0x0300000001", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": false - }, - "name": "LP token DOT-iBTC" - }, - { - "assetId": 10, - "symbol": "LP INTR-USDT", - "precision": 18, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/INTR-USDT.svg", - "typeExtras": { - "currencyIdScale": "0x0300020102000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": false - }, - "name": "LP token INTR-USDT" - }, - { - "assetId": 11, - "symbol": "qiBTC", - "precision": 8, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/iBTC.svg", - "typeExtras": { - "currencyIdScale": "0x0201000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": false - }, - "name": "Interlay BTC" - }, - { - "assetId": 12, - "symbol": "qUSDT", - "precision": 6, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/USDT.svg", - "typeExtras": { - "currencyIdScale": "0x0203000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": false - }, - "name": "USD Tether" - }, - { - "assetId": 13, - "symbol": "qDOT", - "precision": 10, - "type": "orml", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", - "typeExtras": { - "currencyIdScale": "0x0202000000", - "currencyIdType": "InterbtcPrimitivesCurrencyId", - "existentialDeposit": "0", - "transfersEnabled": false - }, - "name": "Interlay DOT" - } - ] - }, - { - "name": "krest", - "specName": "kusama", - "addressPrefix": 42, - "chainId": "0xb3dd5ad6a82872b30aabaede8f41dfd4ff6c32ff82f8757d034a45be63cf104c", - "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/krest.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://wss-krest.peaq.network", - "name": "Krest node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "KREST", - "precision": 18, - "priceId": "krest", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/krest_(krest).svg", - "name": "KREST token" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://krest.subscan.io/extrinsic/{hash}", - "account": "https://krest.subscan.io/account/{address}", - "multisig": "https://krest.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---krest" - } - ] - } - }, - { - "name": "Jur", - "specName": "jur-node", - "addressPrefix": 42, - "chainId": "0x58d1393b47b11707978fbc07e77d7b6f7d9aa88d207dc008a52385f7dba6156a", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Jur.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://jur-mainnet-archive-rpc-1.icebergnodes.io", - "name": "Iceberg node" - }, - { - "url": "wss://jur-archive-mainnet-1.simplystaking.xyz/VX68C07AR4K2/ws", - "name": "Simplystaking node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "JUR", - "precision": 18, - "priceId": "jur", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Jur.svg", - "name": "Jur token" - } - ], - "explorers": [ - { - "name": "Polkascan", - "account": "https://jur.io/explorer/jur/account/{address}", - "event": "https://jur.io/explorer/jur/event/{event}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---jur" - } - ] - } - }, - { - "name": "Manta Atlantic", - "specName": "polkadot", - "addressPrefix": 77, - "chainId": "0xf3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Manta.svg", - "nodes": [ - { - "url": "wss://ws.manta.systems", - "name": "Manta node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "MANTA", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Manta_(MANTA).svg", - "name": "Manta token" - }, - { - "assetId": 1, - "symbol": "DOT", - "precision": 10, - "type": "statemine", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", - "typeExtras": { - "assetId": "8" - }, - "name": "Polkadot" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://manta.subscan.io/extrinsic/{hash}", - "account": "https://manta.subscan.io/account/{address}", - "multisig": "https://manta.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - } - ], - "options": [], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---manta" - } - ], - "staking": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---manta" - } - ] - } - }, - { - "name": "Enjin Matrix", - "specName": "matrix-enjin", - "addressPrefix": 1110, - "chainId": "0x3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Enjin.svg", - "options": [], - "nodes": [ - { - "url": "wss://rpc.matrix.blockchain.enjin.io", - "name": "Enjin node" - }, - { - "url": "wss://enjin-matrix-rpc-1.dwellir.com", - "name": "Dwellir node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "ENJ", - "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Enjin_(ENJ).svg", - "name": "Enjin token" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://matrix.subscan.io/extrinsic/{hash}", - "account": "https://matrix.subscan.io/account/{address}", - "multisig": "https://matrix.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/enjin-matrixchain" - } - ] - } - }, - { - "name": "Rococo Asset Hub", - "specName": "statemine", - "addressPrefix": 42, - "chainId": "0x7c34d42fc815d392057c78b49f2755c753440ccd38bcb0405b3bcfb601d08734", - "parentId": "0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/AssetHub_Testnet.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://rococo-asset-hub-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rococo-asset-hub-rpc.polkadot.io", - "name": "Parity node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "ROC", - "precision": 12, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Rococo_(ROC).svg", - "name": "Rococo Testnet" - }, - { - "assetId": 1, - "symbol": "HOP", - "precision": 12, - "type": "statemine", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Default.svg", - "typeExtras": { - "assetId": "0x010100b11c", - "palletName": "ForeignAssets" - }, - "name": "HOP token" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://assethub-rococo.subscan.io/extrinsic/{hash}", - "account": "https://assethub-rococo.subscan.io/account/{address}", - "multisig": "https://assethub-rococo.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - } - ], - "externalApi": { - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---westmint" - } - ] - } - }, - { - "name": "EWX Staging Parachain Argon", - "specName": "polkadot", - "addressPrefix": 42, - "chainId": "0x6ab1bd8aed6d5fdcaf347826bfcd0172681181edf8356b90cb3cf47076698ae2", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Energy_Web_Testnet.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://ewx-staging-parachain-argon-wmfbanx0xb.energyweb.org/ws", - "name": "EWX node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "VT", - "precision": 18, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Default_(VT).svg", - "name": "VT token" - } - ] - }, - { - "name": "Watr", - "specName": "polkadot", - "addressPrefix": 19, - "chainId": "0x161db6cdc5896fe55ef12b4778fe78dd65d7af43f65c601786b88d7a93ebc58a", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Watr.svg", - "options": ["multisig"], - "nodes": [ - { - "url": "wss://watr-rpc.watr-api.network", - "name": "EWX node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "WATR", - "precision": 18, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Watr.svg", - "name": "WATR token" - } - ] - }, - { - "name": "Joystream", - "specName": "joystream-node", - "addressPrefix": 126, - "chainId": "0x6b5e488e0fa8f9821110d5c13f4c468abcd43ce5e297e62b34c53c3346465956", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Joystream.svg", - "options": ["multisig"], + "name": "Vara", + "specName": "vara", + "addressPrefix": 137, + "chainId": "0xfe1b4c55fd4d668101126434206571a7838a8b6b93a6d1b95d607e78e6c53763", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Vara.svg", + "options": [ + "multisig" + ], "nodes": [ { - "url": "wss://rpc.joystream.org", - "name": "Jsgenesis node" + "url": "wss://rpc.vara-network.io", + "name": "Gear Tech node" } ], "assets": [ { "assetId": 0, - "symbol": "JOY", - "precision": 10, - "priceId": "joystream", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/JOY.svg", - "name": "Joystream" + "symbol": "VARA", + "precision": 12, + "priceId": "vara-network", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Vara.svg", + "name": "Vara" } ], "explorers": [ + { + "name": "Varascan", + "account": "https://explorer.vara-network.io/account/{address}", + "event": "https://explorer.vara-network.io/event/{event}" + }, { "name": "Subscan", - "extrinsic": "https://joystream.subscan.io/extrinsic/{hash}", - "account": "https://joystream.subscan.io/account/{address}", - "multisig": "https://joystream.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" + "extrinsic": "https://vara.subscan.io/extrinsic/{hash}", + "account": "https://vara.subscan.io/account/{address}", + "multisig": "https://vara.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" } ], "externalApi": { - "staking": [ + "history": [ { "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---joystream" + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---vara" } ], - "history": [ + "staking": [ { "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---joystream" + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---vara" } ] } }, { - "name": "Dock", - "specName": "dock-pos-main-runtime", - "addressPrefix": 22, - "chainId": "0x6bfe24dca2a3be10f22212678ac13a6446ec764103c0f3471c71609eac384aae", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Dock.svg", - "nodes": [ - { - "url": "wss://mainnet-node.dock.io", - "name": "Dock Association node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "DOCK", - "precision": 6, - "priceId": "dock", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/DOCK.svg", - "name": "Dock token" - } - ], - "explorers": [ - { - "name": "Subscan", - "extrinsic": "https://dock.subscan.io/extrinsic/{hash}", - "account": "https://dock.subscan.io/account/{address}", - "multisig": "https://dock.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - } - ], - "options": [] - }, - { - "name": "Polimec", + "name": "Polkadot Bridge Hub", "specName": "polkadot", - "addressPrefix": 41, - "chainId": "0x7eb9354488318e7549c722669dcbdcdc526f1fef1420e7944667212f3601fdbd", + "addressPrefix": 0, + "chainId": "0xdcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polimec.svg", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Bridge_Hub.svg", + "options": [ + "multisig" + ], "nodes": [ { - "url": "wss://rpc.polimec.org", - "name": "Polimec node" + "url": "wss://sys.ibp.network/bridgehub-polkadot", + "name": "IBP network node" + }, + { + "url": "wss://sys.dotters.network/bridgehub-polkadot", + "name": "Dotters Net node" + }, + { + "url": "wss://dot-rpc.stakeworld.io/bridgehub", + "name": "Stakeworld node" } ], "assets": [ { "assetId": 0, - "symbol": "PLMC", + "symbol": "DOT", "precision": 10, - "priceId": "polimec", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/PLMC.svg", - "name": "Polimec token" + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", + "name": "Polkadot" } ], - "options": ["multisig"], "externalApi": { "history": [ { "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---polymec" - } - ], - "staking": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---polymec" + "url": "https://api.subquery.network/sq/nova-wallet/polkadot-bridgehub" } ] - } + }, + "explorers": [ + { + "name": "Subscan", + "extrinsic": "https://bridgehub-polkadot.subscan.io/extrinsic/{hash}", + "account": "https://bridgehub-polkadot.subscan.io/account/{address}", + "multisig": "https://bridgehub-polkadot.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" + } + ] }, { - "name": "Energy Web X", - "specName": "polkadot", - "addressPrefix": 42, - "chainId": "0x5a51e04b88a4784d205091aa7bada002f3e5da3045e5b05655ee4db2589c33b5", - "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Energy_Web_X.svg", + "name": "Kusama Bridge Hub", + "specName": "kusama", + "addressPrefix": 2, + "chainId": "0x00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", + "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama_Bridge_Hub.svg", + "options": [ + "multisig" + ], "nodes": [ { - "url": "wss://public-rpc.mainnet.energywebx.com/", - "name": "Energywebx node" + "url": "wss://sys.ibp.network/bridgehub-kusama", + "name": "IBP network node" + }, + { + "url": "wss://sys.dotters.network/bridgehub-kusama", + "name": "Dotters Net node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/bridgehub", + "name": "Stakeworld node" } ], "assets": [ { "assetId": 0, - "symbol": "EWT", - "precision": 18, - "priceId": "energy-web-token", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Energy_Web_(EWT).svg", - "name": "Energy Web token" + "symbol": "KSM", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kusama_(KSM).svg", + "name": "Kusama" } ], - "options": ["multisig"], "externalApi": { "history": [ { "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---energy-web-x" + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---kusama-bridgehub" } ] - } - }, - { - "name": "Energy Web X Rococo", - "specName": "ewx-parachain", - "addressPrefix": 42, - "chainId": "0xac123be800b7c9a3e3449bb70edd8e3d9008d27826381451eebf94bce1db1fbe", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Energy_Web_Testnet.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://public-rpc.testnet.energywebx.com", - "name": "Energy Web X Rococo node" - } - ], - "assets": [ + }, + "explorers": [ { - "assetId": 0, - "symbol": "VT", - "precision": 18, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Default_(VT).svg", - "name": "VT token" + "name": "Subscan", + "extrinsic": "https://bridgehub-kusama.subscan.io/extrinsic/{hash}", + "account": "https://bridgehub-kusama.subscan.io/account/{address}", + "multisig": "https://bridgehub-kusama.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" } ] }, { - "name": "InvArch", + "name": "Polkadot Collectives", "specName": "polkadot", - "addressPrefix": 117, - "chainId": "0x31a7d8914fb31c249b972f18c115f1e22b4b039abbcb03c73b6774c5642f9efe", + "addressPrefix": 0, + "chainId": "0x46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/InvArch.svg", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Collectives.svg", + "options": [ + "multisig" + ], "nodes": [ { - "url": "wss://invarch-rpc.dwellir.com", - "name": "Dwellir node" + "url": "wss://sys.ibp.network/collectives-polkadot", + "name": "IBP network node" + }, + { + "url": "wss://sys.dotters.network/collectives-polkadot", + "name": "Dotters Net node" + }, + { + "url": "wss://collectives.public.curie.radiumblock.co/ws", + "name": "Radium node" + }, + { + "url": "wss://dot-rpc.stakeworld.io/collectives", + "name": "Stakeworld node" + }, + { + "url": "wss://collectives.api.onfinality.io/public-ws", + "name": "Onfinality node" } ], "assets": [ { "assetId": 0, - "symbol": "VARCH", - "precision": 12, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/InvArch_(VARCH).svg", - "name": "VARCH token" + "symbol": "DOT", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Polkadot_(DOT).svg", + "name": "Polkadot" } ], - "options": [], "externalApi": { "history": [ { "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---invarch" + "url": "https://api.subquery.network/sq/nova-wallet/polkadot-collectives" } ] } }, { - "name": "Crust", - "specName": "crust", - "addressPrefix": 66, - "chainId": "0x8b404e7ed8789d813982b9cb4c8b664c05b3fbf433309f603af014ec9ce56a8c", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Crust.svg", + "name": "Rococo Asset Hub", + "specName": "statemine", + "addressPrefix": 42, + "chainId": "0x7c34d42fc815d392057c78b49f2755c753440ccd38bcb0405b3bcfb601d08734", + "parentId": "0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/AssetHub_Testnet.svg", + "options": [ + "testnet" + ], "nodes": [ { - "url": "wss://rpc.crust.network", - "name": "Crust node" - }, - { - "url": "wss://crust-mainnet-rpc.dwellir.com", + "url": "wss://rococo-asset-hub-rpc.dwellir.com", "name": "Dwellir node" }, { - "url": "wss://crust.api.onfinality.io/public-ws", - "name": "OnFinallity node" + "url": "wss://rococo-asset-hub-rpc.polkadot.io", + "name": "Parity node" } ], "assets": [ { "assetId": 0, - "symbol": "CRU", + "symbol": "ROC", "precision": 12, - "priceId": "crust-network", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Crust_(CRU).svg", - "name": "Crust" + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Rococo_(ROC).svg", + "name": "Rococo Testnet" + }, + { + "assetId": 1, + "symbol": "HOP", + "precision": 12, + "type": "statemine", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Default.svg", + "typeExtras": { + "assetId": "0x010100b11c", + "palletName": "ForeignAssets" + }, + "name": "HOP token" } ], "explorers": [ { "name": "Subscan", - "extrinsic": "https://crust.subscan.io/extrinsic/{hash}", - "account": "https://crust.subscan.io/account/{address}", - "multisig": "https://crust.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" + "extrinsic": "https://assethub-rococo.subscan.io/extrinsic/{hash}", + "account": "https://assethub-rococo.subscan.io/account/{address}", + "multisig": "https://assethub-rococo.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" } ], - "options": [] + "externalApi": { + "history": [ + { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---westmint" + } + ] + } }, { "name": "Moonriver", @@ -7959,7 +5561,12 @@ "chainId": "0x401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonriver.svg", - "options": ["ethereum_based", "regular_proxy", "pure_proxy"], + "options": [ + "multisig", + "ethereum_based", + "regular_proxy", + "pure_proxy" + ], "nodes": [ { "url": "wss://wss.api.moonriver.moonbeam.network", @@ -8289,7 +5896,10 @@ "chainId": "0x91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", "parentId": "0xe1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonbase_Alpha_Testnet.svg", - "options": ["testnet", "ethereum_based"], + "options": [ + "testnet", + "ethereum_based" + ], "nodes": [ { "url": "wss://moonbase-alpha.public.blastapi.io", @@ -8340,7 +5950,12 @@ "chainId": "0xfe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonbeam.svg", - "options": ["ethereum_based", "regular_proxy", "pure_proxy"], + "options": [ + "multisig", + "ethereum_based", + "regular_proxy", + "pure_proxy" + ], "nodes": [ { "url": "wss://wss.api.moonbeam.network", @@ -8679,79 +6294,6 @@ ] } }, - { - "name": "Novasama Testnet - Kusama", - "specName": "westend", - "addressPrefix": 42, - "chainId": "0xeb9f47779a9f5033c160c03511b5e4c1b2869210d7bc78a6ad7d0f28897455a7", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Governance2_Testnet.svg", - "options": ["testnet", "regular_proxy", "pure_proxy"], - "nodes": [ - { - "url": "wss://novasama.co", - "name": "Development node" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "KSM", - "precision": 12, - "staking": "relaychain", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Kusama_(KSM).svg", - "name": "Kusama" - } - ], - "externalApi": { - "staking": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/stepanLav/novasama-test-kusama" - } - ], - "history": [ - { - "type": "subquery", - "url": "https://api.subquery.network/sq/stepanLav/novasama-test-kusama" - } - ] - } - }, - { - "name": "Paseo Testnet", - "specName": "paseo", - "addressPrefix": 42, - "chainId": "0x77afd6190f1554ad45fd0d31aee62aacc33c6db0ea801129acb813f913e0764f", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Paseo_Testnet.svg", - "options": ["testnet"], - "nodes": [ - { - "url": "wss://rpc.ibp.network/paseo", - "name": "IBP-GeoDNS1" - }, - { - "url": "wss://rpc.dotters.network/paseo", - "name": "IBP-GeoDNS2" - } - ], - "assets": [ - { - "assetId": 0, - "symbol": "PAS", - "precision": 10, - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/assets/white/Default.svg", - "name": "PAS" - } - ], - "explorers": [ - { - "name": "Subscan", - "account": "https://paseo.subscan.io/account/{address}", - "extrinsic": "https://paseo.subscan.io/extrinsic/{hash}", - "multisig": "https://paseo.subscan.io/multisig_extrinsic/{index}?call_hash={callHash}" - } - ] - }, { "name": "Westend Bridge Hub", "specName": "westend", @@ -8759,7 +6301,9 @@ "chainId": "0x0441383e31d1266a92b4cb2ddd4c2e3661ac476996db7e5844c52433b81fe782", "parentId": "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/BridgeHub_Testnet.svg", - "options": ["testnet"], + "options": [ + "testnet" + ], "nodes": [ { "url": "wss://westend-bridge-hub-rpc.dwellir.com", @@ -8793,17 +6337,22 @@ ] }, { - "name": "Rolimec Rococo", - "specName": "polimec-mainnet", - "addressPrefix": 41, - "chainId": "0x7bbb72faf3d6d997ebe622a4e0ebfb6fdacf905b6141c86a3122cd479213a8d8", - "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polimec_Testnet.svg", - "options": ["testnet"], + "name": "Kusama People", + "specName": "kusama", + "addressPrefix": 2, + "chainId": "0xc1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", + "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama_People.svg", + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://kusama-people-rpc.polkadot.io", "name": "Parity node", - "features": ["noTls12"] + "features": [ + "noTls12" + ] }, { "url": "wss://ksm-rpc.stakeworld.io/people", @@ -8827,7 +6376,10 @@ "addressPrefix": 42, "chainId": "0xd67c91ca75c199ff1ee9555567dfad21b9033165c39977170ec8d3f6c1fa433c", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Westend_Testnet.svg", - "options": ["testnet", "governance"], + "options": [ + "testnet", + "governance" + ], "nodes": [ { "url": "wss://rpc-test-network-1.novasamatech.org", From f55410bd6081910a629bcb0c53210de3c2e76f5a Mon Sep 17 00:00:00 2001 From: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> Date: Fri, 31 May 2024 11:22:57 +0200 Subject: [PATCH 25/90] fix: Update chains_dev.json From 895234d95c25e94ebc4c4bd78ec98d2686174796 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Fri, 31 May 2024 13:03:09 +0200 Subject: [PATCH 26/90] fix: don't show multisigs --- .../shared/config/chains/chains_dev.json | 223 +++++------------- .../shared/ui/Modals/BaseModal/BaseModal.tsx | 8 +- .../widgets/CreateWallet/lib/types.ts | 1 + .../widgets/CreateWallet/model/form-model.ts | 4 +- 4 files changed, 63 insertions(+), 173 deletions(-) diff --git a/src/renderer/shared/config/chains/chains_dev.json b/src/renderer/shared/config/chains/chains_dev.json index 5cb08cc01d..667be22f5a 100644 --- a/src/renderer/shared/config/chains/chains_dev.json +++ b/src/renderer/shared/config/chains/chains_dev.json @@ -5,12 +5,7 @@ "addressPrefix": 0, "chainId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot.svg", - "options": [ - "multisig", - "governance", - "regular_proxy", - "pure_proxy" - ], + "options": ["multisig", "governance", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://rpc-polkadot.novasamatech.org", @@ -99,12 +94,7 @@ "addressPrefix": 2, "chainId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama.svg", - "options": [ - "multisig", - "governance", - "regular_proxy", - "pure_proxy" - ], + "options": ["multisig", "governance", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://rpc-kusama.novasamatech.org", @@ -193,13 +183,7 @@ "addressPrefix": 42, "chainId": "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Westend_Testnet.svg", - "options": [ - "testnet", - "multisig", - "governance", - "regular_proxy", - "pure_proxy" - ], + "options": ["testnet", "multisig", "governance", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://westend-rpc.dwellir.com", @@ -258,6 +242,13 @@ "type": "subquery", "url": "https://api.subquery.network/sq/nova-wallet/novasama-westend-proxy" } + ], + + "multisig": [ + { + "type": "subquery", + "url": "http://localhost:3000" + } ] } }, @@ -268,9 +259,7 @@ "chainId": "0x67f9723393ef76214df0118c34bbbd3dbebc8ed46a10973a8c969d48fe7598c9", "parentId": "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Westmint_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://westmint-rpc.dwellir.com", @@ -348,9 +337,7 @@ "chainId": "0x48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama_Asset_Hub.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://sys.ibp.network/statemine", @@ -476,9 +463,7 @@ "chainId": "0xbaf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Karura.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://karura-rpc-0.aca-api.network", @@ -909,9 +894,7 @@ "chainId": "0xf1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Shiden.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.shiden.astar.network", @@ -1112,9 +1095,7 @@ "chainId": "0x9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bifrost_Kusama.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://bifrost-rpc.liebi.com/ws", @@ -1365,9 +1346,7 @@ "chainId": "0x9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kintsugi.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://api-kusama.interlay.io/parachain", @@ -1578,9 +1557,7 @@ "chainId": "0x64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/ParallelHeiko.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://heiko-rpc.parallel.fi", @@ -1751,9 +1728,7 @@ "chainId": "0xa85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Basilisk.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.basilisk.cloud", @@ -1876,9 +1851,7 @@ "chainId": "0xaa3876c1dc8a1afcc2e9a685a49ff7704cfd36ad8c90bf2702b9d1b00cc40011", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Altair.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://altair.api.onfinality.io/public-ws", @@ -1923,9 +1896,7 @@ "chainId": "0xd43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Khala.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://khala-api.phala.network/ws", @@ -2160,9 +2131,7 @@ "chainId": "0x411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/KILT_Spiritnet.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://kilt-rpc.dwellir.com", @@ -2272,9 +2241,7 @@ "chainId": "0xfc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Acala.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc-acala.luckyfriday.io", @@ -2569,9 +2536,7 @@ "chainId": "0x9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Astar.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.astar.network", @@ -2780,9 +2745,7 @@ "chainId": "0xe61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Parallel.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://parallel-rpc.dwellir.com", @@ -3026,9 +2989,7 @@ "chainId": "0x68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Asset_Hub.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://sys.ibp.network/statemint", @@ -3177,9 +3138,7 @@ "chainId": "0x631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Robonomics.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://kusama.rpc.robonomics.network/", @@ -3240,9 +3199,7 @@ "chainId": "0x1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Zeitgeist.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://zeitgeist-rpc.dwellir.com", @@ -3333,9 +3290,7 @@ } ] }, - "options": [ - "multisig" - ] + "options": ["multisig"] }, { "name": "Subsocial", @@ -3378,9 +3333,7 @@ } ] }, - "options": [ - "multisig" - ] + "options": ["multisig"] }, { "name": "Integritee Parachain", @@ -3389,9 +3342,7 @@ "chainId": "0xcdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Integritee.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://kusama.api.integritee.network", @@ -3440,9 +3391,7 @@ "chainId": "0xb3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Centrifuge.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://centrifuge-rpc.dwellir.com", @@ -3491,11 +3440,7 @@ "chainId": "0xafdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/HydraDX.svg", - "options": [ - "multisig", - "regular_proxy", - "pure_proxy" - ], + "options": ["multisig", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://hydradx-rpc.dwellir.com", @@ -4062,9 +4007,7 @@ "chainId": "0xbf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Interlay.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://api.interlay.io/parachain", @@ -4324,9 +4267,7 @@ "chainId": "0x1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Phala.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://phala-rpc.dwellir.com", @@ -4379,9 +4320,7 @@ "chainId": "0x0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Turing.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.turing.oak.tech", @@ -4534,9 +4473,7 @@ "addressPrefix": 42, "chainId": "0x70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/AlephZero.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://ws.azero.dev", @@ -4583,9 +4520,7 @@ "chainId": "0x262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bifrost_Polkadot.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", @@ -4787,9 +4722,7 @@ "chainId": "0x2fc8bb6ed7c0051bdcf4866c322ed32b6276572713607e3297ccf411b8f14aa9", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Litentry.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.litentry-parachain.litentry.io", @@ -4996,9 +4929,7 @@ "addressPrefix": 42, "chainId": "0xe1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonbase_Alpha_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://fro-moon-rpc-1-moonbase-relay-rpc-1.moonbase.ol-infra.network", @@ -5022,9 +4953,7 @@ "chainId": "0xca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Imbue.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://kusama.imbuenetwork.com", @@ -5055,9 +4984,7 @@ "addressPrefix": 42, "chainId": "0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Rococo_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://rococo-rpc.polkadot.io/", @@ -5081,9 +5008,7 @@ "chainId": "0xd42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Tinkernet.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://tinkernet-rpc.dwellir.com", @@ -5115,9 +5040,7 @@ "chainId": "0xcceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Amplitude.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc-amplitude.pendulumchain.tech", @@ -5194,9 +5117,7 @@ "chainId": "0x5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Pendulum.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc-pendulum.prd.pendulumchain.tech", @@ -5296,9 +5217,7 @@ "addressPrefix": 137, "chainId": "0xfe1b4c55fd4d668101126434206571a7838a8b6b93a6d1b95d607e78e6c53763", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Vara.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://rpc.vara-network.io", @@ -5350,9 +5269,7 @@ "chainId": "0xdcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Bridge_Hub.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://sys.ibp.network/bridgehub-polkadot", @@ -5401,9 +5318,7 @@ "chainId": "0x00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama_Bridge_Hub.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://sys.ibp.network/bridgehub-kusama", @@ -5452,9 +5367,7 @@ "chainId": "0x46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Collectives.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://sys.ibp.network/collectives-polkadot", @@ -5503,9 +5416,7 @@ "chainId": "0x7c34d42fc815d392057c78b49f2755c753440ccd38bcb0405b3bcfb601d08734", "parentId": "0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/AssetHub_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://rococo-asset-hub-rpc.dwellir.com", @@ -5561,12 +5472,7 @@ "chainId": "0x401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonriver.svg", - "options": [ - "multisig", - "ethereum_based", - "regular_proxy", - "pure_proxy" - ], + "options": ["multisig", "ethereum_based", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://wss.api.moonriver.moonbeam.network", @@ -5896,10 +5802,7 @@ "chainId": "0x91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", "parentId": "0xe1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonbase_Alpha_Testnet.svg", - "options": [ - "testnet", - "ethereum_based" - ], + "options": ["testnet", "ethereum_based"], "nodes": [ { "url": "wss://moonbase-alpha.public.blastapi.io", @@ -5950,12 +5853,7 @@ "chainId": "0xfe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonbeam.svg", - "options": [ - "multisig", - "ethereum_based", - "regular_proxy", - "pure_proxy" - ], + "options": ["multisig", "ethereum_based", "regular_proxy", "pure_proxy"], "nodes": [ { "url": "wss://wss.api.moonbeam.network", @@ -6301,9 +6199,7 @@ "chainId": "0x0441383e31d1266a92b4cb2ddd4c2e3661ac476996db7e5844c52433b81fe782", "parentId": "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/BridgeHub_Testnet.svg", - "options": [ - "testnet" - ], + "options": ["testnet"], "nodes": [ { "url": "wss://westend-bridge-hub-rpc.dwellir.com", @@ -6343,16 +6239,12 @@ "chainId": "0xc1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama_People.svg", - "options": [ - "multisig" - ], + "options": ["multisig"], "nodes": [ { "url": "wss://kusama-people-rpc.polkadot.io", "name": "Parity node", - "features": [ - "noTls12" - ] + "features": ["noTls12"] }, { "url": "wss://ksm-rpc.stakeworld.io/people", @@ -6376,10 +6268,7 @@ "addressPrefix": 42, "chainId": "0xd67c91ca75c199ff1ee9555567dfad21b9033165c39977170ec8d3f6c1fa433c", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Westend_Testnet.svg", - "options": [ - "testnet", - "governance" - ], + "options": ["testnet", "governance"], "nodes": [ { "url": "wss://rpc-test-network-1.novasamatech.org", diff --git a/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx b/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx index 63f98cd514..f3822e02b9 100644 --- a/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx +++ b/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx @@ -40,10 +40,10 @@ export const BaseModal = ({
      {headerExist && (
      diff --git a/src/renderer/widgets/CreateWallet/lib/types.ts b/src/renderer/widgets/CreateWallet/lib/types.ts index 19c5a80de7..92c791cd32 100644 --- a/src/renderer/widgets/CreateWallet/lib/types.ts +++ b/src/renderer/widgets/CreateWallet/lib/types.ts @@ -1,6 +1,7 @@ import { Account, Chain, Transaction } from '@shared/core'; export const enum Step { + NONE, INIT, NAMETHRESHOLD, CONFIRM, diff --git a/src/renderer/widgets/CreateWallet/model/form-model.ts b/src/renderer/widgets/CreateWallet/model/form-model.ts index 23fdb41517..f0a8dfb4a9 100644 --- a/src/renderer/widgets/CreateWallet/model/form-model.ts +++ b/src/renderer/widgets/CreateWallet/model/form-model.ts @@ -94,7 +94,7 @@ const $availableAccounts = combine( if (!chain) return []; const filteredAccounts = walletUtils.getAccountsBy(wallets, (a, w) => { - const isValidWallet = !walletUtils.isWatchOnly(w) && !walletUtils.isProxied(w); + const isValidWallet = !walletUtils.isWatchOnly(w) && !walletUtils.isProxied(w) && !walletUtils.isMultisig(w); const isChainMatch = accountUtils.isChainAndCryptoMatch(a, chain); return isValidWallet && isChainMatch; @@ -102,7 +102,7 @@ const $availableAccounts = combine( const baseAccounts = filteredAccounts.filter((a) => accountUtils.isBaseAccount(a) && a.name); - return [...accountUtils.getAccountsAndShardGroups(filteredAccounts), ...baseAccounts]; + return [...filteredAccounts, ...baseAccounts]; }, ); From b270c5093c777867ae401853c11235aed1d39a12 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Fri, 31 May 2024 13:04:32 +0200 Subject: [PATCH 27/90] Revert "fix: don't show multisigs" This reverts commit 895234d95c25e94ebc4c4bd78ec98d2686174796. --- src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx | 8 ++++---- src/renderer/widgets/CreateWallet/model/form-model.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx b/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx index f3822e02b9..63f98cd514 100644 --- a/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx +++ b/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx @@ -40,10 +40,10 @@ export const BaseModal = ({
      {headerExist && (
      diff --git a/src/renderer/widgets/CreateWallet/model/form-model.ts b/src/renderer/widgets/CreateWallet/model/form-model.ts index f0a8dfb4a9..23fdb41517 100644 --- a/src/renderer/widgets/CreateWallet/model/form-model.ts +++ b/src/renderer/widgets/CreateWallet/model/form-model.ts @@ -94,7 +94,7 @@ const $availableAccounts = combine( if (!chain) return []; const filteredAccounts = walletUtils.getAccountsBy(wallets, (a, w) => { - const isValidWallet = !walletUtils.isWatchOnly(w) && !walletUtils.isProxied(w) && !walletUtils.isMultisig(w); + const isValidWallet = !walletUtils.isWatchOnly(w) && !walletUtils.isProxied(w); const isChainMatch = accountUtils.isChainAndCryptoMatch(a, chain); return isValidWallet && isChainMatch; @@ -102,7 +102,7 @@ const $availableAccounts = combine( const baseAccounts = filteredAccounts.filter((a) => accountUtils.isBaseAccount(a) && a.name); - return [...filteredAccounts, ...baseAccounts]; + return [...accountUtils.getAccountsAndShardGroups(filteredAccounts), ...baseAccounts]; }, ); From 472175c6542f3b2966ea73caa1a5d6cea383d407 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Fri, 31 May 2024 13:08:07 +0200 Subject: [PATCH 28/90] fix: none step --- .../shared/config/chains/chains_dev.json | 223 +++++++++++++----- .../CreateWallet/lib/create-multisig-utils.ts | 8 +- 2 files changed, 170 insertions(+), 61 deletions(-) diff --git a/src/renderer/shared/config/chains/chains_dev.json b/src/renderer/shared/config/chains/chains_dev.json index 667be22f5a..5cb08cc01d 100644 --- a/src/renderer/shared/config/chains/chains_dev.json +++ b/src/renderer/shared/config/chains/chains_dev.json @@ -5,7 +5,12 @@ "addressPrefix": 0, "chainId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot.svg", - "options": ["multisig", "governance", "regular_proxy", "pure_proxy"], + "options": [ + "multisig", + "governance", + "regular_proxy", + "pure_proxy" + ], "nodes": [ { "url": "wss://rpc-polkadot.novasamatech.org", @@ -94,7 +99,12 @@ "addressPrefix": 2, "chainId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama.svg", - "options": ["multisig", "governance", "regular_proxy", "pure_proxy"], + "options": [ + "multisig", + "governance", + "regular_proxy", + "pure_proxy" + ], "nodes": [ { "url": "wss://rpc-kusama.novasamatech.org", @@ -183,7 +193,13 @@ "addressPrefix": 42, "chainId": "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Westend_Testnet.svg", - "options": ["testnet", "multisig", "governance", "regular_proxy", "pure_proxy"], + "options": [ + "testnet", + "multisig", + "governance", + "regular_proxy", + "pure_proxy" + ], "nodes": [ { "url": "wss://westend-rpc.dwellir.com", @@ -242,13 +258,6 @@ "type": "subquery", "url": "https://api.subquery.network/sq/nova-wallet/novasama-westend-proxy" } - ], - - "multisig": [ - { - "type": "subquery", - "url": "http://localhost:3000" - } ] } }, @@ -259,7 +268,9 @@ "chainId": "0x67f9723393ef76214df0118c34bbbd3dbebc8ed46a10973a8c969d48fe7598c9", "parentId": "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Westmint_Testnet.svg", - "options": ["testnet"], + "options": [ + "testnet" + ], "nodes": [ { "url": "wss://westmint-rpc.dwellir.com", @@ -337,7 +348,9 @@ "chainId": "0x48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama_Asset_Hub.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://sys.ibp.network/statemine", @@ -463,7 +476,9 @@ "chainId": "0xbaf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Karura.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://karura-rpc-0.aca-api.network", @@ -894,7 +909,9 @@ "chainId": "0xf1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Shiden.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc.shiden.astar.network", @@ -1095,7 +1112,9 @@ "chainId": "0x9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bifrost_Kusama.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://bifrost-rpc.liebi.com/ws", @@ -1346,7 +1365,9 @@ "chainId": "0x9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kintsugi.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://api-kusama.interlay.io/parachain", @@ -1557,7 +1578,9 @@ "chainId": "0x64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/ParallelHeiko.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://heiko-rpc.parallel.fi", @@ -1728,7 +1751,9 @@ "chainId": "0xa85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Basilisk.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc.basilisk.cloud", @@ -1851,7 +1876,9 @@ "chainId": "0xaa3876c1dc8a1afcc2e9a685a49ff7704cfd36ad8c90bf2702b9d1b00cc40011", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Altair.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://altair.api.onfinality.io/public-ws", @@ -1896,7 +1923,9 @@ "chainId": "0xd43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Khala.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://khala-api.phala.network/ws", @@ -2131,7 +2160,9 @@ "chainId": "0x411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/KILT_Spiritnet.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://kilt-rpc.dwellir.com", @@ -2241,7 +2272,9 @@ "chainId": "0xfc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Acala.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc-acala.luckyfriday.io", @@ -2536,7 +2569,9 @@ "chainId": "0x9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Astar.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc.astar.network", @@ -2745,7 +2780,9 @@ "chainId": "0xe61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Parallel.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://parallel-rpc.dwellir.com", @@ -2989,7 +3026,9 @@ "chainId": "0x68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Asset_Hub.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://sys.ibp.network/statemint", @@ -3138,7 +3177,9 @@ "chainId": "0x631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Robonomics.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://kusama.rpc.robonomics.network/", @@ -3199,7 +3240,9 @@ "chainId": "0x1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Zeitgeist.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://zeitgeist-rpc.dwellir.com", @@ -3290,7 +3333,9 @@ } ] }, - "options": ["multisig"] + "options": [ + "multisig" + ] }, { "name": "Subsocial", @@ -3333,7 +3378,9 @@ } ] }, - "options": ["multisig"] + "options": [ + "multisig" + ] }, { "name": "Integritee Parachain", @@ -3342,7 +3389,9 @@ "chainId": "0xcdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Integritee.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://kusama.api.integritee.network", @@ -3391,7 +3440,9 @@ "chainId": "0xb3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Centrifuge.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://centrifuge-rpc.dwellir.com", @@ -3440,7 +3491,11 @@ "chainId": "0xafdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/HydraDX.svg", - "options": ["multisig", "regular_proxy", "pure_proxy"], + "options": [ + "multisig", + "regular_proxy", + "pure_proxy" + ], "nodes": [ { "url": "wss://hydradx-rpc.dwellir.com", @@ -4007,7 +4062,9 @@ "chainId": "0xbf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Interlay.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://api.interlay.io/parachain", @@ -4267,7 +4324,9 @@ "chainId": "0x1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Phala.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://phala-rpc.dwellir.com", @@ -4320,7 +4379,9 @@ "chainId": "0x0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Turing.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc.turing.oak.tech", @@ -4473,7 +4534,9 @@ "addressPrefix": 42, "chainId": "0x70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/AlephZero.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://ws.azero.dev", @@ -4520,7 +4583,9 @@ "chainId": "0x262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Bifrost_Polkadot.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", @@ -4722,7 +4787,9 @@ "chainId": "0x2fc8bb6ed7c0051bdcf4866c322ed32b6276572713607e3297ccf411b8f14aa9", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Litentry.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc.litentry-parachain.litentry.io", @@ -4929,7 +4996,9 @@ "addressPrefix": 42, "chainId": "0xe1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonbase_Alpha_Testnet.svg", - "options": ["testnet"], + "options": [ + "testnet" + ], "nodes": [ { "url": "wss://fro-moon-rpc-1-moonbase-relay-rpc-1.moonbase.ol-infra.network", @@ -4953,7 +5022,9 @@ "chainId": "0xca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Imbue.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://kusama.imbuenetwork.com", @@ -4984,7 +5055,9 @@ "addressPrefix": 42, "chainId": "0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Rococo_Testnet.svg", - "options": ["testnet"], + "options": [ + "testnet" + ], "nodes": [ { "url": "wss://rococo-rpc.polkadot.io/", @@ -5008,7 +5081,9 @@ "chainId": "0xd42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Tinkernet.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://tinkernet-rpc.dwellir.com", @@ -5040,7 +5115,9 @@ "chainId": "0xcceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Amplitude.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc-amplitude.pendulumchain.tech", @@ -5117,7 +5194,9 @@ "chainId": "0x5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Pendulum.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc-pendulum.prd.pendulumchain.tech", @@ -5217,7 +5296,9 @@ "addressPrefix": 137, "chainId": "0xfe1b4c55fd4d668101126434206571a7838a8b6b93a6d1b95d607e78e6c53763", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Vara.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://rpc.vara-network.io", @@ -5269,7 +5350,9 @@ "chainId": "0xdcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Bridge_Hub.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://sys.ibp.network/bridgehub-polkadot", @@ -5318,7 +5401,9 @@ "chainId": "0x00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama_Bridge_Hub.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://sys.ibp.network/bridgehub-kusama", @@ -5367,7 +5452,9 @@ "chainId": "0x46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Polkadot_Collectives.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://sys.ibp.network/collectives-polkadot", @@ -5416,7 +5503,9 @@ "chainId": "0x7c34d42fc815d392057c78b49f2755c753440ccd38bcb0405b3bcfb601d08734", "parentId": "0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/AssetHub_Testnet.svg", - "options": ["testnet"], + "options": [ + "testnet" + ], "nodes": [ { "url": "wss://rococo-asset-hub-rpc.dwellir.com", @@ -5472,7 +5561,12 @@ "chainId": "0x401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonriver.svg", - "options": ["multisig", "ethereum_based", "regular_proxy", "pure_proxy"], + "options": [ + "multisig", + "ethereum_based", + "regular_proxy", + "pure_proxy" + ], "nodes": [ { "url": "wss://wss.api.moonriver.moonbeam.network", @@ -5802,7 +5896,10 @@ "chainId": "0x91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", "parentId": "0xe1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonbase_Alpha_Testnet.svg", - "options": ["testnet", "ethereum_based"], + "options": [ + "testnet", + "ethereum_based" + ], "nodes": [ { "url": "wss://moonbase-alpha.public.blastapi.io", @@ -5853,7 +5950,12 @@ "chainId": "0xfe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", "parentId": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Moonbeam.svg", - "options": ["multisig", "ethereum_based", "regular_proxy", "pure_proxy"], + "options": [ + "multisig", + "ethereum_based", + "regular_proxy", + "pure_proxy" + ], "nodes": [ { "url": "wss://wss.api.moonbeam.network", @@ -6199,7 +6301,9 @@ "chainId": "0x0441383e31d1266a92b4cb2ddd4c2e3661ac476996db7e5844c52433b81fe782", "parentId": "0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/BridgeHub_Testnet.svg", - "options": ["testnet"], + "options": [ + "testnet" + ], "nodes": [ { "url": "wss://westend-bridge-hub-rpc.dwellir.com", @@ -6239,12 +6343,16 @@ "chainId": "0xc1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", "parentId": "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Kusama_People.svg", - "options": ["multisig"], + "options": [ + "multisig" + ], "nodes": [ { "url": "wss://kusama-people-rpc.polkadot.io", "name": "Parity node", - "features": ["noTls12"] + "features": [ + "noTls12" + ] }, { "url": "wss://ksm-rpc.stakeworld.io/people", @@ -6268,7 +6376,10 @@ "addressPrefix": 42, "chainId": "0xd67c91ca75c199ff1ee9555567dfad21b9033165c39977170ec8d3f6c1fa433c", "icon": "https://raw.githubusercontent.com/novasamatech/nova-spektr-utils/main/icons/v1/chains/Westend_Testnet.svg", - "options": ["testnet", "governance"], + "options": [ + "testnet", + "governance" + ], "nodes": [ { "url": "wss://rpc-test-network-1.novasamatech.org", diff --git a/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts b/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts index 93de2da94d..fe2fcf29b0 100644 --- a/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts +++ b/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts @@ -1,13 +1,11 @@ -import { Wallet } from '@/src/renderer/shared/core'; import { Step } from './types'; -import { walletUtils } from '@entities/wallet'; export const createMultisigUtils = { isSignStep, isSubmitStep, isConfirmStep, isInitStep, - noSignatoryWallet, + isNoneStep, isNameThresholdStep, }; @@ -31,6 +29,6 @@ function isSubmitStep(step: Step) { return step === Step.SUBMIT; } -function noSignatoryWallet(wallets: Wallet[]) { - return wallets.every((wallet) => !walletUtils.isWatchOnly(wallet) || !walletUtils.isMultisig(wallet)); +function isNoneStep(step: Step): boolean { + return step === Step.NONE; } From 08e5885f28075c89acd7fab5d1cad4dc2ab24823 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Fri, 31 May 2024 13:08:46 +0200 Subject: [PATCH 29/90] Revert "Revert "fix: don't show multisigs"" This reverts commit b270c5093c777867ae401853c11235aed1d39a12. --- src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx | 8 ++++---- src/renderer/widgets/CreateWallet/model/form-model.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx b/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx index 63f98cd514..f3822e02b9 100644 --- a/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx +++ b/src/renderer/shared/ui/Modals/BaseModal/BaseModal.tsx @@ -40,10 +40,10 @@ export const BaseModal = ({
      {headerExist && (
      diff --git a/src/renderer/widgets/CreateWallet/model/form-model.ts b/src/renderer/widgets/CreateWallet/model/form-model.ts index 23fdb41517..f0a8dfb4a9 100644 --- a/src/renderer/widgets/CreateWallet/model/form-model.ts +++ b/src/renderer/widgets/CreateWallet/model/form-model.ts @@ -94,7 +94,7 @@ const $availableAccounts = combine( if (!chain) return []; const filteredAccounts = walletUtils.getAccountsBy(wallets, (a, w) => { - const isValidWallet = !walletUtils.isWatchOnly(w) && !walletUtils.isProxied(w); + const isValidWallet = !walletUtils.isWatchOnly(w) && !walletUtils.isProxied(w) && !walletUtils.isMultisig(w); const isChainMatch = accountUtils.isChainAndCryptoMatch(a, chain); return isValidWallet && isChainMatch; @@ -102,7 +102,7 @@ const $availableAccounts = combine( const baseAccounts = filteredAccounts.filter((a) => accountUtils.isBaseAccount(a) && a.name); - return [...accountUtils.getAccountsAndShardGroups(filteredAccounts), ...baseAccounts]; + return [...filteredAccounts, ...baseAccounts]; }, ); From cdd3c4cdf93be2151a7c3e2a850857d6692709f3 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Fri, 31 May 2024 15:26:10 +0200 Subject: [PATCH 30/90] fix: flowfinished to reset --- .../widgets/CreateWallet/model/flow-model.ts | 17 ++++++++++++----- .../ui/MultisigWallet/MultisigWallet.tsx | 2 ++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index 2ee7d8126e..1b1233c29f 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -27,7 +27,6 @@ import { signModel } from '@features/operations/OperationSign/model/sign-model'; import { submitModel } from '@features/operations/OperationSubmit'; import { createMultisigUtils } from '../lib/create-multisig-utils'; -const reset = createEvent(); const stepChanged = createEvent(); const feeChanged = createEvent(); const multisigDepositChanged = createEvent(); @@ -45,16 +44,16 @@ const walletCreated = createEvent<{ threshold: number; }>(); const $selectedSigner = restore(selectedSignerChanged, null); -const $step = restore(stepChanged, Step.INIT); +const $step = restore(stepChanged, Step.NONE).reset(flowFinished); const $fee = restore(feeChanged, ZERO_BALANCE); const $multisigDeposit = restore(multisigDepositChanged, ZERO_BALANCE); const $isFeeLoading = restore(isFeeLoadingChanged, true); -const $callbacks = createStore(null).reset(reset); +const $callbacks = createStore(null).reset(flowFinished); const callbacksApi = createApi($callbacks, { callbacksChanged: (state, props: Callbacks) => ({ ...state, ...props }), }); -const $error = createStore('').reset(reset); +const $error = createStore('').reset(flowFinished); const $wrappedTx = createStore(null).reset(flowFinished); const $coreTx = createStore(null).reset(flowFinished); const $multisigTx = createStore(null).reset(flowFinished); @@ -379,6 +378,12 @@ sample({ target: flowFinished, }); +sample({ + clock: flowFinished, + fn: () => Step.INIT, + target: stepChanged, +}); + export const flowModel = { $error, $step, @@ -390,7 +395,6 @@ export const flowModel = { $signer, $signerWallet, events: { - reset, callbacksChanged: callbacksApi.callbacksChanged, walletCreated, stepChanged, @@ -401,4 +405,7 @@ export const flowModel = { //for tests formSubmitted, }, + output: { + flowFinished, + }, }; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx index 41fa97b1d9..da7fa7f9c7 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx @@ -46,11 +46,13 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { if (!isOpen && isModalOpen) { closeMultisigModal({ closeAll: false }); + flowModel.output.flowFinished(); } }, [isOpen]); const closeMultisigModal = (params: { complete?: boolean; closeAll?: boolean } = { closeAll: true }) => { toggleIsModalOpen(); + flowModel.output.flowFinished(); setTimeout(params?.complete ? onComplete : params?.closeAll ? onClose : noop, DEFAULT_TRANSITION); }; From 7e786b42a46572d0f262e10e784da67fc77f84f8 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Fri, 31 May 2024 15:39:20 +0200 Subject: [PATCH 31/90] fix: tests --- jest.config.ts | 2 ++ src/renderer/widgets/CreateWallet/lib/types.ts | 1 - .../widgets/CreateWallet/model/__tests__/flow-model.test.ts | 2 -- src/renderer/widgets/CreateWallet/model/flow-model.ts | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/jest.config.ts b/jest.config.ts index 64b1367d94..7745acb819 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -21,6 +21,8 @@ const swcConfig = { }, }; const config: Config = { + maxConcurrency: 5, + maxWorkers: '50%', preset: 'ts-jest', testEnvironment: 'jest-environment-jsdom', coverageReporters: ['json-summary', 'text', 'text-summary'], diff --git a/src/renderer/widgets/CreateWallet/lib/types.ts b/src/renderer/widgets/CreateWallet/lib/types.ts index 92c791cd32..19c5a80de7 100644 --- a/src/renderer/widgets/CreateWallet/lib/types.ts +++ b/src/renderer/widgets/CreateWallet/lib/types.ts @@ -1,7 +1,6 @@ import { Account, Chain, Transaction } from '@shared/core'; export const enum Step { - NONE, INIT, NAMETHRESHOLD, CONFIRM, diff --git a/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts b/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts index 703fae8110..bb491c24a8 100644 --- a/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts +++ b/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts @@ -101,7 +101,5 @@ describe('widgets/CreateWallet/model/add-proxy-model', () => { await jest.runAllTimersAsync(); await action; - - // expect(scope.getState(addProxyModel.$step)).toEqual(Step.NONE); }); }); diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index 1b1233c29f..dd956bfb53 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -44,7 +44,7 @@ const walletCreated = createEvent<{ threshold: number; }>(); const $selectedSigner = restore(selectedSignerChanged, null); -const $step = restore(stepChanged, Step.NONE).reset(flowFinished); +const $step = restore(stepChanged, Step.INIT).reset(flowFinished); const $fee = restore(feeChanged, ZERO_BALANCE); const $multisigDeposit = restore(multisigDepositChanged, ZERO_BALANCE); const $isFeeLoading = restore(isFeeLoadingChanged, true); From 2c8b001880e5e6e206e3366c478bd36b54c3af89 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Wed, 26 Jun 2024 17:25:46 +0200 Subject: [PATCH 32/90] feat: remove Matrix --- jest.config.ts | 2 +- package.json | 6 +- pnpm-lock.yaml | 127 +- src/renderer/app/App.tsx | 44 +- .../MatrixContext/MatrixContext.test.tsx | 94 -- .../context/MatrixContext/MatrixContext.tsx | 594 --------- .../providers/context/MatrixContext/index.ts | 1 - src/renderer/app/providers/context/index.ts | 1 - .../entities/contact/ui/ContactList.tsx | 3 +- .../entities/contact/ui/ContactRow.tsx | 5 +- src/renderer/entities/matrix/index.ts | 4 - .../entities/matrix/lib/matrix-utils.ts | 24 - src/renderer/entities/matrix/lib/types.ts | 6 - .../entities/matrix/model/matrix-model.ts | 24 - .../entities/matrix/ui/MatrixInfoPopover.tsx | 45 - .../ui/SignatoryCard/SignatoryCard.tsx | 23 +- .../transaction/lib/common/constants.ts | 2 - .../entities/wallet/model/wallet-model.ts | 36 - .../AddressWithExplorers.tsx | 22 +- .../model/__tests__/contact-filter.test.tsx | 12 - .../ContactFilter/model/contact-filter.ts | 3 +- .../CreateContactForm/model/contact-form.ts | 11 - .../ui/CreateContactForm.tsx | 19 +- .../EditContactForm/model/contact-form.ts | 13 +- .../EditContactForm/ui/EditContactForm.tsx | 19 +- .../features/matrix/MatrixAutoLogin/index.ts | 2 - .../matrix/MatrixAutoLogin/lib/constants.ts | 1 - .../lib/matrix-autologin-utils.ts | 24 - .../matrix/MatrixAutoLogin/lib/types.ts | 6 - .../__tests__/matrix-autologin-model.test.ts | 156 --- .../model/matrix-autologin-model.ts | 113 -- .../MatrixAutoLogin/ui/MatrixAutoLogin.tsx | 40 - .../features/matrix/MatrixLogin/index.ts | 1 - .../matrix/MatrixLogin/lib/constants.ts | 7 - .../MatrixLogin/model/matrix-login-model.ts | 28 - .../matrix/MatrixLogin/ui/LoginForm.test.tsx | 87 -- .../matrix/MatrixLogin/ui/LoginForm.tsx | 294 ----- .../matrix/MatrixLogin/ui/MatrixLogin.tsx | 57 - .../matrix/MatrixVerification/index.ts | 1 - .../ui/MatrixVerification.tsx | 38 - .../MatrixVerification/ui/UserInfo.test.tsx | 43 - .../matrix/MatrixVerification/ui/UserInfo.tsx | 36 - .../ui/Verification.test.tsx | 121 -- .../MatrixVerification/ui/Verification.tsx | 200 --- src/renderer/features/matrix/index.ts | 3 - .../notifies/MultisigCreatedNotification.tsx | 6 +- .../OperationSubmit/model/submit-model.ts | 59 +- .../model/payee-validate-model.ts | 1 + .../components/ActionSteps/Submit.tsx | 37 - .../pages/Operations/components/Operation.tsx | 4 +- .../components/OperationCardDetails.tsx | 3 - .../components/OperationFullInfo.tsx | 19 +- .../components/OperationSignatories.tsx | 1 - .../components/modals/ApproveTx.tsx | 1 - .../Operations/components/modals/RejectTx.tsx | 1 - src/renderer/pages/Settings/Matrix/Matrix.tsx | 20 - .../pages/Settings/Overview/Overview.test.tsx | 3 - .../pages/Settings/Overview/Overview.tsx | 3 +- .../MatrixAction/MatrixAction.test.tsx | 40 - .../components/MatrixAction/MatrixAction.tsx | 50 - .../Settings/Overview/components/index.ts | 1 - src/renderer/pages/Settings/index.ts | 1 - src/renderer/pages/index.tsx | 3 +- .../multisigs/model/multisigs-model.ts | 2 - .../__tests__/credentialStorage.test.ts | 47 - .../matrix/__tests__/secretStorage.test.ts | 48 - src/renderer/shared/api/matrix/index.ts | 4 - .../shared/api/matrix/lib/constants.ts | 18 - src/renderer/shared/api/matrix/lib/errors.ts | 158 --- src/renderer/shared/api/matrix/lib/types.ts | 265 ---- src/renderer/shared/api/matrix/lib/utils.ts | 21 - .../api/matrix/service/credentialStorage.ts | 80 -- .../shared/api/matrix/service/matrix.ts | 1072 ----------------- .../api/matrix/service/secretStorage.ts | 98 -- .../shared/api/translation/locales/en.json | 72 -- .../shared/api/xcm/service/xcmService.ts | 16 +- .../shared/config/chains/chains_dev.json | 2 +- src/renderer/shared/core/types/account.ts | 2 - src/renderer/shared/core/types/contact.ts | 1 - .../shared/core/types/notification.ts | 3 +- src/renderer/shared/core/types/signatory.ts | 1 - src/renderer/shared/routes/paths.ts | 1 - .../DropdownButton/DropdownButton.tsx | 110 +- .../DropdownIconButton/DropdownIconButton.tsx | 2 +- .../model/create-multisig-wallet-model.ts | 47 +- .../MultiChainMultisigWallet.tsx | 7 +- .../SelectMultisigWalletType.tsx | 4 - .../SingleChainMultisigWallet.tsx | 7 +- .../components/ConfirmSignatories.tsx | 10 +- .../components/SelectAccountSignatories.tsx | 25 +- .../components/SelectSignatories.tsx | 25 +- .../MultisigWallet/components/WalletForm.tsx | 12 +- .../__tests__/mocks/wallet-provider-mocks.ts | 2 - .../ui/wallets/MultisigWalletDetails.tsx | 33 +- webpack/webpack.shared.ts | 5 - 95 files changed, 146 insertions(+), 4705 deletions(-) delete mode 100644 src/renderer/app/providers/context/MatrixContext/MatrixContext.test.tsx delete mode 100644 src/renderer/app/providers/context/MatrixContext/MatrixContext.tsx delete mode 100644 src/renderer/app/providers/context/MatrixContext/index.ts delete mode 100644 src/renderer/entities/matrix/index.ts delete mode 100644 src/renderer/entities/matrix/lib/matrix-utils.ts delete mode 100644 src/renderer/entities/matrix/lib/types.ts delete mode 100644 src/renderer/entities/matrix/model/matrix-model.ts delete mode 100644 src/renderer/entities/matrix/ui/MatrixInfoPopover.tsx delete mode 100644 src/renderer/features/matrix/MatrixAutoLogin/index.ts delete mode 100644 src/renderer/features/matrix/MatrixAutoLogin/lib/constants.ts delete mode 100644 src/renderer/features/matrix/MatrixAutoLogin/lib/matrix-autologin-utils.ts delete mode 100644 src/renderer/features/matrix/MatrixAutoLogin/lib/types.ts delete mode 100644 src/renderer/features/matrix/MatrixAutoLogin/model/__tests__/matrix-autologin-model.test.ts delete mode 100644 src/renderer/features/matrix/MatrixAutoLogin/model/matrix-autologin-model.ts delete mode 100644 src/renderer/features/matrix/MatrixAutoLogin/ui/MatrixAutoLogin.tsx delete mode 100644 src/renderer/features/matrix/MatrixLogin/index.ts delete mode 100644 src/renderer/features/matrix/MatrixLogin/lib/constants.ts delete mode 100644 src/renderer/features/matrix/MatrixLogin/model/matrix-login-model.ts delete mode 100644 src/renderer/features/matrix/MatrixLogin/ui/LoginForm.test.tsx delete mode 100644 src/renderer/features/matrix/MatrixLogin/ui/LoginForm.tsx delete mode 100644 src/renderer/features/matrix/MatrixLogin/ui/MatrixLogin.tsx delete mode 100644 src/renderer/features/matrix/MatrixVerification/index.ts delete mode 100644 src/renderer/features/matrix/MatrixVerification/ui/MatrixVerification.tsx delete mode 100644 src/renderer/features/matrix/MatrixVerification/ui/UserInfo.test.tsx delete mode 100644 src/renderer/features/matrix/MatrixVerification/ui/UserInfo.tsx delete mode 100644 src/renderer/features/matrix/MatrixVerification/ui/Verification.test.tsx delete mode 100644 src/renderer/features/matrix/MatrixVerification/ui/Verification.tsx delete mode 100644 src/renderer/features/matrix/index.ts delete mode 100644 src/renderer/pages/Settings/Matrix/Matrix.tsx delete mode 100644 src/renderer/pages/Settings/Overview/components/MatrixAction/MatrixAction.test.tsx delete mode 100644 src/renderer/pages/Settings/Overview/components/MatrixAction/MatrixAction.tsx delete mode 100644 src/renderer/shared/api/matrix/__tests__/credentialStorage.test.ts delete mode 100644 src/renderer/shared/api/matrix/__tests__/secretStorage.test.ts delete mode 100644 src/renderer/shared/api/matrix/index.ts delete mode 100644 src/renderer/shared/api/matrix/lib/constants.ts delete mode 100644 src/renderer/shared/api/matrix/lib/errors.ts delete mode 100644 src/renderer/shared/api/matrix/lib/types.ts delete mode 100644 src/renderer/shared/api/matrix/lib/utils.ts delete mode 100644 src/renderer/shared/api/matrix/service/credentialStorage.ts delete mode 100644 src/renderer/shared/api/matrix/service/matrix.ts delete mode 100644 src/renderer/shared/api/matrix/service/secretStorage.ts diff --git a/jest.config.ts b/jest.config.ts index 573880587f..64b1367d94 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -22,7 +22,7 @@ const swcConfig = { }; const config: Config = { preset: 'ts-jest', - testEnvironment: 'jsdom', + testEnvironment: 'jest-environment-jsdom', coverageReporters: ['json-summary', 'text', 'text-summary'], setupFilesAfterEnv: ['@testing-library/jest-dom'], coverageThreshold: { diff --git a/package.json b/package.json index b92bbc38c4..4412f13fe1 100644 --- a/package.json +++ b/package.json @@ -66,12 +66,11 @@ }, "engines": { "node": ">=18.x", - "pnpm": ">=9.x" + "pnpm": ">=8.x" }, "dependencies": { "@apollo/client": "^3.7.1", "@headlessui/react": "^1.7.17", - "@matrix-org/olm": "3.2.15", "@polkadot/api": "^11.2.1", "@polkadot/keyring": "^12.6.2", "@polkadot/react-identicon": "^3.6.4", @@ -112,7 +111,6 @@ "lodash": "^4.17.21", "lottie-react": "^2.4.0", "markdown-it": "^14.1.0", - "matrix-js-sdk": "30.3.0", "parity-scale-codec": "^0.6.1", "patronum": "^2.1.1", "qr-code-styling": "1.6.0-rc.1", @@ -206,7 +204,7 @@ "nodemon": "^2.0.18", "npm-run-all": "^4.1.5", "playwright": "^1.44.1", - "pnpm": "^9.2.0", + "pnpm": "^8.6.11", "postcss": "^8.4.31", "postcss-loader": "^7.3.3", "prettier": "^2.8.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 733aa82812..26698e6cc2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,9 +14,6 @@ importers: '@headlessui/react': specifier: ^1.7.17 version: 1.7.17(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@matrix-org/olm': - specifier: 3.2.15 - version: 3.2.15 '@polkadot/api': specifier: ^11.2.1 version: 11.2.1 @@ -137,9 +134,6 @@ importers: markdown-it: specifier: ^14.1.0 version: 14.1.0 - matrix-js-sdk: - specifier: 30.3.0 - version: 30.3.0 parity-scale-codec: specifier: ^0.6.1 version: 0.6.1 @@ -415,8 +409,8 @@ importers: specifier: ^1.44.1 version: 1.44.1 pnpm: - specifier: ^9.2.0 - version: 9.2.0 + specifier: ^8.6.11 + version: 8.6.11 postcss: specifier: ^8.4.31 version: 8.4.31 @@ -1629,13 +1623,6 @@ packages: resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} engines: {node: '>= 10.0.0'} - '@matrix-org/matrix-sdk-crypto-wasm@3.6.0': - resolution: {integrity: sha512-fvuYczcp/r/MOkOAUbK+tMaTerEe7/QHGQcRJz3W3JuEma0YN59d35zTBlts7EkN6Ichw1vLSyM+GkcbuosuyA==} - engines: {node: '>= 10'} - - '@matrix-org/olm@3.2.15': - resolution: {integrity: sha512-S7lOrndAK9/8qOtaTq/WhttJC/o4GAzdfK0MUPpo8ApzsJEC0QjtwrkC3KBXdFP1cD1MXi/mlKR7aaoVMKgs6Q==} - '@mdx-js/mdx@1.6.22': resolution: {integrity: sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==} @@ -2845,9 +2832,6 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - '@types/events@3.0.3': - resolution: {integrity: sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==} - '@types/express-serve-static-core@4.17.41': resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} @@ -3471,9 +3455,6 @@ packages: ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - another-json@0.2.0: - resolution: {integrity: sha512-/Ndrl68UQLhnCdsAzEXLMFuOR546o2qbYRqCglaNHbjXrwG1ayTcdwr3zkSGOGtGXDyR5X9nCFfnyG2AFJIsqg==} - ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} @@ -3818,9 +3799,6 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - base-x@4.0.0: - resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} - base64-arraybuffer-es6@0.7.0: resolution: {integrity: sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw==} engines: {node: '>=6.0.0'} @@ -3959,9 +3937,6 @@ packages: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} - bs58@5.0.0: - resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} - bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -4527,9 +4502,6 @@ packages: crypto-browserify@3.12.0: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} - crypto-js@4.2.0: - resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} - crypto-random-string@2.0.0: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} @@ -6977,9 +6949,6 @@ packages: resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} engines: {node: '>=8'} - jwt-decode@3.1.2: - resolution: {integrity: sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==} - keyv@3.1.0: resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} @@ -7180,10 +7149,6 @@ packages: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} engines: {node: '>=10'} - loglevel@1.9.1: - resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==} - engines: {node: '>= 0.6.0'} - loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -7288,16 +7253,6 @@ packages: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} - matrix-events-sdk@0.0.1: - resolution: {integrity: sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA==} - - matrix-js-sdk@30.3.0: - resolution: {integrity: sha512-yqAn1IhvrSxvqRP4UMToaWhtA/iC6FYTt4qj5K8H3BmAQDOqObw9qPLm43HmdbsBGk6VUwz9szgNblhVyq0sKg==} - engines: {node: '>=18.0.0'} - - matrix-widget-api@1.6.0: - resolution: {integrity: sha512-VXIJyAZ/WnBmT4C7ePqevgMYGneKMCP/0JuCOqntSsaNlCRHJvwvTxmqUU+ufOpzIF5gYNyIrAjbgrEbK3iqJQ==} - md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} @@ -7764,10 +7719,6 @@ packages: ofetch@1.3.3: resolution: {integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==} - oidc-client-ts@2.4.0: - resolution: {integrity: sha512-WijhkTrlXK2VvgGoakWJiBdfIsVGz6CFzgjNNqZU1hPKV2kyeEaJgLs7RwuiSp2WhLfWBQuLvr2SxVlZnk3N1w==} - engines: {node: '>=12.13.0'} - on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} @@ -8127,9 +8078,9 @@ packages: resolution: {integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==} engines: {node: '>=6'} - pnpm@9.2.0: - resolution: {integrity: sha512-mKgP0RwucJZ0d2IwQQZDKz3cZ9z1S1qMAck/aKLNXgXmghhJUioG+3YoTUGiZg1eM08u47vykYO/LnObHa+ncQ==} - engines: {node: '>=18.12'} + pnpm@8.6.11: + resolution: {integrity: sha512-jqknppuj45tDzJsLcLqkAxytBHZXIx9JTYkGNq0/7pSRggpio9wRxTDj4NA2ilOHPlJ5BVjB5Ij5dx65woMi5A==} + engines: {node: '>=16.14'} hasBin: true polished@4.2.2: @@ -9100,10 +9051,6 @@ packages: resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} engines: {node: '>= 12.13.0'} - sdp-transform@2.14.2: - resolution: {integrity: sha512-icY6jVao7MfKCieyo1AyxFYm1baiM+fA00qW/KrNNVlkxHAd34riEKuEkUe4bBb3gJwLJZM+xT60Yj1QL8rHiA==} - hasBin: true - select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} @@ -10084,9 +10031,6 @@ packages: unherit@1.1.3: resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} - unhomoglyph@1.0.6: - resolution: {integrity: sha512-7uvcWI3hWshSADBu4JpnyYbTVc7YlhF5GDW/oPD5AxIxl34k4wXR3WDkPnzLxkN32LiTCTKMQLtKVZiwki3zGg==} - unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -10310,10 +10254,6 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -12424,10 +12364,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@matrix-org/matrix-sdk-crypto-wasm@3.6.0': {} - - '@matrix-org/olm@3.2.15': {} - '@mdx-js/mdx@1.6.22': dependencies: '@babel/core': 7.12.9 @@ -14571,8 +14507,6 @@ snapshots: '@types/estree@1.0.5': {} - '@types/events@3.0.3': {} - '@types/express-serve-static-core@4.17.41': dependencies: '@types/node': 18.19.3 @@ -15482,8 +15416,6 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 - another-json@0.2.0: {} - ansi-align@3.0.1: dependencies: string-width: 4.2.3 @@ -15940,8 +15872,6 @@ snapshots: balanced-match@1.0.2: {} - base-x@4.0.0: {} - base64-arraybuffer-es6@0.7.0: {} base64-js@1.5.1: {} @@ -16142,10 +16072,6 @@ snapshots: dependencies: fast-json-stable-stringify: 2.1.0 - bs58@5.0.0: - dependencies: - base-x: 4.0.0 - bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -16891,8 +16817,6 @@ snapshots: randombytes: 2.1.0 randomfill: 1.0.4 - crypto-js@4.2.0: {} - crypto-random-string@2.0.0: {} css-color-keywords@1.0.0: {} @@ -19994,8 +19918,6 @@ snapshots: junk@3.1.0: {} - jwt-decode@3.1.2: {} - keyv@3.1.0: dependencies: json-buffer: 3.0.0 @@ -20222,8 +20144,6 @@ snapshots: slice-ansi: 4.0.0 wrap-ansi: 6.2.0 - loglevel@1.9.1: {} - loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -20327,30 +20247,6 @@ snapshots: escape-string-regexp: 4.0.0 optional: true - matrix-events-sdk@0.0.1: {} - - matrix-js-sdk@30.3.0: - dependencies: - '@babel/runtime': 7.23.9 - '@matrix-org/matrix-sdk-crypto-wasm': 3.6.0 - another-json: 0.2.0 - bs58: 5.0.0 - content-type: 1.0.5 - jwt-decode: 3.1.2 - loglevel: 1.9.1 - matrix-events-sdk: 0.0.1 - matrix-widget-api: 1.6.0 - oidc-client-ts: 2.4.0 - p-retry: 4.6.2 - sdp-transform: 2.14.2 - unhomoglyph: 1.0.6 - uuid: 9.0.1 - - matrix-widget-api@1.6.0: - dependencies: - '@types/events': 3.0.3 - events: 3.3.0 - md5.js@1.3.5: dependencies: hash-base: 3.1.0 @@ -20910,11 +20806,6 @@ snapshots: node-fetch-native: 1.4.1 ufo: 1.3.2 - oidc-client-ts@2.4.0: - dependencies: - crypto-js: 4.2.0 - jwt-decode: 3.1.2 - on-exit-leak-free@0.2.0: {} on-finished@2.4.1: @@ -21267,7 +21158,7 @@ snapshots: transitivePeerDependencies: - typescript - pnpm@9.2.0: {} + pnpm@8.6.11: {} polished@4.2.2: dependencies: @@ -22344,8 +22235,6 @@ snapshots: ajv-formats: 2.1.1(ajv@8.12.0) ajv-keywords: 5.1.0(ajv@8.12.0) - sdp-transform@2.14.2: {} - select-hose@2.0.0: {} selfsigned@2.4.1: @@ -23480,8 +23369,6 @@ snapshots: inherits: 2.0.4 xtend: 4.0.2 - unhomoglyph@1.0.6: {} - unicode-canonical-property-names-ecmascript@2.0.0: {} unicode-match-property-ecmascript@2.0.0: @@ -23696,8 +23583,6 @@ snapshots: uuid@8.3.2: {} - uuid@9.0.1: {} - v8-compile-cache-lib@3.0.1: {} v8-compile-cache@2.4.0: {} diff --git a/src/renderer/app/App.tsx b/src/renderer/app/App.tsx index d18856ee3b..1ea9ffdcf5 100644 --- a/src/renderer/app/App.tsx +++ b/src/renderer/app/App.tsx @@ -7,7 +7,7 @@ import { CreateWalletProvider } from '@widgets/CreateWallet'; import { WalletDetailsProvider } from '@widgets/WalletDetails'; import { walletModel } from '@entities/wallet'; import { ROUTES_CONFIG } from '@pages/index'; -import { Paths, createLink } from '@shared/routes'; +import { Paths } from '@shared/routes'; import { FallbackScreen } from '@shared/ui'; import { ConfirmDialogProvider, @@ -15,10 +15,7 @@ import { I18Provider, GraphqlProvider, MultisigChainProvider, - MatrixProvider, } from './providers'; -import { walletPairingModel } from '@features/wallets'; -import { WalletType } from '@shared/core'; const SPLASH_SCREEN_DELAY = 450; @@ -35,25 +32,6 @@ export const App = () => { setTimeout(() => setSplashScreenLoading(false), SPLASH_SCREEN_DELAY); }, []); - useEffect(() => { - const url = new URL(window.location.href); - if (!url.searchParams.has('step') || !url.searchParams.has('loginToken')) return; - - const loginToken = url.searchParams.get('loginToken') as string; - const step = url.searchParams.get('step') as string; - - url.searchParams.delete('step'); - url.searchParams.delete('loginToken'); - window.history.replaceState(null, '', url.href); - - if (step === 'settings_matrix') { - navigate(createLink(Paths.MATRIX, {}, { loginToken: [loginToken] })); - } - if (step === 'multisig_wallet') { - walletPairingModel.events.walletTypeSet(WalletType.MULTISIG); - } - }, []); - useEffect(() => { if (isLoadingWallets || wallets.length > 0) return; @@ -72,17 +50,15 @@ export const App = () => { - - - - - {getContent()} - - - - - - + + + + {getContent()} + + + + + diff --git a/src/renderer/app/providers/context/MatrixContext/MatrixContext.test.tsx b/src/renderer/app/providers/context/MatrixContext/MatrixContext.test.tsx deleted file mode 100644 index f6a0ee6e37..0000000000 --- a/src/renderer/app/providers/context/MatrixContext/MatrixContext.test.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { act, render, screen } from '@testing-library/react'; -import { Provider } from 'effector-react'; -import { fork } from 'effector'; - -import { MatrixProvider } from './MatrixContext'; -import { matrixModel } from '@entities/matrix'; - -jest.mock('@entities/multisig', () => ({ - useMultisigTx: jest.fn().mockReturnValue({ - getMultisigTxs: jest.fn(), - addMultisigTx: jest.fn(), - updateMultisigTx: jest.fn(), - updateCallData: jest.fn(), - }), - useMultisigEvent: jest.fn().mockReturnValue({ - addEvent: jest.fn(), - updateEvent: jest.fn(), - getEvents: jest.fn().mockReturnValue([]), - }), -})); - -jest.mock('@app/providers', () => ({ - useMultisigChainContext: jest.fn(() => ({ - addTask: () => undefined, - })), -})); - -describe('context/MatrixContext', () => { - afterEach(() => { - jest.clearAllMocks(); - }); - - test('should render children', async () => { - const scope = fork({ - values: new Map().set(matrixModel.$matrix, { - loginFromCache: jest.fn().mockResolvedValue({}), - setEventCallbacks: jest.fn(), - stopClient: jest.fn(), - }), - }); - await act(async () => { - render( - - children - , - ); - }); - - expect(screen.getByText('children')).toBeInTheDocument(); - }); - - test('should set eventCallbacks', async () => { - const spyEventCallbacks = jest.fn(); - - const scope = fork({ - values: new Map().set(matrixModel.$matrix, { - setEventCallbacks: spyEventCallbacks, - stopClient: jest.fn(), - }), - }); - await act(async () => { - render( - - children - , - ); - }); - - expect(spyEventCallbacks).toHaveBeenCalled(); - }); - - test('should stop Matrix client on context unmount', async () => { - const spyStopClient = jest.fn(); - - const scope = fork({ - values: new Map().set(matrixModel.$matrix, { - setEventCallbacks: jest.fn(), - stopClient: spyStopClient, - }), - }); - let unmount = () => {}; - await act(async () => { - const result = render( - - children - , - ); - unmount = result.unmount; - }); - - unmount(); - expect(spyStopClient).toHaveBeenCalled(); - }); -}); diff --git a/src/renderer/app/providers/context/MatrixContext/MatrixContext.tsx b/src/renderer/app/providers/context/MatrixContext/MatrixContext.tsx deleted file mode 100644 index 2a4ac62804..0000000000 --- a/src/renderer/app/providers/context/MatrixContext/MatrixContext.tsx +++ /dev/null @@ -1,594 +0,0 @@ -import { PropsWithChildren, useEffect, useRef, createContext } from 'react'; -import { useUnit } from 'effector-react'; - -import { getCreatedDateFromApi, isEthereumAccountId, toAddress, validateCallData } from '@shared/lib/utils'; -import { useMultisigEvent, useMultisigTx } from '@entities/multisig'; -import { useMultisigChainContext } from '@app/providers'; -import { contactModel } from '@entities/contact'; -import { walletModel, accountUtils, walletUtils } from '@entities/wallet'; -import { networkModel } from '@entities/network'; -import { notificationModel } from '@entities/notification'; -import { - Signatory, - MultisigAccount, - AccountId, - Address, - CallHash, - ChainId, - NotificationType, - WalletType, - SigningType, - CryptoType, - ChainType, - AccountType, - NoID, - MultisigCreated, - SigningStatus, - MultisigEvent, - MultisigTxStatus, - MultisigTxFinalStatus, - MultisigTxInitStatus, - MultisigTransaction, -} from '@shared/core'; -import { - ApprovePayload, - BaseMultisigPayload, - CancelPayload, - FinalApprovePayload, - InvitePayload, - MultisigPayload, - SpektrExtras, - UpdatePayload, -} from '@shared/api/matrix'; -import { matrixModel, LoginStatus } from '@entities/matrix'; -import { matrixAutologinModel } from '@features/matrix'; -import { useTransaction } from '@entities/transaction'; - -const MatrixContext = createContext({}); - -export const MatrixProvider = ({ children }: PropsWithChildren) => { - const matrix = useUnit(matrixModel.$matrix); - - const wallets = useUnit(walletModel.$wallets); - const contacts = useUnit(contactModel.$contacts); - const chains = useUnit(networkModel.$chains); - const apis = useUnit(networkModel.$apis); - - const { addTask } = useMultisigChainContext(); - const { getMultisigTx, addMultisigTx, updateMultisigTx, updateCallData } = useMultisigTx({ addTask }); - const { decodeCallData } = useTransaction(); - const { addEventWithQueue, updateEvent, getEvents } = useMultisigEvent({ addTask }); - - const apisRef = useRef(apis); - const walletsRef = useRef(wallets); - - // HOOK: correct connections for update multisig tx - useEffect(() => { - apisRef.current = apis; - }, [apis]); - - // HOOK: correct accounts for update multisig tx - useEffect(() => { - walletsRef.current = wallets; - }, [wallets]); - - const onSyncEnd = () => { - console.info('💛 ===> Matrix: sync end'); - - matrix.syncSpektrTimeline().catch(console.warn); - }; - - const onInvite = async (payload: InvitePayload) => { - console.info('💛 ===> Matrix: Multisig invite', payload); - - const { roomId, content } = payload; - const { accountId, threshold, signatories, accountName, creatorAccountId } = content.mstAccount; - - try { - validateMstAccount(accountId, signatories, threshold); - - const mstAccounts = walletUtils.getAccountsBy(wallets, (account) => { - return account.accountId === accountId; - }) as MultisigAccount[]; - - if (mstAccounts.length === 0) { - console.log(`No multisig account ${accountId} found. Joining room and adding wallet`); - - await joinRoom(roomId, content); - - notificationModel.events.notificationsAdded([ - { - smpRoomId: roomId, - multisigAccountId: accountId, - multisigAccountName: accountName, - signatories, - threshold, - originatorAccountId: creatorAccountId, - read: true, - dateCreated: Date.now(), - type: NotificationType.MULTISIG_CREATED, - }, - ] as NoID[]); - } else { - console.log(`Multisig account ${accountId} already exists. Trying to change room to ${roomId}`); - await changeRoom(roomId, mstAccounts[0], content, creatorAccountId); - } - } catch (error) { - console.error( - 'Error processing Multisig invitation', - payload.sender, - payload.roomName, - payload.roomId, - payload.eventId, - error, - ); - await matrix.leaveRoom(roomId); - } - }; - - const validateMstAccount = (accountId: AccountId, signatories: AccountId[], threshold: number) => { - const cryptoType = isEthereumAccountId(accountId) ? CryptoType.ETHEREUM : CryptoType.SR25519; - const isValid = accountId === accountUtils.getMultisigAccountId(signatories, threshold, cryptoType); - - if (!isValid) { - throw new Error(`Multisig address ${accountId} can't be derived from signatories and threshold`); - } - }; - - const createMstAccount = (roomId: string, extras: SpektrExtras) => { - const { signatories, threshold, accountName, creatorAccountId, chainId, cryptoType } = extras.mstAccount; - - const contactsMap = contacts.reduce>((acc, contact) => { - acc[contact.accountId] = [contact.address, contact.name]; - - return acc; - }, {}); - - const mstSignatories = signatories.map((accountId) => ({ - accountId, - address: contactsMap[accountId]?.[0] || toAddress(accountId), - name: contactsMap[accountId]?.[1], - })); - - const mstAccountId = accountUtils.getMultisigAccountId(signatories, threshold, cryptoType); - - walletModel.events.multisigCreated({ - wallet: { - name: accountName, - type: WalletType.MULTISIG, - signingType: SigningType.MULTISIG, - }, - accounts: [ - { - threshold, - creatorAccountId, - accountId: mstAccountId, - signatories: mstSignatories, - name: accountName, - chainId, - matrixRoomId: roomId, - cryptoType, - chainType: ChainType.SUBSTRATE, - type: AccountType.MULTISIG, - }, - ], - }); - }; - - const changeRoom = async ( - roomId: string, - mstAccount: MultisigAccount, - extras: SpektrExtras, - newRoomCreatorAccountId: AccountId, - ) => { - const { accountName, creatorAccountId } = extras.mstAccount; - const stayInRoom = newRoomCreatorAccountId > creatorAccountId; - - try { - if (stayInRoom) { - console.log(`Skip invitation from room ${roomId}`); - await matrix.leaveRoom(roomId); - } else { - console.log(`Leave old ${mstAccount.matrixRoomId}, join new room ${roomId}`); - if (mstAccount.matrixRoomId) { - await matrix.leaveRoom(mstAccount.matrixRoomId); - } - - await matrix.joinRoom(roomId); - - walletModel.events.multisigAccountUpdated({ - id: mstAccount.id, - name: accountName, - matrixRoomId: roomId, - creatorAccountId, - }); - } - } catch (error) { - console.warn(error); - } - }; - - const joinRoom = async (roomId: string, extras: SpektrExtras): Promise => { - try { - await matrix.joinRoom(roomId); - createMstAccount(roomId, extras); - } catch (error) { - console.error(error); - } - }; - - const onMultisigEvent = async ({ type, content, sender }: MultisigPayload, extras: SpektrExtras | undefined) => { - console.info('🚀 === onMultisigEvent - ', type, '\n Content: ', content); - - if (!validateMatrixEvent(content, extras)) return; - - const multisigAccounts = walletUtils.getAccountsBy(walletsRef.current, (account) => { - return account.accountId === extras?.mstAccount.accountId; - }); - if (multisigAccounts.length === 0 || !accountUtils.isMultisigAccount(multisigAccounts[0])) return; - - const multisigTx = await getMultisigTx( - multisigAccounts[0].accountId, - content.chainId, - content.callHash, - content.callTimepoint.height, - content.callTimepoint.index, - ); - - if (matrix.isUpdateEvent(type, content)) { - await handleUpdateEvent(content, multisigTx); - } - if (matrix.isCancelEvent(type, content)) { - await handleCancelEvent(content, multisigAccounts[0], multisigTx); - } - if (matrix.isApproveEvent(type, content)) { - await handleApproveEvent(content, multisigAccounts[0], multisigTx); - } - if (matrix.isFinalApproveEvent(type, content)) { - await handleFinalApproveEvent(content, multisigAccounts[0], multisigTx); - } - }; - - const validateMatrixEvent = ( - { callData, callHash, senderAccountId }: T, - extras: SpektrExtras | undefined, - ): boolean => { - if (!extras) return false; - - const { accountId, threshold, signatories } = extras.mstAccount; - const senderIsSignatory = signatories.some((accountId) => accountId === senderAccountId); - const mstAccountIsValid = accountId === accountUtils.getMultisigAccountId(signatories, threshold); - const callDataIsValid = !callData || validateCallData(callData, callHash); - - return senderIsSignatory && mstAccountIsValid && callDataIsValid; - }; - - const createEvent = async ( - payload: ApprovePayload | FinalApprovePayload, - eventStatus: SigningStatus, - txAccountId: AccountId, - txChainId: ChainId, - txCallHash: CallHash, - txBlock: number, - txIndex: number, - ): Promise => { - const callOutcome = (payload as FinalApprovePayload).callOutcome; - - const api = apisRef.current[payload.chainId]; - const dateCreated = api ? await getCreatedDateFromApi(payload.extrinsicTimepoint.height, api) : Date.now(); - - return { - txAccountId, - txChainId, - txCallHash, - txBlock, - txIndex, - status: eventStatus, - extrinsicHash: payload.extrinsicHash, - eventBlock: payload.extrinsicTimepoint.height, - eventIndex: payload.extrinsicTimepoint.index, - accountId: payload.senderAccountId, - dateCreated, - ...(callOutcome && { multisigOutcome: callOutcome }), - }; - }; - - const addMultisigTxToDB = async ( - payload: T, - accountId: AccountId, - signatories: Signatory[], - txStatus: MultisigTxStatus, - ): Promise => { - const descriptionField = txStatus === MultisigTxFinalStatus.CANCELLED ? 'cancelDescription' : 'description'; - const api = apisRef.current[payload.chainId]; - const addressPrefix = chains[payload.chainId]?.addressPrefix; - const dateCreated = api && (await getCreatedDateFromApi(payload.callTimepoint.height, api)); - - if (!api) { - console.warn(`No api found for ${payload.chainId} can't decode call data for ${payload.callHash}`); - } - if (!addressPrefix) { - console.warn(`No addressPrefix found for ${payload.chainId} can't decode call data for ${payload.callHash}`); - } - - const transaction = - api && payload.callData && decodeCallData(api, toAddress(accountId, { prefix: addressPrefix }), payload.callData); - - await addMultisigTx({ - accountId, - signatories, - callHash: payload.callHash, - callData: payload.callData, - [descriptionField]: payload.description, - chainId: payload.chainId, - status: txStatus, - blockCreated: payload.callTimepoint.height, - indexCreated: payload.callTimepoint.index, - dateCreated, - transaction, - }); - }; - - const handleUpdateEvent = async ({ callData }: UpdatePayload, tx?: MultisigTransaction): Promise => { - if (!tx) return; - console.log(`Start update call data for tx ${tx.callHash}`); - const api = apisRef.current[tx.chainId]; - - if (!api || !callData || callData === tx.callData) return; - console.log(`Updating call data for tx ${tx.callHash}`); - await updateCallData(api, tx, callData); - }; - - const handleCancelEvent = async ( - payload: CancelPayload, - { accountId, signatories }: MultisigAccount, - tx?: MultisigTransaction, - ): Promise => { - console.log( - `Start processing cancelling for tx ${payload.callHash} and timepoint ${payload.callTimepoint.height}-${payload.callTimepoint.index}`, - ); - - const eventStatus = payload.error ? 'ERROR_CANCELLED' : 'CANCELLED'; - const newEvent = await createEvent( - payload, - eventStatus, - accountId, - payload.chainId, - payload.callHash, - payload.extrinsicTimepoint.height, - payload.extrinsicTimepoint.index, - ); - - if (!tx) { - console.log(`Tx ${payload.callHash} not found. Create it`); - - await addMultisigTxToDB(payload, accountId, signatories, MultisigTxFinalStatus.CANCELLED); - await addEventWithQueue(newEvent); - - return; - } - - console.log(`Tx ${payload.callHash} found. Update it`); - - // TODO: refactor with pending statuses for addEventWithQueue - addTask(async () => { - const events = await getEvents({ - txAccountId: tx.accountId, - txChainId: tx.chainId, - txCallHash: tx.callHash, - txBlock: tx.blockCreated, - txIndex: tx.indexCreated, - }); - - const senderEvent = events.find( - (e) => e.accountId === payload.senderAccountId && ['PENDING_CANCELLED', 'CANCELLED'].includes(e.status), - ); - - if (!senderEvent) { - await addEventWithQueue(newEvent); - } else { - senderEvent.extrinsicHash = payload.extrinsicHash; - senderEvent.eventBlock = payload.extrinsicTimepoint.height; - senderEvent.eventIndex = payload.extrinsicTimepoint.index; - - if (!senderEvent.dateCreated) { - senderEvent.dateCreated = newEvent.dateCreated; - } - - if (senderEvent.status !== 'CANCELLED') { - senderEvent.status = eventStatus; - } - - await updateEvent(senderEvent); - } - }); - - if (payload.description && !tx.cancelDescription) { - console.log(`Update cancel description for tx ${payload.callHash}`); - - tx.cancelDescription = payload.description; - } - - await updateMultisigTx({ ...tx, status: MultisigTxFinalStatus.CANCELLED }); - }; - - const handleApproveEvent = async ( - payload: ApprovePayload, - { accountId, signatories }: MultisigAccount, - tx?: MultisigTransaction, - ): Promise => { - console.log( - `Start processing approval for tx ${payload.callHash} and timepoint ${payload.callTimepoint.height}-${payload.callTimepoint.index}`, - ); - const eventStatus = payload.error ? 'ERROR_SIGNED' : 'SIGNED'; - const newEvent = await createEvent( - payload, - eventStatus, - accountId, - payload.chainId, - payload.callHash, - payload.extrinsicTimepoint.height, - payload.extrinsicTimepoint.index, - ); - - if (!tx) { - console.log(`Tx ${payload.callHash} not found. Create it`); - - await addMultisigTxToDB(payload, accountId, signatories, MultisigTxInitStatus.SIGNING); - await addEventWithQueue(newEvent, ['PENDING_SIGNED', 'SIGNED']); - - return; - } - console.log(`Tx ${payload.callHash} found. Update it`); - - // TODO: refactor with pending statuses for addEventWithQueue - addTask(async () => { - const events = await getEvents({ - txAccountId: tx.accountId, - txChainId: tx.chainId, - txCallHash: tx.callHash, - txBlock: tx.blockCreated, - txIndex: tx.indexCreated, - }); - - const senderEvent = events.find( - (e) => e.accountId === payload.senderAccountId && ['PENDING_SIGNED', 'SIGNED'].includes(e.status), - ); - - if (!senderEvent) { - await addEventWithQueue(newEvent); - } else { - senderEvent.extrinsicHash = payload.extrinsicHash; - senderEvent.eventBlock = payload.extrinsicTimepoint.height; - senderEvent.eventIndex = payload.extrinsicTimepoint.index; - if (!senderEvent.dateCreated) { - senderEvent.dateCreated = newEvent.dateCreated; - } - - if (senderEvent.status !== 'SIGNED') { - senderEvent.status = eventStatus; - } - - await updateEvent(senderEvent); - } - }); - - if (payload.callData && !tx.callData) { - console.log(`Update call data for tx ${payload.callHash}`); - const api = apisRef.current[payload.chainId]; - const addressPrefix = chains[payload.chainId]?.addressPrefix; - - if (!api) { - console.warn(`No api found for ${payload.chainId} can't decode call data for ${payload.callHash}`); - } - if (!addressPrefix) { - console.warn(`No addressPrefix found for ${payload.chainId} can't decode call data for ${payload.callHash}`); - } - - const transaction = - api && - payload.callData && - decodeCallData(api, toAddress(accountId, { prefix: addressPrefix }), payload.callData); - - tx.callData = payload.callData; - tx.transaction = transaction; - } - if (payload.description && !tx.description) { - console.log(`Update description for tx ${payload.callHash}`); - tx.description = payload.description; - } - - await updateMultisigTx(tx); - }; - - const handleFinalApproveEvent = async ( - payload: FinalApprovePayload, - { accountId, signatories }: MultisigAccount, - tx?: MultisigTransaction, - ): Promise => { - console.log( - `Start processing final approval for tx ${payload.callHash} and timepoint ${payload.callTimepoint.height}-${payload.callTimepoint.index} and outcome ${payload.callOutcome}`, - ); - - const eventStatus = payload.error ? 'ERROR_SIGNED' : 'SIGNED'; - const newEvent = await createEvent( - payload, - eventStatus, - accountId, - payload.chainId, - payload.callHash, - payload.extrinsicTimepoint.height, - payload.extrinsicTimepoint.index, - ); - - if (!tx) { - console.log(`Tx ${payload.callHash} not found. Create it`); - - await addMultisigTxToDB(payload, accountId, signatories, payload.callOutcome); - await addEventWithQueue(newEvent); - - return; - } - - console.log(`Tx ${payload.callHash} found. Update it`); - - // TODO: Refactor with pending statuses for addEventWithQueue - addTask(async () => { - const events = await getEvents({ - txAccountId: tx.accountId, - txChainId: tx.chainId, - txCallHash: tx.callHash, - txBlock: tx.blockCreated, - txIndex: tx.indexCreated, - }); - const senderEvent = events.find( - (e) => e.accountId === payload.senderAccountId && ['PENDING_SIGNED', 'SIGNED'].includes(e.status), - ); - - if (!senderEvent) { - await addEventWithQueue(newEvent); - } else { - senderEvent.extrinsicHash = payload.extrinsicHash; - senderEvent.eventBlock = payload.extrinsicTimepoint.height; - senderEvent.eventIndex = payload.extrinsicTimepoint.index; - senderEvent.multisigOutcome = payload.callOutcome; - if (!senderEvent.dateCreated) { - senderEvent.dateCreated = newEvent.dateCreated; - } - - if (senderEvent.status !== 'SIGNED') { - senderEvent.status = eventStatus; - } - - await updateEvent(senderEvent); - } - }); - - await updateMultisigTx({ ...tx, status: payload.callOutcome }); - }; - - const onLogout = () => { - console.info('🛑 ===> Matrix: on logout'); - - matrixModel.events.loginStatusChanged(LoginStatus.LOGGED_OUT); - }; - - useEffect(() => { - matrix.setEventCallbacks({ onInvite, onSyncEnd, onMultisigEvent, onLogout }); - - return () => { - matrix.stopClient(); - }; - }, []); - - useEffect(() => { - matrixAutologinModel.events.loggedInFromCache(); - - const token = new URLSearchParams(window.location.search).get('loginToken'); - if (token) { - matrixAutologinModel.events.loggedInWithToken(token); - } - }, []); - - return {children}; -}; diff --git a/src/renderer/app/providers/context/MatrixContext/index.ts b/src/renderer/app/providers/context/MatrixContext/index.ts deleted file mode 100644 index 7289b78fee..0000000000 --- a/src/renderer/app/providers/context/MatrixContext/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { MatrixProvider } from './MatrixContext'; diff --git a/src/renderer/app/providers/context/index.ts b/src/renderer/app/providers/context/index.ts index f7a5690db0..a14544e498 100644 --- a/src/renderer/app/providers/context/index.ts +++ b/src/renderer/app/providers/context/index.ts @@ -3,4 +3,3 @@ export * from './GraphqlContext'; export * from './I18nContext'; export * from './MultisigChainContext'; export * from './StatusContext'; -export * from './MatrixContext'; diff --git a/src/renderer/entities/contact/ui/ContactList.tsx b/src/renderer/entities/contact/ui/ContactList.tsx index ff49d1b169..a6e05b2f39 100644 --- a/src/renderer/entities/contact/ui/ContactList.tsx +++ b/src/renderer/entities/contact/ui/ContactList.tsx @@ -8,9 +8,8 @@ export const ContactList = ({ children }: PropsWithChildren) => { return (
      -
      +
      {t('addressBook.contactList.nameColumnTitle')} - {t('addressBook.contactList.matrixIdColumnTitle')}
        {children}
      diff --git a/src/renderer/entities/contact/ui/ContactRow.tsx b/src/renderer/entities/contact/ui/ContactRow.tsx index 1872fbfd85..1f18e63aca 100644 --- a/src/renderer/entities/contact/ui/ContactRow.tsx +++ b/src/renderer/entities/contact/ui/ContactRow.tsx @@ -10,8 +10,8 @@ type Props = { export const ContactRow = ({ contact, children }: PropsWithChildren) => { return ( - -
      + +
      {contact.name} @@ -21,7 +21,6 @@ export const ContactRow = ({ contact, children }: PropsWithChildren) => {
      - {contact.matrixId || '-'} {children}
      ); diff --git a/src/renderer/entities/matrix/index.ts b/src/renderer/entities/matrix/index.ts deleted file mode 100644 index 729ce77e21..0000000000 --- a/src/renderer/entities/matrix/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { LoginStatus } from './lib/types'; -export { matrixUtils } from './lib/matrix-utils'; -export { matrixModel } from './model/matrix-model'; -export { MatrixInfoPopover } from './ui/MatrixInfoPopover'; diff --git a/src/renderer/entities/matrix/lib/matrix-utils.ts b/src/renderer/entities/matrix/lib/matrix-utils.ts deleted file mode 100644 index 78d0c4bb2a..0000000000 --- a/src/renderer/entities/matrix/lib/matrix-utils.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { LoginStatus } from './types'; - -export const matrixUtils = { - isLoggedOut, - isAutoLogin, - isInProcess, - isLoggedIn, -}; - -function isLoggedOut(status: LoginStatus): boolean { - return status === LoginStatus.LOGGED_OUT; -} - -function isAutoLogin(status: LoginStatus): boolean { - return status === LoginStatus.AUTO_LOGIN; -} - -function isInProcess(status: LoginStatus): boolean { - return status === LoginStatus.IN_PROCESS; -} - -function isLoggedIn(status: LoginStatus): boolean { - return status === LoginStatus.LOGGED_IN; -} diff --git a/src/renderer/entities/matrix/lib/types.ts b/src/renderer/entities/matrix/lib/types.ts deleted file mode 100644 index 261a358788..0000000000 --- a/src/renderer/entities/matrix/lib/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const enum LoginStatus { - LOGGED_OUT = 'logged_out', - AUTO_LOGIN = 'auto_login', - IN_PROCESS = 'in_process', - LOGGED_IN = 'logged_in', -} diff --git a/src/renderer/entities/matrix/model/matrix-model.ts b/src/renderer/entities/matrix/model/matrix-model.ts deleted file mode 100644 index b11b573d7f..0000000000 --- a/src/renderer/entities/matrix/model/matrix-model.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { createStore, createEvent, sample } from 'effector'; - -import { LoginStatus } from '../lib/types'; -import { ISecureMessenger, Matrix } from '@shared/api/matrix'; - -const loginStatusChanged = createEvent(); - -// TODO: store MatrixClient instead (requires complete rewrite of matrix service) -const $matrix = createStore(new Matrix()); - -const $loginStatus = createStore(LoginStatus.LOGGED_OUT); - -sample({ - clock: loginStatusChanged, - target: $loginStatus, -}); - -export const matrixModel = { - $matrix, - $loginStatus, - events: { - loginStatusChanged, - }, -}; diff --git a/src/renderer/entities/matrix/ui/MatrixInfoPopover.tsx b/src/renderer/entities/matrix/ui/MatrixInfoPopover.tsx deleted file mode 100644 index af281c5939..0000000000 --- a/src/renderer/entities/matrix/ui/MatrixInfoPopover.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { Trans } from 'react-i18next'; - -import { FootnoteText, InfoLink, LabelHelpBox, Popover, SmallTitleText } from '@shared/ui'; -import { useI18n } from '@app/providers'; - -const MATRIX = 'https://matrix.org/'; -const SMP = 'https://docs.novaspektr.io/multisig-accounts/spektr-matrix-protocol'; - -export const MatrixInfoPopover = () => { - const { t } = useI18n(); - - const matrix = ; - const smp = ; - - return ( - -
      - {t('settings.matrix.infoWhyMatrixTitle')} - {t('settings.matrix.infoSpektrDescription')} -
      - -
      - {t('settings.matrix.infoWhatIsMatrixTitle')} - - -
        -
      1. {t('settings.matrix.infoMatrixDescriptionOne')}
      2. -
      3. {t('settings.matrix.infoMatrixDescriptionTwo')}
      4. -
      - {t('settings.matrix.infoSpektrDescription')} -
      -
      -
      - } - > - {/* TODO remove mt-4 when base modal padding is changed */} - {t('settings.matrix.tooltipLabel')} - - ); -}; diff --git a/src/renderer/entities/signatory/ui/SignatoryCard/SignatoryCard.tsx b/src/renderer/entities/signatory/ui/SignatoryCard/SignatoryCard.tsx index e4a4feec87..bd28a7a9d7 100644 --- a/src/renderer/entities/signatory/ui/SignatoryCard/SignatoryCard.tsx +++ b/src/renderer/entities/signatory/ui/SignatoryCard/SignatoryCard.tsx @@ -1,10 +1,9 @@ import { PropsWithChildren } from 'react'; import { ExplorersPopover } from '@entities/wallet'; -import { Icon, HelpText } from '@shared/ui'; +import { Icon } from '@shared/ui'; import { cnTw } from '@shared/lib/utils'; import type { Explorer, AccountId, SigningStatus } from '@shared/core'; -import { useI18n } from '@app/providers'; const IconProps = { SIGNED: { className: 'group-hover:hidden text-text-positive', name: 'checkmarkOutline' }, @@ -16,19 +15,9 @@ type Props = { explorers?: Explorer[]; addressPrefix?: number; status?: SigningStatus; - matrixId?: string; }; -export const SignatoryCard = ({ - accountId, - explorers, - addressPrefix, - status, - matrixId, - children, -}: PropsWithChildren) => { - const { t } = useI18n(); - +export const SignatoryCard = ({ accountId, explorers, addressPrefix, status, children }: PropsWithChildren) => { const button = (
      ); - return ( - - - {matrixId} - - - ); + return ; }; diff --git a/src/renderer/entities/transaction/lib/common/constants.ts b/src/renderer/entities/transaction/lib/common/constants.ts index 2230be9157..dbff1a971b 100644 --- a/src/renderer/entities/transaction/lib/common/constants.ts +++ b/src/renderer/entities/transaction/lib/common/constants.ts @@ -42,5 +42,3 @@ export const XcmTypes = [ ]; export const DEFAULT_FEE_ASSET_ITEM = 0; - -export const DESCRIPTION_LENGTH = 120; diff --git a/src/renderer/entities/wallet/model/wallet-model.ts b/src/renderer/entities/wallet/model/wallet-model.ts index e4c2c152fd..780cfb9867 100644 --- a/src/renderer/entities/wallet/model/wallet-model.ts +++ b/src/renderer/entities/wallet/model/wallet-model.ts @@ -21,9 +21,6 @@ const singleshardCreated = createEvent>(); const multisigCreated = createEvent>(); const walletConnectCreated = createEvent>(); -type MultisigUpdateParams = Partial & { id: Account['id'] }; -const multisigAccountUpdated = createEvent(); - const walletRemoved = createEvent(); const walletsRemoved = createEvent(); @@ -137,14 +134,6 @@ const removeWalletsFx = createEffect(async (wallets: Wallet[]): Promise => return walletIds; }); -const multisigWalletUpdatedFx = createEffect( - async (account: MultisigUpdateParams): Promise => { - const id = await storageService.accounts.update(account.id, account); - - return id ? account : undefined; - }, -); - sample({ clock: walletStarted, target: [fetchAllAccountsFx, fetchAllWalletsFx], @@ -222,30 +211,6 @@ sample({ target: $wallets, }); -sample({ - clock: multisigAccountUpdated, - target: multisigWalletUpdatedFx, -}); - -// TODO: update wallet -sample({ - clock: multisigWalletUpdatedFx.doneData, - source: $wallets, - filter: (_, data) => Boolean(data), - fn: (wallets, data) => { - return wallets.map((wallet) => { - if (data!.walletId !== wallet.id) return wallet; - - const newAccounts = wallet.accounts.map((account) => { - return account.id === data!.id ? data : account; - }); - - return { ...wallet, accounts: newAccounts } as Wallet; - }); - }, - target: $wallets, -}); - export const walletModel = { $wallets, $activeWallet, @@ -258,7 +223,6 @@ export const walletModel = { singleshardCreated, multisigCreated, walletConnectCreated, - multisigAccountUpdated, walletRemoved, walletRemovedSuccess: removeWalletFx.done, walletsRemoved, diff --git a/src/renderer/entities/wallet/ui/AddressWithExplorers/AddressWithExplorers.tsx b/src/renderer/entities/wallet/ui/AddressWithExplorers/AddressWithExplorers.tsx index 14d8a210e3..74f442ed69 100644 --- a/src/renderer/entities/wallet/ui/AddressWithExplorers/AddressWithExplorers.tsx +++ b/src/renderer/entities/wallet/ui/AddressWithExplorers/AddressWithExplorers.tsx @@ -1,26 +1,16 @@ -import { IconButton, HelpText } from '@shared/ui'; +import { IconButton } from '@shared/ui'; import { cnTw } from '@shared/lib/utils'; import { AccountAddressProps, AccountAddress, getAddress } from '../AccountAddress/AccountAddress'; import type { Explorer } from '@shared/core'; import { ExplorersPopover } from '../ExplorersPopover/ExplorersPopover'; -import { useI18n } from '@app/providers'; type Props = { explorers?: Explorer[]; position?: string; wrapperClassName?: string; - matrixId?: string; } & AccountAddressProps; -export const AddressWithExplorers = ({ - explorers = [], - position, - wrapperClassName, - matrixId, - ...addressProps -}: Props) => { - const { t } = useI18n(); - +export const AddressWithExplorers = ({ explorers = [], position, wrapperClassName, ...addressProps }: Props) => { const button = (
      ); - return ( - - - {matrixId} - - - ); + return ; }; diff --git a/src/renderer/features/contacts/ContactFilter/model/__tests__/contact-filter.test.tsx b/src/renderer/features/contacts/ContactFilter/model/__tests__/contact-filter.test.tsx index 72dee94be5..eb281c7b72 100644 --- a/src/renderer/features/contacts/ContactFilter/model/__tests__/contact-filter.test.tsx +++ b/src/renderer/features/contacts/ContactFilter/model/__tests__/contact-filter.test.tsx @@ -9,14 +9,12 @@ const contacts = [ name: 'name 1', address: '222', accountId: '0x333', - matrixId: '@444', }, { id: 5, name: 'name 6', address: '777', accountId: '0x888', - matrixId: '@999', }, ]; @@ -58,14 +56,4 @@ describe('features/contacts/model/contact-filter-model', () => { expect(scope.getState(filterModel.$contactsFiltered)).toEqual([contacts[0]]); }); - - test('should search by matrix id', async () => { - const scope = fork({ - values: new Map().set(contactModel.$contacts, contacts), - }); - - await allSettled(filterModel.events.queryChanged, { scope, params: contacts[1].matrixId }); - - expect(scope.getState(filterModel.$contactsFiltered)).toEqual([contacts[1]]); - }); }); diff --git a/src/renderer/features/contacts/ContactFilter/model/contact-filter.ts b/src/renderer/features/contacts/ContactFilter/model/contact-filter.ts index 535a5ab9fc..a6a588727f 100644 --- a/src/renderer/features/contacts/ContactFilter/model/contact-filter.ts +++ b/src/renderer/features/contacts/ContactFilter/model/contact-filter.ts @@ -28,9 +28,8 @@ const $contactsFiltered = combine( .filter((c) => { const hasName = includes(c.name, query); const hasAddress = includes(c.address, query); - const hasMatrixId = includes(c.matrixId, query); - return hasName || hasAddress || hasMatrixId; + return hasName || hasAddress; }) .sort((a, b) => a.name.localeCompare(b.name)); }, diff --git a/src/renderer/features/contacts/CreateContactForm/model/contact-form.ts b/src/renderer/features/contacts/CreateContactForm/model/contact-form.ts index d3fb254634..9866c65683 100644 --- a/src/renderer/features/contacts/CreateContactForm/model/contact-form.ts +++ b/src/renderer/features/contacts/CreateContactForm/model/contact-form.ts @@ -4,7 +4,6 @@ import { createForm } from 'effector-forms'; import { contactModel } from '@entities/contact'; import { toAccountId, validateAddress } from '@shared/lib/utils'; import type { Contact } from '@shared/core'; -import { validateFullUserName } from '@shared/api/matrix'; export type Callbacks = { onSubmit: () => void; @@ -42,10 +41,6 @@ const $contactForm = createForm({ }, ], }, - matrixId: { - init: '', - rules: [{ name: 'invalid', errorText: 'addressBook.createContact.matrixIdError', validator: validateMatrixId }], - }, }, validateOn: ['change', 'submit'], }); @@ -64,12 +59,6 @@ function validateAddressExist(value: string, _: unknown, contacts: Contact[]): b return contacts.every((contact) => contact.accountId !== accountId); } -function validateMatrixId(value: string): boolean { - if (!value) return true; - - return validateFullUserName(value); -} - const createContactFx = attach({ effect: contactModel.effects.createContactFx, source: $contactForm.$values, diff --git a/src/renderer/features/contacts/CreateContactForm/ui/CreateContactForm.tsx b/src/renderer/features/contacts/CreateContactForm/ui/CreateContactForm.tsx index 3074a64fb1..7345a450de 100644 --- a/src/renderer/features/contacts/CreateContactForm/ui/CreateContactForm.tsx +++ b/src/renderer/features/contacts/CreateContactForm/ui/CreateContactForm.tsx @@ -13,7 +13,7 @@ export const CreateContactForm = ({ onSubmit }: Props) => { const { submit, isValid, - fields: { name, address, matrixId }, + fields: { name, address }, } = useForm(createFormModel.$contactForm); const pending = useUnit(createFormModel.$submitPending); @@ -70,23 +70,6 @@ export const CreateContactForm = ({ onSubmit }: Props) => {
      -
      - - {t('addressBook.createContact.matrixIdHint')} - - {t(matrixId.errorText())} - -
      - diff --git a/src/renderer/features/contacts/EditContactForm/model/contact-form.ts b/src/renderer/features/contacts/EditContactForm/model/contact-form.ts index c23741ffa7..030028cd55 100644 --- a/src/renderer/features/contacts/EditContactForm/model/contact-form.ts +++ b/src/renderer/features/contacts/EditContactForm/model/contact-form.ts @@ -5,7 +5,6 @@ import { not } from 'patronum'; import { contactModel } from '@entities/contact'; import { Contact } from '@shared/core'; import { toAccountId, validateAddress } from '@shared/lib/utils'; -import { validateFullUserName } from '@shared/api/matrix'; export type Callbacks = { onSubmit: () => void; @@ -54,10 +53,6 @@ const $contactForm = createForm({ }, ], }, - matrixId: { - init: '', - rules: [{ name: 'invalid', errorText: 'addressBook.editContact.matrixIdError', validator: validateMatrixId }], - }, }, validateOn: ['change', 'submit'], }); @@ -71,7 +66,7 @@ sample({ sample({ clock: contactApi.formInitiated, filter: not($contactForm.$isDirty), - fn: ({ name, address, matrixId }) => ({ name, address, matrixId }), + fn: ({ name, address }) => ({ name, address }), target: $contactForm.setForm, }); @@ -98,12 +93,6 @@ function validateAddressExist(value: string, _: unknown, params: SourceParams): return isSameAddress || isUnique; } -function validateMatrixId(value: string): boolean { - if (!value) return true; - - return validateFullUserName(value); -} - sample({ clock: $contactForm.formValidated, source: $contactToEdit, diff --git a/src/renderer/features/contacts/EditContactForm/ui/EditContactForm.tsx b/src/renderer/features/contacts/EditContactForm/ui/EditContactForm.tsx index e615d61bf3..d2a0c9c1ac 100644 --- a/src/renderer/features/contacts/EditContactForm/ui/EditContactForm.tsx +++ b/src/renderer/features/contacts/EditContactForm/ui/EditContactForm.tsx @@ -16,7 +16,7 @@ export const EditContactForm = ({ contactToEdit, onSubmit }: Props) => { const { submit, isValid, - fields: { name, address, matrixId }, + fields: { name, address }, } = useForm(editFormModel.$contactForm); const pending = useUnit(editFormModel.$submitPending); @@ -80,23 +80,6 @@ export const EditContactForm = ({ contactToEdit, onSubmit }: Props) => {
      -
      - - {t('addressBook.editContact.matrixIdHint')} - - {t(matrixId?.errorText())} - -
      - diff --git a/src/renderer/features/matrix/MatrixAutoLogin/index.ts b/src/renderer/features/matrix/MatrixAutoLogin/index.ts deleted file mode 100644 index a42b9cda7d..0000000000 --- a/src/renderer/features/matrix/MatrixAutoLogin/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { MatrixAutoLogin } from './ui/MatrixAutoLogin'; -export { matrixAutologinModel } from './model/matrix-autologin-model'; diff --git a/src/renderer/features/matrix/MatrixAutoLogin/lib/constants.ts b/src/renderer/features/matrix/MatrixAutoLogin/lib/constants.ts deleted file mode 100644 index 51219dbb01..0000000000 --- a/src/renderer/features/matrix/MatrixAutoLogin/lib/constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const AUTO_LOGIN_DELAY = 1_500; diff --git a/src/renderer/features/matrix/MatrixAutoLogin/lib/matrix-autologin-utils.ts b/src/renderer/features/matrix/MatrixAutoLogin/lib/matrix-autologin-utils.ts deleted file mode 100644 index a977cd8b93..0000000000 --- a/src/renderer/features/matrix/MatrixAutoLogin/lib/matrix-autologin-utils.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { AutoLoginStatus } from './types'; - -export const matrixAutologinUtils = { - isNone, - isInProcess, - isSuccess, - isError, -}; - -function isNone(status: AutoLoginStatus): boolean { - return status === AutoLoginStatus.NONE; -} - -function isInProcess(status: AutoLoginStatus): boolean { - return status === AutoLoginStatus.IN_PROCESS; -} - -function isSuccess(status: AutoLoginStatus): boolean { - return status === AutoLoginStatus.SUCCESS; -} - -function isError(status: AutoLoginStatus): boolean { - return status === AutoLoginStatus.ERROR; -} diff --git a/src/renderer/features/matrix/MatrixAutoLogin/lib/types.ts b/src/renderer/features/matrix/MatrixAutoLogin/lib/types.ts deleted file mode 100644 index 0297bde77f..0000000000 --- a/src/renderer/features/matrix/MatrixAutoLogin/lib/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const enum AutoLoginStatus { - NONE, - IN_PROCESS, - SUCCESS, - ERROR, -} diff --git a/src/renderer/features/matrix/MatrixAutoLogin/model/__tests__/matrix-autologin-model.test.ts b/src/renderer/features/matrix/MatrixAutoLogin/model/__tests__/matrix-autologin-model.test.ts deleted file mode 100644 index d46e1830a3..0000000000 --- a/src/renderer/features/matrix/MatrixAutoLogin/model/__tests__/matrix-autologin-model.test.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { fork, allSettled } from 'effector'; - -import { matrixAutologinModel } from '../matrix-autologin-model'; -import { matrixModel, LoginStatus } from '@entities/matrix'; -import { AutoLoginStatus } from '../../lib/types'; - -describe('features/matrix/MatrixAutoLogin/model/matrix-autologin-model', () => { - beforeAll(() => { - jest.useFakeTimers(); - }); - - beforeEach(() => { - jest.restoreAllMocks(); - }); - - test('should login with token on loggedInWithToken', async () => { - const spyLoginWithSso = jest.fn().mockResolvedValue(''); - const scope = fork({ - values: new Map() - .set(matrixModel.$matrix, { loginWithSso: spyLoginWithSso }) - .set(matrixModel.$loginStatus, LoginStatus.LOGGED_OUT), - }); - - const action = allSettled(matrixAutologinModel.events.loggedInWithToken, { scope, params: 'token' }); - - await jest.runAllTimersAsync(); - await action; - - expect(spyLoginWithSso).toHaveBeenCalledWith('token'); - expect(scope.getState(matrixModel.$loginStatus)).toEqual(LoginStatus.LOGGED_IN); - expect(scope.getState(matrixAutologinModel.$autoLoginStatus)).toEqual(AutoLoginStatus.SUCCESS); - }); - - test('should be logged out if login with token failed', async () => { - const spyLoginWithSso = jest.fn().mockRejectedValue(new Error('bad token')); - const scope = fork({ - values: new Map() - .set(matrixModel.$matrix, { loginWithSso: spyLoginWithSso }) - .set(matrixModel.$loginStatus, LoginStatus.LOGGED_OUT), - }); - - const action = allSettled(matrixAutologinModel.events.loggedInWithToken, { scope, params: 'token' }); - - await jest.runAllTimersAsync(); - await action; - - expect(spyLoginWithSso).toHaveBeenCalledWith('token'); - expect(scope.getState(matrixModel.$loginStatus)).toEqual(LoginStatus.LOGGED_OUT); - expect(scope.getState(matrixAutologinModel.$autoLoginStatus)).toEqual(AutoLoginStatus.ERROR); - }); - - test('should login from cache on loggedInFromCache', async () => { - const spyLoginFromCache = jest.fn().mockResolvedValue(''); - const scope = fork({ - values: new Map() - .set(matrixModel.$matrix, { loginFromCache: spyLoginFromCache }) - .set(matrixModel.$loginStatus, LoginStatus.LOGGED_OUT), - }); - - const action = allSettled(matrixAutologinModel.events.loggedInFromCache, { scope }); - - await jest.runAllTimersAsync(); - await action; - - expect(spyLoginFromCache).toHaveBeenCalled(); - expect(scope.getState(matrixModel.$loginStatus)).toEqual(LoginStatus.LOGGED_IN); - expect(scope.getState(matrixAutologinModel.$autoLoginStatus)).toEqual(AutoLoginStatus.NONE); - }); - - test('should be logged out if login from cache fail', async () => { - const spyLoginFromCache = jest.fn().mockRejectedValue(new Error('bad creds')); - const scope = fork({ - values: new Map() - .set(matrixModel.$matrix, { loginFromCache: spyLoginFromCache }) - .set(matrixModel.$loginStatus, LoginStatus.LOGGED_OUT), - }); - - const action = allSettled(matrixAutologinModel.events.loggedInFromCache, { scope }); - - await jest.runAllTimersAsync(); - await action; - - expect(spyLoginFromCache).toHaveBeenCalled(); - expect(scope.getState(matrixModel.$loginStatus)).toEqual(LoginStatus.LOGGED_OUT); - expect(scope.getState(matrixAutologinModel.$autoLoginStatus)).toEqual(AutoLoginStatus.NONE); - }); - - test('should not login on loginStarted if already logged in', async () => { - const spyLoginFromCache = jest.fn().mockResolvedValue(''); - const spyLoginWithSso = jest.fn().mockResolvedValue(''); - const scope = fork({ - values: new Map() - .set(matrixModel.$matrix, { loginFromCache: spyLoginFromCache, loginWithSso: spyLoginWithSso }) - .set(matrixModel.$loginStatus, LoginStatus.LOGGED_IN), - }); - - const actions = Promise.all([ - allSettled(matrixAutologinModel.events.loggedInFromCache, { scope }), - allSettled(matrixAutologinModel.events.loggedInWithToken, { scope, params: 'token' }), - ]); - - await jest.runAllTimersAsync(); - await actions; - - expect(spyLoginFromCache).not.toHaveBeenCalled(); - expect(spyLoginWithSso).not.toHaveBeenCalled(); - expect(scope.getState(matrixModel.$loginStatus)).toEqual(LoginStatus.LOGGED_IN); - expect(scope.getState(matrixAutologinModel.$autoLoginStatus)).toEqual(AutoLoginStatus.NONE); - }); - - test('should not login with token after login from cache', async () => { - const spyLoginFromCache = jest.fn().mockResolvedValue(''); - const spyLoginWithSso = jest.fn().mockResolvedValue(''); - const scope = fork({ - values: new Map() - .set(matrixModel.$matrix, { loginFromCache: spyLoginFromCache, loginWithSso: spyLoginWithSso }) - .set(matrixModel.$loginStatus, LoginStatus.LOGGED_OUT), - }); - - const actions = Promise.all([ - allSettled(matrixAutologinModel.events.loggedInFromCache, { scope }), - allSettled(matrixAutologinModel.events.loggedInWithToken, { scope, params: 'token' }), - ]); - - await jest.runAllTimersAsync(); - await actions; - - expect(spyLoginFromCache).toHaveBeenCalled(); - expect(spyLoginWithSso).not.toHaveBeenCalled(); - expect(scope.getState(matrixModel.$loginStatus)).toEqual(LoginStatus.LOGGED_IN); - expect(scope.getState(matrixAutologinModel.$autoLoginStatus)).toEqual(AutoLoginStatus.NONE); - }); - - test('should login with token after login from cache failed', async () => { - const spyLoginFromCache = jest.fn().mockRejectedValue(new Error('bad creds')); - const spyLoginWithSso = jest.fn().mockResolvedValue(''); - const scope = fork({ - values: new Map() - .set(matrixModel.$matrix, { loginFromCache: spyLoginFromCache, loginWithSso: spyLoginWithSso }) - .set(matrixModel.$loginStatus, LoginStatus.LOGGED_OUT), - }); - - const actions = Promise.all([ - allSettled(matrixAutologinModel.events.loggedInFromCache, { scope }), - allSettled(matrixAutologinModel.events.loggedInWithToken, { scope, params: 'token' }), - ]); - - await jest.runAllTimersAsync(); - await actions; - - expect(spyLoginFromCache).toHaveBeenCalled(); - expect(spyLoginWithSso).toHaveBeenCalledWith('token'); - expect(scope.getState(matrixModel.$loginStatus)).toEqual(LoginStatus.LOGGED_IN); - expect(scope.getState(matrixAutologinModel.$autoLoginStatus)).toEqual(AutoLoginStatus.SUCCESS); - }); -}); diff --git a/src/renderer/features/matrix/MatrixAutoLogin/model/matrix-autologin-model.ts b/src/renderer/features/matrix/MatrixAutoLogin/model/matrix-autologin-model.ts deleted file mode 100644 index 3a6552a26b..0000000000 --- a/src/renderer/features/matrix/MatrixAutoLogin/model/matrix-autologin-model.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { createEffect, sample, createEvent, createStore } from 'effector'; -import { delay, spread, not } from 'patronum'; - -import { ISecureMessenger } from '@shared/api/matrix'; -import { matrixModel, LoginStatus, matrixUtils } from '@entities/matrix'; -import { AUTO_LOGIN_DELAY } from '../lib/constants'; -import { AutoLoginStatus } from '../lib/types'; - -const loggedInFromCache = createEvent(); -const loggedInWithToken = createEvent(); -const proceedWithToken = createEvent(); - -const $ssoToken = createStore(null); -const $autoLoginStatus = createStore(AutoLoginStatus.NONE); - -type LoginTokenParams = { - matrix: ISecureMessenger; - token: string; -}; -const loginWithTokenFx = createEffect(({ matrix, token }: LoginTokenParams): Promise => { - return matrix.loginWithSso(token); -}); - -const loginFromCacheFx = createEffect((matrix: ISecureMessenger): Promise => { - return matrix.loginFromCache(); -}); - -sample({ - clock: loggedInFromCache, - source: { - matrix: matrixModel.$matrix, - loginStatus: matrixModel.$loginStatus, - }, - filter: ({ loginStatus }) => matrixUtils.isLoggedOut(loginStatus), - fn: ({ matrix }) => ({ - loginEffect: matrix, - loginStatus: LoginStatus.AUTO_LOGIN, - }), - target: spread({ - loginEffect: loginFromCacheFx, - loginStatus: matrixModel.$loginStatus, - }), -}); - -sample({ - clock: loggedInWithToken, - filter: loginFromCacheFx.pending, - target: $ssoToken, -}); - -sample({ - clock: loggedInWithToken, - filter: not(loginFromCacheFx.pending), - target: proceedWithToken, -}); - -sample({ - clock: proceedWithToken, - source: { - matrix: matrixModel.$matrix, - loginStatus: matrixModel.$loginStatus, - }, - filter: ({ loginStatus }) => matrixUtils.isLoggedOut(loginStatus), - fn: ({ matrix }, token) => ({ - loginEffect: { matrix, token }, - loginStatus: LoginStatus.AUTO_LOGIN, - autoLoginStatus: AutoLoginStatus.IN_PROCESS, - }), - target: spread({ - loginEffect: loginWithTokenFx, - loginStatus: matrixModel.$loginStatus, - autoLoginStatus: $autoLoginStatus, - }), -}); - -sample({ - clock: loginWithTokenFx.doneData, - fn: () => AutoLoginStatus.SUCCESS, - target: $autoLoginStatus, -}); - -sample({ - clock: [loginFromCacheFx.doneData, delay(loginWithTokenFx.doneData, AUTO_LOGIN_DELAY)], - fn: () => LoginStatus.LOGGED_IN, - target: matrixModel.$loginStatus, -}); - -sample({ - clock: loginWithTokenFx.failData, - fn: () => AutoLoginStatus.ERROR, - target: $autoLoginStatus, -}); - -sample({ - clock: [loginFromCacheFx.failData, delay(loginWithTokenFx.failData, AUTO_LOGIN_DELAY)], - fn: () => LoginStatus.LOGGED_OUT, - target: matrixModel.$loginStatus, -}); - -sample({ - clock: loginFromCacheFx.failData, - source: $ssoToken, - filter: Boolean, - target: proceedWithToken, -}); - -export const matrixAutologinModel = { - $autoLoginStatus, - events: { - loggedInFromCache, - loggedInWithToken, - }, -}; diff --git a/src/renderer/features/matrix/MatrixAutoLogin/ui/MatrixAutoLogin.tsx b/src/renderer/features/matrix/MatrixAutoLogin/ui/MatrixAutoLogin.tsx deleted file mode 100644 index 3b0f5274a9..0000000000 --- a/src/renderer/features/matrix/MatrixAutoLogin/ui/MatrixAutoLogin.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useUnit } from 'effector-react'; -import noop from 'lodash/noop'; - -import { useI18n } from '@app/providers'; -import { StatusModal } from '@shared/ui'; -import { Animation } from '@shared/ui/Animation/Animation'; -import { matrixModel, matrixUtils } from '@entities/matrix'; -import { matrixAutologinModel } from '../model/matrix-autologin-model'; -import { matrixAutologinUtils } from '../lib/matrix-autologin-utils'; -import { AutoLoginStatus } from '../lib/types'; - -export const MatrixAutoLogin = () => { - const { t } = useI18n(); - - const loginStatus = useUnit(matrixModel.$loginStatus); - const autoLoginStatus = useUnit(matrixAutologinModel.$autoLoginStatus); - - const getAnimationParams = (status: AutoLoginStatus) => { - if (matrixAutologinUtils.isError(status)) { - return { variant: 'error', loop: false } as const; - } - if (matrixAutologinUtils.isSuccess(status)) { - return { variant: 'success', loop: false } as const; - } - - return { variant: 'loading', loop: true } as const; - }; - - if (!matrixUtils.isAutoLogin(loginStatus)) return null; - - return ( - } - onClose={noop} - /> - ); -}; diff --git a/src/renderer/features/matrix/MatrixLogin/index.ts b/src/renderer/features/matrix/MatrixLogin/index.ts deleted file mode 100644 index 060c857746..0000000000 --- a/src/renderer/features/matrix/MatrixLogin/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { MatrixLogin } from './ui/MatrixLogin'; diff --git a/src/renderer/features/matrix/MatrixLogin/lib/constants.ts b/src/renderer/features/matrix/MatrixLogin/lib/constants.ts deleted file mode 100644 index c46a59a624..0000000000 --- a/src/renderer/features/matrix/MatrixLogin/lib/constants.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { WELL_KNOWN_SERVERS } from '@shared/api/matrix'; - -export const HOME_SERVERS = WELL_KNOWN_SERVERS.map((server) => ({ - id: server.domain, - value: server.domain, - element: server.domain, -})); diff --git a/src/renderer/features/matrix/MatrixLogin/model/matrix-login-model.ts b/src/renderer/features/matrix/MatrixLogin/model/matrix-login-model.ts deleted file mode 100644 index 8ef076cc05..0000000000 --- a/src/renderer/features/matrix/MatrixLogin/model/matrix-login-model.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { createStore, createEvent, sample, combine } from 'effector'; - -import { isStringsMatchQuery } from '@shared/lib/utils'; -import { HOME_SERVERS } from '../lib/constants'; - -const homeserverQueryChanged = createEvent(); - -const $homeserverQuery = createStore(''); - -const $homeServers = combine($homeserverQuery, (query) => { - return HOME_SERVERS.reduce((acc, server) => { - if (isStringsMatchQuery(query, [server.value])) { - acc.push(server); - } - - return acc; - }, []); -}); - -sample({ clock: homeserverQueryChanged, target: $homeserverQuery }); - -export const matrixLoginModel = { - $homeserverQuery, - $homeServers, - events: { - homeserverQueryChanged, - }, -}; diff --git a/src/renderer/features/matrix/MatrixLogin/ui/LoginForm.test.tsx b/src/renderer/features/matrix/MatrixLogin/ui/LoginForm.test.tsx deleted file mode 100644 index de29e8c52e..0000000000 --- a/src/renderer/features/matrix/MatrixLogin/ui/LoginForm.test.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { render, screen, act, waitFor } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { Provider } from 'effector-react'; -import { fork, Scope } from 'effector'; - -import { LoginForm } from './LoginForm'; -import { matrixModel } from '@entities/matrix'; - -jest.mock('react-i18next', () => ({ Trans: (props: any) => props.i18nKey })); - -jest.mock('@app/providers', () => ({ - useI18n: jest.fn().mockReturnValue({ - t: (key: string) => key, - }), -})); - -describe('pages/Settings/Matrix/LoginForm', () => { - const setupForm = async (scope: Scope, withCredentials = false) => { - const user = userEvent.setup({ delay: null }); - - await act(async () => { - render( - - - , - ); - }); - - if (withCredentials) { - const username = await screen.findByPlaceholderText('settings.matrix.usernamePlaceholder'); - await act(() => user.type(username, 'my_username')); - - const password = screen.getByPlaceholderText('settings.matrix.passwordPlaceholder'); - await act(() => user.type(password, 'my_password')); - } - }; - - test('should render component', async () => { - await act(async () => { - render( - - - , - ); - }); - - const homeserverInputLabel = screen.getByText('settings.matrix.homeserverLabel'); - const submit = screen.getByRole('button', { name: 'settings.matrix.logInButton' }); - - expect(homeserverInputLabel).toBeInTheDocument(); - expect(submit).toBeDisabled(); - }); - - test('should submit button be disabled', async () => { - const scope = fork({ - values: new Map().set(matrixModel.$matrix, { - loginFlows: jest.fn().mockResolvedValue({ password: true, sso: [] }), - setHomeserver: jest.fn().mockResolvedValue({}), - loginWithCreds: jest.fn().mockResolvedValue(Promise.resolve()), - }), - }); - - await setupForm(scope, false); - - const button = screen.getByRole('button', { name: 'settings.matrix.logInButton' }); - waitFor(() => expect(button).toBeDisabled()); - }); - - test('should disable submit button during submission', async () => { - const scope = fork({ - values: new Map().set(matrixModel.$matrix, { - loginFlows: jest.fn().mockResolvedValue({ password: true, sso: [] }), - setHomeserver: jest.fn(), - loginWithCreds: jest.fn().mockResolvedValue(Promise.resolve()), - }), - }); - - await setupForm(scope, true); - - const button = screen.getByRole('button', { name: 'settings.matrix.logInButton' }); - expect(button).toBeEnabled(); - - await act(async () => button.click()); - - waitFor(() => expect(button).toBeDisabled()); - }); -}); diff --git a/src/renderer/features/matrix/MatrixLogin/ui/LoginForm.tsx b/src/renderer/features/matrix/MatrixLogin/ui/LoginForm.tsx deleted file mode 100644 index b5bd57ebc8..0000000000 --- a/src/renderer/features/matrix/MatrixLogin/ui/LoginForm.tsx +++ /dev/null @@ -1,294 +0,0 @@ -import { Controller, SubmitHandler, useForm } from 'react-hook-form'; -import { Trans } from 'react-i18next'; -import { useEffect, useState } from 'react'; -import { useUnit } from 'effector-react'; - -import { useI18n } from '@app/providers'; -import { validateShortUserName, WELL_KNOWN_SERVERS, LoginFlows } from '@shared/api/matrix'; -import type { ComboboxOption } from '@shared/ui/types'; -import { IconNames } from '@shared/ui/Icon/data'; -import { matrixModel, LoginStatus, matrixUtils } from '@entities/matrix'; -import { matrixLoginModel } from '../model/matrix-login-model'; -import { APP_CONFIG } from '../../../../../../app.config'; -import { - Alert, - Button, - ButtonWebLink, - Combobox, - FootnoteText, - Icon, - InfoLink, - Input, - InputHint, - Loader, - PasswordInput, - Separator, -} from '@shared/ui'; - -const HOME_SERVERS = WELL_KNOWN_SERVERS.map((server) => ({ - id: server.domain, - value: server.domain, - element: server.domain, -})); - -const DEFAULT_HOMESERVER = HOME_SERVERS[0]; - -type MatrixForm = { - homeserver: ComboboxOption; - username: string; - password: string; -}; - -type Props = { - redirectStep: string; -}; - -export const LoginForm = ({ redirectStep }: Props) => { - const { t } = useI18n(); - - const matrix = useUnit(matrixModel.$matrix); - const loginStatus = useUnit(matrixModel.$loginStatus); - - const homeserverQuery = useUnit(matrixLoginModel.$homeserverQuery); - const homeServers = useUnit(matrixLoginModel.$homeServers); - - const [isHomeserverLoading, setIsHomeserverLoading] = useState(false); - const [inProgress, setInProgress] = useState(false); - const [credentialsFlow, setCredentialsFlow] = useState(true); - const [ssoFlows, setSsoFlows] = useState([]); - const [invalidHomeserver, setInvalidHomeserver] = useState(false); - const [invalidLogin, setInvalidLogin] = useState(false); - - const { - handleSubmit, - control, - clearErrors, - resetField, - setValue, - watch, - formState: { isValid, errors }, - } = useForm({ - mode: 'onChange', - defaultValues: { homeserver: DEFAULT_HOMESERVER, username: '', password: '' }, - }); - - // @ts-ignore - const homeserver = watch('homeserver'); - - useEffect(() => { - const handler = (value: ComboboxOption) => setValue('homeserver', value, { shouldValidate: true }); - - changeHomeserver(handler)(DEFAULT_HOMESERVER); - }, [setValue]); - - const changeInputValue = (onChange: (value: string) => void) => { - return (value: string) => { - onChange(value); - - if (invalidLogin) { - setInvalidLogin(false); - clearErrors(); - } - }; - }; - - const changeHomeserver = (onChange: (server: ComboboxOption) => void) => { - return async (option: ComboboxOption) => { - onChange(option); - - setIsHomeserverLoading(true); - try { - await updateHomeserver(option.value); - await checkLoginFlow(); - } catch (error) { - console.warn(error); - } - setIsHomeserverLoading(false); - }; - }; - - const updateHomeserver = async (server: string) => { - setInvalidHomeserver(false); - try { - await matrix.setHomeserver(server); - } catch (error) { - setInvalidHomeserver(true); - throw error; - } - }; - - const checkLoginFlow = async () => { - const flows = await matrix.loginFlows(); - const loginIsAvailable = flows.password; - - if (!flows.password) { - resetField('username'); - resetField('password'); - } - clearErrors(); - setInvalidLogin(false); - setCredentialsFlow(loginIsAvailable); - setSsoFlows(flows.sso); - }; - - const submitMatrixLogin: SubmitHandler = async ({ username, password }) => { - if (isHomeserverLoading) return; - - setInProgress(true); - setInvalidLogin(false); - try { - await matrix.loginWithCreds(username, password); - matrixModel.events.loginStatusChanged(LoginStatus.LOGGED_IN); - } catch (error) { - console.warn(error); - setInvalidLogin(true); - } - setInProgress(false); - }; - - const getSsoRedirectUrl = (redirectStep: string): string => { - if (window.App) { - //eslint-disable-next-line i18next/no-literal-string - return `${APP_CONFIG.ELECTRON_PROTOCOL}://webapp/?step=${redirectStep}`; - } - - //eslint-disable-next-line i18next/no-literal-string - return `${window.location.origin}/?step=${redirectStep}`; - }; - - const logInDisabled = isHomeserverLoading || !isValid || invalidHomeserver || invalidLogin; - const isEditing = !matrixUtils.isLoggedIn(loginStatus) && !isHomeserverLoading && !inProgress; - const register = ; - - return ( - <> -
      - ( -
      - - - {t('settings.matrix.badServerError')} - -
      - )} - /> - - {!credentialsFlow && ( -

      - -

      - )} - - {credentialsFlow && isHomeserverLoading && ( -
      - -
      - )} - - {credentialsFlow && !isHomeserverLoading && ( - <> - ( - <> - - - {t('settings.matrix.usernameError')} - - - )} - /> - - ( - <> - - - - )} - /> - - )} - - -
      - {ssoFlows.length > 0 && ( -
      - - -
      - {ssoFlows.map(({ id, name, brand }) => ( - -
      - - {name} -
      -
      - ))} -
      -
      - )} - - {t('settings.matrix.privacyTitle')} - - - - -
      - -
      - - -
      - - ); -}; diff --git a/src/renderer/features/matrix/MatrixLogin/ui/MatrixLogin.tsx b/src/renderer/features/matrix/MatrixLogin/ui/MatrixLogin.tsx deleted file mode 100644 index cbfa3be070..0000000000 --- a/src/renderer/features/matrix/MatrixLogin/ui/MatrixLogin.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { useEffect } from 'react'; -import { useUnit } from 'effector-react'; - -import { useI18n } from '@app/providers'; -import { BaseModal } from '@shared/ui'; -import { MatrixInfoPopover, matrixUtils, matrixModel } from '@entities/matrix'; -import { LoginForm } from './LoginForm'; -import { useToggle } from '@shared/lib/hooks'; -import { DEFAULT_TRANSITION } from '@shared/lib/utils'; - -type Props = { - isOpen?: boolean; - zIndex?: string; - redirectStep: string; - onClose: () => void; -}; - -export const MatrixLogin = ({ isOpen = true, zIndex, redirectStep, onClose }: Props) => { - const { t } = useI18n(); - - const loginStatus = useUnit(matrixModel.$loginStatus); - - const [isModalOpen, toggleIsModalOpen] = useToggle(isOpen); - - useEffect(() => { - if (isOpen && !isModalOpen) { - toggleIsModalOpen(); - } - - if (!isOpen && isModalOpen) { - closeMatrixModal({ skipEvent: true }); - } - }, [isOpen]); - - const closeMatrixModal = (options?: { skipEvent: boolean }) => { - toggleIsModalOpen(); - - if (!options?.skipEvent) { - setTimeout(onClose, DEFAULT_TRANSITION); - } - }; - - if (!matrixUtils.isLoggedOut(loginStatus)) return null; - - return ( - - - - - ); -}; diff --git a/src/renderer/features/matrix/MatrixVerification/index.ts b/src/renderer/features/matrix/MatrixVerification/index.ts deleted file mode 100644 index 03af486fdd..0000000000 --- a/src/renderer/features/matrix/MatrixVerification/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { MatrixVerification } from './ui/MatrixVerification'; diff --git a/src/renderer/features/matrix/MatrixVerification/ui/MatrixVerification.tsx b/src/renderer/features/matrix/MatrixVerification/ui/MatrixVerification.tsx deleted file mode 100644 index fbd2fc40a3..0000000000 --- a/src/renderer/features/matrix/MatrixVerification/ui/MatrixVerification.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { useUnit } from 'effector-react'; - -import { useI18n } from '@app/providers'; -import { BaseModal } from '@shared/ui'; -import { MatrixInfoPopover, matrixModel, matrixUtils } from '@entities/matrix'; -import { UserInfo } from './UserInfo'; -import { Verification } from './Verification'; -import { useToggle } from '@shared/lib/hooks'; -import { DEFAULT_TRANSITION } from '@shared/lib/utils'; - -type Props = { - onClose: () => void; -}; - -export const MatrixVerification = ({ onClose }: Props) => { - const { t } = useI18n(); - - const loginStatus = useUnit(matrixModel.$loginStatus); - - const [isModalOpen, toggleIsModalOpen] = useToggle(true); - - const closeMatrixModal = () => { - toggleIsModalOpen(); - setTimeout(onClose, DEFAULT_TRANSITION); - }; - - if (!matrixUtils.isLoggedIn(loginStatus)) return null; - - return ( - - -
      - - -
      -
      - ); -}; diff --git a/src/renderer/features/matrix/MatrixVerification/ui/UserInfo.test.tsx b/src/renderer/features/matrix/MatrixVerification/ui/UserInfo.test.tsx deleted file mode 100644 index dca8e15572..0000000000 --- a/src/renderer/features/matrix/MatrixVerification/ui/UserInfo.test.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { render, screen, act } from '@testing-library/react'; -import { Provider } from 'effector-react'; -import { fork } from 'effector'; - -import { UserInfo } from './UserInfo'; -import { matrixModel } from '@entities/matrix'; - -jest.mock('@app/providers', () => ({ - useI18n: jest.fn().mockReturnValue({ - t: (key: string) => key, - }), -})); - -describe('pages/Settings/Matrix/UserInfo', () => { - afterEach(() => { - jest.clearAllMocks(); - }); - - test('should render component', () => { - render(); - - const title = screen.getByText('settings.matrix.userIdLabel'); - expect(title).toBeInTheDocument(); - }); - - test('should logout from Matrix', async () => { - const spyLogout = jest.fn(); - const scope = fork({ - values: new Map().set(matrixModel.$matrix, { logout: spyLogout }), - }); - - render( - - - , - ); - - const button = screen.getByRole('button'); - await act(async () => button.click()); - - expect(spyLogout).toHaveBeenCalled(); - }); -}); diff --git a/src/renderer/features/matrix/MatrixVerification/ui/UserInfo.tsx b/src/renderer/features/matrix/MatrixVerification/ui/UserInfo.tsx deleted file mode 100644 index c1fb5c9508..0000000000 --- a/src/renderer/features/matrix/MatrixVerification/ui/UserInfo.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { useUnit } from 'effector-react'; - -import { useI18n } from '@app/providers'; -import { useToggle } from '@shared/lib/hooks'; -import { Button, FootnoteText, StatusLabel } from '@shared/ui'; -import { matrixModel } from '@entities/matrix'; - -export const UserInfo = () => { - const { t } = useI18n(); - - const matrix = useUnit(matrixModel.$matrix); - - const [inProgress, toggleProgress] = useToggle(); - - const handleLogout = async () => { - toggleProgress(); - try { - await matrix.logout(); - } catch (error) { - console.warn(error); - } - toggleProgress(); - }; - - return ( -
      - {t('settings.matrix.userIdLabel')} -
      - - -
      -
      - ); -}; diff --git a/src/renderer/features/matrix/MatrixVerification/ui/Verification.test.tsx b/src/renderer/features/matrix/MatrixVerification/ui/Verification.test.tsx deleted file mode 100644 index 374a1766eb..0000000000 --- a/src/renderer/features/matrix/MatrixVerification/ui/Verification.test.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import { render, screen, act } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { Scope, fork } from 'effector'; -import { Provider } from 'effector-react'; - -import { Verification } from './Verification'; -import { matrixModel } from '@entities/matrix'; - -jest.mock('@app/providers', () => ({ - useI18n: jest.fn().mockReturnValue({ - t: (key: string) => key, - }), -})); - -jest.mock('@shared/lib/utils', () => ({ - ...jest.requireActual('@shared/lib/utils'), - cnTw: (...classes: string[]) => classes.join(' '), - getOperatingSystem: jest.fn().mockReturnValue('macOS'), -})); - -describe('pages/Settings/Matrix/Verification', () => { - const submitFormWithString = async (scope?: Scope) => { - const user = userEvent.setup({ delay: null }); - render( - - - , - ); - - const input = screen.getByRole('textbox'); - await act(() => user.type(input, 'my secret value')); - - const submit = screen.getByRole('button', { name: 'settings.matrix.verifyButton' }); - await act(() => submit.click()); - }; - - const submitFormWithFile = async (scope?: Scope) => { - const user = userEvent.setup({ delay: null }); - render( - - - , - ); - - const fileTab = screen.getByText('settings.matrix.verifyWithFile'); - await act(() => fileTab.click()); - - const file = new File(['hello'], 'hello.txt', { type: 'text/plain' }); - const input = screen.getByTestId('file-input'); - await act(() => user.upload(input, file)); - - const submit = screen.getByRole('button', { name: 'settings.matrix.verifyButton' }); - await act(() => submit.click()); - }; - - afterEach(() => { - jest.clearAllMocks(); - }); - - test('should render component', async () => { - render(); - - const title = screen.getByText('settings.matrix.verificationLabel'); - const tabs = screen.getByRole('tablist'); - - expect(title).toBeInTheDocument(); - expect(tabs).toBeInTheDocument(); - }); - - test('should secretKey submit fail with error', async () => { - await submitFormWithString(); - - const errorHint = screen.getByText('settings.matrix.secretKeyError'); - expect(errorHint).toBeInTheDocument(); - }); - - test('should become verified by file', async () => { - const scope = fork({ - values: new Map().set(matrixModel.$matrix, { verifyWithFile: jest.fn().mockReturnValue(true) }), - }); - await submitFormWithFile(scope); - - const verified = screen.getByText('settings.matrix.statusVerified'); - const errorHint = screen.queryByText('settings.matrix.fileError'); - expect(verified).toBeInTheDocument(); - expect(errorHint).not.toBeInTheDocument(); - }); - - test('should become verified by secret key', async () => { - const scope = fork({ - values: new Map().set(matrixModel.$matrix, { - sessionIsVerified: false, - verifyWithKey: jest.fn().mockReturnValue(true), - }), - }); - await submitFormWithString(scope); - - const verified = screen.getByText('settings.matrix.statusVerified'); - const errorHint = screen.queryByText('settings.matrix.secretKeyError'); - expect(verified).toBeInTheDocument(); - expect(errorHint).not.toBeInTheDocument(); - }); - - test('should be verified from the start', async () => { - const scope = fork({ - values: new Map().set(matrixModel.$matrix, { sessionIsVerified: true }), - }); - await act(async () => { - render( - - - , - ); - }); - - const verified = screen.getByText('settings.matrix.statusVerified'); - const submit = screen.queryByRole('button', { name: 'settings.matrix.verifyDeviceButton' }); - expect(verified).toBeInTheDocument(); - expect(submit).not.toBeInTheDocument(); - }); -}); diff --git a/src/renderer/features/matrix/MatrixVerification/ui/Verification.tsx b/src/renderer/features/matrix/MatrixVerification/ui/Verification.tsx deleted file mode 100644 index 09f119d60f..0000000000 --- a/src/renderer/features/matrix/MatrixVerification/ui/Verification.tsx +++ /dev/null @@ -1,200 +0,0 @@ -import { useState } from 'react'; -import { TFunction } from 'react-i18next'; -import { useForm, SubmitHandler, Controller } from 'react-hook-form'; -import { useUnit } from 'effector-react'; - -import { useI18n } from '@app/providers'; -import { Button, Input, InputHint, FootnoteText, InputFile, Tabs, Icon } from '@shared/ui'; -import { TabItem } from '@shared/ui/types'; -import { matrixModel } from '@entities/matrix'; - -type VerifyForm = { - secretKey: string; - secretFile: File; -}; - -const VerifyMethods = { - SECRET_KEY: 0, - PASS_PHRASE: 1, - FILE: 2, -} as const; - -type VerifyMethodsType = (typeof VerifyMethods)[keyof typeof VerifyMethods]; - -const getVerifyLabel = (t: TFunction, method: VerifyMethodsType): string => { - const Labels = { - [VerifyMethods.SECRET_KEY]: t('settings.matrix.verifyWithKey'), - [VerifyMethods.PASS_PHRASE]: t('settings.matrix.verifyWithPassphrase'), - [VerifyMethods.FILE]: t('settings.matrix.verifyWithFile'), - }; - - return Labels[method]; -}; - -const getInputPlaceholders = (t: TFunction, method: VerifyMethodsType): string => { - const Placeholders = { - [VerifyMethods.SECRET_KEY]: t('settings.matrix.secretKeyPlaceholder'), - [VerifyMethods.PASS_PHRASE]: t('settings.matrix.passphrasePlaceholder'), - [VerifyMethods.FILE]: t('settings.matrix.secretFilePlaceholder'), - }; - - return Placeholders[method]; -}; - -const getErrorMessage = (t: TFunction, method: VerifyMethodsType): string => { - const Errors = { - [VerifyMethods.SECRET_KEY]: t('settings.matrix.secretKeyError'), - [VerifyMethods.PASS_PHRASE]: t('settings.matrix.passphraseError'), - [VerifyMethods.FILE]: t('settings.matrix.fileError'), - }; - - return Errors[method]; -}; - -export const Verification = () => { - const { t } = useI18n(); - - const matrix = useUnit(matrixModel.$matrix); - - const [verifyFailed, setVerifyFailed] = useState(false); - const [sessionIsVerified, setSessionIsVerified] = useState(matrix.sessionIsVerified); - const [verifyMethod, setVerifyMethod] = useState(VerifyMethods.SECRET_KEY); - - const { - handleSubmit, - control, - reset, - formState: { isValid }, - } = useForm({ - mode: 'onChange', - defaultValues: { secretKey: '', secretFile: undefined }, - }); - - const changeVerifyMethod = (method: VerifyMethodsType) => { - reset(); - setVerifyFailed(false); - setVerifyMethod(method); - }; - - const changeSecretFile = (onChange: (file: File) => void) => { - return (file: File) => { - setVerifyFailed(false); - onChange(file); - }; - }; - - const submitVerification: SubmitHandler = async ({ secretKey, secretFile }) => { - const methods = { - [VerifyMethods.SECRET_KEY]: () => matrix.verifyWithKey(secretKey), - [VerifyMethods.PASS_PHRASE]: () => matrix.verifyWithPhrase(secretKey), - [VerifyMethods.FILE]: () => matrix.verifyWithFile(secretFile), - }; - - try { - const verified = await methods[verifyMethod](); - setSessionIsVerified(verified); - setVerifyFailed(!verified); - } catch (error) { - setVerifyFailed(true); - console.warn(error); - } - }; - - const textInput = ( - ( - - )} - /> - ); - - const fileInput = ( - ( - - )} - /> - ); - - const tabItems: TabItem[] = [ - { - id: VerifyMethods.SECRET_KEY, - title: getVerifyLabel(t, VerifyMethods.SECRET_KEY), - panel: textInput, - }, - { - id: VerifyMethods.PASS_PHRASE, - title: getVerifyLabel(t, VerifyMethods.PASS_PHRASE), - panel: textInput, - }, - { - id: VerifyMethods.FILE, - title: getVerifyLabel(t, VerifyMethods.FILE), - panel: fileInput, - }, - ]; - - return ( - <> -
      - {t('settings.matrix.verificationLabel')} -
      - - {t('general.title.appName')} - {sessionIsVerified ? ( - {t('settings.matrix.statusVerified')} - ) : ( - {t('settings.matrix.statusNotVerified')} - )} -
      -
      - - {sessionIsVerified && } - - {!sessionIsVerified && ( -
      - changeVerifyMethod(index as VerifyMethodsType)} - /> - - - {getErrorMessage(t, verifyMethod)} - - - - {t('settings.matrix.verificationHint')} - - -
      - - -
      - - )} - - ); -}; diff --git a/src/renderer/features/matrix/index.ts b/src/renderer/features/matrix/index.ts deleted file mode 100644 index ecd654a456..0000000000 --- a/src/renderer/features/matrix/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { MatrixLogin } from './MatrixLogin'; -export { matrixAutologinModel, MatrixAutoLogin } from './MatrixAutoLogin'; -export { MatrixVerification } from './MatrixVerification'; diff --git a/src/renderer/features/notifications/NotificationsList/ui/notifies/MultisigCreatedNotification.tsx b/src/renderer/features/notifications/NotificationsList/ui/notifies/MultisigCreatedNotification.tsx index 6747a2a3a9..909375fdf7 100644 --- a/src/renderer/features/notifications/NotificationsList/ui/notifies/MultisigCreatedNotification.tsx +++ b/src/renderer/features/notifications/NotificationsList/ui/notifies/MultisigCreatedNotification.tsx @@ -5,13 +5,14 @@ import type { MultisigCreated } from '@shared/core'; import { WalletType } from '@shared/core'; import { BodyText } from '@shared/ui'; import { useI18n } from '@app/providers'; +import { ChainTitle } from '@entities/chain'; type Props = { notification: MultisigCreated; }; export const MultisigCreatedNotification = ({ - notification: { threshold, signatories, multisigAccountName }, + notification: { threshold, signatories, multisigAccountName, chainId }, }: Props) => { const { t } = useI18n(); @@ -33,6 +34,9 @@ export const MultisigCreatedNotification = ({ signatoriesLength: signatories.length, name: multisigAccountName, }} + components={{ + chain: , + }} />
      diff --git a/src/renderer/features/operations/OperationSubmit/model/submit-model.ts b/src/renderer/features/operations/OperationSubmit/model/submit-model.ts index 1ff8fe470b..36b801747c 100644 --- a/src/renderer/features/operations/OperationSubmit/model/submit-model.ts +++ b/src/renderer/features/operations/OperationSubmit/model/submit-model.ts @@ -14,8 +14,6 @@ import { networkModel } from '@entities/network'; import { buildMultisigTx } from '@entities/multisig'; import { SubmitStep } from '../lib/types'; import { ExtrinsicResultParams, transactionService } from '@entities/transaction'; -import { matrixModel, matrixUtils } from '@entities/matrix'; -import { ISecureMessenger } from '@shared/api/matrix'; type Input = { chain: Chain; @@ -73,34 +71,6 @@ const signAndSubmitExtrinsicsFx = createEffect( }, ); -type ApproveParams = { - matrix: ISecureMessenger; - matrixRoomId: string; - multisigTxs: MultisigTransaction[]; - description: string; - params: ExtrinsicResultParams; -}; -const sendMatrixApproveFx = createEffect( - ({ matrix, matrixRoomId, multisigTxs, description, params }: ApproveParams) => { - multisigTxs.forEach((tx) => { - matrix.sendApprove(matrixRoomId, { - description, - senderAccountId: tx.depositor!, - chainId: tx.chainId, - callHash: tx.callHash, - callData: tx.callData, - extrinsicTimepoint: params.timepoint, - extrinsicHash: params.extrinsicHash, - error: Boolean(params.multisigError), - callTimepoint: { - height: tx.blockCreated || params.timepoint.height, - index: tx.indexCreated || params.timepoint.index, - }, - }); - }); - }, -); - type SaveMultisigParams = { transactions: Transaction[]; multisigTxs: Transaction[]; @@ -171,11 +141,10 @@ sample({ clock: extrinsicSucceeded, source: { submitStore: $submitStore, - loginStatus: matrixModel.$loginStatus, hooks: $hooks, }, - filter: ({ submitStore, loginStatus }) => { - return matrixUtils.isLoggedIn(loginStatus) && Boolean(submitStore?.multisigTxs.length); + filter: ({ submitStore }) => { + return Boolean(submitStore?.multisigTxs.length); }, fn: ({ submitStore, hooks }, params) => ({ params, @@ -188,30 +157,6 @@ sample({ target: saveMultisigTxFx, }); -sample({ - clock: saveMultisigTxFx.done, - source: { - matrix: matrixModel.$matrix, - loginStatus: matrixModel.$loginStatus, - submitStore: $submitStore, - }, - filter: ({ loginStatus, submitStore }) => { - return ( - matrixUtils.isLoggedIn(loginStatus) && - Boolean(submitStore?.multisigTxs.length) && - Boolean((submitStore?.account as MultisigAccount).matrixRoomId) - ); - }, - fn: ({ matrix, submitStore }, { params, result }) => ({ - matrix, - matrixRoomId: (submitStore!.account as MultisigAccount).matrixRoomId!, - multisigTxs: result.transactions, - description: submitStore!.description!, - params: params.params, - }), - target: sendMatrixApproveFx, -}); - sample({ clock: extrinsicSucceeded, fn: () => ({ step: SubmitStep.SUCCESS, message: '' }), diff --git a/src/renderer/features/operations/OperationsValidation/model/payee-validate-model.ts b/src/renderer/features/operations/OperationsValidation/model/payee-validate-model.ts index b2a7478cac..eb5227aa23 100644 --- a/src/renderer/features/operations/OperationsValidation/model/payee-validate-model.ts +++ b/src/renderer/features/operations/OperationsValidation/model/payee-validate-model.ts @@ -23,6 +23,7 @@ type ValidateParams = { const validateFx = createEffect(async ({ id, api, chain, asset, transaction, balances }: ValidateParams) => { const accountId = toAccountId(transaction.address); + const shardBalance = balances.find( (balance) => balance.accountId === accountId && balance.assetId === asset.assetId.toString(), ); diff --git a/src/renderer/pages/Operations/components/ActionSteps/Submit.tsx b/src/renderer/pages/Operations/components/ActionSteps/Submit.tsx index 2d4bb8b080..27b78493f8 100644 --- a/src/renderer/pages/Operations/components/ActionSteps/Submit.tsx +++ b/src/renderer/pages/Operations/components/ActionSteps/Submit.tsx @@ -1,6 +1,5 @@ import { ApiPromise } from '@polkadot/api'; import { useEffect, useState, ComponentProps } from 'react'; -import { useUnit } from 'effector-react'; import { useI18n, useMultisigChainContext } from '@app/providers'; import { useMultisigTx, useMultisigEvent } from '@entities/multisig'; @@ -10,8 +9,6 @@ import { Animation } from '@shared/ui/Animation/Animation'; import type { HexString, Account, MultisigEvent, MultisigTransaction, SigningStatus, Transaction } from '@shared/core'; import { TransactionType, MultisigTxFinalStatus } from '@shared/core'; import { ExtrinsicResultParams, transactionService } from '@entities/transaction'; -import { matrixModel } from '@entities/matrix'; -import { toAccountId } from '@shared/lib/utils'; type ResultProps = Pick, 'title' | 'content' | 'description'>; @@ -23,7 +20,6 @@ type Props = { txPayload: Uint8Array; signature: HexString; rejectReason?: string; - matrixRoomId?: string; isReject?: boolean; onClose: () => void; }; @@ -36,14 +32,11 @@ export const Submit = ({ txPayload, signature, rejectReason, - matrixRoomId, isReject, onClose, }: Props) => { const { t } = useI18n(); - const matrix = useUnit(matrixModel.$matrix); - const { addTask } = useMultisigChainContext(); const { updateMultisigTx } = useMultisigTx({ addTask }); const { addEventWithQueue } = useMultisigEvent({ addTask }); @@ -93,10 +86,6 @@ export const Submit = ({ }; await addEventWithQueue(event); - - if (matrix.userIsLoggedIn && matrixRoomId) { - sendMultisigEvent(updatedTx, typedParams, rejectReason); - } } toggleSuccessMessage(); @@ -111,32 +100,6 @@ export const Submit = ({ }); }; - const sendMultisigEvent = (updatedTx: MultisigTransaction, params: ExtrinsicResultParams, rejectReason?: string) => { - if (!tx || !updatedTx || !matrixRoomId) return; - - const payload = { - senderAccountId: toAccountId(tx.address), - chainId: updatedTx.chainId, - callHash: updatedTx.callHash, - extrinsicTimepoint: params.timepoint, - extrinsicHash: params.extrinsicHash, - error: Boolean(params.multisigError), - description: rejectReason, - callTimepoint: { - height: updatedTx.blockCreated || params.timepoint.height, - index: updatedTx.indexCreated || params.timepoint.index, - }, - }; - - if (tx.type === TransactionType.MULTISIG_CANCEL_AS_MULTI) { - matrix.sendCancel(matrixRoomId, payload).catch(console.warn); - } else if (params.isFinalApprove) { - matrix.sendFinalApprove(matrixRoomId, { ...payload, callOutcome: updatedTx.status }).catch(console.warn); - } else { - matrix.sendApprove(matrixRoomId, payload).catch(console.warn); - } - }; - const getResultProps = (): ResultProps => { if (inProgress) { return { diff --git a/src/renderer/pages/Operations/components/Operation.tsx b/src/renderer/pages/Operations/components/Operation.tsx index eabac846ad..a5ef9d76c9 100644 --- a/src/renderer/pages/Operations/components/Operation.tsx +++ b/src/renderer/pages/Operations/components/Operation.tsx @@ -2,8 +2,7 @@ import { format } from 'date-fns'; import { useI18n } from '@app/providers'; import { FootnoteText, Accordion } from '@shared/ui'; -import { Status } from './Status'; -import { OperationFullInfo } from './OperationFullInfo'; +import OperationFullInfo from './OperationFullInfo'; import { MultisigTransactionDS } from '@shared/api/storage'; import { useMultisigEvent } from '@entities/multisig'; import { ChainTitle, XcmChains } from '@entities/chain'; @@ -12,6 +11,7 @@ import type { MultisigAccount } from '@shared/core'; import { chainsService } from '@shared/api/network'; import { getAssetById } from '@shared/lib/utils'; import { AssetBalance } from '@entities/asset'; +import { Status } from './Status'; type Props = { tx: MultisigTransactionDS; diff --git a/src/renderer/pages/Operations/components/OperationCardDetails.tsx b/src/renderer/pages/Operations/components/OperationCardDetails.tsx index 6a216e967c..e7088402a2 100644 --- a/src/renderer/pages/Operations/components/OperationCardDetails.tsx +++ b/src/renderer/pages/Operations/components/OperationCardDetails.tsx @@ -17,7 +17,6 @@ import { useValidatorsMap, ValidatorsModal } from '@entities/staking'; import { singnatoryUtils } from '@entities/signatory'; import { chainsService } from '@shared/api/network'; import { proxyUtils } from '@entities/proxy'; -import { matrixModel } from '@entities/matrix'; import { getMultisigExtrinsicLink, getDestination, @@ -47,7 +46,6 @@ export const OperationCardDetails = ({ tx, account, extendedChain }: Props) => { const activeWallet = useUnit(walletModel.$activeWallet); const wallets = useUnit(walletModel.$wallets); const chains = useUnit(networkModel.$chains); - const matrix = useUnit(matrixModel.$matrix); const payee = getPayee(tx); const sender = getSender(tx); @@ -312,7 +310,6 @@ export const OperationCardDetails = ({ tx, account, extendedChain }: Props) => { name={depositorSignatory.name} addressFont={AddressStyle} addressPrefix={addressPrefix} - matrixId={matrix.userId} wrapperClassName="-mr-2 min-w-min" type="short" /> diff --git a/src/renderer/pages/Operations/components/OperationFullInfo.tsx b/src/renderer/pages/Operations/components/OperationFullInfo.tsx index 1aefb55c03..eec973a198 100644 --- a/src/renderer/pages/Operations/components/OperationFullInfo.tsx +++ b/src/renderer/pages/Operations/components/OperationFullInfo.tsx @@ -14,18 +14,16 @@ import type { CallData, MultisigAccount } from '@shared/core'; import { OperationSignatories } from './OperationSignatories'; import { useNetworkData } from '@entities/network'; import { walletModel, permissionUtils } from '@entities/wallet'; -import { matrixModel } from '@entities/matrix'; type Props = { tx: MultisigTransactionDS; account?: MultisigAccount; }; -export const OperationFullInfo = ({ tx, account }: Props) => { +const OperationFullInfo = ({ tx, account }: Props) => { const { t } = useI18n(); const { api, chain, connection, extendedChain } = useNetworkData(tx.chainId); - const matrix = useUnit(matrixModel.$matrix); const wallets = useUnit(walletModel.$wallets); const { addTask } = useMultisigChainContext(); @@ -39,19 +37,6 @@ export const OperationFullInfo = ({ tx, account }: Props) => { if (!api || !tx) return; updateCallData(api, tx, callData as CallData); - - if (!account?.matrixRoomId) return; - - matrix.sendUpdate(account?.matrixRoomId, { - senderAccountId: tx.depositor || '0x00', - chainId: tx.chainId, - callHash: tx.callHash, - callData, - callTimepoint: { - index: tx.indexCreated || 0, - height: tx.blockCreated || 0, - }, - }); }; const isRejectAvailable = wallets.some((wallet) => { @@ -99,3 +84,5 @@ export const OperationFullInfo = ({ tx, account }: Props) => {
      ); }; + +export default OperationFullInfo; diff --git a/src/renderer/pages/Operations/components/OperationSignatories.tsx b/src/renderer/pages/Operations/components/OperationSignatories.tsx index e3afcaf3b3..9da81f24a2 100644 --- a/src/renderer/pages/Operations/components/OperationSignatories.tsx +++ b/src/renderer/pages/Operations/components/OperationSignatories.tsx @@ -139,7 +139,6 @@ export const OperationSignatories = ({ tx, connection, account }: Props) => { { api={connection.api} multisigTx={tx} account={signAccount} - matrixRoomId={account.matrixRoomId} txPayload={txPayload} signature={signature} onClose={handleClose} diff --git a/src/renderer/pages/Operations/components/modals/RejectTx.tsx b/src/renderer/pages/Operations/components/modals/RejectTx.tsx index 6a5ba83400..d3ffbdfcef 100644 --- a/src/renderer/pages/Operations/components/modals/RejectTx.tsx +++ b/src/renderer/pages/Operations/components/modals/RejectTx.tsx @@ -235,7 +235,6 @@ const RejectTx = ({ tx, account, connection }: Props) => { api={connection.api} multisigTx={tx} account={signAccount} - matrixRoomId={account.matrixRoomId} txPayload={txPayload} signature={signature} rejectReason={rejectReason} diff --git a/src/renderer/pages/Settings/Matrix/Matrix.tsx b/src/renderer/pages/Settings/Matrix/Matrix.tsx deleted file mode 100644 index 8f0fada380..0000000000 --- a/src/renderer/pages/Settings/Matrix/Matrix.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { useNavigate } from 'react-router-dom'; - -import { Paths } from '@shared/routes'; -import { MatrixAutoLogin, MatrixLogin, MatrixVerification } from '@features/matrix'; - -export const Matrix = () => { - const navigate = useNavigate(); - - const closeModal = () => { - navigate(Paths.SETTINGS); - }; - - return ( - <> - - - - - ); -}; diff --git a/src/renderer/pages/Settings/Overview/Overview.test.tsx b/src/renderer/pages/Settings/Overview/Overview.test.tsx index 75877a7ee1..bd3fb2de05 100644 --- a/src/renderer/pages/Settings/Overview/Overview.test.tsx +++ b/src/renderer/pages/Settings/Overview/Overview.test.tsx @@ -11,7 +11,6 @@ jest.mock('@app/providers', () => ({ jest.mock('./components', () => ({ GeneralActions: () => generalActions, SocialLinks: () => socialLinks, - MatrixAction: () => matrixAction, Version: () => version, })); @@ -21,13 +20,11 @@ describe('pages/Settings/Overview', () => { const title = screen.getByText('settings.title'); const generalActions = screen.getByText('generalActions'); - const matrixAction = screen.getByText('matrixAction'); const socialLinks = screen.getByText('socialLinks'); const version = screen.getByText('version'); expect(title).toBeInTheDocument(); expect(generalActions).toBeInTheDocument(); expect(socialLinks).toBeInTheDocument(); - expect(matrixAction).toBeInTheDocument(); expect(version).toBeInTheDocument(); }); }); diff --git a/src/renderer/pages/Settings/Overview/Overview.tsx b/src/renderer/pages/Settings/Overview/Overview.tsx index d1f6ed83f5..b915bb634f 100644 --- a/src/renderer/pages/Settings/Overview/Overview.tsx +++ b/src/renderer/pages/Settings/Overview/Overview.tsx @@ -2,7 +2,7 @@ import { Outlet } from 'react-router-dom'; import { useI18n } from '@app/providers'; import { Header } from '@shared/ui'; -import { GeneralActions, SocialLinks, Version, MatrixAction } from './components'; +import { GeneralActions, SocialLinks, Version } from './components'; export const Overview = () => { const { t } = useI18n(); @@ -15,7 +15,6 @@ export const Overview = () => {
      -
      diff --git a/src/renderer/pages/Settings/Overview/components/MatrixAction/MatrixAction.test.tsx b/src/renderer/pages/Settings/Overview/components/MatrixAction/MatrixAction.test.tsx deleted file mode 100644 index 06dea0167d..0000000000 --- a/src/renderer/pages/Settings/Overview/components/MatrixAction/MatrixAction.test.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import { MemoryRouter } from 'react-router-dom'; -import { Provider } from 'effector-react'; -import { fork } from 'effector'; - -import { MatrixAction } from './MatrixAction'; -import { Paths } from '@shared/routes'; -import { matrixModel, LoginStatus } from '@entities/matrix'; - -jest.mock('@app/providers', () => ({ - useI18n: jest.fn().mockReturnValue({ - t: (key: string) => key, - }), -})); - -describe('pages/Settings/Overview/MatrixAction', () => { - test('should render label and link to SMP', () => { - const scope = fork({ - values: new Map() - .set(matrixModel.$matrix, { userId: '@some_id:matrix.com' }) - .set(matrixModel.$loginStatus, LoginStatus.LOGGED_IN), - }); - - render( - - - , - { wrapper: MemoryRouter }, - ); - - const label = screen.getByText('settings.overview.smpLabel'); - const matrixId = screen.getByText('@some_id:matrix.com'); - const link = screen.getByRole('link'); - - expect(label).toBeInTheDocument(); - expect(matrixId).toBeInTheDocument(); - expect(link).toBeInTheDocument(); - expect(link).toHaveAttribute('href', Paths.MATRIX); - }); -}); diff --git a/src/renderer/pages/Settings/Overview/components/MatrixAction/MatrixAction.tsx b/src/renderer/pages/Settings/Overview/components/MatrixAction/MatrixAction.tsx deleted file mode 100644 index 6f39e24b7b..0000000000 --- a/src/renderer/pages/Settings/Overview/components/MatrixAction/MatrixAction.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { Link } from 'react-router-dom'; -import { useUnit } from 'effector-react'; - -import { Icon, FootnoteText, Plate, BodyText, StatusLabel, HelpText } from '@shared/ui'; -import { useI18n } from '@app/providers'; -import { Paths } from '@shared/routes'; -import { cnTw } from '@shared/lib/utils'; -import { matrixModel, matrixUtils } from '@entities/matrix'; - -export const MatrixAction = () => { - const { t } = useI18n(); - - const matrix = useUnit(matrixModel.$matrix); - const loginStatus = useUnit(matrixModel.$loginStatus); - - return ( -
      - {t('settings.overview.smpLabel')} - - - - - {t('settings.overview.matrixLabel')} - {t('settings.overview.matrixDescription')} - - {matrixUtils.isLoggedIn(loginStatus) ? ( - - ) : ( - - )} - - -
      - ); -}; diff --git a/src/renderer/pages/Settings/Overview/components/index.ts b/src/renderer/pages/Settings/Overview/components/index.ts index 792e67c2cc..eecd821dc3 100644 --- a/src/renderer/pages/Settings/Overview/components/index.ts +++ b/src/renderer/pages/Settings/Overview/components/index.ts @@ -1,4 +1,3 @@ export { GeneralActions } from './GeneralActions/GeneralActions'; export { SocialLinks } from './SocialLinks/SocialLinks'; export { Version } from './Version/Version'; -export { MatrixAction } from './MatrixAction/MatrixAction'; diff --git a/src/renderer/pages/Settings/index.ts b/src/renderer/pages/Settings/index.ts index 0c509595c1..c095e8cefa 100644 --- a/src/renderer/pages/Settings/index.ts +++ b/src/renderer/pages/Settings/index.ts @@ -1,5 +1,4 @@ export { Overview } from './Overview/Overview'; export { Networks } from './Networks'; export { Currency } from './Currency/Currency'; -export { Matrix } from './Matrix/Matrix'; export { ReferendumData } from './ReferendumData/ui/ReferendumData'; diff --git a/src/renderer/pages/index.tsx b/src/renderer/pages/index.tsx index ddcad7b7c3..18def11763 100644 --- a/src/renderer/pages/index.tsx +++ b/src/renderer/pages/index.tsx @@ -7,7 +7,7 @@ import { Assets, ReceiveAsset, SendAsset } from './Assets'; import { Operations } from './Operations/Operations'; import { Notifications } from './Notifications/Notifications'; import { Contacts, CreateContact, EditContact } from './AddressBook'; -import { Overview as Settings, Currency, Networks, Matrix, ReferendumData } from './Settings'; +import { Overview as Settings, Currency, Networks, ReferendumData } from './Settings'; import { Governance } from './Governance'; import { Staking } from './Staking'; import { Basket } from './Basket'; @@ -46,7 +46,6 @@ export const ROUTES_CONFIG: RouteObject[] = [ element: , children: [ { path: Paths.NETWORK, element: }, - { path: Paths.MATRIX, element: }, { path: Paths.CURRENCY, element: }, { path: Paths.REFERENDUM_DATA, element: }, ], diff --git a/src/renderer/processes/multisigs/model/multisigs-model.ts b/src/renderer/processes/multisigs/model/multisigs-model.ts index 4c9fa994f2..0f91956776 100644 --- a/src/renderer/processes/multisigs/model/multisigs-model.ts +++ b/src/renderer/processes/multisigs/model/multisigs-model.ts @@ -86,8 +86,6 @@ const saveMultisigFx = createEffect((multisigsToSave: SaveMultisigParams[]) => { chainId: multisig.accounts[0].chainId, signatories, threshold: multisig.accounts[0].threshold, - originatorAccountId: '' as string, - smpRoomId: '', } as NoID, ]); }); diff --git a/src/renderer/shared/api/matrix/__tests__/credentialStorage.test.ts b/src/renderer/shared/api/matrix/__tests__/credentialStorage.test.ts deleted file mode 100644 index a5234dadc2..0000000000 --- a/src/renderer/shared/api/matrix/__tests__/credentialStorage.test.ts +++ /dev/null @@ -1,47 +0,0 @@ -import CredentialStorage from '../service/credentialStorage'; -import { ICredentialStorage } from '../lib/types'; - -describe('service/matrix/credentialStorage', () => { - let storage: ICredentialStorage; - const credentials = { - userId: '1', - username: 'name', - accessToken: 'token', - deviceId: '0x123', - isLastLogin: false, - baseUrl: 'https://test.com', - }; - - beforeEach(() => { - storage = new CredentialStorage(); - }); - - afterEach(() => { - localStorage.clear(); - }); - - test('should init with default values', () => { - const creds = storage.getCredentials('userId', 'value'); - expect(creds).toBeUndefined(); - }); - - test('should save new item', () => { - storage.saveCredentials(credentials); - const item = storage.getCredentials('userId', '1'); - expect(item).toEqual(credentials); - }); - - test('should update existing item', () => { - storage.saveCredentials(credentials); - storage.updateCredentials('1', { username: 'new name' }); - const item = storage.getCredentials('userId', '1'); - expect(item?.username).toEqual('new name'); - }); - - test('should clear the storage', () => { - storage.saveCredentials(credentials); - storage.clear(); - - expect(localStorage.getItem('matrix_credentials')).toBeNull(); - }); -}); diff --git a/src/renderer/shared/api/matrix/__tests__/secretStorage.test.ts b/src/renderer/shared/api/matrix/__tests__/secretStorage.test.ts deleted file mode 100644 index 2c6899f535..0000000000 --- a/src/renderer/shared/api/matrix/__tests__/secretStorage.test.ts +++ /dev/null @@ -1,48 +0,0 @@ -import SecretStorage from '../service/secretStorage'; -import { ISecretStorage } from '../lib/types'; - -describe('service/matrix/secretStorage', () => { - let storage: ISecretStorage; - const privateKey = new Uint8Array([1, 2, 3]); - - beforeEach(() => { - storage = new SecretStorage(); - }); - - test('should store private key', () => { - let hasKey = storage.hasPrivateKey('test'); - expect(hasKey).toEqual(false); - - storage.storePrivateKey('test', privateKey); - - hasKey = storage.hasPrivateKey('test'); - expect(hasKey).toEqual(true); - }); - - test('should delete private key', () => { - storage.storePrivateKey('test', privateKey); - - let hasKey = storage.hasPrivateKey('test'); - expect(hasKey).toEqual(true); - - storage.deletePrivateKey('test'); - hasKey = storage.hasPrivateKey('test'); - expect(hasKey).toEqual(false); - }); - - test('should clear storage', () => { - storage.storePrivateKey('test_1', privateKey); - storage.storePrivateKey('test_2', privateKey); - - let hasKey1 = storage.hasPrivateKey('test_1'); - let hasKey2 = storage.hasPrivateKey('test_2'); - expect(hasKey1).toEqual(true); - expect(hasKey2).toEqual(true); - - storage.clearSecretStorageKeys(); - hasKey1 = storage.hasPrivateKey('test_1'); - hasKey2 = storage.hasPrivateKey('test_2'); - expect(hasKey1).toEqual(false); - expect(hasKey2).toEqual(false); - }); -}); diff --git a/src/renderer/shared/api/matrix/index.ts b/src/renderer/shared/api/matrix/index.ts deleted file mode 100644 index 2132fe6d5b..0000000000 --- a/src/renderer/shared/api/matrix/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './service/matrix'; -export * from './lib/types'; -export * from './lib/constants'; -export * from './lib/utils'; diff --git a/src/renderer/shared/api/matrix/lib/constants.ts b/src/renderer/shared/api/matrix/lib/constants.ts deleted file mode 100644 index 8459ba19a4..0000000000 --- a/src/renderer/shared/api/matrix/lib/constants.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const BASE_MATRIX_URL = 'https://matrix.org'; - -export const ROOM_CRYPTO_CONFIG = { algorithm: 'm.megolm.v1.aes-sha2' }; - -export const MATRIX_SHORT_USERNAME_REGEX = /^[a-z\d=_\-./]+$/i; - -export const MATRIX_FULL_USERNAME_REGEX = - /^@[\w\-_./=]*:(?:[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?\.)+[a-z\d][a-z\d-]{0,61}[a-z\d]$/i; - -export const KEY_FILE_MAX_SIZE = 128; - -export const WELL_KNOWN_SERVERS = [ - { domain: 'matrix.org', url: 'https://matrix.org' }, - { domain: 'matrix.parity.io', url: 'https://matrix.parity.io' }, - { domain: 'matrix.web3.foundation', url: 'https://matrix.web3.foundation' }, -]; - -export const MATRIX_HOME_SERVER = 'matrix_hs'; diff --git a/src/renderer/shared/api/matrix/lib/errors.ts b/src/renderer/shared/api/matrix/lib/errors.ts deleted file mode 100644 index a6b1d91276..0000000000 --- a/src/renderer/shared/api/matrix/lib/errors.ts +++ /dev/null @@ -1,158 +0,0 @@ -import { ErrorObject, MatrixError } from './types'; - -const MATRIX_ERRORS: Record = { - [MatrixError.OLM_FAILED]: { - code: MatrixError.OLM_FAILED, - message: 'Olm failed', - }, - [MatrixError.ENCRYPTION_STARTED]: { - code: MatrixError.ENCRYPTION_STARTED, - message: 'Encryption has already been initialized', - }, - [MatrixError.ENCRYPTION_NOT_STARTED]: { - code: MatrixError.ENCRYPTION_NOT_STARTED, - message: 'Encryption has not been initialized', - }, - [MatrixError.IS_LOGGED_IN]: { - code: MatrixError.IS_LOGGED_IN, - message: 'Client is already logged in', - }, - [MatrixError.CREATE_MATRIX_CLIENT]: { - code: MatrixError.CREATE_MATRIX_CLIENT, - message: 'Error while creating matrix client', - }, - [MatrixError.INIT_WITH_CREDENTIALS]: { - code: MatrixError.INIT_WITH_CREDENTIALS, - message: 'Failed to init client with credentials', - }, - [MatrixError.INIT_WITH_SSO]: { - code: MatrixError.INIT_WITH_SSO, - message: 'Failed to init client with sso', - }, - [MatrixError.NOT_LOGGED_IN]: { - code: MatrixError.NOT_LOGGED_IN, - message: 'Client is not logged in', - }, - [MatrixError.WRONG_HOMESERVER]: { - code: MatrixError.WRONG_HOMESERVER, - message: 'Wrong homeserver URL', - }, - [MatrixError.REGISTRATION]: { - code: MatrixError.REGISTRATION, - message: 'Registration failed', - }, - [MatrixError.KEY_VERIFICATION]: { - code: MatrixError.KEY_VERIFICATION, - message: 'Verification with security key failed', - }, - [MatrixError.FILE_VERIFICATION]: { - code: MatrixError.FILE_VERIFICATION, - message: 'Verification with security file failed', - }, - [MatrixError.PHRASE_VERIFICATION]: { - code: MatrixError.PHRASE_VERIFICATION, - message: 'Verification with security phrase failed', - }, - [MatrixError.LOGOUT]: { - code: MatrixError.LOGOUT, - message: 'Logout failed', - }, - [MatrixError.LOGIN_CREDS]: { - code: MatrixError.LOGIN_CREDS, - message: 'Login with credentials failed', - }, - [MatrixError.LOGIN_FLOWS]: { - code: MatrixError.LOGIN_FLOWS, - message: 'Failed getting available login methods', - }, - [MatrixError.LOGIN_CACHE]: { - code: MatrixError.LOGIN_CACHE, - message: 'Login from cache failed', - }, - [MatrixError.NO_CREDS_IN_DB]: { - code: MatrixError.NO_CREDS_IN_DB, - message: 'No credentials in DataBase', - }, - [MatrixError.CREATE_ROOM]: { - code: MatrixError.CREATE_ROOM, - message: 'Room creation failed', - }, - [MatrixError.LEAVE_ROOM]: { - code: MatrixError.LEAVE_ROOM, - message: 'Failed to leave room', - }, - [MatrixError.JOIN_ROOM]: { - code: MatrixError.JOIN_ROOM, - message: 'Failed to join room', - }, - [MatrixError.INVITE_IN_ROOM]: { - code: MatrixError.INVITE_IN_ROOM, - message: 'Failed to invite in room', - }, - [MatrixError.JOINED_ROOMS]: { - code: MatrixError.JOINED_ROOMS, - message: 'Failed to load joined rooms', - }, - [MatrixError.MESSAGE]: { - code: MatrixError.MESSAGE, - message: 'Message not sent', - }, - [MatrixError.MARK_AS_READ]: { - code: MatrixError.MARK_AS_READ, - message: 'Mark as read failed', - }, - [MatrixError.MST_UPDATE]: { - code: MatrixError.MST_UPDATE, - message: 'Mst update failed', - }, - [MatrixError.MST_APPROVE]: { - code: MatrixError.MST_APPROVE, - message: 'Mst approve failed', - }, - [MatrixError.MST_FINAL_APPROVE]: { - code: MatrixError.MST_FINAL_APPROVE, - message: 'Mst final approve failed', - }, - [MatrixError.MST_CANCEL]: { - code: MatrixError.MST_CANCEL, - message: 'Mst cancel failder', - }, - [MatrixError.ROOM_ENCRYPTION]: { - code: MatrixError.ROOM_ENCRYPTION, - message: 'Failed activating room encryption', - }, - [MatrixError.ROOM_TOPIC]: { - code: MatrixError.ROOM_TOPIC, - message: "Failed setting room's topic", - }, - [MatrixError.OUTSIDE_ROOM]: { - code: MatrixError.OUTSIDE_ROOM, - message: 'Matrix client is outside of room', - }, - [MatrixError.INVITE_USERS]: { - code: MatrixError.INVITE_USERS, - message: 'Could not invite users', - }, - [MatrixError.MEMBERS_VERIFICATION]: { - code: MatrixError.MEMBERS_VERIFICATION, - message: 'Could not verify members devices in room', - }, - [MatrixError.VERIFY_FILE_MAX_SIZE]: { - code: MatrixError.VERIFY_FILE_MAX_SIZE, - message: 'File exceeded max size limit', - }, - [MatrixError.READ_VERIFY_FILE]: { - code: MatrixError.READ_VERIFY_FILE, - message: 'Failed to read verification file', - }, - [MatrixError.VERIFY_FILE_BAD_CONTENT]: { - code: MatrixError.VERIFY_FILE_BAD_CONTENT, - message: 'Verification file has bad content', - }, - [MatrixError.TIMELINE_PAGINATION]: { - code: MatrixError.TIMELINE_PAGINATION, - message: 'Paginating timeline failed', - }, -}; - -export default MATRIX_ERRORS; diff --git a/src/renderer/shared/api/matrix/lib/types.ts b/src/renderer/shared/api/matrix/lib/types.ts deleted file mode 100644 index 4e9d961af8..0000000000 --- a/src/renderer/shared/api/matrix/lib/types.ts +++ /dev/null @@ -1,265 +0,0 @@ -import { EventType, MatrixEvent, Room } from 'matrix-js-sdk'; - -import type { - HexString, - AccountId, - Timepoint, - MultisigThreshold, - CallHash, - CallData, - ChainId, - CryptoType, - MultisigTxStatus, -} from '@shared/core'; - -// ===================================================== -// ============ ISecureMessenger interface ============= -// ===================================================== - -export interface ISecureMessenger { - // Init - setHomeserver: (domain: string) => Promise; - loginFlows: () => Promise; - getSsoLoginUrl: (baseUrl: string, type: string, id: string) => string; - loginWithSso: (token: string) => Promise; - loginWithCreds: (login: string, password: string) => Promise; - loginFromCache: () => Promise; - logout: () => Promise; - // registration: (login: string, password: string) => Promise; - stopClient: () => void; - - // Actions - createRoom: (params: RoomParams) => Promise; - joinRoom: (roomId: string) => Promise; - leaveRoom: (roomId: string) => Promise; - invite: (roomId: string, signatoryId: string) => Promise; - joinedRooms: (accountId?: string) => Room[]; - sendMessage: (roomId: string, message: string) => Promise; - markAsRead: (readEventId: string, events: MatrixEvent[]) => Promise; - setEventCallbacks: (callbacks: Callbacks) => void; - syncSpektrTimeline: () => Promise; - - // Verification - verifyWithKey: (securityKey: string) => Promise; - verifyWithFile: (securityFile: File) => Promise; - verifyWithPhrase: (securityPhrase: string) => Promise; - - // Multisig operations - sendUpdate: (roomId: string, params: UpdatePayload) => Promise; - sendApprove: (roomId: string, params: ApprovePayload) => Promise; - sendFinalApprove: (roomId: string, params: FinalApprovePayload) => Promise; - sendCancel: (roomId: string, params: CancelPayload) => Promise; - - // Multisig event checkers - isUpdateEvent: (type: SpektrMultisigEvent, content?: BaseMultisigPayload) => content is UpdatePayload; - isApproveEvent: (type: SpektrMultisigEvent, content?: BaseMultisigPayload) => content is ApprovePayload; - isFinalApproveEvent: (type: SpektrMultisigEvent, content?: BaseMultisigPayload) => content is FinalApprovePayload; - isCancelEvent: (type: SpektrMultisigEvent, content?: BaseMultisigPayload) => content is CancelPayload; - - // Properties - userId: string | undefined; - sessionIsVerified: boolean; - userIsLoggedIn: boolean; - sessionKey: string | undefined; -} - -// ===================================================== -// =========== ICredentialStorage interface ============ -// ===================================================== - -export type Credential = { - userId: string; - username: string; - deviceId: string; - accessToken: string; - baseUrl: string; - isLastLogin: boolean; -}; - -export interface ICredentialStorage { - // Actions - getCredentials: (key: keyof Credential, value: any) => Credential | undefined; - saveCredentials: (credential: Credential) => void; - updateCredentials: (userId: string, credential: Partial) => void; - clear: () => void; -} - -// ===================================================== -// ============= ISecretStorage interface ============== -// ===================================================== - -export interface ISecretStorage { - // Actions - storePrivateKey: (keyId: string, privateKey: Uint8Array | unknown) => void; - hasPrivateKey: (keyId: string) => boolean; - getPrivateKey: (keyId: string) => Uint8Array | undefined; - deletePrivateKey: (keyId: string) => void; - clearSecretStorageKeys: () => void; - - // Properties - cryptoCallbacks: { - getSecretStorageKey: (value: { keys: Record }) => Promise<[string, Uint8Array] | null>; - cacheSecretStorageKey: (keyId: string, keyInfo: any, privateKey: Uint8Array) => void; - }; -} - -// ===================================================== -// ======================= General ===================== -// ===================================================== - -export const enum Membership { - INVITE = 'invite', - JOIN = 'join', - LEAVE = 'leave', -} - -export type RoomParams = { - accountName: string; - accountId: AccountId; - creatorAccountId: AccountId; - threshold: MultisigThreshold; - cryptoType: CryptoType; - chainId?: ChainId; - signatories: { - accountId: AccountId; - matrixId?: string; - }[]; -}; - -export type SpektrExtras = { - mstAccount: { - accountName: string; - threshold: MultisigThreshold; - signatories: AccountId[]; - accountId: AccountId; - creatorAccountId: AccountId; - cryptoType: CryptoType; - chainId?: ChainId; - }; -}; - -export type LoginFlows = { - token: boolean; - password: boolean; - sso: { - id: string; - name: string; - brand: string; - }[]; -}; - -// ===================================================== -// ============== MST Events / Callbacks =============== -// ===================================================== - -export const enum SpektrMultisigEvent { - UPDATE = 'io.novafoundation.spektr.mst_updated', - APPROVE = 'io.novafoundation.spektr.mst_approved', - FINAL_APPROVE = 'io.novafoundation.spektr.mst_executed', - CANCEL = 'io.novafoundation.spektr.mst_cancelled', -} - -export interface BaseMultisigPayload { - chainId: ChainId; - callHash: CallHash; - callData?: CallData; - senderAccountId: AccountId; - description?: string; - callTimepoint: Timepoint; -} - -export interface ApprovePayload extends BaseMultisigPayload { - extrinsicHash?: HexString; - extrinsicTimepoint: Timepoint; - error: boolean; -} - -export interface FinalApprovePayload extends ApprovePayload { - callOutcome: MultisigTxStatus; -} - -export interface CancelPayload extends ApprovePayload {} - -export interface UpdatePayload extends BaseMultisigPayload {} - -type MatrixEventPayload = { - eventId: string; - roomId: string; - sender: string; - client: string; - roomName?: string; - date: Date; -}; - -export type InvitePayload = MatrixEventPayload & { - content: SpektrExtras; - type: EventType.RoomMember; -}; - -export type MultisigPayload = MatrixEventPayload & { - content: ApprovePayload | FinalApprovePayload | CancelPayload | UpdatePayload; - type: SpektrMultisigEvent; -}; - -type GeneralCallbacks = { - onSyncEnd: () => void; - onInvite: (data: InvitePayload) => void; - // onMessage: (message: string) => void; - onLogout: () => void; -}; - -export type MultisigCallbacks = { - onMultisigEvent: (payload: MultisigPayload, extras: SpektrExtras | undefined) => Promise; -}; - -export type Callbacks = GeneralCallbacks & MultisigCallbacks; - -// ===================================================== -// ===================== Errors ======================== -// ===================================================== - -export const enum MatrixError { - ENCRYPTION_STARTED, - ENCRYPTION_NOT_STARTED, - IS_LOGGED_IN, - NOT_LOGGED_IN, - OLM_FAILED, - WRONG_HOMESERVER, - REGISTRATION, - KEY_VERIFICATION, - FILE_VERIFICATION, - PHRASE_VERIFICATION, - LOGOUT, - LOGIN_CREDS, - LOGIN_FLOWS, - LOGIN_CACHE, - INIT_WITH_CREDENTIALS, - INIT_WITH_SSO, - NO_CREDS_IN_DB, - CREATE_ROOM, - LEAVE_ROOM, - JOIN_ROOM, - INVITE_IN_ROOM, - JOINED_ROOMS, - MESSAGE, - MARK_AS_READ, - MST_UPDATE, - MST_APPROVE, - MST_FINAL_APPROVE, - MST_CANCEL, - ROOM_ENCRYPTION, - ROOM_TOPIC, - OUTSIDE_ROOM, - INVITE_USERS, - MEMBERS_VERIFICATION, - CREATE_MATRIX_CLIENT, - VERIFY_FILE_MAX_SIZE, - READ_VERIFY_FILE, - VERIFY_FILE_BAD_CONTENT, - TIMELINE_PAGINATION, -} - -export type ErrorObject = { - code: MatrixError; - message: string; -}; diff --git a/src/renderer/shared/api/matrix/lib/utils.ts b/src/renderer/shared/api/matrix/lib/utils.ts deleted file mode 100644 index 3534bb6cde..0000000000 --- a/src/renderer/shared/api/matrix/lib/utils.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { MATRIX_FULL_USERNAME_REGEX, MATRIX_SHORT_USERNAME_REGEX } from './constants'; - -/** - * Validate full username with server prefix - * Example: @my_name:matrix.org - * @param value user name value - * @return {Boolean} - */ -export const validateFullUserName = (value: string): boolean => { - return MATRIX_FULL_USERNAME_REGEX.test(value); -}; - -/** - * Validate short username without server prefix - * Example: my_name not @my_name:matrix.org - * @param value user name value - * @return {Boolean} - */ -export const validateShortUserName = (value: string): boolean => { - return MATRIX_SHORT_USERNAME_REGEX.test(value); -}; diff --git a/src/renderer/shared/api/matrix/service/credentialStorage.ts b/src/renderer/shared/api/matrix/service/credentialStorage.ts deleted file mode 100644 index 69760a08fa..0000000000 --- a/src/renderer/shared/api/matrix/service/credentialStorage.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { ICredentialStorage, Credential } from '../lib/types'; - -class CredentialStorage implements ICredentialStorage { - private credsKey = 'matrix_credentials'; - - constructor() { - const credStorage = this.getCredentialsStorage(); - - if (!credStorage) { - localStorage.setItem(this.credsKey, JSON.stringify([])); - } - } - - /** - * Add new credential to the storage - * @param credential value of credentials - */ - public saveCredentials(credential: Credential): void { - const storage = this.getCredentialsStorage(); - - storage.push(credential); - localStorage.setItem(this.credsKey, JSON.stringify(storage)); - } - - /** - * Get credentials from the storage - * @param key key to use in search - * @param value search value - * @return {Object | undefined} - */ - public getCredentials(key: keyof Credential, value: any): Credential | undefined { - const storage = this.getCredentialsStorage(); - - return storage.find((item) => item[key] === value); - } - - /** - * Update storage item - * @param userId key to use in search - * @param credentials credentials data - */ - public updateCredentials(userId: string, credentials: Partial): void { - const storage = this.getCredentialsStorage(); - - const index = storage.findIndex((item) => item.userId === userId); - if (index === -1) { - console.warn('🔶 Matrix storage item not found - ', userId); - - return; - } - - storage[index] = { ...storage[index], ...credentials }; - localStorage.setItem(this.credsKey, JSON.stringify(storage)); - } - - /** - * Clear matrix storage - */ - public clear() { - localStorage.removeItem(this.credsKey); - } - - /** - * Get credentials storage - * @return {Array} - */ - private getCredentialsStorage(): Credential[] { - const storage = localStorage.getItem(this.credsKey); - - try { - return storage ? JSON.parse(storage) : []; - } catch (error) { - console.error('🔶 Matrix credentials storage error - ', error); - - return []; - } - } -} - -export default CredentialStorage; diff --git a/src/renderer/shared/api/matrix/service/matrix.ts b/src/renderer/shared/api/matrix/service/matrix.ts deleted file mode 100644 index 4a0496393c..0000000000 --- a/src/renderer/shared/api/matrix/service/matrix.ts +++ /dev/null @@ -1,1072 +0,0 @@ -import Olm from '@matrix-org/olm'; -import { - AuthType, - AutoDiscovery, - ClientEvent, - createClient, - Direction, - EventTimeline, - EventType, - IndexedDBCryptoStore, - IndexedDBStore, - MatrixClient, - MatrixEvent, - MatrixEventEvent, - Preset, - Room, - RoomMemberEvent, - Visibility, -} from 'matrix-js-sdk'; -import { deriveKey } from 'matrix-js-sdk/lib/crypto/key_passphrase'; -import { SyncState } from 'matrix-js-sdk/lib/sync'; -import { logger } from 'matrix-js-sdk/lib/logger'; -import type { ISecretStorageKeyInfo } from 'matrix-js-sdk/lib/crypto/api'; -import type { IStore } from 'matrix-js-sdk/lib/store'; -import noop from 'lodash/noop'; - -import { - BASE_MATRIX_URL, - KEY_FILE_MAX_SIZE, - ROOM_CRYPTO_CONFIG, - WELL_KNOWN_SERVERS, - MATRIX_HOME_SERVER, -} from '../lib/constants'; -import MATRIX_ERRORS from '../lib/errors'; -import CredentialStorage from './credentialStorage'; -import SecretStorage from './secretStorage'; -import { nonNullable } from '@shared/lib/utils'; -import { - ApprovePayload, - BaseMultisigPayload, - Callbacks, - CancelPayload, - Credential, - ErrorObject, - FinalApprovePayload, - ICredentialStorage, - InvitePayload, - ISecretStorage, - ISecureMessenger, - LoginFlows, - MatrixError, - Membership, - MultisigPayload, - RoomParams, - SpektrExtras, - SpektrMultisigEvent, - UpdatePayload, -} from '../lib/types'; - -global.Olm = Olm; -logger.disableAll(); - -export class Matrix implements ISecureMessenger { - private matrixClient: MatrixClient; - private eventCallbacks: Callbacks; - private credentialStorage: ICredentialStorage; - private secretStorage: ISecretStorage; - - constructor() { - this.eventCallbacks = { - onSyncEnd: noop, - onInvite: noop, - onLogout: noop, - onMultisigEvent: () => Promise.resolve(), - }; - this.credentialStorage = new CredentialStorage(); - this.secretStorage = new SecretStorage(); - this.matrixClient = createClient({ baseUrl: BASE_MATRIX_URL }); - } - - // ===================================================== - // ================= Public methods ==================== - // ===================================================== - - /** - * Set homeserver with new base url - * @param domain homeserver domain - */ - async setHomeserver(domain: string): Promise { - const wellKnown = WELL_KNOWN_SERVERS.find((server) => server.domain === domain); - - if (wellKnown) { - try { - const config = { 'm.homeserver': { base_url: wellKnown.url } }; - await AutoDiscovery.fromDiscoveryConfig(config); - this.createTempClient(wellKnown.url); - localStorage.setItem(MATRIX_HOME_SERVER, wellKnown.url); - - return; - } catch (error) { - throw this.createError(MatrixError.WRONG_HOMESERVER, error); - } - } - - let discoveryResult; - try { - discoveryResult = await AutoDiscovery.findClientConfig(domain); - } catch (error) { - throw this.createError(MatrixError.WRONG_HOMESERVER, error); - } - - if (discoveryResult['m.homeserver']?.error || !discoveryResult['m.homeserver']?.base_url) { - throw this.createError(MatrixError.WRONG_HOMESERVER); - } - - this.createTempClient(discoveryResult['m.homeserver'].base_url); - localStorage.setItem(MATRIX_HOME_SERVER, discoveryResult['m.homeserver'].base_url); - } - - getSsoLoginUrl(baseUrl: string, type: string, id: string): string { - return this.matrixClient.getSsoLoginUrl(baseUrl, type, id); - } - - /** - * Get available login flows - */ - async loginFlows(): Promise { - try { - const { flows } = await this.matrixClient.loginFlows(); - - return flows.reduce( - (acc, flow) => { - if (flow.type === 'm.login.token') acc.token = true; - if (flow.type === 'm.login.password') acc.password = true; - if (flow.type === 'm.login.sso' && 'identity_providers' in flow) { - acc.sso = (flow.identity_providers || []) - .filter(({ brand }) => brand === 'github' || brand === 'google') - .map(({ id, name, brand }) => ({ id, name, brand: brand || name.toLowerCase() })); - } - - return acc; - }, - { token: false, password: false, sso: [] }, - ); - } catch (error) { - throw this.createError(MatrixError.LOGIN_FLOWS, error); - } - } - - /** - * Login user to Matrix with credentials - * @param login login value - * @param password password value - * @return {Promise} - */ - async loginWithCreds(login: string, password: string): Promise { - try { - await this.initClientWithCreds(login, password); - await this.matrixClient.initCrypto(); - await this.matrixClient.startClient({ lazyLoadMembers: true }); - this.matrixClient.setGlobalErrorOnUnknownDevices(false); - this.subscribeToEvents(); - } catch (error) { - throw this.createError(MatrixError.LOGIN_CREDS, error); - } - } - - /** - * Login user to Matrix with cached credentials - * @return {Promise} - */ - async loginFromCache(): Promise { - try { - await this.initClientFromCache(); - await this.matrixClient.initCrypto(); - await this.matrixClient.startClient({ lazyLoadMembers: true }); - this.matrixClient.setGlobalErrorOnUnknownDevices(false); - this.subscribeToEvents(); - } catch (error) { - throw this.createError(MatrixError.LOGIN_CACHE, error); - } - } - - /** - * Login user to Matrix with SSO token - * @param token sso token - * @return {Promise} - */ - async loginWithSso(token: string): Promise { - try { - await this.initClientWithSso(token); - await this.matrixClient.initCrypto(); - await this.matrixClient.startClient({ lazyLoadMembers: true }); - this.matrixClient.setGlobalErrorOnUnknownDevices(false); - this.subscribeToEvents(); - } catch (error) { - throw this.createError(MatrixError.LOGIN_CREDS, error); - } - } - - /** - * Register user in Matrix - * @param login login value - * @param password password value - * @return {Promise} - */ - // async registration(login: string, password: string): Promise { - // try { - // const auth = { type: 'm.login.spektr_matrix_protocol' }; - // const data = await this.matrixClient.register(login, password, null, auth, { - // email: false, - // }); - // console.log(data); - // } catch (error) { - // throw this.createError(Errors.REGISTRATION, error); - // } - // } - - /** - * Verify user with Cross signing security key - * @param securityKey secret user's key - * @return {Promise} - */ - async verifyWithKey(securityKey: string): Promise { - try { - const mx = this.matrixClient; - const defaultStorageKey = mx.getAccountData('m.secret_storage.default_key')?.getContent().key; - const storageKeyInfo = mx - .getAccountData(`m.secret_storage.key.${defaultStorageKey}`) - ?.getContent(); - if (!storageKeyInfo) return false; - - const privateKey = mx.keyBackupKeyFromRecoveryKey(securityKey); - const isCorrect = await mx.checkSecretStorageKey(privateKey, storageKeyInfo); - if (isCorrect) { - this.secretStorage.storePrivateKey(defaultStorageKey, privateKey); - await mx.checkOwnCrossSigningTrust(); - } - - return isCorrect; - } catch (error) { - throw this.createError(MatrixError.KEY_VERIFICATION, error); - } - } - - /** - * Verify user with Cross signing security file - * @param securityFile secret user's file - * @return {Promise} - */ - async verifyWithFile(securityFile: File): Promise { - if (securityFile.size > KEY_FILE_MAX_SIZE) { - throw this.createError(MatrixError.VERIFY_FILE_MAX_SIZE); - } - - let securityKey = ''; - try { - const fileKey = await securityFile.text(); - securityKey = fileKey.replace(/(\r\n|\n|\r)/gm, ' '); - } catch (error) { - throw this.createError(MatrixError.VERIFY_FILE_MAX_SIZE, error); - } - - // test it's within the base58 alphabet - if (!/^[1-9A-Za-z\s]+$/.test(securityKey)) { - throw this.createError(MatrixError.VERIFY_FILE_BAD_CONTENT); - } - - try { - return this.verifyWithKey(securityKey); - } catch (error) { - throw this.createError(MatrixError.FILE_VERIFICATION, error); - } - } - - /** - * Verify user with Cross signing security phrase - * @param securityPhrase secret user's phrase - * @return {Promise} - */ - async verifyWithPhrase(securityPhrase: string): Promise { - try { - const mx = this.matrixClient; - - const defaultStorageKey = mx.getAccountData('m.secret_storage.default_key')?.getContent().key; - const storageKeyInfo = mx - .getAccountData(`m.secret_storage.key.${defaultStorageKey}`) - ?.getContent(); - if (!storageKeyInfo) return false; - - const { salt, iterations } = storageKeyInfo.passphrase || {}; - const privateKey = await deriveKey(securityPhrase, salt, iterations); - const isCorrect = await mx.checkSecretStorageKey(privateKey, storageKeyInfo); - if (isCorrect) { - this.secretStorage.storePrivateKey(defaultStorageKey, privateKey); - await mx.checkOwnCrossSigningTrust(); - } - - return isCorrect; - } catch (error) { - throw this.createError(MatrixError.PHRASE_VERIFICATION, error); - } - } - - /** - * Stop the client and remove handlers - */ - stopClient() { - this.matrixClient.stopClient(); - this.matrixClient.removeAllListeners(); - } - - /** - * Logout user from Matrix and clean storages - * @return {Promise} - */ - async logout(): Promise { - const credentials = this.credentialStorage.getCredentials('userId', this.userId); - if (!credentials) { - throw this.createError(MatrixError.LOGOUT); - } - this.credentialStorage.updateCredentials(credentials.userId, { isLastLogin: false }); - - try { - this.stopClient(); - await this.matrixClient.logout(); - await this.matrixClient.clearStores(); - this.eventCallbacks.onLogout(); - this.credentialStorage.clear(); - } catch (error) { - throw this.createError(MatrixError.LOGOUT, error); - } - } - - /** - * Create new room for MST account - * @param params room configuration - * @return {Promise} - */ - async createRoom(params: RoomParams): Promise { - try { - const { room_id: roomId } = await this.matrixClient.createRoom({ - name: `Nova Spektr MST | ${params.accountName}`, - visibility: Visibility.Private, - preset: Preset.TrustedPrivateChat, - }); - - const matrixIds = params.signatories.map((s) => s.matrixId).filter(nonNullable); - - await this.initStateEvents(roomId, params); - await this.inviteSignatories(roomId, matrixIds); - - return roomId; - } catch (error) { - throw this.createError(MatrixError.CREATE_ROOM, error); - } - } - - /** - * Leave MST room - * @param roomId room's identifier - * @return {Promise} - */ - async leaveRoom(roomId: string): Promise { - try { - await this.matrixClient.leave(roomId); - } catch (error) { - throw this.createError(MatrixError.LEAVE_ROOM, error); - } - } - - /** - * Join existing MST room, skips if already joined - * @param roomId room's identifier - * @return {Promise} - */ - async joinRoom(roomId: string): Promise { - try { - await this.matrixClient.joinRoom(roomId); - } catch (error) { - throw this.createError(MatrixError.JOIN_ROOM, error); - } - } - - /** - * Invite signatory to exist MST room - * @param roomId room's identifier - * @param signatoryId signatory's identifier - * @return {Promise} - */ - async invite(roomId: string, signatoryId: string): Promise { - try { - await this.matrixClient.invite(roomId, signatoryId); - } catch (error) { - throw this.createError(MatrixError.INVITE_IN_ROOM, error); - } - } - - /** - * List of joined Nova Spektr rooms - * @param accountId multisig account id - * @return {Array} - */ - joinedRooms(accountId?: string): Room[] { - return this.matrixClient.getRooms().filter((room) => { - const isSpektrRoom = this.isSpektrRoom(room); - const isJoinedRoom = room.getMyMembership() === Membership.JOIN; - if (!isSpektrRoom || !isJoinedRoom) return false; - - return !accountId || this.getSpektrTopic(room)?.mstAccount?.accountId === accountId; - }); - } - - /** - * Send message to active room - * @param roomId room's identifier - * @param message sending message - * @return {Promise} - */ - async sendMessage(roomId: string, message: string): Promise { - try { - const response = await this.matrixClient.sendTextMessage(roomId, message); - - return response.event_id; - } catch (error) { - throw this.createError(MatrixError.MESSAGE, error); - } - } - - /** - * Mark latest event as read - * @param readEventId identifier of the last read event - * @param events timeline events - * @return {Promise} - */ - async markAsRead(readEventId: string, events: MatrixEvent[]): Promise { - if (events.length === 0) return; - - let latestEvent = null; - for (let index = events.length - 1; index >= 0; index -= 1) { - const event = events[index]; - if (event.getId() === readEventId) break; - if (events[index].isSending()) continue; - - latestEvent = events[index]; - break; - } - - if (latestEvent === null) return; - - try { - await this.matrixClient.sendReadReceipt(latestEvent); - } catch (error) { - throw this.createError(MatrixError.MARK_AS_READ, error); - } - } - - /** - * Set callbacks for Matrix events - * @param handlers aggregated callback handlers - */ - setEventCallbacks(handlers: Callbacks) { - this.eventCallbacks = handlers; - } - - /** - * Send MST_UPDATE state event to the room - * Initialize multi-sig transaction - * @param roomId room's identifier - * @param params MST parameters - * @return {Promise} - */ - async sendUpdate(roomId: string, params: UpdatePayload): Promise { - try { - await this.matrixClient.sendEvent(roomId, SpektrMultisigEvent.UPDATE, params); - } catch (error) { - throw this.createError(MatrixError.MST_UPDATE, error); - } - } - - /** - * Send MST_APPROVE state event to the room - * Approve multi-sig transaction - * @param roomId room's identifier - * @param params MST parameters - * @return {Promise} - */ - async sendApprove(roomId: string, params: ApprovePayload): Promise { - try { - await this.matrixClient.sendEvent(roomId, SpektrMultisigEvent.APPROVE, params); - } catch (error) { - throw this.createError(MatrixError.MST_APPROVE, error); - } - } - - // TODO: experimental mstEvent for thread - /** - * Send MST_APPROVE event to thread - * @param roomId room's identifier - * @param thread root event id of the thread - * @param params MST parameters - * @return {Promise} - */ - async mstApprove_NEW(roomId: string, thread: string, params: ApprovePayload): Promise { - try { - await this.matrixClient.sendEvent(roomId, thread, SpektrMultisigEvent.APPROVE, params); - } catch (error) { - throw this.createError(MatrixError.MST_APPROVE, error); - } - } - - /** - * Send MST_FINAL_APPROVE state event to the room - * Final approve for multi-sig transaction - * @param roomId room's identifier - * @param params MST parameters - * @return {Promise} - */ - async sendFinalApprove(roomId: string, params: FinalApprovePayload): Promise { - try { - await this.matrixClient.sendEvent(roomId, SpektrMultisigEvent.FINAL_APPROVE, params); - } catch (error) { - throw this.createError(MatrixError.MST_FINAL_APPROVE, error); - } - } - - /** - * Send MST_CANCEL state event to the room - * Cancel multi-sig transaction - * @param roomId room's identifier - * @param params MST parameters - * @return {Promise} - */ - async sendCancel(roomId: string, params: CancelPayload): Promise { - try { - await this.matrixClient.sendEvent(roomId, SpektrMultisigEvent.CANCEL, params); - } catch (error) { - throw this.createError(MatrixError.MST_CANCEL, error); - } - } - - /** - * Paginate timelines of all Nova Spektr rooms - * @return {Promise} - */ - async syncSpektrTimeline(): Promise { - const { read, load } = this.matrixClient.getRooms().reduce[]>>( - (acc, room) => { - const readUpEventId = room.getEventReadUpTo(this.userId || ''); - - if (!this.isSpektrRoom(room) || !readUpEventId) return acc; - - const timelineSet = room.getUnfilteredTimelineSet(); - const liveTimeline = timelineSet.getLiveTimeline(); - const readUpEvent = timelineSet.findEventById(readUpEventId); - - if (readUpEvent) { - acc.read.push(this.markAsRead(readUpEventId, liveTimeline.getEvents())); - } else { - acc.load.push(this.paginateTimeline(liveTimeline, true)); - } - - return acc; - }, - { read: [], load: [] }, - ); - - try { - if (read.length) { - await Promise.allSettled(read); - } - if (load.length) { - await Promise.allSettled(load); - await this.syncSpektrTimeline(); - } - } catch (error) { - console.warn(error); - } - } - - // ===================================================== - // ================= Public helpers ==================== - // ===================================================== - - isUpdateEvent(type: SpektrMultisigEvent, content?: BaseMultisigPayload): content is UpdatePayload { - return type === SpektrMultisigEvent.UPDATE; - } - - isApproveEvent(type: SpektrMultisigEvent, content?: BaseMultisigPayload): content is ApprovePayload { - return type === SpektrMultisigEvent.APPROVE; - } - - isFinalApproveEvent(type: SpektrMultisigEvent, content?: BaseMultisigPayload): content is FinalApprovePayload { - return type === SpektrMultisigEvent.FINAL_APPROVE; - } - - isCancelEvent(type: SpektrMultisigEvent, content?: BaseMultisigPayload): content is CancelPayload { - return type === SpektrMultisigEvent.CANCEL; - } - - // ===================================================== - // ====================== Getters ====================== - // ===================================================== - - /** - * Get matrix userId - * @return {String | undefined} - */ - get userId(): string | undefined { - return this.matrixClient.getUserId() || undefined; - } - - /** - * Is Matrix user logged in - * @return {Boolean} - */ - get userIsLoggedIn(): boolean { - return this.matrixClient.isLoggedIn(); - } - - /** - * Get device session key - * @return {String | undefined} - */ - get sessionKey(): string | undefined { - return this.matrixClient.getDeviceEd25519Key() || undefined; - } - - /** - * Get current device cross sign verification status - * @return {Boolean} - */ - get sessionIsVerified(): boolean { - if (!this.userId) return false; - - try { - const mx = this.matrixClient; - const crossSignInfo = mx.getStoredCrossSigningForUser(this.userId); - const deviceId = mx.getDeviceId(); - if (!deviceId || !crossSignInfo) return false; - - const deviceInfo = mx.getStoredDevice(this.userId, deviceId); - if (!deviceInfo) return false; - - const deviceTrust = crossSignInfo.checkDeviceTrust(crossSignInfo, deviceInfo, false, true); - - return deviceTrust.isCrossSigningVerified(); - } catch { - console.info('🔸 Matrix Crypto is inactive or about to start'); - - return false; - } - } - - // ===================================================== - // ================= Private methods =================== - // ===================================================== - - /** - * Send encryption and topic events - * @param roomId Matrix room ID - * @param params room parameters - * @return {Promise} - */ - private async initStateEvents(roomId: string, params: RoomParams): Promise { - try { - await this.matrixClient.sendStateEvent(roomId, EventType.RoomEncryption, ROOM_CRYPTO_CONFIG); - } catch (error) { - throw this.createError(MatrixError.ROOM_ENCRYPTION, error); - } - - try { - const payload: SpektrExtras = { - mstAccount: { - accountName: params.accountName, - threshold: params.threshold, - signatories: params.signatories.map((s) => s.accountId), - accountId: params.accountId, - cryptoType: params.cryptoType, - chainId: params.chainId, - creatorAccountId: params.creatorAccountId, - }, - }; - await this.matrixClient.sendStateEvent(roomId, 'm.room.topic', { - topic: `Room for Multisignatory account | ${params.accountName}`, - spektr_extras: payload, - }); - } catch (error) { - throw this.createError(MatrixError.ROOM_TOPIC, error); - } - } - - /** - * Invite signatories to Matrix room - * @param roomId Matrix room ID - * @param matrixIds list of signatories' matrix ids - * @return {Promise} - */ - private async inviteSignatories(roomId: string, matrixIds: string[]): Promise { - try { - const uniqueInvites = new Set(matrixIds.filter((matrixId) => matrixId !== this.userId)); - const inviteRequests = Array.from(uniqueInvites).map((matrixId) => { - return this.matrixClient.invite(roomId, matrixId); - }); - - await Promise.all(inviteRequests); - } catch (error) { - throw this.createError(MatrixError.INVITE_USERS, error); - } - } - - /** - * Initiate Matrix client with user credentials - * @param username user's login - * @param password user's password - * @return {Promise} - */ - private async initClientWithCreds(username: string, password: string): Promise { - try { - const credentials = this.credentialStorage.getCredentials('username', username); - - const userLoginResult = await this.matrixClient.login(AuthType.Password, { - ...(credentials?.deviceId && { device_id: credentials.deviceId }), - initial_device_display_name: process.env.PRODUCT_NAME, - identifier: { type: 'm.id.user', user: username }, - password, - }); - - this.matrixClient = await this.createMatrixClient({ - baseUrl: this.matrixClient.baseUrl, - userId: userLoginResult.user_id, - accessToken: userLoginResult.access_token, - deviceId: credentials?.deviceId || userLoginResult.device_id, - }); - - if (credentials) { - this.credentialStorage.updateCredentials(credentials.userId, { - accessToken: userLoginResult.access_token, - isLastLogin: true, - }); - } else { - this.credentialStorage.saveCredentials({ - username, - userId: userLoginResult.user_id, - accessToken: userLoginResult.access_token, - deviceId: userLoginResult.device_id, - baseUrl: this.matrixClient.baseUrl, - isLastLogin: true, - }); - } - } catch (error) { - throw this.createError(MatrixError.INIT_WITH_CREDENTIALS, error); - } - } - - /** - * Initiate Matrix client with SSO - * @return {Promise} - */ - private async initClientWithSso(token: string): Promise { - const baseUrl = localStorage.getItem(MATRIX_HOME_SERVER); - if (!baseUrl) return; - - try { - this.createTempClient(baseUrl); - - const userLoginResult = await this.matrixClient.login('m.login.token', { - token, - initial_device_display_name: process.env.PRODUCT_NAME, - }); - - this.matrixClient = await this.createMatrixClient({ - baseUrl: this.matrixClient.baseUrl, - userId: userLoginResult.user_id, - accessToken: userLoginResult.access_token, - deviceId: userLoginResult.device_id, - }); - - const credentials = this.credentialStorage.getCredentials('userId', userLoginResult); - - if (credentials) { - this.credentialStorage.updateCredentials(credentials.userId, { - accessToken: userLoginResult.access_token, - isLastLogin: true, - }); - } else { - this.credentialStorage.saveCredentials({ - username: this.matrixClient.getUser(userLoginResult.user_id)?.displayName || userLoginResult.user_id, - userId: userLoginResult.user_id, - accessToken: userLoginResult.access_token, - deviceId: userLoginResult.device_id, - baseUrl: this.matrixClient.baseUrl, - isLastLogin: true, - }); - } - } catch (error) { - throw this.createError(MatrixError.INIT_WITH_SSO, error); - } - } - - /** - * Initiate Matrix client from storage (cache) - * @return {Promise} - */ - private async initClientFromCache(): Promise { - const credentials = this.credentialStorage.getCredentials('isLastLogin', true); - - if (!credentials) { - throw this.createError(MatrixError.NO_CREDS_IN_DB); - } - - this.matrixClient = await this.createMatrixClient({ - baseUrl: credentials.baseUrl, - userId: credentials.userId, - accessToken: credentials.accessToken, - deviceId: credentials.deviceId, - }); - } - - /** - * Subscribe to Matrix events - */ - private subscribeToEvents() { - this.handleSyncEvent(); - this.handleInviteEvent(); - this.handleDecryptedEvents(); - // this.handleEchoEvents(); - } - - /** - * Handle sync event - */ - private handleSyncEvent() { - this.matrixClient.on(ClientEvent.Sync, (state) => { - if (state !== SyncState.Prepared) return; - - this.eventCallbacks.onSyncEnd(); - }); - } - - /** - * Handle invite event - */ - private handleInviteEvent() { - this.matrixClient.on(RoomMemberEvent.Membership, async (event, member) => { - const roomId = event.getRoomId(); - const userIsSender = event.getSender() === this.userId; - const userIsNotMember = member.userId !== this.userId; - const eventIsNotInvite = member.membership !== Membership.INVITE; - - if (!roomId || userIsSender || userIsNotMember || eventIsNotInvite) return; - - try { - // getRoomSummary loads room into client, otherwise room will be NULL - await this.matrixClient.getRoomSummary(roomId); - const room = this.matrixClient.getRoom(roomId); - if (!room) return; - - const roomIsValid = this.isSpektrRoom(room); - const topic = this.getSpektrTopic(room); - const userHasJoined = room?.getMyMembership() === Membership.JOIN; - if (!roomIsValid || !topic || userHasJoined) return; - - console.info('🔸 Invite event - ', event.getSender(), member.membership, roomId); - - const payload = this.createEventPayload(event, { - content: topic, - roomName: room.name, - }); - this.eventCallbacks.onInvite(payload); - } catch (error) { - console.info(`Room doesn't exist (inviter has left) - reject invite`); - await this.leaveRoom(roomId); - } - }); - } - - /** - * Handle decrypted events (MST and messages) - */ - private handleDecryptedEvents() { - this.matrixClient.on(MatrixEventEvent.Decrypted, (event) => { - if (event.getSender() === this.userId) return; - - const room = this.matrixClient.getRoom(event.getRoomId()); - if (!room || !this.isSpektrRoom(room)) return; - - if (this.isSpektrMultisigEvent(event)) { - const payload = this.createEventPayload(event); - this.eventCallbacks - .onMultisigEvent(payload, this.getSpektrTopic(room)) - .catch((error) => console.warn('onMultisigEvent error - ', error)); - } - // if (event.getType() === EventType.RoomMessage) { - // const payload = event.getContent().body; - // this.eventCallbacks.onMessage(payload); - // } - }); - } - - /** - * Paginate timeline backwards or forward - * @param timeline timeline to be traversed - * @param backwards flag of traversal direction - * @param limit how much records to retrieve - * @return {Promise} - */ - private async paginateTimeline(timeline: EventTimeline, backwards: boolean, limit = 30): Promise { - const token = timeline.getPaginationToken(backwards ? Direction.Backward : Direction.Forward); - if (!token) return; - - try { - await this.matrixClient.paginateEventTimeline(timeline, { backwards, limit }); - } catch (error) { - throw this.createError(MatrixError.TIMELINE_PAGINATION, error); - } - } - - /** - * All events are echoed at the client side - * Handle echo events (update, approve, final, cancel) - * @description might be useful in future - * @link https://spec.matrix.org/v1.6/client-server-api/#local-echo - */ - // TODO: Uncomment if we will decide to use echo events - // private handleEchoEvents() { - // this.matrixClient.on(RoomEvent.LocalEchoUpdated, (event, room) => { - // if (event.getSender() !== this.userId || event.status !== 'sent') return; - - // if (!this.isSpektrMultisigEvent(event) || !this.isSpektrRoom(room)) return; - - // const payload = this.createEventPayload(event); - // this.eventCallbacks.onMultisigEvent(payload, this.getSpektrTopic(room)).catch(console.warn); - // }); - // } - - // ===================================================== - // ====================== Helpers ====================== - // ===================================================== - - /** - * Create error object - * @param error error code and message - * @param origin original error object - * @return {ErrorObject} - */ - private createError(error: MatrixError, origin?: unknown | MatrixError): ErrorObject { - if (!origin) return MATRIX_ERRORS[error]; - - if (origin instanceof Error) { - console.warn(`🔶 Matrix original error object: ${origin} 🔶`); - - return MATRIX_ERRORS[error]; - } - - if ((origin as ErrorObject)?.code && (origin as ErrorObject)?.message) { - return origin as ErrorObject; - } - - return MATRIX_ERRORS[error]; - } - - /** - * Create notification payload from Matrix Event - * @param event matrix event object - * @param params content and roomName - * @return {Object} - */ - private createEventPayload( - event: MatrixEvent, - params?: { - content: SpektrExtras; - roomName: string; - }, - ): T { - return { - eventId: event.getId(), - roomId: event.getRoomId(), - sender: event.getSender(), - client: this.matrixClient.getUserId(), - date: event.getDate() || new Date(), - type: event.getType(), - content: params?.content || event.getContent(), - roomName: params?.roomName || '', - } as T; - } - - /** - * Check room to be a Spektr room - * @param room matrix room - * @return {Boolean} - */ - private isSpektrRoom(room: Room | null): boolean { - if (!room) return false; - - const topicEvents = room.getLiveTimeline().getState(Direction.Forward)?.getStateEvents(EventType.RoomTopic); - if (!topicEvents?.length) return false; - - return Boolean(topicEvents[0].getContent()['spektr_extras']); - } - - /** - * Retrieve spektr_extras from room's topic event - * @param room the room itself - * @return {Object} - */ - private getSpektrTopic(room: Room): SpektrExtras | undefined { - // on invite user only sees stripped state, which has '' as state key for all events - const strippedStateKey = ''; - - const topicEvent = room - .getLiveTimeline() - .getState(Direction.Forward) - ?.events.get(EventType.RoomTopic) - ?.get(strippedStateKey)?.event; - - return topicEvent?.content?.spektr_extras; - } - - /** - * Create Matrix client - * @param credentials user credentials for Matrix - * @return {Promise} - */ - private async createMatrixClient(credentials: Omit): Promise { - try { - const indexedDBStore = new IndexedDBStore({ - indexedDB: window.indexedDB, - localStorage: window.localStorage, - dbName: 'matrix-sync', - }); - await indexedDBStore.startup(); - - return createClient({ - baseUrl: credentials.baseUrl, - userId: credentials.userId, - accessToken: credentials.accessToken, - deviceId: credentials.deviceId, - cryptoStore: new IndexedDBCryptoStore(window.indexedDB, 'matrix-crypto'), - store: indexedDBStore as IStore, - timelineSupport: true, - cryptoCallbacks: this.secretStorage.cryptoCallbacks, - }); - } catch (error) { - throw this.createError(MatrixError.CREATE_MATRIX_CLIENT, error); - } - } - - /** - * Check MST Event - * @param event Matrix event - * @return {Boolean} - */ - private isSpektrMultisigEvent(event: MatrixEvent): boolean { - const type = event.getType() as SpektrMultisigEvent; - - return ( - this.isUpdateEvent(type) || - this.isApproveEvent(type) || - this.isFinalApproveEvent(type) || - this.isCancelEvent(type) - ); - } - - /** - * Create temporary client with specific baseUrl - * @param url homeserver url - */ - private createTempClient(url: string) { - this.matrixClient = createClient({ baseUrl: url }); - } -} diff --git a/src/renderer/shared/api/matrix/service/secretStorage.ts b/src/renderer/shared/api/matrix/service/secretStorage.ts deleted file mode 100644 index 92cbfca7fb..0000000000 --- a/src/renderer/shared/api/matrix/service/secretStorage.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { ISecretStorage } from '../lib/types'; - -class SecretStorage implements ISecretStorage { - private secretStorage: Map; - - constructor() { - this.secretStorage = new Map(); - - // Bind functions for outer reference (cryptoCallbacks) - this.getSecretStorageKey = this.getSecretStorageKey.bind(this); - this.cacheSecretStorageKey = this.cacheSecretStorageKey.bind(this); - this.hasPrivateKey = this.hasPrivateKey.bind(this); - this.getPrivateKey = this.getPrivateKey.bind(this); - } - - /** - * Save private key to the storage - * @param keyId key value - * @param privateKey private key value - */ - public storePrivateKey(keyId: string, privateKey: Uint8Array | unknown): void | never { - if (!(privateKey instanceof Uint8Array)) { - throw new Error('Unable to store, privateKey is invalid.'); - } - this.secretStorage.set(keyId, privateKey); - } - - /** - * Check is private key already saved - * @param keyId key value - * @return {Boolean} - */ - public hasPrivateKey(keyId: string): boolean { - return this.secretStorage.get(keyId) instanceof Uint8Array; - } - - /** - * Retrieve private key from storage - * @param keyId key value - * @return {Uint8Array | undefined} - */ - public getPrivateKey(keyId: string): Uint8Array | undefined { - return this.secretStorage.get(keyId); - } - - /** - * Delete private key from storage - * @param keyId key value - */ - public deletePrivateKey(keyId: string): void { - this.secretStorage.delete(keyId); - } - - /** - * Clear the storage - */ - public clearSecretStorageKeys(): void { - this.secretStorage.clear(); - } - - /** - * Get object with callbacks to work with storage - * @return {Object} - */ - public get cryptoCallbacks() { - return { - getSecretStorageKey: this.getSecretStorageKey, - cacheSecretStorageKey: this.cacheSecretStorageKey, - }; - } - - /** - * Get tuple of keyId and privateKey from storage - * @param value keys to search - * @return {Promise} - */ - private async getSecretStorageKey(value: { keys: Record }): Promise<[string, Uint8Array] | null> { - const keyId = Object.keys(value.keys).find(this.hasPrivateKey); - - if (!keyId) return null; - const privateKey = this.getPrivateKey(keyId); - if (!privateKey) return null; - - return [keyId, privateKey]; - } - - /** - * Save private key to the storage - * @param keyId key value - * @param keyInfo key info - * @param privateKey private key value - */ - private cacheSecretStorageKey(keyId: string, keyInfo: any, privateKey: Uint8Array): void { - this.secretStorage.set(keyId, privateKey); - } -} - -export default SecretStorage; diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index 404b646961..4bed113b44 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -7,7 +7,6 @@ "contactList": { "emptySearchDescription": "Try to search for another name", "emptySearchLabel": "No contact with entered name were found", - "matrixIdColumnTitle": "Matrix ID", "nameColumnTitle": "Name", "noContactsButton": "Add your first contact", "noContactsLabel": "The contact list is empty, you can add a new contact" @@ -19,10 +18,6 @@ "accountIdPlaceholder": "Enter or paste an address", "accountIdRequiredError": "Account address is required", "addContactButton": "Add contact", - "matrixIdError": "Incorrect matrix id", - "matrixIdHint": "Matrix ID allows to exchange multisig information with signatory", - "matrixIdLabel": "Matrix ID", - "matrixIdPlaceholder": "Enter @username:matrix.org", "nameExistsError": "Name already in use", "nameLabel": "Name", "namePlaceholder": "Enter text", @@ -39,10 +34,6 @@ "accountIdPlaceholder": "Enter or paste an address", "accountIdRequiredError": "Account address is required", "editWarning": "If you have a multisig wallet with this contact, then changing the contact will not affect the multisig wallet", - "matrixIdError": "Incorrect matrix id", - "matrixIdHint": "Matrix ID allows to exchange multisig information with signatory", - "matrixIdLabel": "Matrix ID", - "matrixIdPlaceholder": "Enter @username:matrix.org", "nameExistsError": "Name already in use", "nameLabel": "Name", "namePlaceholder": "Enter text", @@ -264,7 +255,6 @@ "derivationTitle": "Derivation path", "explorerButton": "View on { name }", "explorerTitle": "Explorers", - "matrixIdTitle": "Matrix ID", "publicKeyTitle": "Public key" }, "input": { @@ -331,9 +321,6 @@ "title": "Log", "unknownMessage": " made an unknown action" }, - "matrixCredentials": { - "subTitle": "Matrix Credentials" - }, "multisigOperations": { "noSignatory": "Add signatory wallet before making multisig operation", "title": "Multisig Operations" @@ -777,58 +764,6 @@ "switchLabel": "Show currency values", "unpopularFiatLabel": "Fiat currencies" }, - "matrix": { - "autoLoginTitle": "Logging into Matrix", - "badCredentialsError": "Invalid username or password", - "badServerError": "Server is not a correct matrix server", - "fileError": "File does not contain a valid verification key, please upload another one", - "formSubtitle": "Sign in with your Matrix ID and password", - "formTitle": "Matrix credentials", - "generalTitle": "Matrix account", - "homeserverLabel": "Matrix server", - "homeserverPlaceholder": "Choose homeserver", - "infoMatrixDescription": "Matrix is an open source, secure, decentralised, real-time communication standard. The Spektr Matrix Protocol extension is built on Matrix and uses Matrix for:", - "infoMatrixDescriptionOne": "Exchanging multisig account information amongst signatories.", - "infoMatrixDescriptionTwo": "Exchanging multisig transaction events: initiation, signing, final signing, cancelling.", - "infoMatrixEncryption": "Matrix provides state-of-the-art end-to-end-encryption. This ensures that only the intended recipients can ever decrypt your messages.", - "infoSpektrDescription": "Nova Spektr uses Matrix to share multisig account information and multisig transaction information (including call data) with other signatories. Signing in to Matrix is the easiest way to share this information with your fellow signatories, as all the necessary information will be automatically shared.", - "infoWhatIsMatrixTitle": "What is Matrix?", - "infoWhyMatrixTitle": "Why do I need to sign in with Matrix?", - "logInButton": "Log in", - "logInTitle": "Log in to Matrix account", - "logOutButton": "Log out", - "loginNotAvailable": "Login with credentials is not available for
      { homeserver }", - "loginSeparator": "Or", - "passphraseError": "Invalid passphrase, please try another one", - "passphrasePlaceholder": "Paste your passphrase", - "passwordLabel": "Password", - "passwordPlaceholder": "Enter password", - "passwordRequiredError": "Password is required", - "passwordVisibilityButton": "Show password", - "privacyFooter": "By signing in you consent to the terms of use and privacy policy", - "privacyTitle": "Nova Spektr does not store your Matrix account credentials", - "registerLink": "Don’t have an account? Register", - "secretFilePlaceholder": "Select file to upload", - "secretKeyError": "Invalid key, please try another one", - "secretKeyPlaceholder": "Paste your verification key", - "statusNotVerified": "Not verified", - "statusVerified": "Verified", - "subTitle": "Matrix Credentials", - "tooltipLabel": "Why do I need Matrix?", - "uploadFile": "Upload file", - "userIdLabel": "Logged in as", - "usernameError": "Invalid username", - "usernameLabel": "Username", - "usernamePlaceholder": "Enter username", - "usernameRequiredError": "Username is required", - "verificationHint": "Verify your session for enhanced secure messaging providing your Matrix Security Key.", - "verificationLabel": "Session verification", - "verificationSubtitle": "Verify your device for secure connection", - "verifyButton": "Verify", - "verifyWithFile": "File", - "verifyWithKey": "Key", - "verifyWithPassphrase": "Passphrase" - }, "networks": { "activeNetworksLabel": "Active networks", "addNodeButton": "Add custom node", @@ -877,18 +812,11 @@ "githubDescription": "Contribute and explore our open-source project on GitHub for collaborative code shaping!", "githubLabel": "GitHub", "languageLabel": "Language", - "matrixDescription": "Manage Matrix connection", - "matrixDetailsLabel": "Manage Omni Matrix Protocol credentials", - "matrixLabel": "Matrix Connection", - "matrixStatusLogin": "Log in or register", - "matrixStatusNotVerified": "Session not verified", - "matrixStatusVerified": "Session verified", "mediumDescription": "Engaging content to expand knowledge and stay informed about Nova Spektr!", "mediumLabel": "Medium", "networkDetailsLabel": "Manage network connection", "networkLabel": "Network", "referendumLabel": "Referendum data", - "smpLabel": "Spektr Matrix Protocol", "socialLabel": "Social", "telegramDescription": "Connect, get help, and share ideas with our Telegram community!", "telegramLabel": "Telegram", diff --git a/src/renderer/shared/api/xcm/service/xcmService.ts b/src/renderer/shared/api/xcm/service/xcmService.ts index 559e2ad74f..66dbbb8f82 100644 --- a/src/renderer/shared/api/xcm/service/xcmService.ts +++ b/src/renderer/shared/api/xcm/service/xcmService.ts @@ -196,9 +196,9 @@ type XTokensPayload = ParsedPayload & { function parseXcmPalletExtrinsic(args: Omit): XcmPalletPayload { const xcmVersion = Object.keys(args.dest as Object)[0]; - const assetInterior = get(args.assets, `${xcmVersion}[0].id.Concrete.interior`) as unknown as Object; - const destInterior = get(args.dest, `${xcmVersion}.interior`) as unknown as Object; - const beneficiaryInterior = get(args.beneficiary, `${xcmVersion}.interior`) as unknown as Object; + const assetInterior = get(args.assets, `${xcmVersion}[0].id.Concrete.interior`) as Object; + const destInterior = get(args.dest, `${xcmVersion}.interior`) as Object; + const beneficiaryInterior = get(args.beneficiary, `${xcmVersion}.interior`) as Object; const parsedPayload = { isRelayToken: assetInterior === 'Here', @@ -211,7 +211,7 @@ function parseXcmPalletExtrinsic(args: Omit): XTokensPayload { const xcmVersion = Object.keys(args.dest as Object)[0]; - const assetInterior = get(args.asset, `${xcmVersion}.id.Concrete.interior`) as unknown as Object; - const destInterior = get(args.dest, `${xcmVersion}.interior`) as unknown as Object; + const assetInterior = get(args.asset, `${xcmVersion}.id.Concrete.interior`) as Object; + const destInterior = get(args.dest, `${xcmVersion}.interior`) as Object; const parsedPayload = { isRelayToken: assetInterior === 'Here', @@ -253,14 +253,14 @@ function parseXTokensExtrinsic(args: Omit(destInterior, destJunction); if (cols.Parachain) { parsedPayload.destParachain = Number(xcmUtils.toRawString(cols.Parachain.toString())); parsedPayload.toRelayChain = false; } - parsedPayload.destAccountId = get(cols, 'AccountId32.id') as unknown as string; + parsedPayload.destAccountId = get(cols, 'AccountId32.id'); } return parsedPayload; diff --git a/src/renderer/shared/config/chains/chains_dev.json b/src/renderer/shared/config/chains/chains_dev.json index 2b71659a9b..cfb3557c6f 100644 --- a/src/renderer/shared/config/chains/chains_dev.json +++ b/src/renderer/shared/config/chains/chains_dev.json @@ -6314,4 +6314,4 @@ ] } } -] +] \ No newline at end of file diff --git a/src/renderer/shared/core/types/account.ts b/src/renderer/shared/core/types/account.ts index 8ee93c427f..c86651bdfc 100644 --- a/src/renderer/shared/core/types/account.ts +++ b/src/renderer/shared/core/types/account.ts @@ -42,8 +42,6 @@ export interface MultisigAccount extends Account { chainId?: ChainId; cryptoType: CryptoType; type: AccountType.MULTISIG; - creatorAccountId: AccountId; - matrixRoomId: string; } export interface WcAccount extends Account { diff --git a/src/renderer/shared/core/types/contact.ts b/src/renderer/shared/core/types/contact.ts index 08933bb0f9..997f201c6d 100644 --- a/src/renderer/shared/core/types/contact.ts +++ b/src/renderer/shared/core/types/contact.ts @@ -5,5 +5,4 @@ export type Contact = { name: string; address: Address; accountId: AccountId; - matrixId?: string; }; diff --git a/src/renderer/shared/core/types/notification.ts b/src/renderer/shared/core/types/notification.ts index 5ab9a63a25..421aecaf74 100644 --- a/src/renderer/shared/core/types/notification.ts +++ b/src/renderer/shared/core/types/notification.ts @@ -20,14 +20,13 @@ type BaseNotification = { type MultisigBaseNotification = BaseNotification & { multisigAccountId: AccountId; - originatorAccountId: AccountId; - smpRoomId: string; }; export type MultisigCreated = MultisigBaseNotification & { signatories: AccountId[]; threshold: number; multisigAccountName: string; + chainId: ChainId; }; export type MultisigOperation = MultisigBaseNotification & { diff --git a/src/renderer/shared/core/types/signatory.ts b/src/renderer/shared/core/types/signatory.ts index 03eedb97c7..c522e3fe03 100644 --- a/src/renderer/shared/core/types/signatory.ts +++ b/src/renderer/shared/core/types/signatory.ts @@ -4,5 +4,4 @@ export type Signatory = { name?: string; address: Address; accountId: AccountId; - matrixId?: string; }; diff --git a/src/renderer/shared/routes/paths.ts b/src/renderer/shared/routes/paths.ts index 8877286a94..7368f88f0c 100644 --- a/src/renderer/shared/routes/paths.ts +++ b/src/renderer/shared/routes/paths.ts @@ -24,7 +24,6 @@ export const Paths = { SETTINGS: '/settings', NETWORK: '/settings/network', CURRENCY: '/settings/currency', - MATRIX: '/settings/matrix', REFERENDUM_DATA: '/settings/referendum', // Governance diff --git a/src/renderer/shared/ui/Dropdowns/DropdownButton/DropdownButton.tsx b/src/renderer/shared/ui/Dropdowns/DropdownButton/DropdownButton.tsx index de66a92fc8..26374fe5b8 100644 --- a/src/renderer/shared/ui/Dropdowns/DropdownButton/DropdownButton.tsx +++ b/src/renderer/shared/ui/Dropdowns/DropdownButton/DropdownButton.tsx @@ -17,62 +17,58 @@ type Props = { options: ButtonDropdownOption[]; } & Omit; -export const DropdownButton = ({ options, title, disabled, className, ...buttonProps }: Props) => { - const { ref, ...restProps } = buttonProps; +export const DropdownButton = ({ options, title, disabled, className, ...buttonProps }: Props) => ( + + {({ open }) => ( +
      + } + className={cnTw('justify-center', className)} + {...buttonProps} + > + {title} + + + {options.map((opt) => { + const iconComponent = + typeof opt.icon === 'string' ? ( + + ) : ( + opt.icon + ); - return ( - - {({ open }) => ( -
      - } - className={cnTw('justify-center', className)} - {...restProps} - > - {title} - - - {options.map((opt) => { - const iconComponent = - typeof opt.icon === 'string' ? ( - + return ( + + {/* TODO maybe try to refactor to avoid duplicating option children */} + {/* FIXME: click from keyboard is ignored */} + {'to' in opt ? ( + + {iconComponent} + {opt.title} + ) : ( - opt.icon - ); - - return ( - - {/* TODO maybe try to refactor to avoid duplicating option children */} - {/* FIXME: click from keyboard is ignored */} - {'to' in opt ? ( - - {iconComponent} - {opt.title} - - ) : ( - - )} - - ); - })} - -
      - )} -
      - ); -}; + + )} + + ); + })} +
      +
      + )} +
      +); diff --git a/src/renderer/shared/ui/Dropdowns/DropdownIconButton/DropdownIconButton.tsx b/src/renderer/shared/ui/Dropdowns/DropdownIconButton/DropdownIconButton.tsx index a09980518f..a33b697393 100644 --- a/src/renderer/shared/ui/Dropdowns/DropdownIconButton/DropdownIconButton.tsx +++ b/src/renderer/shared/ui/Dropdowns/DropdownIconButton/DropdownIconButton.tsx @@ -1,7 +1,7 @@ import { Menu, Transition } from '@headlessui/react'; import { ComponentProps, PropsWithChildren, Fragment } from 'react'; -import { IconButton } from '../../Buttons'; +import { IconButton } from '../../Buttons/IconButton/IconButton'; import { Icon, FootnoteText } from '../../index'; import { DropdownIconButtonOption } from '../common/types'; import { cnTw } from '@shared/lib/utils'; diff --git a/src/renderer/widgets/CreateWallet/model/create-multisig-wallet-model.ts b/src/renderer/widgets/CreateWallet/model/create-multisig-wallet-model.ts index e7bdb909ff..d4f94d8691 100644 --- a/src/renderer/widgets/CreateWallet/model/create-multisig-wallet-model.ts +++ b/src/renderer/widgets/CreateWallet/model/create-multisig-wallet-model.ts @@ -1,21 +1,9 @@ import { combine, createApi, createEffect, createEvent, createStore, sample } from 'effector'; import sortBy from 'lodash/sortBy'; -import { - AccountType, - ChainId, - ChainType, - CryptoType, - Signatory, - SigningType, - WalletType, - HexString, - AccountId, -} from '@shared/core'; +import { AccountType, ChainId, ChainType, CryptoType, Signatory, SigningType, WalletType } from '@shared/core'; import { accountUtils, walletModel, walletUtils } from '@entities/wallet'; import { networkModel, networkUtils } from '@entities/network'; -import { ISecureMessenger } from '@shared/api/matrix'; -import { matrixModel } from '@entities/matrix'; const reset = createEvent(); @@ -31,7 +19,7 @@ const callbacksApi = createApi($callbacks, { const walletCreated = createEvent<{ name: string; threshold: number; - creatorId: HexString; + creatorId: string; }>(); const chainSelected = createEvent(); const signatoriesChanged = createEvent(); @@ -51,39 +39,20 @@ const $isEthereumChain = combine( ); type CreateWalletParams = { - matrix: ISecureMessenger; name: string; threshold: number; - creatorId: HexString; + creatorId: string; signatories: Signatory[]; - chainId?: ChainId; + chainId: ChainId | null; isEthereumChain: boolean; }; const createWalletFx = createEffect( - async ({ matrix, name, threshold, creatorId, signatories, chainId, isEthereumChain }: CreateWalletParams) => { + async ({ name, threshold, creatorId, signatories, chainId, isEthereumChain }: CreateWalletParams) => { const cryptoType = isEthereumChain ? CryptoType.ETHEREUM : CryptoType.SR25519; const accountIds = signatories.map((s) => s.accountId); const accountId = accountUtils.getMultisigAccountId(accountIds, threshold, cryptoType); - let roomId = matrix.joinedRooms(accountId)[0]?.roomId; - const isMyAccounts = signatories.every((s) => s.matrixId === matrix.userId); - - if (!roomId && !isMyAccounts) { - // Create new room only if both conditions are met: - // 1. No existing roomId is found. - // 2. Not all signatories are controlled by the current user. - roomId = await matrix.createRoom({ - creatorAccountId: creatorId, - accountName: name, - accountId: accountId, - threshold: threshold, - cryptoType, - chainId, - signatories: signatories.map(({ accountId, matrixId }) => ({ accountId, matrixId })), - }); - } - walletModel.events.multisigCreated({ wallet: { name, @@ -96,9 +65,7 @@ const createWalletFx = createEffect( chainId: chainId || undefined, name: name.trim(), accountId: accountId, - matrixRoomId: roomId, threshold: threshold, - creatorAccountId: creatorId as AccountId, cryptoType: isEthereumChain ? CryptoType.ETHEREUM : CryptoType.SR25519, chainType: isEthereumChain ? ChainType.ETHEREUM : ChainType.SUBSTRATE, type: AccountType.MULTISIG, @@ -146,13 +113,11 @@ sample({ source: { signatories: $signatories, chainId: $chain, - matrix: matrixModel.$matrix, isEthereumChain: $isEthereumChain, }, - fn: ({ signatories, chainId, ...rest }, resultValues) => ({ + fn: ({ signatories, ...rest }, resultValues) => ({ ...rest, ...resultValues, - chainId: chainId || undefined, signatories: sortBy(signatories, 'accountId'), }), target: createWalletFx, diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultiChainMultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultiChainMultisigWallet.tsx index 3a30e7630d..3ac8e826c6 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultiChainMultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultiChainMultisigWallet.tsx @@ -2,7 +2,7 @@ import { ComponentProps, useState, useEffect } from 'react'; import { useUnit } from 'effector-react'; import noop from 'lodash/noop'; -import { BaseModal, HeaderTitleText, Button, IconButton, StatusLabel } from '@shared/ui'; +import { BaseModal, HeaderTitleText, Button, IconButton } from '@shared/ui'; import { useI18n } from '@app/providers'; import { useToggle } from '@shared/lib/hooks'; import { OperationResult } from '@entities/transaction'; @@ -12,7 +12,6 @@ import { contactModel } from '@entities/contact'; import { DEFAULT_TRANSITION } from '@shared/lib/utils'; import { walletModel } from '@entities/wallet'; import { createMultisigWalletModel } from '../../model/create-multisig-wallet-model'; -import { matrixUtils, matrixModel } from '@entities/matrix'; type OperationResultProps = Pick, 'variant' | 'description'>; @@ -33,9 +32,6 @@ export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack } const wallets = useUnit(walletModel.$wallets); const contacts = useUnit(contactModel.$contacts); - const matrix = useUnit(matrixModel.$matrix); - const loginStatus = useUnit(matrixModel.$loginStatus); - const isLoading = useUnit(createMultisigWalletModel.$isLoading); const error = useUnit(createMultisigWalletModel.$error); @@ -101,7 +97,6 @@ export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack } const modalTitle = (
      {t('createMultisigAccount.title')} - {matrixUtils.isLoggedIn(loginStatus) && }
      ); diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectMultisigWalletType.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectMultisigWalletType.tsx index 5c93ad5d6d..79afc60b70 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectMultisigWalletType.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectMultisigWalletType.tsx @@ -3,7 +3,6 @@ import { useState } from 'react'; import { BaseModal, HeaderTitleText, Button, RadioGroup, BodyText } from '@shared/ui'; import { useI18n } from '@app/providers'; import { MultisigWalletType } from './common/constants'; -import { MatrixAutoLogin, MatrixLogin } from '@features/matrix'; type Props = { isOpen: boolean; @@ -89,9 +88,6 @@ export const SelectMultisigWalletType = ({ isOpen, onClose, onContinue }: Props) {t('signing.continueButton')}
      - - - ); diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SingleChainMultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SingleChainMultisigWallet.tsx index 6f51973b19..0e9f90e748 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SingleChainMultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SingleChainMultisigWallet.tsx @@ -2,7 +2,7 @@ import { ComponentProps, useState, useEffect } from 'react'; import { useUnit } from 'effector-react'; import noop from 'lodash/noop'; -import { BaseModal, HeaderTitleText, Button, IconButton, StatusLabel } from '@shared/ui'; +import { BaseModal, HeaderTitleText, Button, IconButton } from '@shared/ui'; import { useI18n } from '@app/providers'; import { useToggle } from '@shared/lib/hooks'; import { OperationResult } from '@entities/transaction'; @@ -14,7 +14,6 @@ import { createMultisigWalletModel } from '../../model/create-multisig-wallet-mo import { SelectAccountSignatories } from './components/SelectAccountSignatories'; import { walletModel } from '@entities/wallet'; import { networkModel } from '@entities/network'; -import { matrixUtils, matrixModel } from '@entities/matrix'; type OperationResultProps = Pick, 'variant' | 'description'>; @@ -33,9 +32,6 @@ type Props = { export const SingleChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack }: Props) => { const { t } = useI18n(); - const matrix = useUnit(matrixModel.$matrix); - const loginStatus = useUnit(matrixModel.$loginStatus); - const accounts = useUnit(createMultisigWalletModel.$availableAccounts); const wallets = useUnit(walletModel.$wallets); const contacts = useUnit(contactModel.$contacts); @@ -97,7 +93,6 @@ export const SingleChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack const modalTitle = (
      {t('createMultisigAccount.title')} - {matrixUtils.isLoggedIn(loginStatus) && }
      ); diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmSignatories.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmSignatories.tsx index 47001b8ddc..cc71d30843 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmSignatories.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/ConfirmSignatories.tsx @@ -1,6 +1,6 @@ import { cnTw, RootExplorers } from '@shared/lib/utils'; import { useI18n } from '@app/providers'; -import { FootnoteText, SmallTitleText, HelpText } from '@shared/ui'; +import { FootnoteText, SmallTitleText } from '@shared/ui'; import { ExtendedWallet, ExtendedContact, ExtendedAccount } from '../common/types'; import { WalletItem } from './WalletItem'; import { ContactItem, ExplorersPopover } from '@entities/wallet'; @@ -63,17 +63,13 @@ export const ConfirmSignatories = ({ chain, wallets = [], accounts = [], contact {t('createMultisigAccount.contactsTab')} {contacts.length}
        - {contacts.map(({ index, accountId, name, matrixId }) => ( + {contacts.map(({ index, accountId, name }) => (
      • } - > - - {matrixId} - - + />
      • ))}
      diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectAccountSignatories.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectAccountSignatories.tsx index f9e5eae870..51bf409f85 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectAccountSignatories.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectAccountSignatories.tsx @@ -1,6 +1,5 @@ import { useEffect, useState } from 'react'; import { groupBy, isEqual } from 'lodash'; -import { useUnit } from 'effector-react'; import { cnTw, includes, isEthereumAccountId, isStringsMatchQuery, RootExplorers, toAddress } from '@shared/lib/utils'; import { useI18n } from '@app/providers'; @@ -16,7 +15,6 @@ import { Accordion, BodyText, CaptionText, - HelpText, } from '@shared/ui'; import { TabItem } from '@shared/ui/types'; import { CreateContactModal } from '@widgets/ManageContactModal'; @@ -25,7 +23,6 @@ import { EmptyContactList } from '@entities/contact'; import { type Contact, type Account, ShardAccount, Wallet, Chain } from '@shared/core'; import { ContactItem, ExplorersPopover, WalletCardMd } from '@entities/wallet'; import { networkUtils } from '@entities/network'; -import { matrixModel } from '@entities/matrix'; const enum SignatoryTabs { ACCOUNTS = 'accounts', @@ -44,9 +41,6 @@ type Props = { export const SelectAccountSignatories = ({ isActive, accounts, wallets, contacts, chain, onSelect }: Props) => { const { t } = useI18n(); - const matrix = useUnit(matrixModel.$matrix); - const loginStatus = useUnit(matrixModel.$loginStatus); - const [query, setQuery] = useState(''); const [accountsQuery, setAccountsQuery] = useState(''); const [contactList, setContactList] = useState([]); @@ -67,12 +61,12 @@ export const SelectAccountSignatories = ({ isActive, accounts, wallets, contacts const isEthereumContact = isEthereumAccountId(c.accountId); const isEthereumChain = networkUtils.isEthereumBased(chain?.options); - return c.matrixId && isEthereumContact === isEthereumChain; + return isEthereumContact === isEthereumChain; }) .map((contact, index) => ({ ...contact, index: index.toString() })); setContactList(addressBookContacts); - }, [contacts.length, chain, loginStatus]); + }, [contacts.length, chain]); useEffect(() => { setSelectedAccounts({}); @@ -91,7 +85,6 @@ export const SelectAccountSignatories = ({ isActive, accounts, wallets, contacts toAdd.push({ ...a, index: a.accountId.toString(), - matrixId: matrix.userId, address, }); }); @@ -107,7 +100,6 @@ export const SelectAccountSignatories = ({ isActive, accounts, wallets, contacts ...account, index: account.accountId.toString(), address: toAddress(account.accountId), - matrixId: matrix.userId, }); } } @@ -121,7 +113,7 @@ export const SelectAccountSignatories = ({ isActive, accounts, wallets, contacts ); setAccountsList(groupedWithWallet); - }, [accounts.length, chain?.chainId, accountsQuery, loginStatus]); + }, [accounts.length, chain?.chainId, accountsQuery]); useEffect(() => { onSelect(selectedAccountsList, selectedContactsList); @@ -168,7 +160,7 @@ export const SelectAccountSignatories = ({ isActive, accounts, wallets, contacts }; const searchedContactList = contactList.filter((c) => { - return includes(c.address, query) || includes(c.matrixId, query) || includes(c.name, query); + return includes(c.address, query) || includes(c.name, query); }); const hasAccounts = Boolean(accounts.length); @@ -329,14 +321,7 @@ export const SelectAccountSignatories = ({ isActive, accounts, wallets, contacts address={contact.accountId} /> } - > - - {contact.matrixId} - - + /> ); diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx index f3464fc8b6..cda1c06838 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx @@ -1,10 +1,9 @@ import { useEffect, useState } from 'react'; -import { useUnit } from 'effector-react'; import { cnTw, includes, toAddress, RootExplorers, isEthereumAccountId } from '@shared/lib/utils'; import { useI18n } from '@app/providers'; import { useToggle } from '@shared/lib/hooks'; -import { Button, Checkbox, FootnoteText, Icon, SearchInput, SmallTitleText, Tabs, Tooltip, HelpText } from '@shared/ui'; +import { Button, Checkbox, FootnoteText, Icon, SearchInput, SmallTitleText, Tabs, Tooltip } from '@shared/ui'; import { TabItem } from '@shared/ui/types'; import { CreateContactModal } from '@widgets/ManageContactModal'; import { ExtendedContact, ExtendedWallet } from '../common/types'; @@ -12,7 +11,6 @@ import { EmptyContactList } from '@entities/contact'; import { type Contact, type Wallet, type Account, WalletType } from '@shared/core'; import { ContactItem, ExplorersPopover, accountUtils, walletUtils } from '@entities/wallet'; import { WalletItem } from './WalletItem'; -import { matrixModel } from '@entities/matrix'; const enum SignatoryTabs { WALLETS = 'wallets', @@ -30,9 +28,6 @@ type Props = { export const SelectSignatories = ({ isActive, wallets, accounts, contacts, onSelect }: Props) => { const { t } = useI18n(); - const matrix = useUnit(matrixModel.$matrix); - const loginStatus = useUnit(matrixModel.$loginStatus); - const [query, setQuery] = useState(''); const [contactList, setContactList] = useState([]); const [availableWallets, setAvailableWallets] = useState([]); @@ -49,7 +44,9 @@ export const SelectSignatories = ({ isActive, wallets, accounts, contacts, onSel if (accounts.length === 0) return; const addressBookContacts = contacts - .filter((c) => c.matrixId && !isEthereumAccountId(c.accountId)) + .filter((c) => { + return !isEthereumAccountId(c.accountId); + }) .map((contact, index) => ({ ...contact, index: index.toString() })); const { available, disabled } = wallets.reduce<{ @@ -72,7 +69,6 @@ export const SelectSignatories = ({ isActive, wallets, accounts, contacts, onSel index: index.toString(), address: toAddress(accountId), accountId: accountId, - matrixId: matrix.userId, }); } else { acc.disabled.push(wallet); @@ -86,7 +82,7 @@ export const SelectSignatories = ({ isActive, wallets, accounts, contacts, onSel setContactList(addressBookContacts); setAvailableWallets(available); setDisabledWallets(disabled); - }, [accounts.length, contacts.length, wallets.length, loginStatus]); + }, [accounts.length, contacts.length, wallets.length]); useEffect(() => { onSelect(selectedWalletsList, selectedContactsList); @@ -133,7 +129,7 @@ export const SelectSignatories = ({ isActive, wallets, accounts, contacts, onSel }; const searchedContactList = contactList.filter((c) => { - return includes(c.address, query) || includes(c.matrixId, query) || includes(c.name, query); + return includes(c.address, query) || includes(c.name, query); }); const getDisabledMessage = (type: WalletType) => { @@ -233,14 +229,7 @@ export const SelectSignatories = ({ isActive, wallets, accounts, contacts, onSel address={contact.accountId} explorers={RootExplorers} button={} - > - - {contact.matrixId} - - + /> ); diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/WalletForm.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/WalletForm.tsx index d23dd8d1b0..b5fa778fde 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/WalletForm.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/WalletForm.tsx @@ -9,7 +9,6 @@ import { accountUtils, walletModel, walletUtils } from '@entities/wallet'; import { networkModel, networkUtils } from '@entities/network'; import { ChainTitle } from '@entities/chain'; import { CryptoType, Signatory, type AccountId, type Chain, type ChainId, type MultisigAccount } from '@shared/core'; -import { matrixModel } from '@entities/matrix'; type MultisigAccountForm = { name: string; @@ -60,7 +59,6 @@ export const WalletForm = ({ }: Props) => { const { t } = useI18n(); - const matrix = useUnit(matrixModel.$matrix); const wallets = useUnit(walletModel.$wallets); const chains = useUnit(networkModel.$chains); @@ -102,8 +100,14 @@ export const WalletForm = ({ cryptoType, ); + const ownedSignatories = signatories.filter((s) => { + return walletUtils.getAccountsBy(wallets, (account) => account.accountId === s.accountId); + }); + + const hasOwnSignatory = ownedSignatories.length > 0; + const submitMstAccount: SubmitHandler = ({ name, threshold }) => { - const creator = signatories.find((s) => s.matrixId === matrix.userId); + const creator = hasOwnSignatory && ownedSignatories[0]; if (!threshold || !creator) return; @@ -111,7 +115,7 @@ export const WalletForm = ({ }; const noSignatoryWallet = wallets.every( - (wallet) => walletUtils.isWatchOnly(wallet) || walletUtils.isMultisig(wallet), + (wallet) => !walletUtils.isWatchOnly(wallet) || !walletUtils.isMultisig(wallet), ); const signatoriesWallets = walletUtils.getWalletsFilteredAccounts(wallets, { diff --git a/src/renderer/widgets/WalletDetails/model/__tests__/mocks/wallet-provider-mocks.ts b/src/renderer/widgets/WalletDetails/model/__tests__/mocks/wallet-provider-mocks.ts index 55e3120b95..c9c0ad0848 100644 --- a/src/renderer/widgets/WalletDetails/model/__tests__/mocks/wallet-provider-mocks.ts +++ b/src/renderer/widgets/WalletDetails/model/__tests__/mocks/wallet-provider-mocks.ts @@ -145,8 +145,6 @@ const multisiigWallet: MultisigWallet = { cryptoType: 0, chainType: 0, threshold: 2, - matrixRoomId: '0', - creatorAccountId: TEST_ACCOUNTS[1], signatories: [ { accountId: '0x01', diff --git a/src/renderer/widgets/WalletDetails/ui/wallets/MultisigWalletDetails.tsx b/src/renderer/widgets/WalletDetails/ui/wallets/MultisigWalletDetails.tsx index e148399d77..d2c4746c53 100644 --- a/src/renderer/widgets/WalletDetails/ui/wallets/MultisigWalletDetails.tsx +++ b/src/renderer/widgets/WalletDetails/ui/wallets/MultisigWalletDetails.tsx @@ -2,7 +2,7 @@ import { useMemo } from 'react'; import { useUnit } from 'effector-react'; import { Signatory, Wallet, AccountId, MultisigWallet } from '@shared/core'; -import { BaseModal, FootnoteText, Tabs, DropdownIconButton, HelpText } from '@shared/ui'; +import { BaseModal, FootnoteText, Tabs, DropdownIconButton } from '@shared/ui'; import { RootExplorers } from '@shared/lib/utils'; import { useModalClose, useToggle } from '@shared/lib/hooks'; import { useI18n } from '@app/providers'; @@ -26,7 +26,6 @@ import { accountUtils, permissionUtils, } from '@entities/wallet'; -import { matrixModel, matrixUtils } from '@entities/matrix'; type Props = { wallet: MultisigWallet; @@ -44,9 +43,6 @@ export const MultisigWalletDetails = ({ }: Props) => { const { t } = useI18n(); - const matrix = useUnit(matrixModel.$matrix); - const loginStatus = useUnit(matrixModel.$loginStatus); - const chains = useUnit(networkModel.$chains); const hasProxies = useUnit(walletProviderModel.$hasProxies); @@ -161,14 +157,7 @@ export const MultisigWalletDetails = ({ description={} /> } - > - - {matrix.userId} - - + /> ))}
    @@ -194,14 +183,7 @@ export const MultisigWalletDetails = ({ addressPrefix={singleChain.addressPrefix} /> } - > - - {matrix.userId} - - + /> ))}
@@ -221,14 +203,7 @@ export const MultisigWalletDetails = ({ address={signatory.accountId} explorers={explorers} button={} - > - - {signatory.matrixId} - - + /> ))} diff --git a/webpack/webpack.shared.ts b/webpack/webpack.shared.ts index f3b27c2e7e..bb07fd9611 100644 --- a/webpack/webpack.shared.ts +++ b/webpack/webpack.shared.ts @@ -1,5 +1,4 @@ // eslint-disable-next-line import/default -import CopyPlugin from 'copy-webpack-plugin'; import webpack, { Configuration } from 'webpack'; import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin'; import SimpleProgressWebpackPlugin from 'simple-progress-webpack-plugin'; @@ -115,10 +114,6 @@ const sharedConfig: Configuration = { plugins: [ new SimpleProgressWebpackPlugin({ format: 'minimal' }), - new CopyPlugin({ - patterns: [{ from: 'node_modules/@matrix-org/olm/olm.wasm', to: '' }], - }), - new webpack.ProvidePlugin({ Buffer: ['buffer', 'Buffer'], }), From 4a38ebca650df85bd2a8cc4eeb465582d981ecf0 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Wed, 26 Jun 2024 17:35:31 +0200 Subject: [PATCH 33/90] fix: jest pnpm and lock file --- jest.config.ts | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jest.config.ts b/jest.config.ts index 64b1367d94..573880587f 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -22,7 +22,7 @@ const swcConfig = { }; const config: Config = { preset: 'ts-jest', - testEnvironment: 'jest-environment-jsdom', + testEnvironment: 'jsdom', coverageReporters: ['json-summary', 'text', 'text-summary'], setupFilesAfterEnv: ['@testing-library/jest-dom'], coverageThreshold: { diff --git a/package.json b/package.json index 4412f13fe1..f9fe1bb343 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ }, "engines": { "node": ">=18.x", - "pnpm": ">=8.x" + "pnpm": ">=9.x" }, "dependencies": { "@apollo/client": "^3.7.1", From f051537f2ce5436a5e505a2225461be7122ab124 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Wed, 26 Jun 2024 17:38:35 +0200 Subject: [PATCH 34/90] fix: pnpm version --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index f9fe1bb343..56119e6f4b 100644 --- a/package.json +++ b/package.json @@ -204,7 +204,7 @@ "nodemon": "^2.0.18", "npm-run-all": "^4.1.5", "playwright": "^1.44.1", - "pnpm": "^8.6.11", + "pnpm": "^9.2.0", "postcss": "^8.4.31", "postcss-loader": "^7.3.3", "prettier": "^2.8.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 26698e6cc2..f863ac29d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -409,8 +409,8 @@ importers: specifier: ^1.44.1 version: 1.44.1 pnpm: - specifier: ^8.6.11 - version: 8.6.11 + specifier: ^9.2.0 + version: 9.4.0 postcss: specifier: ^8.4.31 version: 8.4.31 @@ -8078,9 +8078,9 @@ packages: resolution: {integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==} engines: {node: '>=6'} - pnpm@8.6.11: - resolution: {integrity: sha512-jqknppuj45tDzJsLcLqkAxytBHZXIx9JTYkGNq0/7pSRggpio9wRxTDj4NA2ilOHPlJ5BVjB5Ij5dx65woMi5A==} - engines: {node: '>=16.14'} + pnpm@9.4.0: + resolution: {integrity: sha512-9Um4pSydK4U2di+ZwHIiBe/Fr5E+d4NdvMw7CwssqefcgCK3gGLBcpHEjoh0nHDOiOtadPH6jEv14Yu0bIvYOg==} + engines: {node: '>=18.12'} hasBin: true polished@4.2.2: @@ -21158,7 +21158,7 @@ snapshots: transitivePeerDependencies: - typescript - pnpm@8.6.11: {} + pnpm@9.4.0: {} polished@4.2.2: dependencies: From c0ebc90115d0a17aead0b428c7be25baf07d4f40 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Wed, 3 Jul 2024 12:32:55 +0200 Subject: [PATCH 35/90] fix: network and name first --- .../CreateWallet/lib/create-multisig-utils.ts | 17 +-- .../widgets/CreateWallet/lib/types.ts | 4 +- .../model/__tests__/flow-model.test.ts | 2 +- .../widgets/CreateWallet/model/flow-model.ts | 6 +- .../widgets/CreateWallet/model/form-model.ts | 10 ++ .../ui/MultisigWallet/ConfirmationStep.tsx | 2 +- .../MultisigWallet/FlexibleMultisigWallet.tsx | 8 +- .../ui/MultisigWallet/MultisigWallet.tsx | 10 +- .../MultisigWallet/NameNetworkSelection.tsx | 81 ++++++++++++ .../ui/MultisigWallet/NameThresholdStep.tsx | 119 ------------------ ...tep.tsx => SelectSignatoriesThreshold.tsx} | 58 ++++++++- .../components/SelectSignatories.tsx | 15 +-- 12 files changed, 168 insertions(+), 164 deletions(-) create mode 100644 src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx delete mode 100644 src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameThresholdStep.tsx rename src/renderer/widgets/CreateWallet/ui/MultisigWallet/{SelectSignatoriesStep.tsx => SelectSignatoriesThreshold.tsx} (53%) diff --git a/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts b/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts index fe2fcf29b0..0d3630bfce 100644 --- a/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts +++ b/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts @@ -4,21 +4,20 @@ export const createMultisigUtils = { isSignStep, isSubmitStep, isConfirmStep, - isInitStep, - isNoneStep, - isNameThresholdStep, + isNameNetworkStep, + isSignatoriesThresholdStep, }; function isConfirmStep(step: Step) { return step === Step.CONFIRM; } -function isNameThresholdStep(step: Step) { - return step === Step.NAMETHRESHOLD; +function isSignatoriesThresholdStep(step: Step) { + return step === Step.SIGNATORIES_THRESHOLD; } -function isInitStep(step: Step) { - return step === Step.INIT; +function isNameNetworkStep(step: Step) { + return step === Step.NAME_NETWORK; } function isSignStep(step: Step) { @@ -28,7 +27,3 @@ function isSignStep(step: Step) { function isSubmitStep(step: Step) { return step === Step.SUBMIT; } - -function isNoneStep(step: Step): boolean { - return step === Step.NONE; -} diff --git a/src/renderer/widgets/CreateWallet/lib/types.ts b/src/renderer/widgets/CreateWallet/lib/types.ts index 19c5a80de7..83e1df9f0f 100644 --- a/src/renderer/widgets/CreateWallet/lib/types.ts +++ b/src/renderer/widgets/CreateWallet/lib/types.ts @@ -1,8 +1,8 @@ import { Account, Chain, Transaction } from '@shared/core'; export const enum Step { - INIT, - NAMETHRESHOLD, + NAME_NETWORK, + SIGNATORIES_THRESHOLD, CONFIRM, SIGN, SUBMIT, diff --git a/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts b/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts index bb491c24a8..9bfe5092ff 100644 --- a/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts +++ b/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts @@ -51,7 +51,7 @@ describe('widgets/CreateWallet/model/add-proxy-model', () => { params: [signerWallet.accounts[0] as unknown as ExtendedContact], }); - expect(scope.getState(flowModel.$step)).toEqual(Step.INIT); + expect(scope.getState(flowModel.$step)).toEqual(Step.NAME_NETWORK); await allSettled(formModel.$createMultisigForm.fields.chain.onChange, { scope, params: testChain }); await allSettled(formModel.$createMultisigForm.fields.name.onChange, { scope, params: 'some name' }); await allSettled(formModel.$createMultisigForm.fields.threshold.onChange, { scope, params: 2 }); diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index dd956bfb53..070786e1b2 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -44,7 +44,7 @@ const walletCreated = createEvent<{ threshold: number; }>(); const $selectedSigner = restore(selectedSignerChanged, null); -const $step = restore(stepChanged, Step.INIT).reset(flowFinished); +const $step = restore(stepChanged, Step.NAME_NETWORK).reset(flowFinished); const $fee = restore(feeChanged, ZERO_BALANCE); const $multisigDeposit = restore(multisigDepositChanged, ZERO_BALANCE); const $isFeeLoading = restore(isFeeLoadingChanged, true); @@ -220,7 +220,7 @@ const $fakeTx = combine( ); sample({ - clock: formModel.$createMultisigForm.submit, + clock: formModel.output.formSubmitted, source: formModel.$createMultisigForm.$isValid, filter: (isValid) => isValid, fn: () => Step.CONFIRM, @@ -380,7 +380,7 @@ sample({ sample({ clock: flowFinished, - fn: () => Step.INIT, + fn: () => Step.NAME_NETWORK, target: stepChanged, }); diff --git a/src/renderer/widgets/CreateWallet/model/form-model.ts b/src/renderer/widgets/CreateWallet/model/form-model.ts index f0a8dfb4a9..791584879c 100644 --- a/src/renderer/widgets/CreateWallet/model/form-model.ts +++ b/src/renderer/widgets/CreateWallet/model/form-model.ts @@ -1,5 +1,6 @@ import { createForm } from 'effector-forms'; import { combine, createEvent, restore } from 'effector'; +import { sample } from 'lodash'; import { Chain, CryptoType, MultisigAccount } from '@shared/core'; import chains from '@shared/config/chains/chains.json'; @@ -39,6 +40,7 @@ const $createMultisigForm = createForm({ const reset = createEvent(); const accountSignatoriesChanged = createEvent(); const contactSignatoriesChanged = createEvent(); +const formSubmitted = createEvent(); const $accountSignatories = restore(accountSignatoriesChanged, []).reset(reset); const $contactSignatories = restore(contactSignatoriesChanged, []).reset(reset); @@ -115,6 +117,11 @@ const $hasOwnSignatory = combine( })?.length, ); +sample({ + clock: $createMultisigForm.submit, + target: formSubmitted, +}); + export const formModel = { $createMultisigForm, $multisigAccountId, @@ -128,4 +135,7 @@ export const formModel = { contactSignatoriesChanged, accountSignatoriesChanged, }, + output: { + formSubmitted, + }, }; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx index 78e3499f5a..f5c10a7c13 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx @@ -122,7 +122,7 @@ export const ConfirmationStep = ({ chain, wallets = [], accounts = [], contacts />
- diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx index 7127b76332..f91b7715eb 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx @@ -8,8 +8,8 @@ import { useToggle } from '@shared/lib/hooks'; import { OperationResult } from '@entities/transaction'; import { ExtendedContact, ExtendedWallet } from './common/types'; import { ConfirmationStep } from './ConfirmationStep'; -import { NameThresholdStep } from './NameThresholdStep'; -import { SelectSignatoriesStep } from './SelectSignatoriesStep'; +import { NameNetworkSelection } from './NameNetworkSelection'; +import { SelectSignatoriesThreshold } from './SelectSignatoriesThreshold'; import { DEFAULT_TRANSITION } from '@shared/lib/utils'; import { flowModel } from '../../model/flow-model'; @@ -87,7 +87,7 @@ export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack } contentClass="flex h-[524px]" onClose={closeMultisigModal} > - +
)} - +
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx index da7fa7f9c7..08f817b3fb 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx @@ -7,12 +7,12 @@ import { BaseModal, HeaderTitleText } from '@shared/ui'; import { useI18n } from '@app/providers'; import { useToggle } from '@shared/lib/hooks'; import { ConfirmationStep } from './ConfirmationStep'; -import { NameThresholdStep } from './NameThresholdStep'; +import { NameNetworkSelection } from './NameNetworkSelection'; import { DEFAULT_TRANSITION } from '@shared/lib/utils'; import { flowModel } from '../../model/flow-model'; import { createMultisigUtils } from '../../lib/create-multisig-utils'; import { formModel } from '../../model/form-model'; -import { SelectSignatoriesStep } from './SelectSignatoriesStep'; +import { SelectSignatoriesThreshold } from './SelectSignatoriesThreshold'; import { Step } from '../../lib/types'; import { OperationSign, OperationSubmit } from '@features/operations'; @@ -75,8 +75,10 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { panelClass="w-[480px]" onClose={closeMultisigModal} > - {createMultisigUtils.isInitStep(activeStep) && } - {createMultisigUtils.isNameThresholdStep(activeStep) && } + {createMultisigUtils.isNameNetworkStep(activeStep) && } + {createMultisigUtils.isSignatoriesThresholdStep(activeStep) && ( + + )} {createMultisigUtils.isConfirmStep(activeStep) && ( )} diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx new file mode 100644 index 0000000000..0c99b254c0 --- /dev/null +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx @@ -0,0 +1,81 @@ +import { useUnit } from 'effector-react'; +import { useForm } from 'effector-forms'; +import { FormEvent } from 'react'; + +import { Button, Input, InputHint, Select } from '@shared/ui'; +import { useI18n } from '@app/providers'; +import { DropdownOption } from '@shared/ui/types'; +import { networkModel, networkUtils } from '@entities/network'; +import { ChainTitle } from '@entities/chain'; +import { type Chain } from '@shared/core'; +import { formModel } from '../../model/form-model'; +import { flowModel } from '../../model/flow-model'; +import { Step } from '../../lib/types'; + +const getChainOptions = (chains: Chain[]): DropdownOption[] => { + return chains + .filter((c) => networkUtils.isMultisigSupported(c.options)) + .map((chain) => ({ + id: chain.chainId.toString(), + element: , + value: chain, + })); +}; + +export const NameNetworkSelection = () => { + const { t } = useI18n(); + + const chains = useUnit(networkModel.$chains); + const { + fields: { name, chain }, + submit, + } = useForm(formModel.$createMultisigForm); + + const chainOptions = getChainOptions(Object.values(chains)); + const canContinue = name.isValid; + + const submitForm = (event: FormEvent) => { + event.preventDefault(); + submit(); + }; + + return ( +
+ {/* {t('createMultisigAccount.walletFormTitle')} */} + +
+
+ + + {name.errorText()} + +
+
+ - - {fields.name.errorText()} - -
-
- fields.threshold.onChange(value)} - /> - - {t('createMultisigAccount.thresholdHint')} - -
- - - {t('createMultisigAccount.multisigExistText')} - - -
- - -
-
-
- ); -}; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx similarity index 53% rename from src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesStep.tsx rename to src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx index 5f915a84e9..ecffa7c9fc 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx @@ -1,7 +1,7 @@ import { useUnit } from 'effector-react'; import { useForm } from 'effector-forms'; -import { Alert, Button } from '@shared/ui'; +import { Alert, Button, InputHint, Select } from '@shared/ui'; import { useI18n } from '@app/providers'; import { formModel } from '../../model/form-model'; import { flowModel } from '../../model/flow-model'; @@ -10,22 +10,42 @@ import { contactModel } from '@entities/contact'; import { SelectSignatories } from './components/SelectSignatories'; import { dictionary } from '@shared/lib/utils'; import { Step } from '../../lib/types'; +import { DropdownOption } from '@shared/ui/types'; +import { ExtendedContact } from './common/types'; -export const SelectSignatoriesStep = () => { +const getThresholdOptions = (optionsAmount: number): DropdownOption[] => { + if (optionsAmount === 0) return []; + + return Array.from({ length: optionsAmount }, (_, index) => { + const value = index + 2; + + return { + id: value.toString(), + element: value, + value, + }; + }); +}; + +interface Props { + signatories: ExtendedContact[]; +} + +export const SelectSignatoriesThreshold = ({ signatories }: Props) => { const { t } = useI18n(); const { - fields: { chain }, + fields: { chain, threshold }, } = useForm(formModel.$createMultisigForm); const multisigAlreadyExists = useUnit(formModel.$multisigAlreadyExists); const hasOwnSignatory = useUnit(formModel.$hasOwnSignatory); const accounts = useUnit(formModel.$availableAccounts); - const signatories = useUnit(formModel.$signatories); const wallets = useUnit(walletModel.$wallets); const contacts = useUnit(contactModel.$contacts); + const thresholdOptions = getThresholdOptions(signatories.length - 1); const hasEnoughSignatories = signatories.length >= 2; - const canContinue = hasOwnSignatory && hasEnoughSignatories && !multisigAlreadyExists; + const canSubmit = hasOwnSignatory && hasEnoughSignatories && !multisigAlreadyExists; return (
@@ -56,8 +76,34 @@ export const SelectSignatoriesStep = () => { {t('createMultisigAccount.notEnoughSignatories')}
+
+ + { + onAddressChange(value); + }} + onInput={setQuery} + /> +
+ ); +}; From 6b0d5ff562b7ebcbafa1bc1636103167673f8da7 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 9 Jul 2024 13:06:37 +0100 Subject: [PATCH 38/90] feat: style --- .../shared/api/translation/locales/en.json | 2 +- .../CreateWallet/lib/create-multisig-utils.ts | 5 + .../CreateWallet/model/signatory-model.ts | 16 + .../ui/MultisigWallet/MultisigWallet.tsx | 20 +- .../MultisigWallet/NameNetworkSelection.tsx | 19 +- .../SelectSignatoriesThreshold.tsx | 122 +++---- .../components/SelectSignatories.tsx | 315 ++---------------- .../MultisigWallet/components/Signatory.tsx | 38 ++- 8 files changed, 163 insertions(+), 374 deletions(-) diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index 51953574a3..deb46f634f 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -169,7 +169,7 @@ "thresholdHint": "Threshold of signatories required to execute a transaction", "thresholdName": "Threshold", "thresholdPlaceholder": "Select threshold", - "title": "Create Multisig Wallet", + "title": "Create multisig", "walletFormTitle": "Set up your wallet", "walletNameLabel": "Wallet name", "walletsTab": "Your wallets", diff --git a/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts b/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts index 0d3630bfce..bcf27b0edc 100644 --- a/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts +++ b/src/renderer/widgets/CreateWallet/lib/create-multisig-utils.ts @@ -6,6 +6,7 @@ export const createMultisigUtils = { isConfirmStep, isNameNetworkStep, isSignatoriesThresholdStep, + isNotFirstStep, }; function isConfirmStep(step: Step) { @@ -27,3 +28,7 @@ function isSignStep(step: Step) { function isSubmitStep(step: Step) { return step === Step.SUBMIT; } + +function isNotFirstStep(step: Step) { + return step > Step.NAME_NETWORK; +} diff --git a/src/renderer/widgets/CreateWallet/model/signatory-model.ts b/src/renderer/widgets/CreateWallet/model/signatory-model.ts index 844dc49731..05125c1641 100644 --- a/src/renderer/widgets/CreateWallet/model/signatory-model.ts +++ b/src/renderer/widgets/CreateWallet/model/signatory-model.ts @@ -3,6 +3,8 @@ import { createEvent, createStore, sample } from 'effector'; import { SignatoryInfo } from '../lib/types'; const signatoriesChanged = createEvent(); +const signatoryDeleted = createEvent(); + const $signatories = createStore>>(new Map([[0, { name: '', address: '' }]])); sample({ @@ -17,9 +19,23 @@ sample({ target: $signatories, }); +sample({ + clock: signatoryDeleted, + source: $signatories, + filter: (signatories, index) => signatories.has(index), + fn: (signatories, index) => { + signatories.delete(index); + + // we need to return new Map to trigger re-render + return new Map(signatories); + }, + target: $signatories, +}); + export const signatoryModel = { $signatories, events: { signatoriesChanged, + signatoryDeleted, }, }; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx index 08f817b3fb..89355ab449 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx @@ -15,6 +15,7 @@ import { formModel } from '../../model/form-model'; import { SelectSignatoriesThreshold } from './SelectSignatoriesThreshold'; import { Step } from '../../lib/types'; import { OperationSign, OperationSubmit } from '@features/operations'; +import { ChainTitle } from '@entities/chain'; type Props = { isOpen: boolean; @@ -61,8 +62,20 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { return ; const modalTitle = ( -
- {t('createMultisigAccount.title')} +
+ + {t('createMultisigAccount.title')} + {createMultisigUtils.isNotFirstStep(activeStep) && ( + <> + on + + + )} +
); @@ -72,7 +85,8 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { closeButton title={modalTitle} isOpen={isModalOpen} - panelClass="w-[480px]" + contentClass="flex" + panelClass="w-[784px]" onClose={closeMultisigModal} > {createMultisigUtils.isNameNetworkStep(activeStep) && } diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx index 0c99b254c0..b212f90b24 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx @@ -2,7 +2,7 @@ import { useUnit } from 'effector-react'; import { useForm } from 'effector-forms'; import { FormEvent } from 'react'; -import { Button, Input, InputHint, Select } from '@shared/ui'; +import { Button, FootnoteText, Input, InputHint, Select, SmallTitleText } from '@shared/ui'; import { useI18n } from '@app/providers'; import { DropdownOption } from '@shared/ui/types'; import { networkModel, networkUtils } from '@entities/network'; @@ -40,12 +40,15 @@ export const NameNetworkSelection = () => { }; return ( -
- {/* {t('createMultisigAccount.walletFormTitle')} */} - -
+
+ Step 1 + + Select the network and name for your multisig wallet + +
{ threshold.onChange(value)} +
+ Step 2 + + Set the signatory wallet of your flexible multisig and how many need to confirm to execute a valid transaction + +
+ { + formModel.events.accountSignatoriesChanged(accounts); + formModel.events.contactSignatoriesChanged(contacts); + }} /> - - {t('createMultisigAccount.thresholdHint')} - -
-
- - {t('createMultisigAccount.multisigExistText')} - -
-
- - +
+ 0} + title={t('createMultisigAccount.noOwnSignatoryTitle')} + variant="error" + > + {t('createMultisigAccount.noOwnSignatory')} + + + {t('createMultisigAccount.notEnoughSignatories')} + +
+
+ +
+
+ +
{ }} onInput={setQuery} /> + {canBeDeleted && onDelete && ( + onDelete(index)} /> + )}
); }; From ed5623468bf8fce35b7e54f8ab3e7aa52e4c14e2 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 9 Jul 2024 13:50:27 +0100 Subject: [PATCH 39/90] chore: translation --- src/renderer/shared/api/translation/locales/en.json | 9 +++++++++ .../ui/MultisigWallet/NameNetworkSelection.tsx | 9 +++++---- .../ui/MultisigWallet/SelectSignatoriesThreshold.tsx | 6 ++++-- .../ui/MultisigWallet/components/SelectSignatories.tsx | 9 +-------- .../ui/MultisigWallet/components/Signatory.tsx | 8 +++++--- 5 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index deb46f634f..17112058b0 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -112,6 +112,7 @@ "accountsTab": "Accounts", "addContact": "Add new", "addContactsButton": "Add selected", + "addNewSignatory": "Add new signatory", "addSignatoryButton": "Add signatory", "alertTitle": "Select wallet", "availableLabel": "Available", @@ -140,9 +141,12 @@ }, "multisigExistText": "Multisig account with selected signatories and threshold already exists", "multisigExistTitle": "Account already exists", + "multisigStep": "Step { step }", "nameDescription": "Give a name to your multisig account", "nameLabel": "Account", + "nameNetworkDescription": "Select the network and name for your multisig wallet", "namePlaceholder": "Choose wallet name", + "networkDescription": "The multisig will only work on this network, if you want to use a different network, you will need to create a new multisig", "newMultisigTitle": "New multisig", "noOwnSignatory": "You need at least 1 owned account as part of the signatories", "noOwnSignatoryTitle": "No owned account", @@ -150,10 +154,15 @@ "noWalletsLabel": "The wallet list is empty", "notEnoughSignatories": "You need to select at least 2 signatories", "notEnoughSignatoriesTitle": "Not enough signatories", + "ownAccountSelection": "Your account", "searchContactPlaceholder": "Search", "selectedSignatoriesTitle": "Selected signatories", "signatoriesDescription": "Add signatories to your multisig account", "signatoriesLabel": "Signatories", + "signatoryAddress": "Signatory address", + "signatoryNameLabel": "Signatory name", + "signatorySelection": "Choose or paste an address", + "signatoryThresholdDescription": "Set the signatory wallet of your flexible multisig and how many need to confirm to execute a valid transaction", "signatoryTitle": "Select signatories", "signingWith": "Signing with", "singleChain": { diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx index b212f90b24..5f6b412933 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx @@ -41,9 +41,11 @@ export const NameNetworkSelection = () => { return (
- Step 1 + + {t('createMultisigAccount.step', { step: 1 })} + - Select the network and name for your multisig wallet + {t('createMultisigAccount.nameNetworkDescription')}
@@ -69,8 +71,7 @@ export const NameNetworkSelection = () => { onChange={({ value }) => chain.onChange(value)} /> - New multisig will work in only this network, if you want to use different network, you will need to create - new multisig + {t('createMultisigAccount.networkDescription')}
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx index 265a9a543f..0f35d312ed 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx @@ -56,9 +56,11 @@ export const SelectSignatoriesThreshold = ({ signatories }: Props) => { return (
- Step 2 + + {t('createMultisigAccount.step', { step: 2 })} + - Set the signatory wallet of your flexible multisig and how many need to confirm to execute a valid transaction + {t('createMultisigAccount.signatoryThresholdDescription')}
{ const { t } = useI18n(); - const [query, setQuery] = useState(''); - // const [accountsQuery, setAccountsQuery] = useState(''); const [contactList, setContactList] = useState([]); const [accountsList, setAccountsList] = useState>>( {}, @@ -127,7 +120,7 @@ export const SelectSignatories = ({ isActive, accounts, wallets, contacts, chain suffixElement={} onClick={onAddSignatoryClick} > - Add new signatory + {t('createMulisigAccount.addNewSignatory')}
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx index 1cd6b16ec6..0961b32d4d 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx @@ -72,13 +72,15 @@ export const Signatory = ({ index, onDelete, canBeDeleted = true }: Props) => {
); - const accountInputLabel = canBeDeleted ? t('Signatory address') : t('Your account'); + const accountInputLabel = canBeDeleted + ? t('createMultisigAccount.signatoryAddress') + : t('createMultisigAccount.ownAccountSelection'); return (
{ Date: Tue, 9 Jul 2024 14:05:59 +0100 Subject: [PATCH 40/90] fix: lockfile --- pnpm-lock.yaml | 10449 ++++++++++++++++++----------------------------- 1 file changed, 3967 insertions(+), 6482 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2809f14ab6..bb30b01b9a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,7 @@ settings: excludeLinksFromLockfile: false importers: + .: dependencies: '@apollo/client': @@ -484,32 +485,27 @@ importers: version: 3.6.2 packages: + 7zip-bin@5.2.0: - resolution: - { integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A== } + resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} '@aashutoshrathi/word-wrap@1.2.6': - resolution: - { integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} '@adobe/css-tools@4.3.3': - resolution: - { integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ== } + resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} '@alloc/quick-lru@5.2.0': - resolution: - { integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} '@ampproject/remapping@2.2.1': - resolution: - { integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} '@apollo/client@3.7.1': - resolution: - { integrity: sha512-xu5M/l7p9gT9Fx7nF3AQivp0XukjB7TM7tOd5wifIpI8RskYveL4I+rpTijzWrnqCPZabkbzJKH7WEAKdctt9w== } + resolution: {integrity: sha512-xu5M/l7p9gT9Fx7nF3AQivp0XukjB7TM7tOd5wifIpI8RskYveL4I+rpTijzWrnqCPZabkbzJKH7WEAKdctt9w==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 graphql-ws: ^5.5.5 @@ -527,1198 +523,999 @@ packages: optional: true '@babel/code-frame@7.23.5': - resolution: - { integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} '@babel/compat-data@7.23.5': - resolution: - { integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} '@babel/core@7.12.9': - resolution: - { integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} + engines: {node: '>=6.9.0'} '@babel/core@7.18.6': - resolution: - { integrity: sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==} + engines: {node: '>=6.9.0'} '@babel/core@7.23.5': - resolution: - { integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} + engines: {node: '>=6.9.0'} '@babel/generator@7.23.5': - resolution: - { integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} + engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.22.5': - resolution: - { integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': - resolution: - { integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.22.15': - resolution: - { integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} '@babel/helper-create-class-features-plugin@7.23.5': - resolution: - { integrity: sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-create-regexp-features-plugin@7.22.15': - resolution: - { integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-define-polyfill-provider@0.1.5': - resolution: - { integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg== } + resolution: {integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==} peerDependencies: '@babel/core': ^7.4.0-0 '@babel/helper-define-polyfill-provider@0.4.3': - resolution: - { integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== } + resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 '@babel/helper-environment-visitor@7.22.20': - resolution: - { integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} '@babel/helper-function-name@7.23.0': - resolution: - { integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} '@babel/helper-hoist-variables@7.22.5': - resolution: - { integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} '@babel/helper-member-expression-to-functions@7.23.0': - resolution: - { integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.22.15': - resolution: - { integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} '@babel/helper-module-transforms@7.23.3': - resolution: - { integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-optimise-call-expression@7.22.5': - resolution: - { integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} '@babel/helper-plugin-utils@7.10.4': - resolution: - { integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== } + resolution: {integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==} '@babel/helper-plugin-utils@7.22.5': - resolution: - { integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} '@babel/helper-remap-async-to-generator@7.22.20': - resolution: - { integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-replace-supers@7.22.20': - resolution: - { integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-simple-access@7.22.5': - resolution: - { integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - resolution: - { integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} '@babel/helper-split-export-declaration@7.22.6': - resolution: - { integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.23.4': - resolution: - { integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.22.20': - resolution: - { integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.23.5': - resolution: - { integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} '@babel/helper-wrap-function@7.22.20': - resolution: - { integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} '@babel/helpers@7.23.5': - resolution: - { integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} + engines: {node: '>=6.9.0'} '@babel/highlight@7.23.4': - resolution: - { integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} '@babel/parser@7.23.5': - resolution: - { integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} + engines: {node: '>=6.0.0'} hasBin: true '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3': - resolution: - { integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3': - resolution: - { integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3': - resolution: - { integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-proposal-class-properties@7.18.6': - resolution: - { integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-decorators@7.23.5': - resolution: - { integrity: sha512-6IsY8jOeWibsengGlWIezp7cuZEFzNlAghFpzh9wiZwhQ42/hRcPnY/QV9HJoKTlujupinSlnQPiEy/u2C1ZfQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-6IsY8jOeWibsengGlWIezp7cuZEFzNlAghFpzh9wiZwhQ42/hRcPnY/QV9HJoKTlujupinSlnQPiEy/u2C1ZfQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-export-default-from@7.23.3': - resolution: - { integrity: sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6': - resolution: - { integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-object-rest-spread@7.12.1': - resolution: - { integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== } + resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-object-rest-spread@7.20.7': - resolution: - { integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-optional-chaining@7.21.0': - resolution: - { integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-private-methods@7.18.6': - resolution: - { integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': - resolution: - { integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-private-property-in-object@7.21.11': - resolution: - { integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} + engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-async-generators@7.8.4': - resolution: - { integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== } + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-bigint@7.8.3': - resolution: - { integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== } + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-properties@7.12.13': - resolution: - { integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== } + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: - { integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-decorators@7.23.3': - resolution: - { integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-dynamic-import@7.8.3': - resolution: - { integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== } + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-export-default-from@7.23.3': - resolution: - { integrity: sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-export-namespace-from@7.8.3': - resolution: - { integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== } + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-flow@7.23.3': - resolution: - { integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-assertions@7.23.3': - resolution: - { integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-attributes@7.23.3': - resolution: - { integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-meta@7.10.4': - resolution: - { integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== } + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-json-strings@7.8.3': - resolution: - { integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== } + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-jsx@7.12.1': - resolution: - { integrity: sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== } + resolution: {integrity: sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-jsx@7.23.3': - resolution: - { integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: - { integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== } + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: - { integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== } + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: - { integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== } + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: - { integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== } + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: - { integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== } + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: - { integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== } + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: - { integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: - { integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-typescript@7.23.3': - resolution: - { integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-unicode-sets-regex@7.18.6': - resolution: - { integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-transform-arrow-functions@7.23.3': - resolution: - { integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-async-generator-functions@7.23.4': - resolution: - { integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-async-to-generator@7.23.3': - resolution: - { integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-block-scoped-functions@7.23.3': - resolution: - { integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-block-scoping@7.23.4': - resolution: - { integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-class-properties@7.23.3': - resolution: - { integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-class-static-block@7.23.4': - resolution: - { integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 '@babel/plugin-transform-classes@7.23.5': - resolution: - { integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-computed-properties@7.23.3': - resolution: - { integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-destructuring@7.23.3': - resolution: - { integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-dotall-regex@7.23.3': - resolution: - { integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-duplicate-keys@7.23.3': - resolution: - { integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-dynamic-import@7.23.4': - resolution: - { integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-exponentiation-operator@7.23.3': - resolution: - { integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-export-namespace-from@7.23.4': - resolution: - { integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-flow-strip-types@7.23.3': - resolution: - { integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-for-of@7.23.3': - resolution: - { integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-function-name@7.23.3': - resolution: - { integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-json-strings@7.23.4': - resolution: - { integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-literals@7.23.3': - resolution: - { integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-logical-assignment-operators@7.23.4': - resolution: - { integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-member-expression-literals@7.23.3': - resolution: - { integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-modules-amd@7.23.3': - resolution: - { integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-modules-commonjs@7.23.3': - resolution: - { integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-modules-systemjs@7.23.3': - resolution: - { integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-modules-umd@7.23.3': - resolution: - { integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-named-capturing-groups-regex@7.22.5': - resolution: - { integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-transform-new-target@7.23.3': - resolution: - { integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-nullish-coalescing-operator@7.23.4': - resolution: - { integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-numeric-separator@7.23.4': - resolution: - { integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-object-rest-spread@7.23.4': - resolution: - { integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-object-super@7.23.3': - resolution: - { integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-optional-catch-binding@7.23.4': - resolution: - { integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-optional-chaining@7.23.4': - resolution: - { integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-parameters@7.23.3': - resolution: - { integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-private-methods@7.23.3': - resolution: - { integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-private-property-in-object@7.23.4': - resolution: - { integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-property-literals@7.23.3': - resolution: - { integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-react-constant-elements@7.23.3': - resolution: - { integrity: sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-react-display-name@7.23.3': - resolution: - { integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-react-jsx-development@7.22.5': - resolution: - { integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-react-jsx@7.23.4': - resolution: - { integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-react-pure-annotations@7.23.3': - resolution: - { integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-regenerator@7.23.3': - resolution: - { integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-reserved-words@7.23.3': - resolution: - { integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-shorthand-properties@7.23.3': - resolution: - { integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-spread@7.23.3': - resolution: - { integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-sticky-regex@7.23.3': - resolution: - { integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-template-literals@7.23.3': - resolution: - { integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-typeof-symbol@7.23.3': - resolution: - { integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-typescript@7.23.5': - resolution: - { integrity: sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-unicode-escapes@7.23.3': - resolution: - { integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-unicode-property-regex@7.23.3': - resolution: - { integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-unicode-regex@7.23.3': - resolution: - { integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-unicode-sets-regex@7.23.3': - resolution: - { integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/preset-env@7.23.5': - resolution: - { integrity: sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/preset-flow@7.23.3': - resolution: - { integrity: sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/preset-modules@0.1.6-no-external-plugins': - resolution: - { integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== } + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 '@babel/preset-react@7.23.3': - resolution: - { integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/preset-typescript@7.23.3': - resolution: - { integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/register@7.22.15': - resolution: - { integrity: sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/regjsgen@0.8.0': - resolution: - { integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== } + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} '@babel/runtime@7.23.5': - resolution: - { integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} + engines: {node: '>=6.9.0'} '@babel/runtime@7.23.6': - resolution: - { integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} + engines: {node: '>=6.9.0'} '@babel/runtime@7.23.9': - resolution: - { integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} + engines: {node: '>=6.9.0'} '@babel/runtime@7.5.5': - resolution: - { integrity: sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ== } + resolution: {integrity: sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==} '@babel/runtime@7.7.2': - resolution: - { integrity: sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw== } + resolution: {integrity: sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==} '@babel/template@7.22.15': - resolution: - { integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} '@babel/traverse@7.23.5': - resolution: - { integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} + engines: {node: '>=6.9.0'} '@babel/types@7.23.5': - resolution: - { integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} + engines: {node: '>=6.9.0'} '@base2/pretty-print-object@1.0.1': - resolution: - { integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA== } + resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} '@bcoe/v8-coverage@0.2.3': - resolution: - { integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== } + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} '@cnakazawa/watch@1.0.4': - resolution: - { integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== } - engines: { node: '>=0.1.95' } + resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} + engines: {node: '>=0.1.95'} hasBin: true '@colors/colors@1.5.0': - resolution: - { integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== } - engines: { node: '>=0.1.90' } + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} '@commitlint/cli@17.3.0': - resolution: - { integrity: sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg==} + engines: {node: '>=v14'} hasBin: true '@commitlint/config-conventional@17.0.3': - resolution: - { integrity: sha512-HCnzTm5ATwwwzNVq5Y57poS0a1oOOcd5pc1MmBpLbGmSysc4i7F/++JuwtdFPu16sgM3H9J/j2zznRLOSGVO2A== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-HCnzTm5ATwwwzNVq5Y57poS0a1oOOcd5pc1MmBpLbGmSysc4i7F/++JuwtdFPu16sgM3H9J/j2zznRLOSGVO2A==} + engines: {node: '>=v14'} '@commitlint/config-validator@17.8.1': - resolution: - { integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==} + engines: {node: '>=v14'} '@commitlint/ensure@17.8.1': - resolution: - { integrity: sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==} + engines: {node: '>=v14'} '@commitlint/execute-rule@17.8.1': - resolution: - { integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==} + engines: {node: '>=v14'} '@commitlint/format@17.8.1': - resolution: - { integrity: sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==} + engines: {node: '>=v14'} '@commitlint/is-ignored@17.8.1': - resolution: - { integrity: sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==} + engines: {node: '>=v14'} '@commitlint/lint@17.8.1': - resolution: - { integrity: sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==} + engines: {node: '>=v14'} '@commitlint/load@17.8.1': - resolution: - { integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==} + engines: {node: '>=v14'} '@commitlint/message@17.8.1': - resolution: - { integrity: sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==} + engines: {node: '>=v14'} '@commitlint/parse@17.8.1': - resolution: - { integrity: sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==} + engines: {node: '>=v14'} '@commitlint/read@17.8.1': - resolution: - { integrity: sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==} + engines: {node: '>=v14'} '@commitlint/resolve-extends@17.8.1': - resolution: - { integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==} + engines: {node: '>=v14'} '@commitlint/rules@17.8.1': - resolution: - { integrity: sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==} + engines: {node: '>=v14'} '@commitlint/to-lines@17.8.1': - resolution: - { integrity: sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==} + engines: {node: '>=v14'} '@commitlint/top-level@17.8.1': - resolution: - { integrity: sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==} + engines: {node: '>=v14'} '@commitlint/types@17.8.1': - resolution: - { integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ== } - engines: { node: '>=v14' } + resolution: {integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==} + engines: {node: '>=v14'} '@cspotcode/source-map-support@0.8.1': - resolution: - { integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== } - engines: { node: '>=12' } + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} '@design-systems/utils@2.12.0': - resolution: - { integrity: sha512-Y/d2Zzr+JJfN6u1gbuBUb1ufBuLMJJRZQk+dRmw8GaTpqKx5uf7cGUYGTwN02dIb3I+Tf+cW8jcGBTRiFxdYFg== } + resolution: {integrity: sha512-Y/d2Zzr+JJfN6u1gbuBUb1ufBuLMJJRZQk+dRmw8GaTpqKx5uf7cGUYGTwN02dIb3I+Tf+cW8jcGBTRiFxdYFg==} peerDependencies: '@types/react': '*' react: '>= 16.8.6' react-dom: '>= 16.8.6' '@develar/schema-utils@2.6.5': - resolution: - { integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig== } - engines: { node: '>= 8.9.0' } + resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} + engines: {node: '>= 8.9.0'} '@devtools-ds/object-inspector@1.2.1': - resolution: - { integrity: sha512-nrAVVj4c4Iv9958oE4HA7Mk6T+4Mn/4xBRlFDeX4Ps6SMzsqO8bKhw/y6+bOfNyb/TYHmC0/pnPS68GDVZcg5Q== } + resolution: {integrity: sha512-nrAVVj4c4Iv9958oE4HA7Mk6T+4Mn/4xBRlFDeX4Ps6SMzsqO8bKhw/y6+bOfNyb/TYHmC0/pnPS68GDVZcg5Q==} peerDependencies: react: '>= 16.8.6' '@devtools-ds/object-parser@1.2.1': - resolution: - { integrity: sha512-6qB+THhQfJqXyHn8wpJ1KFxXcbpLTlRyCVmkelhr0c1+MPLZcC+0XJxpVZ1AOEXPa6CWVZThBYSCvnYQEvfCqw== } + resolution: {integrity: sha512-6qB+THhQfJqXyHn8wpJ1KFxXcbpLTlRyCVmkelhr0c1+MPLZcC+0XJxpVZ1AOEXPa6CWVZThBYSCvnYQEvfCqw==} '@devtools-ds/themes@1.2.1': - resolution: - { integrity: sha512-4/KFsHnokGxUq8CSCchINcVBb6fQ74HtEfNtMuitGtGg3VCRV0kaVSOsz6wzShzhLEaVLd5coSRQKaZj7yx72w== } + resolution: {integrity: sha512-4/KFsHnokGxUq8CSCchINcVBb6fQ74HtEfNtMuitGtGg3VCRV0kaVSOsz6wzShzhLEaVLd5coSRQKaZj7yx72w==} peerDependencies: react: '>= 16.8.6' '@devtools-ds/tree@1.2.1': - resolution: - { integrity: sha512-2ZHG28oWJno0gD+20EoSJO0yffm6JS5r7YzYhGMkrnLGvcCRZuwXSxMmIshSPLIR0cjidiAfGCqsrigHIR4ZQA== } + resolution: {integrity: sha512-2ZHG28oWJno0gD+20EoSJO0yffm6JS5r7YzYhGMkrnLGvcCRZuwXSxMmIshSPLIR0cjidiAfGCqsrigHIR4ZQA==} peerDependencies: react: '>= 16.8.6' '@discoveryjs/json-ext@0.5.7': - resolution: - { integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} '@electron/asar@3.2.8': - resolution: - { integrity: sha512-cmskk5M06ewHMZAplSiF4AlME3IrnnZhKnWbtwKVLRkdJkKyUVjMLhDIiPIx/+6zQWVlKX/LtmK9xDme7540Sg== } - engines: { node: '>=10.12.0' } + resolution: {integrity: sha512-cmskk5M06ewHMZAplSiF4AlME3IrnnZhKnWbtwKVLRkdJkKyUVjMLhDIiPIx/+6zQWVlKX/LtmK9xDme7540Sg==} + engines: {node: '>=10.12.0'} hasBin: true '@electron/get@2.0.3': - resolution: - { integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} + engines: {node: '>=12'} '@electron/notarize@2.1.0': - resolution: - { integrity: sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA==} + engines: {node: '>= 10.0.0'} '@electron/notarize@2.3.0': - resolution: - { integrity: sha512-EiTBU0BwE7HZZjAG1fFWQaiQpCuPrVGn7jPss1kUjD6eTTdXXd29RiZqEqkgN7xqt/Pgn4g3I7Saqovanrfj3w== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-EiTBU0BwE7HZZjAG1fFWQaiQpCuPrVGn7jPss1kUjD6eTTdXXd29RiZqEqkgN7xqt/Pgn4g3I7Saqovanrfj3w==} + engines: {node: '>= 10.0.0'} '@electron/osx-sign@1.0.5': - resolution: - { integrity: sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww== } - engines: { node: '>=12.0.0' } + resolution: {integrity: sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==} + engines: {node: '>=12.0.0'} hasBin: true '@electron/universal@1.4.1': - resolution: - { integrity: sha512-lE/U3UNw1YHuowNbTmKNs9UlS3En3cPgwM5MI+agIgr/B1hSze9NdOP0qn7boZaI9Lph8IDv3/24g9IxnJP7aQ== } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-lE/U3UNw1YHuowNbTmKNs9UlS3En3cPgwM5MI+agIgr/B1hSze9NdOP0qn7boZaI9Lph8IDv3/24g9IxnJP7aQ==} + engines: {node: '>=8.6'} '@emotion/is-prop-valid@1.2.1': - resolution: - { integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw== } + resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} '@emotion/memoize@0.8.1': - resolution: - { integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== } + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} '@emotion/stylis@0.8.5': - resolution: - { integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== } + resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} '@emotion/unitless@0.7.5': - resolution: - { integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== } + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} '@emotion/unitless@0.8.1': - resolution: - { integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== } + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} '@eslint/eslintrc@1.4.1': - resolution: - { integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@formatjs/ecma402-abstract@1.18.0': - resolution: - { integrity: sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA== } + resolution: {integrity: sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA==} '@formatjs/icu-messageformat-parser@2.7.3': - resolution: - { integrity: sha512-X/jy10V9S/vW+qlplqhMUxR8wErQ0mmIYSq4mrjpjDl9mbuGcCILcI1SUYkL5nlM4PJqpc0KOS0bFkkJNPxYRw== } + resolution: {integrity: sha512-X/jy10V9S/vW+qlplqhMUxR8wErQ0mmIYSq4mrjpjDl9mbuGcCILcI1SUYkL5nlM4PJqpc0KOS0bFkkJNPxYRw==} '@formatjs/icu-skeleton-parser@1.7.0': - resolution: - { integrity: sha512-Cfdo/fgbZzpN/jlN/ptQVe0lRHora+8ezrEeg2RfrNjyp+YStwBy7cqDY8k5/z2LzXg6O0AdzAV91XS0zIWv+A== } + resolution: {integrity: sha512-Cfdo/fgbZzpN/jlN/ptQVe0lRHora+8ezrEeg2RfrNjyp+YStwBy7cqDY8k5/z2LzXg6O0AdzAV91XS0zIWv+A==} '@formatjs/intl-localematcher@0.5.2': - resolution: - { integrity: sha512-txaaE2fiBMagLrR4jYhxzFO6wEdEG4TPMqrzBAcbr4HFUYzH/YC+lg6OIzKCHm8WgDdyQevxbAAV1OgcXctuGw== } + resolution: {integrity: sha512-txaaE2fiBMagLrR4jYhxzFO6wEdEG4TPMqrzBAcbr4HFUYzH/YC+lg6OIzKCHm8WgDdyQevxbAAV1OgcXctuGw==} '@gar/promisify@1.1.3': - resolution: - { integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== } + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} '@graphql-typed-document-node/core@3.2.0': - resolution: - { integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== } + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 '@headlessui/react@1.7.17': - resolution: - { integrity: sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow== } - engines: { node: '>=10' } + resolution: {integrity: sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow==} + engines: {node: '>=10'} peerDependencies: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 '@headlessui/tailwindcss@0.1.2': - resolution: - { integrity: sha512-AQNESz+f1grCxifrocOE6hDMDFqhqY0g3xrSGOS0ocGkmVkssaBzXaAPAPNSs/nHmr4ZUhfl5THQpYrvaouWlQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-AQNESz+f1grCxifrocOE6hDMDFqhqY0g3xrSGOS0ocGkmVkssaBzXaAPAPNSs/nHmr4ZUhfl5THQpYrvaouWlQ==} + engines: {node: '>=10'} peerDependencies: tailwindcss: ^3.0 '@humanwhocodes/config-array@0.9.5': - resolution: - { integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== } - engines: { node: '>=10.10.0' } + resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} + engines: {node: '>=10.10.0'} '@humanwhocodes/object-schema@1.2.1': - resolution: - { integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== } + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} '@ioredis/commands@1.2.0': - resolution: - { integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== } + resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} '@isaacs/cliui@8.0.2': - resolution: - { integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== } - engines: { node: '>=12' } + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} '@istanbuljs/load-nyc-config@1.1.0': - resolution: - { integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} '@istanbuljs/schema@0.1.3': - resolution: - { integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} '@jest/console@29.7.0': - resolution: - { integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/core@29.7.0': - resolution: - { integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -1726,39 +1523,32 @@ packages: optional: true '@jest/create-cache-key-function@29.7.0': - resolution: - { integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/environment@29.7.0': - resolution: - { integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/expect-utils@29.7.0': - resolution: - { integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/expect@29.7.0': - resolution: - { integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/fake-timers@29.7.0': - resolution: - { integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/globals@29.7.0': - resolution: - { integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/reporters@29.7.0': - resolution: - { integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -1766,309 +1556,250 @@ packages: optional: true '@jest/schemas@29.6.3': - resolution: - { integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/source-map@29.6.3': - resolution: - { integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/test-result@29.7.0': - resolution: - { integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/test-sequencer@29.7.0': - resolution: - { integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/transform@26.6.2': - resolution: - { integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== } - engines: { node: '>= 10.14.2' } + resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} + engines: {node: '>= 10.14.2'} '@jest/transform@29.7.0': - resolution: - { integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/types@26.6.2': - resolution: - { integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== } - engines: { node: '>= 10.14.2' } + resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} + engines: {node: '>= 10.14.2'} '@jest/types@27.5.1': - resolution: - { integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} '@jest/types@29.6.3': - resolution: - { integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jridgewell/gen-mapping@0.3.3': - resolution: - { integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} '@jridgewell/resolve-uri@3.1.1': - resolution: - { integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} '@jridgewell/set-array@1.1.2': - resolution: - { integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} '@jridgewell/source-map@0.3.5': - resolution: - { integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== } + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} '@jridgewell/sourcemap-codec@1.4.15': - resolution: - { integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== } + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} '@jridgewell/trace-mapping@0.3.20': - resolution: - { integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== } + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} '@jridgewell/trace-mapping@0.3.9': - resolution: - { integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== } + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} '@leichtgewicht/ip-codec@2.0.4': - resolution: - { integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== } + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} '@lit-labs/ssr-dom-shim@1.1.2': - resolution: - { integrity: sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g== } + resolution: {integrity: sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==} '@lit/reactive-element@1.6.3': - resolution: - { integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ== } + resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} '@malept/cross-spawn-promise@1.1.1': - resolution: - { integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== } - engines: { node: '>= 10' } + resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==} + engines: {node: '>= 10'} '@malept/flatpak-bundler@0.4.0': - resolution: - { integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} + engines: {node: '>= 10.0.0'} '@mdx-js/mdx@1.6.22': - resolution: - { integrity: sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== } + resolution: {integrity: sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==} '@mdx-js/react@1.6.22': - resolution: - { integrity: sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== } + resolution: {integrity: sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==} peerDependencies: react: ^16.13.1 || ^17.0.0 '@mdx-js/util@1.6.22': - resolution: - { integrity: sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== } + resolution: {integrity: sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==} '@mole-inc/bin-wrapper@8.0.1': - resolution: - { integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} '@motionone/animation@10.16.3': - resolution: - { integrity: sha512-QUGWpLbMFLhyqKlngjZhjtxM8IqiJQjLK0DF+XOF6od9nhSvlaeEpOY/UMCRVcZn/9Tr2rZO22EkuCIjYdI74g== } + resolution: {integrity: sha512-QUGWpLbMFLhyqKlngjZhjtxM8IqiJQjLK0DF+XOF6od9nhSvlaeEpOY/UMCRVcZn/9Tr2rZO22EkuCIjYdI74g==} '@motionone/dom@10.16.4': - resolution: - { integrity: sha512-HPHlVo/030qpRj9R8fgY50KTN4Ko30moWRTA3L3imrsRBmob93cTYmodln49HYFbQm01lFF7X523OkKY0DX6UA== } + resolution: {integrity: sha512-HPHlVo/030qpRj9R8fgY50KTN4Ko30moWRTA3L3imrsRBmob93cTYmodln49HYFbQm01lFF7X523OkKY0DX6UA==} '@motionone/easing@10.16.3': - resolution: - { integrity: sha512-HWTMZbTmZojzwEuKT/xCdvoMPXjYSyQvuVM6jmM0yoGU6BWzsmYMeB4bn38UFf618fJCNtP9XeC/zxtKWfbr0w== } + resolution: {integrity: sha512-HWTMZbTmZojzwEuKT/xCdvoMPXjYSyQvuVM6jmM0yoGU6BWzsmYMeB4bn38UFf618fJCNtP9XeC/zxtKWfbr0w==} '@motionone/generators@10.16.4': - resolution: - { integrity: sha512-geFZ3w0Rm0ZXXpctWsSf3REGywmLLujEjxPYpBR0j+ymYwof0xbV6S5kGqqsDKgyWKVWpUInqQYvQfL6fRbXeg== } + resolution: {integrity: sha512-geFZ3w0Rm0ZXXpctWsSf3REGywmLLujEjxPYpBR0j+ymYwof0xbV6S5kGqqsDKgyWKVWpUInqQYvQfL6fRbXeg==} '@motionone/svelte@10.16.4': - resolution: - { integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA== } + resolution: {integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==} '@motionone/types@10.16.3': - resolution: - { integrity: sha512-W4jkEGFifDq73DlaZs3HUfamV2t1wM35zN/zX7Q79LfZ2sc6C0R1baUHZmqc/K5F3vSw3PavgQ6HyHLd/MXcWg== } + resolution: {integrity: sha512-W4jkEGFifDq73DlaZs3HUfamV2t1wM35zN/zX7Q79LfZ2sc6C0R1baUHZmqc/K5F3vSw3PavgQ6HyHLd/MXcWg==} '@motionone/utils@10.16.3': - resolution: - { integrity: sha512-WNWDksJIxQkaI9p9Z9z0+K27xdqISGNFy1SsWVGaiedTHq0iaT6iZujby8fT/ZnZxj1EOaxJtSfUPCFNU5CRoA== } + resolution: {integrity: sha512-WNWDksJIxQkaI9p9Z9z0+K27xdqISGNFy1SsWVGaiedTHq0iaT6iZujby8fT/ZnZxj1EOaxJtSfUPCFNU5CRoA==} '@motionone/vue@10.16.4': - resolution: - { integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg== } + resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} '@mrmlnc/readdir-enhanced@2.2.1': - resolution: - { integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== } - engines: { node: '>=4' } + resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==} + engines: {node: '>=4'} '@noble/curves@1.3.0': - resolution: - { integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== } + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} '@noble/hashes@1.3.3': - resolution: - { integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== } - engines: { node: '>= 16' } + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} '@nodelib/fs.scandir@2.1.5': - resolution: - { integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} '@nodelib/fs.stat@1.1.3': - resolution: - { integrity: sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==} + engines: {node: '>= 6'} '@nodelib/fs.stat@2.0.5': - resolution: - { integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} '@nodelib/fs.walk@1.2.8': - resolution: - { integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} '@npmcli/fs@1.1.1': - resolution: - { integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== } + resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} '@npmcli/move-file@1.1.2': - resolution: - { integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} + engines: {node: '>=10'} deprecated: This functionality has been moved to @npmcli/fs '@parcel/watcher-android-arm64@2.3.0': - resolution: - { integrity: sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] '@parcel/watcher-darwin-arm64@2.3.0': - resolution: - { integrity: sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] '@parcel/watcher-darwin-x64@2.3.0': - resolution: - { integrity: sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] '@parcel/watcher-freebsd-x64@2.3.0': - resolution: - { integrity: sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] '@parcel/watcher-linux-arm-glibc@2.3.0': - resolution: - { integrity: sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ==} + engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] '@parcel/watcher-linux-arm64-glibc@2.3.0': - resolution: - { integrity: sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] '@parcel/watcher-linux-arm64-musl@2.3.0': - resolution: - { integrity: sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] '@parcel/watcher-linux-x64-glibc@2.3.0': - resolution: - { integrity: sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] '@parcel/watcher-linux-x64-musl@2.3.0': - resolution: - { integrity: sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] '@parcel/watcher-wasm@2.3.0': - resolution: - { integrity: sha512-ejBAX8H0ZGsD8lSICDNyMbSEtPMWgDL0WFCt/0z7hyf5v8Imz4rAM8xY379mBsECkq/Wdqa5WEDLqtjZ+6NxfA== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-ejBAX8H0ZGsD8lSICDNyMbSEtPMWgDL0WFCt/0z7hyf5v8Imz4rAM8xY379mBsECkq/Wdqa5WEDLqtjZ+6NxfA==} + engines: {node: '>= 10.0.0'} bundledDependencies: - napi-wasm '@parcel/watcher-win32-arm64@2.3.0': - resolution: - { integrity: sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==} + engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] '@parcel/watcher-win32-ia32@2.3.0': - resolution: - { integrity: sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow==} + engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] '@parcel/watcher-win32-x64@2.3.0': - resolution: - { integrity: sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA==} + engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] '@parcel/watcher@2.3.0': - resolution: - { integrity: sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ==} + engines: {node: '>= 10.0.0'} '@pkgjs/parseargs@0.11.0': - resolution: - { integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== } - engines: { node: '>=14' } + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} '@playwright/test@1.44.1': - resolution: - { integrity: sha512-1hZ4TNvD5z9VuhNJ/walIjvMVvYkZKf71axoF/uiAqpntQJXpG64dlXhoDXE3OczPuTuvjf/M5KWFg5VAVUS3Q== } - engines: { node: '>=16' } + resolution: {integrity: sha512-1hZ4TNvD5z9VuhNJ/walIjvMVvYkZKf71axoF/uiAqpntQJXpG64dlXhoDXE3OczPuTuvjf/M5KWFg5VAVUS3Q==} + engines: {node: '>=16'} hasBin: true '@pmmmwh/react-refresh-webpack-plugin@0.5.7': - resolution: - { integrity: sha512-bcKCAzF0DV2IIROp9ZHkRJa6O4jy7NlnHdWL3GmcUxYWNjLXkK5kfELELwEfSP5hXPfVL/qOGMAROuMQb9GG8Q== } - engines: { node: '>= 10.13' } + resolution: {integrity: sha512-bcKCAzF0DV2IIROp9ZHkRJa6O4jy7NlnHdWL3GmcUxYWNjLXkK5kfELELwEfSP5hXPfVL/qOGMAROuMQb9GG8Q==} + engines: {node: '>= 10.13'} peerDependencies: '@types/webpack': 4.x || 5.x react-refresh: '>=0.10.0 <1.0.0' @@ -2093,72 +1824,58 @@ packages: optional: true '@polkadot-api/json-rpc-provider-proxy@0.0.1': - resolution: - { integrity: sha512-gmVDUP8LpCH0BXewbzqXF2sdHddq1H1q+XrAW2of+KZj4woQkIGBRGTJHeBEVHe30EB+UejR1N2dT4PO/RvDdg== } + resolution: {integrity: sha512-gmVDUP8LpCH0BXewbzqXF2sdHddq1H1q+XrAW2of+KZj4woQkIGBRGTJHeBEVHe30EB+UejR1N2dT4PO/RvDdg==} '@polkadot-api/json-rpc-provider@0.0.1': - resolution: - { integrity: sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA== } + resolution: {integrity: sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==} '@polkadot-api/metadata-builders@0.0.1': - resolution: - { integrity: sha512-GCI78BHDzXAF/L2pZD6Aod/yl82adqQ7ftNmKg51ixRL02JpWUA+SpUKTJE5MY1p8kiJJIo09P2um24SiJHxNA== } + resolution: {integrity: sha512-GCI78BHDzXAF/L2pZD6Aod/yl82adqQ7ftNmKg51ixRL02JpWUA+SpUKTJE5MY1p8kiJJIo09P2um24SiJHxNA==} '@polkadot-api/observable-client@0.1.0': - resolution: - { integrity: sha512-GBCGDRztKorTLna/unjl/9SWZcRmvV58o9jwU2Y038VuPXZcr01jcw/1O3x+yeAuwyGzbucI/mLTDa1QoEml3A== } + resolution: {integrity: sha512-GBCGDRztKorTLna/unjl/9SWZcRmvV58o9jwU2Y038VuPXZcr01jcw/1O3x+yeAuwyGzbucI/mLTDa1QoEml3A==} peerDependencies: rxjs: '>=7.8.0' '@polkadot-api/substrate-bindings@0.0.1': - resolution: - { integrity: sha512-bAe7a5bOPnuFVmpv7y4BBMRpNTnMmE0jtTqRUw/+D8ZlEHNVEJQGr4wu3QQCl7k1GnSV1wfv3mzIbYjErEBocg== } + resolution: {integrity: sha512-bAe7a5bOPnuFVmpv7y4BBMRpNTnMmE0jtTqRUw/+D8ZlEHNVEJQGr4wu3QQCl7k1GnSV1wfv3mzIbYjErEBocg==} '@polkadot-api/substrate-client@0.0.1': - resolution: - { integrity: sha512-9Bg9SGc3AwE+wXONQoW8GC00N3v6lCZLW74HQzqB6ROdcm5VAHM4CB/xRzWSUF9CXL78ugiwtHx3wBcpx4H4Wg== } + resolution: {integrity: sha512-9Bg9SGc3AwE+wXONQoW8GC00N3v6lCZLW74HQzqB6ROdcm5VAHM4CB/xRzWSUF9CXL78ugiwtHx3wBcpx4H4Wg==} '@polkadot-api/utils@0.0.1': - resolution: - { integrity: sha512-3j+pRmlF9SgiYDabSdZsBSsN5XHbpXOAce1lWj56IEEaFZVjsiCaxDOA7C9nCcgfVXuvnbxqqEGQvnY+QfBAUw== } + resolution: {integrity: sha512-3j+pRmlF9SgiYDabSdZsBSsN5XHbpXOAce1lWj56IEEaFZVjsiCaxDOA7C9nCcgfVXuvnbxqqEGQvnY+QfBAUw==} '@polkadot/api-augment@11.2.1': - resolution: - { integrity: sha512-Huo457lCqeavbrf1O/2qQYGNFWURLXndW4vNkj8AP+I757WIqebhc6K3+mz+KoV1aTsX/qwaiEgeoTjrrIwcqA== } - engines: { node: '>=18' } + resolution: {integrity: sha512-Huo457lCqeavbrf1O/2qQYGNFWURLXndW4vNkj8AP+I757WIqebhc6K3+mz+KoV1aTsX/qwaiEgeoTjrrIwcqA==} + engines: {node: '>=18'} '@polkadot/api-base@11.2.1': - resolution: - { integrity: sha512-lVYTHQf8S4rpOJ9d1jvQjviHLE6zljl13vmgs+gXHGJwMAqhhNwKY3ZMQW/u/bRE2uKk0cAlahtsRtiFpjHAfw== } - engines: { node: '>=18' } + resolution: {integrity: sha512-lVYTHQf8S4rpOJ9d1jvQjviHLE6zljl13vmgs+gXHGJwMAqhhNwKY3ZMQW/u/bRE2uKk0cAlahtsRtiFpjHAfw==} + engines: {node: '>=18'} '@polkadot/api-derive@11.2.1': - resolution: - { integrity: sha512-ts6D6tXmvhBpHDT7E03TStXfG6+/bXCvJ7HZUVNDXi4P9cToClzJVOX5uKsPI5/MUYDEq13scxPyQK63m8SsHg== } - engines: { node: '>=18' } + resolution: {integrity: sha512-ts6D6tXmvhBpHDT7E03TStXfG6+/bXCvJ7HZUVNDXi4P9cToClzJVOX5uKsPI5/MUYDEq13scxPyQK63m8SsHg==} + engines: {node: '>=18'} '@polkadot/api@11.2.1': - resolution: - { integrity: sha512-NwcWadMt+mrJ3T7RuwpnaIYtH4x0eix+GiKRtLMtIO32uAfhwVyMnqvLtxDxa4XDJ/es2rtSMYG+t0b1BTM+xQ== } - engines: { node: '>=18' } + resolution: {integrity: sha512-NwcWadMt+mrJ3T7RuwpnaIYtH4x0eix+GiKRtLMtIO32uAfhwVyMnqvLtxDxa4XDJ/es2rtSMYG+t0b1BTM+xQ==} + engines: {node: '>=18'} '@polkadot/keyring@12.6.2': - resolution: - { integrity: sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw== } - engines: { node: '>=18' } + resolution: {integrity: sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==} + engines: {node: '>=18'} peerDependencies: '@polkadot/util': 12.6.2 '@polkadot/util-crypto': 12.6.2 '@polkadot/networks@12.6.2': - resolution: - { integrity: sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w== } - engines: { node: '>=18' } + resolution: {integrity: sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w==} + engines: {node: '>=18'} '@polkadot/react-identicon@3.6.4': - resolution: - { integrity: sha512-y8DFLXEVVZ1dKAQDdvtASxPyR4JqnqokRzbuZF1eDUleNxOJruNDGLGrfuM6rqVNHdHRy35Rku546aFqVE5Ldg== } - engines: { node: '>=18' } + resolution: {integrity: sha512-y8DFLXEVVZ1dKAQDdvtASxPyR4JqnqokRzbuZF1eDUleNxOJruNDGLGrfuM6rqVNHdHRy35Rku546aFqVE5Ldg==} + engines: {node: '>=18'} peerDependencies: '@polkadot/keyring': '*' '@polkadot/util': '*' @@ -2168,271 +1885,218 @@ packages: react-is: '*' '@polkadot/rpc-augment@11.2.1': - resolution: - { integrity: sha512-AbkqWTnKCi71LdqFVbCyYelf5N/Wtj4jFnpRd8z7tIbbiAnNRW61dBgdF9jZ8jd9Z0JvfAmCmG17uCEdsqfNjA== } - engines: { node: '>=18' } + resolution: {integrity: sha512-AbkqWTnKCi71LdqFVbCyYelf5N/Wtj4jFnpRd8z7tIbbiAnNRW61dBgdF9jZ8jd9Z0JvfAmCmG17uCEdsqfNjA==} + engines: {node: '>=18'} '@polkadot/rpc-core@11.2.1': - resolution: - { integrity: sha512-GHNIHDvBts6HDvySfYksuLccaVnI+fc7ubY1uYcJMoyGv9pLhMtveH4Ft7NTxqkBqopbPXZHc8ca9CaIeBVr7w== } - engines: { node: '>=18' } + resolution: {integrity: sha512-GHNIHDvBts6HDvySfYksuLccaVnI+fc7ubY1uYcJMoyGv9pLhMtveH4Ft7NTxqkBqopbPXZHc8ca9CaIeBVr7w==} + engines: {node: '>=18'} '@polkadot/rpc-provider@11.2.1': - resolution: - { integrity: sha512-TO9pdxNmTweK1vi9JYUAoLr/JYJUwPJTTdrSJrmGmiNPaM7txbQVgtT4suQYflVZTgXUYR7OYQ201fH+Qb9J9w== } - engines: { node: '>=18' } + resolution: {integrity: sha512-TO9pdxNmTweK1vi9JYUAoLr/JYJUwPJTTdrSJrmGmiNPaM7txbQVgtT4suQYflVZTgXUYR7OYQ201fH+Qb9J9w==} + engines: {node: '>=18'} '@polkadot/types-augment@11.2.1': - resolution: - { integrity: sha512-3zBsuSKjZlMEeDVqPTkLnFvjPdyGcW3UBihzCgpTmXhLSuwTbsscMwKtKwIPkOHHQPYJYyZXTMkurMXCJOz2kA== } - engines: { node: '>=18' } + resolution: {integrity: sha512-3zBsuSKjZlMEeDVqPTkLnFvjPdyGcW3UBihzCgpTmXhLSuwTbsscMwKtKwIPkOHHQPYJYyZXTMkurMXCJOz2kA==} + engines: {node: '>=18'} '@polkadot/types-codec@11.2.1': - resolution: - { integrity: sha512-9VRRf1g/nahAC3/VSiCSUIRL7uuup04JEZLIAG2LaDgmCBOSV9dt1Yj9114bRUrHHkeUSBmiq64+YX1hZMpQzQ== } - engines: { node: '>=18' } + resolution: {integrity: sha512-9VRRf1g/nahAC3/VSiCSUIRL7uuup04JEZLIAG2LaDgmCBOSV9dt1Yj9114bRUrHHkeUSBmiq64+YX1hZMpQzQ==} + engines: {node: '>=18'} '@polkadot/types-create@11.2.1': - resolution: - { integrity: sha512-Y0Zri7x6/rHURVNLMi6i1+rmJDLCn8OQl8BIvRmsIBkCYh2oCzy0g9aqVoCdm+QnoUU5ZNtu+U/gj1kL5ODivQ== } - engines: { node: '>=18' } + resolution: {integrity: sha512-Y0Zri7x6/rHURVNLMi6i1+rmJDLCn8OQl8BIvRmsIBkCYh2oCzy0g9aqVoCdm+QnoUU5ZNtu+U/gj1kL5ODivQ==} + engines: {node: '>=18'} '@polkadot/types-known@11.2.1': - resolution: - { integrity: sha512-dnbmVKagVI6ARuZaGMGc67HPeHGrR7/lcwfS7jGzEmRcoQk7p/UQjWfOk/LG9NzvQkmRVbE0Gqskn4VorqnTbA== } - engines: { node: '>=18' } + resolution: {integrity: sha512-dnbmVKagVI6ARuZaGMGc67HPeHGrR7/lcwfS7jGzEmRcoQk7p/UQjWfOk/LG9NzvQkmRVbE0Gqskn4VorqnTbA==} + engines: {node: '>=18'} '@polkadot/types-support@11.2.1': - resolution: - { integrity: sha512-VGSUDUEQjt8K3Bv8gHYAE/nD98qPPuZ2DcikM9z9isw04qj2amxZaS26+iknJ9KSCzWgrNBHjcr5Q0o76//2yA== } - engines: { node: '>=18' } + resolution: {integrity: sha512-VGSUDUEQjt8K3Bv8gHYAE/nD98qPPuZ2DcikM9z9isw04qj2amxZaS26+iknJ9KSCzWgrNBHjcr5Q0o76//2yA==} + engines: {node: '>=18'} '@polkadot/types@11.2.1': - resolution: - { integrity: sha512-NVPhO/eFPkL8arWk4xVbsJzRdGfue3gJK+A2iYzOfCr9rDHEj99B+E2Z0Or6zDN6n+thgQYwsr19rKgXvAc18Q== } - engines: { node: '>=18' } + resolution: {integrity: sha512-NVPhO/eFPkL8arWk4xVbsJzRdGfue3gJK+A2iYzOfCr9rDHEj99B+E2Z0Or6zDN6n+thgQYwsr19rKgXvAc18Q==} + engines: {node: '>=18'} '@polkadot/ui-settings@3.6.4': - resolution: - { integrity: sha512-0vZPiMqGP9wv1SNBt0Snt6ScmrNHI2aqd9mixKs0pneDI0EO6ZndGanF3xgC51SCpS/N9qNh+VXckghmQMgaNQ== } - engines: { node: '>=18' } + resolution: {integrity: sha512-0vZPiMqGP9wv1SNBt0Snt6ScmrNHI2aqd9mixKs0pneDI0EO6ZndGanF3xgC51SCpS/N9qNh+VXckghmQMgaNQ==} + engines: {node: '>=18'} peerDependencies: '@polkadot/networks': '*' '@polkadot/util': '*' '@polkadot/ui-shared@3.6.4': - resolution: - { integrity: sha512-nDlfKRPLxjSFm0769Nmkm+8vamH4HwZtKYZ5X+e2yDF1QkgaRUIc9+xJ/eeXp5lkfH985s0IAEmeNw8dQ0SbYg== } - engines: { node: '>=18' } + resolution: {integrity: sha512-nDlfKRPLxjSFm0769Nmkm+8vamH4HwZtKYZ5X+e2yDF1QkgaRUIc9+xJ/eeXp5lkfH985s0IAEmeNw8dQ0SbYg==} + engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' '@polkadot/util-crypto': '*' '@polkadot/util-crypto@12.6.2': - resolution: - { integrity: sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg== } - engines: { node: '>=18' } + resolution: {integrity: sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==} + engines: {node: '>=18'} peerDependencies: '@polkadot/util': 12.6.2 '@polkadot/util@12.6.2': - resolution: - { integrity: sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw== } - engines: { node: '>=18' } + resolution: {integrity: sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==} + engines: {node: '>=18'} '@polkadot/wasm-bridge@7.3.2': - resolution: - { integrity: sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g== } - engines: { node: '>=18' } + resolution: {integrity: sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g==} + engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' '@polkadot/x-randomvalues': '*' '@polkadot/wasm-crypto-asmjs@7.3.2': - resolution: - { integrity: sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q== } - engines: { node: '>=18' } + resolution: {integrity: sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q==} + engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' '@polkadot/wasm-crypto-init@7.3.2': - resolution: - { integrity: sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g== } - engines: { node: '>=18' } + resolution: {integrity: sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g==} + engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' '@polkadot/x-randomvalues': '*' '@polkadot/wasm-crypto-wasm@7.3.2': - resolution: - { integrity: sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw== } - engines: { node: '>=18' } + resolution: {integrity: sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw==} + engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' '@polkadot/wasm-crypto@7.3.2': - resolution: - { integrity: sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw== } - engines: { node: '>=18' } + resolution: {integrity: sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw==} + engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' '@polkadot/x-randomvalues': '*' '@polkadot/wasm-util@7.3.2': - resolution: - { integrity: sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg== } - engines: { node: '>=18' } + resolution: {integrity: sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg==} + engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' '@polkadot/x-bigint@12.6.2': - resolution: - { integrity: sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q== } - engines: { node: '>=18' } + resolution: {integrity: sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q==} + engines: {node: '>=18'} '@polkadot/x-fetch@12.6.2': - resolution: - { integrity: sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw== } - engines: { node: '>=18' } + resolution: {integrity: sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw==} + engines: {node: '>=18'} '@polkadot/x-global@12.6.2': - resolution: - { integrity: sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g== } - engines: { node: '>=18' } + resolution: {integrity: sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g==} + engines: {node: '>=18'} '@polkadot/x-randomvalues@12.6.2': - resolution: - { integrity: sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg== } - engines: { node: '>=18' } + resolution: {integrity: sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==} + engines: {node: '>=18'} peerDependencies: '@polkadot/util': 12.6.2 '@polkadot/wasm-util': '*' '@polkadot/x-textdecoder@12.6.2': - resolution: - { integrity: sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w== } - engines: { node: '>=18' } + resolution: {integrity: sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==} + engines: {node: '>=18'} '@polkadot/x-textencoder@12.6.2': - resolution: - { integrity: sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw== } - engines: { node: '>=18' } + resolution: {integrity: sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==} + engines: {node: '>=18'} '@polkadot/x-ws@12.6.2': - resolution: - { integrity: sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw== } - engines: { node: '>=18' } + resolution: {integrity: sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw==} + engines: {node: '>=18'} '@remix-run/router@1.0.5': - resolution: - { integrity: sha512-my0Mycd+jruq/1lQuO5LBB6WTlL/e8DTCYWp44DfMTDcXz8DcTlgF0ISaLsGewt+ctHN+yA8xMq3q/N7uWJPug== } - engines: { node: '>=14' } + resolution: {integrity: sha512-my0Mycd+jruq/1lQuO5LBB6WTlL/e8DTCYWp44DfMTDcXz8DcTlgF0ISaLsGewt+ctHN+yA8xMq3q/N7uWJPug==} + engines: {node: '>=14'} '@remote-ui/rpc@1.4.4': - resolution: - { integrity: sha512-3XVzEZSTxAw6c8ryDmds36M7QWWJW8Q7mxz+xInqkbrpOeSc6m1plGfNRFlbyaTq0puyH07dLjpsnl+HmWIacw== } + resolution: {integrity: sha512-3XVzEZSTxAw6c8ryDmds36M7QWWJW8Q7mxz+xInqkbrpOeSc6m1plGfNRFlbyaTq0puyH07dLjpsnl+HmWIacw==} '@scure/base@1.1.5': - resolution: - { integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== } + resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} '@sinclair/typebox@0.27.8': - resolution: - { integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== } + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} '@sindresorhus/is@0.14.0': - resolution: - { integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} + engines: {node: '>=6'} '@sindresorhus/is@4.6.0': - resolution: - { integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} '@sinonjs/commons@3.0.1': - resolution: - { integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== } + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} '@sinonjs/fake-timers@10.3.0': - resolution: - { integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== } + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} '@stablelib/aead@1.0.1': - resolution: - { integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg== } + resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} '@stablelib/binary@1.0.1': - resolution: - { integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== } + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} '@stablelib/bytes@1.0.1': - resolution: - { integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ== } + resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} '@stablelib/chacha20poly1305@1.0.1': - resolution: - { integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA== } + resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} '@stablelib/chacha@1.0.1': - resolution: - { integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg== } + resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} '@stablelib/constant-time@1.0.1': - resolution: - { integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg== } + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} '@stablelib/ed25519@1.0.3': - resolution: - { integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg== } + resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} '@stablelib/hash@1.0.1': - resolution: - { integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg== } + resolution: {integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==} '@stablelib/hkdf@1.0.1': - resolution: - { integrity: sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g== } + resolution: {integrity: sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==} '@stablelib/hmac@1.0.1': - resolution: - { integrity: sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA== } + resolution: {integrity: sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==} '@stablelib/int@1.0.1': - resolution: - { integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== } + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} '@stablelib/keyagreement@1.0.1': - resolution: - { integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg== } + resolution: {integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==} '@stablelib/poly1305@1.0.1': - resolution: - { integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA== } + resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} '@stablelib/random@1.0.2': - resolution: - { integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== } + resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} '@stablelib/sha256@1.0.1': - resolution: - { integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ== } + resolution: {integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==} '@stablelib/sha512@1.0.1': - resolution: - { integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== } + resolution: {integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==} '@stablelib/wipe@1.0.1': - resolution: - { integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== } + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} '@stablelib/x25519@1.0.3': - resolution: - { integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== } + resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} '@storybook/addon-actions@6.5.9': - resolution: - { integrity: sha512-wDYm3M1bN+zcYZV3Q24M03b/P8DDpvj1oSoY6VLlxDAi56h8qZB/voeIS2I6vWXOB79C5tbwljYNQO0GsufS0g== } + resolution: {integrity: sha512-wDYm3M1bN+zcYZV3Q24M03b/P8DDpvj1oSoY6VLlxDAi56h8qZB/voeIS2I6vWXOB79C5tbwljYNQO0GsufS0g==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2443,8 +2107,7 @@ packages: optional: true '@storybook/addon-backgrounds@6.5.9': - resolution: - { integrity: sha512-9k+GiY5aiANLOct34ar29jqgdi5ZpCqpZ86zPH0GsEC6ifH6nzP4trLU0vFUe260XDCvB4g8YaI7JZKPhozERg== } + resolution: {integrity: sha512-9k+GiY5aiANLOct34ar29jqgdi5ZpCqpZ86zPH0GsEC6ifH6nzP4trLU0vFUe260XDCvB4g8YaI7JZKPhozERg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2455,8 +2118,7 @@ packages: optional: true '@storybook/addon-controls@6.5.9': - resolution: - { integrity: sha512-VvjkgK32bGURKyWU2No6Q2B0RQZjLZk8D3neVNCnrWxwrl1G82StegxjRPn/UZm9+MZVPvTvI46nj1VdgOktnw== } + resolution: {integrity: sha512-VvjkgK32bGURKyWU2No6Q2B0RQZjLZk8D3neVNCnrWxwrl1G82StegxjRPn/UZm9+MZVPvTvI46nj1VdgOktnw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2467,8 +2129,7 @@ packages: optional: true '@storybook/addon-docs@6.5.9': - resolution: - { integrity: sha512-9lwOZyiOJFUgGd9ADVfcgpels5o0XOXqGMeVLuzT1160nopbZjNjo/3+YLJ0pyHRPpMJ4rmq2+vxRQR6PVRgPg== } + resolution: {integrity: sha512-9lwOZyiOJFUgGd9ADVfcgpels5o0XOXqGMeVLuzT1160nopbZjNjo/3+YLJ0pyHRPpMJ4rmq2+vxRQR6PVRgPg==} peerDependencies: '@storybook/mdx2-csf': ^0.0.3 react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2482,8 +2143,7 @@ packages: optional: true '@storybook/addon-essentials@6.5.9': - resolution: - { integrity: sha512-V9ThjKQsde4A2Es20pLFBsn0MWx2KCJuoTcTsANP4JDcbvEmj8UjbDWbs8jAU+yzJT5r+CI6NoWmQudv12ZOgw== } + resolution: {integrity: sha512-V9ThjKQsde4A2Es20pLFBsn0MWx2KCJuoTcTsANP4JDcbvEmj8UjbDWbs8jAU+yzJT5r+CI6NoWmQudv12ZOgw==} peerDependencies: '@babel/core': ^7.9.6 '@storybook/angular': '*' @@ -2540,8 +2200,7 @@ packages: optional: true '@storybook/addon-interactions@6.5.9': - resolution: - { integrity: sha512-p3xBbrhmYTHvRO8MqAIr2DucgrXt38nJE71rogLNLsJ01rUN4JsLI8OkQAMQbqfIpwC27irMjQxJTp4HSzkFJA== } + resolution: {integrity: sha512-p3xBbrhmYTHvRO8MqAIr2DucgrXt38nJE71rogLNLsJ01rUN4JsLI8OkQAMQbqfIpwC27irMjQxJTp4HSzkFJA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2552,8 +2211,7 @@ packages: optional: true '@storybook/addon-links@6.5.9': - resolution: - { integrity: sha512-4BYC7pkxL3NLRnEgTA9jpIkObQKril+XFj1WtmY/lngF90vvK0Kc/TtvTA2/5tSgrHfxEuPevIdxMIyLJ4ejWQ== } + resolution: {integrity: sha512-4BYC7pkxL3NLRnEgTA9jpIkObQKril+XFj1WtmY/lngF90vvK0Kc/TtvTA2/5tSgrHfxEuPevIdxMIyLJ4ejWQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2564,8 +2222,7 @@ packages: optional: true '@storybook/addon-measure@6.5.9': - resolution: - { integrity: sha512-0aA22wD0CIEUccsEbWkckCOXOwr4VffofMH1ToVCOeqBoyLOMB0gxFubESeprqM54CWsYh2DN1uujgD6508cwA== } + resolution: {integrity: sha512-0aA22wD0CIEUccsEbWkckCOXOwr4VffofMH1ToVCOeqBoyLOMB0gxFubESeprqM54CWsYh2DN1uujgD6508cwA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2576,8 +2233,7 @@ packages: optional: true '@storybook/addon-outline@6.5.9': - resolution: - { integrity: sha512-oJ1DK3BDJr6aTlZc9axfOxV1oDkZO7hOohgUQDaKO1RZrSpyQsx2ViK2X6p/W7JhFJHKh7rv+nGCaVlLz3YIZA== } + resolution: {integrity: sha512-oJ1DK3BDJr6aTlZc9axfOxV1oDkZO7hOohgUQDaKO1RZrSpyQsx2ViK2X6p/W7JhFJHKh7rv+nGCaVlLz3YIZA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2588,13 +2244,11 @@ packages: optional: true '@storybook/addon-postcss@2.0.0': - resolution: - { integrity: sha512-Nt82A7e9zJH4+A+VzLKKswUfru+T6FJTakj4dccP0i8DSn7a0CkzRPrLuZBq8tg4voV6gD74bcDf3gViCVBGtA== } - engines: { node: '>=10', yarn: ^1.17.0 } + resolution: {integrity: sha512-Nt82A7e9zJH4+A+VzLKKswUfru+T6FJTakj4dccP0i8DSn7a0CkzRPrLuZBq8tg4voV6gD74bcDf3gViCVBGtA==} + engines: {node: '>=10', yarn: ^1.17.0} '@storybook/addon-toolbars@6.5.9': - resolution: - { integrity: sha512-6JFQNHYVZUwp17p5rppc+iQJ2QOIWPTF+ni1GMMThjc84mzXs2+899Sf1aPFTvrFJTklmT+bPX6x4aUTouVa1w== } + resolution: {integrity: sha512-6JFQNHYVZUwp17p5rppc+iQJ2QOIWPTF+ni1GMMThjc84mzXs2+899Sf1aPFTvrFJTklmT+bPX6x4aUTouVa1w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2605,8 +2259,7 @@ packages: optional: true '@storybook/addon-viewport@6.5.9': - resolution: - { integrity: sha512-thKS+iw6M7ueDQQ7M66STZ5rgtJKliAcIX6UCopo0Ffh4RaRYmX6MCjqtvBKk8joyXUvm9SpWQemJD9uBQrjgw== } + resolution: {integrity: sha512-thKS+iw6M7ueDQQ7M66STZ5rgtJKliAcIX6UCopo0Ffh4RaRYmX6MCjqtvBKk8joyXUvm9SpWQemJD9uBQrjgw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2617,22 +2270,19 @@ packages: optional: true '@storybook/addons@6.5.9': - resolution: - { integrity: sha512-adwdiXg+mntfPocLc1KXjZXyLgGk7Aac699Fwe+OUYPEC5tW347Rm/kFatcE556d42o5czcRiq3ZSIGWnm9ieQ== } + resolution: {integrity: sha512-adwdiXg+mntfPocLc1KXjZXyLgGk7Aac699Fwe+OUYPEC5tW347Rm/kFatcE556d42o5czcRiq3ZSIGWnm9ieQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 '@storybook/api@6.5.9': - resolution: - { integrity: sha512-9ylztnty4Y+ALU/ehW3BML9czjCAFsWvrwuCi6UgcwNjswwjSX3VRLhfD1KT3pl16ho//95LgZ0LnSwROCcPOA== } + resolution: {integrity: sha512-9ylztnty4Y+ALU/ehW3BML9czjCAFsWvrwuCi6UgcwNjswwjSX3VRLhfD1KT3pl16ho//95LgZ0LnSwROCcPOA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 '@storybook/builder-webpack4@6.5.9': - resolution: - { integrity: sha512-YOeA4++9uRZ8Hog1wC60yjaxBOiI1FRQNtax7b9E7g+kP8UlSCPCGcv4gls9hFmzbzTOPfQTWnToA9Oa6jzRVw== } + resolution: {integrity: sha512-YOeA4++9uRZ8Hog1wC60yjaxBOiI1FRQNtax7b9E7g+kP8UlSCPCGcv4gls9hFmzbzTOPfQTWnToA9Oa6jzRVw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2642,8 +2292,7 @@ packages: optional: true '@storybook/builder-webpack5@6.5.9': - resolution: - { integrity: sha512-NUVZ4Qci6HWPuoH8U/zQkdBO5soGgu7QYrGC/LWU0tRfmmZxkjr7IUU14ppDpGPYgx3r7jkaQI1J/E1YEmSCWQ== } + resolution: {integrity: sha512-NUVZ4Qci6HWPuoH8U/zQkdBO5soGgu7QYrGC/LWU0tRfmmZxkjr7IUU14ppDpGPYgx3r7jkaQI1J/E1YEmSCWQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2653,38 +2302,31 @@ packages: optional: true '@storybook/channel-postmessage@6.5.9': - resolution: - { integrity: sha512-pX/0R8UW7ezBhCrafRaL20OvMRcmESYvQQCDgjqSzJyHkcG51GOhsd6Ge93eJ6QvRMm9+w0Zs93N2VKjVtz0Qw== } + resolution: {integrity: sha512-pX/0R8UW7ezBhCrafRaL20OvMRcmESYvQQCDgjqSzJyHkcG51GOhsd6Ge93eJ6QvRMm9+w0Zs93N2VKjVtz0Qw==} '@storybook/channel-websocket@6.5.9': - resolution: - { integrity: sha512-xtHvSNwuOhkgALwVshKWsoFhDmuvcosdYfxcfFGEiYKXIu46tRS5ZXmpmgEC/0JAVkVoFj5nL8bV7IY5np6oaA== } + resolution: {integrity: sha512-xtHvSNwuOhkgALwVshKWsoFhDmuvcosdYfxcfFGEiYKXIu46tRS5ZXmpmgEC/0JAVkVoFj5nL8bV7IY5np6oaA==} '@storybook/channels@6.5.9': - resolution: - { integrity: sha512-FvGA35nV38UPXWOl9ERapFTJaxwSTamQ339s2Ev7E9riyRG+GRkgTWzf5kECJgS1PAYKd/7m/RqKJT9BVv6A5g== } + resolution: {integrity: sha512-FvGA35nV38UPXWOl9ERapFTJaxwSTamQ339s2Ev7E9riyRG+GRkgTWzf5kECJgS1PAYKd/7m/RqKJT9BVv6A5g==} '@storybook/client-api@6.5.9': - resolution: - { integrity: sha512-pc7JKJoWLesixUKvG2nV36HukUuYoGRyAgD3PpIV7qSBS4JixqZ3VAHFUtqV1UzfOSQTovLSl4a0rIRnpie6gA== } + resolution: {integrity: sha512-pc7JKJoWLesixUKvG2nV36HukUuYoGRyAgD3PpIV7qSBS4JixqZ3VAHFUtqV1UzfOSQTovLSl4a0rIRnpie6gA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 '@storybook/client-logger@6.5.9': - resolution: - { integrity: sha512-DOHL6p0uiDd3gV/Sb2FR+Vh6OiPrrf8BrA06uvXWsMRIIvEEvnparxv9EvPg7FlmUX0T3nq7d3juwjx4F8Wbcg== } + resolution: {integrity: sha512-DOHL6p0uiDd3gV/Sb2FR+Vh6OiPrrf8BrA06uvXWsMRIIvEEvnparxv9EvPg7FlmUX0T3nq7d3juwjx4F8Wbcg==} '@storybook/components@6.5.9': - resolution: - { integrity: sha512-BhfX980O9zn/1J4FNMeDo8ZvL1m5Ml3T4HRpfYmEBnf8oW5b5BeF6S2K2cwFStZRjWqm1feUcwNpZxCBVMkQnQ== } + resolution: {integrity: sha512-BhfX980O9zn/1J4FNMeDo8ZvL1m5Ml3T4HRpfYmEBnf8oW5b5BeF6S2K2cwFStZRjWqm1feUcwNpZxCBVMkQnQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 '@storybook/core-client@6.5.9': - resolution: - { integrity: sha512-LY0QbhShowO+PQx3gao3wdVjpKMH1AaSLmuI95FrcjoMmSXGf96jVLKQp9mJRGeHIsAa93EQBYuCihZycM3Kbg== } + resolution: {integrity: sha512-LY0QbhShowO+PQx3gao3wdVjpKMH1AaSLmuI95FrcjoMmSXGf96jVLKQp9mJRGeHIsAa93EQBYuCihZycM3Kbg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2695,8 +2337,7 @@ packages: optional: true '@storybook/core-common@6.5.9': - resolution: - { integrity: sha512-NxOK0mrOCo0TWZ7Npc5HU66EKoRHlrtg18/ZixblLDWQMIqY9XCck8K1kJ8QYpYCHla+aHIsYUArFe2vhlEfZA== } + resolution: {integrity: sha512-NxOK0mrOCo0TWZ7Npc5HU66EKoRHlrtg18/ZixblLDWQMIqY9XCck8K1kJ8QYpYCHla+aHIsYUArFe2vhlEfZA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2706,12 +2347,10 @@ packages: optional: true '@storybook/core-events@6.5.9': - resolution: - { integrity: sha512-tXt7a3ZvJOCeEKpNa/B5rQM5VI7UJLlOh3IHOImWn4HqoBRrZvbourmac+PRZAtXpos0h3c6554Hjapj/Sny5Q== } + resolution: {integrity: sha512-tXt7a3ZvJOCeEKpNa/B5rQM5VI7UJLlOh3IHOImWn4HqoBRrZvbourmac+PRZAtXpos0h3c6554Hjapj/Sny5Q==} '@storybook/core-server@6.5.9': - resolution: - { integrity: sha512-YeePGUrd5fQPvGzMhowh124KrcZURFpFXg1VB0Op3ESqCIsInoMZeObci4Gc+binMXC7vcv7aw3EwSLU37qJzQ== } + resolution: {integrity: sha512-YeePGUrd5fQPvGzMhowh124KrcZURFpFXg1VB0Op3ESqCIsInoMZeObci4Gc+binMXC7vcv7aw3EwSLU37qJzQ==} peerDependencies: '@storybook/builder-webpack5': '*' '@storybook/manager-webpack5': '*' @@ -2727,8 +2366,7 @@ packages: optional: true '@storybook/core@6.5.9': - resolution: - { integrity: sha512-Mt3TTQnjQt2/pa60A+bqDsAOrYpohapdtt4DDZEbS8h0V6u11KyYYh3w7FCySlL+sPEyogj63l5Ec76Jah3l2w== } + resolution: {integrity: sha512-Mt3TTQnjQt2/pa60A+bqDsAOrYpohapdtt4DDZEbS8h0V6u11KyYYh3w7FCySlL+sPEyogj63l5Ec76Jah3l2w==} peerDependencies: '@storybook/builder-webpack5': '*' '@storybook/manager-webpack5': '*' @@ -2745,8 +2383,7 @@ packages: optional: true '@storybook/csf-tools@6.5.9': - resolution: - { integrity: sha512-RAdhsO2XmEDyWy0qNQvdKMLeIZAuyfD+tYlUwBHRU6DbByDucvwgMOGy5dF97YNJFmyo93EUYJzXjUrJs3U1LQ== } + resolution: {integrity: sha512-RAdhsO2XmEDyWy0qNQvdKMLeIZAuyfD+tYlUwBHRU6DbByDucvwgMOGy5dF97YNJFmyo93EUYJzXjUrJs3U1LQ==} peerDependencies: '@storybook/mdx2-csf': ^0.0.3 peerDependenciesMeta: @@ -2754,20 +2391,16 @@ packages: optional: true '@storybook/csf@0.0.2--canary.4566f4d.1': - resolution: - { integrity: sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ== } + resolution: {integrity: sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==} '@storybook/docs-tools@6.5.9': - resolution: - { integrity: sha512-UoTaXLvec8x+q+4oYIk/t8DBju9C3ZTGklqOxDIt+0kS3TFAqEgI3JhKXqQOXgN5zDcvLVSxi8dbVAeSxk2ktA== } + resolution: {integrity: sha512-UoTaXLvec8x+q+4oYIk/t8DBju9C3ZTGklqOxDIt+0kS3TFAqEgI3JhKXqQOXgN5zDcvLVSxi8dbVAeSxk2ktA==} '@storybook/instrumenter@6.5.9': - resolution: - { integrity: sha512-I2nu/6H0MAy8d+d3LY/G6oYEFyWlc8f2Qs2DhpYh5FiCgIpzvY0DMN05Lf8oaXdKHL3lPF/YLJH17FttekXs1w== } + resolution: {integrity: sha512-I2nu/6H0MAy8d+d3LY/G6oYEFyWlc8f2Qs2DhpYh5FiCgIpzvY0DMN05Lf8oaXdKHL3lPF/YLJH17FttekXs1w==} '@storybook/manager-webpack4@6.5.9': - resolution: - { integrity: sha512-49LZlHqWc7zj9tQfOOANixPYmLxqWTTZceA6DSXnKd9xDiO2Gl23Y+l/CSPXNZGDB8QFAwpimwqyKJj/NLH45A== } + resolution: {integrity: sha512-49LZlHqWc7zj9tQfOOANixPYmLxqWTTZceA6DSXnKd9xDiO2Gl23Y+l/CSPXNZGDB8QFAwpimwqyKJj/NLH45A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2777,8 +2410,7 @@ packages: optional: true '@storybook/manager-webpack5@6.5.9': - resolution: - { integrity: sha512-J1GamphSsaZLNBEhn1awgxzOS8KfvzrHtVlAm2VHwW7j1E1DItROFJhGCgduYYuBiN9eqm+KIYrxcr6cRuoolQ== } + resolution: {integrity: sha512-J1GamphSsaZLNBEhn1awgxzOS8KfvzrHtVlAm2VHwW7j1E1DItROFJhGCgduYYuBiN9eqm+KIYrxcr6cRuoolQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2788,39 +2420,32 @@ packages: optional: true '@storybook/mdx1-csf@0.0.1': - resolution: - { integrity: sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg== } + resolution: {integrity: sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg==} '@storybook/node-logger@6.5.16': - resolution: - { integrity: sha512-YjhBKrclQtjhqFNSO+BZK+RXOx6EQypAELJKoLFaawg331e8VUfvUuRCNB3fcEWp8G9oH13PQQte0OTjLyyOYg== } + resolution: {integrity: sha512-YjhBKrclQtjhqFNSO+BZK+RXOx6EQypAELJKoLFaawg331e8VUfvUuRCNB3fcEWp8G9oH13PQQte0OTjLyyOYg==} '@storybook/node-logger@6.5.9': - resolution: - { integrity: sha512-nZZNZG2Wtwv6Trxi3FrnIqUmB55xO+X/WQGPT5iKlqNjdRIu/T72mE7addcp4rbuWCQfZUhcDDGpBOwKtBxaGg== } + resolution: {integrity: sha512-nZZNZG2Wtwv6Trxi3FrnIqUmB55xO+X/WQGPT5iKlqNjdRIu/T72mE7addcp4rbuWCQfZUhcDDGpBOwKtBxaGg==} '@storybook/postinstall@6.5.9': - resolution: - { integrity: sha512-KQBupK+FMRrtSt8IL0MzCZ/w9qbd25Yxxp/+ajfWgZTRgsWgVFOqcDyMhS16eNbBp5qKIBCBDXfEF+/mK8HwQQ== } + resolution: {integrity: sha512-KQBupK+FMRrtSt8IL0MzCZ/w9qbd25Yxxp/+ajfWgZTRgsWgVFOqcDyMhS16eNbBp5qKIBCBDXfEF+/mK8HwQQ==} '@storybook/preview-web@6.5.9': - resolution: - { integrity: sha512-4eMrO2HJyZUYyL/j+gUaDvry6iGedshwT5MQqe7J9FaA+Q2pNARQRB1X53f410w7S4sObRmYIAIluWPYdWym9w== } + resolution: {integrity: sha512-4eMrO2HJyZUYyL/j+gUaDvry6iGedshwT5MQqe7J9FaA+Q2pNARQRB1X53f410w7S4sObRmYIAIluWPYdWym9w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0': - resolution: - { integrity: sha512-eVg3BxlOm2P+chijHBTByr90IZVUtgRW56qEOLX7xlww2NBuKrcavBlcmn+HH7GIUktquWkMPtvy6e0W0NgA5w== } + resolution: {integrity: sha512-eVg3BxlOm2P+chijHBTByr90IZVUtgRW56qEOLX7xlww2NBuKrcavBlcmn+HH7GIUktquWkMPtvy6e0W0NgA5w==} peerDependencies: typescript: '>= 3.x' webpack: '>= 4' '@storybook/react@6.5.9': - resolution: - { integrity: sha512-Rp+QaTQAzxJhwuzJXVd49mnIBLQRlF8llTxPT2YoGHdrGkku/zl/HblQ6H2yzEf15367VyzaAv/BpLsO9Jlfxg== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-Rp+QaTQAzxJhwuzJXVd49mnIBLQRlF8llTxPT2YoGHdrGkku/zl/HblQ6H2yzEf15367VyzaAv/BpLsO9Jlfxg==} + engines: {node: '>=10.13.0'} hasBin: true peerDependencies: '@babel/core': ^7.11.5 @@ -2847,197 +2472,163 @@ packages: optional: true '@storybook/router@6.5.9': - resolution: - { integrity: sha512-G2Xp/2r8vU2O34eelE+G5VbEEVFDeHcCURrVJEROh6dq2asFJAPbzslVXSeCqgOTNLSpRDJ2NcN5BckkNqmqJg== } + resolution: {integrity: sha512-G2Xp/2r8vU2O34eelE+G5VbEEVFDeHcCURrVJEROh6dq2asFJAPbzslVXSeCqgOTNLSpRDJ2NcN5BckkNqmqJg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 '@storybook/semver@7.3.2': - resolution: - { integrity: sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==} + engines: {node: '>=10'} hasBin: true '@storybook/source-loader@6.5.9': - resolution: - { integrity: sha512-H03nFKaP6borfWMTTa9igBA+Jm2ph+FoVJImWC/X+LAmLSJYYSXuqSgmiZ/DZvbjxS4k8vccE2HXogne1IvaRA== } + resolution: {integrity: sha512-H03nFKaP6borfWMTTa9igBA+Jm2ph+FoVJImWC/X+LAmLSJYYSXuqSgmiZ/DZvbjxS4k8vccE2HXogne1IvaRA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 '@storybook/store@6.5.9': - resolution: - { integrity: sha512-80pcDTcCwK6wUA63aWOp13urI77jfipIVee9mpVvbNyfrNN8kGv1BS0z/JHDxuV6rC4g7LG1fb+BurR0yki7BA== } + resolution: {integrity: sha512-80pcDTcCwK6wUA63aWOp13urI77jfipIVee9mpVvbNyfrNN8kGv1BS0z/JHDxuV6rC4g7LG1fb+BurR0yki7BA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 '@storybook/telemetry@6.5.9': - resolution: - { integrity: sha512-JluoHCRhHAr4X0eUNVBSBi1JIBA92404Tu1TPdbN7x6gCZxHXXPTSUTAnspXp/21cTdMhY2x+kfZQ8fmlGK4MQ== } + resolution: {integrity: sha512-JluoHCRhHAr4X0eUNVBSBi1JIBA92404Tu1TPdbN7x6gCZxHXXPTSUTAnspXp/21cTdMhY2x+kfZQ8fmlGK4MQ==} '@storybook/theming@6.5.9': - resolution: - { integrity: sha512-KM0AMP5jMQPAdaO8tlbFCYqx9uYM/hZXGSVUhznhLYu7bhNAIK7ZVmXxyE/z/khM++8eUHzRoZGiO/cwCkg9Xw== } + resolution: {integrity: sha512-KM0AMP5jMQPAdaO8tlbFCYqx9uYM/hZXGSVUhznhLYu7bhNAIK7ZVmXxyE/z/khM++8eUHzRoZGiO/cwCkg9Xw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 '@storybook/ui@6.5.9': - resolution: - { integrity: sha512-ryuPxJgtbb0gPXKGgGAUC+Z185xGAd1IvQ0jM5fJ0SisHXI8jteG3RaWhntOehi9qCg+64Vv6eH/cj9QYNHt1Q== } + resolution: {integrity: sha512-ryuPxJgtbb0gPXKGgGAUC+Z185xGAd1IvQ0jM5fJ0SisHXI8jteG3RaWhntOehi9qCg+64Vv6eH/cj9QYNHt1Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 '@substrate/connect-extension-protocol@1.0.1': - resolution: - { integrity: sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg== } + resolution: {integrity: sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg==} '@substrate/connect-extension-protocol@2.0.0': - resolution: - { integrity: sha512-nKu8pDrE3LNCEgJjZe1iGXzaD6OSIDD4Xzz/yo4KO9mQ6LBvf49BVrt4qxBFGL6++NneLiWUZGoh+VSd4PyVIg== } + resolution: {integrity: sha512-nKu8pDrE3LNCEgJjZe1iGXzaD6OSIDD4Xzz/yo4KO9mQ6LBvf49BVrt4qxBFGL6++NneLiWUZGoh+VSd4PyVIg==} '@substrate/connect-known-chains@1.0.3': - resolution: - { integrity: sha512-GWw4Nk4OWU8peSya7WcMWnIKiXXAkPExRlMRaUc8wYZo77cwWqRz+ltiGyGaXyE3PLx/5ityvDmNkl2a4MAHrA== } + resolution: {integrity: sha512-GWw4Nk4OWU8peSya7WcMWnIKiXXAkPExRlMRaUc8wYZo77cwWqRz+ltiGyGaXyE3PLx/5ityvDmNkl2a4MAHrA==} '@substrate/connect-known-chains@1.1.4': - resolution: - { integrity: sha512-iT+BdKqvKl/uBLd8BAJysFM1BaMZXRkaXBP2B7V7ob/EyNs5h0EMhTVbO6MJxV/IEOg5OKsyl6FUqQK7pKnqyw== } + resolution: {integrity: sha512-iT+BdKqvKl/uBLd8BAJysFM1BaMZXRkaXBP2B7V7ob/EyNs5h0EMhTVbO6MJxV/IEOg5OKsyl6FUqQK7pKnqyw==} '@substrate/connect@0.8.1': - resolution: - { integrity: sha512-DyrBlQyHkL3fySdQTFmLp1tUhNR4lXJ8Pcxzbmmy6sLRZgq415DB15wqojfWfe5sOqTk/hOlLsBxfb1wC6O+aw== } + resolution: {integrity: sha512-DyrBlQyHkL3fySdQTFmLp1tUhNR4lXJ8Pcxzbmmy6sLRZgq415DB15wqojfWfe5sOqTk/hOlLsBxfb1wC6O+aw==} '@substrate/connect@0.8.10': - resolution: - { integrity: sha512-DIyQ13DDlXqVFnLV+S6/JDgiGowVRRrh18kahieJxhgvzcWicw5eLc6jpfQ0moVVLBYkO7rctB5Wreldwpva8w== } + resolution: {integrity: sha512-DIyQ13DDlXqVFnLV+S6/JDgiGowVRRrh18kahieJxhgvzcWicw5eLc6jpfQ0moVVLBYkO7rctB5Wreldwpva8w==} deprecated: versions below 1.x are no longer maintained '@substrate/light-client-extension-helpers@0.0.6': - resolution: - { integrity: sha512-girltEuxQ1BvkJWmc8JJlk4ZxnlGXc/wkLcNguhY+UoDEMBK0LsdtfzQKIfrIehi4QdeSBlFEFBoI4RqPmsZzA== } + resolution: {integrity: sha512-girltEuxQ1BvkJWmc8JJlk4ZxnlGXc/wkLcNguhY+UoDEMBK0LsdtfzQKIfrIehi4QdeSBlFEFBoI4RqPmsZzA==} peerDependencies: smoldot: 2.x '@substrate/ss58-registry@1.44.0': - resolution: - { integrity: sha512-7lQ/7mMCzVNSEfDS4BCqnRnKCFKpcOaPrxMeGTXHX1YQzM/m2BBHjbK2C3dJvjv7GYxMiaTq/HdWQj1xS6ss+A== } + resolution: {integrity: sha512-7lQ/7mMCzVNSEfDS4BCqnRnKCFKpcOaPrxMeGTXHX1YQzM/m2BBHjbK2C3dJvjv7GYxMiaTq/HdWQj1xS6ss+A==} '@substrate/txwrapper-core@7.4.0': - resolution: - { integrity: sha512-ppJW1oFwsTeJ8KJlh9lQ7aNUltk5VJ0rjXrWWurI3H370BpdFKlM3AxERi2Krna0W8mgNuoXwmpY8IB/QV3C7A== } + resolution: {integrity: sha512-ppJW1oFwsTeJ8KJlh9lQ7aNUltk5VJ0rjXrWWurI3H370BpdFKlM3AxERi2Krna0W8mgNuoXwmpY8IB/QV3C7A==} '@substrate/txwrapper-orml@7.4.0': - resolution: - { integrity: sha512-/YJZaOYbxXZB1tYQvnHipsEhc4NAPI6r+YBOpcb2JCk+CVk9amrFXInf3wq4VbLEoT9y/HOfz9skMeiAqC7zuA== } + resolution: {integrity: sha512-/YJZaOYbxXZB1tYQvnHipsEhc4NAPI6r+YBOpcb2JCk+CVk9amrFXInf3wq4VbLEoT9y/HOfz9skMeiAqC7zuA==} '@substrate/txwrapper-polkadot@7.4.0': - resolution: - { integrity: sha512-XOuuWJuseInETQvaA8O1FpGfYJlQm1Gt8fkhz0S3vdJWO2Ezmidl/OiY+x23uO5eu+V3PiIB23k1DooksPpEpw== } + resolution: {integrity: sha512-XOuuWJuseInETQvaA8O1FpGfYJlQm1Gt8fkhz0S3vdJWO2Ezmidl/OiY+x23uO5eu+V3PiIB23k1DooksPpEpw==} '@substrate/txwrapper-substrate@7.4.0': - resolution: - { integrity: sha512-gC07KVC820L6aTyDhHFg+VFUKM7hU+RCXsmoLAZ83ySJ4fTyoLehDaiEdvLsZxU/jsOICeKlh3YwkkuO3I7llQ== } + resolution: {integrity: sha512-gC07KVC820L6aTyDhHFg+VFUKM7hU+RCXsmoLAZ83ySJ4fTyoLehDaiEdvLsZxU/jsOICeKlh3YwkkuO3I7llQ==} '@svgr/babel-plugin-add-jsx-attribute@6.5.1': - resolution: - { integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} + engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': - resolution: - { integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== } - engines: { node: '>=14' } + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': - resolution: - { integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== } - engines: { node: '>=14' } + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1': - resolution: - { integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==} + engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-svg-dynamic-title@6.5.1': - resolution: - { integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==} + engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-svg-em-dimensions@6.5.1': - resolution: - { integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==} + engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-transform-react-native-svg@6.5.1': - resolution: - { integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==} + engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-transform-svg-component@6.5.1': - resolution: - { integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==} + engines: {node: '>=12'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-preset@6.5.1': - resolution: - { integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==} + engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/core@6.5.1': - resolution: - { integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==} + engines: {node: '>=10'} '@svgr/hast-util-to-babel-ast@6.5.1': - resolution: - { integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} + engines: {node: '>=10'} '@svgr/plugin-jsx@6.5.1': - resolution: - { integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==} + engines: {node: '>=10'} peerDependencies: '@svgr/core': ^6.0.0 '@svgr/plugin-svgo@6.5.1': - resolution: - { integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==} + engines: {node: '>=10'} peerDependencies: '@svgr/core': '*' '@svgr/webpack@6.2.1': - resolution: - { integrity: sha512-h09ngMNd13hnePwgXa+Y5CgOjzlCvfWLHg+MBnydEedAnuLRzUHUJmGS3o2OsrhxTOOqEsPOFt5v/f6C5Qulcw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-h09ngMNd13hnePwgXa+Y5CgOjzlCvfWLHg+MBnydEedAnuLRzUHUJmGS3o2OsrhxTOOqEsPOFt5v/f6C5Qulcw==} + engines: {node: '>=10'} '@swc/cli@0.4.0': - resolution: - { integrity: sha512-4JdVrPtF/4rCMXp6Q1h5I6YkYZrCCcqod7Wk97ZQq7K8vNGzJUryBv4eHCvqx5sJOJBrbYm9fcswe1B0TygNoA== } - engines: { node: '>= 16.14.0' } + resolution: {integrity: sha512-4JdVrPtF/4rCMXp6Q1h5I6YkYZrCCcqod7Wk97ZQq7K8vNGzJUryBv4eHCvqx5sJOJBrbYm9fcswe1B0TygNoA==} + engines: {node: '>= 16.14.0'} hasBin: true peerDependencies: '@swc/core': ^1.2.66 @@ -3047,79 +2638,68 @@ packages: optional: true '@swc/core-darwin-arm64@1.6.7': - resolution: - { integrity: sha512-sNb+ghP2OhZyUjS7E5Mf3PqSvoXJ5gY6GBaH2qp8WQxx9VL7ozC4HVo6vkeFJBN5cmYqUCLnhrM3HU4W+7yMSA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-sNb+ghP2OhZyUjS7E5Mf3PqSvoXJ5gY6GBaH2qp8WQxx9VL7ozC4HVo6vkeFJBN5cmYqUCLnhrM3HU4W+7yMSA==} + engines: {node: '>=10'} cpu: [arm64] os: [darwin] '@swc/core-darwin-x64@1.6.7': - resolution: - { integrity: sha512-LQwYm/ATYN5fYSYVPMfComPiFo5i8jh75h1ASvNWhXtS+/+k1dq1zXTJWZRuojd5NXgW3bb6mJtJ2evwYIgYbA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-LQwYm/ATYN5fYSYVPMfComPiFo5i8jh75h1ASvNWhXtS+/+k1dq1zXTJWZRuojd5NXgW3bb6mJtJ2evwYIgYbA==} + engines: {node: '>=10'} cpu: [x64] os: [darwin] '@swc/core-linux-arm-gnueabihf@1.6.7': - resolution: - { integrity: sha512-kEDzVhNci38LX3kdY99t68P2CDf+2QFDk5LawVamXH0iN5DRAO/+wjOhxL8KOHa6wQVqKEt5WrhD+Rrvk/34Yw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-kEDzVhNci38LX3kdY99t68P2CDf+2QFDk5LawVamXH0iN5DRAO/+wjOhxL8KOHa6wQVqKEt5WrhD+Rrvk/34Yw==} + engines: {node: '>=10'} cpu: [arm] os: [linux] '@swc/core-linux-arm64-gnu@1.6.7': - resolution: - { integrity: sha512-SyOBUGfl31xLGpIJ/Jd6GKHtkfZyHBXSwFlK7FmPN//MBQLtTBm4ZaWTnWnGo4aRsJwQdXWDKPyqlMBtnIl1nQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-SyOBUGfl31xLGpIJ/Jd6GKHtkfZyHBXSwFlK7FmPN//MBQLtTBm4ZaWTnWnGo4aRsJwQdXWDKPyqlMBtnIl1nQ==} + engines: {node: '>=10'} cpu: [arm64] os: [linux] '@swc/core-linux-arm64-musl@1.6.7': - resolution: - { integrity: sha512-1fOAXkDFbRfItEdMZPxT3du1QWYhgToa4YsnqTujjE8EqJW8K27hIcHRIkVuzp7PNhq8nLBg0JpJM4g27EWD7g== } - engines: { node: '>=10' } + resolution: {integrity: sha512-1fOAXkDFbRfItEdMZPxT3du1QWYhgToa4YsnqTujjE8EqJW8K27hIcHRIkVuzp7PNhq8nLBg0JpJM4g27EWD7g==} + engines: {node: '>=10'} cpu: [arm64] os: [linux] '@swc/core-linux-x64-gnu@1.6.7': - resolution: - { integrity: sha512-Gp7uCwPsNO5ATxbyvfTyeNCHUGD9oA+xKMm43G1tWCy+l07gLqWMKp7DIr3L3qPD05TfAVo3OuiOn2abpzOFbw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-Gp7uCwPsNO5ATxbyvfTyeNCHUGD9oA+xKMm43G1tWCy+l07gLqWMKp7DIr3L3qPD05TfAVo3OuiOn2abpzOFbw==} + engines: {node: '>=10'} cpu: [x64] os: [linux] '@swc/core-linux-x64-musl@1.6.7': - resolution: - { integrity: sha512-QeruGBZJ15tadqEMQ77ixT/CYGk20MtlS8wmvJiV+Wsb8gPW5LgCjtupzcLLnoQzDG54JGNCeeZ0l/T8NYsOvA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-QeruGBZJ15tadqEMQ77ixT/CYGk20MtlS8wmvJiV+Wsb8gPW5LgCjtupzcLLnoQzDG54JGNCeeZ0l/T8NYsOvA==} + engines: {node: '>=10'} cpu: [x64] os: [linux] '@swc/core-win32-arm64-msvc@1.6.7': - resolution: - { integrity: sha512-ouRqgSnT95lTCiU/6kJRNS5b1o+p8I/V9jxtL21WUj/JOVhsFmBErqQ0MZyCu514noWiR5BIqOrZXR8C1Knx6Q== } - engines: { node: '>=10' } + resolution: {integrity: sha512-ouRqgSnT95lTCiU/6kJRNS5b1o+p8I/V9jxtL21WUj/JOVhsFmBErqQ0MZyCu514noWiR5BIqOrZXR8C1Knx6Q==} + engines: {node: '>=10'} cpu: [arm64] os: [win32] '@swc/core-win32-ia32-msvc@1.6.7': - resolution: - { integrity: sha512-eZAP/EmJ0IcfgAx6B4/SpSjq3aT8gr0ooktfMqw/w0/5lnNrbMl2v+2kvxcneNcF7bp8VNcYZnoHlsP+LvmVbA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-eZAP/EmJ0IcfgAx6B4/SpSjq3aT8gr0ooktfMqw/w0/5lnNrbMl2v+2kvxcneNcF7bp8VNcYZnoHlsP+LvmVbA==} + engines: {node: '>=10'} cpu: [ia32] os: [win32] '@swc/core-win32-x64-msvc@1.6.7': - resolution: - { integrity: sha512-QOdE+7GQg1UQPS6p0KxzJOh/8GLbJ5zI1vqKArCCB0unFqUfKIjYb2TaH0geEBy3w9qtXxe3ZW6hzxtZSS9lDg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-QOdE+7GQg1UQPS6p0KxzJOh/8GLbJ5zI1vqKArCCB0unFqUfKIjYb2TaH0geEBy3w9qtXxe3ZW6hzxtZSS9lDg==} + engines: {node: '>=10'} cpu: [x64] os: [win32] '@swc/core@1.6.7': - resolution: - { integrity: sha512-BBzORL9qWz5hZqAZ83yn+WNaD54RH5eludjqIOboolFOK/Pw+2l00/H77H4CEBJnzCIBQszsyqtITmrn4evp0g== } - engines: { node: '>=10' } + resolution: {integrity: sha512-BBzORL9qWz5hZqAZ83yn+WNaD54RH5eludjqIOboolFOK/Pw+2l00/H77H4CEBJnzCIBQszsyqtITmrn4evp0g==} + engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' peerDependenciesMeta: @@ -3127,48 +2707,39 @@ packages: optional: true '@swc/counter@0.1.3': - resolution: - { integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== } + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} '@swc/helpers@0.5.11': - resolution: - { integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A== } + resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} '@swc/jest@0.2.36': - resolution: - { integrity: sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw== } - engines: { npm: '>= 7.0.0' } + resolution: {integrity: sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw==} + engines: {npm: '>= 7.0.0'} peerDependencies: '@swc/core': '*' '@swc/types@0.1.9': - resolution: - { integrity: sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg== } + resolution: {integrity: sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==} '@szmarczak/http-timer@1.1.2': - resolution: - { integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} + engines: {node: '>=6'} '@szmarczak/http-timer@4.0.6': - resolution: - { integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== } - engines: { node: '>=10' } + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} '@testing-library/dom@8.20.1': - resolution: - { integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g== } - engines: { node: '>=12' } + resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} + engines: {node: '>=12'} '@testing-library/dom@9.3.4': - resolution: - { integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ== } - engines: { node: '>=14' } + resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} + engines: {node: '>=14'} '@testing-library/jest-dom@6.4.1': - resolution: - { integrity: sha512-Z7qMM3J2Zw5H/nC2/5CYx5YcuaD56JmDFKNIozZ89VIo6o6Y9FMhssics4e2madEKYDNEpZz3+glPGz0yWMOag== } - engines: { node: '>=14', npm: '>=6', yarn: '>=1' } + resolution: {integrity: sha512-Z7qMM3J2Zw5H/nC2/5CYx5YcuaD56JmDFKNIozZ89VIo6o6Y9FMhssics4e2madEKYDNEpZz3+glPGz0yWMOag==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} peerDependencies: '@jest/globals': '>= 28' '@types/bun': latest @@ -3188,442 +2759,335 @@ packages: optional: true '@testing-library/react@13.3.0': - resolution: - { integrity: sha512-DB79aA426+deFgGSjnf5grczDPiL4taK3hFaa+M5q7q20Kcve9eQottOG5kZ74KEr55v0tU2CQormSSDK87zYQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-DB79aA426+deFgGSjnf5grczDPiL4taK3hFaa+M5q7q20Kcve9eQottOG5kZ74KEr55v0tU2CQormSSDK87zYQ==} + engines: {node: '>=12'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 '@testing-library/user-event@14.2.1': - resolution: - { integrity: sha512-HOr1QiODrq+0j9lKU5i10y9TbhxMBMRMGimNx10asdmau9cb8Xb1Vyg0GvTwyIL2ziQyh2kAloOtAQFBQVuecA== } - engines: { node: '>=12', npm: '>=6' } + resolution: {integrity: sha512-HOr1QiODrq+0j9lKU5i10y9TbhxMBMRMGimNx10asdmau9cb8Xb1Vyg0GvTwyIL2ziQyh2kAloOtAQFBQVuecA==} + engines: {node: '>=12', npm: '>=6'} peerDependencies: '@testing-library/dom': '>=7.21.4' '@tokenizer/token@0.3.0': - resolution: - { integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== } + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} '@tootallnate/once@2.0.0': - resolution: - { integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== } - engines: { node: '>= 10' } + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} '@trysound/sax@0.2.0': - resolution: - { integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} '@tsconfig/node10@1.0.9': - resolution: - { integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== } + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} '@tsconfig/node12@1.0.11': - resolution: - { integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== } + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} '@tsconfig/node14@1.0.3': - resolution: - { integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== } + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} '@tsconfig/node16@1.0.4': - resolution: - { integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== } + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} '@types/aria-query@5.0.4': - resolution: - { integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== } + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} '@types/babel__core@7.20.5': - resolution: - { integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== } + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} '@types/babel__generator@7.6.8': - resolution: - { integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== } + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} '@types/babel__template@7.4.4': - resolution: - { integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== } + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} '@types/babel__traverse@7.20.5': - resolution: - { integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== } + resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} '@types/bn.js@5.1.5': - resolution: - { integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== } + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} '@types/body-parser@1.19.5': - resolution: - { integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== } + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} '@types/bonjour@3.5.13': - resolution: - { integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== } + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} '@types/cacheable-request@6.0.3': - resolution: - { integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== } + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} '@types/caseless@0.12.5': - resolution: - { integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg== } + resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} '@types/connect-history-api-fallback@1.5.4': - resolution: - { integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== } + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} '@types/connect@3.4.38': - resolution: - { integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== } + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} '@types/debug@4.1.12': - resolution: - { integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== } + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} '@types/eslint-scope@3.7.7': - resolution: - { integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== } + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} '@types/eslint@8.44.8': - resolution: - { integrity: sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw== } + resolution: {integrity: sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==} '@types/estree-jsx@1.0.5': - resolution: - { integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== } + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} '@types/estree@0.0.51': - resolution: - { integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== } + resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} '@types/estree@1.0.5': - resolution: - { integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== } + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} '@types/express-serve-static-core@4.17.41': - resolution: - { integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== } + resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} '@types/express@4.17.21': - resolution: - { integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== } + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} '@types/fs-extra@9.0.13': - resolution: - { integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== } + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} '@types/glob@7.2.0': - resolution: - { integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== } + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} '@types/glob@8.1.0': - resolution: - { integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== } + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} '@types/graceful-fs@4.1.9': - resolution: - { integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== } + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} '@types/hast@2.3.8': - resolution: - { integrity: sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ== } + resolution: {integrity: sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==} '@types/hast@3.0.4': - resolution: - { integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== } + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} '@types/html-minifier-terser@5.1.2': - resolution: - { integrity: sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== } + resolution: {integrity: sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==} '@types/html-minifier-terser@6.1.0': - resolution: - { integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== } + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} '@types/http-cache-semantics@4.0.4': - resolution: - { integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== } + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} '@types/http-errors@2.0.4': - resolution: - { integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== } + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} '@types/http-proxy@1.17.14': - resolution: - { integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== } + resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} '@types/is-function@1.0.3': - resolution: - { integrity: sha512-/CLhCW79JUeLKznI6mbVieGbl4QU5Hfn+6udw1YHZoofASjbQ5zaP5LzAUZYDpRYEjS4/P+DhEgyJ/PQmGGTWw== } + resolution: {integrity: sha512-/CLhCW79JUeLKznI6mbVieGbl4QU5Hfn+6udw1YHZoofASjbQ5zaP5LzAUZYDpRYEjS4/P+DhEgyJ/PQmGGTWw==} '@types/istanbul-lib-coverage@2.0.6': - resolution: - { integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== } + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} '@types/istanbul-lib-report@3.0.3': - resolution: - { integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== } + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} '@types/istanbul-reports@3.0.4': - resolution: - { integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== } + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} '@types/jest@29.5.12': - resolution: - { integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== } + resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} '@types/jsdom@20.0.1': - resolution: - { integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== } + resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} '@types/json-schema@7.0.15': - resolution: - { integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== } + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/json5@0.0.29': - resolution: - { integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== } + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} '@types/keyv@3.1.4': - resolution: - { integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== } + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} '@types/lodash@4.14.182': - resolution: - { integrity: sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== } + resolution: {integrity: sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==} '@types/mdast@3.0.15': - resolution: - { integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ== } + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} '@types/mdast@4.0.4': - resolution: - { integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== } + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} '@types/mime@1.3.5': - resolution: - { integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== } + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} '@types/mime@3.0.4': - resolution: - { integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== } + resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} '@types/minimatch@3.0.5': - resolution: - { integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== } + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} '@types/minimatch@5.1.2': - resolution: - { integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== } + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} '@types/minimist@1.2.5': - resolution: - { integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== } + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} '@types/ms@0.7.34': - resolution: - { integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== } + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} '@types/node-fetch@2.6.9': - resolution: - { integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA== } + resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==} '@types/node-forge@1.3.10': - resolution: - { integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw== } + resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==} '@types/node@16.18.68': - resolution: - { integrity: sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg== } + resolution: {integrity: sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==} '@types/node@18.0.0': - resolution: - { integrity: sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== } + resolution: {integrity: sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==} '@types/node@18.19.3': - resolution: - { integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg== } + resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} '@types/node@20.11.26': - resolution: - { integrity: sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ== } + resolution: {integrity: sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==} '@types/node@20.5.1': - resolution: - { integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg== } + resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} '@types/normalize-package-data@2.4.4': - resolution: - { integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== } + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} '@types/npmlog@4.1.6': - resolution: - { integrity: sha512-0l3z16vnlJGl2Mi/rgJFrdwfLZ4jfNYgE6ZShEpjqhHuGTqdEzNles03NpYHwUMVYZa+Tj46UxKIEpE78lQ3DQ== } + resolution: {integrity: sha512-0l3z16vnlJGl2Mi/rgJFrdwfLZ4jfNYgE6ZShEpjqhHuGTqdEzNles03NpYHwUMVYZa+Tj46UxKIEpE78lQ3DQ==} '@types/parse-json@4.0.2': - resolution: - { integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== } + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} '@types/parse5@5.0.3': - resolution: - { integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== } + resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==} '@types/plist@3.0.5': - resolution: - { integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA== } + resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} '@types/pretty-hrtime@1.0.3': - resolution: - { integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA== } + resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==} '@types/prop-types@15.7.11': - resolution: - { integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== } + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} '@types/qrcode@1.5.1': - resolution: - { integrity: sha512-HpSN675K0PmxIDRpjMI3Mc2GiKo3dNu+X/F5SoItiaDS1lVfgC6Wac1c5lQDfKWbTJUSHWiHKzpJpBZG7k9gaA== } + resolution: {integrity: sha512-HpSN675K0PmxIDRpjMI3Mc2GiKo3dNu+X/F5SoItiaDS1lVfgC6Wac1c5lQDfKWbTJUSHWiHKzpJpBZG7k9gaA==} '@types/qs@6.9.10': - resolution: - { integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== } + resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} '@types/range-parser@1.2.7': - resolution: - { integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== } + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} '@types/react-dom@18.0.5': - resolution: - { integrity: sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA== } + resolution: {integrity: sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==} '@types/react-lottie@1.2.6': - resolution: - { integrity: sha512-fvGJHD7SeUdVESHo7f7erRnXkTWaa/6Mo5TB+R0/ieSftKoFspA4sMlF2qMH6BljXI7ehFJbBtrD5bzDxPCkGg== } + resolution: {integrity: sha512-fvGJHD7SeUdVESHo7f7erRnXkTWaa/6Mo5TB+R0/ieSftKoFspA4sMlF2qMH6BljXI7ehFJbBtrD5bzDxPCkGg==} '@types/react-syntax-highlighter@11.0.5': - resolution: - { integrity: sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg== } + resolution: {integrity: sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==} '@types/react@18.0.14': - resolution: - { integrity: sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q== } + resolution: {integrity: sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q==} '@types/request@2.48.8': - resolution: - { integrity: sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ== } + resolution: {integrity: sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==} '@types/responselike@1.0.3': - resolution: - { integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== } + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} '@types/retry@0.12.0': - resolution: - { integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== } + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} '@types/scheduler@0.16.8': - resolution: - { integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== } + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} '@types/send@0.17.4': - resolution: - { integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== } + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} '@types/serve-index@1.9.4': - resolution: - { integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== } + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} '@types/serve-static@1.15.5': - resolution: - { integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== } + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} '@types/sockjs@0.3.36': - resolution: - { integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== } + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} '@types/source-list-map@0.1.6': - resolution: - { integrity: sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g== } + resolution: {integrity: sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==} '@types/stack-utils@2.0.3': - resolution: - { integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== } + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} '@types/stylis@4.2.4': - resolution: - { integrity: sha512-36ZrGJ8fgtBr6nwNnuJ9jXIj+bn/pF6UoqmrQT7+Y99+tFFeHHsoR54+194dHdyhPjgbeoNz3Qru0oRt0l6ASQ== } + resolution: {integrity: sha512-36ZrGJ8fgtBr6nwNnuJ9jXIj+bn/pF6UoqmrQT7+Y99+tFFeHHsoR54+194dHdyhPjgbeoNz3Qru0oRt0l6ASQ==} '@types/tapable@1.0.12': - resolution: - { integrity: sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q== } + resolution: {integrity: sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==} '@types/tough-cookie@4.0.5': - resolution: - { integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== } + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} '@types/trusted-types@2.0.7': - resolution: - { integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== } + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} '@types/uglify-js@3.17.4': - resolution: - { integrity: sha512-Hm/T0kV3ywpJyMGNbsItdivRhYNCQQf1IIsYsXnoVPES4t+FMLyDe0/K+Ea7ahWtMtSNb22ZdY7MIyoD9rqARg== } + resolution: {integrity: sha512-Hm/T0kV3ywpJyMGNbsItdivRhYNCQQf1IIsYsXnoVPES4t+FMLyDe0/K+Ea7ahWtMtSNb22ZdY7MIyoD9rqARg==} '@types/unist@2.0.10': - resolution: - { integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== } + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} '@types/unist@3.0.2': - resolution: - { integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== } + resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} '@types/verror@1.10.9': - resolution: - { integrity: sha512-MLx9Z+9lGzwEuW16ubGeNkpBDE84RpB/NyGgg6z2BTpWzKkGU451cAY3UkUzZEp72RHF585oJ3V8JVNqIplcAQ== } + resolution: {integrity: sha512-MLx9Z+9lGzwEuW16ubGeNkpBDE84RpB/NyGgg6z2BTpWzKkGU451cAY3UkUzZEp72RHF585oJ3V8JVNqIplcAQ==} '@types/webpack-env@1.18.4': - resolution: - { integrity: sha512-I6e+9+HtWADAWeeJWDFQtdk4EVSAbj6Rtz4q8fJ7mSr1M0jzlFcs8/HZ+Xb5SHzVm1dxH7aUiI+A8kA8Gcrm0A== } + resolution: {integrity: sha512-I6e+9+HtWADAWeeJWDFQtdk4EVSAbj6Rtz4q8fJ7mSr1M0jzlFcs8/HZ+Xb5SHzVm1dxH7aUiI+A8kA8Gcrm0A==} '@types/webpack-sources@3.2.3': - resolution: - { integrity: sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw== } + resolution: {integrity: sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==} '@types/webpack@4.41.38': - resolution: - { integrity: sha512-oOW7E931XJU1mVfCnxCVgv8GLFL768pDO5u2Gzk82i8yTIgX6i7cntyZOkZYb/JtYM8252SN9bQp9tgkVDSsRw== } + resolution: {integrity: sha512-oOW7E931XJU1mVfCnxCVgv8GLFL768pDO5u2Gzk82i8yTIgX6i7cntyZOkZYb/JtYM8252SN9bQp9tgkVDSsRw==} '@types/ws@8.5.10': - resolution: - { integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== } + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} '@types/yargs-parser@21.0.3': - resolution: - { integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== } + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} '@types/yargs@15.0.19': - resolution: - { integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA== } + resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} '@types/yargs@16.0.9': - resolution: - { integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== } + resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} '@types/yargs@17.0.32': - resolution: - { integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== } + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} '@types/yauzl@2.10.3': - resolution: - { integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== } + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} '@typescript-eslint/eslint-plugin@5.30.4': - resolution: - { integrity: sha512-xjujQISAIa4HAaos8fcMZXmqkuZqMx6icdxkI88jMM/eNe4J8AuTLYnLK+zdm0mBYLyctdFf//UE4/xFCcQzYQ== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-xjujQISAIa4HAaos8fcMZXmqkuZqMx6icdxkI88jMM/eNe4J8AuTLYnLK+zdm0mBYLyctdFf//UE4/xFCcQzYQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3633,9 +3097,8 @@ packages: optional: true '@typescript-eslint/parser@5.30.4': - resolution: - { integrity: sha512-/ge1HtU63wVoED4VnlU2o+FPFmi017bPYpeSrCmd8Ycsti4VSxXrmcpXXm7JpI4GT0Aa7qviabv1PEp6L5bboQ== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-/ge1HtU63wVoED4VnlU2o+FPFmi017bPYpeSrCmd8Ycsti4VSxXrmcpXXm7JpI4GT0Aa7qviabv1PEp6L5bboQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: '*' @@ -3644,14 +3107,12 @@ packages: optional: true '@typescript-eslint/scope-manager@5.30.4': - resolution: - { integrity: sha512-DNzlQwGSiGefz71JwaHrpcaAX3zYkEcy8uVuan3YMKOa6qeW/y+7SaD8KIsIAruASwq6P+U4BjWBWtM2O+mwBQ== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-DNzlQwGSiGefz71JwaHrpcaAX3zYkEcy8uVuan3YMKOa6qeW/y+7SaD8KIsIAruASwq6P+U4BjWBWtM2O+mwBQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@typescript-eslint/type-utils@5.30.4': - resolution: - { integrity: sha512-55cf1dZviwwv+unDB+mF8vZkfta5muTK6bppPvenWWCD7slZZ0DEsXUjZerqy7Rq8s3J4SXdg4rMIY8ngCtTmA== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-55cf1dZviwwv+unDB+mF8vZkfta5muTK6bppPvenWWCD7slZZ0DEsXUjZerqy7Rq8s3J4SXdg4rMIY8ngCtTmA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' typescript: '*' @@ -3660,14 +3121,12 @@ packages: optional: true '@typescript-eslint/types@5.30.4': - resolution: - { integrity: sha512-NTEvqc+Vvu8Q6JeAKryHk2eqLKqsr2St3xhIjhOjQv5wQUBhaTuix4WOSacqj0ONWfKVU12Eug3LEAB95GBkMA== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-NTEvqc+Vvu8Q6JeAKryHk2eqLKqsr2St3xhIjhOjQv5wQUBhaTuix4WOSacqj0ONWfKVU12Eug3LEAB95GBkMA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@typescript-eslint/typescript-estree@5.30.4': - resolution: - { integrity: sha512-V4VnEs6/J9/nNizaA12IeU4SAeEYaiKr7XndLNfV5+3zZSB4hIu6EhHJixTKhvIqA+EEHgBl6re8pivBMLLO1w== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-V4VnEs6/J9/nNizaA12IeU4SAeEYaiKr7XndLNfV5+3zZSB4hIu6EhHJixTKhvIqA+EEHgBl6re8pivBMLLO1w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -3675,56 +3134,44 @@ packages: optional: true '@typescript-eslint/utils@5.30.4': - resolution: - { integrity: sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 '@typescript-eslint/visitor-keys@5.30.4': - resolution: - { integrity: sha512-ulKGse3mruSc8x6l8ORSc6+1ORyJzKmZeIaRTu/WpaF/jx3vHvEn5XZUKF9XaVg2710mFmTAUlLcLYLPp/Zf/Q== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-ulKGse3mruSc8x6l8ORSc6+1ORyJzKmZeIaRTu/WpaF/jx3vHvEn5XZUKF9XaVg2710mFmTAUlLcLYLPp/Zf/Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@ungap/structured-clone@1.2.0': - resolution: - { integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== } + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} '@walletconnect/core@2.10.4': - resolution: - { integrity: sha512-MGdw5a4dIlQFPxVHEw2neIpHPAw3gtrsJYyUqm6rI+1c1SfmZyOPCaYTr6zPU2cnoWQUjv2ePMLeO/JKy3Yh5g== } + resolution: {integrity: sha512-MGdw5a4dIlQFPxVHEw2neIpHPAw3gtrsJYyUqm6rI+1c1SfmZyOPCaYTr6zPU2cnoWQUjv2ePMLeO/JKy3Yh5g==} '@walletconnect/environment@1.0.1': - resolution: - { integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg== } + resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} '@walletconnect/events@1.0.1': - resolution: - { integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== } + resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} '@walletconnect/heartbeat@1.2.1': - resolution: - { integrity: sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q== } + resolution: {integrity: sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q==} '@walletconnect/jsonrpc-provider@1.0.13': - resolution: - { integrity: sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g== } + resolution: {integrity: sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g==} '@walletconnect/jsonrpc-types@1.0.3': - resolution: - { integrity: sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw== } + resolution: {integrity: sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw==} '@walletconnect/jsonrpc-utils@1.0.8': - resolution: - { integrity: sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw== } + resolution: {integrity: sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==} '@walletconnect/jsonrpc-ws-connection@1.0.13': - resolution: - { integrity: sha512-mfOM7uFH4lGtQxG+XklYuFBj6dwVvseTt5/ahOkkmpcAEgz2umuzu7fTR+h5EmjQBdrmYyEBOWADbeaFNxdySg== } + resolution: {integrity: sha512-mfOM7uFH4lGtQxG+XklYuFBj6dwVvseTt5/ahOkkmpcAEgz2umuzu7fTR+h5EmjQBdrmYyEBOWADbeaFNxdySg==} '@walletconnect/keyvaluestorage@1.1.1': - resolution: - { integrity: sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA== } + resolution: {integrity: sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==} peerDependencies: '@react-native-async-storage/async-storage': 1.x peerDependenciesMeta: @@ -3732,213 +3179,164 @@ packages: optional: true '@walletconnect/logger@2.0.1': - resolution: - { integrity: sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ== } + resolution: {integrity: sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ==} '@walletconnect/relay-api@1.0.9': - resolution: - { integrity: sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg== } + resolution: {integrity: sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg==} '@walletconnect/relay-auth@1.0.4': - resolution: - { integrity: sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ== } + resolution: {integrity: sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==} '@walletconnect/safe-json@1.0.2': - resolution: - { integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== } + resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} '@walletconnect/sign-client@2.10.4': - resolution: - { integrity: sha512-C5VHkK59/DQNrJS91UXLn5OSr0drXHkKjajhl2a9hb3h6kxuSdlWbyC0yRPKT1sD0fQho8+EWZHBiV063yBePw== } + resolution: {integrity: sha512-C5VHkK59/DQNrJS91UXLn5OSr0drXHkKjajhl2a9hb3h6kxuSdlWbyC0yRPKT1sD0fQho8+EWZHBiV063yBePw==} '@walletconnect/time@1.0.2': - resolution: - { integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== } + resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} '@walletconnect/types@2.10.4': - resolution: - { integrity: sha512-eQpOElyiwJp3tepuOS3TS9dXTl9jVVlrC3iVA8bytnbLagkAUxmiv/s7PyDFx+ndXwQVh8PFBkWg1oxGwgCSBA== } + resolution: {integrity: sha512-eQpOElyiwJp3tepuOS3TS9dXTl9jVVlrC3iVA8bytnbLagkAUxmiv/s7PyDFx+ndXwQVh8PFBkWg1oxGwgCSBA==} '@walletconnect/utils@2.10.4': - resolution: - { integrity: sha512-XbrKgnQ0hC9DC9wjFb468MEYMoJxnCVmOj2gi01DA4FSr8fJi7wwNRUnlnZzLWrUWrHuaPReYe4PgBAgIv363g== } + resolution: {integrity: sha512-XbrKgnQ0hC9DC9wjFb468MEYMoJxnCVmOj2gi01DA4FSr8fJi7wwNRUnlnZzLWrUWrHuaPReYe4PgBAgIv363g==} '@walletconnect/window-getters@1.0.1': - resolution: - { integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== } + resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} '@walletconnect/window-metadata@1.0.1': - resolution: - { integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== } + resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} '@web3modal/core@2.7.1': - resolution: - { integrity: sha512-eFWR1tK1qN4FguhaZq2VW0AVr8DC/Fox2eJnK1eTfk32hxSgUtl8wr5fVM8EoLeoapQ7Zcc0SNg/QLuLQ9t2tA== } + resolution: {integrity: sha512-eFWR1tK1qN4FguhaZq2VW0AVr8DC/Fox2eJnK1eTfk32hxSgUtl8wr5fVM8EoLeoapQ7Zcc0SNg/QLuLQ9t2tA==} '@web3modal/react@2.7.1': - resolution: - { integrity: sha512-+zvP5Q7Q3ozW2hyA1NvS8giVDeZWA6PWgVhKA6656dCnOutonPUpWYuFPJahsFBYCrhLO8ApPmomgb6Dx/mh5A== } + resolution: {integrity: sha512-+zvP5Q7Q3ozW2hyA1NvS8giVDeZWA6PWgVhKA6656dCnOutonPUpWYuFPJahsFBYCrhLO8ApPmomgb6Dx/mh5A==} deprecated: Please use new @web3modal/wagmi package peerDependencies: react: '>=17' react-dom: '>=17' '@web3modal/ui@2.7.1': - resolution: - { integrity: sha512-JpGJbLAl/Wmuyyn+JwuwtlPD8mUW2HV/gsSxKWZoElgjbfDY4vjHo9PH2G++2HhugISfzjawp43r8lP/hWgWOQ== } + resolution: {integrity: sha512-JpGJbLAl/Wmuyyn+JwuwtlPD8mUW2HV/gsSxKWZoElgjbfDY4vjHo9PH2G++2HhugISfzjawp43r8lP/hWgWOQ==} '@webassemblyjs/ast@1.11.6': - resolution: - { integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== } + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} '@webassemblyjs/ast@1.9.0': - resolution: - { integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== } + resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==} '@webassemblyjs/floating-point-hex-parser@1.11.6': - resolution: - { integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== } + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} '@webassemblyjs/floating-point-hex-parser@1.9.0': - resolution: - { integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== } + resolution: {integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==} '@webassemblyjs/helper-api-error@1.11.6': - resolution: - { integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== } + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} '@webassemblyjs/helper-api-error@1.9.0': - resolution: - { integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== } + resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==} '@webassemblyjs/helper-buffer@1.11.6': - resolution: - { integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== } + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} '@webassemblyjs/helper-buffer@1.9.0': - resolution: - { integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== } + resolution: {integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==} '@webassemblyjs/helper-code-frame@1.9.0': - resolution: - { integrity: sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== } + resolution: {integrity: sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==} '@webassemblyjs/helper-fsm@1.9.0': - resolution: - { integrity: sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== } + resolution: {integrity: sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==} '@webassemblyjs/helper-module-context@1.9.0': - resolution: - { integrity: sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== } + resolution: {integrity: sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==} '@webassemblyjs/helper-numbers@1.11.6': - resolution: - { integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== } + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} '@webassemblyjs/helper-wasm-bytecode@1.11.6': - resolution: - { integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== } + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} '@webassemblyjs/helper-wasm-bytecode@1.9.0': - resolution: - { integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== } + resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==} '@webassemblyjs/helper-wasm-section@1.11.6': - resolution: - { integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== } + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} '@webassemblyjs/helper-wasm-section@1.9.0': - resolution: - { integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== } + resolution: {integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==} '@webassemblyjs/ieee754@1.11.6': - resolution: - { integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== } + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} '@webassemblyjs/ieee754@1.9.0': - resolution: - { integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== } + resolution: {integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==} '@webassemblyjs/leb128@1.11.6': - resolution: - { integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== } + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} '@webassemblyjs/leb128@1.9.0': - resolution: - { integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== } + resolution: {integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==} '@webassemblyjs/utf8@1.11.6': - resolution: - { integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== } + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} '@webassemblyjs/utf8@1.9.0': - resolution: - { integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== } + resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==} '@webassemblyjs/wasm-edit@1.11.6': - resolution: - { integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== } + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} '@webassemblyjs/wasm-edit@1.9.0': - resolution: - { integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== } + resolution: {integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==} '@webassemblyjs/wasm-gen@1.11.6': - resolution: - { integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== } + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} '@webassemblyjs/wasm-gen@1.9.0': - resolution: - { integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== } + resolution: {integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==} '@webassemblyjs/wasm-opt@1.11.6': - resolution: - { integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== } + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} '@webassemblyjs/wasm-opt@1.9.0': - resolution: - { integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== } + resolution: {integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==} '@webassemblyjs/wasm-parser@1.11.6': - resolution: - { integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== } + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} '@webassemblyjs/wasm-parser@1.9.0': - resolution: - { integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== } + resolution: {integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==} '@webassemblyjs/wast-parser@1.9.0': - resolution: - { integrity: sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== } + resolution: {integrity: sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==} '@webassemblyjs/wast-printer@1.11.6': - resolution: - { integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== } + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} '@webassemblyjs/wast-printer@1.9.0': - resolution: - { integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== } + resolution: {integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==} '@webpack-cli/configtest@2.1.1': - resolution: - { integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== } - engines: { node: '>=14.15.0' } + resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} + engines: {node: '>=14.15.0'} peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x '@webpack-cli/info@2.0.2': - resolution: - { integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== } - engines: { node: '>=14.15.0' } + resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} + engines: {node: '>=14.15.0'} peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x '@webpack-cli/serve@2.0.5': - resolution: - { integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== } - engines: { node: '>=14.15.0' } + resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} + engines: {node: '>=14.15.0'} peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x @@ -3948,139 +3346,112 @@ packages: optional: true '@wry/context@0.7.4': - resolution: - { integrity: sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==} + engines: {node: '>=8'} '@wry/equality@0.5.7': - resolution: - { integrity: sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==} + engines: {node: '>=8'} '@wry/trie@0.3.2': - resolution: - { integrity: sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ==} + engines: {node: '>=8'} '@xmldom/xmldom@0.8.10': - resolution: - { integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} '@xtuc/ieee754@1.2.0': - resolution: - { integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== } + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} '@xtuc/long@4.2.2': - resolution: - { integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== } + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} '@zxing/browser@0.1.3': - resolution: - { integrity: sha512-PauJzwg5SqZBI2fGmEeRWJHj/1CZd6L2waPaAVQgdTCTlS7h0NrTH/XXEQIjYYg2gFpFALtH2MtLNlUEIGZShg== } + resolution: {integrity: sha512-PauJzwg5SqZBI2fGmEeRWJHj/1CZd6L2waPaAVQgdTCTlS7h0NrTH/XXEQIjYYg2gFpFALtH2MtLNlUEIGZShg==} peerDependencies: '@zxing/library': ^0.20.0 '@zxing/library@0.20.0': - resolution: - { integrity: sha512-6Ev6rcqVjMakZFIDvbUf0dtpPGeZMTfyxYg4HkVWioWeN7cRcnUWT3bU6sdohc82O1nPXcjq6WiGfXX2Pnit6A== } - engines: { node: '>= 10.4.0' } + resolution: {integrity: sha512-6Ev6rcqVjMakZFIDvbUf0dtpPGeZMTfyxYg4HkVWioWeN7cRcnUWT3bU6sdohc82O1nPXcjq6WiGfXX2Pnit6A==} + engines: {node: '>= 10.4.0'} '@zxing/text-encoding@0.9.0': - resolution: - { integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== } + resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} JSONStream@1.3.5: - resolution: - { integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== } + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true abab@2.0.6: - resolution: - { integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== } + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead abbrev@1.1.1: - resolution: - { integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== } + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} accepts@1.3.8: - resolution: - { integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} acorn-globals@7.0.1: - resolution: - { integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== } + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} acorn-import-assertions@1.9.0: - resolution: - { integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== } + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 acorn-jsx@5.3.2: - resolution: - { integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn-walk@7.2.0: - resolution: - { integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} acorn-walk@8.3.1: - resolution: - { integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} + engines: {node: '>=0.4.0'} acorn@6.4.2: - resolution: - { integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} + engines: {node: '>=0.4.0'} hasBin: true acorn@7.4.1: - resolution: - { integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} hasBin: true acorn@8.11.2: - resolution: - { integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} hasBin: true address@1.2.2: - resolution: - { integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} agent-base@6.0.2: - resolution: - { integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== } - engines: { node: '>= 6.0.0' } + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} aggregate-error@3.1.0: - resolution: - { integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} airbnb-js-shims@2.2.1: - resolution: - { integrity: sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ== } + resolution: {integrity: sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==} ajv-errors@1.0.1: - resolution: - { integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== } + resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} peerDependencies: ajv: '>=5.0.0' ajv-formats@2.1.1: - resolution: - { integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== } + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: @@ -4088,1294 +3459,1016 @@ packages: optional: true ajv-keywords@3.5.2: - resolution: - { integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== } + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 ajv-keywords@5.1.0: - resolution: - { integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== } + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 ajv@6.12.6: - resolution: - { integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== } + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} ajv@8.12.0: - resolution: - { integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== } + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} ansi-align@3.0.1: - resolution: - { integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== } + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} ansi-colors@3.2.4: - resolution: - { integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} + engines: {node: '>=6'} ansi-escapes@4.3.2: - resolution: - { integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} ansi-html-community@0.0.8: - resolution: - { integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== } - engines: { '0': node >= 0.8.0 } + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} hasBin: true ansi-regex@2.1.1: - resolution: - { integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} ansi-regex@3.0.1: - resolution: - { integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} ansi-regex@5.0.1: - resolution: - { integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} ansi-regex@6.0.1: - resolution: - { integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== } - engines: { node: '>=12' } + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} ansi-styles@3.2.1: - resolution: - { integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} ansi-styles@4.3.0: - resolution: - { integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} ansi-styles@5.2.0: - resolution: - { integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} ansi-styles@6.2.1: - resolution: - { integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== } - engines: { node: '>=12' } + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} ansi-to-html@0.6.15: - resolution: - { integrity: sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ== } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==} + engines: {node: '>=8.0.0'} hasBin: true any-promise@1.3.0: - resolution: - { integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== } + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} anymatch@2.0.0: - resolution: - { integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== } + resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} anymatch@3.1.3: - resolution: - { integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} app-builder-bin@4.0.0: - resolution: - { integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== } + resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} app-builder-lib@24.9.1: - resolution: - { integrity: sha512-Q1nYxZcio4r+W72cnIRVYofEAyjBd3mG47o+zms8HlD51zWtA/YxJb01Jei5F+jkWhge/PTQK+uldsPh6d0/4g== } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-Q1nYxZcio4r+W72cnIRVYofEAyjBd3mG47o+zms8HlD51zWtA/YxJb01Jei5F+jkWhge/PTQK+uldsPh6d0/4g==} + engines: {node: '>=14.0.0'} app-root-dir@1.0.2: - resolution: - { integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g== } + resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} aproba@1.2.0: - resolution: - { integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== } + resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} aproba@2.0.0: - resolution: - { integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== } + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} arch@2.2.0: - resolution: - { integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== } + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} are-we-there-yet@2.0.0: - resolution: - { integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} arg@4.1.3: - resolution: - { integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== } + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} arg@5.0.2: - resolution: - { integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== } + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} argparse@1.0.10: - resolution: - { integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== } + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} argparse@2.0.1: - resolution: - { integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} aria-query@5.1.3: - resolution: - { integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== } + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} arr-diff@4.0.0: - resolution: - { integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} arr-flatten@1.1.0: - resolution: - { integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} arr-union@3.1.0: - resolution: - { integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} array-buffer-byte-length@1.0.0: - resolution: - { integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== } + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} array-differ@3.0.0: - resolution: - { integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} + engines: {node: '>=8'} array-find-index@1.0.2: - resolution: - { integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} + engines: {node: '>=0.10.0'} array-flatten@1.1.1: - resolution: - { integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== } + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} array-flatten@2.1.2: - resolution: - { integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== } + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} array-ify@1.0.0: - resolution: - { integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== } + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} array-includes@3.1.7: - resolution: - { integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} array-union@1.0.2: - resolution: - { integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} array-union@2.1.0: - resolution: - { integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} array-uniq@1.0.3: - resolution: - { integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} array-unique@0.3.2: - resolution: - { integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} array.prototype.flat@1.3.2: - resolution: - { integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} array.prototype.flatmap@1.3.2: - resolution: - { integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} array.prototype.map@1.0.6: - resolution: - { integrity: sha512-nK1psgF2cXqP3wSyCSq0Hc7zwNq3sfljQqaG27r/7a7ooNUnn5nGq6yYWyks9jMO5EoFQ0ax80hSg6oXSRNXaw== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-nK1psgF2cXqP3wSyCSq0Hc7zwNq3sfljQqaG27r/7a7ooNUnn5nGq6yYWyks9jMO5EoFQ0ax80hSg6oXSRNXaw==} + engines: {node: '>= 0.4'} array.prototype.reduce@1.0.6: - resolution: - { integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} + engines: {node: '>= 0.4'} arraybuffer.prototype.slice@1.0.2: - resolution: - { integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} arrify@1.0.1: - resolution: - { integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} arrify@2.0.1: - resolution: - { integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== } - engines: { node: '>=8' } + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} asn1.js@5.4.1: - resolution: - { integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== } + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} asn1@0.2.6: - resolution: - { integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== } + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} assert-plus@1.0.0: - resolution: - { integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== } - engines: { node: '>=0.8' } + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} assert@1.5.1: - resolution: - { integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A== } + resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==} assign-symbols@1.0.0: - resolution: - { integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} ast-types@0.14.2: - resolution: - { integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} + engines: {node: '>=4'} astral-regex@2.0.0: - resolution: - { integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} async-each@1.0.6: - resolution: - { integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== } + resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} async-exit-hook@2.0.1: - resolution: - { integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== } - engines: { node: '>=0.12.0' } + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} + engines: {node: '>=0.12.0'} async@3.2.5: - resolution: - { integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== } + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} asynckit@0.4.0: - resolution: - { integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== } + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} at-least-node@1.0.0: - resolution: - { integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== } - engines: { node: '>= 4.0.0' } + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} atob@2.1.2: - resolution: - { integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== } - engines: { node: '>= 4.5.0' } + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} hasBin: true atomic-sleep@1.0.0: - resolution: - { integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} atomically@1.7.0: - resolution: - { integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== } - engines: { node: '>=10.12.0' } + resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} + engines: {node: '>=10.12.0'} autoprefixer@10.4.13: - resolution: - { integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 autoprefixer@9.8.8: - resolution: - { integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA== } + resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==} hasBin: true available-typed-arrays@1.0.5: - resolution: - { integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} aws-sign2@0.7.0: - resolution: - { integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== } + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} aws4@1.12.0: - resolution: - { integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== } + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} axios@0.28.0: - resolution: - { integrity: sha512-Tu7NYoGY4Yoc7I+Npf9HhUMtEEpV7ZiLH9yndTCoNhcpBH0kwcvFbzYN9/u5QKI5A6uefjsNNWaz5olJVYS62Q== } + resolution: {integrity: sha512-Tu7NYoGY4Yoc7I+Npf9HhUMtEEpV7ZiLH9yndTCoNhcpBH0kwcvFbzYN9/u5QKI5A6uefjsNNWaz5olJVYS62Q==} babel-jest@29.7.0: - resolution: - { integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 babel-loader@8.2.5: - resolution: - { integrity: sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== } - engines: { node: '>= 8.9' } + resolution: {integrity: sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==} + engines: {node: '>= 8.9'} peerDependencies: '@babel/core': ^7.0.0 webpack: '>=2' babel-plugin-add-react-displayname@0.0.5: - resolution: - { integrity: sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw== } + resolution: {integrity: sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==} babel-plugin-apply-mdx-type-prop@1.6.22: - resolution: - { integrity: sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== } + resolution: {integrity: sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==} peerDependencies: '@babel/core': ^7.11.6 babel-plugin-extract-import-names@1.6.22: - resolution: - { integrity: sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== } + resolution: {integrity: sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==} babel-plugin-istanbul@6.1.1: - resolution: - { integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} babel-plugin-jest-hoist@29.6.3: - resolution: - { integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} babel-plugin-macros@3.1.0: - resolution: - { integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== } - engines: { node: '>=10', npm: '>=6' } + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} babel-plugin-named-exports-order@0.0.2: - resolution: - { integrity: sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw== } + resolution: {integrity: sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==} babel-plugin-polyfill-corejs2@0.4.6: - resolution: - { integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== } + resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 babel-plugin-polyfill-corejs3@0.1.7: - resolution: - { integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw== } + resolution: {integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==} peerDependencies: '@babel/core': ^7.0.0-0 babel-plugin-polyfill-corejs3@0.8.6: - resolution: - { integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== } + resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 babel-plugin-polyfill-regenerator@0.5.3: - resolution: - { integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== } + resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 babel-plugin-react-docgen@4.2.1: - resolution: - { integrity: sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ== } + resolution: {integrity: sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==} babel-plugin-styled-components@2.1.4: - resolution: - { integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g== } + resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==} peerDependencies: styled-components: '>= 2' babel-preset-current-node-syntax@1.0.1: - resolution: - { integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== } + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 babel-preset-jest@29.6.3: - resolution: - { integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 bail@1.0.5: - resolution: - { integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== } + resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} bail@2.0.2: - resolution: - { integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== } + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} balanced-match@1.0.2: - resolution: - { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} base64-arraybuffer-es6@0.7.0: - resolution: - { integrity: sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw==} + engines: {node: '>=6.0.0'} base64-js@1.5.1: - resolution: - { integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== } + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} base@0.11.2: - resolution: - { integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} batch@0.6.1: - resolution: - { integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== } + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} bcrypt-pbkdf@1.0.2: - resolution: - { integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== } + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} better-opn@2.1.1: - resolution: - { integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA== } - engines: { node: '>8.0.0' } + resolution: {integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==} + engines: {node: '>8.0.0'} big-integer@1.6.52: - resolution: - { integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== } - engines: { node: '>=0.6' } + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} big.js@5.2.2: - resolution: - { integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== } + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} bignumber.js@9.0.2: - resolution: - { integrity: sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== } + resolution: {integrity: sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==} bin-check@4.1.0: - resolution: - { integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==} + engines: {node: '>=4'} bin-version-check@5.1.0: - resolution: - { integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g== } - engines: { node: '>=12' } + resolution: {integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==} + engines: {node: '>=12'} bin-version@6.0.0: - resolution: - { integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw== } - engines: { node: '>=12' } + resolution: {integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==} + engines: {node: '>=12'} binary-extensions@1.13.1: - resolution: - { integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==} + engines: {node: '>=0.10.0'} binary-extensions@2.2.0: - resolution: - { integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} binary-parser@2.2.1: - resolution: - { integrity: sha512-5ATpz/uPDgq5GgEDxTB4ouXCde7q2lqAQlSdBRQVl/AJnxmQmhIfyxJx+0MGu//D5rHQifkfGbWWlaysG0o9NA== } - engines: { node: '>=12' } + resolution: {integrity: sha512-5ATpz/uPDgq5GgEDxTB4ouXCde7q2lqAQlSdBRQVl/AJnxmQmhIfyxJx+0MGu//D5rHQifkfGbWWlaysG0o9NA==} + engines: {node: '>=12'} bindings@1.5.0: - resolution: - { integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== } + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} bluebird-lst@1.0.9: - resolution: - { integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== } + resolution: {integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==} bluebird@3.7.2: - resolution: - { integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== } + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} bn.js@4.12.0: - resolution: - { integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== } + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} bn.js@5.2.1: - resolution: - { integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== } + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} body-parser@1.20.2: - resolution: - { integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== } - engines: { node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16 } + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} bonjour-service@1.1.1: - resolution: - { integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== } + resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} boolbase@1.0.0: - resolution: - { integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== } + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} boolean@3.2.0: - resolution: - { integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== } + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} boxen@5.1.2: - resolution: - { integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} bplist-parser@0.1.1: - resolution: - { integrity: sha512-2AEM0FXy8ZxVLBuqX0hqt1gDwcnz2zygEkQ6zaD5Wko/sB9paUNwlpawrFtKeHUAQUOzjVy9AO4oeonqIHKA9Q== } + resolution: {integrity: sha512-2AEM0FXy8ZxVLBuqX0hqt1gDwcnz2zygEkQ6zaD5Wko/sB9paUNwlpawrFtKeHUAQUOzjVy9AO4oeonqIHKA9Q==} brace-expansion@1.1.11: - resolution: - { integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== } + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} brace-expansion@2.0.1: - resolution: - { integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== } + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} braces@2.3.2: - resolution: - { integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} braces@3.0.2: - resolution: - { integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== } - engines: { node: '>=8' } + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} brorand@1.1.0: - resolution: - { integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== } + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} browser-assert@1.2.1: - resolution: - { integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ== } + resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} browserify-aes@1.2.0: - resolution: - { integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== } + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} browserify-cipher@1.0.1: - resolution: - { integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== } + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} browserify-des@1.0.2: - resolution: - { integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== } + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} browserify-rsa@4.1.0: - resolution: - { integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== } + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} browserify-sign@4.2.2: - resolution: - { integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg== } - engines: { node: '>= 4' } + resolution: {integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==} + engines: {node: '>= 4'} browserify-zlib@0.2.0: - resolution: - { integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== } + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} browserslist@4.22.2: - resolution: - { integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true bs-logger@0.2.6: - resolution: - { integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} bser@2.1.1: - resolution: - { integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== } + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} buffer-crc32@0.2.13: - resolution: - { integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== } + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} buffer-equal@1.0.1: - resolution: - { integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== } - engines: { node: '>=0.4' } + resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==} + engines: {node: '>=0.4'} buffer-from@1.1.2: - resolution: - { integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== } + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} buffer-xor@1.0.3: - resolution: - { integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== } + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} buffer@4.9.2: - resolution: - { integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== } + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} buffer@5.7.1: - resolution: - { integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== } + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} buffer@6.0.3: - resolution: - { integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== } + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} builder-util-runtime@9.2.1: - resolution: - { integrity: sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA== } - engines: { node: '>=12.0.0' } + resolution: {integrity: sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==} + engines: {node: '>=12.0.0'} builder-util-runtime@9.2.3: - resolution: - { integrity: sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw== } - engines: { node: '>=12.0.0' } + resolution: {integrity: sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==} + engines: {node: '>=12.0.0'} builder-util@24.8.1: - resolution: - { integrity: sha512-ibmQ4BnnqCnJTNrdmdNlnhF48kfqhNzSeqFMXHLIl+o9/yhn6QfOaVrloZ9YUu3m0k3rexvlT5wcki6LWpjTZw== } + resolution: {integrity: sha512-ibmQ4BnnqCnJTNrdmdNlnhF48kfqhNzSeqFMXHLIl+o9/yhn6QfOaVrloZ9YUu3m0k3rexvlT5wcki6LWpjTZw==} builtin-status-codes@3.0.0: - resolution: - { integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== } + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} bytes@3.0.0: - resolution: - { integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} bytes@3.1.2: - resolution: - { integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} c8@7.14.0: - resolution: - { integrity: sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw== } - engines: { node: '>=10.12.0' } + resolution: {integrity: sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==} + engines: {node: '>=10.12.0'} hasBin: true cacache@12.0.4: - resolution: - { integrity: sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== } + resolution: {integrity: sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==} cacache@15.3.0: - resolution: - { integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== } - engines: { node: '>= 10' } + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} + engines: {node: '>= 10'} cache-base@1.0.1: - resolution: - { integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} cacheable-lookup@5.0.4: - resolution: - { integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== } - engines: { node: '>=10.6.0' } + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} cacheable-request@6.1.0: - resolution: - { integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} + engines: {node: '>=8'} cacheable-request@7.0.4: - resolution: - { integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} call-bind@1.0.5: - resolution: - { integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== } + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} call-me-maybe@1.0.2: - resolution: - { integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== } + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} callsites@3.1.0: - resolution: - { integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} camel-case@4.1.2: - resolution: - { integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== } + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} camelcase-css@2.0.1: - resolution: - { integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} camelcase-keys@2.1.0: - resolution: - { integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==} + engines: {node: '>=0.10.0'} camelcase-keys@6.2.2: - resolution: - { integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} camelcase@2.1.1: - resolution: - { integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==} + engines: {node: '>=0.10.0'} camelcase@5.3.1: - resolution: - { integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} camelcase@6.3.0: - resolution: - { integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} camelize@1.0.1: - resolution: - { integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== } + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} caniuse-api@3.0.0: - resolution: - { integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== } + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} caniuse-lite@1.0.30001568: - resolution: - { integrity: sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== } + resolution: {integrity: sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A==} canvas-renderer@2.2.1: - resolution: - { integrity: sha512-RrBgVL5qCEDIXpJ6NrzyRNoTnXxYarqm/cS/W6ERhUJts5UQtt/XPEosGN3rqUkZ4fjBArlnCbsISJ+KCFnIAg== } + resolution: {integrity: sha512-RrBgVL5qCEDIXpJ6NrzyRNoTnXxYarqm/cS/W6ERhUJts5UQtt/XPEosGN3rqUkZ4fjBArlnCbsISJ+KCFnIAg==} capture-exit@2.0.0: - resolution: - { integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== } - engines: { node: 6.* || 8.* || >= 10.* } + resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} + engines: {node: 6.* || 8.* || >= 10.*} case-sensitive-paths-webpack-plugin@2.4.0: - resolution: - { integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} + engines: {node: '>=4'} caseless@0.12.0: - resolution: - { integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== } + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} ccount@1.1.0: - resolution: - { integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== } + resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} ccount@2.0.1: - resolution: - { integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== } + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} chalk@2.4.2: - resolution: - { integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} chalk@3.0.0: - resolution: - { integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} chalk@4.1.2: - resolution: - { integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} char-regex@1.0.2: - resolution: - { integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} character-entities-html4@2.1.0: - resolution: - { integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== } + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} character-entities-legacy@1.1.4: - resolution: - { integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== } + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} character-entities-legacy@3.0.0: - resolution: - { integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== } + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} character-entities@1.2.4: - resolution: - { integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== } + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} character-entities@2.0.2: - resolution: - { integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== } + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} character-reference-invalid@1.1.4: - resolution: - { integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== } + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} character-reference-invalid@2.0.1: - resolution: - { integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== } + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} child_process@1.0.2: - resolution: - { integrity: sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g== } + resolution: {integrity: sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g==} chokidar@2.1.8: - resolution: - { integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== } + resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies chokidar@3.5.3: - resolution: - { integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== } - engines: { node: '>= 8.10.0' } + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} chokidar@3.6.0: - resolution: - { integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== } - engines: { node: '>= 8.10.0' } + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} chownr@1.1.4: - resolution: - { integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== } + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} chownr@2.0.0: - resolution: - { integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} chrome-trace-event@1.0.3: - resolution: - { integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} chromium-pickle-js@0.2.0: - resolution: - { integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== } + resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} ci-info@2.0.0: - resolution: - { integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== } + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} ci-info@3.9.0: - resolution: - { integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} cipher-base@1.0.4: - resolution: - { integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== } + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} citty@0.1.5: - resolution: - { integrity: sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ== } + resolution: {integrity: sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ==} cjs-module-lexer@1.2.3: - resolution: - { integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== } + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} class-utils@0.3.6: - resolution: - { integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} classnames@2.3.1: - resolution: - { integrity: sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== } + resolution: {integrity: sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==} clean-css@4.2.4: - resolution: - { integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== } - engines: { node: '>= 4.0' } + resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} + engines: {node: '>= 4.0'} clean-css@5.3.3: - resolution: - { integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== } - engines: { node: '>= 10.0' } + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} clean-stack@2.2.0: - resolution: - { integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== } - engines: { node: '>=6' } + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} cli-boxes@2.2.1: - resolution: - { integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== } - engines: { node: '>=6' } + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} cli-cursor@3.1.0: - resolution: - { integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} cli-table3@0.6.3: - resolution: - { integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== } - engines: { node: 10.* || >= 12.* } + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} cli-truncate@2.1.0: - resolution: - { integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} cli-truncate@3.1.0: - resolution: - { integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} client-only@0.0.1: - resolution: - { integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== } + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} clipboardy@3.0.0: - resolution: - { integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} cliui@6.0.0: - resolution: - { integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== } + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} cliui@7.0.4: - resolution: - { integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== } + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} cliui@8.0.1: - resolution: - { integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} clone-deep@4.0.1: - resolution: - { integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} clone-response@1.0.3: - resolution: - { integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== } + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} clsx@1.1.0: - resolution: - { integrity: sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==} + engines: {node: '>=6'} cluster-key-slot@1.1.2: - resolution: - { integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} co@4.6.0: - resolution: - { integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== } - engines: { iojs: '>= 1.0.0', node: '>= 0.12.0' } + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} collapse-white-space@1.0.6: - resolution: - { integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== } + resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} collect-v8-coverage@1.0.2: - resolution: - { integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== } + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} collection-visit@1.0.0: - resolution: - { integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} color-convert@1.9.3: - resolution: - { integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== } + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} color-convert@2.0.1: - resolution: - { integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== } - engines: { node: '>=7.0.0' } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} color-name@1.1.3: - resolution: - { integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== } + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} color-name@1.1.4: - resolution: - { integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} color-support@1.1.3: - resolution: - { integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== } + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true colord@2.9.3: - resolution: - { integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== } + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} colorette@1.4.0: - resolution: - { integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== } + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} colorette@2.0.20: - resolution: - { integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== } + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} combined-stream@1.0.8: - resolution: - { integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} comma-separated-tokens@1.0.8: - resolution: - { integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== } + resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} comma-separated-tokens@2.0.3: - resolution: - { integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== } + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} commander@10.0.1: - resolution: - { integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== } - engines: { node: '>=14' } + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} 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==} commander@4.1.1: - resolution: - { integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} commander@5.1.0: - resolution: - { integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} commander@6.2.1: - resolution: - { integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} commander@7.2.0: - resolution: - { integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== } - engines: { node: '>= 10' } + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} commander@8.3.0: - resolution: - { integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== } - engines: { node: '>= 12' } + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} commander@9.5.0: - resolution: - { integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== } - engines: { node: ^12.20.0 || >=14 } + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} common-path-prefix@3.0.0: - resolution: - { integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== } + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} commondir@1.0.1: - resolution: - { integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== } + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} compare-func@2.0.0: - resolution: - { integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== } + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} compare-version@0.1.2: - resolution: - { integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} + engines: {node: '>=0.10.0'} component-emitter@1.3.1: - resolution: - { integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== } + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} compressible@2.0.18: - resolution: - { integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} compression@1.7.4: - resolution: - { integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} concat-map@0.0.1: - resolution: - { integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== } + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} concat-stream@1.6.2: - resolution: - { integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== } - engines: { '0': node >= 0.8 } + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} concurrently@7.2.2: - resolution: - { integrity: sha512-DcQkI0ruil5BA/g7Xy3EWySGrFJovF5RYAYxwGvv9Jf9q9B1v3jPFP2tl6axExNf1qgF30kjoNYrangZ0ey4Aw== } - engines: { node: ^12.20.0 || ^14.13.0 || >=16.0.0 } + resolution: {integrity: sha512-DcQkI0ruil5BA/g7Xy3EWySGrFJovF5RYAYxwGvv9Jf9q9B1v3jPFP2tl6axExNf1qgF30kjoNYrangZ0ey4Aw==} + engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} hasBin: true conf@10.2.0: - resolution: - { integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg== } - engines: { node: '>=12' } + resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} + engines: {node: '>=12'} config-file-ts@0.2.6: - resolution: - { integrity: sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w== } + resolution: {integrity: sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==} configstore@5.0.1: - resolution: - { integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} + engines: {node: '>=8'} connect-history-api-fallback@2.0.0: - resolution: - { integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== } - engines: { node: '>=0.8' } + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} consola@3.2.3: - resolution: - { integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== } - engines: { node: ^14.18.0 || >=16.10.0 } + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} console-browserify@1.2.0: - resolution: - { integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== } + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} console-control-strings@1.1.0: - resolution: - { integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== } + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} constants-browserify@1.0.0: - resolution: - { integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== } + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} content-disposition@0.5.4: - resolution: - { integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} content-type@1.0.5: - resolution: - { integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} conventional-changelog-angular@6.0.0: - resolution: - { integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg== } - engines: { node: '>=14' } + resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==} + engines: {node: '>=14'} conventional-changelog-conventionalcommits@5.0.0: - resolution: - { integrity: sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==} + engines: {node: '>=10'} conventional-commits-parser@4.0.0: - resolution: - { integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== } - engines: { node: '>=14' } + resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} + engines: {node: '>=14'} hasBin: true convert-source-map@1.9.0: - resolution: - { integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== } + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} convert-source-map@2.0.0: - resolution: - { integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== } + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} cookie-es@1.0.0: - resolution: - { integrity: sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ== } + resolution: {integrity: sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==} cookie-signature@1.0.6: - resolution: - { integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== } + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} cookie@0.6.0: - resolution: - { integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} copy-concurrently@1.0.5: - resolution: - { integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== } + resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==} copy-descriptor@0.1.1: - resolution: - { integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} copy-to-clipboard@3.3.3: - resolution: - { integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== } + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} copy-webpack-plugin@11.0.0: - resolution: - { integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} + engines: {node: '>= 14.15.0'} peerDependencies: webpack: ^5.1.0 core-js-compat@3.34.0: - resolution: - { integrity: sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA== } + resolution: {integrity: sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==} core-js-pure@3.34.0: - resolution: - { integrity: sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg== } + resolution: {integrity: sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg==} core-js@3.34.0: - resolution: - { integrity: sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag== } + resolution: {integrity: sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==} core-util-is@1.0.2: - resolution: - { integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== } + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} core-util-is@1.0.3: - resolution: - { integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== } + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} cosmiconfig-typescript-loader@4.4.0: - resolution: - { integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw== } - engines: { node: '>=v14.21.3' } + resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} + engines: {node: '>=v14.21.3'} peerDependencies: '@types/node': '*' cosmiconfig: '>=7' @@ -5383,19 +4476,16 @@ packages: typescript: '>=4' cosmiconfig@6.0.0: - resolution: - { integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} cosmiconfig@7.1.0: - resolution: - { integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} cosmiconfig@8.3.6: - resolution: - { integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== } - engines: { node: '>=14' } + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' peerDependenciesMeta: @@ -5403,111 +4493,90 @@ packages: optional: true cp-file@7.0.0: - resolution: - { integrity: sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==} + engines: {node: '>=8'} cpy@8.1.2: - resolution: - { integrity: sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==} + engines: {node: '>=8'} crc@3.8.0: - resolution: - { integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== } + resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} create-ecdh@4.0.4: - resolution: - { integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== } + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} create-hash@1.2.0: - resolution: - { integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== } + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} create-hmac@1.1.7: - resolution: - { integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== } + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} create-jest@29.7.0: - resolution: - { integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true create-require@1.1.1: - resolution: - { integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== } + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} cross-env@7.0.3: - resolution: - { integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== } - engines: { node: '>=10.14', npm: '>=6', yarn: '>=1' } + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true cross-fetch@3.1.8: - resolution: - { integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== } + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} cross-spawn@5.1.0: - resolution: - { integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== } + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} cross-spawn@6.0.5: - resolution: - { integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== } - engines: { node: '>=4.8' } + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} cross-spawn@7.0.3: - resolution: - { integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} crypto-browserify@3.12.0: - resolution: - { integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== } + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} crypto-random-string@2.0.0: - resolution: - { integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} css-color-keywords@1.0.0: - resolution: - { integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} css-declaration-sorter@6.4.1: - resolution: - { integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} peerDependencies: postcss: ^8.0.9 css-loader@3.6.0: - resolution: - { integrity: sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== } - engines: { node: '>= 8.9.0' } + resolution: {integrity: sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==} + engines: {node: '>= 8.9.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 css-loader@5.2.7: - resolution: - { integrity: sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==} + engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.27.0 || ^5.0.0 css-loader@6.7.1: - resolution: - { integrity: sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==} + engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 css-minimizer-webpack-plugin@4.0.0: - resolution: - { integrity: sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA== } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA==} + engines: {node: '>= 14.15.0'} peerDependencies: '@parcel/css': '*' clean-css: '*' @@ -5525,122 +4594,98 @@ packages: optional: true css-select@4.3.0: - resolution: - { integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== } + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} css-to-react-native@3.2.0: - resolution: - { integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== } + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} css-tree@1.1.3: - resolution: - { integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} css-what@6.1.0: - resolution: - { integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} css.escape@1.5.1: - resolution: - { integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== } + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} cssesc@3.0.0: - resolution: - { integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} hasBin: true cssnano-preset-default@5.2.14: - resolution: - { integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 cssnano-utils@3.1.0: - resolution: - { integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 cssnano@5.1.15: - resolution: - { integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 csso@4.2.0: - resolution: - { integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} cssom@0.3.8: - resolution: - { integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== } + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} cssom@0.5.0: - resolution: - { integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== } + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} cssstyle@2.3.0: - resolution: - { integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== } - engines: { node: '>=8' } + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} csstype@3.1.3: - resolution: - { integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== } + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} currently-unhandled@0.4.1: - resolution: - { integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} + engines: {node: '>=0.10.0'} cyclist@1.0.2: - resolution: - { integrity: sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA== } + resolution: {integrity: sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==} d@1.0.1: - resolution: - { integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== } + resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} dargs@7.0.0: - resolution: - { integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} dashdash@1.14.1: - resolution: - { integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} data-uri-to-buffer@4.0.1: - resolution: - { integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== } - engines: { node: '>= 12' } + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} data-urls@3.0.2: - resolution: - { integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} + engines: {node: '>=12'} date-fns@2.29.3: - resolution: - { integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== } - engines: { node: '>=0.11' } + resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} + engines: {node: '>=0.11'} debounce-fn@4.0.0: - resolution: - { integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} + engines: {node: '>=10'} debug@2.6.9: - resolution: - { integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== } + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -5648,8 +4693,7 @@ packages: optional: true debug@3.2.7: - resolution: - { integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== } + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -5657,9 +4701,8 @@ packages: optional: true debug@4.3.4: - resolution: - { integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -5667,45 +4710,36 @@ packages: optional: true decamelize-keys@1.1.1: - resolution: - { integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} decamelize@1.2.0: - resolution: - { integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} decimal.js@10.4.3: - resolution: - { integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== } + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} decode-named-character-reference@1.0.2: - resolution: - { integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== } + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} decode-uri-component@0.2.2: - resolution: - { integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} decompress-response@3.3.0: - resolution: - { integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} decompress-response@6.0.0: - resolution: - { integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} dedent@0.7.0: - resolution: - { integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== } + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dedent@1.5.1: - resolution: - { integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== } + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -5713,633 +4747,500 @@ packages: optional: true deep-equal@2.2.3: - resolution: - { integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} deep-extend@0.6.0: - resolution: - { integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== } - engines: { node: '>=4.0.0' } + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} deep-is@0.1.4: - resolution: - { integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} deepmerge@4.3.1: - resolution: - { integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} default-browser-id@1.0.4: - resolution: - { integrity: sha512-qPy925qewwul9Hifs+3sx1ZYn14obHxpkX+mPD369w4Rzg+YkJBgi3SOvwUq81nWSjqGUegIgEPwD8u+HUnxlw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-qPy925qewwul9Hifs+3sx1ZYn14obHxpkX+mPD369w4Rzg+YkJBgi3SOvwUq81nWSjqGUegIgEPwD8u+HUnxlw==} + engines: {node: '>=0.10.0'} hasBin: true default-gateway@6.0.3: - resolution: - { integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== } - engines: { node: '>= 10' } + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} defer-to-connect@1.1.3: - resolution: - { integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== } + resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} defer-to-connect@2.0.1: - resolution: - { integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} define-data-property@1.1.1: - resolution: - { integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} define-lazy-prop@2.0.0: - resolution: - { integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== } - engines: { node: '>=8' } + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} define-properties@1.2.1: - resolution: - { integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} define-property@0.2.5: - resolution: - { integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} define-property@1.0.0: - resolution: - { integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} define-property@2.0.2: - resolution: - { integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} defu@6.1.3: - resolution: - { integrity: sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ== } + resolution: {integrity: sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==} delayed-stream@1.0.0: - resolution: - { integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} delegates@1.0.0: - resolution: - { integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== } + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} denque@2.1.0: - resolution: - { integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} depd@1.1.2: - resolution: - { integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} depd@2.0.0: - resolution: - { integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} dequal@2.0.3: - resolution: - { integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} des.js@1.1.0: - resolution: - { integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== } + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} destr@2.0.2: - resolution: - { integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg== } + resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==} destroy@1.2.0: - resolution: - { integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== } - engines: { node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16 } + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} detab@2.0.4: - resolution: - { integrity: sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== } + resolution: {integrity: sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==} detect-browser@5.3.0: - resolution: - { integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== } + resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} detect-libc@1.0.3: - resolution: - { integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} hasBin: true detect-newline@3.1.0: - resolution: - { integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} detect-node@2.1.0: - resolution: - { integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== } + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} detect-package-manager@2.0.1: - resolution: - { integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A== } - engines: { node: '>=12' } + resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} + engines: {node: '>=12'} detect-port@1.5.1: - resolution: - { integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== } + resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} hasBin: true devlop@1.1.0: - resolution: - { integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== } + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} dexie-react-hooks@1.1.6: - resolution: - { integrity: sha512-xSblWtmPwhafWNWMECsW7zMMmBu8goH3QqTxEfwBNoNG1mgsM0oFclippev7ss9HhKICqBwTjgqpscci5Ed4mA== } + resolution: {integrity: sha512-xSblWtmPwhafWNWMECsW7zMMmBu8goH3QqTxEfwBNoNG1mgsM0oFclippev7ss9HhKICqBwTjgqpscci5Ed4mA==} peerDependencies: '@types/react': '>=16' dexie: ^3.2 || ^4.0.1-alpha react: '>=16' dexie@3.2.4: - resolution: - { integrity: sha512-VKoTQRSv7+RnffpOJ3Dh6ozknBqzWw/F3iqMdsZg958R0AS8AnY9x9d1lbwENr0gzeGJHXKcGhAMRaqys6SxqA== } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-VKoTQRSv7+RnffpOJ3Dh6ozknBqzWw/F3iqMdsZg958R0AS8AnY9x9d1lbwENr0gzeGJHXKcGhAMRaqys6SxqA==} + engines: {node: '>=6.0'} didyoumean@1.2.2: - resolution: - { integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== } + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} diff-sequences@29.6.3: - resolution: - { integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} diff@3.5.0: - resolution: - { integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== } - engines: { node: '>=0.3.1' } + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} diff@4.0.2: - resolution: - { integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== } - engines: { node: '>=0.3.1' } + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} diffie-hellman@5.0.3: - resolution: - { integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== } + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dijkstrajs@1.0.3: - resolution: - { integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== } + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} dir-compare@3.3.0: - resolution: - { integrity: sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg== } + resolution: {integrity: sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==} dir-glob@2.2.2: - resolution: - { integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} + engines: {node: '>=4'} dir-glob@3.0.1: - resolution: - { integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dlv@1.1.3: - resolution: - { integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== } + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dmg-builder@24.9.1: - resolution: - { integrity: sha512-huC+O6hvHd24Ubj3cy2GMiGLe2xGFKN3klqVMLAdcbB6SWMd1yPSdZvV8W1O01ICzCCRlZDHiv4VrNUgnPUfbQ== } + resolution: {integrity: sha512-huC+O6hvHd24Ubj3cy2GMiGLe2xGFKN3klqVMLAdcbB6SWMd1yPSdZvV8W1O01ICzCCRlZDHiv4VrNUgnPUfbQ==} dmg-license@1.0.11: - resolution: - { integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} + engines: {node: '>=8'} os: [darwin] hasBin: true dns-equal@1.0.0: - resolution: - { integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== } + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} dns-packet@5.6.1: - resolution: - { integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== } - engines: { node: '>=6' } + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} doctrine@2.1.0: - resolution: - { integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} doctrine@3.0.0: - resolution: - { integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dom-accessibility-api@0.5.16: - resolution: - { integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== } + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} dom-accessibility-api@0.6.3: - resolution: - { integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== } + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} dom-converter@0.2.0: - resolution: - { integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== } + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} dom-serializer@1.4.1: - resolution: - { integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== } + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} dom-walk@0.1.2: - resolution: - { integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== } + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} domain-browser@1.2.0: - resolution: - { integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== } - engines: { node: '>=0.4', npm: '>=1.2' } + resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} + engines: {node: '>=0.4', npm: '>=1.2'} domelementtype@2.3.0: - resolution: - { integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== } + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} domexception@1.0.1: - resolution: - { integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== } + resolution: {integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==} deprecated: Use your platform's native DOMException instead domexception@4.0.0: - resolution: - { integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== } - engines: { node: '>=12' } + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} deprecated: Use your platform's native DOMException instead domhandler@4.3.1: - resolution: - { integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== } - engines: { node: '>= 4' } + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} domutils@2.8.0: - resolution: - { integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== } + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} dot-case@3.0.4: - resolution: - { integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== } + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dot-prop@5.3.0: - resolution: - { integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== } - engines: { node: '>=8' } + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} dot-prop@6.0.1: - resolution: - { integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} dotenv-expand@5.1.0: - resolution: - { integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== } + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} dotenv@8.6.0: - resolution: - { integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== } - engines: { node: '>=10' } + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} dotenv@9.0.2: - resolution: - { integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==} + engines: {node: '>=10'} duplexer3@0.1.5: - resolution: - { integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== } + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} duplexify@3.7.1: - resolution: - { integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== } + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} duplexify@4.1.2: - resolution: - { integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== } + resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} eastasianwidth@0.2.0: - resolution: - { integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== } + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} ecc-jsbn@0.1.2: - resolution: - { integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== } + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} ee-first@1.1.1: - resolution: - { integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== } + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} effector-forms@2.0.0-next.0: - resolution: - { integrity: sha512-aFKOWBdj/kU/xedCwlmHrBzgl3OPcJ2442oZqTAcAgRiSJ4sFy5nENW7tIW+ZDosqVTVd6GkvqlMtmnSHEKroA== } + resolution: {integrity: sha512-aFKOWBdj/kU/xedCwlmHrBzgl3OPcJ2442oZqTAcAgRiSJ4sFy5nENW7tIW+ZDosqVTVd6GkvqlMtmnSHEKroA==} peerDependencies: effector: '>=23.0.0 <24.0.0' effector-react: '>=23.0.0 <24.0.0' effector-react@23.1.0: - resolution: - { integrity: sha512-RrCyu45zhxzIwzy6azjgPjXENRM2AM4y3TJF4faj5vN6z0u8ItR9W91wokHu5+BwFj6MKg2NxQkL4r4jWtIRoQ== } - engines: { node: '>=11.0.0' } + resolution: {integrity: sha512-RrCyu45zhxzIwzy6azjgPjXENRM2AM4y3TJF4faj5vN6z0u8ItR9W91wokHu5+BwFj6MKg2NxQkL4r4jWtIRoQ==} + engines: {node: '>=11.0.0'} peerDependencies: effector: ^23.0.0 react: '>=16.8.0 <19.0.0' effector-swc-plugin@0.4.0: - resolution: - { integrity: sha512-1/QB5vgbuMZZW5fb/tX9m6i9VGwoLrGGZXaWWKl185AQp5PXlqblgq5fMcBdtf5i+BoWnkRymt3DpfhzfQAlKQ== } + resolution: {integrity: sha512-1/QB5vgbuMZZW5fb/tX9m6i9VGwoLrGGZXaWWKl185AQp5PXlqblgq5fMcBdtf5i+BoWnkRymt3DpfhzfQAlKQ==} peerDependencies: '@swc/core': '>=1.3.106' effector@23.1.0: - resolution: - { integrity: sha512-PsiNE2UmEnS/xmyshISjMwqqGcUKF0upnA/8o1qXafyfrV1kYkOwhs9fuDfUKIAbgZVSZb+bowymPpfrNu7jFw== } - engines: { node: '>=11.0.0' } + resolution: {integrity: sha512-PsiNE2UmEnS/xmyshISjMwqqGcUKF0upnA/8o1qXafyfrV1kYkOwhs9fuDfUKIAbgZVSZb+bowymPpfrNu7jFw==} + engines: {node: '>=11.0.0'} ejs@3.1.10: - resolution: - { integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} hasBin: true electron-builder@24.9.1: - resolution: - { integrity: sha512-v7BuakDuY6sKMUYM8mfQGrwyjBpZ/ObaqnenU0H+igEL10nc6ht049rsCw2HghRBdEwJxGIBuzs3jbEhNaMDmg== } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-v7BuakDuY6sKMUYM8mfQGrwyjBpZ/ObaqnenU0H+igEL10nc6ht049rsCw2HghRBdEwJxGIBuzs3jbEhNaMDmg==} + engines: {node: '>=14.0.0'} hasBin: true electron-devtools-installer@3.2.0: - resolution: - { integrity: sha512-t3UczsYugm4OAbqvdImMCImIMVdFzJAHgbwHpkl5jmfu1izVgUcP/mnrPqJIpEeCK1uZGpt+yHgWEN+9EwoYhQ== } + resolution: {integrity: sha512-t3UczsYugm4OAbqvdImMCImIMVdFzJAHgbwHpkl5jmfu1izVgUcP/mnrPqJIpEeCK1uZGpt+yHgWEN+9EwoYhQ==} electron-log@5.1.2: - resolution: - { integrity: sha512-Cpg4hAZ27yM9wzE77c4TvgzxzavZ+dVltCczParXN+Vb3jocojCSAuSMCVOI9fhFuuOR+iuu3tZLX1cu0y0kgQ== } - engines: { node: '>= 14' } + resolution: {integrity: sha512-Cpg4hAZ27yM9wzE77c4TvgzxzavZ+dVltCczParXN+Vb3jocojCSAuSMCVOI9fhFuuOR+iuu3tZLX1cu0y0kgQ==} + engines: {node: '>= 14'} electron-publish@24.8.1: - resolution: - { integrity: sha512-IFNXkdxMVzUdweoLJNXSupXkqnvgbrn3J4vognuOY06LaS/m0xvfFYIf+o1CM8if6DuWYWoQFKPcWZt/FUjZPw== } + resolution: {integrity: sha512-IFNXkdxMVzUdweoLJNXSupXkqnvgbrn3J4vognuOY06LaS/m0xvfFYIf+o1CM8if6DuWYWoQFKPcWZt/FUjZPw==} electron-react-devtools@0.5.3: - resolution: - { integrity: sha512-SxrBqoev8x8IXQZib6YB0SI2kUfE6GaRPmXXgVUJdjz541GZbxYzzif0dlrbrbVPkFJOaRJ651wQE2/aJVCmMg== } + resolution: {integrity: sha512-SxrBqoev8x8IXQZib6YB0SI2kUfE6GaRPmXXgVUJdjz541GZbxYzzif0dlrbrbVPkFJOaRJ651wQE2/aJVCmMg==} electron-store@8.1.0: - resolution: - { integrity: sha512-2clHg/juMjOH0GT9cQ6qtmIvK183B39ZXR0bUoPwKwYHJsEF3quqyDzMFUAu+0OP8ijmN2CbPRAelhNbWUbzwA== } + resolution: {integrity: sha512-2clHg/juMjOH0GT9cQ6qtmIvK183B39ZXR0bUoPwKwYHJsEF3quqyDzMFUAu+0OP8ijmN2CbPRAelhNbWUbzwA==} electron-to-chromium@1.4.609: - resolution: - { integrity: sha512-ihiCP7PJmjoGNuLpl7TjNA8pCQWu09vGyjlPYw1Rqww4gvNuCcmvl+44G+2QyJ6S2K4o+wbTS++Xz0YN8Q9ERw== } + resolution: {integrity: sha512-ihiCP7PJmjoGNuLpl7TjNA8pCQWu09vGyjlPYw1Rqww4gvNuCcmvl+44G+2QyJ6S2K4o+wbTS++Xz0YN8Q9ERw==} electron-updater@6.1.1: - resolution: - { integrity: sha512-IBT3zJ4yO5UZMF2gOTC9HrlmG4OYSRtOiHKzNAShJvfuicdx6UaXoa6AvhcTxdx6zf/rJyFMRBISS9jhVwTfow== } + resolution: {integrity: sha512-IBT3zJ4yO5UZMF2gOTC9HrlmG4OYSRtOiHKzNAShJvfuicdx6UaXoa6AvhcTxdx6zf/rJyFMRBISS9jhVwTfow==} electron-window-state@5.0.3: - resolution: - { integrity: sha512-1mNTwCfkolXl3kMf50yW3vE2lZj0y92P/HYWFBrb+v2S/pCka5mdwN3cagKm458A7NjndSwijynXgcLWRodsVg== } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-1mNTwCfkolXl3kMf50yW3vE2lZj0y92P/HYWFBrb+v2S/pCka5mdwN3cagKm458A7NjndSwijynXgcLWRodsVg==} + engines: {node: '>=8.0.0'} electron@29.1.1: - resolution: - { integrity: sha512-cXN15NgCi7MkzGo5/23ZQbii+0UfhmUiDjACunmzcUofYCjF42XhFbL7JZnwgI0qtBCCeJU8qZNZt9lU91gUFw== } - engines: { node: '>= 12.20.55' } + resolution: {integrity: sha512-cXN15NgCi7MkzGo5/23ZQbii+0UfhmUiDjACunmzcUofYCjF42XhFbL7JZnwgI0qtBCCeJU8qZNZt9lU91gUFw==} + engines: {node: '>= 12.20.55'} hasBin: true elliptic@6.5.4: - resolution: - { integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== } + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} emittery@0.13.1: - resolution: - { integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} emoji-regex@8.0.0: - resolution: - { integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== } + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: - resolution: - { integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== } + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} emojis-list@3.0.0: - resolution: - { integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== } - engines: { node: '>= 4' } + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} encode-utf8@1.0.3: - resolution: - { integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== } + resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} encodeurl@1.0.2: - resolution: - { integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} end-of-stream@1.4.4: - resolution: - { integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== } + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} endent@2.1.0: - resolution: - { integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w== } + resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==} enhanced-resolve@4.5.0: - resolution: - { integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} + engines: {node: '>=6.9.0'} enhanced-resolve@5.15.0: - resolution: - { integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} entities@2.2.0: - resolution: - { integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== } + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} entities@4.5.0: - resolution: - { integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== } - engines: { node: '>=0.12' } + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} env-paths@2.2.1: - resolution: - { integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== } - engines: { node: '>=6' } + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} envinfo@7.11.0: - resolution: - { integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} + engines: {node: '>=4'} hasBin: true err-code@2.0.3: - resolution: - { integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== } + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} errno@0.1.8: - resolution: - { integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== } + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true error-ex@1.3.2: - resolution: - { integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== } + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} error-stack-parser@2.1.4: - resolution: - { integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== } + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} es-abstract@1.22.3: - resolution: - { integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} es-array-method-boxes-properly@1.0.0: - resolution: - { integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== } + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} es-get-iterator@1.1.3: - resolution: - { integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== } + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} es-module-lexer@1.4.1: - resolution: - { integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== } + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} es-set-tostringtag@2.0.2: - resolution: - { integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} es-shim-unscopables@1.0.2: - resolution: - { integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== } + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} es-to-primitive@1.2.1: - resolution: - { integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} es5-ext@0.10.64: - resolution: - { integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} es5-shim@4.6.7: - resolution: - { integrity: sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ== } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==} + engines: {node: '>=0.4.0'} es6-error@4.1.1: - resolution: - { integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== } + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} es6-iterator@2.0.3: - resolution: - { integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== } + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} es6-shim@0.35.8: - resolution: - { integrity: sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg== } + resolution: {integrity: sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg==} es6-symbol@3.1.3: - resolution: - { integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== } + resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} es6-weak-map@2.0.3: - resolution: - { integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== } + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} escalade@3.1.1: - resolution: - { integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== } - engines: { node: '>=6' } + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} escape-goat@2.1.1: - resolution: - { integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== } - engines: { node: '>=8' } + resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} + engines: {node: '>=8'} escape-html@1.0.3: - resolution: - { integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== } + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} escape-string-regexp@1.0.5: - resolution: - { integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== } - engines: { node: '>=0.8.0' } + 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' } + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} escape-string-regexp@4.0.0: - resolution: - { integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} escape-string-regexp@5.0.0: - resolution: - { integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== } - engines: { node: '>=12' } + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} escodegen@2.1.0: - resolution: - { integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} hasBin: true eslint-config-prettier@8.10.0: - resolution: - { integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== } + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' eslint-import-resolver-alias@1.1.2: - resolution: - { integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w== } - engines: { node: '>= 4' } + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} peerDependencies: eslint-plugin-import: '>=1.4.0' eslint-import-resolver-node@0.3.9: - resolution: - { integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== } + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} eslint-module-utils@2.8.0: - resolution: - { integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' eslint: '*' @@ -6359,29 +5260,25 @@ packages: optional: true eslint-plugin-effector@0.12.0: - resolution: - { integrity: sha512-YtSM5rkdsmLfJZXLZFjuY3+HoGjcF36F9EpZbmIsKEZEb09VemJly4ocetB4Lg+mABmmE1B76bXpPmoEu6Zpbw== } - engines: { node: ^16 || ^17 || ^18 || ^19 || ^20 } + resolution: {integrity: sha512-YtSM5rkdsmLfJZXLZFjuY3+HoGjcF36F9EpZbmIsKEZEb09VemJly4ocetB4Lg+mABmmE1B76bXpPmoEu6Zpbw==} + engines: {node: ^16 || ^17 || ^18 || ^19 || ^20} peerDependencies: effector: '*' eslint: 7 || 8 eslint-plugin-i18n-json@4.0.0: - resolution: - { integrity: sha512-rglbr9f/UaPN/OeiSLVVFlIh4RrXPTzX5qr4tqOdTj1Ryr8xIhUzriDDuyuPWliektO86c/zy1RldmBIOfDNsQ== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-rglbr9f/UaPN/OeiSLVVFlIh4RrXPTzX5qr4tqOdTj1Ryr8xIhUzriDDuyuPWliektO86c/zy1RldmBIOfDNsQ==} + engines: {node: '>=6.0.0'} peerDependencies: eslint: '>=4.0.0' eslint-plugin-i18next@6.0.0-2: - resolution: - { integrity: sha512-3jm5ufmACjecaE/q6R3ZHhc3uzgx5ZMXoJhArZyg2tmBlk6AP/q1dfY12JWLFb4loNJdJPJncGCBOhG+cJsv9Q== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-3jm5ufmACjecaE/q6R3ZHhc3uzgx5ZMXoJhArZyg2tmBlk6AP/q1dfY12JWLFb4loNJdJPJncGCBOhG+cJsv9Q==} + engines: {node: '>=0.10.0'} eslint-plugin-import@2.26.0: - resolution: - { integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} + engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 @@ -6390,9 +5287,8 @@ packages: optional: true eslint-plugin-jest-dom@5.1.0: - resolution: - { integrity: sha512-JIXZp+E/h/aGlP/rQc4tuOejiHlZXg65qw8JAJMIJA5VsdjOkss/SYcRSqBrQuEOytEM8JvngUjcz31d1RrCrA== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6', yarn: '>=1' } + resolution: {integrity: sha512-JIXZp+E/h/aGlP/rQc4tuOejiHlZXg65qw8JAJMIJA5VsdjOkss/SYcRSqBrQuEOytEM8JvngUjcz31d1RrCrA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6', yarn: '>=1'} peerDependencies: '@testing-library/dom': ^8.0.0 || ^9.0.0 eslint: ^6.8.0 || ^7.0.0 || ^8.0.0 @@ -6401,14 +5297,12 @@ packages: optional: true eslint-plugin-json@3.1.0: - resolution: - { integrity: sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g== } - engines: { node: '>=12.0' } + resolution: {integrity: sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==} + engines: {node: '>=12.0'} eslint-plugin-prettier@4.2.1: - resolution: - { integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== } - engines: { node: '>=12.0.0' } + resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} + engines: {node: '>=12.0.0'} peerDependencies: eslint: '>=7.28.0' eslint-config-prettier: '*' @@ -6418,16 +5312,14 @@ packages: optional: true eslint-plugin-react@7.31.10: - resolution: - { integrity: sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==} + engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 eslint-plugin-unused-imports@2.0.0: - resolution: - { integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 eslint: ^8.0.0 @@ -6436,425 +5328,337 @@ packages: optional: true eslint-rule-composer@0.3.0: - resolution: - { integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== } - engines: { node: '>=4.0.0' } + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} eslint-scope@4.0.3: - resolution: - { integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== } - engines: { node: '>=4.0.0' } + resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} + engines: {node: '>=4.0.0'} eslint-scope@5.1.1: - resolution: - { integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} eslint-scope@7.2.2: - resolution: - { integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} eslint-utils@3.0.0: - resolution: - { integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== } - engines: { node: ^10.0.0 || ^12.0.0 || >= 14.0.0 } + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' eslint-visitor-keys@2.1.0: - resolution: - { integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} eslint-visitor-keys@3.4.3: - resolution: - { integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} eslint@8.19.0: - resolution: - { integrity: sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true esniff@2.0.1: - resolution: - { integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} espree@9.6.1: - resolution: - { integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} esprima@4.0.1: - resolution: - { integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== } - engines: { node: '>=4' } + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true esquery@1.5.0: - resolution: - { integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} esrecurse@4.3.0: - resolution: - { integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} estraverse@4.3.0: - resolution: - { integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} estraverse@5.3.0: - resolution: - { integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} estree-to-babel@3.2.1: - resolution: - { integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg== } - engines: { node: '>=8.3.0' } + resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} + engines: {node: '>=8.3.0'} estree-util-is-identifier-name@3.0.0: - resolution: - { integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== } + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} esutils@2.0.3: - resolution: - { integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} etag@1.8.1: - resolution: - { integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} ethereum-blockies-base64@1.0.2: - resolution: - { integrity: sha512-Vg2HTm7slcWNKaRhCUl/L3b4KrB8ohQXdd5Pu3OI897EcR6tVRvUqdTwAyx+dnmoDzj8e2bwBLDQ50ByFmcz6w== } + resolution: {integrity: sha512-Vg2HTm7slcWNKaRhCUl/L3b4KrB8ohQXdd5Pu3OI897EcR6tVRvUqdTwAyx+dnmoDzj8e2bwBLDQ50ByFmcz6w==} event-emitter@0.3.5: - resolution: - { integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== } + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} eventemitter3@4.0.7: - resolution: - { integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== } + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} eventemitter3@5.0.1: - resolution: - { integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== } + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} events@3.3.0: - resolution: - { integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== } - engines: { node: '>=0.8.x' } + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} evp_bytestokey@1.0.3: - resolution: - { integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== } + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} exec-sh@0.3.6: - resolution: - { integrity: sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== } + resolution: {integrity: sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==} execa@0.7.0: - resolution: - { integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} + engines: {node: '>=4'} execa@1.0.0: - resolution: - { integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} execa@4.1.0: - resolution: - { integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} execa@5.1.1: - resolution: - { integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} execa@6.1.0: - resolution: - { integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} executable@4.1.1: - resolution: - { integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} + engines: {node: '>=4'} exit@0.1.2: - resolution: - { integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} expand-brackets@2.1.4: - resolution: - { integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} expect@29.7.0: - resolution: - { integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} express@4.19.2: - resolution: - { integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== } - engines: { node: '>= 0.10.0' } + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + engines: {node: '>= 0.10.0'} ext-list@2.2.2: - resolution: - { integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} + engines: {node: '>=0.10.0'} ext-name@5.0.0: - resolution: - { integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} + engines: {node: '>=4'} ext@1.7.0: - resolution: - { integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== } + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} extend-shallow@2.0.1: - resolution: - { integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} extend-shallow@3.0.2: - resolution: - { integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} extend@3.0.2: - resolution: - { integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== } + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} extglob@2.0.4: - resolution: - { integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} extract-zip@2.0.1: - resolution: - { integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== } - engines: { node: '>= 10.17.0' } + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} hasBin: true extsprintf@1.3.0: - resolution: - { integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== } - engines: { '0': node >=0.6.0 } + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} fake-indexeddb@4.0.0: - resolution: - { integrity: sha512-oCfWSJ/qvQn1XPZ8SHX6kY3zr1t+bN7faZ/lltGY0SBGhFOPXnWf0+pbO/MOAgfMx6khC2gK3S/bvAgQpuQHDQ== } + resolution: {integrity: sha512-oCfWSJ/qvQn1XPZ8SHX6kY3zr1t+bN7faZ/lltGY0SBGhFOPXnWf0+pbO/MOAgfMx6khC2gK3S/bvAgQpuQHDQ==} fast-deep-equal@3.1.3: - resolution: - { integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-diff@1.3.0: - resolution: - { integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== } + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} fast-glob@2.2.7: - resolution: - { integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== } - engines: { node: '>=4.0.0' } + resolution: {integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==} + engines: {node: '>=4.0.0'} fast-glob@3.3.2: - resolution: - { integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== } - engines: { node: '>=8.6.0' } + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} fast-json-parse@1.0.3: - resolution: - { integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw== } + resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==} fast-json-stable-stringify@2.1.0: - resolution: - { integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: - resolution: - { integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== } + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} fast-redact@3.3.0: - resolution: - { integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} + engines: {node: '>=6'} fastest-levenshtein@1.0.16: - resolution: - { integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== } - engines: { node: '>= 4.9.1' } + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} fastq@1.15.0: - resolution: - { integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== } + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} fault@1.0.4: - resolution: - { integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== } + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} faye-websocket@0.11.4: - resolution: - { integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} fb-watchman@2.0.2: - resolution: - { integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== } + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} fd-slicer@1.1.0: - resolution: - { integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== } + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} fetch-blob@3.2.0: - resolution: - { integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== } - engines: { node: ^12.20 || >= 14.13 } + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} fetch-retry@5.0.6: - resolution: - { integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ== } + resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} figgy-pudding@3.5.2: - resolution: - { integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== } + resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} figures@3.2.0: - resolution: - { integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} file-entry-cache@6.0.1: - resolution: - { integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} file-loader@6.2.0: - resolution: - { integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 file-system-cache@1.1.0: - resolution: - { integrity: sha512-IzF5MBq+5CR0jXx5RxPe4BICl/oEhBSXKaL9fLhAXrIfIUS77Hr4vzrYyqYMHN6uTt+BOqi3fDCTjjEBCjERKw== } + resolution: {integrity: sha512-IzF5MBq+5CR0jXx5RxPe4BICl/oEhBSXKaL9fLhAXrIfIUS77Hr4vzrYyqYMHN6uTt+BOqi3fDCTjjEBCjERKw==} file-type@17.1.6: - resolution: - { integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} file-uri-to-path@1.0.0: - resolution: - { integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== } + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} filelist@1.0.4: - resolution: - { integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== } + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} filename-reserved-regex@3.0.0: - resolution: - { integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} filenamify@5.1.1: - resolution: - { integrity: sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA== } - engines: { node: '>=12.20' } + resolution: {integrity: sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==} + engines: {node: '>=12.20'} fill-range@4.0.0: - resolution: - { integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} fill-range@7.0.1: - resolution: - { integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} filter-obj@1.1.0: - resolution: - { integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} finalhandler@1.2.0: - resolution: - { integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} find-cache-dir@2.1.0: - resolution: - { integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} find-cache-dir@3.3.2: - resolution: - { integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== } - engines: { node: '>=8' } + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} find-up@1.1.2: - resolution: - { integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} + engines: {node: '>=0.10.0'} find-up@3.0.0: - resolution: - { integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} find-up@4.1.0: - resolution: - { integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} find-up@5.0.0: - resolution: - { integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== } - engines: { node: '>=10' } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} find-versions@5.1.0: - resolution: - { integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg== } - engines: { node: '>=12' } + resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} + engines: {node: '>=12'} flat-cache@3.2.0: - resolution: - { integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} flatted@3.2.9: - resolution: - { integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== } + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} flush-write-stream@1.1.1: - resolution: - { integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== } + resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==} focus-lock@0.8.1: - resolution: - { integrity: sha512-/LFZOIo82WDsyyv7h7oc0MJF9ACOvDRdx9rWPZ2pgMfNWu/z8hQDBtOchuB/0BVLmuFOZjV02YwUVzNsWx/EzA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-/LFZOIo82WDsyyv7h7oc0MJF9ACOvDRdx9rWPZ2pgMfNWu/z8hQDBtOchuB/0BVLmuFOZjV02YwUVzNsWx/EzA==} + engines: {node: '>=10'} follow-redirects@1.15.6: - resolution: - { integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} peerDependencies: debug: '*' peerDependenciesMeta: @@ -6862,32 +5666,26 @@ packages: optional: true for-each@0.3.3: - resolution: - { integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== } + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} for-in@1.0.2: - resolution: - { integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} foreground-child@2.0.0: - resolution: - { integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} foreground-child@3.1.1: - resolution: - { integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== } - engines: { node: '>=14' } + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} forever-agent@0.6.1: - resolution: - { integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== } + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} fork-ts-checker-webpack-plugin@4.1.6: - resolution: - { integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== } - engines: { node: '>=6.11.5', yarn: '>=1.0.0' } + resolution: {integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==} + engines: {node: '>=6.11.5', yarn: '>=1.0.0'} peerDependencies: eslint: '>= 6' typescript: '>= 2.7' @@ -6900,9 +5698,8 @@ packages: optional: true fork-ts-checker-webpack-plugin@6.5.3: - resolution: - { integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ== } - engines: { node: '>=10', yarn: '>=1.0.0' } + resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} + engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: eslint: '>= 6' typescript: '>= 2.7' @@ -6915,633 +5712,500 @@ packages: optional: true form-data@2.3.3: - resolution: - { integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== } - engines: { node: '>= 0.12' } + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} form-data@2.5.1: - resolution: - { integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== } - engines: { node: '>= 0.12' } + resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} + engines: {node: '>= 0.12'} form-data@4.0.0: - resolution: - { integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} format@0.2.2: - resolution: - { integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== } - engines: { node: '>=0.4.x' } + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} formdata-polyfill@4.0.10: - resolution: - { integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== } - engines: { node: '>=12.20.0' } + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} forwarded@0.2.0: - resolution: - { integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} fraction.js@4.3.7: - resolution: - { integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== } + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} fragment-cache@0.2.1: - resolution: - { integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} fresh@0.5.2: - resolution: - { integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} from2@2.3.0: - resolution: - { integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== } + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} fs-extra@10.1.0: - resolution: - { integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} fs-extra@11.2.0: - resolution: - { integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== } - engines: { node: '>=14.14' } + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} fs-extra@8.1.0: - resolution: - { integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== } - engines: { node: '>=6 <7 || >=8' } + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} fs-extra@9.1.0: - resolution: - { integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} fs-minipass@2.1.0: - resolution: - { integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} fs-monkey@1.0.5: - resolution: - { integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== } + resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} fs-write-stream-atomic@1.0.10: - resolution: - { integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== } + resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==} fs.realpath@1.0.0: - resolution: - { integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== } + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} fsevents@1.2.13: - resolution: - { integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== } - engines: { node: '>= 4.0' } + resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} + engines: {node: '>= 4.0'} os: [darwin] deprecated: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2 fsevents@2.3.2: - resolution: - { integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] fsevents@2.3.3: - resolution: - { integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] function-bind@1.1.2: - resolution: - { integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== } + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} function.prototype.name@1.1.6: - resolution: - { integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} functional-red-black-tree@1.0.1: - resolution: - { integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== } + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} functions-have-names@1.2.3: - resolution: - { integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== } + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} gauge@3.0.2: - resolution: - { integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== } - engines: { node: '>=10' } + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} gensync@1.0.0-beta.2: - resolution: - { integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} get-caller-file@2.0.5: - resolution: - { integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== } - engines: { node: 6.* || 8.* || >= 10.* } + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} get-intrinsic@1.2.2: - resolution: - { integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== } + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} get-package-type@0.1.0: - resolution: - { integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} get-port-please@3.1.1: - resolution: - { integrity: sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA== } + resolution: {integrity: sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==} get-stdin@4.0.1: - resolution: - { integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==} + engines: {node: '>=0.10.0'} get-stream@3.0.0: - resolution: - { integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} + engines: {node: '>=4'} get-stream@4.1.0: - resolution: - { integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== } - engines: { node: '>=6' } + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} get-stream@5.2.0: - resolution: - { integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} get-stream@6.0.1: - resolution: - { integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} get-symbol-description@1.0.0: - resolution: - { integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} get-value@2.0.6: - resolution: - { integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} getpass@0.1.7: - resolution: - { integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== } + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} git-raw-commits@2.0.11: - resolution: - { integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== } - engines: { node: '>=10' } + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} hasBin: true github-slugger@1.5.0: - resolution: - { integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== } + resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} glob-parent@3.1.0: - resolution: - { integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== } + resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} glob-parent@5.1.2: - resolution: - { integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} glob-parent@6.0.2: - resolution: - { integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} glob-promise@3.4.0: - resolution: - { integrity: sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==} + engines: {node: '>=4'} peerDependencies: glob: '*' glob-to-regexp@0.3.0: - resolution: - { integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig== } + resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==} glob-to-regexp@0.4.1: - resolution: - { integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== } + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} glob@10.3.10: - resolution: - { integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== } - engines: { node: '>=16 || 14 >=14.17' } + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} hasBin: true glob@7.1.6: - resolution: - { integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== } + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} deprecated: Glob versions prior to v9 are no longer supported glob@7.2.3: - resolution: - { integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== } + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} global-agent@3.0.0: - resolution: - { integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== } - engines: { node: '>=10.0' } + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} global-dirs@0.1.1: - resolution: - { integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} + engines: {node: '>=4'} global-dirs@3.0.1: - resolution: - { integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} global@4.4.0: - resolution: - { integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== } + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} globals@11.12.0: - resolution: - { integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} globals@13.24.0: - resolution: - { integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} globalthis@1.0.3: - resolution: - { integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} globby@11.1.0: - resolution: - { integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== } - engines: { node: '>=10' } + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} globby@13.2.2: - resolution: - { integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} globby@9.2.0: - resolution: - { integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==} + engines: {node: '>=6'} gopd@1.0.1: - resolution: - { integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== } + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} got@11.8.6: - resolution: - { integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== } - engines: { node: '>=10.19.0' } + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} got@9.6.0: - resolution: - { integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} + engines: {node: '>=8.6'} graceful-fs@4.2.11: - resolution: - { integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== } + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} graphql-request@6.1.0: - resolution: - { integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw== } + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} peerDependencies: graphql: 14 - 16 graphql-tag@2.12.6: - resolution: - { integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} peerDependencies: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 graphql@16.8.1: - resolution: - { integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== } - engines: { node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0 } + resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} h3@1.9.0: - resolution: - { integrity: sha512-+F3ZqrNV/CFXXfZ2lXBINHi+rM4Xw3CDC5z2CDK3NMPocjonKipGLLDSkrqY9DOrioZNPTIdDMWfQKm//3X2DA== } + resolution: {integrity: sha512-+F3ZqrNV/CFXXfZ2lXBINHi+rM4Xw3CDC5z2CDK3NMPocjonKipGLLDSkrqY9DOrioZNPTIdDMWfQKm//3X2DA==} handle-thing@2.0.1: - resolution: - { integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== } + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} handlebars@4.7.8: - resolution: - { integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== } - engines: { node: '>=0.4.7' } + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} hasBin: true har-schema@2.0.0: - resolution: - { integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== } - engines: { node: '>=4' } + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} har-validator@5.1.5: - resolution: - { integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== } - engines: { node: '>=6' } + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} deprecated: this library is no longer supported hard-rejection@2.1.0: - resolution: - { integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} harmony-reflect@1.6.2: - resolution: - { integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== } + resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} has-bigints@1.0.2: - resolution: - { integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== } + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} has-flag@3.0.0: - resolution: - { integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} has-flag@4.0.0: - resolution: - { integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} has-glob@1.0.0: - resolution: - { integrity: sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==} + engines: {node: '>=0.10.0'} has-property-descriptors@1.0.1: - resolution: - { integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== } + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} has-proto@1.0.1: - resolution: - { integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} has-symbols@1.0.3: - resolution: - { integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} has-tostringtag@1.0.0: - resolution: - { integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} has-unicode@2.0.1: - resolution: - { integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== } + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} has-value@0.3.1: - resolution: - { integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} has-value@1.0.0: - resolution: - { integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} has-values@0.1.4: - resolution: - { integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} has-values@1.0.0: - resolution: - { integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} has-yarn@2.1.0: - resolution: - { integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} + engines: {node: '>=8'} has@1.0.4: - resolution: - { integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== } - engines: { node: '>= 0.4.0' } + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} + engines: {node: '>= 0.4.0'} hash-base@3.1.0: - resolution: - { integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} hash.js@1.1.7: - resolution: - { integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== } + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} hasown@2.0.0: - resolution: - { integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} hast-to-hyperscript@9.0.1: - resolution: - { integrity: sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== } + resolution: {integrity: sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==} hast-util-from-parse5@6.0.1: - resolution: - { integrity: sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== } + resolution: {integrity: sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==} hast-util-from-parse5@8.0.1: - resolution: - { integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ== } + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} hast-util-parse-selector@2.2.5: - resolution: - { integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== } + resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} hast-util-parse-selector@4.0.0: - resolution: - { integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== } + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} hast-util-raw@6.0.1: - resolution: - { integrity: sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== } + resolution: {integrity: sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==} hast-util-raw@9.0.4: - resolution: - { integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA== } + resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} hast-util-to-jsx-runtime@2.3.0: - resolution: - { integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ== } + resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} hast-util-to-parse5@6.0.0: - resolution: - { integrity: sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== } + resolution: {integrity: sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==} hast-util-to-parse5@8.0.0: - resolution: - { integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== } + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} hast-util-whitespace@3.0.0: - resolution: - { integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== } + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} hastscript@6.0.0: - resolution: - { integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== } + resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} hastscript@8.0.0: - resolution: - { integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw== } + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} he@1.2.0: - resolution: - { integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== } + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true hey-listen@1.0.8: - resolution: - { integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== } + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} highlight.js@10.7.3: - resolution: - { integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== } + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} hmac-drbg@1.0.1: - resolution: - { integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== } + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} hoist-non-react-statics@3.3.2: - resolution: - { integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== } + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} hosted-git-info@2.8.9: - resolution: - { integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== } + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} hosted-git-info@4.1.0: - resolution: - { integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} hpack.js@2.1.6: - resolution: - { integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== } + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} html-encoding-sniffer@3.0.0: - resolution: - { integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== } - engines: { node: '>=12' } + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} html-entities@2.4.0: - resolution: - { integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== } + resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} html-escaper@2.0.2: - resolution: - { integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== } + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} html-minifier-terser@5.1.1: - resolution: - { integrity: sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==} + engines: {node: '>=6'} hasBin: true html-minifier-terser@6.1.0: - resolution: - { integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== } - engines: { node: '>=12' } + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} hasBin: true html-parse-stringify@3.0.1: - resolution: - { integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== } + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} html-tags@3.3.1: - resolution: - { integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} html-url-attributes@3.0.0: - resolution: - { integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow== } + resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==} html-void-elements@1.0.5: - resolution: - { integrity: sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== } + resolution: {integrity: sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==} html-void-elements@3.0.0: - resolution: - { integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== } + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} html-webpack-plugin@4.5.2: - resolution: - { integrity: sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A== } - engines: { node: '>=6.9' } + resolution: {integrity: sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==} + engines: {node: '>=6.9'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 html-webpack-plugin@5.5.0: - resolution: - { integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} + engines: {node: '>=10.13.0'} peerDependencies: webpack: ^5.20.0 htmlparser2@6.1.0: - resolution: - { integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== } + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} http-cache-semantics@4.1.1: - resolution: - { integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== } + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} http-deceiver@1.2.7: - resolution: - { integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== } + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} http-errors@1.6.3: - resolution: - { integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} http-errors@2.0.0: - resolution: - { integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} http-parser-js@0.5.8: - resolution: - { integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== } + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} http-proxy-agent@5.0.0: - resolution: - { integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} http-proxy-middleware@2.0.6: - resolution: - { integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== } - engines: { node: '>=12.0.0' } + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + engines: {node: '>=12.0.0'} peerDependencies: '@types/express': ^4.17.13 peerDependenciesMeta: @@ -7549,719 +6213,567 @@ packages: optional: true http-proxy@1.18.1: - resolution: - { integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} http-shutdown@1.2.2: - resolution: - { integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== } - engines: { iojs: '>= 1.0.0', node: '>= 0.12.0' } + resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} http-signature@1.2.0: - resolution: - { integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== } - engines: { node: '>=0.8', npm: '>=1.3.7' } + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} http2-wrapper@1.0.3: - resolution: - { integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== } - engines: { node: '>=10.19.0' } + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} https-browserify@1.0.0: - resolution: - { integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== } + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} https-proxy-agent@5.0.1: - resolution: - { integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} human-signals@1.1.1: - resolution: - { integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== } - engines: { node: '>=8.12.0' } + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} human-signals@2.1.0: - resolution: - { integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== } - engines: { node: '>=10.17.0' } + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} human-signals@3.0.1: - resolution: - { integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== } - engines: { node: '>=12.20.0' } + resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} + engines: {node: '>=12.20.0'} husky@8.0.0: - resolution: - { integrity: sha512-4qbE/5dzNDNxFEkX9MNRPKl5+omTXQzdILCUWiqG/lWIAioiM5vln265/l6I2Zx8gpW8l1ukZwGQeCFbBZ6+6w== } - engines: { node: '>=14' } + resolution: {integrity: sha512-4qbE/5dzNDNxFEkX9MNRPKl5+omTXQzdILCUWiqG/lWIAioiM5vln265/l6I2Zx8gpW8l1ukZwGQeCFbBZ6+6w==} + engines: {node: '>=14'} hasBin: true i18next@21.8.13: - resolution: - { integrity: sha512-DpzwrJq7Y8tjUHxx6ByOkUIjrGYdQI5Mfv4XEI7q2RWdknQ7TaO9bKi8hS/LqYD6pBV5YGxJLReyLkOCxIpouA== } + resolution: {integrity: sha512-DpzwrJq7Y8tjUHxx6ByOkUIjrGYdQI5Mfv4XEI7q2RWdknQ7TaO9bKi8hS/LqYD6pBV5YGxJLReyLkOCxIpouA==} iconv-corefoundation@1.1.7: - resolution: - { integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ== } - engines: { node: ^8.11.2 || >=10 } + resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} + engines: {node: ^8.11.2 || >=10} os: [darwin] iconv-lite@0.4.24: - resolution: - { integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} iconv-lite@0.6.3: - resolution: - { integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} icss-utils@4.1.1: - resolution: - { integrity: sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==} + engines: {node: '>= 6'} icss-utils@5.1.0: - resolution: - { integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 idb-keyval@6.2.1: - resolution: - { integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== } + resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} identity-obj-proxy@3.0.0: - resolution: - { integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} + engines: {node: '>=4'} ieee754@1.2.1: - resolution: - { integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== } + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} iferr@0.1.5: - resolution: - { integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== } + resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==} ignore-by-default@1.0.1: - resolution: - { integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== } + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} ignore@4.0.6: - resolution: - { integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== } - engines: { node: '>= 4' } + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} ignore@5.3.0: - resolution: - { integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== } - engines: { node: '>= 4' } + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} immediate@3.0.6: - resolution: - { integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== } + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} import-fresh@3.3.0: - resolution: - { integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== } - engines: { node: '>=6' } + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} import-lazy@2.1.0: - resolution: - { integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== } - engines: { node: '>=4' } + resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} + engines: {node: '>=4'} import-local@3.1.0: - resolution: - { integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} hasBin: true imurmurhash@0.1.4: - resolution: - { integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== } - engines: { node: '>=0.8.19' } + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} indent-string@2.1.0: - resolution: - { integrity: sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==} + engines: {node: '>=0.10.0'} indent-string@3.2.0: - resolution: - { integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==} + engines: {node: '>=4'} indent-string@4.0.0: - resolution: - { integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} infer-owner@1.0.4: - resolution: - { integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== } + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} inflight@1.0.6: - resolution: - { integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== } + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} inherits@2.0.3: - resolution: - { integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== } + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} inherits@2.0.4: - resolution: - { integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} ini@1.3.8: - resolution: - { integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== } + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} ini@2.0.0: - resolution: - { integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} inline-style-parser@0.1.1: - resolution: - { integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== } + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} inline-style-parser@0.2.3: - resolution: - { integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g== } + resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==} internal-slot@1.0.6: - resolution: - { integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} interpret@2.2.0: - resolution: - { integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} + engines: {node: '>= 0.10'} interpret@3.1.1: - resolution: - { integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} ioredis@5.3.2: - resolution: - { integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA== } - engines: { node: '>=12.22.0' } + resolution: {integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==} + engines: {node: '>=12.22.0'} ip@2.0.1: - resolution: - { integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== } + resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} ipaddr.js@1.9.1: - resolution: - { integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} ipaddr.js@2.1.0: - resolution: - { integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== } - engines: { node: '>= 10' } + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} + engines: {node: '>= 10'} iron-webcrypto@1.0.0: - resolution: - { integrity: sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg== } + resolution: {integrity: sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg==} irregular-plurals@1.4.0: - resolution: - { integrity: sha512-kniTIJmaZYiwa17eTtWIfm0K342seyugl6vuC8DiiyiRAJWAVlLkqGCI0Im0neo0TkXw+pRcKaBPRdcKHnQJ6Q== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-kniTIJmaZYiwa17eTtWIfm0K342seyugl6vuC8DiiyiRAJWAVlLkqGCI0Im0neo0TkXw+pRcKaBPRdcKHnQJ6Q==} + engines: {node: '>=0.10.0'} is-absolute-url@3.0.3: - resolution: - { integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== } - engines: { node: '>=8' } + resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} + engines: {node: '>=8'} is-accessor-descriptor@1.0.1: - resolution: - { integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} + engines: {node: '>= 0.10'} is-alphabetical@1.0.4: - resolution: - { integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== } + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} is-alphabetical@2.0.1: - resolution: - { integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== } + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} is-alphanumerical@1.0.4: - resolution: - { integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== } + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} is-alphanumerical@2.0.1: - resolution: - { integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== } + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} is-arguments@1.1.1: - resolution: - { integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} is-array-buffer@3.0.2: - resolution: - { integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== } + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} is-arrayish@0.2.1: - resolution: - { integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== } + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} is-bigint@1.0.4: - resolution: - { integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== } + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} is-binary-path@1.0.1: - resolution: - { integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==} + engines: {node: '>=0.10.0'} is-binary-path@2.1.0: - resolution: - { integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} is-boolean-object@1.1.2: - resolution: - { integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} is-buffer@1.1.6: - resolution: - { integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== } + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} is-buffer@2.0.5: - resolution: - { integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} is-callable@1.2.7: - resolution: - { integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} is-ci@2.0.0: - resolution: - { integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== } + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} hasBin: true is-ci@3.0.1: - resolution: - { integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== } + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true is-core-module@2.13.1: - resolution: - { integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== } + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} is-data-descriptor@1.0.1: - resolution: - { integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} + engines: {node: '>= 0.4'} is-date-object@1.0.5: - resolution: - { integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} is-decimal@1.0.4: - resolution: - { integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== } + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} is-decimal@2.0.1: - resolution: - { integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== } + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} is-descriptor@0.1.7: - resolution: - { integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} + engines: {node: '>= 0.4'} is-descriptor@1.0.3: - resolution: - { integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==} + engines: {node: '>= 0.4'} is-docker@2.2.1: - resolution: - { integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} hasBin: true is-dom@1.1.0: - resolution: - { integrity: sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ== } + resolution: {integrity: sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==} is-extendable@0.1.1: - resolution: - { integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} is-extendable@1.0.1: - resolution: - { integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} is-extglob@2.1.1: - resolution: - { integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} is-finite@1.1.0: - resolution: - { integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==} + engines: {node: '>=0.10.0'} is-fullwidth-code-point@3.0.0: - resolution: - { integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} is-fullwidth-code-point@4.0.0: - resolution: - { integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} is-function@1.0.2: - resolution: - { integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== } + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} is-generator-fn@2.1.0: - resolution: - { integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} is-glob@3.1.0: - resolution: - { integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} + engines: {node: '>=0.10.0'} is-glob@4.0.3: - resolution: - { integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} is-hexadecimal@1.0.4: - resolution: - { integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== } + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} is-hexadecimal@2.0.1: - resolution: - { integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== } + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} is-installed-globally@0.4.0: - resolution: - { integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} is-map@2.0.2: - resolution: - { integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== } + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} is-negative-zero@2.0.2: - resolution: - { integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} is-npm@5.0.0: - resolution: - { integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} + engines: {node: '>=10'} is-number-object@1.0.7: - resolution: - { integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} is-number@3.0.0: - resolution: - { integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} is-number@7.0.0: - resolution: - { integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== } - engines: { node: '>=0.12.0' } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} is-obj@2.0.0: - resolution: - { integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== } - engines: { node: '>=8' } + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} is-object@1.0.2: - resolution: - { integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== } + resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} is-path-inside@3.0.3: - resolution: - { integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} is-plain-obj@1.1.0: - resolution: - { integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} is-plain-obj@2.1.0: - resolution: - { integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} is-plain-obj@3.0.0: - resolution: - { integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} is-plain-obj@4.1.0: - resolution: - { integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== } - engines: { node: '>=12' } + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} is-plain-object@2.0.4: - resolution: - { integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} is-plain-object@5.0.0: - resolution: - { integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} is-potential-custom-element-name@1.0.1: - resolution: - { integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== } + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} is-promise@2.2.2: - resolution: - { integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== } + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} is-regex@1.1.4: - resolution: - { integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} is-set@2.0.2: - resolution: - { integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== } + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} is-shared-array-buffer@1.0.2: - resolution: - { integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== } + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} is-stream@1.1.0: - resolution: - { integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} is-stream@2.0.1: - resolution: - { integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} is-stream@3.0.0: - resolution: - { integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} is-string@1.0.7: - resolution: - { integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} is-symbol@1.0.4: - resolution: - { integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} is-text-path@1.0.1: - resolution: - { integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} + engines: {node: '>=0.10.0'} is-typed-array@1.1.12: - resolution: - { integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} is-typedarray@1.0.0: - resolution: - { integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== } + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} is-utf8@0.2.1: - resolution: - { integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== } + resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} is-weakmap@2.0.1: - resolution: - { integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== } + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} is-weakref@1.0.2: - resolution: - { integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== } + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} is-weakset@2.0.2: - resolution: - { integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== } + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} is-whitespace-character@1.0.4: - resolution: - { integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== } + resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} is-window@1.0.2: - resolution: - { integrity: sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg== } + resolution: {integrity: sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg==} is-windows@1.0.2: - resolution: - { integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} is-word-character@1.0.4: - resolution: - { integrity: sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== } + resolution: {integrity: sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==} is-wsl@1.1.0: - resolution: - { integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} is-wsl@2.2.0: - resolution: - { integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== } - engines: { node: '>=8' } + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} is-yarn-global@0.3.0: - resolution: - { integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== } + resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} isarray@1.0.0: - resolution: - { integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== } + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} isarray@2.0.5: - resolution: - { integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== } + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} isbinaryfile@4.0.10: - resolution: - { integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== } - engines: { node: '>= 8.0.0' } + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} isbinaryfile@5.0.0: - resolution: - { integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg== } - engines: { node: '>= 14.0.0' } + resolution: {integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==} + engines: {node: '>= 14.0.0'} isexe@2.0.0: - resolution: - { integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== } + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} isnumeric@0.2.0: - resolution: - { integrity: sha512-uSJoAwnN1eCKDFKi8hL3UCYJSkQv+NwhKzhevUPIn/QZ8ILO21f+wQnlZHU0eh1rsLO1gI4w/HQdeOSTKwlqMg== } - engines: { node: '>= 0.8.x' } + resolution: {integrity: sha512-uSJoAwnN1eCKDFKi8hL3UCYJSkQv+NwhKzhevUPIn/QZ8ILO21f+wQnlZHU0eh1rsLO1gI4w/HQdeOSTKwlqMg==} + engines: {node: '>= 0.8.x'} isobject@2.1.0: - resolution: - { integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} isobject@3.0.1: - resolution: - { integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} isobject@4.0.0: - resolution: - { integrity: sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==} + engines: {node: '>=0.10.0'} isomorphic-unfetch@3.1.0: - resolution: - { integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== } + resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} isstream@0.1.2: - resolution: - { integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== } + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} istanbul-lib-coverage@3.2.2: - resolution: - { integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} istanbul-lib-instrument@5.2.1: - resolution: - { integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} istanbul-lib-instrument@6.0.1: - resolution: - { integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} + engines: {node: '>=10'} istanbul-lib-report@3.0.1: - resolution: - { integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} istanbul-lib-source-maps@4.0.1: - resolution: - { integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} istanbul-reports@3.1.6: - resolution: - { integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} iterate-iterator@1.0.2: - resolution: - { integrity: sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw== } + resolution: {integrity: sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==} iterate-value@1.0.2: - resolution: - { integrity: sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== } + resolution: {integrity: sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==} jackspeak@2.3.6: - resolution: - { integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== } - engines: { node: '>=14' } + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} jake@10.8.7: - resolution: - { integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== } - engines: { node: '>=10' } + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} hasBin: true jdenticon@3.2.0: - resolution: - { integrity: sha512-z6Iq3fTODUMSOiR2nNYrqigS6Y0GvdXfyQWrUby7htDHvX7GNEwaWR4hcaL+FmhEgBe08Xkup/BKxXQhDJByPA== } - engines: { node: '>=6.4.0' } + resolution: {integrity: sha512-z6Iq3fTODUMSOiR2nNYrqigS6Y0GvdXfyQWrUby7htDHvX7GNEwaWR4hcaL+FmhEgBe08Xkup/BKxXQhDJByPA==} + engines: {node: '>=6.4.0'} hasBin: true jest-changed-files@29.7.0: - resolution: - { integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-circus@29.7.0: - resolution: - { integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-cli@29.7.0: - resolution: - { integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -8270,9 +6782,8 @@ packages: optional: true jest-config@29.7.0: - resolution: - { integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' ts-node: '>=9.0.0' @@ -8283,28 +6794,23 @@ packages: optional: true jest-diff@22.4.3: - resolution: - { integrity: sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA== } + resolution: {integrity: sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==} jest-diff@29.7.0: - resolution: - { integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-docblock@29.7.0: - resolution: - { integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-each@29.7.0: - resolution: - { integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-environment-jsdom@29.7.0: - resolution: - { integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: @@ -8312,63 +6818,51 @@ packages: optional: true jest-environment-node@29.7.0: - resolution: - { integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-get-type@22.4.3: - resolution: - { integrity: sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== } + resolution: {integrity: sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==} jest-get-type@29.6.3: - resolution: - { integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-haste-map@26.6.2: - resolution: - { integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== } - engines: { node: '>= 10.14.2' } + resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==} + engines: {node: '>= 10.14.2'} jest-haste-map@29.7.0: - resolution: - { integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-junit@16.0.0: - resolution: - { integrity: sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ== } - engines: { node: '>=10.12.0' } + resolution: {integrity: sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==} + engines: {node: '>=10.12.0'} jest-leak-detector@29.7.0: - resolution: - { integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-matcher-utils@29.7.0: - resolution: - { integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-message-util@29.7.0: - resolution: - { integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-mock@27.5.1: - resolution: - { integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} jest-mock@29.7.0: - resolution: - { integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-pnp-resolver@1.2.3: - resolution: - { integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== } - engines: { node: '>=6' } + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} peerDependencies: jest-resolve: '*' peerDependenciesMeta: @@ -8376,92 +6870,75 @@ packages: optional: true jest-regex-util@26.0.0: - resolution: - { integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== } - engines: { node: '>= 10.14.2' } + resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} + engines: {node: '>= 10.14.2'} jest-regex-util@29.6.3: - resolution: - { integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-resolve-dependencies@29.7.0: - resolution: - { integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-resolve@29.7.0: - resolution: - { integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-runner-groups@2.2.0: - resolution: - { integrity: sha512-Sp/B9ZX0CDAKa9dIkgH0sGyl2eDuScV4SVvOxqhBMxqWpsNAkmol/C58aTFmPWZj+C0ZTW1r1BSu66MTCN+voA== } - engines: { node: '>= 10.14.2' } + resolution: {integrity: sha512-Sp/B9ZX0CDAKa9dIkgH0sGyl2eDuScV4SVvOxqhBMxqWpsNAkmol/C58aTFmPWZj+C0ZTW1r1BSu66MTCN+voA==} + engines: {node: '>= 10.14.2'} peerDependencies: jest-docblock: '>= 24' jest-runner: '>= 24' jest-runner@29.7.0: - resolution: - { integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-runtime@29.7.0: - resolution: - { integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-serializer@26.6.2: - resolution: - { integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== } - engines: { node: '>= 10.14.2' } + resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} + engines: {node: '>= 10.14.2'} jest-snapshot@29.7.0: - resolution: - { integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-util@26.6.2: - resolution: - { integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== } - engines: { node: '>= 10.14.2' } + resolution: {integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==} + engines: {node: '>= 10.14.2'} jest-util@29.7.0: - resolution: - { integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-validate@29.7.0: - resolution: - { integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-watcher@29.7.0: - resolution: - { integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-worker@26.6.2: - resolution: - { integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} jest-worker@27.5.1: - resolution: - { integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} jest-worker@29.7.0: - resolution: - { integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest@29.7.0: - resolution: - { integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -8470,37 +6947,30 @@ packages: optional: true jiti@1.21.0: - resolution: - { integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== } + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true js-string-escape@1.0.1: - resolution: - { integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} + engines: {node: '>= 0.8'} js-tokens@4.0.0: - resolution: - { integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== } + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} js-yaml@3.14.1: - resolution: - { integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== } + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true js-yaml@4.1.0: - resolution: - { integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== } + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true jsbn@0.1.1: - resolution: - { integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== } + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} jsdom@20.0.3: - resolution: - { integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== } - engines: { node: '>=14' } + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} + engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: @@ -8508,206 +6978,165 @@ packages: optional: true jsesc@0.5.0: - resolution: - { integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== } + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true jsesc@2.5.2: - resolution: - { integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} hasBin: true json-buffer@3.0.0: - resolution: - { integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== } + resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} json-buffer@3.0.1: - resolution: - { integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== } + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} json-parse-better-errors@1.0.2: - resolution: - { integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== } + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} json-parse-even-better-errors@2.3.1: - resolution: - { integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== } + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} json-schema-traverse@0.4.1: - resolution: - { integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-schema-traverse@1.0.0: - resolution: - { integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== } + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} json-schema-typed@7.0.3: - resolution: - { integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== } + resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} json-schema@0.4.0: - resolution: - { integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== } + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} json-stable-stringify-without-jsonify@1.0.1: - resolution: - { integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== } + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} json-stringify-safe@5.0.1: - resolution: - { integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== } + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} json5@1.0.2: - resolution: - { integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== } + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true json5@2.2.3: - resolution: - { integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} hasBin: true jsonc-parser@3.2.0: - resolution: - { integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== } + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} jsonfile@4.0.0: - resolution: - { integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== } + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} jsonfile@6.1.0: - resolution: - { integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== } + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} jsonparse@1.3.1: - resolution: - { integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== } - engines: { '0': node >= 0.2.0 } + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} jsprim@1.4.2: - resolution: - { integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== } - engines: { node: '>=0.6.0' } + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} jsx-ast-utils@3.3.5: - resolution: - { integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} jszip@3.10.1: - resolution: - { integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== } + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} junk@3.1.0: - resolution: - { integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} + engines: {node: '>=8'} keyv@3.1.0: - resolution: - { integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== } + resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} keyv@4.5.4: - resolution: - { integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== } + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} keyvaluestorage-interface@1.0.0: - resolution: - { integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== } + resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} kind-of@3.2.2: - resolution: - { integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} kind-of@4.0.0: - resolution: - { integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} kind-of@6.0.3: - resolution: - { integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} kleur@3.0.3: - resolution: - { integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== } - engines: { node: '>=6' } + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} klona@2.0.6: - resolution: - { integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} latest-version@5.1.0: - resolution: - { integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} + engines: {node: '>=8'} launch-editor@2.6.1: - resolution: - { integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== } + resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} lazy-universal-dotenv@3.0.1: - resolution: - { integrity: sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ== } - engines: { node: '>=6.0.0', npm: '>=6.0.0', yarn: '>=1.0.0' } + resolution: {integrity: sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==} + engines: {node: '>=6.0.0', npm: '>=6.0.0', yarn: '>=1.0.0'} lazy-val@1.0.5: - resolution: - { integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== } + resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} leven@3.1.0: - resolution: - { integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== } - engines: { node: '>=6' } + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} levn@0.4.1: - resolution: - { integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} lie@3.3.0: - resolution: - { integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== } + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} lilconfig@2.0.5: - resolution: - { integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} + engines: {node: '>=10'} lilconfig@2.1.0: - resolution: - { integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} lilconfig@3.0.0: - resolution: - { integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== } - engines: { node: '>=14' } + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} lines-and-columns@1.2.4: - resolution: - { integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== } + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} lint-staged@13.0.3: - resolution: - { integrity: sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug== } - engines: { node: ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==} + engines: {node: ^14.13.1 || >=16.0.0} hasBin: true listhen@1.5.5: - resolution: - { integrity: sha512-LXe8Xlyh3gnxdv4tSjTjscD1vpr/2PRpzq8YIaMJgyKzRG8wdISlWVWnGThJfHnlJ6hmLt2wq1yeeix0TEbuoA== } + resolution: {integrity: sha512-LXe8Xlyh3gnxdv4tSjTjscD1vpr/2PRpzq8YIaMJgyKzRG8wdISlWVWnGThJfHnlJ6hmLt2wq1yeeix0TEbuoA==} hasBin: true listr2@4.0.5: - resolution: - { integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== } - engines: { node: '>=12' } + resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} + engines: {node: '>=12'} peerDependencies: enquirer: '>= 2.3.0 < 3' peerDependenciesMeta: @@ -8715,854 +7144,673 @@ packages: optional: true lit-element@3.3.3: - resolution: - { integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA== } + resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} lit-html@2.8.0: - resolution: - { integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q== } + resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} lit@2.7.6: - resolution: - { integrity: sha512-1amFHA7t4VaaDe+vdQejSVBklwtH9svGoG6/dZi9JhxtJBBlqY5D1RV7iLUYY0trCqQc4NfhYYZilZiVHt7Hxg== } + resolution: {integrity: sha512-1amFHA7t4VaaDe+vdQejSVBklwtH9svGoG6/dZi9JhxtJBBlqY5D1RV7iLUYY0trCqQc4NfhYYZilZiVHt7Hxg==} load-json-file@1.1.0: - resolution: - { integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==} + engines: {node: '>=0.10.0'} load-json-file@4.0.0: - resolution: - { integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} loader-runner@2.4.0: - resolution: - { integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== } - engines: { node: '>=4.3.0 <5.0.0 || >=5.10' } + resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} loader-runner@4.3.0: - resolution: - { integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== } - engines: { node: '>=6.11.5' } + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} loader-utils@1.4.2: - resolution: - { integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== } - engines: { node: '>=4.0.0' } + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} loader-utils@2.0.4: - resolution: - { integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== } - engines: { node: '>=8.9.0' } + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} locate-path@3.0.0: - resolution: - { integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== } - engines: { node: '>=6' } + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} locate-path@5.0.0: - resolution: - { integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== } - engines: { node: '>=8' } + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} locate-path@6.0.0: - resolution: - { integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} lodash.camelcase@4.3.0: - resolution: - { integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== } + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} lodash.debounce@4.0.8: - resolution: - { integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== } + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} lodash.defaults@4.2.0: - resolution: - { integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== } + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} lodash.escaperegexp@4.1.2: - resolution: - { integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== } + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} lodash.get@4.4.2: - resolution: - { integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== } + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} lodash.isarguments@3.1.0: - resolution: - { integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== } + resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} lodash.isequal@4.5.0: - resolution: - { integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== } + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} lodash.isfunction@3.0.9: - resolution: - { integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== } + resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} lodash.isplainobject@4.0.6: - resolution: - { integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== } + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} lodash.kebabcase@4.1.1: - resolution: - { integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== } + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} lodash.memoize@4.1.2: - resolution: - { integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== } + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} lodash.merge@4.6.2: - resolution: - { integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== } + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} lodash.mergewith@4.6.2: - resolution: - { integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== } + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} lodash.set@4.3.2: - resolution: - { integrity: sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg== } + resolution: {integrity: sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==} lodash.snakecase@4.1.1: - resolution: - { integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== } + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} lodash.startcase@4.4.0: - resolution: - { integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== } + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} lodash.uniq@4.5.0: - resolution: - { integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== } + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} lodash.upperfirst@4.3.1: - resolution: - { integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== } + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} lodash@4.17.21: - resolution: - { integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== } + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} log-symbols@2.2.0: - resolution: - { integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} + engines: {node: '>=4'} log-update@4.0.0: - resolution: - { integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} loose-envify@1.4.0: - resolution: - { integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== } + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true lottie-react@2.4.0: - resolution: - { integrity: sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w== } + resolution: {integrity: sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 lottie-web@5.12.2: - resolution: - { integrity: sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg== } + resolution: {integrity: sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==} loud-rejection@1.6.0: - resolution: - { integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==} + engines: {node: '>=0.10.0'} lower-case@2.0.2: - resolution: - { integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== } + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} lowercase-keys@1.0.1: - resolution: - { integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} lowercase-keys@2.0.0: - resolution: - { integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} lowlight@1.20.0: - resolution: - { integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw== } + resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} lru-cache@10.1.0: - resolution: - { integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== } - engines: { node: 14 || >=16.14 } + resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} + engines: {node: 14 || >=16.14} lru-cache@4.1.5: - resolution: - { integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== } + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} lru-cache@5.1.1: - resolution: - { integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== } + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} lru-cache@6.0.0: - resolution: - { integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} lru-queue@0.1.0: - resolution: - { integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ== } + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} lz-string@1.5.0: - resolution: - { integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== } + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true make-dir@2.1.0: - resolution: - { integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} make-dir@3.1.0: - resolution: - { integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} make-dir@4.0.0: - resolution: - { integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} make-error@1.3.6: - resolution: - { integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== } + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} makeerror@1.0.12: - resolution: - { integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== } + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} map-age-cleaner@0.1.3: - resolution: - { integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== } - engines: { node: '>=6' } + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} + engines: {node: '>=6'} map-cache@0.2.2: - resolution: - { integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} map-obj@1.0.1: - resolution: - { integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} map-obj@4.3.0: - resolution: - { integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} map-or-similar@1.5.0: - resolution: - { integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg== } + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} map-visit@1.0.0: - resolution: - { integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} markdown-escapes@1.0.4: - resolution: - { integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== } + resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==} + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true markdown-table@3.0.3: - resolution: - { integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== } + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} matcher@3.0.0: - resolution: - { integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== } - engines: { node: '>=10' } + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} md5.js@1.3.5: - resolution: - { integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== } + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} mdast-squeeze-paragraphs@4.0.0: - resolution: - { integrity: sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== } + resolution: {integrity: sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==} mdast-util-definitions@4.0.0: - resolution: - { integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== } + resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} mdast-util-find-and-replace@3.0.1: - resolution: - { integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA== } + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} mdast-util-from-markdown@2.0.1: - resolution: - { integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA== } + resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} mdast-util-gfm-autolink-literal@2.0.0: - resolution: - { integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg== } + resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==} mdast-util-gfm-footnote@2.0.0: - resolution: - { integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== } + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} mdast-util-gfm-strikethrough@2.0.0: - resolution: - { integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== } + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} mdast-util-gfm-table@2.0.0: - resolution: - { integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== } + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} mdast-util-gfm-task-list-item@2.0.0: - resolution: - { integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== } + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} mdast-util-gfm@3.0.0: - resolution: - { integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== } + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} mdast-util-mdx-expression@2.0.0: - resolution: - { integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw== } + resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} mdast-util-mdx-jsx@3.1.2: - resolution: - { integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA== } + resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==} mdast-util-mdxjs-esm@2.0.1: - resolution: - { integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== } + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} mdast-util-phrasing@4.1.0: - resolution: - { integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== } + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} mdast-util-to-hast@10.0.1: - resolution: - { integrity: sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== } + resolution: {integrity: sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==} mdast-util-to-hast@13.2.0: - resolution: - { integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== } + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} mdast-util-to-markdown@2.1.0: - resolution: - { integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ== } + resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} mdast-util-to-string@1.1.0: - resolution: - { integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== } + resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} mdast-util-to-string@4.0.0: - resolution: - { integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== } + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} mdn-data@2.0.14: - resolution: - { integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== } + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} mdurl@1.0.1: - resolution: - { integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== } + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} media-typer@0.3.0: - resolution: - { integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} mem@8.1.1: - resolution: - { integrity: sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==} + engines: {node: '>=10'} memfs@3.5.3: - resolution: - { integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw== } - engines: { node: '>= 4.0.0' } + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} memoizee@0.4.15: - resolution: - { integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== } + resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} memoizerific@1.11.3: - resolution: - { integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog== } + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} memory-fs@0.4.1: - resolution: - { integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ== } + resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==} memory-fs@0.5.0: - resolution: - { integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== } - engines: { node: '>=4.3.0 <5.0.0 || >=5.10' } + resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} memorystream@0.3.1: - resolution: - { integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== } - engines: { node: '>= 0.10.0' } + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} meow@3.7.0: - resolution: - { integrity: sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==} + engines: {node: '>=0.10.0'} meow@8.1.2: - resolution: - { integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== } - engines: { node: '>=10' } + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} merge-descriptors@1.0.1: - resolution: - { integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== } + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} merge-stream@2.0.0: - resolution: - { integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== } + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} merge2@1.4.1: - resolution: - { integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} methods@1.1.2: - resolution: - { integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} microevent.ts@0.1.1: - resolution: - { integrity: sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== } + resolution: {integrity: sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==} micromark-core-commonmark@2.0.1: - resolution: - { integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA== } + resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} micromark-extension-gfm-autolink-literal@2.0.0: - resolution: - { integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg== } + resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==} micromark-extension-gfm-footnote@2.0.0: - resolution: - { integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg== } + resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==} micromark-extension-gfm-strikethrough@2.0.0: - resolution: - { integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw== } + resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==} micromark-extension-gfm-table@2.0.0: - resolution: - { integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw== } + resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==} micromark-extension-gfm-tagfilter@2.0.0: - resolution: - { integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== } + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} micromark-extension-gfm-task-list-item@2.0.1: - resolution: - { integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw== } + resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==} micromark-extension-gfm@3.0.0: - resolution: - { integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== } + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} micromark-factory-destination@2.0.0: - resolution: - { integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA== } + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} micromark-factory-label@2.0.0: - resolution: - { integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw== } + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} micromark-factory-space@2.0.0: - resolution: - { integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg== } + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} micromark-factory-title@2.0.0: - resolution: - { integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A== } + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} micromark-factory-whitespace@2.0.0: - resolution: - { integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA== } + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} micromark-util-character@2.1.0: - resolution: - { integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== } + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} micromark-util-chunked@2.0.0: - resolution: - { integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg== } + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} micromark-util-classify-character@2.0.0: - resolution: - { integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw== } + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} micromark-util-combine-extensions@2.0.0: - resolution: - { integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ== } + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} micromark-util-decode-numeric-character-reference@2.0.1: - resolution: - { integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ== } + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} micromark-util-decode-string@2.0.0: - resolution: - { integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== } + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} micromark-util-encode@2.0.0: - resolution: - { integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== } + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} micromark-util-html-tag-name@2.0.0: - resolution: - { integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw== } + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} micromark-util-normalize-identifier@2.0.0: - resolution: - { integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w== } + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} micromark-util-resolve-all@2.0.0: - resolution: - { integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA== } + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} micromark-util-sanitize-uri@2.0.0: - resolution: - { integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== } + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} micromark-util-subtokenize@2.0.1: - resolution: - { integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q== } + resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} micromark-util-symbol@2.0.0: - resolution: - { integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== } + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} micromark-util-types@2.0.0: - resolution: - { integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== } + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} micromark@4.0.0: - resolution: - { integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ== } + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} micromatch@3.1.10: - resolution: - { integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} + engines: {node: '>=0.10.0'} micromatch@4.0.5: - resolution: - { integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} miller-rabin@4.0.1: - resolution: - { integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== } + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true mime-db@1.52.0: - resolution: - { integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} mime-types@2.1.35: - resolution: - { integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} mime@1.6.0: - resolution: - { integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} hasBin: true mime@2.6.0: - resolution: - { integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== } - engines: { node: '>=4.0.0' } + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} hasBin: true mime@3.0.0: - resolution: - { integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} hasBin: true mimic-fn@2.1.0: - resolution: - { integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} mimic-fn@3.1.0: - resolution: - { integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} + engines: {node: '>=8'} mimic-fn@4.0.0: - resolution: - { integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== } - engines: { node: '>=12' } + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} mimic-response@1.0.1: - resolution: - { integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} mimic-response@3.1.0: - resolution: - { integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} min-document@2.19.0: - resolution: - { integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== } + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} min-indent@1.0.1: - resolution: - { integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} mini-css-extract-plugin@2.6.1: - resolution: - { integrity: sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==} + engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 minimalistic-assert@1.0.1: - resolution: - { integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== } + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} minimalistic-crypto-utils@1.0.1: - resolution: - { integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== } + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} minimatch@3.1.2: - resolution: - { integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== } + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} minimatch@5.1.6: - resolution: - { integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== } - engines: { node: '>=10' } + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} minimatch@9.0.3: - resolution: - { integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== } - engines: { node: '>=16 || 14 >=14.17' } + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} minimist-options@4.1.0: - resolution: - { integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} minimist@1.2.8: - resolution: - { integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== } + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} minipass-collect@1.0.2: - resolution: - { integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} minipass-flush@1.0.5: - resolution: - { integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} minipass-pipeline@1.2.4: - resolution: - { integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== } - engines: { node: '>=8' } + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} minipass@3.3.6: - resolution: - { integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} minipass@5.0.0: - resolution: - { integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} minizlib@2.1.2: - resolution: - { integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} mississippi@3.0.0: - resolution: - { integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== } - engines: { node: '>=4.0.0' } + resolution: {integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==} + engines: {node: '>=4.0.0'} mixin-deep@1.3.2: - resolution: - { integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} mkdirp@0.5.6: - resolution: - { integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== } + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true mkdirp@1.0.4: - resolution: - { integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} hasBin: true mlly@1.4.2: - resolution: - { integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== } + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} mock-socket@9.3.1: - resolution: - { integrity: sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==} + engines: {node: '>= 8'} motion@10.16.2: - resolution: - { integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ== } + resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} move-concurrently@1.0.1: - resolution: - { integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== } + resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==} mri@1.2.0: - resolution: - { integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} ms@2.0.0: - resolution: - { integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== } + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} ms@2.1.1: - resolution: - { integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== } + resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} ms@2.1.2: - resolution: - { integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== } + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} ms@2.1.3: - resolution: - { integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== } + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} multicast-dns@7.2.5: - resolution: - { integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== } + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true multiformats@9.9.0: - resolution: - { integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== } + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} multimatch@4.0.0: - resolution: - { integrity: sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==} + engines: {node: '>=8'} mz@2.7.0: - resolution: - { integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== } + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} nan@2.18.0: - resolution: - { integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== } + resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} nanoid@3.3.7: - resolution: - { integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true nanomatch@1.2.13: - resolution: - { integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} natural-compare@1.4.0: - resolution: - { integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== } + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} negotiator@0.6.3: - resolution: - { integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} neo-async@2.6.2: - resolution: - { integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== } + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} nested-error-stacks@2.1.1: - resolution: - { integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== } + resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} next-tick@1.1.0: - resolution: - { integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== } + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} nice-napi@1.0.2: - resolution: - { integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA== } + resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==} os: ['!win32'] nice-try@1.0.5: - resolution: - { integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== } + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} no-case@3.0.4: - resolution: - { integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== } + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} nock@13.5.4: - resolution: - { integrity: sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== } - engines: { node: '>= 10.13' } + resolution: {integrity: sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==} + engines: {node: '>= 10.13'} node-addon-api@1.7.2: - resolution: - { integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== } + resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} node-addon-api@3.2.1: - resolution: - { integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== } + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} node-addon-api@7.0.0: - resolution: - { integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA== } + resolution: {integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==} node-dir@0.1.17: - resolution: - { integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg== } - engines: { node: '>= 0.10.5' } + resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} + engines: {node: '>= 0.10.5'} node-domexception@1.0.0: - resolution: - { integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== } - engines: { node: '>=10.5.0' } + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} node-fetch-native@1.4.1: - resolution: - { integrity: sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w== } + resolution: {integrity: sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==} node-fetch@2.7.0: - resolution: - { integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== } - engines: { node: 4.x || >=6.0.0 } + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: @@ -9570,746 +7818,594 @@ packages: optional: true node-fetch@3.3.2: - resolution: - { integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} node-forge@1.3.1: - resolution: - { integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== } - engines: { node: '>= 6.13.0' } + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} node-gyp-build@4.8.1: - resolution: - { integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== } + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} hasBin: true node-int64@0.4.0: - resolution: - { integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== } + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} node-libs-browser@2.2.1: - resolution: - { integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== } + resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==} node-releases@2.0.14: - resolution: - { integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== } + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} nodemon@2.0.18: - resolution: - { integrity: sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A== } - engines: { node: '>=8.10.0' } + resolution: {integrity: sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A==} + engines: {node: '>=8.10.0'} hasBin: true nopt@1.0.10: - resolution: - { integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== } + resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} hasBin: true normalize-package-data@2.5.0: - resolution: - { integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== } + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} normalize-package-data@3.0.3: - resolution: - { integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} normalize-path@2.1.1: - resolution: - { integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} normalize-path@3.0.0: - resolution: - { integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} normalize-range@0.1.2: - resolution: - { integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} normalize-url@4.5.1: - resolution: - { integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} + engines: {node: '>=8'} normalize-url@6.1.0: - resolution: - { integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== } - engines: { node: '>=10' } + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} npm-run-all@4.1.5: - resolution: - { integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== } - engines: { node: '>= 4' } + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} hasBin: true npm-run-path@2.0.2: - resolution: - { integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} npm-run-path@4.0.1: - resolution: - { integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} npm-run-path@5.1.0: - resolution: - { integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} npmlog@5.0.1: - resolution: - { integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== } + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} nth-check@2.1.1: - resolution: - { integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== } + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} num2fraction@1.2.2: - resolution: - { integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg== } + resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==} nwsapi@2.2.7: - resolution: - { integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== } + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} oauth-sign@0.9.0: - resolution: - { integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== } + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} object-assign@4.1.1: - resolution: - { integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} object-copy@0.1.0: - resolution: - { integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} object-hash@3.0.0: - resolution: - { integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} object-inspect@1.13.1: - resolution: - { integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== } + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} object-is@1.1.5: - resolution: - { integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} object-keys@1.1.1: - resolution: - { integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} object-visit@1.0.1: - resolution: - { integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} object.assign@4.1.5: - resolution: - { integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} object.entries@1.1.7: - resolution: - { integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} object.fromentries@2.0.7: - resolution: - { integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} object.getownpropertydescriptors@2.1.7: - resolution: - { integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} + engines: {node: '>= 0.8'} object.hasown@1.1.3: - resolution: - { integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== } + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} object.pick@1.3.0: - resolution: - { integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} object.values@1.1.7: - resolution: - { integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} objectorarray@1.0.5: - resolution: - { integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg== } + resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} obuf@1.1.2: - resolution: - { integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== } + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} ofetch@1.3.3: - resolution: - { integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg== } + resolution: {integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==} on-exit-leak-free@0.2.0: - resolution: - { integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== } + resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} on-finished@2.4.1: - resolution: - { integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} on-headers@1.0.2: - resolution: - { integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} once@1.4.0: - resolution: - { integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== } + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} onetime@5.1.2: - resolution: - { integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} onetime@6.0.0: - resolution: - { integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} open@7.4.2: - resolution: - { integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== } - engines: { node: '>=8' } + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} open@8.4.2: - resolution: - { integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} optimism@0.16.2: - resolution: - { integrity: sha512-zWNbgWj+3vLEjZNIh/okkY2EUfX+vB9TJopzIZwT1xxaMqC5hRLLraePod4c5n4He08xuXNH+zhKFFCu390wiQ== } + resolution: {integrity: sha512-zWNbgWj+3vLEjZNIh/okkY2EUfX+vB9TJopzIZwT1xxaMqC5hRLLraePod4c5n4He08xuXNH+zhKFFCu390wiQ==} optionator@0.9.3: - resolution: - { integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} os-browserify@0.3.0: - resolution: - { integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== } + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} os-filter-obj@2.0.0: - resolution: - { integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==} + engines: {node: '>=4'} os-homedir@1.0.2: - resolution: - { integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} + engines: {node: '>=0.10.0'} p-all@2.1.0: - resolution: - { integrity: sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==} + engines: {node: '>=6'} p-cancelable@1.1.0: - resolution: - { integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== } - engines: { node: '>=6' } + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} p-cancelable@2.1.1: - resolution: - { integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} p-defer@1.0.0: - resolution: - { integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} p-event@4.2.0: - resolution: - { integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} + engines: {node: '>=8'} p-filter@2.1.0: - resolution: - { integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} p-finally@1.0.0: - resolution: - { integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== } - engines: { node: '>=4' } + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} p-limit@2.3.0: - resolution: - { integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== } - engines: { node: '>=6' } + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} p-limit@3.1.0: - resolution: - { integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} p-locate@3.0.0: - resolution: - { integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} p-locate@4.1.0: - resolution: - { integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== } - engines: { node: '>=8' } + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} p-locate@5.0.0: - resolution: - { integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} p-map@2.1.0: - resolution: - { integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== } - engines: { node: '>=6' } + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} p-map@3.0.0: - resolution: - { integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} p-map@4.0.0: - resolution: - { integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} p-retry@4.6.2: - resolution: - { integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} p-timeout@3.2.0: - resolution: - { integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} p-try@2.2.0: - resolution: - { integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} package-json@6.5.0: - resolution: - { integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} + engines: {node: '>=8'} pako@1.0.11: - resolution: - { integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== } + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} parallel-transform@1.2.0: - resolution: - { integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== } + resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==} param-case@3.0.4: - resolution: - { integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== } + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} parent-module@1.0.1: - resolution: - { integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== } - engines: { node: '>=6' } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} parity-scale-codec@0.6.1: - resolution: - { integrity: sha512-zA63XN6CpEdt/kNXXceidcXbF/Yp8Xx+Mch3muY2R6Um1qUJHeuQr6k+bzpalASoQDUafFjj78gXJrGr6erz9w== } + resolution: {integrity: sha512-zA63XN6CpEdt/kNXXceidcXbF/Yp8Xx+Mch3muY2R6Um1qUJHeuQr6k+bzpalASoQDUafFjj78gXJrGr6erz9w==} deprecated: Package renamed to `scale-codec` parse-asn1@5.1.6: - resolution: - { integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== } + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} parse-entities@2.0.0: - resolution: - { integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== } + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} parse-entities@4.0.1: - resolution: - { integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== } + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} parse-json@2.2.0: - resolution: - { integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} + engines: {node: '>=0.10.0'} parse-json@4.0.0: - resolution: - { integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} parse-json@5.2.0: - resolution: - { integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} parse5@6.0.1: - resolution: - { integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== } + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} parse5@7.1.2: - resolution: - { integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== } + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} parseurl@1.3.3: - resolution: - { integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} pascal-case@3.1.2: - resolution: - { integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== } + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} pascalcase@0.1.1: - resolution: - { integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} path-browserify@0.0.1: - resolution: - { integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== } + resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} path-browserify@1.0.1: - resolution: - { integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== } + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} path-dirname@1.0.2: - resolution: - { integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== } + resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} path-exists@2.1.0: - resolution: - { integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==} + engines: {node: '>=0.10.0'} path-exists@3.0.0: - resolution: - { integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} path-exists@4.0.0: - resolution: - { integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} path-is-absolute@1.0.1: - resolution: - { integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} path-key@2.0.1: - resolution: - { integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== } - engines: { node: '>=4' } + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} path-key@3.1.1: - resolution: - { integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} path-key@4.0.0: - resolution: - { integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} path-parse@1.0.7: - resolution: - { integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} path-scurry@1.10.1: - resolution: - { integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== } - engines: { node: '>=16 || 14 >=14.17' } + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} path-to-regexp@0.1.7: - resolution: - { integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== } + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} path-type@1.1.0: - resolution: - { integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==} + engines: {node: '>=0.10.0'} path-type@3.0.0: - resolution: - { integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} path-type@4.0.0: - resolution: - { integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} pathe@1.1.1: - resolution: - { integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== } + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} patronum@2.2.0: - resolution: - { integrity: sha512-Idsb5swd+2UI1NuBlHJuVA4WlaUeEluZJxGAZ9obCViuEf4pP68bij3f1sZCM/vqqWPsbHclYweDNt/sWu0O1g== } + resolution: {integrity: sha512-Idsb5swd+2UI1NuBlHJuVA4WlaUeEluZJxGAZ9obCViuEf4pP68bij3f1sZCM/vqqWPsbHclYweDNt/sWu0O1g==} peerDependencies: effector: ^23 pbkdf2@3.1.2: - resolution: - { integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== } - engines: { node: '>=0.12' } + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} peek-readable@5.0.0: - resolution: - { integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A== } - engines: { node: '>=14.16' } + resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==} + engines: {node: '>=14.16'} pend@1.2.0: - resolution: - { integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== } + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} performance-now@2.1.0: - resolution: - { integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== } + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} picocolors@0.2.1: - resolution: - { integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== } + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} picocolors@1.0.0: - resolution: - { integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== } + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} picomatch@2.3.1: - resolution: - { integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} pidtree@0.3.1: - resolution: - { integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} hasBin: true pidtree@0.6.0: - resolution: - { integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} hasBin: true pify@2.3.0: - resolution: - { integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} pify@3.0.0: - resolution: - { integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} pify@4.0.1: - resolution: - { integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== } - engines: { node: '>=6' } + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} pinkie-promise@2.0.1: - resolution: - { integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} pinkie@2.0.4: - resolution: - { integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} pino-abstract-transport@0.5.0: - resolution: - { integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== } + resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} pino-std-serializers@4.0.0: - resolution: - { integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== } + resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} pino@7.11.0: - resolution: - { integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== } + resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} hasBin: true pirates@4.0.6: - resolution: - { integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} piscina@4.6.1: - resolution: - { integrity: sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA== } + resolution: {integrity: sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==} pkg-dir@3.0.0: - resolution: - { integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== } - engines: { node: '>=6' } + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} pkg-dir@4.2.0: - resolution: - { integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} pkg-dir@5.0.0: - resolution: - { integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} pkg-types@1.0.3: - resolution: - { integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== } + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} pkg-up@3.1.0: - resolution: - { integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} playwright-core@1.44.1: - resolution: - { integrity: sha512-wh0JWtYTrhv1+OSsLPgFzGzt67Y7BE/ZS3jEqgGBlp2ppp1ZDj8c+9IARNW4dwf1poq5MgHreEM2KV/GuR4cFA== } - engines: { node: '>=16' } + resolution: {integrity: sha512-wh0JWtYTrhv1+OSsLPgFzGzt67Y7BE/ZS3jEqgGBlp2ppp1ZDj8c+9IARNW4dwf1poq5MgHreEM2KV/GuR4cFA==} + engines: {node: '>=16'} hasBin: true playwright@1.44.1: - resolution: - { integrity: sha512-qr/0UJ5CFAtloI3avF95Y0L1xQo6r3LQArLIg/z/PoGJ6xa+EwzrwO5lpNr/09STxdHuUoP2mvuELJS+hLdtgg== } - engines: { node: '>=16' } + resolution: {integrity: sha512-qr/0UJ5CFAtloI3avF95Y0L1xQo6r3LQArLIg/z/PoGJ6xa+EwzrwO5lpNr/09STxdHuUoP2mvuELJS+hLdtgg==} + engines: {node: '>=16'} hasBin: true plist@3.1.0: - resolution: - { integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== } - engines: { node: '>=10.4.0' } + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} + engines: {node: '>=10.4.0'} plur@2.1.2: - resolution: - { integrity: sha512-WhcHk576xg9y/iv6RWOuroZgsqvCbJN+XGvAypCJwLAYs2iWDp5LUmvaCdV6JR2O0SMBf8l6p7A94AyLCFVMlQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-WhcHk576xg9y/iv6RWOuroZgsqvCbJN+XGvAypCJwLAYs2iWDp5LUmvaCdV6JR2O0SMBf8l6p7A94AyLCFVMlQ==} + engines: {node: '>=0.10.0'} pngjs@5.0.0: - resolution: - { integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} pnglib@0.0.1: - resolution: - { integrity: sha512-95ChzOoYLOPIyVmL+Y6X+abKGXUJlvOVLkB1QQkyXl7Uczc6FElUy/x01NS7r2GX6GRezloO/ecCX9h4U9KadA== } + resolution: {integrity: sha512-95ChzOoYLOPIyVmL+Y6X+abKGXUJlvOVLkB1QQkyXl7Uczc6FElUy/x01NS7r2GX6GRezloO/ecCX9h4U9KadA==} pnp-webpack-plugin@1.6.4: - resolution: - { integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==} + engines: {node: '>=6'} pnpm@9.4.0: - resolution: - { integrity: sha512-9Um4pSydK4U2di+ZwHIiBe/Fr5E+d4NdvMw7CwssqefcgCK3gGLBcpHEjoh0nHDOiOtadPH6jEv14Yu0bIvYOg== } - engines: { node: '>=18.12' } + resolution: {integrity: sha512-9Um4pSydK4U2di+ZwHIiBe/Fr5E+d4NdvMw7CwssqefcgCK3gGLBcpHEjoh0nHDOiOtadPH6jEv14Yu0bIvYOg==} + engines: {node: '>=18.12'} hasBin: true polished@4.2.2: - resolution: - { integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} + engines: {node: '>=10'} posix-character-classes@0.1.1: - resolution: - { integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} postcss-calc@8.2.4: - resolution: - { integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== } + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} peerDependencies: postcss: ^8.2.2 postcss-colormin@5.3.1: - resolution: - { integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-convert-values@5.1.3: - resolution: - { integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-discard-comments@5.1.2: - resolution: - { integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-discard-duplicates@5.1.0: - resolution: - { integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-discard-empty@5.1.1: - resolution: - { integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-discard-overridden@5.1.0: - resolution: - { integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-flexbugs-fixes@4.2.1: - resolution: - { integrity: sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== } + resolution: {integrity: sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==} postcss-import@15.1.0: - resolution: - { integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 postcss-js@4.0.1: - resolution: - { integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== } - engines: { node: ^12 || ^14 || >= 16 } + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 postcss-load-config@4.0.2: - resolution: - { integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== } - engines: { node: '>= 14' } + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} peerDependencies: postcss: '>=8.0.9' ts-node: '>=9.0.0' @@ -10320,327 +8416,273 @@ packages: optional: true postcss-loader@4.3.0: - resolution: - { integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==} + engines: {node: '>= 10.13.0'} peerDependencies: postcss: ^7.0.0 || ^8.0.1 webpack: ^4.0.0 || ^5.0.0 postcss-loader@7.3.3: - resolution: - { integrity: sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA== } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==} + engines: {node: '>= 14.15.0'} peerDependencies: postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 postcss-merge-longhand@5.1.7: - resolution: - { integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-merge-rules@5.1.4: - resolution: - { integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-minify-font-values@5.1.0: - resolution: - { integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-minify-gradients@5.1.1: - resolution: - { integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-minify-params@5.1.4: - resolution: - { integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-minify-selectors@5.2.1: - resolution: - { integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-modules-extract-imports@2.0.0: - resolution: - { integrity: sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==} + engines: {node: '>= 6'} postcss-modules-extract-imports@3.0.0: - resolution: - { integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 postcss-modules-local-by-default@3.0.3: - resolution: - { integrity: sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==} + engines: {node: '>= 6'} postcss-modules-local-by-default@4.0.3: - resolution: - { integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 postcss-modules-scope@2.2.0: - resolution: - { integrity: sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==} + engines: {node: '>= 6'} postcss-modules-scope@3.0.0: - resolution: - { integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 postcss-modules-values@3.0.0: - resolution: - { integrity: sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== } + resolution: {integrity: sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==} postcss-modules-values@4.0.0: - resolution: - { integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 postcss-nested@6.0.1: - resolution: - { integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== } - engines: { node: '>=12.0' } + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 postcss-normalize-charset@5.1.0: - resolution: - { integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-display-values@5.1.0: - resolution: - { integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-positions@5.1.1: - resolution: - { integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-repeat-style@5.1.1: - resolution: - { integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-string@5.1.0: - resolution: - { integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-timing-functions@5.1.0: - resolution: - { integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-unicode@5.1.1: - resolution: - { integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-url@5.1.0: - resolution: - { integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-whitespace@5.1.1: - resolution: - { integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-ordered-values@5.1.3: - resolution: - { integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-reduce-initial@5.1.2: - resolution: - { integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-reduce-transforms@5.1.0: - resolution: - { integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-selector-parser@6.0.13: - resolution: - { integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} postcss-svgo@5.1.0: - resolution: - { integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-unique-selectors@5.1.1: - resolution: - { integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 postcss-value-parser@4.2.0: - resolution: - { integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== } + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} postcss@7.0.39: - resolution: - { integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} postcss@8.4.31: - resolution: - { integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: - resolution: - { integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} prepend-http@2.0.0: - resolution: - { integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} + engines: {node: '>=4'} prettier-linter-helpers@1.0.0: - resolution: - { integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} prettier@2.3.0: - resolution: - { integrity: sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==} + engines: {node: '>=10.13.0'} hasBin: true prettier@2.8.8: - resolution: - { integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} hasBin: true pretty-error@2.1.2: - resolution: - { integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== } + resolution: {integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==} pretty-error@4.0.0: - resolution: - { integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== } + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} pretty-format@22.4.3: - resolution: - { integrity: sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ== } + resolution: {integrity: sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==} pretty-format@27.5.1: - resolution: - { integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} pretty-format@29.7.0: - resolution: - { integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} pretty-hrtime@1.0.3: - resolution: - { integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} + engines: {node: '>= 0.8'} pretty-quick@3.1.3: - resolution: - { integrity: sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA== } - engines: { node: '>=10.13' } + resolution: {integrity: sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==} + engines: {node: '>=10.13'} hasBin: true peerDependencies: prettier: '>=2.0.0' prismjs@1.27.0: - resolution: - { integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} + engines: {node: '>=6'} prismjs@1.29.0: - resolution: - { integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== } - engines: { node: '>=6' } + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} process-nextick-args@2.0.1: - resolution: - { integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== } + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} process-warning@1.0.0: - resolution: - { integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== } + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} process@0.11.10: - resolution: - { integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== } - engines: { node: '>= 0.6.0' } + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} progress@2.0.3: - resolution: - { integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} promise-inflight@1.0.1: - resolution: - { integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== } + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: bluebird: '*' peerDependenciesMeta: @@ -10648,261 +8690,211 @@ packages: optional: true promise-retry@2.0.1: - resolution: - { integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== } - engines: { node: '>=10' } + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} promise.allsettled@1.0.7: - resolution: - { integrity: sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA==} + engines: {node: '>= 0.4'} promise.prototype.finally@3.1.7: - resolution: - { integrity: sha512-iL9OcJRUZcCE5xn6IwhZxO+eMM0VEXjkETHy+Nk+d9q3s7kxVtPg+mBlMO+ZGxNKNMODyKmy/bOyt/yhxTnvEw== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-iL9OcJRUZcCE5xn6IwhZxO+eMM0VEXjkETHy+Nk+d9q3s7kxVtPg+mBlMO+ZGxNKNMODyKmy/bOyt/yhxTnvEw==} + engines: {node: '>= 0.4'} prompts@2.4.2: - resolution: - { integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} prop-types@15.8.1: - resolution: - { integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== } + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} propagate@2.0.1: - resolution: - { integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} + engines: {node: '>= 8'} property-information@5.6.0: - resolution: - { integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== } + resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} property-information@6.5.0: - resolution: - { integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== } + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} proxy-addr@2.0.7: - resolution: - { integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} proxy-compare@2.5.1: - resolution: - { integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA== } + resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} proxy-from-env@1.1.0: - resolution: - { integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== } + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} prr@1.0.1: - resolution: - { integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== } + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} pseudomap@1.0.2: - resolution: - { integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== } + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} psl@1.9.0: - resolution: - { integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== } + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} pstree.remy@1.1.8: - resolution: - { integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== } + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} public-encrypt@4.0.3: - resolution: - { integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== } + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} pump@2.0.1: - resolution: - { integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== } + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} pump@3.0.0: - resolution: - { integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== } + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} pumpify@1.5.1: - resolution: - { integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== } + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} punycode@1.4.1: - resolution: - { integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== } + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} punycode@2.3.1: - resolution: - { integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} pupa@2.1.1: - resolution: - { integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== } - engines: { node: '>=8' } + resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} + engines: {node: '>=8'} pure-rand@6.0.4: - resolution: - { integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== } + resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} q@1.5.1: - resolution: - { integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== } - engines: { node: '>=0.6.0', teleport: '>=0.2.0' } + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} qr-code-styling@1.6.0-rc.1: - resolution: - { integrity: sha512-ModRIiW6oUnsP18QzrRYZSc/CFKFKIdj7pUs57AEVH20ajlglRpN3HukjHk0UbNMTlKGuaYl7Gt6/O5Gg2NU2Q== } + resolution: {integrity: sha512-ModRIiW6oUnsP18QzrRYZSc/CFKFKIdj7pUs57AEVH20ajlglRpN3HukjHk0UbNMTlKGuaYl7Gt6/O5Gg2NU2Q==} qrcode-generator@1.4.4: - resolution: - { integrity: sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== } + resolution: {integrity: sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==} qrcode@1.5.3: - resolution: - { integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==} + engines: {node: '>=10.13.0'} hasBin: true qs@6.11.0: - resolution: - { integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== } - engines: { node: '>=0.6' } + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} qs@6.11.2: - resolution: - { integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== } - engines: { node: '>=0.6' } + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} qs@6.5.3: - resolution: - { integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== } - engines: { node: '>=0.6' } + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} query-string@7.1.3: - resolution: - { integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} querystring-es3@0.2.1: - resolution: - { integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== } - engines: { node: '>=0.4.x' } + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} querystringify@2.2.0: - resolution: - { integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== } + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} queue-microtask@1.2.3: - resolution: - { integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} quick-format-unescaped@4.0.4: - resolution: - { integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== } + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} quick-lru@4.0.1: - resolution: - { integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} quick-lru@5.1.1: - resolution: - { integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} radix3@1.1.0: - resolution: - { integrity: sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A== } + resolution: {integrity: sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A==} ramda@0.28.0: - resolution: - { integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA== } + resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} randombytes@2.1.0: - resolution: - { integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== } + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} randomfill@1.0.4: - resolution: - { integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== } + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} range-parser@1.2.1: - resolution: - { integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} raptorq@1.7.22: - resolution: - { integrity: sha512-xzA8uRjFY9c5Vble8hCLVZZLLAO2kzJEZB3HsrZlKwQVctSe5raVBDwhDnu9O6/ZZhFrQu97cxEkPDiBhyto1A== } + resolution: {integrity: sha512-xzA8uRjFY9c5Vble8hCLVZZLLAO2kzJEZB3HsrZlKwQVctSe5raVBDwhDnu9O6/ZZhFrQu97cxEkPDiBhyto1A==} raw-body@2.5.2: - resolution: - { integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} raw-loader@4.0.2: - resolution: - { integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==} + engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 rc@1.2.8: - resolution: - { integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== } + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true react-copy-to-clipboard@5.1.0: - resolution: - { integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A== } + resolution: {integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==} peerDependencies: react: ^15.3.0 || 16 || 17 || 18 react-docgen-typescript@2.2.2: - resolution: - { integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg== } + resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: typescript: '>= 4.3.x' react-docgen@5.4.3: - resolution: - { integrity: sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA== } - engines: { node: '>=8.10.0' } + resolution: {integrity: sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA==} + engines: {node: '>=8.10.0'} hasBin: true react-dom@18.2.0: - resolution: - { integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== } + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 react-element-to-jsx-string@14.3.4: - resolution: - { integrity: sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg== } + resolution: {integrity: sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==} peerDependencies: react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 react-error-boundary@3.1.4: - resolution: - { integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA== } - engines: { node: '>=10', npm: '>=6' } + resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} + engines: {node: '>=10', npm: '>=6'} peerDependencies: react: '>=16.13.1' react-hook-form@7.33.1: - resolution: - { integrity: sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg== } - engines: { node: '>=12.22.0' } + resolution: {integrity: sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg==} + engines: {node: '>=12.22.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 react-i18next@11.18.0: - resolution: - { integrity: sha512-coJujU20xJ5Wa5rHjTyB5LFKZb1yfXo2A+40RRSyAF0FlZRHyy+3C1Mr92x1JPfS7W7v2TWNn8mRhpDFGJwXVg== } + resolution: {integrity: sha512-coJujU20xJ5Wa5rHjTyB5LFKZb1yfXo2A+40RRSyAF0FlZRHyy+3C1Mr92x1JPfS7W7v2TWNn8mRhpDFGJwXVg==} peerDependencies: i18next: '>= 19.0.0' react: '>= 16.8.0' @@ -10915,1318 +8907,1042 @@ packages: optional: true react-inspector@5.1.1: - resolution: - { integrity: sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg== } + resolution: {integrity: sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==} peerDependencies: react: ^16.8.4 || ^17.0.0 react-is@16.13.1: - resolution: - { integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== } + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} react-is@17.0.2: - resolution: - { integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== } + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} react-is@18.2.0: - resolution: - { integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== } + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} react-markdown@9.0.1: - resolution: - { integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg== } + resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} peerDependencies: '@types/react': '>=18' react: '>=18' react-merge-refs@1.1.0: - resolution: - { integrity: sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ== } + resolution: {integrity: sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==} react-refresh@0.11.0: - resolution: - { integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} + engines: {node: '>=0.10.0'} react-refresh@0.14.0: - resolution: - { integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} react-router-dom@6.4.5: - resolution: - { integrity: sha512-a7HsgikBR0wNfroBHcZUCd9+mLRqZS8R5U1Z1mzLWxFXEkUT3vR1XXmSIVoVpxVX8Bar0nQYYYc9Yipq8dWwAA== } - engines: { node: '>=14' } + resolution: {integrity: sha512-a7HsgikBR0wNfroBHcZUCd9+mLRqZS8R5U1Z1mzLWxFXEkUT3vR1XXmSIVoVpxVX8Bar0nQYYYc9Yipq8dWwAA==} + engines: {node: '>=14'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' react-router@6.4.5: - resolution: - { integrity: sha512-1RQJ8bM70YEumHIlNUYc6mFfUDoWa5EgPDenK/fq0bxD8DYpQUi/S6Zoft+9DBrh2xmtg92N5HMAJgGWDhKJ5Q== } - engines: { node: '>=14' } + resolution: {integrity: sha512-1RQJ8bM70YEumHIlNUYc6mFfUDoWa5EgPDenK/fq0bxD8DYpQUi/S6Zoft+9DBrh2xmtg92N5HMAJgGWDhKJ5Q==} + engines: {node: '>=14'} peerDependencies: react: '>=16.8' react-syntax-highlighter@15.5.0: - resolution: - { integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg== } + resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==} peerDependencies: react: '>= 0.14.0' react@18.2.0: - resolution: - { integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} read-cache@1.0.0: - resolution: - { integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== } + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} read-config-file@6.3.2: - resolution: - { integrity: sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q== } - engines: { node: '>=12.0.0' } + resolution: {integrity: sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==} + engines: {node: '>=12.0.0'} read-pkg-up@1.0.1: - resolution: - { integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==} + engines: {node: '>=0.10.0'} read-pkg-up@7.0.1: - resolution: - { integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} read-pkg@1.1.0: - resolution: - { integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==} + engines: {node: '>=0.10.0'} read-pkg@3.0.0: - resolution: - { integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} read-pkg@5.2.0: - resolution: - { integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} readable-stream@2.3.8: - resolution: - { integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== } + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} readable-stream@3.6.2: - resolution: - { integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} readable-web-to-node-stream@3.0.2: - resolution: - { integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} + engines: {node: '>=8'} readdirp@2.2.1: - resolution: - { integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} + engines: {node: '>=0.10'} readdirp@3.6.0: - resolution: - { integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== } - engines: { node: '>=8.10.0' } + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} real-require@0.1.0: - resolution: - { integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} + engines: {node: '>= 12.13.0'} realistic-structured-clone@3.0.0: - resolution: - { integrity: sha512-rOjh4nuWkAqf9PWu6JVpOWD4ndI+JHfgiZeMmujYcPi+fvILUu7g6l26TC1K5aBIp34nV+jE1cDO75EKOfHC5Q== } + resolution: {integrity: sha512-rOjh4nuWkAqf9PWu6JVpOWD4ndI+JHfgiZeMmujYcPi+fvILUu7g6l26TC1K5aBIp34nV+jE1cDO75EKOfHC5Q==} rechoir@0.8.0: - resolution: - { integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} redent@1.0.0: - resolution: - { integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==} + engines: {node: '>=0.10.0'} redent@3.0.0: - resolution: - { integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} redis-errors@1.2.0: - resolution: - { integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== } - engines: { node: '>=4' } + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} + engines: {node: '>=4'} redis-parser@3.0.0: - resolution: - { integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== } - engines: { node: '>=4' } + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} + engines: {node: '>=4'} refractor@3.6.0: - resolution: - { integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA== } + resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} regenerate-unicode-properties@10.1.1: - resolution: - { integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== } - engines: { node: '>=4' } + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} regenerate@1.4.2: - resolution: - { integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== } + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} regenerator-runtime@0.13.9: - resolution: - { integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== } + resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} regenerator-runtime@0.14.0: - resolution: - { integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== } + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} regenerator-runtime@0.14.1: - resolution: - { integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== } + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} regenerator-transform@0.15.2: - resolution: - { integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== } + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} regex-not@1.0.2: - resolution: - { integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} regexp.prototype.flags@1.5.1: - resolution: - { integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} regexpp@3.2.0: - resolution: - { integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} regexpu-core@5.3.2: - resolution: - { integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} registry-auth-token@4.2.2: - resolution: - { integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} + engines: {node: '>=6.0.0'} registry-url@5.1.0: - resolution: - { integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} + engines: {node: '>=8'} regjsparser@0.9.1: - resolution: - { integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== } + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true rehype-raw@7.0.0: - resolution: - { integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== } + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} relateurl@0.2.7: - resolution: - { integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} remark-external-links@8.0.0: - resolution: - { integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA== } + resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} remark-footnotes@2.0.0: - resolution: - { integrity: sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== } + resolution: {integrity: sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==} remark-gfm@4.0.0: - resolution: - { integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== } + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} remark-mdx@1.6.22: - resolution: - { integrity: sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== } + resolution: {integrity: sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==} remark-parse@11.0.0: - resolution: - { integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== } + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} remark-parse@8.0.3: - resolution: - { integrity: sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== } + resolution: {integrity: sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==} remark-rehype@11.1.0: - resolution: - { integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g== } + resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} remark-slug@6.1.0: - resolution: - { integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ== } + resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} remark-squeeze-paragraphs@4.0.0: - resolution: - { integrity: sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== } + resolution: {integrity: sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==} remark-stringify@11.0.0: - resolution: - { integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== } + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} remove-trailing-separator@1.1.0: - resolution: - { integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== } + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} renderkid@2.0.7: - resolution: - { integrity: sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== } + resolution: {integrity: sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==} renderkid@3.0.0: - resolution: - { integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== } + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} repeat-element@1.1.4: - resolution: - { integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} repeat-string@1.6.1: - resolution: - { integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} repeating@2.0.1: - resolution: - { integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==} + engines: {node: '>=0.10.0'} request@2.88.2: - resolution: - { integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 require-directory@2.1.1: - resolution: - { integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} require-from-string@2.0.2: - resolution: - { integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} require-main-filename@2.0.0: - resolution: - { integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== } + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} requireindex@1.1.0: - resolution: - { integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg== } - engines: { node: '>=0.10.5' } + resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} + engines: {node: '>=0.10.5'} requireindex@1.2.0: - resolution: - { integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== } - engines: { node: '>=0.10.5' } + resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} + engines: {node: '>=0.10.5'} requires-port@1.0.0: - resolution: - { integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== } + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} resolve-alpn@1.2.1: - resolution: - { integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== } + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} resolve-cwd@3.0.0: - resolution: - { integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} resolve-from@4.0.0: - resolution: - { integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== } - engines: { node: '>=4' } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} resolve-from@5.0.0: - resolution: - { integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} resolve-global@1.0.0: - resolution: - { integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} + engines: {node: '>=8'} resolve-url@0.2.1: - resolution: - { integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== } + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated resolve.exports@2.0.2: - resolution: - { integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} resolve@1.22.8: - resolution: - { integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== } + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true resolve@2.0.0-next.5: - resolution: - { integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== } + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true response-iterator@0.2.6: - resolution: - { integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw== } - engines: { node: '>=0.8' } + resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} + engines: {node: '>=0.8'} responselike@1.0.2: - resolution: - { integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== } + resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} responselike@2.0.1: - resolution: - { integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== } + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} restore-cursor@3.1.0: - resolution: - { integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} ret@0.1.15: - resolution: - { integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== } - engines: { node: '>=0.12' } + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} retry@0.12.0: - resolution: - { integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== } - engines: { node: '>= 4' } + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} retry@0.13.1: - resolution: - { integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== } - engines: { node: '>= 4' } + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} reusify@1.0.4: - resolution: - { integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== } - engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfdc@1.3.0: - resolution: - { integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== } + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} rimraf@2.7.1: - resolution: - { integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== } + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true rimraf@3.0.2: - resolution: - { integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== } + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true ripemd160@2.0.2: - resolution: - { integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== } + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} roarr@2.15.4: - resolution: - { integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== } - engines: { node: '>=8.0' } + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} rsvp@4.8.5: - resolution: - { integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== } - engines: { node: 6.* || >= 7.* } + resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} + engines: {node: 6.* || >= 7.*} run-parallel@1.2.0: - resolution: - { integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} run-queue@1.0.3: - resolution: - { integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== } + resolution: {integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==} rxjs@7.8.1: - resolution: - { integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== } + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} safe-array-concat@1.0.1: - resolution: - { integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== } - engines: { node: '>=0.4' } + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} safe-buffer@5.1.1: - resolution: - { integrity: sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== } + resolution: {integrity: sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==} safe-buffer@5.1.2: - resolution: - { integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== } + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: - resolution: - { integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== } + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} safe-regex-test@1.0.0: - resolution: - { integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== } + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} safe-regex@1.1.0: - resolution: - { integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== } + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} safe-stable-stringify@2.4.3: - resolution: - { integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== } - engines: { node: '>=10' } + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} safer-buffer@2.1.2: - resolution: - { integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== } + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} sane@4.1.0: - resolution: - { integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== } - engines: { node: 6.* || 8.* || >= 10.* } + resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==} + engines: {node: 6.* || 8.* || >= 10.*} deprecated: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added hasBin: true sanitize-filename@1.6.3: - resolution: - { integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== } + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} sax@1.3.0: - resolution: - { integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== } + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} saxes@6.0.0: - resolution: - { integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== } - engines: { node: '>=v12.22.7' } + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} scale-ts@1.6.0: - resolution: - { integrity: sha512-Ja5VCjNZR8TGKhUumy9clVVxcDpM+YFjAnkMuwQy68Hixio3VRRvWdE3g8T/yC+HXA0ZDQl2TGyUmtmbcVl40Q== } + resolution: {integrity: sha512-Ja5VCjNZR8TGKhUumy9clVVxcDpM+YFjAnkMuwQy68Hixio3VRRvWdE3g8T/yC+HXA0ZDQl2TGyUmtmbcVl40Q==} scheduler@0.23.0: - resolution: - { integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== } + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} schema-utils@1.0.0: - resolution: - { integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== } - engines: { node: '>= 4' } + resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} + engines: {node: '>= 4'} schema-utils@2.7.0: - resolution: - { integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== } - engines: { node: '>= 8.9.0' } + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + engines: {node: '>= 8.9.0'} schema-utils@2.7.1: - resolution: - { integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== } - engines: { node: '>= 8.9.0' } + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} schema-utils@3.3.0: - resolution: - { integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} schema-utils@4.2.0: - resolution: - { integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} select-hose@2.0.0: - resolution: - { integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== } + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} selfsigned@2.4.1: - resolution: - { integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== } - engines: { node: '>=10' } + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} semver-compare@1.0.0: - resolution: - { integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== } + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} semver-diff@3.1.1: - resolution: - { integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} + engines: {node: '>=8'} semver-regex@4.0.5: - resolution: - { integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw== } - engines: { node: '>=12' } + resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} + engines: {node: '>=12'} semver-truncate@3.0.0: - resolution: - { integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg== } - engines: { node: '>=12' } + resolution: {integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==} + engines: {node: '>=12'} semver@5.7.2: - resolution: - { integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== } + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true semver@6.3.1: - resolution: - { integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== } + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true semver@7.5.4: - resolution: - { integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} hasBin: true send@0.18.0: - resolution: - { integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} serialize-error@7.0.1: - resolution: - { integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} serialize-javascript@4.0.0: - resolution: - { integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== } + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} serialize-javascript@5.0.1: - resolution: - { integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== } + resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} serialize-javascript@6.0.1: - resolution: - { integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== } + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} serve-favicon@2.5.0: - resolution: - { integrity: sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==} + engines: {node: '>= 0.8.0'} serve-index@1.9.1: - resolution: - { integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} serve-static@1.15.0: - resolution: - { integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} set-blocking@2.0.0: - resolution: - { integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== } + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} set-function-length@1.1.1: - resolution: - { integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} set-function-name@2.0.1: - resolution: - { integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} set-value@2.0.1: - resolution: - { integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} setimmediate@1.0.5: - resolution: - { integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== } + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} setprototypeof@1.1.0: - resolution: - { integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== } + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} setprototypeof@1.2.0: - resolution: - { integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== } + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} sha.js@2.4.11: - resolution: - { integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== } + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true shallow-clone@3.0.1: - resolution: - { integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} shallowequal@1.1.0: - resolution: - { integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== } + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} shebang-command@1.2.0: - resolution: - { integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} shebang-command@2.0.0: - resolution: - { integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} shebang-regex@1.0.0: - resolution: - { integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} shebang-regex@3.0.0: - resolution: - { integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== } - engines: { node: '>=8' } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} shell-quote@1.8.1: - resolution: - { integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== } + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} side-channel@1.0.4: - resolution: - { integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== } + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} signal-exit@3.0.7: - resolution: - { integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== } + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} signal-exit@4.1.0: - resolution: - { integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== } - engines: { node: '>=14' } + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} simple-progress-webpack-plugin@2.0.0: - resolution: - { integrity: sha512-Ji8b05YHc9R8iHHbEX8kOqvR2CB8bUqqqP481DbY+j5ImqBhLXk9sXFZZdcSEK3Ld0hZl9i+5CzXWLXzw1NV9g== } + resolution: {integrity: sha512-Ji8b05YHc9R8iHHbEX8kOqvR2CB8bUqqqP481DbY+j5ImqBhLXk9sXFZZdcSEK3Ld0hZl9i+5CzXWLXzw1NV9g==} peerDependencies: webpack: '>=2.0.0' simple-update-notifier@2.0.0: - resolution: - { integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== } - engines: { node: '>=10' } + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} sisteransi@1.0.5: - resolution: - { integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== } + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} slash@2.0.0: - resolution: - { integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== } - engines: { node: '>=6' } + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} slash@3.0.0: - resolution: - { integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== } - engines: { node: '>=8' } + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} slash@4.0.0: - resolution: - { integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== } - engines: { node: '>=12' } + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} slice-ansi@3.0.0: - resolution: - { integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} slice-ansi@4.0.0: - resolution: - { integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} slice-ansi@5.0.0: - resolution: - { integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} smart-buffer@4.2.0: - resolution: - { integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== } - engines: { node: '>= 6.0.0', npm: '>= 3.0.0' } + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} smoldot@2.0.13: - resolution: - { integrity: sha512-B+hqMuMbvsEBC7zBdlD7jCmui3eMIWVOK3gDAyHT+qQdO3mm5kUNgl5z3hjGJ97w47ZnILkaPFI/gu4p9Yttzw== } + resolution: {integrity: sha512-B+hqMuMbvsEBC7zBdlD7jCmui3eMIWVOK3gDAyHT+qQdO3mm5kUNgl5z3hjGJ97w47ZnILkaPFI/gu4p9Yttzw==} smoldot@2.0.22: - resolution: - { integrity: sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g== } + resolution: {integrity: sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g==} snapdragon-node@2.1.1: - resolution: - { integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} snapdragon-util@3.0.1: - resolution: - { integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} snapdragon@0.8.2: - resolution: - { integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} sockjs@0.3.24: - resolution: - { integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== } + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} sonic-boom@2.8.0: - resolution: - { integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== } + resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} sort-keys-length@1.0.1: - resolution: - { integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} + engines: {node: '>=0.10.0'} sort-keys@1.1.2: - resolution: - { integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} source-list-map@2.0.1: - resolution: - { integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== } + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} source-map-js@1.0.2: - resolution: - { integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} source-map-resolve@0.5.3: - resolution: - { integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== } + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated source-map-support@0.5.13: - resolution: - { integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== } + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} source-map-support@0.5.21: - resolution: - { integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== } + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} source-map-url@0.4.1: - resolution: - { integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== } + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} deprecated: See https://github.com/lydell/source-map-url#deprecated source-map@0.5.7: - resolution: - { integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} source-map@0.6.1: - resolution: - { integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} source-map@0.7.4: - resolution: - { integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} space-separated-tokens@1.1.5: - resolution: - { integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== } + resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} space-separated-tokens@2.0.2: - resolution: - { integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== } + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} spawn-command@0.0.2-1: - resolution: - { integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== } + resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} spdx-correct@3.2.0: - resolution: - { integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== } + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} spdx-exceptions@2.3.0: - resolution: - { integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== } + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} spdx-expression-parse@3.0.1: - resolution: - { integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== } + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} spdx-license-ids@3.0.16: - resolution: - { integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== } + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} spdy-transport@3.0.0: - resolution: - { integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== } + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} spdy@4.0.2: - resolution: - { integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} split-on-first@1.1.0: - resolution: - { integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== } - engines: { node: '>=6' } + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} split-string@3.1.0: - resolution: - { integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} split2@3.2.2: - resolution: - { integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== } + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} split2@4.2.0: - resolution: - { integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== } - engines: { node: '>= 10.x' } + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} sprintf-js@1.0.3: - resolution: - { integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== } + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} sprintf-js@1.1.3: - resolution: - { integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== } + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} sshpk@1.18.0: - resolution: - { integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} hasBin: true ssri@6.0.2: - resolution: - { integrity: sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== } + resolution: {integrity: sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==} ssri@8.0.1: - resolution: - { integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} stable@0.1.8: - resolution: - { integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== } + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' stack-utils@2.0.6: - resolution: - { integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} stackframe@1.3.4: - resolution: - { integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== } + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} standard-as-callback@2.1.0: - resolution: - { integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== } + resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} stat-mode@1.0.0: - resolution: - { integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} + engines: {node: '>= 6'} state-toggle@1.0.3: - resolution: - { integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== } + resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} static-extend@0.1.2: - resolution: - { integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} statuses@1.5.0: - resolution: - { integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} statuses@2.0.1: - resolution: - { integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} std-env@3.6.0: - resolution: - { integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg== } + resolution: {integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==} stop-iteration-iterator@1.0.0: - resolution: - { integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} store2@2.14.2: - resolution: - { integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w== } + resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} store@2.0.12: - resolution: - { integrity: sha512-eO9xlzDpXLiMr9W1nQ3Nfp9EzZieIQc10zPPMP5jsVV7bLOziSFFBP0XoDXACEIFtdI+rIz0NwWVA/QVJ8zJtw== } + resolution: {integrity: sha512-eO9xlzDpXLiMr9W1nQ3Nfp9EzZieIQc10zPPMP5jsVV7bLOziSFFBP0XoDXACEIFtdI+rIz0NwWVA/QVJ8zJtw==} stream-browserify@2.0.2: - resolution: - { integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== } + resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} stream-browserify@3.0.0: - resolution: - { integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== } + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} stream-each@1.2.3: - resolution: - { integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== } + resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==} stream-http@2.8.3: - resolution: - { integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== } + resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==} stream-shift@1.0.1: - resolution: - { integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== } + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} strict-uri-encode@2.0.0: - resolution: - { integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} string-argv@0.3.2: - resolution: - { integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== } - engines: { node: '>=0.6.19' } + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} string-length@4.0.2: - resolution: - { integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} string-width@4.2.3: - resolution: - { integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== } - engines: { node: '>=8' } + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} string-width@5.1.2: - resolution: - { integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== } - engines: { node: '>=12' } + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} string.prototype.matchall@4.0.10: - resolution: - { integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== } + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} string.prototype.padend@3.1.5: - resolution: - { integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} + engines: {node: '>= 0.4'} string.prototype.padstart@3.1.5: - resolution: - { integrity: sha512-R57IsE3JIfModQWrVXYZ8ZHWMBNDpIoniDwhYCR1nx+iHwDkjjk26a8xM9BYgf7SAXJO7sdNPng5J+0ccr5LFQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-R57IsE3JIfModQWrVXYZ8ZHWMBNDpIoniDwhYCR1nx+iHwDkjjk26a8xM9BYgf7SAXJO7sdNPng5J+0ccr5LFQ==} + engines: {node: '>= 0.4'} string.prototype.trim@1.2.8: - resolution: - { integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} string.prototype.trimend@1.0.7: - resolution: - { integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== } + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} string.prototype.trimstart@1.0.7: - resolution: - { integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== } + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} string_decoder@1.1.1: - resolution: - { integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== } + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} string_decoder@1.3.0: - resolution: - { integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== } + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} stringify-entities@4.0.4: - resolution: - { integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== } + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} strip-ansi@3.0.1: - resolution: - { integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} strip-ansi@6.0.1: - resolution: - { integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== } - engines: { node: '>=8' } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} strip-ansi@7.1.0: - resolution: - { integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} strip-bom@2.0.0: - resolution: - { integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} + engines: {node: '>=0.10.0'} strip-bom@3.0.0: - resolution: - { integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} strip-bom@4.0.0: - resolution: - { integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== } - engines: { node: '>=8' } + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} strip-eof@1.0.0: - resolution: - { integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} strip-final-newline@2.0.0: - resolution: - { integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} strip-final-newline@3.0.0: - resolution: - { integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== } - engines: { node: '>=12' } + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} strip-indent@1.0.1: - resolution: - { integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==} + engines: {node: '>=0.10.0'} hasBin: true strip-indent@3.0.0: - resolution: - { integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} strip-json-comments@2.0.1: - resolution: - { integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} strip-json-comments@3.1.1: - resolution: - { integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== } - engines: { node: '>=8' } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} strip-outer@2.0.0: - resolution: - { integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} strtok3@7.0.0: - resolution: - { integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ== } - engines: { node: '>=14.16' } + resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} + engines: {node: '>=14.16'} style-loader@1.3.0: - resolution: - { integrity: sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== } - engines: { node: '>= 8.9.0' } + resolution: {integrity: sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==} + engines: {node: '>= 8.9.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 style-loader@2.0.0: - resolution: - { integrity: sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==} + engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 style-loader@3.3.1: - resolution: - { integrity: sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==} + engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 style-to-object@0.3.0: - resolution: - { integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== } + resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} style-to-object@1.0.6: - resolution: - { integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA== } + resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==} styled-components@5.3.6: - resolution: - { integrity: sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==} + engines: {node: '>=10'} peerDependencies: react: '>= 16.8.0' react-dom: '>= 16.8.0' react-is: '>= 16.8.0' styled-components@6.1.1: - resolution: - { integrity: sha512-cpZZP5RrKRIClBW5Eby4JM1wElLVP4NQrJbJ0h10TidTyJf4SIIwa3zLXOoPb4gJi8MsJ8mjq5mu2IrEhZIAcQ== } - engines: { node: '>= 16' } + resolution: {integrity: sha512-cpZZP5RrKRIClBW5Eby4JM1wElLVP4NQrJbJ0h10TidTyJf4SIIwa3zLXOoPb4gJi8MsJ8mjq5mu2IrEhZIAcQ==} + engines: {node: '>= 16'} peerDependencies: react: '>= 16.8.0' react-dom: '>= 16.8.0' stylehacks@5.1.1: - resolution: - { integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 stylis@4.3.0: - resolution: - { integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ== } + resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==} sucrase@3.34.0: - resolution: - { integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} hasBin: true sumchecker@3.0.1: - resolution: - { integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== } - engines: { node: '>= 8.0' } + resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} + engines: {node: '>= 8.0'} supports-color@5.5.0: - resolution: - { integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== } - engines: { node: '>=4' } + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} supports-color@7.2.0: - resolution: - { integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} supports-color@8.1.1: - resolution: - { integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== } - engines: { node: '>=10' } + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} supports-preserve-symlinks-flag@1.0.0: - resolution: - { integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} suppress-exit-code@1.0.0: - resolution: - { integrity: sha512-Dc6hENE7PH9ce8fQYoNm5JLbSwpQeyLcOqu48Nd5ItIf0xdQgr2ag2fNXzU53BudOZsnYbVz/H2awt0C2prGgQ== } + resolution: {integrity: sha512-Dc6hENE7PH9ce8fQYoNm5JLbSwpQeyLcOqu48Nd5ItIf0xdQgr2ag2fNXzU53BudOZsnYbVz/H2awt0C2prGgQ==} hasBin: true svg-parser@2.0.4: - resolution: - { integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== } + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} svgo@2.8.0: - resolution: - { integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} hasBin: true swc-loader@0.2.3: - resolution: - { integrity: sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A== } + resolution: {integrity: sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==} peerDependencies: '@swc/core': ^1.2.147 webpack: '>=2' symbol-observable@4.0.0: - resolution: - { integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} symbol-tree@3.2.4: - resolution: - { integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== } + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} symbol.prototype.description@1.0.5: - resolution: - { integrity: sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ== } - engines: { node: '>= 0.11.15' } + resolution: {integrity: sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==} + engines: {node: '>= 0.11.15'} synchronous-promise@2.0.17: - resolution: - { integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g== } + resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} tailwind-merge@1.12.0: - resolution: - { integrity: sha512-Y17eDp7FtN1+JJ4OY0Bqv9OA41O+MS8c1Iyr3T6JFLnOgLg3EvcyMKZAnQ8AGyvB5Nxm3t9Xb5Mhe139m8QT/g== } + resolution: {integrity: sha512-Y17eDp7FtN1+JJ4OY0Bqv9OA41O+MS8c1Iyr3T6JFLnOgLg3EvcyMKZAnQ8AGyvB5Nxm3t9Xb5Mhe139m8QT/g==} tailwindcss@3.4.4: - resolution: - { integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A== } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} + engines: {node: '>=14.0.0'} hasBin: true tapable@1.1.3: - resolution: - { integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} tapable@2.2.1: - resolution: - { integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} tar@6.2.0: - resolution: - { integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + engines: {node: '>=10'} telejson@6.0.8: - resolution: - { integrity: sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg== } + resolution: {integrity: sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==} temp-file@3.4.0: - resolution: - { integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg== } + resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} terser-webpack-plugin@1.4.5: - resolution: - { integrity: sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== } - engines: { node: '>= 6.9.0' } + resolution: {integrity: sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==} + engines: {node: '>= 6.9.0'} peerDependencies: webpack: ^4.0.0 terser-webpack-plugin@4.2.3: - resolution: - { integrity: sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==} + engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 terser-webpack-plugin@5.3.9: - resolution: - { integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' esbuild: '*' @@ -12241,227 +9957,179 @@ packages: optional: true terser@4.8.1: - resolution: - { integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==} + engines: {node: '>=6.0.0'} hasBin: true terser@5.26.0: - resolution: - { integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} + engines: {node: '>=10'} hasBin: true test-exclude@6.0.0: - resolution: - { integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== } - engines: { node: '>=8' } + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} text-extensions@1.9.0: - resolution: - { integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} + engines: {node: '>=0.10'} text-table@0.2.0: - resolution: - { integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== } + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} thenify-all@1.6.0: - resolution: - { integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== } - engines: { node: '>=0.8' } + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} thenify@3.3.1: - resolution: - { integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== } + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} thread-stream@0.15.2: - resolution: - { integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== } + resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} through2@2.0.5: - resolution: - { integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== } + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} through2@4.0.2: - resolution: - { integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== } + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} through@2.3.8: - resolution: - { integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== } + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} thunky@1.1.0: - resolution: - { integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== } + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} timers-browserify@2.0.12: - resolution: - { integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== } - engines: { node: '>=0.6.0' } + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} timers-ext@0.1.7: - resolution: - { integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== } + resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} tmp-promise@3.0.3: - resolution: - { integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== } + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} tmp@0.2.1: - resolution: - { integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== } - engines: { node: '>=8.17.0' } + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} tmpl@1.0.5: - resolution: - { integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== } + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} to-arraybuffer@1.0.1: - resolution: - { integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== } + resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} to-fast-properties@2.0.0: - resolution: - { integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== } - engines: { node: '>=4' } + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} to-object-path@0.3.0: - resolution: - { integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} to-readable-stream@1.0.0: - resolution: - { integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== } - engines: { node: '>=6' } + resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} + engines: {node: '>=6'} to-regex-range@2.1.1: - resolution: - { integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} to-regex-range@5.0.1: - resolution: - { integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== } - engines: { node: '>=8.0' } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} to-regex@3.0.2: - resolution: - { integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} toggle-selection@1.0.6: - resolution: - { integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== } + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} toidentifier@1.0.1: - resolution: - { integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== } - engines: { node: '>=0.6' } + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} token-types@5.0.1: - resolution: - { integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== } - engines: { node: '>=14.16' } + resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} + engines: {node: '>=14.16'} touch@3.1.0: - resolution: - { integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== } + resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} hasBin: true tough-cookie@2.5.0: - resolution: - { integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== } - engines: { node: '>=0.8' } + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} tough-cookie@4.1.3: - resolution: - { integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== } - engines: { node: '>=6' } + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} tr46@0.0.3: - resolution: - { integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== } + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} tr46@2.1.0: - resolution: - { integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} tr46@3.0.0: - resolution: - { integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== } - engines: { node: '>=12' } + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} tree-kill@1.2.2: - resolution: - { integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== } + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true trim-lines@3.0.1: - resolution: - { integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== } + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} trim-newlines@1.0.0: - resolution: - { integrity: sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==} + engines: {node: '>=0.10.0'} trim-newlines@3.0.1: - resolution: - { integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} trim-repeated@2.0.0: - resolution: - { integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg== } - engines: { node: '>=12' } + resolution: {integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==} + engines: {node: '>=12'} trim-trailing-lines@1.1.4: - resolution: - { integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== } + resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==} trim@0.0.1: - resolution: - { integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== } + resolution: {integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==} deprecated: Use String.prototype.trim() instead trough@1.0.5: - resolution: - { integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== } + resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} trough@2.2.0: - resolution: - { integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== } + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} truncate-utf8-bytes@1.0.2: - resolution: - { integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== } + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} ts-custom-error@3.3.1: - resolution: - { integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A== } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==} + engines: {node: '>=14.0.0'} ts-dedent@2.2.0: - resolution: - { integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== } - engines: { node: '>=6.10' } + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} ts-interface-checker@0.1.13: - resolution: - { integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== } + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} ts-invariant@0.10.3: - resolution: - { integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} + engines: {node: '>=8'} ts-jest@29.1.2: - resolution: - { integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g== } - engines: { node: ^16.10.0 || ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} + engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' @@ -12481,8 +10149,7 @@ packages: optional: true ts-node@10.9.1: - resolution: - { integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== } + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -12496,9 +10163,8 @@ packages: optional: true ts-pnp@1.2.0: - resolution: - { integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== } - engines: { node: '>=6' } + resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} + engines: {node: '>=6'} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -12506,337 +10172,266 @@ packages: optional: true tsconfig-paths-webpack-plugin@4.0.0: - resolution: - { integrity: sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ==} + engines: {node: '>=10.13.0'} tsconfig-paths@3.14.2: - resolution: - { integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== } + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} tsconfig-paths@4.2.0: - resolution: - { integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} tslib@1.14.1: - resolution: - { integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== } + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} tslib@2.6.2: - resolution: - { integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== } + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} tsutils@3.21.0: - resolution: - { integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' tty-browserify@0.0.0: - resolution: - { integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== } + resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} tunnel-agent@0.6.0: - resolution: - { integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== } + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} tweetnacl@0.14.5: - resolution: - { integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== } + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} type-check@0.4.0: - resolution: - { integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} type-detect@4.0.8: - resolution: - { integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== } - engines: { node: '>=4' } + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} type-fest@0.13.1: - resolution: - { integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} type-fest@0.18.1: - resolution: - { integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} type-fest@0.20.2: - resolution: - { integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} type-fest@0.21.3: - resolution: - { integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== } - engines: { node: '>=10' } + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} type-fest@0.6.0: - resolution: - { integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} type-fest@0.8.1: - resolution: - { integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} type-fest@2.19.0: - resolution: - { integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== } - engines: { node: '>=12.20' } + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} type-is@1.6.18: - resolution: - { integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} type@1.2.0: - resolution: - { integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== } + resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} type@2.7.2: - resolution: - { integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== } + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} typed-array-buffer@1.0.0: - resolution: - { integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} typed-array-byte-length@1.0.0: - resolution: - { integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} typed-array-byte-offset@1.0.0: - resolution: - { integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} typed-array-length@1.0.4: - resolution: - { integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== } + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} typed-emitter@2.1.0: - resolution: - { integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA== } + resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} typedarray-to-buffer@3.1.5: - resolution: - { integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== } + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} typedarray@0.0.6: - resolution: - { integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== } + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} typescript@4.9.3: - resolution: - { integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== } - engines: { node: '>=4.2.0' } + resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==} + engines: {node: '>=4.2.0'} hasBin: true typescript@5.3.3: - resolution: - { integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== } - engines: { node: '>=14.17' } + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} hasBin: true typeson-registry@1.0.0-alpha.39: - resolution: - { integrity: sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw== } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw==} + engines: {node: '>=10.0.0'} typeson@6.1.0: - resolution: - { integrity: sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA== } - engines: { node: '>=0.1.14' } + resolution: {integrity: sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA==} + engines: {node: '>=0.1.14'} + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} ufo@1.3.2: - resolution: - { integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== } + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} uglify-js@3.17.4: - resolution: - { integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} hasBin: true uint8arrays@3.1.1: - resolution: - { integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== } + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} unbox-primitive@1.0.2: - resolution: - { integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== } + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} uncrypto@0.1.3: - resolution: - { integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== } + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} undefsafe@2.0.5: - resolution: - { integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== } + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} undici-types@5.26.5: - resolution: - { integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== } + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} unenv@1.8.0: - resolution: - { integrity: sha512-uIGbdCWZfhRRmyKj1UioCepQ0jpq638j/Cf0xFTn4zD1nGJ2lSdzYHLzfdXN791oo/0juUiSWW1fBklXMTsuqg== } + resolution: {integrity: sha512-uIGbdCWZfhRRmyKj1UioCepQ0jpq638j/Cf0xFTn4zD1nGJ2lSdzYHLzfdXN791oo/0juUiSWW1fBklXMTsuqg==} unfetch@4.2.0: - resolution: - { integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== } + resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} unherit@1.1.3: - resolution: - { integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== } + resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} unicode-canonical-property-names-ecmascript@2.0.0: - resolution: - { integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} unicode-match-property-ecmascript@2.0.0: - resolution: - { integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== } - engines: { node: '>=4' } + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} unicode-match-property-value-ecmascript@2.1.0: - resolution: - { integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} unicode-property-aliases-ecmascript@2.1.0: - resolution: - { integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== } - engines: { node: '>=4' } + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} unified@11.0.5: - resolution: - { integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== } + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} unified@9.2.0: - resolution: - { integrity: sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== } + resolution: {integrity: sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==} union-value@1.0.1: - resolution: - { integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} unique-filename@1.1.1: - resolution: - { integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== } + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} unique-slug@2.0.2: - resolution: - { integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== } + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} unique-string@2.0.0: - resolution: - { integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} unist-builder@2.0.3: - resolution: - { integrity: sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== } + resolution: {integrity: sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==} unist-util-generated@1.1.6: - resolution: - { integrity: sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== } + resolution: {integrity: sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==} unist-util-is@4.1.0: - resolution: - { integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== } + resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} unist-util-is@6.0.0: - resolution: - { integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== } + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} unist-util-position@3.1.0: - resolution: - { integrity: sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== } + resolution: {integrity: sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==} unist-util-position@5.0.0: - resolution: - { integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== } + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} unist-util-remove-position@2.0.1: - resolution: - { integrity: sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== } + resolution: {integrity: sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==} unist-util-remove-position@5.0.0: - resolution: - { integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q== } + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} unist-util-remove@2.1.0: - resolution: - { integrity: sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q== } + resolution: {integrity: sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==} unist-util-stringify-position@2.0.3: - resolution: - { integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== } + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} unist-util-stringify-position@4.0.0: - resolution: - { integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== } + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} unist-util-visit-parents@3.1.1: - resolution: - { integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== } + resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} unist-util-visit-parents@6.0.1: - resolution: - { integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== } + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} unist-util-visit@2.0.3: - resolution: - { integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== } + resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} unist-util-visit@5.0.0: - resolution: - { integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== } + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} units-css@0.4.0: - resolution: - { integrity: sha512-WijzYC+chwzg2D6HmNGUSzPAgFRJfuxVyG9oiY28Ei5E+g6fHoPkhXUr5GV+5hE/RTHZNd9SuX2KLioYHdttoA== } + resolution: {integrity: sha512-WijzYC+chwzg2D6HmNGUSzPAgFRJfuxVyG9oiY28Ei5E+g6fHoPkhXUr5GV+5hE/RTHZNd9SuX2KLioYHdttoA==} universalify@0.1.2: - resolution: - { integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== } - engines: { node: '>= 4.0.0' } + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} universalify@0.2.0: - resolution: - { integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== } - engines: { node: '>= 4.0.0' } + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} universalify@2.0.1: - resolution: - { integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} unpipe@1.0.0: - resolution: - { integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} unset-value@1.0.0: - resolution: - { integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} unstorage@1.10.1: - resolution: - { integrity: sha512-rWQvLRfZNBpF+x8D3/gda5nUCQL2PgXy2jNG4U7/Rc9BGEv9+CAJd0YyGCROUBKs9v49Hg8huw3aih5Bf5TAVw== } + resolution: {integrity: sha512-rWQvLRfZNBpF+x8D3/gda5nUCQL2PgXy2jNG4U7/Rc9BGEv9+CAJd0YyGCROUBKs9v49Hg8huw3aih5Bf5TAVw==} peerDependencies: '@azure/app-configuration': ^1.4.1 '@azure/cosmos': ^4.0.0 @@ -12877,53 +10472,43 @@ packages: optional: true untildify@2.1.0: - resolution: - { integrity: sha512-sJjbDp2GodvkB0FZZcn7k6afVisqX5BZD7Yq3xp4nN2O15BBK0cLm3Vwn2vQaF7UDS0UUsrQMkkplmDI5fskig== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-sJjbDp2GodvkB0FZZcn7k6afVisqX5BZD7Yq3xp4nN2O15BBK0cLm3Vwn2vQaF7UDS0UUsrQMkkplmDI5fskig==} + engines: {node: '>=0.10.0'} untun@0.1.2: - resolution: - { integrity: sha512-wLAMWvxfqyTiBODA1lg3IXHQtjggYLeTK7RnSfqtOXixWJ3bAa2kK/HHmOOg19upteqO3muLvN6O/icbyQY33Q== } + resolution: {integrity: sha512-wLAMWvxfqyTiBODA1lg3IXHQtjggYLeTK7RnSfqtOXixWJ3bAa2kK/HHmOOg19upteqO3muLvN6O/icbyQY33Q==} hasBin: true unzip-crx-3@0.2.0: - resolution: - { integrity: sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ== } + resolution: {integrity: sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ==} upath@1.2.0: - resolution: - { integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} update-browserslist-db@1.0.13: - resolution: - { integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== } + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' update-notifier@5.1.0: - resolution: - { integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} + engines: {node: '>=10'} uqr@0.1.2: - resolution: - { integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA== } + resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} uri-js@4.4.1: - resolution: - { integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} urix@0.1.0: - resolution: - { integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== } + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} deprecated: Please see https://github.com/lydell/urix#deprecated url-loader@4.1.1: - resolution: - { integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} + engines: {node: '>= 10.13.0'} peerDependencies: file-loader: '*' webpack: ^4.0.0 || ^5.0.0 @@ -12932,95 +10517,75 @@ packages: optional: true url-parse-lax@3.0.0: - resolution: - { integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} + engines: {node: '>=4'} url-parse@1.5.10: - resolution: - { integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== } + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} url@0.11.3: - resolution: - { integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw== } + resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} use-sync-external-store@1.2.0: - resolution: - { integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== } + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 use@3.1.1: - resolution: - { integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} utf8-byte-length@1.0.4: - resolution: - { integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== } + resolution: {integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==} util-deprecate@1.0.2: - resolution: - { integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== } + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} util.promisify@1.0.0: - resolution: - { integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== } + resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==} util@0.10.4: - resolution: - { integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== } + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} util@0.11.1: - resolution: - { integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== } + resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==} utila@0.4.0: - resolution: - { integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== } + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} utils-merge@1.0.1: - resolution: - { integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== } - engines: { node: '>= 0.4.0' } + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} uuid-browser@3.1.0: - resolution: - { integrity: sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg== } + resolution: {integrity: sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==} deprecated: Package no longer supported and required. Use the uuid package or crypto.randomUUID instead uuid@3.4.0: - resolution: - { integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== } + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true uuid@8.3.2: - resolution: - { integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== } + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true v8-compile-cache-lib@3.0.1: - resolution: - { integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== } + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} v8-compile-cache@2.4.0: - resolution: - { integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== } + resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} v8-to-istanbul@9.2.0: - resolution: - { integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== } - engines: { node: '>=10.12.0' } + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + engines: {node: '>=10.12.0'} validate-npm-package-license@3.0.4: - resolution: - { integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== } + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} valtio@1.11.0: - resolution: - { integrity: sha512-65Yd0yU5qs86b5lN1eu/nzcTgQ9/6YnD6iO+DDaDbQLn1Zv2w12Gwk43WkPlUBxk5wL/6cD5YMFf7kj6HZ1Kpg== } - engines: { node: '>=12.20.0' } + resolution: {integrity: sha512-65Yd0yU5qs86b5lN1eu/nzcTgQ9/6YnD6iO+DDaDbQLn1Zv2w12Gwk43WkPlUBxk5wL/6cD5YMFf7kj6HZ1Kpg==} + engines: {node: '>=12.20.0'} peerDependencies: react: '>=16.8' peerDependenciesMeta: @@ -13028,133 +10593,103 @@ packages: optional: true vary@1.1.2: - resolution: - { integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} verror@1.10.0: - resolution: - { integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== } - engines: { '0': node >=0.6.0 } + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} vfile-location@3.2.0: - resolution: - { integrity: sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== } + resolution: {integrity: sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==} vfile-location@5.0.2: - resolution: - { integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg== } + resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} vfile-message@2.0.4: - resolution: - { integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== } + resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} vfile-message@4.0.2: - resolution: - { integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== } + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} vfile@4.2.1: - resolution: - { integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== } + resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} vfile@6.0.1: - resolution: - { integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw== } + resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} viewport-dimensions@0.2.0: - resolution: - { integrity: sha512-94JqlKxEP4m7WO+N3rm4tFRGXZmXXwSPQCoV+EPxDnn8YAGiLU3T+Ha1imLreAjXsHl0K+ELnIqv64i1XZHLFQ== } + resolution: {integrity: sha512-94JqlKxEP4m7WO+N3rm4tFRGXZmXXwSPQCoV+EPxDnn8YAGiLU3T+Ha1imLreAjXsHl0K+ELnIqv64i1XZHLFQ==} vm-browserify@1.1.2: - resolution: - { integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== } + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} void-elements@3.1.0: - resolution: - { integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} vscode-json-languageservice@4.2.1: - resolution: - { integrity: sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA== } + resolution: {integrity: sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==} vscode-languageserver-textdocument@1.0.11: - resolution: - { integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA== } + resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==} vscode-languageserver-types@3.17.5: - resolution: - { integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg== } + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} vscode-nls@5.2.0: - resolution: - { integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng== } + resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} vscode-uri@3.0.8: - resolution: - { integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== } + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} w3c-xmlserializer@4.0.0: - resolution: - { integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== } - engines: { node: '>=14' } + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} walker@1.0.8: - resolution: - { integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== } + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} watchpack-chokidar2@2.0.1: - resolution: - { integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== } + resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==} watchpack@1.7.5: - resolution: - { integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== } + resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==} watchpack@2.4.0: - resolution: - { integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} wbuf@1.7.3: - resolution: - { integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== } + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} web-namespaces@1.1.4: - resolution: - { integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== } + resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} web-namespaces@2.0.1: - resolution: - { integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== } + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} web-streams-polyfill@3.2.1: - resolution: - { integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} webidl-conversions@3.0.1: - resolution: - { integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== } + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} webidl-conversions@4.0.2: - resolution: - { integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== } + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} webidl-conversions@6.1.0: - resolution: - { integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== } - engines: { node: '>=10.4' } + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} webidl-conversions@7.0.0: - resolution: - { integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== } - engines: { node: '>=12' } + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} webpack-cli@5.1.4: - resolution: - { integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== } - engines: { node: '>=14.15.0' } + resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} + engines: {node: '>=14.15.0'} hasBin: true peerDependencies: '@webpack-cli/generators': '*' @@ -13170,30 +10705,26 @@ packages: optional: true webpack-dev-middleware@3.7.3: - resolution: - { integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} + engines: {node: '>= 6'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 webpack-dev-middleware@4.3.0: - resolution: - { integrity: sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w== } - engines: { node: '>= v10.23.3' } + resolution: {integrity: sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==} + engines: {node: '>= v10.23.3'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 webpack-dev-middleware@5.3.3: - resolution: - { integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} + engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 webpack-dev-server@4.15.1: - resolution: - { integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} + engines: {node: '>= 12.13.0'} hasBin: true peerDependencies: webpack: ^4.37.0 || ^5.0.0 @@ -13205,47 +10736,38 @@ packages: optional: true webpack-filter-warnings-plugin@1.2.1: - resolution: - { integrity: sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg== } - engines: { node: '>= 4.3 < 5.0.0 || >= 5.10' } + resolution: {integrity: sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==} + engines: {node: '>= 4.3 < 5.0.0 || >= 5.10'} peerDependencies: webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 webpack-hot-middleware@2.25.4: - resolution: - { integrity: sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w== } + resolution: {integrity: sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w==} webpack-log@2.0.0: - resolution: - { integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==} + engines: {node: '>= 6'} webpack-merge@5.9.0: - resolution: - { integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==} + engines: {node: '>=10.0.0'} webpack-sources@1.4.3: - resolution: - { integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== } + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} webpack-sources@3.2.3: - resolution: - { integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} webpack-virtual-modules@0.2.2: - resolution: - { integrity: sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA== } + resolution: {integrity: sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==} webpack-virtual-modules@0.4.6: - resolution: - { integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA== } + resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==} webpack@4.47.0: - resolution: - { integrity: sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ== } - engines: { node: '>=6.11.5' } + resolution: {integrity: sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==} + engines: {node: '>=6.11.5'} hasBin: true peerDependencies: webpack-cli: '*' @@ -13257,9 +10779,8 @@ packages: optional: true webpack@5.88.2: - resolution: - { integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} + engines: {node: '>=10.13.0'} hasBin: true peerDependencies: webpack-cli: '*' @@ -13268,128 +10789,101 @@ packages: optional: true websocket-driver@0.7.4: - resolution: - { integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} websocket-extensions@0.1.4: - resolution: - { integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} whatwg-encoding@2.0.0: - resolution: - { integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== } - engines: { node: '>=12' } + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} whatwg-fetch@3.6.2: - resolution: - { integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== } + resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} whatwg-mimetype@3.0.0: - resolution: - { integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== } - engines: { node: '>=12' } + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} whatwg-url@11.0.0: - resolution: - { integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} whatwg-url@5.0.0: - resolution: - { integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== } + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} whatwg-url@8.7.0: - resolution: - { integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} which-boxed-primitive@1.0.2: - resolution: - { integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== } + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} which-collection@1.0.1: - resolution: - { integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== } + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} which-module@2.0.1: - resolution: - { integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== } + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} which-typed-array@1.1.13: - resolution: - { integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} which@1.3.1: - resolution: - { integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== } + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true which@2.0.2: - resolution: - { integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true wide-align@1.1.5: - resolution: - { integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== } + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} widest-line@3.1.0: - resolution: - { integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} wildcard@2.0.1: - resolution: - { integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== } + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} wordwrap@1.0.0: - resolution: - { integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== } + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} worker-farm@1.7.0: - resolution: - { integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== } + resolution: {integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==} worker-rpc@0.1.1: - resolution: - { integrity: sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== } + resolution: {integrity: sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==} wrap-ansi@6.2.0: - resolution: - { integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} wrap-ansi@7.0.0: - resolution: - { integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== } - engines: { node: '>=10' } + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} wrap-ansi@8.1.0: - resolution: - { integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} wrappy@1.0.2: - resolution: - { integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== } + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} write-file-atomic@3.0.3: - resolution: - { integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== } + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} write-file-atomic@4.0.2: - resolution: - { integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} ws@7.5.9: - resolution: - { integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== } - engines: { node: '>=8.3.0' } + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -13400,9 +10894,8 @@ packages: optional: true ws@8.15.0: - resolution: - { integrity: sha512-H/Z3H55mrcrgjFwI+5jKavgXvwQLtfPCUEp6pi35VhoB0pfcHnSoyuTzkBEZpzq49g1193CUEwIvmsjcotenYw== } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-H/Z3H55mrcrgjFwI+5jKavgXvwQLtfPCUEp6pi35VhoB0pfcHnSoyuTzkBEZpzq49g1193CUEwIvmsjcotenYw==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: '>=5.0.2' @@ -13413,9 +10906,8 @@ packages: optional: true ws@8.16.0: - resolution: - { integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: '>=5.0.2' @@ -13426,139 +10918,111 @@ packages: optional: true x-default-browser@0.4.0: - resolution: - { integrity: sha512-7LKo7RtWfoFN/rHx1UELv/2zHGMx8MkZKDq1xENmOCTkfIqZJ0zZ26NEJX8czhnPXVcqS0ARjjfJB+eJ0/5Cvw== } + resolution: {integrity: sha512-7LKo7RtWfoFN/rHx1UELv/2zHGMx8MkZKDq1xENmOCTkfIqZJ0zZ26NEJX8czhnPXVcqS0ARjjfJB+eJ0/5Cvw==} hasBin: true xdg-basedir@4.0.0: - resolution: - { integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== } - engines: { node: '>=8' } + resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} + engines: {node: '>=8'} xml-name-validator@4.0.0: - resolution: - { integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== } - engines: { node: '>=12' } + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} xml@1.0.1: - resolution: - { integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== } + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} xmlbuilder@15.1.1: - resolution: - { integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== } - engines: { node: '>=8.0' } + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} xmlchars@2.2.0: - resolution: - { integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== } + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} xtend@4.0.2: - resolution: - { integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== } - engines: { node: '>=0.4' } + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} y18n@4.0.3: - resolution: - { integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== } + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} y18n@5.0.8: - resolution: - { integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} yaku@0.16.7: - resolution: - { integrity: sha512-Syu3IB3rZvKvYk7yTiyl1bo/jiEFaaStrgv1V2TIJTqYPStSMQVO8EQjg/z+DRzLq/4LIIharNT3iH1hylEIRw== } + resolution: {integrity: sha512-Syu3IB3rZvKvYk7yTiyl1bo/jiEFaaStrgv1V2TIJTqYPStSMQVO8EQjg/z+DRzLq/4LIIharNT3iH1hylEIRw==} yallist@2.1.2: - resolution: - { integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== } + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} yallist@3.1.1: - resolution: - { integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== } + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yallist@4.0.0: - resolution: - { integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== } + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} yaml@1.10.2: - resolution: - { integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} yaml@2.3.3: - resolution: - { integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ== } - engines: { node: '>= 14' } + resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} + engines: {node: '>= 14'} yaml@2.3.4: - resolution: - { integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== } - engines: { node: '>= 14' } + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} yargs-parser@18.1.3: - resolution: - { integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} yargs-parser@20.2.9: - resolution: - { integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== } - engines: { node: '>=10' } + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} yargs-parser@21.1.1: - resolution: - { integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== } - engines: { node: '>=12' } + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} yargs@15.4.1: - resolution: - { integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== } - engines: { node: '>=8' } + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} yargs@16.2.0: - resolution: - { integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} yargs@17.7.2: - resolution: - { integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== } - engines: { node: '>=12' } + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} yauzl@2.10.0: - resolution: - { integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== } + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} yn@3.1.1: - resolution: - { integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== } - engines: { node: '>=6' } + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} yocto-queue@0.1.0: - resolution: - { integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== } - engines: { node: '>=10' } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} zen-observable-ts@1.2.5: - resolution: - { integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg== } + resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} zen-observable@0.8.15: - resolution: - { integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== } + resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} zwitch@1.0.5: - resolution: - { integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== } + resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} zwitch@2.0.4: - resolution: - { integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== } + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: + 7zip-bin@5.2.0: {} '@aashutoshrathi/word-wrap@1.2.6': {} @@ -22985,6 +20449,10 @@ snapshots: lines-and-columns@1.2.4: {} + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + lint-staged@13.0.3: dependencies: cli-truncate: 3.1.0 @@ -23145,6 +20613,8 @@ snapshots: slice-ansi: 4.0.0 wrap-ansi: 6.2.0 + longest-streak@3.1.0: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -23234,6 +20704,15 @@ snapshots: markdown-escapes@1.0.4: {} + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + markdown-table@3.0.3: {} matcher@3.0.0: @@ -23425,6 +20904,8 @@ snapshots: mdurl@1.0.1: {} + mdurl@2.0.0: {} + media-typer@0.3.0: {} mem@8.1.1: @@ -24946,6 +22427,8 @@ snapshots: inherits: 2.0.4 pump: 2.0.1 + punycode.js@2.3.1: {} + punycode@1.4.1: {} punycode@2.3.1: {} @@ -26765,6 +24248,8 @@ snapshots: typeson@6.1.0: {} + uc.micro@2.1.0: {} + ufo@1.3.2: {} uglify-js@3.17.4: From f9dfc3683e6a3abfa3a7f9c8ceb9997da079a9fe Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 9 Jul 2024 18:12:54 +0100 Subject: [PATCH 41/90] fix: confirm step --- .../shared/api/translation/locales/en.json | 4 +- .../widgets/CreateWallet/model/flow-model.ts | 66 +++++----- .../widgets/CreateWallet/model/form-model.ts | 34 +---- .../ui/MultisigWallet/ConfirmationStep.tsx | 123 +++++------------- .../ui/MultisigWallet/MultisigWallet.tsx | 13 +- .../MultisigWallet/NameNetworkSelection.tsx | 2 +- .../SelectSignatoriesThreshold.tsx | 16 +-- .../components/SelectSignatories.tsx | 27 +--- 8 files changed, 84 insertions(+), 201 deletions(-) diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index 20de888245..865663a3bf 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -20,7 +20,7 @@ "addContactButton": "Add contact", "nameExistsError": "Name already in use", "nameLabel": "Name", - "namePlaceholder": "Enter text", + "namePlaceholder": "Enter name", "nameRequiredError": "Name is required", "title": "Add contact", "typeAddressAndNameButton": "Type a name and address", @@ -36,7 +36,7 @@ "editWarning": "If you have a multisig wallet with this contact, then changing the contact will not affect the multisig wallet", "nameExistsError": "Name already in use", "nameLabel": "Name", - "namePlaceholder": "Enter text", + "namePlaceholder": "Enter name", "nameRequiredError": "Name is required", "saveContactButton": "Save", "title": "Edit contact", diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index 542d45e001..2dfd8a863c 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -21,11 +21,12 @@ import { networkModel, networkUtils } from '@entities/network'; import { AddMultisigStore, FormSubmitEvent, Step } from '../lib/types'; import { formModel } from './form-model'; import { transactionService } from '@entities/transaction'; -import { TEST_ACCOUNTS, ZERO_BALANCE, toAddress } from '@shared/lib/utils'; +import { TEST_ACCOUNTS, ZERO_BALANCE, toAccountId, toAddress } from '@shared/lib/utils'; import { confirmModel } from './confirm-model'; import { signModel } from '@features/operations/OperationSign/model/sign-model'; import { submitModel } from '@features/operations/OperationSubmit'; import { createMultisigUtils } from '../lib/create-multisig-utils'; +import { signatoryModel } from './signatory-model'; const stepChanged = createEvent(); const feeChanged = createEvent(); @@ -33,7 +34,6 @@ const multisigDepositChanged = createEvent(); const isFeeLoadingChanged = createEvent(); const formSubmitted = createEvent(); const flowFinished = createEvent(); -const selectedSignerChanged = createEvent(); export type Callbacks = { onComplete: () => void; @@ -43,7 +43,6 @@ const walletCreated = createEvent<{ name: string; threshold: number; }>(); -const $selectedSigner = restore(selectedSignerChanged, null); const $step = restore(stepChanged, Step.NAME_NETWORK).reset(flowFinished); const $fee = restore(feeChanged, ZERO_BALANCE); const $multisigDeposit = restore(multisigDepositChanged, ZERO_BALANCE); @@ -63,13 +62,18 @@ const $addMultisigStore = createStore(null).reset(flowF // several accountSignatories. Otherwise it is the first accountSignatory const $signer = combine( { - accountSignatories: formModel.$accountSignatories, - selectedSigner: $selectedSigner, + signatories: signatoryModel.$signatories, + wallets: walletModel.$wallets, }, - ({ accountSignatories, selectedSigner }) => { - return accountSignatories.length > 1 && selectedSigner - ? selectedSigner - : (accountSignatories[0] as unknown as Account); + ({ signatories, wallets }) => { + if (signatories.size === 0) return null; + + const signerAccount = walletUtils.getAccountsBy( + wallets, + (a) => a.accountId === toAccountId(signatories.get(0)!.address), + ); + + return signerAccount[0]; }, { skipVoid: false }, ); @@ -78,7 +82,7 @@ const $signerWallet = combine( { signer: $signer, wallets: walletModel.$wallets }, ({ signer, wallets }) => { return walletUtils.getWalletFilteredAccounts(wallets, { - accountFn: (a) => a.accountId === signer.accountId, + accountFn: (a) => a.accountId === signer?.accountId, walletFn: (w) => walletUtils.isValidSignatory(w), }); }, @@ -127,13 +131,13 @@ const $transaction = combine( chains: networkModel.$chains, chain: formModel.$createMultisigForm.fields.chain.$value, remarkTx: $remarkTx, - signatories: formModel.$signatories, + signatories: signatoryModel.$signatories, signer: $signer, threshold: formModel.$createMultisigForm.fields.threshold.$value, multisigAccountId: formModel.$multisigAccountId, }, ({ apis, chain, remarkTx, signatories, signer, threshold, multisigAccountId }) => { - if (!chain || !remarkTx) return undefined; + if (!chain || !remarkTx || !signer) return undefined; return transactionService.getWrappedTransaction({ api: apis[chain.chainId], @@ -143,7 +147,9 @@ const $transaction = combine( { kind: WrapperKind.MULTISIG, multisigAccount: { accountId: multisigAccountId, signatories, threshold } as unknown as MultisigAccount, - signatories: signatories.map((s) => ({ accountId: s.accountId })) as Account[], + signatories: Array.from(signatories.values()).map((s) => ({ + accountId: toAccountId(s.address), + })) as Account[], signer, }, ], @@ -225,27 +231,22 @@ sample({ target: stepChanged, }); -sample({ - clock: formModel.$accountSignatories, - fn: (signatories) => { - return signatories[0] as unknown as Account; - }, - target: selectedSignerChanged, -}); - sample({ clock: submitModel.output.extrinsicSucceeded, source: { name: formModel.$createMultisigForm.fields.name.$value, threshold: formModel.$createMultisigForm.fields.threshold.$value, - signatories: formModel.$signatories, + signatories: signatoryModel.$signatories, chain: formModel.$createMultisigForm.fields.chain.$value, }, fn: ({ signatories, chain, name, threshold }) => ({ name, threshold, chainId: chain.chainId, - signatories: sortBy(signatories, 'accountId'), + signatories: sortBy( + Array.from(signatories.values()).map((a) => ({ address: a.address, accountId: toAccountId(a.address) })), + 'accountId', + ), isEthereumChain: networkUtils.isEthereumBased(chain.options), }), target: createWalletFx, @@ -267,8 +268,8 @@ sample({ fee: $fee, multisigDeposit: $multisigDeposit, }, - filter: ({ transaction }) => { - return Boolean(transaction); + filter: ({ transaction, signer }) => { + return Boolean(transaction) && Boolean(signer); }, fn: ({ multisigDeposit, signer, transaction, fee }, formData) => { return { @@ -279,7 +280,7 @@ sample({ }, formData: { ...formData, - signer, + signer: signer!, fee, account: signer, multisigDeposit, @@ -324,13 +325,14 @@ sample({ wrappedTx: $wrappedTx, signer: $signer, }, - filter: ({ addMultisigStore, wrappedTx }) => Boolean(addMultisigStore) && Boolean(wrappedTx), + filter: ({ addMultisigStore, wrappedTx, signer }) => + Boolean(addMultisigStore) && Boolean(wrappedTx) && Boolean(signer), fn: ({ addMultisigStore, wrappedTx, signer }) => ({ event: { signingPayloads: [ { chain: addMultisigStore!.chain, - account: signer, + account: signer!, transaction: wrappedTx!, }, ], @@ -352,14 +354,14 @@ sample({ multisigTx: $multisigTx, signer: $signer, }, - filter: ({ addMultisigStore, coreTx, wrappedTx }) => { - return Boolean(addMultisigStore) && Boolean(wrappedTx) && Boolean(coreTx); + filter: ({ addMultisigStore, coreTx, wrappedTx, signer }) => { + return Boolean(addMultisigStore) && Boolean(wrappedTx) && Boolean(coreTx) && Boolean(signer); }, fn: ({ addMultisigStore, coreTx, wrappedTx, multisigTx, signer }, signParams) => ({ event: { ...signParams, chainId: addMultisigStore!.chain.chainId, - account: signer, + account: signer!, coreTxs: [coreTx!], wrappedTxs: [wrappedTx!], multisigTxs: multisigTx ? [multisigTx] : [], @@ -393,7 +395,6 @@ export const flowModel = { $fakeTx, $api, $isFeeLoading, - $selectedSigner, $signer, $signerWallet, events: { @@ -403,7 +404,6 @@ export const flowModel = { feeChanged, multisigDepositChanged, isFeeLoadingChanged, - selectedSignerChanged, //for tests formSubmitted, }, diff --git a/src/renderer/widgets/CreateWallet/model/form-model.ts b/src/renderer/widgets/CreateWallet/model/form-model.ts index 674b9b5123..e45579c5ed 100644 --- a/src/renderer/widgets/CreateWallet/model/form-model.ts +++ b/src/renderer/widgets/CreateWallet/model/form-model.ts @@ -1,13 +1,14 @@ import { createForm } from 'effector-forms'; -import { combine, createEvent, restore } from 'effector'; +import { combine, createEvent } from 'effector'; import { sample } from 'lodash'; import { Chain, CryptoType, MultisigAccount } from '@shared/core'; import chains from '@shared/config/chains/chains.json'; import { accountUtils, walletModel, walletUtils } from '@entities/wallet'; import { networkUtils } from '@entities/network'; -import { ExtendedAccount, ExtendedContact } from '../ui/MultisigWallet/common/types'; import { FormParams } from '../lib/types'; +import { signatoryModel } from './signatory-model'; +import { toAccountId } from '@shared/lib/utils'; const $createMultisigForm = createForm({ fields: { @@ -37,26 +38,12 @@ const $createMultisigForm = createForm({ validateOn: ['submit'], }); -const reset = createEvent(); -const accountSignatoriesChanged = createEvent(); -const contactSignatoriesChanged = createEvent(); const formSubmitted = createEvent(); -const $accountSignatories = restore(accountSignatoriesChanged, []).reset(reset); -const $contactSignatories = restore(contactSignatoriesChanged, []).reset(reset); - -const $signatories = combine( - { - accountSignatories: $accountSignatories, - contactSignatories: $contactSignatories, - }, - ({ accountSignatories, contactSignatories }) => [...accountSignatories, ...contactSignatories], -); - const $multisigAccountId = combine( { formValues: $createMultisigForm.$values, - signatories: $signatories, + signatories: signatoryModel.$signatories, }, ({ formValues: { threshold, chain }, signatories }) => { if (!threshold) return null; @@ -64,7 +51,7 @@ const $multisigAccountId = combine( const cryptoType = networkUtils.isEthereumBased(chain.options) ? CryptoType.ETHEREUM : CryptoType.SR25519; return accountUtils.getMultisigAccountId( - signatories.map((s) => s.accountId), + Array.from(signatories.values()).map((s) => toAccountId(s.address)), threshold, cryptoType, ); @@ -109,11 +96,11 @@ const $availableAccounts = combine( ); const $hasOwnSignatory = combine( - { wallets: walletModel.$wallets, signatories: $signatories }, + { wallets: walletModel.$wallets, signatories: signatoryModel.$signatories }, ({ wallets, signatories }) => !!walletUtils.getWalletsFilteredAccounts(wallets, { walletFn: (w) => !walletUtils.isWatchOnly(w) && !walletUtils.isMultisig(w), - accountFn: (a) => signatories.some((s) => s.accountId === a.accountId), + accountFn: (a) => Array.from(signatories.values()).some((s) => toAccountId(s.address) === a.accountId), })?.length, ); @@ -129,14 +116,7 @@ export const formModel = { $multisigAccountId, $multisigAlreadyExists, $availableAccounts, - $signatories, - $accountSignatories, - $contactSignatories, $hasOwnSignatory, - events: { - contactSignatoriesChanged, - accountSignatoriesChanged, - }, output: { formSubmitted, }, diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx index f5c10a7c13..e1493996b0 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx @@ -1,12 +1,11 @@ import { useForm } from 'effector-forms'; import { useUnit } from 'effector-react'; -import { cnTw, RootExplorers, toAddress } from '@shared/lib/utils'; +import { cnTw, RootExplorers } from '@shared/lib/utils'; import { useI18n } from '@app/providers'; -import { BodyText, Button, FootnoteText, Select, SmallTitleText } from '@shared/ui'; -import { ExtendedWallet, ExtendedContact, ExtendedAccount } from './common/types'; +import { BodyText, Button, FootnoteText, SmallTitleText } from '@shared/ui'; import { WalletItem } from './components/WalletItem'; -import { AccountAddress, ContactItem, ExplorersPopover, walletModel, walletUtils } from '@entities/wallet'; +import { ContactItem, ExplorersPopover } from '@entities/wallet'; import { Chain, WalletType } from '@shared/core'; import { flowModel } from '../../model/flow-model'; import { Step } from '../../lib/types'; @@ -14,36 +13,39 @@ import { formModel } from '../../model/form-model'; import { FeeWithLabel, MultisigDepositWithLabel } from '@entities/transaction'; import { SignButton } from '@entities/operations'; import { confirmModel } from '../../model/confirm-model'; +import { signatoryModel } from '../../model/signatory-model'; type Props = { - wallets?: ExtendedWallet[]; - accounts?: ExtendedAccount[]; - contacts: ExtendedContact[]; chain?: Chain; }; -export const ConfirmationStep = ({ chain, wallets = [], accounts = [], contacts }: Props) => { +export const ConfirmationStep = ({ chain }: Props) => { const { t } = useI18n(); + const signatoriesMap = useUnit(signatoryModel.$signatories); + const signatories = Array.from(signatoriesMap.values()); + const signerWallet = useUnit(flowModel.$signerWallet); + const signatoriesWithoutSelf = signatories.slice(1); const { fields: { name, threshold }, } = useForm(formModel.$createMultisigForm); - const accountSignatories = useUnit(formModel.$accountSignatories); - const signatories = useUnit(formModel.$signatories); const api = useUnit(flowModel.$api); const fakeTx = useUnit(flowModel.$fakeTx); - const signerWallet = useUnit(flowModel.$signerWallet); const explorers = chain ? chain.explorers : RootExplorers; return (
- {accountSignatories.length > 1 && ( + {/* {signatories.length > 1 && ( <> {t('createMultisigAccount.signingWith')} - + } + /> - )} + )} */} {t('createMultisigAccount.newMultisigTitle')} @@ -55,50 +57,26 @@ export const ConfirmationStep = ({ chain, wallets = [], accounts = [], contacts {t('createMultisigAccount.selectedSignatoriesTitle')}
- {wallets.length > 0 && ( - <> - - {t('createMultisigAccount.walletsTab')} {wallets.length} - -
    - {wallets.map(({ index, name, type }) => ( -
  • - -
  • - ))} -
- - )} - {accounts.length > 0 && ( - <> - - {t('createMultisigAccount.yourAccounts')} {accounts.length} - -
    - {accounts.map(({ index, name, accountId }) => ( -
  • - } - /> -
  • - ))} -
- - )} - {contacts.length > 0 && ( + <> + {t('createMultisigAccount.walletsTab')} +
    +
  • + +
  • +
+ + {signatoriesWithoutSelf.length > 0 && ( <> - {t('createMultisigAccount.contactsTab')} {contacts.length} + {t('createMultisigAccount.contactsTab')} {signatoriesWithoutSelf.length}
    - {contacts.map(({ index, accountId, name }) => ( -
  • + {signatoriesWithoutSelf.map(({ address, name }) => ( +
  • } + button={} />
  • ))} @@ -131,44 +109,3 @@ export const ConfirmationStep = ({ chain, wallets = [], accounts = [], contacts
); }; - -const AccountSelector = ({ chain }: { chain?: Chain }) => { - const { t } = useI18n(); - - const selectedSigner = useUnit(flowModel.$selectedSigner); - const accountSignatories = useUnit(formModel.$accountSignatories); - const wallets = useUnit(walletModel.$wallets); - - if (!chain) return null; - - const options = accountSignatories.map(({ accountId, name }) => { - const address = toAddress(accountId, { prefix: chain.addressPrefix }); - - return { - id: accountId, - value: accountId, - element: ( -
- -
- ), - }; - }); - - return ( -
- { const { t } = useI18n(); - // const [contactList, setContactList] = useState([]); const signatories = useUnit(signatoryModel.$signatories); - // const contacts = useUnit(contactModel.$contacts); - - // useEffect(() => { - // const addressBookContacts = contacts - // .filter((c) => { - // const isEthereumContact = isEthereumAccountId(c.accountId); - // const isEthereumChain = networkUtils.isEthereumBased(chain?.options); - - // return isEthereumContact === isEthereumChain; - // }) - // .map((contact, index) => ({ ...contact, index: index.toString() })); - - // setContactList(addressBookContacts); - // }, [contacts.length, chain]); - - // return !isEthereumAccountId(c.accountId); - // }) - // .map((contact, index) => ({ ...contact, index: index.toString() })); - - // const { available, disabled } = wallets.reduce<{ - // available: ExtendedWallet[]; - // disabled: Wallet[]; - // }>( - // (acc, wallet, index) => { - // const walletAccounts = accounts.filter((a) => a.walletId === wallet.id); - - // if (!walletAccounts.length) return acc; - - // // TODO: Check why it can be empty - // const accountId = walletAccounts[0]?.accountId; - // const isSameAccounts = walletAccounts.every((a) => a.accountId === accountId); - // const isEvmAccount = accountUtils.isEthereumBased(walletAccounts[0]); - - // if (isSameAccounts && !isEvmAccount && walletUtils.isValidSignatory(wallet)) { - // acc.available.push({ - // ...wallet, - // index: index.toString(), - // address: toAddress(accountId), - // accountId: accountId, - // }); - // } else { - // acc.disabled.push(wallet); - // } - - // return acc; - // }, - // { available: [], disabled: [] }, - // ); - - // setContactList(addressBookContacts); - // setAvailableWallets(available); - // setDisabledWallets(disabled); - // }, [accounts.length, contacts.length, wallets.length]); const onAddSignatoryClick = () => { signatoryModel.events.signatoriesChanged({ index: signatories.size, name: '', address: '' }); From b378f8c3fc071844dd824162002ca65364ce9ffd Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Thu, 1 Aug 2024 12:31:03 +0200 Subject: [PATCH 54/90] fix: combobox for own acounts --- .../entities/wallet/lib/wallet-utils.ts | 1 + .../shared/ui/Dropdowns/Combobox/Combobox.tsx | 1 + .../widgets/CreateWallet/model/flow-model.ts | 6 +- .../ui/MultisigWallet/ConfirmationStep.tsx | 19 +--- .../components/SelectSignatories.tsx | 9 +- .../MultisigWallet/components/Signatory.tsx | 107 +++++++++++++----- 6 files changed, 88 insertions(+), 55 deletions(-) diff --git a/src/renderer/entities/wallet/lib/wallet-utils.ts b/src/renderer/entities/wallet/lib/wallet-utils.ts index c7f71b9467..e89a5b01d0 100644 --- a/src/renderer/entities/wallet/lib/wallet-utils.ts +++ b/src/renderer/entities/wallet/lib/wallet-utils.ts @@ -80,6 +80,7 @@ function isWalletConnectGroup(wallet?: Wallet): wallet is WalletConnectGroup { } const VALID_SIGNATORY_WALLET_TYPES = [ + WalletType.POLKADOT_VAULT, WalletType.SINGLE_PARITY_SIGNER, WalletType.MULTISHARD_PARITY_SIGNER, WalletType.WALLET_CONNECT, diff --git a/src/renderer/shared/ui/Dropdowns/Combobox/Combobox.tsx b/src/renderer/shared/ui/Dropdowns/Combobox/Combobox.tsx index 6c7cd196b8..7c2de5d12b 100644 --- a/src/renderer/shared/ui/Dropdowns/Combobox/Combobox.tsx +++ b/src/renderer/shared/ui/Dropdowns/Combobox/Combobox.tsx @@ -74,6 +74,7 @@ export const Combobox = ({ key={option.id} value={option} className={({ active, selected }) => cnTw(OptionStyle, OptionStyleTheme[theme](active, selected))} + disabled={!!option.disabled} > {typeof option.element === 'string' ? {option.element} : option.element} diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index 59b6217030..d4ce8f005a 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -59,8 +59,6 @@ const $coreTx = createStore(null).reset(flowFinished); const $multisigTx = createStore(null).reset(flowFinished); const $addMultisigStore = createStore(null).reset(flowFinished); -// $selected signer will be taken into account in case we have -// several accountSignatories. Otherwise it is the first accountSignatory const $signer = combine( { signatories: signatoryModel.$signatories, @@ -82,10 +80,12 @@ const $signer = combine( const $signerWallet = combine( { signer: $signer, wallets: walletModel.$wallets }, ({ signer, wallets }) => { - return walletUtils.getWalletFilteredAccounts(wallets, { + const res = walletUtils.getWalletFilteredAccounts(wallets, { accountFn: (a) => a.accountId === signer?.accountId, walletFn: (w) => walletUtils.isValidSignatory(w), }); + + return res; }, { skipVoid: false }, ); diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx index 34a3d04c25..c04ea77f10 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx @@ -25,6 +25,7 @@ export const ConfirmationStep = ({ chain }: Props) => { const signatoriesMap = useUnit(signatoryModel.$signatories); const signatories = Array.from(signatoriesMap.values()); const signerWallet = useUnit(flowModel.$signerWallet); + const signer = useUnit(flowModel.$signer); const signatoriesWithoutSelf = signatories.slice(1); const { fields: { name, threshold }, @@ -37,17 +38,6 @@ export const ConfirmationStep = ({ chain }: Props) => { return (
- {/* {signatories.length > 1 && ( - <> - {t('createMultisigAccount.signingWith')} - } - /> - - )} */} - {t('createMultisigAccount.newMultisigTitle')} @@ -62,7 +52,7 @@ export const ConfirmationStep = ({ chain }: Props) => { {t('createMultisigAccount.walletsTab')}
  • - +
@@ -104,7 +94,10 @@ export const ConfirmationStep = ({ chain }: Props) => { - +
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx index 66f0f7300f..bb3dec552b 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx @@ -7,13 +7,6 @@ import { signatoryModel } from '../../../model/signatory-model'; import { Signatory } from './Signatory'; -// import { WalletItem } from './WalletItem'; - -// const enum SignatoryTabs { -// WALLETS = 'wallets', -// CONTACTS = 'contacts', -// } - type Props = { chain: Chain; }; @@ -35,7 +28,7 @@ export const SelectSignatories = ({ chain }: Props) => {
{Array.from(signatories.keys()).map((key) => ( - onDeleteSignatoryClick(key)} /> + onDeleteSignatoryClick(key)} /> ))}
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx index 932e215bf3..a30aa97d5c 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx @@ -1,21 +1,87 @@ -import { useState } from 'react'; +import { useForm } from 'effector-forms'; +import { useUnit } from 'effector-react'; +import { useEffect, useState } from 'react'; import { useI18n } from '@app/providers'; -import { validateAddress } from '@shared/lib/utils'; -import { Combobox, Icon, IconButton, Identicon, Input } from '@shared/ui'; +import { type ChainAccount, type WalletFamily } from '@/shared/core'; +import { type ComboboxOption } from '@/shared/ui/types'; +import { toAddress, validateAddress } from '@shared/lib/utils'; +import { CaptionText, Combobox, Icon, IconButton, Identicon, Input } from '@shared/ui'; +import { AddressWithName, WalletIcon, walletModel, walletUtils } from '@/entities/wallet'; +import { GroupLabels } from '@/features/wallets/WalletSelect/ui/WalletGroup'; +import { walletSelectUtils } from '@features/wallets/WalletSelect/lib/wallet-select-utils'; +import { formModel } from '@/widgets/CreateWallet/model/form-model'; import { signatoryModel } from '../../../model/signatory-model'; interface Props { index: number; - canBeDeleted?: boolean; + isOwnAccount?: boolean; onDelete?: (index: number) => void; } -export const Signatory = ({ index, onDelete, canBeDeleted = true }: Props) => { +export const Signatory = ({ index, onDelete, isOwnAccount = false }: Props) => { const { t } = useI18n(); const [name, setName] = useState(''); const [address, setAddress] = useState(''); const [query, setQuery] = useState(''); + const [options, setOptions] = useState([]); + + const wallets = useUnit(walletModel.$wallets); + const { + fields: { chain }, + } = useForm(formModel.$createMultisigForm); + + useEffect(() => { + if (!isOwnAccount || wallets.length === 0) return; + + const walletByGroup = walletSelectUtils.getWalletByGroups(wallets, query); + const opts = Object.entries(walletByGroup).reduce((acc, [walletType, wallets], index) => { + if (wallets.length === 0) { + return acc; + } + + const accountOptions = wallets.reduce((acc, wallet) => { + if (!wallet.accounts.length || !walletUtils.isValidSignatory(wallet)) return acc; + + return acc.concat( + wallet.accounts + .filter((account) => (account as ChainAccount).chainId === chain.value.chainId) + .map((account) => { + const address = toAddress(account.accountId, { prefix: chain.value.addressPrefix }); + + return { + value: address, + element: , + id: account.accountId, + }; + }), + ); + }, [] as ComboboxOption[]); + + if (accountOptions.length === 0) { + return acc; + } + + return acc.concat([ + { + id: index.toString(), + element: ( +
+ + + {t(GroupLabels[walletType as WalletFamily])} + +
+ ), + value: undefined, + disabled: true, + }, + ...accountOptions, + ]); + }, [] as ComboboxOption[]); + + setOptions(opts); + }, [query, wallets, isOwnAccount, t]); const onNameChange = (newName: string) => { setName(newName); @@ -41,27 +107,6 @@ export const Signatory = ({ index, onDelete, canBeDeleted = true }: Props) => { }); }; - // const options = proxyAccounts.map((proxyAccount) => { - // const isShard = accountUtils.isShardAccount(proxyAccount); - // const address = toAddress(proxyAccount.accountId, { prefix: chain.value.addressPrefix }); - - // return { - // id: proxyAccount.id.toString(), - // value: address, - // element: ( - //
- // - //
- // ), - // }; - // }); - const prefixElement = (
{!!address && validateAddress(address) ? ( @@ -72,9 +117,9 @@ export const Signatory = ({ index, onDelete, canBeDeleted = true }: Props) => {
); - const accountInputLabel = canBeDeleted - ? t('createMultisigAccount.signatoryAddress') - : t('createMultisigAccount.ownAccountSelection'); + const accountInputLabel = isOwnAccount + ? t('createMultisigAccount.ownAccountSelection') + : t('createMultisigAccount.signatoryAddress'); return (
@@ -94,7 +139,7 @@ export const Signatory = ({ index, onDelete, canBeDeleted = true }: Props) => { className="flex-1" label={accountInputLabel} placeholder={t('createMultisigAccount.signatorySelection')} - options={[]} + options={options} query={query} value={address} prefixElement={prefixElement} @@ -103,7 +148,7 @@ export const Signatory = ({ index, onDelete, canBeDeleted = true }: Props) => { }} onInput={setQuery} /> - {canBeDeleted && onDelete && ( + {!isOwnAccount && onDelete && ( onDelete(index)} /> )}
From 8c3e8a33895d9720a8fae619baed3ea1c5b5f4c1 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Thu, 1 Aug 2024 15:20:28 +0200 Subject: [PATCH 55/90] fix: reset fields --- .../widgets/CreateWallet/model/flow-model.ts | 12 +++++++++++- .../MultisigWallet/components/SelectSignatories.tsx | 2 ++ .../ui/MultisigWallet/components/Signatory.tsx | 5 +++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index d4ce8f005a..6a2968324f 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -388,11 +388,21 @@ sample({ }); sample({ - clock: flowFinished, + clock: delay(flowFinished, 2000), fn: () => Step.NAME_NETWORK, target: stepChanged, }); +sample({ + clock: delay(flowFinished, 2000), + target: signatoryModel.$signatories.reinit, +}); + +sample({ + clock: delay(flowFinished, 2000), + target: formModel.$createMultisigForm.reset, +}); + export const flowModel = { $error, $step, diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx index bb3dec552b..afa3f43c1e 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx @@ -24,6 +24,8 @@ export const SelectSignatories = ({ chain }: Props) => { signatoryModel.events.signatoryDeleted(index); }; + console.log('signatories', signatories); + return (
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx index a30aa97d5c..84387c55a9 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx @@ -21,11 +21,12 @@ interface Props { export const Signatory = ({ index, onDelete, isOwnAccount = false }: Props) => { const { t } = useI18n(); - const [name, setName] = useState(''); - const [address, setAddress] = useState(''); const [query, setQuery] = useState(''); const [options, setOptions] = useState([]); + const signatory = useUnit(signatoryModel.$signatories).get(index); + const [address, setAddress] = useState(signatory?.address || ''); + const [name, setName] = useState(signatory?.name || ''); const wallets = useUnit(walletModel.$wallets); const { fields: { chain }, From be4363f22c14979fdc5c1ddb601dc5e29fa32529 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Thu, 1 Aug 2024 18:40:19 +0200 Subject: [PATCH 56/90] fix: error for empty name --- src/renderer/widgets/CreateWallet/model/form-model.ts | 7 ------- .../ui/MultisigWallet/NameNetworkSelection.tsx | 9 +++++---- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/renderer/widgets/CreateWallet/model/form-model.ts b/src/renderer/widgets/CreateWallet/model/form-model.ts index 7dbde6418c..34d658f443 100644 --- a/src/renderer/widgets/CreateWallet/model/form-model.ts +++ b/src/renderer/widgets/CreateWallet/model/form-model.ts @@ -26,13 +26,6 @@ const $createMultisigForm = createForm({ }, name: { init: '', - rules: [ - { - name: 'notEmpty', - validator: (name) => name !== '', - errorText: 'createMultisigAccount.disabledError.emptyName', - }, - ], }, }, validateOn: ['submit'], diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx index d3214c5578..61dbdaafcb 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx @@ -30,6 +30,7 @@ export const NameNetworkSelection = () => { } = useForm(formModel.$createMultisigForm); const chainOptions = getChainOptions(Object.values(chains)); + const isNameError = name.isTouched && !name.value; return (
@@ -45,12 +46,12 @@ export const NameNetworkSelection = () => { className="w-[360px]" placeholder={t('createMultisigAccount.namePlaceholder')} label={t('createMultisigAccount.walletNameLabel')} - invalid={!!name.hasError()} + invalid={isNameError} value={name.value} onChange={name.onChange} /> - - {name.errorText()} + + {t('createMultisigAccount.disabledError.emptyName')}
@@ -69,7 +70,7 @@ export const NameNetworkSelection = () => {
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx index 6eaec1529c..e530fc870e 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx @@ -24,7 +24,7 @@ type Props = { onBack: () => void; }; -export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack }: Props) => { +export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { const { t } = useI18n(); const error = useUnit(flowModel.$error); @@ -80,7 +80,7 @@ export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack } }; const modalTitle = ( -
+
{t('createMultisigAccount.title')}
); @@ -97,11 +97,11 @@ export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete, onBack } > -
+
closeMultisigModal()} /> diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx index 7df6ce3b27..ee3467c4c8 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx @@ -48,8 +48,8 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { } const modalTitle = ( -
- +
+ {t('createMultisigAccount.title')} {createMultisigUtils.isNotFirstStep(activeStep) && ( <> @@ -66,20 +66,18 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { ); return ( - <> - - {isStep(activeStep, Step.NAME_NETWORK) && } - {isStep(activeStep, Step.SIGNATORIES_THRESHOLD) && } - {isStep(activeStep, Step.CONFIRM) && } - {isStep(activeStep, Step.SIGN) && flowModel.events.stepChanged(Step.CONFIRM)} />} - - + + {isStep(activeStep, Step.NAME_NETWORK) && } + {isStep(activeStep, Step.SIGNATORIES_THRESHOLD) && } + {isStep(activeStep, Step.CONFIRM) && } + {isStep(activeStep, Step.SIGN) && flowModel.events.stepChanged(Step.CONFIRM)} />} + ); }; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx index 61dbdaafcb..7f434eef0f 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx @@ -33,15 +33,15 @@ export const NameNetworkSelection = () => { const isNameError = name.isTouched && !name.value; return ( -
- +
+ {t('createMultisigAccount.multisigStep', { step: 1 })} - + {t('createMultisigAccount.nameNetworkDescription')} - -
+ +
{ {t('createMultisigAccount.disabledError.emptyName')}
-
+
{ {t('createMultisigAccount.thresholdHint')}
-
+
{ {t('createMultisigAccount.multisigExistText')}
-
+
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx index 8a7689a995..a3d77e8ec4 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectSignatories.tsx @@ -22,8 +22,15 @@ export const SelectSignatories = () => { return (
- {Array.from(signatories.keys()).map((key) => ( - onDeleteSignatoryClick(key)} /> + {Array.from(signatories.entries()).map(([key, value]) => ( + onDeleteSignatoryClick(key)} + /> ))}
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx index 8e89f23710..9c9242d35c 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx @@ -16,20 +16,27 @@ import { formModel } from '@/widgets/CreateWallet/model/form-model'; import { signatoryModel } from '../../../model/signatory-model'; interface Props { - index: number; + signatoryName?: string; + signatoryAddress?: string; + signtoryIndex: number; isOwnAccount?: boolean; onDelete?: (index: number) => void; } -export const Signatory = ({ index, onDelete, isOwnAccount = false }: Props) => { +export const Signatory = ({ + signtoryIndex, + onDelete, + isOwnAccount = false, + signatoryName = '', + signatoryAddress = '', +}: Props) => { const { t } = useI18n(); const [query, setQuery] = useState(''); const [options, setOptions] = useState([]); const [contacts, contactsFiltered] = useUnit([contactModel.$contacts, filterModel.$contactsFiltered]); - const signatory = useUnit(signatoryModel.$signatories).get(index); - const [address, setAddress] = useState(signatory?.address || ''); - const [name, setName] = useState(signatory?.name || ''); + const [address, setAddress] = useState(signatoryAddress); + const [name, setName] = useState(signatoryName); const wallets = useUnit(walletModel.$wallets); const { fields: { chain }, @@ -78,9 +85,9 @@ export const Signatory = ({ index, onDelete, isOwnAccount = false }: Props) => { { id: index.toString(), element: ( -
+
- + {t(GroupLabels[walletType as WalletFamily])}
@@ -106,7 +113,7 @@ export const Signatory = ({ index, onDelete, isOwnAccount = false }: Props) => { if (isOwnAccount || contacts.length === 0) return; setOptions( contactsFiltered.map(({ name, address }) => ({ - id: index.toString(), + id: signtoryIndex.toString(), element: , value: address, })), @@ -116,7 +123,7 @@ export const Signatory = ({ index, onDelete, isOwnAccount = false }: Props) => { const onNameChange = (newName: string) => { setName(newName); signatoryModel.events.signatoriesChanged({ - index, + index: signtoryIndex, name: newName, address, }); @@ -131,7 +138,7 @@ export const Signatory = ({ index, onDelete, isOwnAccount = false }: Props) => { setAddress(newAddress); signatoryModel.events.signatoriesChanged({ - index, + index: signtoryIndex, name, address: newAddress, }); @@ -185,7 +192,7 @@ export const Signatory = ({ index, onDelete, isOwnAccount = false }: Props) => { onInput={handleQueryChange} /> {!isOwnAccount && onDelete && ( - onDelete(index)} /> + onDelete(signtoryIndex)} /> )}
); From 880a9488c1b8280bb1d5ca80d25d7a9c6bc60262 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Mon, 30 Sep 2024 16:55:19 +0100 Subject: [PATCH 71/90] chore: fix lint --- src/renderer/pages/Basket/lib/operation-title.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/renderer/pages/Basket/lib/operation-title.ts b/src/renderer/pages/Basket/lib/operation-title.ts index f877249b00..fa4312b228 100644 --- a/src/renderer/pages/Basket/lib/operation-title.ts +++ b/src/renderer/pages/Basket/lib/operation-title.ts @@ -63,6 +63,8 @@ export const getOperationTitle = (transaction: BasketTransaction, chain: Chain): [TransactionType.VOTE]: 'operations.modalTitles.vote', [TransactionType.REVOTE]: 'operations.modalTitles.revote', [TransactionType.REMOVE_VOTE]: 'operations.modalTitles.removeVote', + // Remark + [TransactionType.REMARK]: 'operations.modalTitles.remarkOn', }; // @ts-expect-error TODO fix not all types used From 4ca7eaf4272bb5e20c9799326420831223b1e4a5 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Mon, 30 Sep 2024 17:55:59 +0100 Subject: [PATCH 72/90] fix: pv not displayed and redirect to multisig --- src/renderer/widgets/CreateWallet/model/flow-model.ts | 9 +++++++++ .../ui/MultisigWallet/components/Signatory.tsx | 6 +++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index 92390b9649..40c0cc9d11 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -29,6 +29,7 @@ import { type AddMultisigStore, type FormSubmitEvent, Step } from '../lib/types' import { confirmModel } from './confirm-model'; import { formModel } from './form-model'; import { signatoryModel } from './signatory-model'; +import { walletProviderModel } from './wallet-provider-model'; const stepChanged = createEvent(); const feeChanged = createEvent(); @@ -263,6 +264,14 @@ sample({ target: createWalletFx, }); +sample({ + clock: submitModel.output.formSubmitted, + filter: (results) => { + return submitUtils.isSuccessResult(results[0].result); + }, + target: walletProviderModel.events.completed, +}); + sample({ clock: createWalletFx.failData, fn: (error) => error.message, diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx index 9c9242d35c..d7b498b27a 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signatory.tsx @@ -64,7 +64,11 @@ export const Signatory = ({ return acc.concat( wallet.accounts - .filter((account) => (account as ChainAccount).chainId === chain.value.chainId) + .filter( + (account) => + (account as ChainAccount).chainId === undefined || + (account as ChainAccount).chainId === chain.value.chainId, + ) .map((account) => { const address = toAddress(account.accountId, { prefix: chain.value.addressPrefix }); From f0243ca8b6474d5433a2ae335469b123ce180c7c Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 1 Oct 2024 15:30:39 +0100 Subject: [PATCH 73/90] fix: remove unused file --- .../MultisigWallet/FlexibleMultisigWallet.tsx | 125 ------------------ 1 file changed, 125 deletions(-) delete mode 100644 src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx deleted file mode 100644 index e530fc870e..0000000000 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/FlexibleMultisigWallet.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import { useUnit } from 'effector-react'; -import noop from 'lodash/noop'; -import { type ComponentProps, useEffect, useState } from 'react'; - -import { useI18n } from '@app/providers'; -// import { type HexString } from '@/shared/core'; -import { useToggle } from '@shared/lib/hooks'; -import { DEFAULT_TRANSITION } from '@shared/lib/utils'; -import { BaseModal, Button, HeaderTitleText, IconButton } from '@shared/ui'; -import { OperationResult } from '@entities/transaction'; -import { flowModel } from '../../model/flow-model'; - -// import { ConfirmationStep } from './ConfirmationStep'; -import { NameNetworkSelection } from './NameNetworkSelection'; -import { SelectSignatoriesThreshold } from './SelectSignatoriesThreshold'; -// import { type ExtendedContact, type ExtendedWallet } from './common/types'; - -type OperationResultProps = Pick, 'variant' | 'description'>; - -type Props = { - isOpen: boolean; - onClose: () => void; - onComplete: () => void; - onBack: () => void; -}; - -export const MultiChainMultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { - const { t } = useI18n(); - - const error = useUnit(flowModel.$error); - - const [isModalOpen, toggleIsModalOpen] = useToggle(isOpen); - const [isResultModalOpen, toggleResultModal] = useToggle(); - - const [name, setName] = useState(''); - // const [activeStep, setActiveStep] = useState(Step.INIT); - - // const [signatoryWallets, setSignatoryWallets] = useState([]); - // const [signatoryContacts, setSignatoryContacts] = useState([]); - - // const signatories = signatoryWallets.concat(signatoryContacts); - - useEffect(() => { - if (isOpen && !isModalOpen) { - toggleIsModalOpen(); - // flowModel.events.reset(); - setName(''); - } - - if (!isOpen && isModalOpen) { - closeMultisigModal({ closeAll: false }); - } - }, [isOpen]); - - const closeMultisigModal = (params: { complete?: boolean; closeAll?: boolean } = { closeAll: true }) => { - toggleIsModalOpen(); - - setTimeout(params?.complete ? onComplete : params?.closeAll ? onClose : noop, DEFAULT_TRANSITION); - }; - - // const submitHandler = (args: { name: string; threshold: number; creatorId: HexString }) => { - // toggleResultModal(); - // setName(args.name); - - // // createMultisigWalletModel.events.walletCreated(args); - // }; - - const getResultProps = (): OperationResultProps => { - if (error) return { variant: 'error', description: error }; - - // if (isLoading) { - // return { variant: 'loading' }; - // } - - if (error) { - return { variant: 'error', description: error }; - } - - return { variant: 'success', description: t('createMultisigAccount.successMessage') }; - }; - - const modalTitle = ( -
- {t('createMultisigAccount.title')} -
- ); - - return ( - <> - - - -
- closeMultisigModal()} - /> - - {/* Should be before SelectSignatories to avoid hidden nova wallet icon */} - {/* {activeStep === Step.CONFIRMATION && } */} - - -
-
- - closeMultisigModal({ complete: true })} - > - {error && } - - - ); -}; From 9072120928bdd79244e522cc6075491f5a04f097 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 1 Oct 2024 15:37:30 +0100 Subject: [PATCH 74/90] fix: multisig url and prepare Transaction --- .../pages/Basket/lib/prepareTransactions.ts | 26 ------------------- .../multisigs/model/multisigs-model.ts | 5 ++-- src/renderer/shared/core/types/chain.ts | 1 - 3 files changed, 3 insertions(+), 29 deletions(-) diff --git a/src/renderer/pages/Basket/lib/prepareTransactions.ts b/src/renderer/pages/Basket/lib/prepareTransactions.ts index 2dafeafe27..81bc5fd2f0 100644 --- a/src/renderer/pages/Basket/lib/prepareTransactions.ts +++ b/src/renderer/pages/Basket/lib/prepareTransactions.ts @@ -61,7 +61,6 @@ export const prepareTransaction = { prepareDelegateTransaction, prepareRevokeDelegationTransaction, prepareEditDelegationTransaction, - prepareRemarkTransaction, }; async function getTransactionData( @@ -655,28 +654,3 @@ async function prepareRevokeDelegationTransaction({ multisigDeposit: '0', } satisfies RevokeDelegationInput; } - -type RemarkInput = { - chain: Chain; - asset: Asset; - - shards: Account[]; - proxiedAccount?: ProxiedAccount; - signatory?: Account; - remark: string; -}; - -async function prepareRemarkTransaction({ transaction, wallets, chains, apis, feeMap }: DataParams) { - const { chain, account, fee } = await getTransactionData(transaction, feeMap, apis, chains, wallets); - - return { - id: transaction.id, - chain, - asset: chain.assets[0], - shards: [account], - destination: transaction.coreTx.args.dest, - remark: '', - - fee, - } as RemarkInput; -} diff --git a/src/renderer/processes/multisigs/model/multisigs-model.ts b/src/renderer/processes/multisigs/model/multisigs-model.ts index 7d6bec4f54..ac9e3b321d 100644 --- a/src/renderer/processes/multisigs/model/multisigs-model.ts +++ b/src/renderer/processes/multisigs/model/multisigs-model.ts @@ -30,7 +30,8 @@ const multisigSaved = createEvent(); const $multisigChains = combine(networkModel.$chains, (chains) => { return Object.values(chains).filter((chain) => { const isMultisigSupported = multisigUtils.isMultisigSupported(chain); - const hasIndexerUrl = chain.externalApi?.[ExternalType.MULTISIG]?.[0]?.url; + const hasIndexerUrl = + networkUtils.isMultisigSupported(chain.options) && chain.externalApi?.[ExternalType.PROXY]?.[0]?.url; return isMultisigSupported && hasIndexerUrl; }); @@ -49,7 +50,7 @@ type GetMultisigsResult = { const getMultisigsFx = createEffect(({ chains, wallets }: GetMultisigsParams) => { for (const chain of chains) { const accounts = walletUtils.getAccountsBy(wallets, (a) => accountUtils.isChainIdMatch(a, chain.chainId)); - const multisigIndexerUrl = chain.externalApi?.[ExternalType.MULTISIG]?.[0]?.url; + const multisigIndexerUrl = chain.externalApi?.[ExternalType.PROXY]?.[0]?.url; const boundMultisigSaved = scopeBind(multisigSaved, { safe: true }); if (!multisigIndexerUrl || !accounts.length) continue; diff --git a/src/renderer/shared/core/types/chain.ts b/src/renderer/shared/core/types/chain.ts index e809ca8b4f..e4f3045511 100644 --- a/src/renderer/shared/core/types/chain.ts +++ b/src/renderer/shared/core/types/chain.ts @@ -52,7 +52,6 @@ export const enum ExternalType { STAKING = 'staking', CROWDLOANS = 'crowdloans', PROXY = 'proxy', - MULTISIG = 'multisig', DELEGATIONS = 'governance-delegations', } type HistoryType = 'subquery' | 'github'; From 66f0c7a7f0a0263ae7420bf36c703dd3ba747ccb Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 1 Oct 2024 15:40:12 +0100 Subject: [PATCH 75/90] fix: remove remark from basket preparation --- src/renderer/pages/Basket/model/sign-operations-model.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/pages/Basket/model/sign-operations-model.ts b/src/renderer/pages/Basket/model/sign-operations-model.ts index c8ac7ca72e..7f6aeff809 100644 --- a/src/renderer/pages/Basket/model/sign-operations-model.ts +++ b/src/renderer/pages/Basket/model/sign-operations-model.ts @@ -107,6 +107,7 @@ const startDataPreparationFx = createEffect(async ({ transactions, ...preparatio | TransactionType.VOTE | TransactionType.REMOVE_VOTE | TransactionType.REVOTE + | TransactionType.REMARK >, (dataParams: DataParams) => Promise > = { @@ -126,7 +127,6 @@ const startDataPreparationFx = createEffect(async ({ transactions, ...preparatio [TransactionType.DELEGATE]: prepareTransaction.prepareDelegateTransaction, [TransactionType.EDIT_DELEGATION]: prepareTransaction.prepareEditDelegationTransaction, [TransactionType.UNDELEGATE]: prepareTransaction.prepareRevokeDelegationTransaction, - [TransactionType.REMARK]: prepareTransaction.prepareRemarkTransaction, }; if (coreTx.type in TransactionData) { From 03f8933742af5b2e875e3407aa04c6fc30d36d30 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 1 Oct 2024 16:20:56 +0100 Subject: [PATCH 76/90] fix: test --- .../multisigs/model/__tests__/multisigs-model.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/renderer/processes/multisigs/model/__tests__/multisigs-model.test.ts b/src/renderer/processes/multisigs/model/__tests__/multisigs-model.test.ts index 9620c4e166..97e36828de 100644 --- a/src/renderer/processes/multisigs/model/__tests__/multisigs-model.test.ts +++ b/src/renderer/processes/multisigs/model/__tests__/multisigs-model.test.ts @@ -6,6 +6,7 @@ import { ChainType, ConnectionType, CryptoType, + ExternalType, SigningType, WalletType, } from '@shared/core'; @@ -76,7 +77,7 @@ describe('features/multisigs/model/multisigs-model', () => { chainId: '0x01', name: 'Westend', options: [ChainOptions.MULTISIG], - externalApi: { multisig: [{ url: 'http://mock-url' }] }, + externalApi: { [ExternalType.PROXY]: [{ url: 'http://mock-url' }] }, }, }), }); From 9afb2d8ca428edaafd4afa5070789d11d9cc3ca6 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 1 Oct 2024 20:41:15 +0100 Subject: [PATCH 77/90] fix: address comment --- .../MultisigCreationFees.tsx | 103 ++++++++++++++++++ .../shared/api/translation/locales/en.json | 3 + .../widgets/CreateWallet/model/flow-model.ts | 2 +- .../ui/MultisigWallet/ConfirmationStep.tsx | 45 +++----- .../ui/MultisigWallet/MultisigWallet.tsx | 2 +- .../MultisigWallet/NameNetworkSelection.tsx | 12 +- .../SelectSignatoriesThreshold.tsx | 33 ++++-- 7 files changed, 161 insertions(+), 39 deletions(-) create mode 100644 src/renderer/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees.tsx diff --git a/src/renderer/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees.tsx b/src/renderer/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees.tsx new file mode 100644 index 0000000000..7ab61d72df --- /dev/null +++ b/src/renderer/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees.tsx @@ -0,0 +1,103 @@ +import { type ApiPromise } from '@polkadot/api'; +import { BN, BN_ZERO } from '@polkadot/util'; +import { useUnit } from 'effector-react'; +import { memo, useEffect, useMemo, useState } from 'react'; + +import { useI18n } from '@/app/providers'; +import { cnTw } from '@/shared/lib/utils'; +import { DetailRow, FootnoteText, Icon, Tooltip } from '@/shared/ui'; +import { type Asset, type MultisigThreshold, type Transaction } from '@shared/core'; +import { AssetBalance } from '@entities/asset'; +import { priceProviderModel } from '@entities/price'; +import { FeeLoader, transactionService } from '@entities/transaction'; + +type Props = { + api?: ApiPromise; + asset: Asset; + threshold: MultisigThreshold; + className?: string; + onDepositChange?: (deposit: string) => void; + wrapperClassName?: string; + transaction?: Transaction; +}; + +export const MultisigCreationFees = memo( + ({ api, asset, threshold, onDepositChange, wrapperClassName, transaction }: Props) => { + const { t } = useI18n(); + + const fiatFlag = useUnit(priceProviderModel.$fiatFlag); + + const [isNetworkFeeLoading, setIsNetworkFeeLoading] = useState(true); + const [isDepositLoading, setIsDepositLoading] = useState(true); + + const [deposit, setDeposit] = useState(BN_ZERO); + const [networkFee, setNeworkFee] = useState(BN_ZERO); + const fee = useMemo(() => deposit.add(networkFee), [deposit, networkFee]); + const isLoading = useMemo(() => isNetworkFeeLoading || isDepositLoading, [isNetworkFeeLoading, isDepositLoading]); + useEffect(() => { + if (!api) { + return; + } + + setIsDepositLoading(true); + const txDeposit = transactionService.getMultisigDeposit(threshold, api); + + setDeposit(new BN(txDeposit)); + setIsDepositLoading(false); + onDepositChange?.(txDeposit); + }, [threshold, api]); + + useEffect(() => { + if (!api || !transaction) return; + + setIsNetworkFeeLoading(true); + transactionService + .getTransactionFee(transaction, api) + .then((fee) => setNeworkFee(new BN(fee))) + .catch((error) => { + setNeworkFee(BN_ZERO); + console.info('Error getting fee - ', error); + }) + .finally(() => setIsNetworkFeeLoading(false)); + }, []); + + if (isLoading) { + return ; + } + + return ( + + + {t('createMultisigAccount.multisigCreationFeeLabel')} + + +
+ {t('createMultisigAccount.multisigDeposit')} + +
+
+ {t('createMultisigAccount.networkFee')} + +
+
+ } + offsetPx={-70} + > + + + + } + className={cnTw('text-text-primary', wrapperClassName)} + wrapperClassName="w-auto mr-1" + > +
+ +
+ + ); + }, +); diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index 7a723c5c25..d3cc13e2d0 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -114,6 +114,9 @@ } }, "createMultisigAccount": { + "multisigCreationFeeLabel": "Additional costs", + "multisigDeposit": "Multisig deposit:", + "networkFee": "Network fee:", "accountsTab": "Accounts", "addContact": "Add new", "addContactsButton": "Add selected", diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index 40c0cc9d11..7873f87a5b 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -221,7 +221,7 @@ const $fakeTx = combine( return { chainId: chain.chainId, address: toAddress(TEST_ACCOUNTS[0], { prefix: SS58_DEFAULT_PREFIX }), - type: TransactionType.ADD_PROXY, + type: TransactionType.MULTISIG_AS_MULTI, args: { remark: 'Multisig created with Nova Spektr', }, diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx index 3abc1d5cfc..080ef6bae4 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx @@ -2,11 +2,11 @@ import { useForm } from 'effector-forms'; import { useUnit } from 'effector-react'; import { useI18n } from '@app/providers'; -import { type Chain, WalletType } from '@shared/core'; +import { WalletType } from '@shared/core'; import { RootExplorers } from '@shared/lib/utils'; import { BodyText, Button, FootnoteText, SmallTitleText } from '@shared/ui'; +import { MultisigCreationFees } from '@/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees'; import { SignButton } from '@entities/operations'; -import { FeeWithLabel, MultisigDepositWithLabel } from '@entities/transaction'; import { ContactItem, ExplorersPopover } from '@entities/wallet'; import { Step } from '../../lib/types'; import { confirmModel } from '../../model/confirm-model'; @@ -16,11 +16,7 @@ import { signatoryModel } from '../../model/signatory-model'; import { WalletItem } from './components/WalletItem'; -type Props = { - chain?: Chain; -}; - -export const ConfirmationStep = ({ chain }: Props) => { +export const ConfirmationStep = () => { const { t } = useI18n(); const signatoriesMap = useUnit(signatoryModel.$signatories); const signatories = Array.from(signatoriesMap.values()); @@ -28,12 +24,12 @@ export const ConfirmationStep = ({ chain }: Props) => { const signer = useUnit(flowModel.$signer); const signatoriesWithoutSelf = signatories.slice(1); const { - fields: { name, threshold }, + fields: { name, threshold, chain }, } = useForm(formModel.$createMultisigForm); const api = useUnit(flowModel.$api); const fakeTx = useUnit(flowModel.$fakeTx); - const explorers = chain ? chain.explorers : RootExplorers; + const explorers = chain.value ? chain.value.explorers : RootExplorers; return (
@@ -73,29 +69,22 @@ export const ConfirmationStep = ({ chain }: Props) => { )}
-
- - -
- +
+ + +
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx index ee3467c4c8..9580cbf1bf 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx @@ -76,7 +76,7 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { > {isStep(activeStep, Step.NAME_NETWORK) && } {isStep(activeStep, Step.SIGNATORIES_THRESHOLD) && } - {isStep(activeStep, Step.CONFIRM) && } + {isStep(activeStep, Step.CONFIRM) && } {isStep(activeStep, Step.SIGN) && flowModel.events.stepChanged(Step.CONFIRM)} />} ); diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx index 7f434eef0f..91bb73f84f 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx @@ -5,6 +5,7 @@ import { useI18n } from '@app/providers'; import { type Chain } from '@shared/core'; import { Button, FootnoteText, Input, InputHint, Select, SmallTitleText } from '@shared/ui'; import { type DropdownOption } from '@shared/ui/types'; +import { MultisigCreationFees } from '@/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees'; import { ChainTitle } from '@entities/chain'; import { networkModel, networkUtils } from '@entities/network'; import { Step } from '../../lib/types'; @@ -23,11 +24,12 @@ const getChainOptions = (chains: Chain[]): DropdownOption[] => { export const NameNetworkSelection = () => { const { t } = useI18n(); - + const fakeTx = useUnit(flowModel.$fakeTx); const chains = useUnit(networkModel.$chains); const { - fields: { name, chain }, + fields: { name, chain, threshold }, } = useForm(formModel.$createMultisigForm); + const api = useUnit(flowModel.$api); const chainOptions = getChainOptions(Object.values(chains)); const isNameError = name.isTouched && !name.value; @@ -68,6 +70,12 @@ export const NameNetworkSelection = () => {
+ - +
+ + +
From b6b628a7615b0d5802b9aba59df2007f96a3ca93 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 1 Oct 2024 20:47:36 +0100 Subject: [PATCH 78/90] fix: lint --- src/renderer/shared/api/translation/locales/en.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index d3cc13e2d0..83d0389d7d 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -114,9 +114,6 @@ } }, "createMultisigAccount": { - "multisigCreationFeeLabel": "Additional costs", - "multisigDeposit": "Multisig deposit:", - "networkFee": "Network fee:", "accountsTab": "Accounts", "addContact": "Add new", "addContactsButton": "Add selected", @@ -147,6 +144,8 @@ "featureTwo": "Some wallets are not supported", "title": "Multi-chain multisig" }, + "multisigCreationFeeLabel": "Additional costs", + "multisigDeposit": "Multisig deposit:", "multisigExistText": "Multisig account with selected signatories and threshold already exists", "multisigExistTitle": "Account already exists", "multisigStep": "Step { step }", @@ -155,6 +154,7 @@ "nameNetworkDescription": "Select the network and name for your multisig wallet", "namePlaceholder": "Choose wallet name", "networkDescription": "The multisig will only work on this network, if you want to use a different network, you will need to create a new multisig", + "networkFee": "Network fee:", "newMultisigTitle": "New multisig", "noOwnSignatory": "You need at least 1 owned account as part of the signatories", "noOwnSignatoryTitle": "No owned account", From e5fdffa833ce48a296ca6d056379e28269414bf9 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Thu, 3 Oct 2024 10:08:48 +0100 Subject: [PATCH 79/90] fix: filter wallets add fees --- .../multisigs/model/multisigs-model.ts | 6 +++- .../ui/MultisigWallet/ConfirmationStep.tsx | 33 +++++++++++-------- .../ui/MultisigWallet/MultisigWallet.tsx | 2 +- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/renderer/processes/multisigs/model/multisigs-model.ts b/src/renderer/processes/multisigs/model/multisigs-model.ts index ac9e3b321d..97a6ad7542 100644 --- a/src/renderer/processes/multisigs/model/multisigs-model.ts +++ b/src/renderer/processes/multisigs/model/multisigs-model.ts @@ -116,9 +116,13 @@ sample({ (chain) => connections[chain.chainId] && !networkUtils.isDisabledConnection(connections[chain.chainId]), ); + const filteredWallets = walletUtils.getWalletsFilteredAccounts(wallets, { + walletFn: (w) => !walletUtils.isMultisig(w) && !walletUtils.isWatchOnly(w) && !walletUtils.isProxied(w), + }); + return { chains: filteredChains, - wallets, + wallets: filteredWallets || [], }; }, target: getMultisigsFx, diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx index 080ef6bae4..36a9cf2896 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx @@ -5,7 +5,7 @@ import { useI18n } from '@app/providers'; import { WalletType } from '@shared/core'; import { RootExplorers } from '@shared/lib/utils'; import { BodyText, Button, FootnoteText, SmallTitleText } from '@shared/ui'; -import { MultisigCreationFees } from '@/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees'; +import { FeeWithLabel, MultisigDepositWithLabel } from '@/entities/transaction'; import { SignButton } from '@entities/operations'; import { ContactItem, ExplorersPopover } from '@entities/wallet'; import { Step } from '../../lib/types'; @@ -69,22 +69,29 @@ export const ConfirmationStep = () => { )}
+
+ + +
-
- - -
+
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx index 9580cbf1bf..8d14a36471 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx @@ -71,7 +71,7 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { title={modalTitle} isOpen={isModalOpen} contentClass="flex" - panelClass={isStep(activeStep, Step.SIGN) ? 'w-[440px]' : 'w-[784px]'} + panelClass={isStep(activeStep, Step.SIGN) || isStep(activeStep, Step.CONFIRM) ? 'w-[440px]' : 'w-[784px]'} onClose={handleClose} > {isStep(activeStep, Step.NAME_NETWORK) && } From 81b253b824cc3b3f4e0152af023f28c173a50e32 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Thu, 3 Oct 2024 12:07:00 +0100 Subject: [PATCH 80/90] fix: new design --- .../MultisigCreationFees.tsx | 4 +- .../multisigs/model/multisigs-model.ts | 13 +-- .../shared/api/translation/locales/en.json | 3 + .../images/confirm/multisig-creation.svg | 21 +++++ .../shared/ui/Counter/common/constants.ts | 1 + .../shared/ui/Counter/common/types.ts | 2 +- src/renderer/shared/ui/Icon/data/confirm.tsx | 4 + .../ui/MultisigWallet/ConfirmationStep.tsx | 80 ++++++++++--------- 8 files changed, 81 insertions(+), 47 deletions(-) create mode 100644 src/renderer/shared/assets/images/confirm/multisig-creation.svg diff --git a/src/renderer/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees.tsx b/src/renderer/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees.tsx index 7ab61d72df..4cf51829b9 100644 --- a/src/renderer/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees.tsx +++ b/src/renderer/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees.tsx @@ -92,9 +92,9 @@ export const MultisigCreationFees = memo( } className={cnTw('text-text-primary', wrapperClassName)} - wrapperClassName="w-auto mr-1" + wrapperClassName="w-auto mx-4" > -
+
diff --git a/src/renderer/processes/multisigs/model/multisigs-model.ts b/src/renderer/processes/multisigs/model/multisigs-model.ts index 97a6ad7542..d8ff35d54f 100644 --- a/src/renderer/processes/multisigs/model/multisigs-model.ts +++ b/src/renderer/processes/multisigs/model/multisigs-model.ts @@ -49,7 +49,12 @@ type GetMultisigsResult = { const getMultisigsFx = createEffect(({ chains, wallets }: GetMultisigsParams) => { for (const chain of chains) { - const accounts = walletUtils.getAccountsBy(wallets, (a) => accountUtils.isChainIdMatch(a, chain.chainId)); + const filteredWallets = walletUtils.getWalletsFilteredAccounts(wallets, { + walletFn: (w) => !walletUtils.isMultisig(w) && !walletUtils.isWatchOnly(w) && !walletUtils.isProxied(w), + }); + const accounts = walletUtils.getAccountsBy(filteredWallets || [], (a) => + accountUtils.isChainIdMatch(a, chain.chainId), + ); const multisigIndexerUrl = chain.externalApi?.[ExternalType.PROXY]?.[0]?.url; const boundMultisigSaved = scopeBind(multisigSaved, { safe: true }); @@ -116,13 +121,9 @@ sample({ (chain) => connections[chain.chainId] && !networkUtils.isDisabledConnection(connections[chain.chainId]), ); - const filteredWallets = walletUtils.getWalletsFilteredAccounts(wallets, { - walletFn: (w) => !walletUtils.isMultisig(w) && !walletUtils.isWatchOnly(w) && !walletUtils.isProxied(w), - }); - return { chains: filteredChains, - wallets: filteredWallets || [], + wallets, }; }, target: getMultisigsFx, diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index 83d0389d7d..edb1b97102 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -156,6 +156,7 @@ "networkDescription": "The multisig will only work on this network, if you want to use a different network, you will need to create a new multisig", "networkFee": "Network fee:", "newMultisigTitle": "New multisig", + "walletName": "Wallet name", "noOwnSignatory": "You need at least 1 owned account as part of the signatories", "noOwnSignatoryTitle": "No owned account", "noWallets": "Looks like you don't have any non-watch only wallets", @@ -185,8 +186,10 @@ "thresholdDescription": "Set the threshold of signatories required to execute a transaction", "thresholdHint": "Threshold of signatories required to execute a transaction", "thresholdName": "Threshold", + "thresholdOutOf": "{ threshold } out of { signatoriesLength }", "thresholdPlaceholder": "Select threshold", "title": "Create multisig", + "signingWallet": "Signing wallet", "titleOn": "on", "walletFormTitle": "Set up your wallet", "walletNameLabel": "Wallet name", diff --git a/src/renderer/shared/assets/images/confirm/multisig-creation.svg b/src/renderer/shared/assets/images/confirm/multisig-creation.svg new file mode 100644 index 0000000000..f035a7e35f --- /dev/null +++ b/src/renderer/shared/assets/images/confirm/multisig-creation.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/renderer/shared/ui/Counter/common/constants.ts b/src/renderer/shared/ui/Counter/common/constants.ts index 7b9ff760e2..eb8cb5dfb0 100644 --- a/src/renderer/shared/ui/Counter/common/constants.ts +++ b/src/renderer/shared/ui/Counter/common/constants.ts @@ -5,4 +5,5 @@ export const BadgeStyles: Record = { success: 'bg-icon-positive', warn: 'bg-icon-warning', error: 'bg-icon-negative', + neutral: 'bg-icon-accent', }; diff --git a/src/renderer/shared/ui/Counter/common/types.ts b/src/renderer/shared/ui/Counter/common/types.ts index 42c9551766..f5f5304411 100644 --- a/src/renderer/shared/ui/Counter/common/types.ts +++ b/src/renderer/shared/ui/Counter/common/types.ts @@ -1 +1 @@ -export type Variant = 'waiting' | 'success' | 'warn' | 'error'; +export type Variant = 'waiting' | 'success' | 'warn' | 'error' | 'neutral'; diff --git a/src/renderer/shared/ui/Icon/data/confirm.tsx b/src/renderer/shared/ui/Icon/data/confirm.tsx index 313d3daefd..7e47873586 100644 --- a/src/renderer/shared/ui/Icon/data/confirm.tsx +++ b/src/renderer/shared/ui/Icon/data/confirm.tsx @@ -12,6 +12,9 @@ import DelegatedAuthoritiesImg, { import EditDelegationImg, { ReactComponent as EditDelegationSvg, } from '@shared/assets/images/confirm/edit-delegation.svg'; +import MultisigCreationImg, { + ReactComponent as MultisigCreationSvg, +} from '@shared/assets/images/confirm/multisig-creation.svg'; import ReturnToStakeImg, { ReactComponent as ReturnToStakeSvg, } from '@shared/assets/images/confirm/return-to-stake.svg'; @@ -40,6 +43,7 @@ const ConfirmImages = { addDelegationConfirm: { svg: AddDelegationSvg, img: AddDelegationImg }, editDelegationConfirm: { svg: EditDelegationSvg, img: EditDelegationImg }, revokeDelegationConfirm: { svg: RevokeDelegationSvg, img: RevokeDelegationImg }, + multisigCreationConfirm: { svg: MultisigCreationSvg, img: MultisigCreationImg }, } as const; export type Confirm = keyof typeof ConfirmImages; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx index 36a9cf2896..2a29d653d2 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx @@ -4,7 +4,7 @@ import { useUnit } from 'effector-react'; import { useI18n } from '@app/providers'; import { WalletType } from '@shared/core'; import { RootExplorers } from '@shared/lib/utils'; -import { BodyText, Button, FootnoteText, SmallTitleText } from '@shared/ui'; +import { Button, Counter, DetailRow, Icon, Separator, Tooltip } from '@shared/ui'; import { FeeWithLabel, MultisigDepositWithLabel } from '@/entities/transaction'; import { SignButton } from '@entities/operations'; import { ContactItem, ExplorersPopover } from '@entities/wallet'; @@ -22,7 +22,6 @@ export const ConfirmationStep = () => { const signatories = Array.from(signatoriesMap.values()); const signerWallet = useUnit(flowModel.$signerWallet); const signer = useUnit(flowModel.$signer); - const signatoriesWithoutSelf = signatories.slice(1); const { fields: { name, threshold, chain }, } = useForm(formModel.$createMultisigForm); @@ -32,44 +31,49 @@ export const ConfirmationStep = () => { const explorers = chain.value ? chain.value.explorers : RootExplorers; return ( -
+
- {t('createMultisigAccount.newMultisigTitle')} - - - {t('createMultisigAccount.thresholdName')} - - {threshold.value}/{signatories.length} - - - {t('createMultisigAccount.selectedSignatoriesTitle')} -
- {t('createMultisigAccount.walletsTab')} -
    -
  • - -
  • -
- {signatoriesWithoutSelf.length > 0 && ( - <> - - {t('createMultisigAccount.contactsTab')} {signatoriesWithoutSelf.length} - -
    - {signatoriesWithoutSelf.map(({ address, name }) => ( -
  • - } - /> -
  • - ))} -
- - )} +
+
-
+ + {name.value} + + + <> + + {signatories.length} + + ( + } + /> + ))} + offsetPx={-70} + > + + + + + + {t('createMultisigAccount.thresholdOutOf', { + threshold: threshold.value, + signatoriesLength: signatories.length, + })} + + + + + + +
Date: Thu, 3 Oct 2024 12:07:42 +0100 Subject: [PATCH 81/90] fix: lint --- src/renderer/shared/api/translation/locales/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index edb1b97102..e7b090e2a3 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -156,7 +156,6 @@ "networkDescription": "The multisig will only work on this network, if you want to use a different network, you will need to create a new multisig", "networkFee": "Network fee:", "newMultisigTitle": "New multisig", - "walletName": "Wallet name", "noOwnSignatory": "You need at least 1 owned account as part of the signatories", "noOwnSignatoryTitle": "No owned account", "noWallets": "Looks like you don't have any non-watch only wallets", @@ -173,6 +172,7 @@ "signatorySelection": "Choose or paste an address", "signatoryThresholdDescription": "Set the signatory wallet of your flexible multisig and how many need to confirm to execute a valid transaction", "signatoryTitle": "Select signatories", + "signingWallet": "Signing wallet", "signingWith": "Signing with", "singleChain": { "description": "Creation is free, the wallet can work on one network only", @@ -189,9 +189,9 @@ "thresholdOutOf": "{ threshold } out of { signatoriesLength }", "thresholdPlaceholder": "Select threshold", "title": "Create multisig", - "signingWallet": "Signing wallet", "titleOn": "on", "walletFormTitle": "Set up your wallet", + "walletName": "Wallet name", "walletNameLabel": "Wallet name", "walletsTab": "Your wallets", "yourAccounts": "Your accounts" From 48abd9837e06cb8a437aaea6e53d9de0cdd48f66 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Fri, 4 Oct 2024 10:48:11 +0100 Subject: [PATCH 82/90] fix: with modal --- .../ui/MultisigWallet/ConfirmationStep.tsx | 35 +++++++------- .../components/SelectedSignatoriesModal.tsx | 48 +++++++++++++++++++ 2 files changed, 66 insertions(+), 17 deletions(-) create mode 100644 src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectedSignatoriesModal.tsx diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx index 2a29d653d2..76732467a3 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx @@ -2,18 +2,19 @@ import { useForm } from 'effector-forms'; import { useUnit } from 'effector-react'; import { useI18n } from '@app/providers'; +import { useToggle } from '@/shared/lib/hooks'; +import { RootExplorers } from '@/shared/lib/utils'; import { WalletType } from '@shared/core'; -import { RootExplorers } from '@shared/lib/utils'; -import { Button, Counter, DetailRow, Icon, Separator, Tooltip } from '@shared/ui'; +import { Button, Counter, DetailRow, Icon, IconButton, Separator } from '@shared/ui'; import { FeeWithLabel, MultisigDepositWithLabel } from '@/entities/transaction'; import { SignButton } from '@entities/operations'; -import { ContactItem, ExplorersPopover } from '@entities/wallet'; import { Step } from '../../lib/types'; import { confirmModel } from '../../model/confirm-model'; import { flowModel } from '../../model/flow-model'; import { formModel } from '../../model/form-model'; import { signatoryModel } from '../../model/signatory-model'; +import { SelectedSignatoriesModal } from './components/SelectedSignatoriesModal'; import { WalletItem } from './components/WalletItem'; export const ConfirmationStep = () => { @@ -27,7 +28,7 @@ export const ConfirmationStep = () => { } = useForm(formModel.$createMultisigForm); const api = useUnit(flowModel.$api); const fakeTx = useUnit(flowModel.$fakeTx); - + const [isSignatoriesModalOpen, toggleSignatoriesModalOpen] = useToggle(); const explorers = chain.value ? chain.value.explorers : RootExplorers; return ( @@ -44,19 +45,12 @@ export const ConfirmationStep = () => { {signatories.length} - ( - } - /> - ))} - offsetPx={-70} - > - - + @@ -98,6 +92,13 @@ export const ConfirmationStep = () => { />
+
); }; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectedSignatoriesModal.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectedSignatoriesModal.tsx new file mode 100644 index 0000000000..bf5d3d4a12 --- /dev/null +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SelectedSignatoriesModal.tsx @@ -0,0 +1,48 @@ +import { useI18n } from '@app/providers'; +import { type Explorer } from '@/shared/core'; +import { toAccountId } from '@/shared/lib/utils'; +import { BaseModal } from '@shared/ui'; +import { AddressWithExplorers } from '@/entities/wallet'; +import { type SignatoryInfo } from '@/widgets/CreateWallet/lib/types'; + +type Props = { + addressPrefix?: number; + isOpen: boolean; + signatories: Omit[]; + onClose: () => void; + explorers?: Explorer[]; +}; + +export const SelectedSignatoriesModal = ({ isOpen, signatories, onClose, explorers, addressPrefix }: Props) => { + const { t } = useI18n(); + + return ( + +
+
    + {signatories.map(({ address }) => ( +
  • + +
  • + ))} +
+
+
+ ); +}; From 915c924cbf58525f182f7cf161106cdcd0ef2151 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Fri, 4 Oct 2024 10:55:31 +0100 Subject: [PATCH 83/90] fix: move MultisigCreationFees to widgets --- .../CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx | 2 +- .../ui/MultisigWallet/SelectSignatoriesThreshold.tsx | 2 +- .../ui/MultisigWallet/components}/MultisigCreationFees.tsx | 0 .../widgets/CreateWallet/ui/MultisigWallet/components/index.ts | 1 + 4 files changed, 3 insertions(+), 2 deletions(-) rename src/renderer/{entities/transaction/ui/MultisigCreationFees.tsx => widgets/CreateWallet/ui/MultisigWallet/components}/MultisigCreationFees.tsx (100%) diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx index 91bb73f84f..f8caaa7271 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/NameNetworkSelection.tsx @@ -5,9 +5,9 @@ import { useI18n } from '@app/providers'; import { type Chain } from '@shared/core'; import { Button, FootnoteText, Input, InputHint, Select, SmallTitleText } from '@shared/ui'; import { type DropdownOption } from '@shared/ui/types'; -import { MultisigCreationFees } from '@/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees'; import { ChainTitle } from '@entities/chain'; import { networkModel, networkUtils } from '@entities/network'; +import { MultisigCreationFees } from '@/widgets/CreateWallet/ui/MultisigWallet/components/'; import { Step } from '../../lib/types'; import { flowModel } from '../../model/flow-model'; import { formModel } from '../../model/form-model'; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx index 72c75f8de1..357b52e7b1 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx @@ -5,7 +5,7 @@ import { type FormEvent, useState } from 'react'; import { useI18n } from '@app/providers'; import { Alert, Button, InputHint, Select, SmallTitleText } from '@shared/ui'; import { type DropdownOption } from '@shared/ui/types'; -import { MultisigCreationFees } from '@/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees'; +import { MultisigCreationFees } from '@/widgets/CreateWallet/ui/MultisigWallet/components'; import { Step } from '../../lib/types'; import { flowModel } from '../../model/flow-model'; import { formModel } from '../../model/form-model'; diff --git a/src/renderer/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/MultisigCreationFees.tsx similarity index 100% rename from src/renderer/entities/transaction/ui/MultisigCreationFees.tsx/MultisigCreationFees.tsx rename to src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/MultisigCreationFees.tsx diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/index.ts b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/index.ts index f706e37051..b3e943a78d 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/index.ts +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/index.ts @@ -1,2 +1,3 @@ export { SelectSignatories } from './SelectSignatories'; export { WalletItem } from './WalletItem'; +export { MultisigCreationFees } from './MultisigCreationFees'; From eca080e50d924c1b4c9f9b83579d278bb30360f9 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Mon, 7 Oct 2024 15:39:42 +0100 Subject: [PATCH 84/90] fix: add signer selection --- .../shared/api/translation/locales/en.json | 1 + .../widgets/CreateWallet/lib/types.ts | 1 + .../model/__tests__/signatory-model.test.ts | 4 +- .../widgets/CreateWallet/model/flow-model.ts | 33 +++++----- .../CreateWallet/model/signatory-model.ts | 8 +-- .../ui/MultisigWallet/ConfirmationStep.tsx | 12 +++- .../ui/MultisigWallet/MultisigWallet.tsx | 8 ++- .../SelectSignatoriesThreshold.tsx | 27 +++++--- .../components/SignerSelection.tsx | 63 +++++++++++++++++++ 9 files changed, 124 insertions(+), 33 deletions(-) create mode 100644 src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx diff --git a/src/renderer/shared/api/translation/locales/en.json b/src/renderer/shared/api/translation/locales/en.json index 0025ff13aa..4f39cb0368 100644 --- a/src/renderer/shared/api/translation/locales/en.json +++ b/src/renderer/shared/api/translation/locales/en.json @@ -164,6 +164,7 @@ "notEnoughSignatoriesTitle": "Not enough signatories", "ownAccountSelection": "Your account", "searchContactPlaceholder": "Search", + "selectSigner": "Select signer", "selectedSignatoriesTitle": "Selected signatories", "signatoriesDescription": "Add signatories to your multisig account", "signatoriesLabel": "Signatories", diff --git a/src/renderer/widgets/CreateWallet/lib/types.ts b/src/renderer/widgets/CreateWallet/lib/types.ts index e9d2cb3862..d3fce39910 100644 --- a/src/renderer/widgets/CreateWallet/lib/types.ts +++ b/src/renderer/widgets/CreateWallet/lib/types.ts @@ -4,6 +4,7 @@ export const enum Step { NAME_NETWORK, SIGNATORIES_THRESHOLD, CONFIRM, + SIGNER_SELECTION, SIGN, SUBMIT, } diff --git a/src/renderer/widgets/CreateWallet/model/__tests__/signatory-model.test.ts b/src/renderer/widgets/CreateWallet/model/__tests__/signatory-model.test.ts index 70ab6d0d7d..0799d57dbd 100644 --- a/src/renderer/widgets/CreateWallet/model/__tests__/signatory-model.test.ts +++ b/src/renderer/widgets/CreateWallet/model/__tests__/signatory-model.test.ts @@ -63,12 +63,12 @@ describe('widgets/CreateWallet/model/signatory-model', () => { params: { index: 1, name: 'Alice', address: toAddress(signatoryWallet.accounts[0].accountId) }, }); - expect(scope.getState(signatoryModel.$hasOwnSignatory)).toEqual(false); + expect(scope.getState(signatoryModel.$ownedSignatoriesWallets)).toEqual(false); await allSettled(signatoryModel.events.signatoriesChanged, { scope, params: { index: 0, name: 'test', address: toAddress(signerWallet.accounts[0].accountId) }, }); - expect(scope.getState(signatoryModel.$hasOwnSignatory)).toEqual(true); + expect(scope.getState(signatoryModel.$ownedSignatoriesWallets)).toEqual(true); }); }); diff --git a/src/renderer/widgets/CreateWallet/model/flow-model.ts b/src/renderer/widgets/CreateWallet/model/flow-model.ts index 7873f87a5b..7067862ef6 100644 --- a/src/renderer/widgets/CreateWallet/model/flow-model.ts +++ b/src/renderer/widgets/CreateWallet/model/flow-model.ts @@ -4,6 +4,7 @@ import { delay, spread } from 'patronum'; import { type Account, + type AccountId, AccountType, type ChainId, ChainType, @@ -37,6 +38,7 @@ const multisigDepositChanged = createEvent(); const isFeeLoadingChanged = createEvent(); const formSubmitted = createEvent(); const flowFinished = createEvent(); +const signerSelected = createEvent(); const walletCreated = createEvent<{ name: string; @@ -52,24 +54,7 @@ const $wrappedTx = createStore(null).reset(flowFinished); const $coreTx = createStore(null).reset(flowFinished); const $multisigTx = createStore(null).reset(flowFinished); const $addMultisigStore = createStore(null).reset(flowFinished); - -const $signer = combine( - { - signatories: signatoryModel.$signatories, - wallets: walletModel.$wallets, - }, - ({ signatories, wallets }) => { - if (signatories.size === 0) return null; - - const signerAccount = walletUtils.getAccountsBy( - wallets, - (a) => a.accountId === toAccountId(signatories.get(0)!.address), - ); - - return signerAccount[0]; - }, - { skipVoid: false }, -); +const $signer = createStore(null).reset(flowFinished); const $signerWallet = combine( { signer: $signer, wallets: walletModel.$wallets }, @@ -426,6 +411,17 @@ sample({ target: contactModel.effects.createContactsFx, }); +sample({ + clock: signerSelected, + source: { wallets: walletModel.$wallets }, + fn: ({ wallets }, accountId) => { + const signerAccount = walletUtils.getAccountBy(wallets, (a) => a.accountId === accountId); + + return signerAccount; + }, + target: $signer, +}); + sample({ clock: delay(flowFinished, 2000), fn: () => Step.NAME_NETWORK, @@ -452,6 +448,7 @@ export const flowModel = { $signer, $signerWallet, events: { + signerSelected, walletCreated, stepChanged, feeChanged, diff --git a/src/renderer/widgets/CreateWallet/model/signatory-model.ts b/src/renderer/widgets/CreateWallet/model/signatory-model.ts index 3f92bb06f8..ea561ffa82 100644 --- a/src/renderer/widgets/CreateWallet/model/signatory-model.ts +++ b/src/renderer/widgets/CreateWallet/model/signatory-model.ts @@ -9,13 +9,13 @@ const signatoryDeleted = createEvent(); const $signatories = createStore>>(new Map([[0, { name: '', address: '' }]])); -const $hasOwnSignatory = combine( +const $ownedSignatoriesWallets = combine( { wallets: walletModel.$wallets, signatories: $signatories }, ({ wallets, signatories }) => - !!walletUtils.getWalletsFilteredAccounts(wallets, { + walletUtils.getWalletsFilteredAccounts(wallets, { walletFn: (w) => !walletUtils.isWatchOnly(w) && !walletUtils.isMultisig(w), accountFn: (a) => Array.from(signatories.values()).some((s) => toAccountId(s.address) === a.accountId), - })?.length, + }), ); sample({ @@ -47,7 +47,7 @@ sample({ export const signatoryModel = { $signatories, - $hasOwnSignatory, + $ownedSignatoriesWallets, events: { signatoriesChanged, signatoryDeleted, diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx index 76732467a3..1a4f7b5112 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/ConfirmationStep.tsx @@ -30,6 +30,7 @@ export const ConfirmationStep = () => { const fakeTx = useUnit(flowModel.$fakeTx); const [isSignatoriesModalOpen, toggleSignatoriesModalOpen] = useToggle(); const explorers = chain.value ? chain.value.explorers : RootExplorers; + const ownedSignatories = useUnit(signatoryModel.$ownedSignatoriesWallets); return (
@@ -83,7 +84,16 @@ export const ConfirmationStep = () => { />
- { title={modalTitle} isOpen={isModalOpen} contentClass="flex" - panelClass={isStep(activeStep, Step.SIGN) || isStep(activeStep, Step.CONFIRM) ? 'w-[440px]' : 'w-[784px]'} + panelClass={ + isStep(activeStep, Step.SIGN) || isStep(activeStep, Step.CONFIRM) || isStep(activeStep, Step.SIGNER_SELECTION) + ? 'w-[440px]' + : 'w-[784px]' + } onClose={handleClose} > {isStep(activeStep, Step.NAME_NETWORK) && } {isStep(activeStep, Step.SIGNATORIES_THRESHOLD) && } + {isStep(activeStep, Step.SIGNER_SELECTION) && } {isStep(activeStep, Step.CONFIRM) && } {isStep(activeStep, Step.SIGN) && flowModel.events.stepChanged(Step.CONFIRM)} />} diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx index 357b52e7b1..4b00c5eb2d 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/SelectSignatoriesThreshold.tsx @@ -39,12 +39,13 @@ export const SelectSignatoriesThreshold = () => { submit, } = useForm(formModel.$createMultisigForm); const multisigAlreadyExists = useUnit(formModel.$multisigAlreadyExists); - const hasOwnSignatory = useUnit(signatoryModel.$hasOwnSignatory); + const ownedSignatoriesWallets = useUnit(signatoryModel.$ownedSignatoriesWallets); const thresholdOptions = getThresholdOptions(signatories.length - 1); + const hasOwnedSignatory = !!ownedSignatoriesWallets && ownedSignatoriesWallets?.length > 0; const hasEnoughSignatories = signatories.length >= 2; - const canSubmit = hasOwnSignatory && hasEnoughSignatories && !multisigAlreadyExists; + const canSubmit = hasOwnedSignatory && hasEnoughSignatories && !multisigAlreadyExists; const api = useUnit(flowModel.$api); @@ -55,8 +56,15 @@ export const SelectSignatoriesThreshold = () => { if (!canSubmit) return; - event.preventDefault(); - submit(); + if ((ownedSignatoriesWallets || []).length > 1) { + flowModel.events.stepChanged(Step.SIGNER_SELECTION); + + return; + } else { + flowModel.events.signerSelected(ownedSignatoriesWallets[0].accounts[0].accountId); + event.preventDefault(); + submit(); + } }; return ( @@ -71,14 +79,14 @@ export const SelectSignatoriesThreshold = () => {
0} + active={hasClickedNext && !hasOwnedSignatory && signatories.length > 0} title={t('createMultisigAccount.noOwnSignatoryTitle')} variant="error" > {t('createMultisigAccount.noOwnSignatory')} @@ -109,7 +117,12 @@ export const SelectSignatoriesThreshold = () => {
-
diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx new file mode 100644 index 0000000000..d62c41f111 --- /dev/null +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx @@ -0,0 +1,63 @@ +import { useForm } from 'effector-forms'; +import { useUnit } from 'effector-react'; +import { type FormEvent } from 'react'; + +import { useI18n } from '@app/providers'; +import { type AccountId, type ChainAccount } from '@/shared/core'; +import { toAddress } from '@/shared/lib/utils'; +import { Button, SmallTitleText } from '@/shared/ui'; +import { AddressWithName } from '@/entities/wallet'; +import { Step } from '@/widgets/CreateWallet/lib/types'; +import { flowModel } from '@/widgets/CreateWallet/model/flow-model'; +import { formModel } from '@/widgets/CreateWallet/model/form-model'; +import { signatoryModel } from '@/widgets/CreateWallet/model/signatory-model'; + +export const SignerSelection = () => { + const { t } = useI18n(); + const ownedSignatoriesWallets = useUnit(signatoryModel.$ownedSignatoriesWallets) || []; + const { + fields: { chain }, + submit, + } = useForm(formModel.$createMultisigForm); + + const onSubmit = (event: FormEvent, accountId: AccountId) => { + flowModel.events.signerSelected(accountId); + event.preventDefault(); + submit(); + }; + + return ( +
+ {t('createMultisigAccount.selectSigner')} +
    + {ownedSignatoriesWallets.map(({ accounts }) => { + const { accountId, name } = + accounts.find((account) => (account as ChainAccount).chainId === chain.value.chainId) || {}; + if (!accountId) { + return null; + } + + return ( +
  • onSubmit(e, accountId)} + > + +
  • + ); + })} +
+
+ +
+
+ ); +}; From 4225fe498f79eadb4dda86a1b51ba5356c96f77e Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Mon, 7 Oct 2024 16:13:11 +0100 Subject: [PATCH 85/90] fix: tests --- .../widgets/CreateWallet/model/__tests__/flow-model.test.ts | 3 ++- .../CreateWallet/model/__tests__/signatory-model.test.ts | 6 +++--- src/renderer/widgets/CreateWallet/model/signatory-model.ts | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts b/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts index 3df559dff1..6fd2eda144 100644 --- a/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts +++ b/src/renderer/widgets/CreateWallet/model/__tests__/flow-model.test.ts @@ -46,12 +46,13 @@ describe('widgets/CreateWallet/model/form-model', () => { await allSettled(signatoryModel.events.signatoriesChanged, { scope, - params: { index: 0, name: 'test', address: toAddress(signerWallet.accounts[0].accountId) }, + params: { index: 0, name: signerWallet.name, address: toAddress(signerWallet.accounts[0].accountId) }, }); await allSettled(signatoryModel.events.signatoriesChanged, { scope, params: { index: 1, name: 'Alice', address: '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY' }, }); + await allSettled(flowModel.events.signerSelected, { scope, params: signerWallet.accounts[0].accountId }); expect(scope.getState(flowModel.$step)).toEqual(Step.NAME_NETWORK); await allSettled(formModel.$createMultisigForm.fields.chain.onChange, { scope, params: testChain }); diff --git a/src/renderer/widgets/CreateWallet/model/__tests__/signatory-model.test.ts b/src/renderer/widgets/CreateWallet/model/__tests__/signatory-model.test.ts index 0799d57dbd..6254943ca0 100644 --- a/src/renderer/widgets/CreateWallet/model/__tests__/signatory-model.test.ts +++ b/src/renderer/widgets/CreateWallet/model/__tests__/signatory-model.test.ts @@ -53,7 +53,7 @@ describe('widgets/CreateWallet/model/signatory-model', () => { expect(scope.getState(signatoryModel.$signatories).size).toEqual(0); }); - test('should have correct value for $hasOwnSignatory', async () => { + test('should have correct value for $ownSignatoryWallets', async () => { const scope = fork({ values: new Map().set(walletModel.$wallets, [initiatorWallet, signerWallet]), }); @@ -63,12 +63,12 @@ describe('widgets/CreateWallet/model/signatory-model', () => { params: { index: 1, name: 'Alice', address: toAddress(signatoryWallet.accounts[0].accountId) }, }); - expect(scope.getState(signatoryModel.$ownedSignatoriesWallets)).toEqual(false); + expect(scope.getState(signatoryModel.$ownedSignatoriesWallets)?.length).toEqual(0); await allSettled(signatoryModel.events.signatoriesChanged, { scope, params: { index: 0, name: 'test', address: toAddress(signerWallet.accounts[0].accountId) }, }); - expect(scope.getState(signatoryModel.$ownedSignatoriesWallets)).toEqual(true); + expect(scope.getState(signatoryModel.$ownedSignatoriesWallets)?.length).toEqual(1); }); }); diff --git a/src/renderer/widgets/CreateWallet/model/signatory-model.ts b/src/renderer/widgets/CreateWallet/model/signatory-model.ts index ea561ffa82..d5f5006547 100644 --- a/src/renderer/widgets/CreateWallet/model/signatory-model.ts +++ b/src/renderer/widgets/CreateWallet/model/signatory-model.ts @@ -15,7 +15,7 @@ const $ownedSignatoriesWallets = combine( walletUtils.getWalletsFilteredAccounts(wallets, { walletFn: (w) => !walletUtils.isWatchOnly(w) && !walletUtils.isMultisig(w), accountFn: (a) => Array.from(signatories.values()).some((s) => toAccountId(s.address) === a.accountId), - }), + }) || [], ); sample({ From 6df54fd6b91293e44e56538e44c925f61352d56f Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 8 Oct 2024 09:38:00 +0100 Subject: [PATCH 86/90] fix: support showing pv accounts --- .../ui/MultisigWallet/components/SignerSelection.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx index d62c41f111..652487f81d 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx @@ -3,7 +3,7 @@ import { useUnit } from 'effector-react'; import { type FormEvent } from 'react'; import { useI18n } from '@app/providers'; -import { type AccountId, type ChainAccount } from '@/shared/core'; +import { type AccountId, AccountType, type ChainAccount } from '@/shared/core'; import { toAddress } from '@/shared/lib/utils'; import { Button, SmallTitleText } from '@/shared/ui'; import { AddressWithName } from '@/entities/wallet'; @@ -15,6 +15,7 @@ import { signatoryModel } from '@/widgets/CreateWallet/model/signatory-model'; export const SignerSelection = () => { const { t } = useI18n(); const ownedSignatoriesWallets = useUnit(signatoryModel.$ownedSignatoriesWallets) || []; + console.log('ownedSignatoriesWallets', ownedSignatoriesWallets); const { fields: { chain }, submit, @@ -32,7 +33,9 @@ export const SignerSelection = () => {
    {ownedSignatoriesWallets.map(({ accounts }) => { const { accountId, name } = - accounts.find((account) => (account as ChainAccount).chainId === chain.value.chainId) || {}; + accounts[0].type === AccountType.BASE + ? accounts[0] + : accounts.find((account) => (account as ChainAccount).chainId === chain.value.chainId) || {}; if (!accountId) { return null; } From 9e542001e9b805783b52d909d0982781aab7bdb7 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 8 Oct 2024 09:43:48 +0100 Subject: [PATCH 87/90] fix: title on signer selection --- .../CreateWallet/ui/MultisigWallet/MultisigWallet.tsx | 6 ++++-- .../ui/MultisigWallet/components/SignerSelection.tsx | 6 ++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx index 06c77348e0..b0e752b361 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/MultisigWallet.tsx @@ -51,8 +51,10 @@ export const MultisigWallet = ({ isOpen, onClose, onComplete }: Props) => { const modalTitle = (
    - {t('createMultisigAccount.title')} - {createMultisigUtils.isNotFirstStep(activeStep) && ( + {isStep(activeStep, Step.SIGNER_SELECTION) + ? t('createMultisigAccount.selectSigner') + : t('createMultisigAccount.title')} + {createMultisigUtils.isNotFirstStep(activeStep) && !isStep(activeStep, Step.SIGNER_SELECTION) && ( <> {t('createMultisigAccount.titleOn')} { const { t } = useI18n(); const ownedSignatoriesWallets = useUnit(signatoryModel.$ownedSignatoriesWallets) || []; - console.log('ownedSignatoriesWallets', ownedSignatoriesWallets); const { fields: { chain }, submit, @@ -28,8 +27,7 @@ export const SignerSelection = () => { }; return ( -
    - {t('createMultisigAccount.selectSigner')} +
      {ownedSignatoriesWallets.map(({ accounts }) => { const { accountId, name } = From a082863d556b9c0bd28a8e13f5767764986dd78b Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 8 Oct 2024 11:01:45 +0100 Subject: [PATCH 88/90] fix: with asset but only the selected one --- .../balance/hooks/useAssetBalances.ts | 2 + .../entities/balance/hooks/useBalance.ts | 5 +- .../ui/MultisigWallet/components/Signer.tsx | 49 +++++++++++++++++++ .../components/SignerSelection.tsx | 14 ++---- 4 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signer.tsx diff --git a/src/renderer/entities/balance/hooks/useAssetBalances.ts b/src/renderer/entities/balance/hooks/useAssetBalances.ts index 7f68bcccb3..60db00ccf5 100644 --- a/src/renderer/entities/balance/hooks/useAssetBalances.ts +++ b/src/renderer/entities/balance/hooks/useAssetBalances.ts @@ -12,5 +12,7 @@ type Props = { export const useAssetBalances = ({ chainId, accountIds, assetId }: Props): Balance[] => { const balances = useUnit(balanceModel.$balances); + console.log('balances unit', balances); + return balanceUtils.getAssetBalances(balances, accountIds, chainId, assetId); }; diff --git a/src/renderer/entities/balance/hooks/useBalance.ts b/src/renderer/entities/balance/hooks/useBalance.ts index 3df374c936..2afbb84da7 100644 --- a/src/renderer/entities/balance/hooks/useBalance.ts +++ b/src/renderer/entities/balance/hooks/useBalance.ts @@ -8,5 +8,8 @@ type Props = { assetId: string; }; export const useBalance = ({ chainId, accountId, assetId }: Props): Balance | undefined => { - return useAssetBalances({ chainId, accountIds: [accountId], assetId })[0]; + const rest = useAssetBalances({ chainId, accountIds: [accountId], assetId }); + console.log('rest', rest); + + return rest[0]; }; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signer.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signer.tsx new file mode 100644 index 0000000000..950cbf9d07 --- /dev/null +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signer.tsx @@ -0,0 +1,49 @@ +import { BN_ZERO } from '@polkadot/util'; +import { useUnit } from 'effector-react'; +import { type FormEvent } from 'react'; + +import { type AccountId, type Chain } from '@/shared/core'; +import { toAddress, transferableAmount } from '@/shared/lib/utils'; +import { Icon } from '@/shared/ui'; +import { AssetBalance } from '@/entities/asset'; +import { balanceModel, balanceUtils } from '@/entities/balance'; +import { AddressWithName } from '@/entities/wallet'; + +interface Props { + onSubmit: (event: FormEvent, accountId: AccountId) => void; + accountId: AccountId; + name?: string; + chain: Chain; +} + +export const Signer = ({ accountId, name, onSubmit, chain }: Props) => { + // const balance = useBalance({ + // accountId, + // chainId: chain.chainId, + // assetId: asset.assetId.toString(), + // }); + + const balances = useUnit(balanceModel.$balances); + const balance = balanceUtils.getBalance(balances, accountId, chain.chainId, chain.assets[0].assetId.toString()); + + console.log(accountId, chain.chainId, chain.assets[0].assetId.toString()); + console.log('balance', balance); + + return ( +
    • onSubmit(e, accountId)} + > + + {chain.assets[0] && ( + + )} + +
    • + ); +}; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx index d7003b0063..a166d7bdb9 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx @@ -4,14 +4,14 @@ import { type FormEvent } from 'react'; import { useI18n } from '@app/providers'; import { type AccountId, AccountType, type ChainAccount } from '@/shared/core'; -import { toAddress } from '@/shared/lib/utils'; import { Button } from '@/shared/ui'; -import { AddressWithName } from '@/entities/wallet'; import { Step } from '@/widgets/CreateWallet/lib/types'; import { flowModel } from '@/widgets/CreateWallet/model/flow-model'; import { formModel } from '@/widgets/CreateWallet/model/form-model'; import { signatoryModel } from '@/widgets/CreateWallet/model/signatory-model'; +import { Signer } from './Signer'; + export const SignerSelection = () => { const { t } = useI18n(); const ownedSignatoriesWallets = useUnit(signatoryModel.$ownedSignatoriesWallets) || []; @@ -38,15 +38,7 @@ export const SignerSelection = () => { return null; } - return ( -
    • onSubmit(e, accountId)} - > - -
    • - ); + return ; })}
    From 37afac57d4e54814314a57ed451431160600ebb8 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Tue, 8 Oct 2024 13:43:48 +0100 Subject: [PATCH 89/90] fix: sub to wallet balances --- .../balance/hooks/useAssetBalances.ts | 2 -- .../entities/balance/hooks/useBalance.ts | 5 +---- .../ui/MultisigWallet/components/Signer.tsx | 19 ++++++------------- .../components/SignerSelection.tsx | 9 ++++++++- 4 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/renderer/entities/balance/hooks/useAssetBalances.ts b/src/renderer/entities/balance/hooks/useAssetBalances.ts index 60db00ccf5..7f68bcccb3 100644 --- a/src/renderer/entities/balance/hooks/useAssetBalances.ts +++ b/src/renderer/entities/balance/hooks/useAssetBalances.ts @@ -12,7 +12,5 @@ type Props = { export const useAssetBalances = ({ chainId, accountIds, assetId }: Props): Balance[] => { const balances = useUnit(balanceModel.$balances); - console.log('balances unit', balances); - return balanceUtils.getAssetBalances(balances, accountIds, chainId, assetId); }; diff --git a/src/renderer/entities/balance/hooks/useBalance.ts b/src/renderer/entities/balance/hooks/useBalance.ts index 2afbb84da7..3df374c936 100644 --- a/src/renderer/entities/balance/hooks/useBalance.ts +++ b/src/renderer/entities/balance/hooks/useBalance.ts @@ -8,8 +8,5 @@ type Props = { assetId: string; }; export const useBalance = ({ chainId, accountId, assetId }: Props): Balance | undefined => { - const rest = useAssetBalances({ chainId, accountIds: [accountId], assetId }); - console.log('rest', rest); - - return rest[0]; + return useAssetBalances({ chainId, accountIds: [accountId], assetId })[0]; }; diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signer.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signer.tsx index 950cbf9d07..e1f43886f0 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signer.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signer.tsx @@ -1,12 +1,11 @@ import { BN_ZERO } from '@polkadot/util'; -import { useUnit } from 'effector-react'; import { type FormEvent } from 'react'; import { type AccountId, type Chain } from '@/shared/core'; import { toAddress, transferableAmount } from '@/shared/lib/utils'; import { Icon } from '@/shared/ui'; import { AssetBalance } from '@/entities/asset'; -import { balanceModel, balanceUtils } from '@/entities/balance'; +import { useBalance } from '@/entities/balance'; import { AddressWithName } from '@/entities/wallet'; interface Props { @@ -17,17 +16,11 @@ interface Props { } export const Signer = ({ accountId, name, onSubmit, chain }: Props) => { - // const balance = useBalance({ - // accountId, - // chainId: chain.chainId, - // assetId: asset.assetId.toString(), - // }); - - const balances = useUnit(balanceModel.$balances); - const balance = balanceUtils.getBalance(balances, accountId, chain.chainId, chain.assets[0].assetId.toString()); - - console.log(accountId, chain.chainId, chain.assets[0].assetId.toString()); - console.log('balance', balance); + const balance = useBalance({ + accountId, + chainId: chain.chainId, + assetId: chain.assets[0].assetId.toString(), + }); return (
  • { submit, } = useForm(formModel.$createMultisigForm); + useEffect(() => { + for (const ownedSignatoriesWallet of ownedSignatoriesWallets) { + balanceSubModel.events.walletToSubSet(ownedSignatoriesWallet); + } + }, [ownedSignatoriesWallets]); + const onSubmit = (event: FormEvent, accountId: AccountId) => { flowModel.events.signerSelected(accountId); event.preventDefault(); From 23d2b58a5ea4106fe071f29466b170b129f76e9f Mon Sep 17 00:00:00 2001 From: Thibaut Sardan Date: Wed, 9 Oct 2024 10:18:58 +0100 Subject: [PATCH 90/90] fix: wallet icon and name --- .../ui/MultisigWallet/components/Signer.tsx | 20 ++++++++++--------- .../components/SignerSelection.tsx | 15 +++++++++++--- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signer.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signer.tsx index e1f43886f0..3710b2430b 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signer.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/Signer.tsx @@ -1,21 +1,22 @@ import { BN_ZERO } from '@polkadot/util'; import { type FormEvent } from 'react'; -import { type AccountId, type Chain } from '@/shared/core'; -import { toAddress, transferableAmount } from '@/shared/lib/utils'; -import { Icon } from '@/shared/ui'; +import { type AccountId, type Chain, type WalletType } from '@/shared/core'; +import { transferableAmount } from '@/shared/lib/utils'; +import { BodyText, Icon } from '@/shared/ui'; import { AssetBalance } from '@/entities/asset'; import { useBalance } from '@/entities/balance'; -import { AddressWithName } from '@/entities/wallet'; +import { WalletIcon } from '@/entities/wallet'; interface Props { onSubmit: (event: FormEvent, accountId: AccountId) => void; accountId: AccountId; - name?: string; + walletType: WalletType; + walletName?: string; chain: Chain; } -export const Signer = ({ accountId, name, onSubmit, chain }: Props) => { +export const Signer = ({ accountId, walletName, walletType, onSubmit, chain }: Props) => { const balance = useBalance({ accountId, chainId: chain.chainId, @@ -24,16 +25,17 @@ export const Signer = ({ accountId, name, onSubmit, chain }: Props) => { return (
  • onSubmit(e, accountId)} > - + + {walletName} {chain.assets[0] && ( )} diff --git a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx index 51fd82cd76..346b452695 100644 --- a/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx +++ b/src/renderer/widgets/CreateWallet/ui/MultisigWallet/components/SignerSelection.tsx @@ -36,8 +36,8 @@ export const SignerSelection = () => { return (
      - {ownedSignatoriesWallets.map(({ accounts }) => { - const { accountId, name } = + {ownedSignatoriesWallets.map(({ accounts, type, name }) => { + const { accountId } = accounts[0].type === AccountType.BASE ? accounts[0] : accounts.find((account) => (account as ChainAccount).chainId === chain.value.chainId) || {}; @@ -45,7 +45,16 @@ export const SignerSelection = () => { return null; } - return ; + return ( + + ); })}