feat: UI mint integration (#139)

* feat: add base hook for fleekerc721

* feat: add test view for minting using wagmi

* refactor: from hook to context creation

* refactor: work on provider configs

* feat: append mint transaction to mint view

* chore: add comments

* feat: add nfa price estimation

* fix: remove forgotten logs

* fix: repo and branch url creating and variable misspells

* fix: accidently removed yarn.lock file

* fix: misspelled repositores

* chore: add disclaimer comment at mint-test view

* refactor: remove wallet store
This commit is contained in:
Felipe Mendes 2023-02-27 11:57:44 -03:00 committed by GitHub
parent b3b9f30f05
commit b957e87a83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 1662 additions and 749 deletions

View File

@ -20,6 +20,7 @@
"@react-icons/all-files": "^4.1.0",
"@reduxjs/toolkit": "^1.9.1",
"@stitches/react": "^1.2.8",
"abitype": "^0.5.0",
"colorthief": "^2.3.2",
"connectkit": "^1.1.3",
"firebase": "^9.17.1",

View File

@ -1,11 +1,9 @@
import { BrowserRouter, Route, Routes, Navigate } from 'react-router-dom';
import { initializeWallet } from './store';
import { themeGlobals } from '@/theme/globals';
import { Home, Mint } from './views';
import { SVGTestScreen } from './views/svg-test'; // TODO: remove when done
import { ConnectKitButton } from 'connectkit';
initializeWallet();
import { MintTest } from './views/mint-test';
export const App = () => {
themeGlobals();
@ -20,6 +18,7 @@ export const App = () => {
<Route path="/home" element={<Home />} />
<Route path="/mint" element={<Mint />} />
<Route path="/svg" element={<SVGTestScreen />} />
<Route path="/mint-test" element={<MintTest />} />
<Route path="*" element={<Navigate to="/home" />} />
</Routes>
</BrowserRouter>

View File

@ -3,74 +3,76 @@ import { ButtonContent } from './button-content';
import { ButtonSpinner } from './button-spinner';
import { forwardRef } from 'react';
export const Button = forwardRef<ButtonProps, 'button'>((props, ref) => {
const {
isActive,
isLoading,
isDisabled,
spinnerPlacement = 'start',
spinner,
loadingText,
iconSpacing,
topIcon,
bottomIcon,
rightIcon,
leftIcon,
isFullWidth,
children,
...ownProps
} = props;
export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
(props, ref) => {
const {
isActive,
isLoading,
isDisabled,
spinnerPlacement = 'start',
spinner,
loadingText,
iconSpacing,
topIcon,
bottomIcon,
rightIcon,
leftIcon,
isFullWidth,
children,
...ownProps
} = props;
const contentProps = {
rightIcon,
leftIcon,
bottomIcon,
topIcon,
iconSpacing,
children,
};
const contentProps = {
rightIcon,
leftIcon,
bottomIcon,
topIcon,
iconSpacing,
children,
};
return (
<StyledButton
ref={ref}
disabled={isDisabled || isLoading}
data-active={isActive}
data-loading={isLoading}
css={{
width: isFullWidth ? '100%' : undefined,
...(ownProps?.css || {}),
}}
{...ownProps}
>
{isLoading && spinnerPlacement === 'start' && (
<ButtonSpinner
label={loadingText}
placement={spinnerPlacement}
spacing={iconSpacing}
>
{spinner}
</ButtonSpinner>
)}
return (
<StyledButton
ref={ref}
disabled={isDisabled || isLoading}
data-active={isActive}
data-loading={isLoading}
css={{
width: isFullWidth ? '100%' : undefined,
...(ownProps?.css || {}),
}}
{...ownProps}
>
{isLoading && spinnerPlacement === 'start' && (
<ButtonSpinner
label={loadingText}
placement={spinnerPlacement}
spacing={iconSpacing}
>
{spinner}
</ButtonSpinner>
)}
{isLoading ? (
loadingText || (
<span style={{ opacity: 0 }}>
<ButtonContent {...contentProps} />
</span>
)
) : (
<ButtonContent {...contentProps} />
)}
{isLoading ? (
loadingText || (
<span style={{ opacity: 0 }}>
<ButtonContent {...contentProps} />
</span>
)
) : (
<ButtonContent {...contentProps} />
)}
{isLoading && spinnerPlacement === 'end' && (
<ButtonSpinner
label={loadingText}
placement={spinnerPlacement}
spacing={iconSpacing}
>
{spinner}
</ButtonSpinner>
)}
</StyledButton>
);
});
{isLoading && spinnerPlacement === 'end' && (
<ButtonSpinner
label={loadingText}
placement={spinnerPlacement}
spacing={iconSpacing}
>
{spinner}
</ButtonSpinner>
)}
</StyledButton>
);
}
);

7
ui/src/global.d.ts vendored
View File

@ -1,7 +0,0 @@
import { ExternalProvider } from '@ethersproject/providers';
declare global {
interface Window {
ethereum: ExternalProvider;
}
}

View File

@ -1 +1 @@
export * from './use-toast';
export * from './use-transaction-cost';

View File

@ -1,8 +0,0 @@
import { useToast as useToastChakra } from '@chakra-ui/react';
export const useToast = () => {
return useToastChakra({
duration: 3000,
isClosable: true,
});
};

View File

@ -0,0 +1,22 @@
import { useFeeData, useNetwork } from 'wagmi';
import { ethers } from 'ethers';
import { useMemo } from 'react';
export const useTransactionCost = (
value = ethers.BigNumber.from(0),
gasLimit = ethers.BigNumber.from(0)
): [ethers.BigNumber, string, boolean] => {
const { data: feeData } = useFeeData();
const { chain } = useNetwork();
return useMemo(() => {
if (!feeData || !feeData.gasPrice || !chain)
return [ethers.BigNumber.from(0), '', true];
return [
gasLimit.mul(feeData.gasPrice).add(value),
chain.nativeCurrency.symbol,
false,
];
}, [feeData, chain, value, gasLimit]);
};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,175 @@
import {
Address,
useContractWrite,
usePrepareContractWrite,
useWaitForTransaction,
UsePrepareContractWriteConfig,
} from 'wagmi';
import type { Abi as AbiType } from 'abitype';
import { FleekERC721 } from '../contracts';
import { createContext } from '@/utils';
import { useState } from 'react';
/**
* This is a factory to create context factories for contracts write.
* It should be used inside other context factories specific for each
* contract.
*/
const createWriteContractContext = <
TAbi extends EthereumHooks.Abi,
TArgumentsMap extends EthereumHooks.WriteContext.ArgumentsMap,
TFunctionName extends keyof TArgumentsMap & string,
TFunctionArguments extends TArgumentsMap[TFunctionName]
>(
address: string,
abi: TAbi,
functionName: TFunctionName,
name = `WriteContractContext[${functionName}]`,
hookName = `[${functionName}] write contract hook`,
providerName = `Write contract [${functionName}] provider`
) => {
const [InternalProvider, useInternalProvider] = createContext<
EthereumHooks.WriteContext.InternalContextProps<
TAbi,
TArgumentsMap,
TFunctionName,
TFunctionArguments
>
>({
name,
hookName,
providerName,
});
const Provider = ({
children,
config: {
prepare: prepareConfig = {},
transaction: transactionConfig = {},
write: writeConfig = {},
} = {},
}: EthereumHooks.WriteContext.ProviderProps<TFunctionName>) => {
const [args, setArgs] = useState<TFunctionArguments>();
const prepare = usePrepareContractWrite({
address: address as Address,
abi: abi as unknown[],
functionName,
args,
...prepareConfig,
});
const write = useContractWrite({ ...prepare.config, ...writeConfig });
const transaction = useWaitForTransaction({
hash: write.data?.hash,
...transactionConfig,
});
const value = {
functionName,
prepare,
write,
transaction,
setArgs,
};
return <InternalProvider value={value}>{children}</InternalProvider>;
};
return [Provider, useInternalProvider] as const;
};
/**
* React hooks and related to interact with Ethereum.
*/
export const EthereumHooks = {
/**
* Context factory for FleekERC721 write functions.
*/
createFleekERC721WriteContext: <
TFunctionName extends keyof ArgumentsMaps.FleekERC721 & string,
TFunctionArguments extends ArgumentsMaps.FleekERC721[TFunctionName]
>(
functionName: TFunctionName
) => {
return createWriteContractContext<
typeof FleekERC721.abi,
ArgumentsMaps.FleekERC721,
TFunctionName,
TFunctionArguments
>(FleekERC721.address, FleekERC721.abi, functionName);
},
};
/**
* EthereumHooks used typings.
*/
export namespace EthereumHooks {
export type Abi = AbiType | readonly unknown[];
export namespace WriteContext {
export type ArgumentsMap = Record<string, (string | number | boolean)[]>;
export interface InternalContextProps<
TAbi extends Abi,
TArgumentsMap extends ArgumentsMap,
TFunctionName extends keyof TArgumentsMap & string,
TFunctionArguments extends TArgumentsMap[TFunctionName]
> {
functionName: TFunctionName;
prepare: ReturnType<
typeof usePrepareContractWrite<TAbi, TFunctionName, number>
>;
write: ReturnType<
typeof useContractWrite<'prepared', TAbi, TFunctionName>
>;
transaction: ReturnType<typeof useWaitForTransaction>;
setArgs: (args: TFunctionArguments) => void;
}
export interface ProviderConfig<TFunctionName extends string> {
prepare?: Omit<
UsePrepareContractWriteConfig<any, TFunctionName>,
'address' | 'abi' | 'functionName' | 'args'
>;
write?: Omit<
Exclude<Parameters<typeof useContractWrite>[0], undefined>,
'mode' | 'address' | 'abi' | 'functionName' | 'args'
>;
transaction?: Omit<
Exclude<Parameters<typeof useWaitForTransaction>[0], undefined>,
'hash'
>;
}
export interface ProviderProps<TFunctionName extends string> {
children?: React.ReactNode | React.ReactNode[];
config?: ProviderConfig<TFunctionName>;
}
}
}
/**
* Identified types to interact with known contracts using EthereumHooks contexts.
*/
export namespace ArgumentsMaps {
export interface FleekERC721 extends EthereumHooks.WriteContext.ArgumentsMap {
mint: [
string, // address to
string, // string name
string, // string description
string, // string externalURL
string, // string ENS
string, // string commitHash
string, // string gitRepository
string, // string logo
number, // uint24 color
boolean // bool accessPointAutoApproval
];
/**
* TODO: Add other functions arguments as they are needed.
*/
}
}

View File

@ -0,0 +1 @@
export * from './ethereum-hooks';

View File

@ -1,2 +1,3 @@
export * from './ethereum';
export * from './lib';
export * from './hooks';

View File

@ -1,4 +1,4 @@
import { githubActions, Repository, RootState } from '@/store';
import { githubActions, RootState } from '@/store';
import { createAsyncThunk } from '@reduxjs/toolkit';
import { GithubClient } from '../github-client';
@ -16,11 +16,14 @@ export const fetchRepositoriesThunk = createAsyncThunk(
const repositories = await githubClient.fetchRepos(url);
console.log(repositories);
dispatch(
githubActions.setRepositoires(
repositories.map(
(repo: any) => ({ name: repo.name, url: repo.url } as Repository)
)
githubActions.setRepositories(
repositories.map((repo: any) => ({
name: repo.name,
url: repo.html_url,
}))
)
);
} catch (error) {

View File

@ -2,14 +2,9 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { RootState } from '@/store';
import { useAppSelector } from '@/store/hooks';
import * as asyncThunk from './async-thunk';
import { ComboboxItem, DropdownItem } from '@/components';
import { DropdownItem } from '@/components';
import { UserData } from './github-client';
export type Repository = {
name: string;
url: string;
};
export namespace GithubState {
export type Token = string;
@ -25,6 +20,11 @@ export namespace GithubState {
export type UserAndOrganizations = Array<UserData>;
export type Repository = {
name: string;
url: string;
};
export type Repositories = Array<Repository>;
export type Branches = Array<DropdownItem>;
@ -65,9 +65,9 @@ export const githubSlice = createSlice({
state.token = '';
state.state = action.payload;
},
setRepositoires: (
setRepositories: (
state,
action: PayloadAction<GithubState.Repositoires>
action: PayloadAction<GithubState.Repositories>
) => {
state.repositories = action.payload;
state.queryLoading = 'success';

View File

@ -1,2 +1 @@
export * from './wallet';
export * from './github';

View File

@ -1,34 +0,0 @@
import { createAsyncThunk } from '@reduxjs/toolkit';
import { walletActions, WalletState } from '../wallet-slice';
import { RootState } from '@/store/store';
import { Ethereum } from '@/integrations';
export const connect = createAsyncThunk<
void,
Exclude<WalletState.Provider, null>
>('wallet/connect', async (providerName, { dispatch, getState }) => {
if ((getState() as RootState).wallet.state === 'loading') return;
try {
dispatch(walletActions.setState('loading'));
dispatch(walletActions.setProvider(providerName));
const response = await Ethereum.provider[providerName].send(
'eth_requestAccounts',
[]
);
if (Array.isArray(response)) {
const [account] = response;
if (typeof account !== 'string') throw Error('Invalid account type');
dispatch(walletActions.setAccount(account));
return;
}
throw Error('Invalid response type');
} catch (e) {
console.error('Could not connect to Wallet', e);
dispatch(walletActions.setState('disconnected'));
}
});

View File

@ -1 +0,0 @@
export * from './connect';

View File

@ -1,2 +0,0 @@
export * from './wallet-slice';
export * from './utils';

View File

@ -1,18 +0,0 @@
import { Ethereum } from '@/integrations';
import { store } from '../../store';
import { walletActions } from './wallet-slice';
export const initializeWallet = async (): Promise<void> => {
// metamask
try {
const metamask = Ethereum.provider.metamask;
const accounts = await metamask.listAccounts();
if (accounts && accounts.length > 0) {
store.dispatch(walletActions.setAccount(accounts[0]));
}
metamask.on('accountsChanged', (accounts: string[]) => {
store.dispatch(walletActions.setAccount(accounts[0]));
});
store.dispatch(walletActions.setProvider('metamask'));
} catch {}
};

View File

@ -1,64 +0,0 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import * as asyncThunk from './async-thunk';
import { RootState } from '@/store';
import { useAppSelector } from '@/store/hooks';
import { Ethereum } from '@/integrations';
export namespace WalletState {
export type Provider = Ethereum.Providers | null;
export type State = 'disconnected' | 'loading' | 'connected';
export type Account = string;
}
export interface WalletState {
provider: WalletState.Provider;
state: WalletState.State;
account?: WalletState.Account;
}
const initialState: WalletState = {
provider: null,
state: 'disconnected',
account: undefined,
};
export const walletSlice = createSlice({
name: 'wallet',
initialState,
reducers: {
setProvider: (state, action: PayloadAction<WalletState.Provider>) => {
state.provider = action.payload;
},
setAccount: (state, action: PayloadAction<string>) => {
state.state = 'connected';
state.account = action.payload;
},
setState: (
state,
action: PayloadAction<Exclude<WalletState.State, 'connected'>>
) => {
state.state = action.payload;
state.provider = null;
state.account = undefined;
},
disconnect: (state) => {
state.state = 'disconnected';
state.provider = null;
state.account = undefined;
},
},
});
export const walletActions = {
...walletSlice.actions,
...asyncThunk,
};
const selectWalletState = (state: RootState): WalletState => state.wallet;
export const useWalletStore = (): WalletState =>
useAppSelector(selectWalletState);
export default walletSlice.reducer;

View File

@ -1,10 +1,8 @@
import { configureStore } from '@reduxjs/toolkit';
import walletReducer from './features/wallet/wallet-slice';
import githubReducer from './features/github/github-slice';
export const store = configureStore({
reducer: {
wallet: walletReducer,
github: githubReducer,
},
middleware: (getDefaultMiddleware) =>

View File

@ -0,0 +1 @@
export * from './mint-test';

View File

@ -0,0 +1,203 @@
import { Button, Flex } from '@/components';
import { Separator } from '@/components/core/separator.styles';
import { EthereumHooks } from '@/integrations';
import { ConnectKitButton } from 'connectkit';
import { useAccount } from 'wagmi';
/**
* This is an example about how to use the EthereumHooks to create a context for a contract method
*
* TODO: this view must be removed before releasing the app
*/
// We first create a context for a selected contract method
const [MintProvider, useMintContext] =
EthereumHooks.createFleekERC721WriteContext('mint');
const Preparing: React.FC = () => {
// We can check the states of the stage of the contract using the context
const {
prepare: { status: prepareStatus, data: prepareData, error: prepareError },
setArgs,
} = useMintContext();
const handlePrepare = () => {
// `setArgs` will fulfill the arguments used to call the contract method
setArgs([
'0x7ED735b7095C05d78dF169F991f2b7f1A1F1A049',
'App NFT',
'App NFT Description',
'https://appnft.com',
'appnft.eth',
'5843ce0ce03607180d9f0b58d4df048bf8a202c7',
'https://github.com/fleekxyz/non-fungible-apps',
'test-logo',
0x123456,
true,
]);
};
// We can change the UI rendering based on the states
if (prepareStatus !== 'success') {
const isLoading = prepareStatus === 'loading';
return (
<>
{prepareStatus === 'error' && (
<Flex css={{ flexDirection: 'column', gap: '$1' }}>
<h2>Prepare Error:</h2>
<pre>{JSON.stringify(prepareError, null, 2)}</pre>
</Flex>
)}
<Button
onClick={handlePrepare}
isLoading={isLoading}
isDisabled={isLoading}
>
Prepare
</Button>
</>
);
}
return (
<Flex css={{ flexDirection: 'column', gap: '$1' }}>
<h2>Prepare Data:</h2>
<pre>{JSON.stringify(prepareData, null, 2)}</pre>
</Flex>
);
};
const Minting: React.FC = () => {
const {
prepare: { status: prepareStatus },
// In the write key we will have the trigger to call the contract method
write: {
status: mintStatus,
write: mint,
data: mintData,
error: mintError,
},
} = useMintContext();
const handleMint = () => {
// The trigger function will be undefined in case the contract method is not ready to be called
// Preparing the contract method will run a gas estimation and will set the trigger function
// If the gas estimation fails, the trigger function will be undefined
// This may happen for invalid arguments, if the user has no permissions to call the method, etc.
if (mint) mint();
};
if (prepareStatus !== 'success') {
return null;
}
if (mintStatus !== 'success') {
const isLoading = mintStatus === 'loading';
return (
<>
{mintStatus === 'error' && (
<Flex css={{ flexDirection: 'column', gap: '$1' }}>
<h2>Mint Error:</h2>
<pre>{JSON.stringify(mintError, null, 2)}</pre>
</Flex>
)}
<Button isLoading={isLoading} disabled={isLoading} onClick={handleMint}>
Mint!
</Button>
</>
);
}
return (
<Flex css={{ flexDirection: 'column', gap: '$1' }}>
<h2>Mint Data:</h2>
<pre>{JSON.stringify(mintData, null, 2)}</pre>
</Flex>
);
};
const Waiting: React.FC = () => {
const {
write: { status: mintStatus },
transaction: {
status: transactionStatus,
data: transactionData,
error: transactionError,
},
} = useMintContext();
if (mintStatus !== 'success') {
return null;
}
if (transactionStatus !== 'success') {
if (transactionStatus === 'error') {
console.error(transactionError);
return <div>Transaction error</div>;
}
if (transactionStatus === 'loading')
return <div>Waiting for transaction...</div>;
}
return (
<Flex css={{ flexDirection: 'column', gap: '$1' }}>
<h2>Transaction Data:</h2>
<pre>{JSON.stringify(transactionData, null, 2)}</pre>
</Flex>
);
};
const Container: React.FC = () => (
<Flex
css={{
flexDirection: 'column',
gap: '$2',
p: '$2',
'& pre': {
maxHeight: '200px',
overflow: 'auto',
backgroundColor: '#66666666',
},
}}
>
<Preparing />
<Separator />
<Minting />
<Separator />
<Waiting />
</Flex>
);
export const MintTest: React.FC = () => {
const { isConnected } = useAccount();
return (
// The provider must wrap the UI that will use the context
<MintProvider
config={{
// We can setup callbacks for every stage of the process in this config
prepare: {
onSuccess: (data) => {
console.log('Prepared', data);
},
},
write: {
onSuccess: (data) => {
console.log('Mint sent', data);
},
},
transaction: {
onSuccess: (data) => {
console.log('Transaction success', data);
},
},
}}
>
{isConnected ? <Container /> : <ConnectKitButton />}
</MintProvider>
);
};

View File

@ -9,21 +9,48 @@ import {
} from './fields';
import { MintCardHeader } from '../mint-card';
import { useAccount } from 'wagmi';
import { parseColorToNumber } from './form.utils';
export const FormStep = () => {
const { address } = useAccount();
const { prevStep, nextStep } = Stepper.useContext();
const { appName, appDescription, domain } = Mint.useContext();
const {
appName,
appDescription,
domain,
appLogo,
branchName,
commitHash,
ens,
logoColor,
repositoryName,
verifyNFA,
} = Mint.useContext();
const { setArgs } = Mint.useTransactionContext();
//TODO remove once it's integrated with mint function
console.log('address', address);
const handlePrevStep = () => {
prevStep();
const handleNextStep = () => {
if (!address) return console.log('No address was found');
// TODO: we need to make sure all values are correct before
// setting the args otherwise mint may fail
setArgs([
address,
appName,
appDescription,
domain,
ens.value,
commitHash,
`${repositoryName.url}/tree/${branchName.label}`,
appLogo,
parseColorToNumber(logoColor),
verifyNFA,
]);
nextStep();
};
return (
<Card.Container css={{ width: '$107h' }}>
<MintCardHeader title="NFA Details" onClickBack={handlePrevStep} />
<MintCardHeader title="NFA Details" onClickBack={prevStep} />
<Card.Body>
<Grid
css={{
@ -41,7 +68,7 @@ export const FormStep = () => {
disabled={!appName || !appDescription || !domain}
colorScheme="blue"
variant="solid"
onClick={nextStep}
onClick={handleNextStep}
>
Continue
</Button>

View File

@ -27,9 +27,9 @@ export const RepoBranchCommitFields = () => {
}
}, [queryLoading, dispatch]);
const handleBranchChange = (dorpdownOption: DropdownItem) => {
setBranchName(dorpdownOption);
setCommitHash(dorpdownOption.value);
const handleBranchChange = (dropdownOption: DropdownItem) => {
setBranchName(dropdownOption);
setCommitHash(dropdownOption.value);
};
const handleCommitHashChange = (e: React.ChangeEvent<HTMLInputElement>) => {

View File

@ -1,14 +1,10 @@
import { Button, Separator } from '@/components';
import {
githubActions,
Repository as RepositoryType,
useAppDispatch,
} from '@/store';
import { githubActions, GithubState, useAppDispatch } from '@/store';
import { Mint } from '@/views/mint/mint.context';
import { RepoRow } from './github-repository-selection';
type RepositoryProps = {
repository: RepositoryType;
repository: GithubState.Repository;
index: number;
length: number;
};

View File

@ -1,11 +1,12 @@
import { ComboboxItem, DropdownItem } from '@/components';
import { Repository } from '@/store';
import { GithubState } from '@/store';
import { EthereumHooks } from '@/integrations';
import { createContext } from '@/utils';
import { useState } from 'react';
export type MintContext = {
selectedUserOrg: ComboboxItem;
repositoryName: Repository;
repositoryName: GithubState.Repository;
branchName: DropdownItem; //get value from DropdownItem to mint
commitHash: string;
githubStep: number;
@ -16,10 +17,9 @@ export type MintContext = {
ens: DropdownItem;
domain: string;
verifyNFA: boolean;
sucessMint: boolean | undefined;
setGithubStep: (step: number) => void;
setSelectedUserOrg: (userOrg: ComboboxItem) => void;
setRepositoryName: (repo: Repository) => void;
setRepositoryName: (repo: GithubState.Repository) => void;
setBranchName: (branch: DropdownItem) => void;
setCommitHash: (hash: string) => void;
setAppName: (name: string) => void;
@ -29,7 +29,6 @@ export type MintContext = {
setEns: (ens: DropdownItem) => void;
setDomain: (domain: string) => void;
setVerifyNFA: (verify: boolean) => void;
setSucessMint: (sucess: boolean) => void;
};
const [MintProvider, useContext] = createContext<MintContext>({
@ -38,15 +37,19 @@ const [MintProvider, useContext] = createContext<MintContext>({
providerName: 'Mint.Provider',
});
const [TransactionProvider, useTransactionContext] =
EthereumHooks.createFleekERC721WriteContext('mint');
export abstract class Mint {
static readonly useContext = useContext;
static readonly useTransactionContext = useTransactionContext;
static readonly Provider: React.FC<Mint.ProviderProps> = ({ children }) => {
//Github Connection
const [selectedUserOrg, setSelectedUserOrg] = useState({} as ComboboxItem);
const [repositoryName, setRepositoryName] = useState<Repository>(
{} as Repository
);
const [repositoryName, setRepositoryName] =
useState<GithubState.Repository>({} as GithubState.Repository);
const [branchName, setBranchName] = useState({} as DropdownItem);
const [commitHash, setCommitHash] = useState('');
const [githubStep, setGithubStepContext] = useState(1);
@ -60,11 +63,6 @@ export abstract class Mint {
const [domain, setDomain] = useState('');
const [verifyNFA, setVerifyNFA] = useState(true);
//Mint state
//true means it's minted
//false means it's not minted yet
const [sucessMint, setSucessMint] = useState<boolean>(false);
const setGithubStep = (step: number): void => {
if (step > 0 && step <= 3) {
setGithubStepContext(step);
@ -86,7 +84,6 @@ export abstract class Mint {
ens,
domain,
verifyNFA,
sucessMint,
setSelectedUserOrg,
setGithubStep,
setRepositoryName,
@ -99,10 +96,20 @@ export abstract class Mint {
setEns,
setDomain,
setVerifyNFA,
setSucessMint,
}}
>
{children}
<TransactionProvider
config={{
transaction: {
onSuccess: (data) => {
console.log('Successfully minted! what now?', data);
alert('transaction hash: ' + data.transactionHash);
},
},
}}
>
{children}
</TransactionProvider>
</MintProvider>
);
};

View File

@ -10,6 +10,7 @@ type NftCardProps = {
buttonText: string;
leftIconButton?: React.ReactNode;
onClick: () => void;
isLoading: boolean;
};
export const NftCard: React.FC<NftCardProps> = ({
@ -20,6 +21,7 @@ export const NftCard: React.FC<NftCardProps> = ({
buttonText,
leftIconButton,
onClick,
isLoading,
}) => {
const size = '26.5rem';
const { appLogo, logoColor, appName, ens } = Mint.useContext();
@ -50,6 +52,8 @@ export const NftCard: React.FC<NftCardProps> = ({
variant="solid"
onClick={onClick}
leftIcon={leftIconButton}
isLoading={isLoading}
isDisabled={isLoading}
>
{buttonText}
</Button>

View File

@ -1,13 +1,41 @@
import { Icon, IconButton, Stepper } from '@/components';
import { useTransactionCost } from '@/hooks';
import { Mint } from '@/views/mint/mint.context';
import { ethers } from 'ethers';
import { useMemo } from 'react';
import { NftCard } from '../nft-card';
export const MintPreview = () => {
const { prevStep } = Stepper.useContext();
const { setSucessMint } = Mint.useContext();
const {
prepare: { status: prepareStatus, data: prepareData },
write: { status: writeStatus, write },
transaction: { status: transactionStatus },
} = Mint.useTransactionContext();
const [cost, currency, isCostLoading] = useTransactionCost(
prepareData?.request.value,
prepareData?.request.gasLimit
);
//TODO handle error when minting
const message = useMemo(() => {
if (isCostLoading || prepareStatus === 'loading')
return 'Calculating cost...';
const formattedCost = ethers.utils.formatEther(cost).slice(0, 9);
return `Minting this NFA will cost ${formattedCost} ${currency}.`;
}, [prepareData, isCostLoading, prepareStatus]);
const isLoading = useMemo(
() =>
[prepareStatus, writeStatus, transactionStatus].some(
(status) => status === 'loading'
),
[prepareStatus, writeStatus, transactionStatus]
);
return (
<NftCard
title="Mint NFA"
@ -29,11 +57,10 @@ export const MintPreview = () => {
icon={<Icon name="info" />}
/>
}
message="Minting this NFA will cost 0.0008 MATIC."
message={message}
buttonText="Mint NFA"
onClick={() => {
setSucessMint(true);
}}
onClick={write!}
isLoading={isLoading}
/>
);
};

View File

@ -5223,6 +5223,11 @@ abitype@^0.3.0:
resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.3.0.tgz#75150e337d88cc0b2423ed0d3fc36935f139d04c"
integrity sha512-0YokyAV4hKMcy97Pl+6QgZBlBdZJN2llslOs7kiFY+cu7kMlVXDBpxMExfv0krzBCQt2t7hNovpQ3y/zvEm18A==
abitype@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.5.0.tgz#5c04fcbbb34b680bd7f82cbfb351d37fb3543d05"
integrity sha512-xQJ1aEiOmR6TPGF/JKoDZgUCxxpG7t55Zl2cXRdoQv1IndYqyST6pS1c556c4kuaLbkocNstal3hIjXGVygGzw==
abstract-leveldown@~0.12.0, abstract-leveldown@~0.12.1:
version "0.12.4"
resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410"

491
yarn.lock
View File

@ -2,7 +2,7 @@
# yarn lockfile v1
"@ardatan/sync-fetch@0.0.1":
"@ardatan/sync-fetch@^0.0.1":
version "0.0.1"
resolved "https://registry.yarnpkg.com/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz#3385d3feedceb60a896518a1db857ec1e945348f"
integrity sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==
@ -16,13 +16,14 @@
dependencies:
"@babel/highlight" "^7.18.6"
"@babel/generator@^7.18.13", "@babel/generator@^7.20.7":
version "7.20.14"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce"
integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==
"@babel/generator@^7.18.13", "@babel/generator@^7.21.1":
version "7.21.1"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd"
integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==
dependencies:
"@babel/types" "^7.20.7"
"@babel/types" "^7.21.0"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
"@babel/helper-environment-visitor@^7.18.9":
@ -30,13 +31,13 @@
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
"@babel/helper-function-name@^7.19.0":
version "7.19.0"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c"
integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==
"@babel/helper-function-name@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4"
integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==
dependencies:
"@babel/template" "^7.18.10"
"@babel/types" "^7.19.0"
"@babel/template" "^7.20.7"
"@babel/types" "^7.21.0"
"@babel/helper-hoist-variables@^7.18.6":
version "7.18.6"
@ -76,10 +77,10 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/parser@^7.16.8", "@babel/parser@^7.20.13", "@babel/parser@^7.20.7":
version "7.20.15"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89"
integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==
"@babel/parser@^7.16.8", "@babel/parser@^7.20.7", "@babel/parser@^7.21.2":
version "7.21.2"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3"
integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==
"@babel/plugin-syntax-import-assertions@7.20.0":
version "7.20.0"
@ -88,7 +89,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.19.0"
"@babel/template@^7.18.10":
"@babel/template@^7.18.10", "@babel/template@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8"
integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==
@ -98,25 +99,25 @@
"@babel/types" "^7.20.7"
"@babel/traverse@^7.16.8":
version "7.20.13"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473"
integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==
version "7.21.2"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.2.tgz#ac7e1f27658750892e815e60ae90f382a46d8e75"
integrity sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==
dependencies:
"@babel/code-frame" "^7.18.6"
"@babel/generator" "^7.20.7"
"@babel/generator" "^7.21.1"
"@babel/helper-environment-visitor" "^7.18.9"
"@babel/helper-function-name" "^7.19.0"
"@babel/helper-function-name" "^7.21.0"
"@babel/helper-hoist-variables" "^7.18.6"
"@babel/helper-split-export-declaration" "^7.18.6"
"@babel/parser" "^7.20.13"
"@babel/types" "^7.20.7"
"@babel/parser" "^7.21.2"
"@babel/types" "^7.21.2"
debug "^4.1.0"
globals "^11.1.0"
"@babel/types@^7.16.8", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f"
integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==
"@babel/types@^7.16.8", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2":
version "7.21.2"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1"
integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==
dependencies:
"@babel/helper-string-parser" "^7.19.4"
"@babel/helper-validator-identifier" "^7.19.1"
@ -193,188 +194,188 @@
tslib "~2.4.0"
"@graphql-tools/apollo-engine-loader@^7.3.6":
version "7.3.23"
resolved "https://registry.yarnpkg.com/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.3.23.tgz#ecfea6939b6588acbf4e39585e31379ba1246551"
integrity sha512-OGS0fGUeqBn2NNSfDBVIV7mjch6/7M4JCxvA7fpvVUAmdjjnQ6Z/CGyLIH2bv1eNv75gX/Kkj3baI0lwAWzsXw==
version "7.3.26"
resolved "https://registry.yarnpkg.com/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.3.26.tgz#91e54460d5579933e42a2010b8688c3459c245d8"
integrity sha512-h1vfhdJFjnCYn9b5EY1Z91JTF0KB3hHVJNQIsiUV2mpQXZdeOXQoaWeYEKaiI5R6kwBw5PP9B0fv3jfUIG8LyQ==
dependencies:
"@ardatan/sync-fetch" "0.0.1"
"@graphql-tools/utils" "9.2.0"
"@whatwg-node/fetch" "^0.6.0"
"@ardatan/sync-fetch" "^0.0.1"
"@graphql-tools/utils" "^9.2.1"
"@whatwg-node/fetch" "^0.8.0"
tslib "^2.4.0"
"@graphql-tools/batch-execute@8.5.16":
version "8.5.16"
resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.16.tgz#ced188d096906a7fe477708c63304d4e70291013"
integrity sha512-x/gXA6R1Q/qigT5LDesZYemErzFYvBBuTaVgiIJuE2wG6oMV1cln0O35Z7WVQw6H3I4vF7cCG7c7wKSoC+3z4Q==
"@graphql-tools/batch-execute@^8.5.18":
version "8.5.18"
resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.18.tgz#2f0e91cc12e8eed32f14bc814f27c6a498b75e17"
integrity sha512-mNv5bpZMLLwhkmPA6+RP81A6u3KF4CSKLf3VX9hbomOkQR4db8pNs8BOvpZU54wKsUzMzdlws/2g/Dabyb2Vsg==
dependencies:
"@graphql-tools/utils" "9.2.0"
dataloader "2.1.0"
"@graphql-tools/utils" "9.2.1"
dataloader "2.2.2"
tslib "^2.4.0"
value-or-promise "1.0.12"
"@graphql-tools/code-file-loader@^7.3.13":
version "7.3.18"
resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-7.3.18.tgz#fba541ebe58cda6c0913f693cbc8ec75a4a0f97d"
integrity sha512-DK0YjsJWKkLF6HQYuuqiDwMr9rwRojm8yR/T+J8vXCOR4ndYa1EvUm9wRHPhxHVOYeptO2u+APoWNEhuMN9Hbw==
version "7.3.21"
resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-7.3.21.tgz#3eed4ff4610cf0a6f4b1be17d0bce1eec9359479"
integrity sha512-dj+OLnz1b8SYkXcuiy0CUQ25DWnOEyandDlOcdBqU3WVwh5EEVbn0oXUYm90fDlq2/uut00OrtC5Wpyhi3tAvA==
dependencies:
"@graphql-tools/graphql-tag-pluck" "7.4.4"
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/graphql-tag-pluck" "7.5.0"
"@graphql-tools/utils" "9.2.1"
globby "^11.0.3"
tslib "^2.4.0"
unixify "^1.0.0"
"@graphql-tools/delegate@9.0.25":
version "9.0.25"
resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-9.0.25.tgz#bdfdb6cba67e4c01993c0545733b3d00563f6c1f"
integrity sha512-M7DMrPx8uEjXUshkki0ufcL//9Dj12eR3vykvteFB6odYL9cX5dhZC9l1D2IdQRuHzLMskhkhRtfnXRoa82KTA==
"@graphql-tools/delegate@9.0.28", "@graphql-tools/delegate@^9.0.27":
version "9.0.28"
resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-9.0.28.tgz#026275094b2ff3f4cbbe99caff2d48775aeb67d6"
integrity sha512-8j23JCs2mgXqnp+5K0v4J3QBQU/5sXd9miaLvMfRf/6963DznOXTECyS9Gcvj1VEeR5CXIw6+aX/BvRDKDdN1g==
dependencies:
"@graphql-tools/batch-execute" "8.5.16"
"@graphql-tools/executor" "0.0.13"
"@graphql-tools/schema" "9.0.15"
"@graphql-tools/utils" "9.2.0"
dataloader "2.1.0"
tslib "~2.5.0"
value-or-promise "1.0.12"
"@graphql-tools/batch-execute" "^8.5.18"
"@graphql-tools/executor" "^0.0.15"
"@graphql-tools/schema" "^9.0.16"
"@graphql-tools/utils" "^9.2.1"
dataloader "^2.2.2"
tslib "^2.5.0"
value-or-promise "^1.0.12"
"@graphql-tools/executor-graphql-ws@0.0.9":
version "0.0.9"
resolved "https://registry.yarnpkg.com/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.9.tgz#ba709b38ec7e83d7a0d4c2b5b9d6bc925907a030"
integrity sha512-S323OGzc8TQHOw8n7pFSl1+oG5pzhQhXRmgW6sAvA1F79FLjQ95TltEa6jSH7Jqw+tZobMyylJ13CQ1zFDjBPg==
"@graphql-tools/executor-graphql-ws@^0.0.11":
version "0.0.11"
resolved "https://registry.yarnpkg.com/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.11.tgz#c6536aa862f76a9c7ac83e7e07fe8d5119e6de38"
integrity sha512-muRj6j897ks2iKqe3HchWFFzd+jFInSRuLPvHJ7e4WPrejFvaZx3BQ9gndfJvVkfYUZIFm13stCGXaJJTbVM0Q==
dependencies:
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/utils" "9.2.1"
"@repeaterjs/repeater" "3.0.4"
"@types/ws" "^8.0.0"
graphql-ws "5.11.3"
isomorphic-ws "5.0.0"
tslib "^2.4.0"
ws "8.12.0"
ws "8.12.1"
"@graphql-tools/executor-http@0.1.4":
version "0.1.4"
resolved "https://registry.yarnpkg.com/@graphql-tools/executor-http/-/executor-http-0.1.4.tgz#350f498c9516c75a8093ef34438dc53eadd5f669"
integrity sha512-6NGxLA9Z/cSOLExxfgddXqoS9JHr0QzvC4YmrjeMz533eW/SDnCf+4803PxkLi0j5CUTUPBnt9hC79l1AD2rZQ==
"@graphql-tools/executor-http@^0.1.7":
version "0.1.9"
resolved "https://registry.yarnpkg.com/@graphql-tools/executor-http/-/executor-http-0.1.9.tgz#ddd74ef376b4a2ed59c622acbcca068890854a30"
integrity sha512-tNzMt5qc1ptlHKfpSv9wVBVKCZ7gks6Yb/JcYJluxZIT4qRV+TtOFjpptfBU63usgrGVOVcGjzWc/mt7KhmmpQ==
dependencies:
"@graphql-tools/utils" "9.2.0"
"@repeaterjs/repeater" "3.0.4"
"@whatwg-node/fetch" "0.6.5"
dset "3.1.2"
"@graphql-tools/utils" "^9.2.1"
"@repeaterjs/repeater" "^3.0.4"
"@whatwg-node/fetch" "^0.8.1"
dset "^3.1.2"
extract-files "^11.0.0"
meros "1.2.1"
meros "^1.2.1"
tslib "^2.4.0"
value-or-promise "1.0.12"
value-or-promise "^1.0.12"
"@graphql-tools/executor-legacy-ws@0.0.7":
version "0.0.7"
resolved "https://registry.yarnpkg.com/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.7.tgz#d3d6255ab0b6f6b8487adbda70c2711fdb4f5ac4"
integrity sha512-tSBJE/uv/r0iQjsU16QZkRLLCT0cmVWPqn8NVuAp3yqEeYlU7bzf38L4wNYTn46OHIYElFxXBFsGgMdyvrQLzg==
"@graphql-tools/executor-legacy-ws@^0.0.9":
version "0.0.9"
resolved "https://registry.yarnpkg.com/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.9.tgz#1ff517998f750af2be9c1dae8924665a136e4986"
integrity sha512-L7oDv7R5yoXzMH+KLKDB2WHVijfVW4dB2H+Ae1RdW3MFvwbYjhnIB6QzHqKEqksjp/FndtxZkbuTIuAOsYGTYw==
dependencies:
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/utils" "9.2.1"
"@types/ws" "^8.0.0"
isomorphic-ws "5.0.0"
tslib "^2.4.0"
ws "8.12.0"
ws "8.12.1"
"@graphql-tools/executor@0.0.13":
version "0.0.13"
resolved "https://registry.yarnpkg.com/@graphql-tools/executor/-/executor-0.0.13.tgz#29bc084d273822f1189bce5b64cfdae0c89bc333"
integrity sha512-bZ7QdUV5URLCjD/WuDkvyROYoDVoueTN5W1PatkcN949lwIwEKXUW6y3gRSpiZjXw8IH4/NmN3xPk10OT1emRw==
"@graphql-tools/executor@^0.0.15":
version "0.0.15"
resolved "https://registry.yarnpkg.com/@graphql-tools/executor/-/executor-0.0.15.tgz#cbd29af2ec54213a52f6c516a7792b3e626a4c49"
integrity sha512-6U7QLZT8cEUxAMXDP4xXVplLi6RBwx7ih7TevlBto66A/qFp3PDb6o/VFo07yBKozr8PGMZ4jMfEWBGxmbGdxA==
dependencies:
"@graphql-tools/utils" "9.2.0"
"@graphql-typed-document-node/core" "3.1.1"
"@graphql-tools/utils" "9.2.1"
"@graphql-typed-document-node/core" "3.1.2"
"@repeaterjs/repeater" "3.0.4"
tslib "^2.4.0"
value-or-promise "1.0.12"
"@graphql-tools/git-loader@^7.2.13":
version "7.2.17"
resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-7.2.17.tgz#34ecfce400da0c7b66b3f9abd9641c3724714698"
integrity sha512-VbJQEgjy3oH0IQvkCJFKsIatep9Qv8mToBf0QSMXvS9fZkLM5wwTM4KPtw0Loim/1BAAnomBpHy6I4kiwqYU4A==
version "7.2.20"
resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-7.2.20.tgz#b17917c89be961c272bfbf205dcf32287247494b"
integrity sha512-D/3uwTzlXxG50HI8BEixqirT4xiUp6AesTdfotRXAs2d4CT9wC6yuIWOHkSBqgI1cwKWZb6KXZr467YPS5ob1w==
dependencies:
"@graphql-tools/graphql-tag-pluck" "7.4.4"
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/graphql-tag-pluck" "7.5.0"
"@graphql-tools/utils" "9.2.1"
is-glob "4.0.3"
micromatch "^4.0.4"
tslib "^2.4.0"
unixify "^1.0.0"
"@graphql-tools/github-loader@^7.3.20":
version "7.3.24"
resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-7.3.24.tgz#3bfbb0480d79acefb7d496c2afb681658ed15a2d"
integrity sha512-URlH4tJFk/a97tIFTzAZuQTiFiQrwKjr0fKGohbyKMMycBf82XZ6F199PZP3GtigNmzTqV/vTkf1VLTJU97jRw==
version "7.3.27"
resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-7.3.27.tgz#77a2fbaeb7bf5f8edc4a865252ecb527a5399e01"
integrity sha512-fFFC35qenyhjb8pfcYXKknAt0CXP5CkQYtLfJXgTXSgBjIsfAVMrqxQ/Y0ejeM19XNF/C3VWJ7rE308yOX6ywA==
dependencies:
"@ardatan/sync-fetch" "0.0.1"
"@graphql-tools/graphql-tag-pluck" "7.4.4"
"@graphql-tools/utils" "9.2.0"
"@whatwg-node/fetch" "^0.6.0"
"@ardatan/sync-fetch" "^0.0.1"
"@graphql-tools/graphql-tag-pluck" "^7.4.6"
"@graphql-tools/utils" "^9.2.1"
"@whatwg-node/fetch" "^0.8.0"
tslib "^2.4.0"
"@graphql-tools/graphql-file-loader@^7.3.7", "@graphql-tools/graphql-file-loader@^7.5.0":
version "7.5.15"
resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.15.tgz#60b94400bbcb9b285a4434aa91186b8ad97bd6df"
integrity sha512-K6yOfKkQdXQRBl+UY4FzGdoSzGG09GLPZv4q7OFp8do16CXhaxAI+kmJvsvrutSyBfLETPTkCHtzFmdRmTeLpg==
version "7.5.16"
resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.16.tgz#d954b25ee14c6421ddcef43f4320a82e9800cb23"
integrity sha512-lK1N3Y2I634FS12nd4bu7oAJbai3bUc28yeX+boT+C83KTO4ujGHm+6hPC8X/FRGwhKOnZBxUM7I5nvb3HiUxw==
dependencies:
"@graphql-tools/import" "6.7.16"
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/import" "6.7.17"
"@graphql-tools/utils" "9.2.1"
globby "^11.0.3"
tslib "^2.4.0"
unixify "^1.0.0"
"@graphql-tools/graphql-tag-pluck@7.4.4":
version "7.4.4"
resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.4.4.tgz#16f8f7c5c5579f98106c58473b65806f2839da8a"
integrity sha512-yHIEcapR/kVSrn4W4Nf3FYpJKPcoGvJbdbye8TnW3dD5GkG4UqVnKuyqFvQPOhgqXKbloFZqUhNqEuyqxqIPRw==
"@graphql-tools/graphql-tag-pluck@7.5.0", "@graphql-tools/graphql-tag-pluck@^7.4.6":
version "7.5.0"
resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.5.0.tgz#be99bc6b5e8331a2379ab4585d71b057eb981497"
integrity sha512-76SYzhSlH50ZWkhWH6OI94qrxa8Ww1ZeOU04MdtpSeQZVT2rjGWeTb3xM3kjTVWQJsr/YJBhDeNPGlwNUWfX4Q==
dependencies:
"@babel/parser" "^7.16.8"
"@babel/plugin-syntax-import-assertions" "7.20.0"
"@babel/traverse" "^7.16.8"
"@babel/types" "^7.16.8"
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/utils" "9.2.1"
tslib "^2.4.0"
"@graphql-tools/import@6.7.16":
version "6.7.16"
resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.7.16.tgz#5383db75b8fd173788d1c307084cdc6fcf0d8880"
integrity sha512-m07u+8YsBtKg5w5BG04KFTd59PCAPMAy5Dv/NlR4zCiH/Zbpy5PoetokCZKDrFHYUzjPlm8r//vfCG+JTvHw7g==
"@graphql-tools/import@6.7.17":
version "6.7.17"
resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.7.17.tgz#ab51ed08bcbf757f952abf3f40793ce3db42d4a3"
integrity sha512-bn9SgrECXq3WIasgNP7ful/uON51wBajPXtxdY+z/ce7jLWaFE6lzwTDB/GAgiZ+jo7nb0ravlxteSAz2qZmuA==
dependencies:
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/utils" "9.2.1"
resolve-from "5.0.0"
tslib "^2.4.0"
"@graphql-tools/json-file-loader@^7.3.7", "@graphql-tools/json-file-loader@^7.4.1":
version "7.4.16"
resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-7.4.16.tgz#f2ca1e162ddee1424b39078c74c14b6bd9d177bf"
integrity sha512-9MsqpwIrCx0l880V0dud01DhkwYwqCIlZlCA3bN+TExWa9U3aZhyPO/5BWQU6W52wKk61TvyN6agUa+f4R7jVQ==
version "7.4.17"
resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-7.4.17.tgz#3f08e74ab1a3534c02dc97875acc7f15aa460011"
integrity sha512-KOSTP43nwjPfXgas90rLHAFgbcSep4nmiYyR9xRVz4ZAmw8VYHcKhOLTSGylCAzi7KUfyBXajoW+6Z7dQwdn3g==
dependencies:
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/utils" "9.2.1"
globby "^11.0.3"
tslib "^2.4.0"
unixify "^1.0.0"
"@graphql-tools/load@^7.5.5", "@graphql-tools/load@^7.8.0":
version "7.8.11"
resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-7.8.11.tgz#b9026dd15729dec1e4c318c67d0d3036b583fd1f"
integrity sha512-pVn3fYP/qZ3m2NE86gSexyZpEmvTSUe+OIRfWBM60a4L/SycMxgVfYB5+PyDCzruFZg/didIG3v7RfPlZ7zNTQ==
version "7.8.12"
resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-7.8.12.tgz#6457fe6ec8cd2e2b5ca0d2752464bc937d186cca"
integrity sha512-JwxgNS2c6i6oIdKttcbXns/lpKiyN7c6/MkkrJ9x2QE9rXk5HOhSJxRvPmOueCuAin1542xUrcDRGBXJ7thSig==
dependencies:
"@graphql-tools/schema" "9.0.15"
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/schema" "9.0.16"
"@graphql-tools/utils" "9.2.1"
p-limit "3.1.0"
tslib "^2.4.0"
"@graphql-tools/merge@8.3.17", "@graphql-tools/merge@^8.2.6":
version "8.3.17"
resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.17.tgz#d7e184a296eb455c1550ab95991c5a2f68ea16a4"
integrity sha512-CLzz49lc6BavPhH9gPRm0sJeNA7kC/tF/jLUTQsyef6xj82Jw3rqIJ9PE+bk1cqPCOG01WLOfquBu445OMDO2g==
"@graphql-tools/merge@8.3.18", "@graphql-tools/merge@^8.2.6":
version "8.3.18"
resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.18.tgz#bfbb517c68598a885809f16ce5c3bb1ebb8f04a2"
integrity sha512-R8nBglvRWPAyLpZL/f3lxsY7wjnAeE0l056zHhcO/CgpvK76KYUt9oEkR05i8Hmt8DLRycBN0FiotJ0yDQWTVA==
dependencies:
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/utils" "9.2.1"
tslib "^2.4.0"
"@graphql-tools/prisma-loader@^7.2.49":
version "7.2.60"
resolved "https://registry.yarnpkg.com/@graphql-tools/prisma-loader/-/prisma-loader-7.2.60.tgz#333138cb9ba2bfef1132cbf4b90003f3aa669069"
integrity sha512-6C/Hicwu/luLlaIqSud3YHJ1HbrIsZ0jHfxWju9aWs3dJLSwRv8Lgw1eHSoWFDEZjc+zNETYNe9GgUwt4BBZzQ==
version "7.2.64"
resolved "https://registry.yarnpkg.com/@graphql-tools/prisma-loader/-/prisma-loader-7.2.64.tgz#e9fc85054b15a22a16c8e69ad4f9543da30c0164"
integrity sha512-W8GfzfBKiBSIEgw+/nJk6zUlF6k/jterlNoFhM27mBsbeMtWxKnm1+gEU6KA0N1PNEdq2RIa2W4AfVfVBl2GgQ==
dependencies:
"@graphql-tools/url-loader" "7.17.9"
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/url-loader" "7.17.13"
"@graphql-tools/utils" "9.2.1"
"@types/js-yaml" "^4.0.0"
"@types/json-stable-stringify" "^1.0.32"
"@types/jsonwebtoken" "^9.0.0"
@ -393,58 +394,58 @@
tslib "^2.4.0"
yaml-ast-parser "^0.0.43"
"@graphql-tools/schema@9.0.15", "@graphql-tools/schema@^9.0.0":
version "9.0.15"
resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-9.0.15.tgz#6632765e0281a6c890c7ea6865f13c10bc98fc1b"
integrity sha512-p2DbpkOBcsi+yCEjwoS+r4pJ5z+3JjlJdhbPkCwC4q8lGf5r93dVYrExOrqGKTU5kxLXI/mxabSxcunjNIsDIg==
"@graphql-tools/schema@9.0.16", "@graphql-tools/schema@^9.0.0", "@graphql-tools/schema@^9.0.16":
version "9.0.16"
resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-9.0.16.tgz#7d340d69e6094dc01a2b9e625c7bb4fff89ea521"
integrity sha512-kF+tbYPPf/6K2aHG3e1SWIbapDLQaqnIHVRG6ow3onkFoowwtKszvUyOASL6Krcv2x9bIMvd1UkvRf9OaoROQQ==
dependencies:
"@graphql-tools/merge" "8.3.17"
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/merge" "8.3.18"
"@graphql-tools/utils" "9.2.1"
tslib "^2.4.0"
value-or-promise "1.0.12"
"@graphql-tools/url-loader@7.17.9", "@graphql-tools/url-loader@^7.13.2", "@graphql-tools/url-loader@^7.9.7":
version "7.17.9"
resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-7.17.9.tgz#5a79a3bce2926f72f1e4c6ee7ed8a3312454d39b"
integrity sha512-qAXQ9Tr/Am2hEelGVLCfO/YOyCMzCd4FyWMRRqcoMYIaK91arIb5X13pgILD28SUN+6H3NDsx7fgq/Z/OhwGrQ==
"@graphql-tools/url-loader@7.17.13", "@graphql-tools/url-loader@^7.13.2", "@graphql-tools/url-loader@^7.9.7":
version "7.17.13"
resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-7.17.13.tgz#d4ee8193792ab1c42db2fbdf5f6ca75fa819ac40"
integrity sha512-FEmbvw68kxeZLn4VYGAl+NuBPk09ZnxymjW07A6mCtiDayFgYfHdWeRzXn/iM5PzsEuCD73R1sExtNQ/ISiajg==
dependencies:
"@ardatan/sync-fetch" "0.0.1"
"@graphql-tools/delegate" "9.0.25"
"@graphql-tools/executor-graphql-ws" "0.0.9"
"@graphql-tools/executor-http" "0.1.4"
"@graphql-tools/executor-legacy-ws" "0.0.7"
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/wrap" "9.3.4"
"@ardatan/sync-fetch" "^0.0.1"
"@graphql-tools/delegate" "^9.0.27"
"@graphql-tools/executor-graphql-ws" "^0.0.11"
"@graphql-tools/executor-http" "^0.1.7"
"@graphql-tools/executor-legacy-ws" "^0.0.9"
"@graphql-tools/utils" "^9.2.1"
"@graphql-tools/wrap" "^9.3.6"
"@types/ws" "^8.0.0"
"@whatwg-node/fetch" "^0.6.0"
isomorphic-ws "5.0.0"
"@whatwg-node/fetch" "^0.8.0"
isomorphic-ws "^5.0.0"
tslib "^2.4.0"
value-or-promise "^1.0.11"
ws "8.12.0"
ws "^8.12.0"
"@graphql-tools/utils@9.2.0", "@graphql-tools/utils@^9.0.0", "@graphql-tools/utils@^9.1.1":
version "9.2.0"
resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-9.2.0.tgz#d74d0376231c0e8bf897a715fafaf53d0f6bf06c"
integrity sha512-s3lEG1iYkyYEnKCWrIFECX3XH2wmZvbg6Ir3udCvIDynq+ydaO7JQXobclpPtwSJtjlS353haF//6V7mnBQ4bg==
"@graphql-tools/utils@9.2.1", "@graphql-tools/utils@^9.0.0", "@graphql-tools/utils@^9.1.1", "@graphql-tools/utils@^9.2.1":
version "9.2.1"
resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-9.2.1.tgz#1b3df0ef166cfa3eae706e3518b17d5922721c57"
integrity sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==
dependencies:
"@graphql-typed-document-node/core" "^3.1.1"
tslib "^2.4.0"
"@graphql-tools/wrap@9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-9.3.4.tgz#67c1e78ac22a076dbe4be60bf716dec2c39d2102"
integrity sha512-MJY6lZqi+j96izjOYOLk5fys34oiLt7U34SQ4Wd6V/sy1utVMbh2H7XiZAuDJ38JIKmr72qN7kLgNcnNOxXjHQ==
"@graphql-tools/wrap@^9.3.6":
version "9.3.7"
resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-9.3.7.tgz#97d7efdb8dfee41624e154b2de4499397634422e"
integrity sha512-gavfiWLKgvmC2VPamnMzml3zmkBoo0yt+EmOLIHY6O92o4uMTR281WGM77tZIfq+jzLtjoIOThUSjC/cN/6XKg==
dependencies:
"@graphql-tools/delegate" "9.0.25"
"@graphql-tools/schema" "9.0.15"
"@graphql-tools/utils" "9.2.0"
"@graphql-tools/delegate" "9.0.28"
"@graphql-tools/schema" "9.0.16"
"@graphql-tools/utils" "9.2.1"
tslib "^2.4.0"
value-or-promise "1.0.12"
"@graphql-typed-document-node/core@3.1.1", "@graphql-typed-document-node/core@^3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052"
integrity sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==
"@graphql-typed-document-node/core@3.1.2", "@graphql-typed-document-node/core@^3.1.1":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.2.tgz#6fc464307cbe3c8ca5064549b806360d84457b04"
integrity sha512-9anpBMM9mEgZN4wr2v8wHJI2/u5TnnggewRN6OlvXTTnuVyoY19X6rOv9XTqKRw6dcGKwZsBi8n0kDE2I5i4VA==
"@jridgewell/gen-mapping@^0.3.2":
version "0.3.2"
@ -478,7 +479,7 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping@^0.3.9":
"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
version "0.3.17"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
@ -534,15 +535,15 @@
tslib "^2.4.1"
webcrypto-core "^1.7.4"
"@repeaterjs/repeater@3.0.4":
"@repeaterjs/repeater@3.0.4", "@repeaterjs/repeater@^3.0.4":
version "3.0.4"
resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.4.tgz#a04d63f4d1bf5540a41b01a921c9a7fddc3bd1ca"
integrity sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==
"@solidity-parser/parser@^0.14.5":
version "0.14.5"
resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804"
integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==
"@solidity-parser/parser@^0.15.0":
version "0.15.0"
resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.15.0.tgz#1d359be40be84f174dd616ccfadcf43346c6bf63"
integrity sha512-5UFJJTzWi1hgFk6aGCZ5rxG2DJkCJOzJ74qg7UkWSNCDSigW+CJLoYUb5bLiKrtI34Nr9rpFSUNHfkqtlL+N/w==
dependencies:
antlr4ts "^0.5.0-alpha.4"
@ -589,9 +590,9 @@
"@types/node" "*"
"@types/node@*":
version "18.11.19"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.19.tgz#35e26df9ec441ab99d73e99e9aca82935eea216d"
integrity sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw==
version "18.14.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.1.tgz#90dad8476f1e42797c49d6f8b69aaf9f876fc69f"
integrity sha512-QH+37Qds3E0eDlReeboBxfHbX9omAcBCXEzswCu6jySP642jiM3cYSIkU/REqwhCUqXdonHFuBfJDiAJxMNhaQ==
"@types/parse-json@^4.0.0":
version "4.0.0"
@ -605,49 +606,51 @@
dependencies:
"@types/node" "*"
"@whatwg-node/events@0.0.2":
"@whatwg-node/events@^0.0.2":
version "0.0.2"
resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.0.2.tgz#7b7107268d2982fc7b7aff5ee6803c64018f84dd"
integrity sha512-WKj/lI4QjnLuPrim0cfO7i+HsDSXHxNv1y0CrJhdntuO3hxWZmnXCwNDnwOvry11OjRin6cgWNF+j/9Pn8TN4w==
"@whatwg-node/fetch@0.6.5":
version "0.6.5"
resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.6.5.tgz#ff96288e9a6295faafac79f13e3b3fd831cad11f"
integrity sha512-3XQ78RAMX8Az0LlUqMoGM3jbT+FE0S+IKr4yiTiqzQ5S/pNxD52K/kFLcLQiEbL+3rkk/glCHqjxF1QI5155Ig==
dependencies:
"@peculiar/webcrypto" "^1.4.0"
"@whatwg-node/node-fetch" "0.0.1"
busboy "^1.6.0"
urlpattern-polyfill "^6.0.2"
web-streams-polyfill "^3.2.1"
"@whatwg-node/fetch@^0.6.0":
version "0.6.7"
resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.6.7.tgz#ddfa97d9498b6e6147532272b4867b8c0638e914"
integrity sha512-n29y5RtM7pmH9VXFC4flV0Kv0VZIoLJcncDki/bTpxC525EFLze5JR9l+WmPYBNfLQgMtDti30ANuOmbETeubw==
version "0.6.9"
resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.6.9.tgz#6cc694cc0378e27b8dfed427c5bf633eda6972b9"
integrity sha512-JfrBCJdMu9n9OARc0e/hPHcD98/8Nz1CKSdGYDg6VbObDkV/Ys30xe5i/wPOatYbxuvatj1kfWeHf7iNX3i17w==
dependencies:
"@peculiar/webcrypto" "^1.4.0"
"@whatwg-node/node-fetch" "0.0.3"
"@whatwg-node/node-fetch" "^0.0.5"
busboy "^1.6.0"
urlpattern-polyfill "^6.0.2"
web-streams-polyfill "^3.2.1"
"@whatwg-node/node-fetch@0.0.1":
version "0.0.1"
resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.0.1.tgz#ffad65f3f8b73d6d2c2e8b179d557a5863b0db13"
integrity sha512-dMbh604yf2jl37IzvYGA6z3heQg3dMzlqoNsiNToe46SVmKusfJXGf4KYIuiJTzh9mEEu/uVF//QakUfsLJpwA==
"@whatwg-node/fetch@^0.8.0", "@whatwg-node/fetch@^0.8.1":
version "0.8.1"
resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.8.1.tgz#ee3c94746132f217e17f78f9e073bb342043d630"
integrity sha512-Fkd1qQHK2tAWxKlC85h9L86Lgbq3BzxMnHSnTsnzNZMMzn6Xi+HlN8/LJ90LxorhSqD54td+Q864LgwUaYDj1Q==
dependencies:
"@whatwg-node/events" "0.0.2"
busboy "1.6.0"
"@peculiar/webcrypto" "^1.4.0"
"@whatwg-node/node-fetch" "^0.3.0"
busboy "^1.6.0"
urlpattern-polyfill "^6.0.2"
web-streams-polyfill "^3.2.1"
"@whatwg-node/node-fetch@^0.0.5":
version "0.0.5"
resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.0.5.tgz#bebf18891088e5e2fc449dea8d1bc94af5ec38df"
integrity sha512-hbccmaSZaItdsRuBKBEEhLoO+5oXJPxiyd0kG2xXd0Dh3Rt+vZn4pADHxuSiSHLd9CM+S2z4+IxlEGbWUgiz9g==
dependencies:
"@whatwg-node/events" "^0.0.2"
busboy "^1.6.0"
tslib "^2.3.1"
"@whatwg-node/node-fetch@0.0.3":
version "0.0.3"
resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.0.3.tgz#ca5dd28925571fb61e72d27d095b4c2145408975"
integrity sha512-kUFCR5Qf8n5FYqhk5PzEi8WoCoP89MhlvZzDnoKcCjne8VM5rW8bjJMnSO/4oMHLIN+hqHD1pDeN63xmmpmtIA==
"@whatwg-node/node-fetch@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.3.0.tgz#7c7e90d03fa09d0ddebff29add6f16d923327d58"
integrity sha512-mPM8WnuHiI/3kFxDeE0SQQXAElbz4onqmm64fEGCwYEcBes2UsvIDI8HwQIqaXCH42A9ajJUPv4WsYoN/9oG6w==
dependencies:
"@whatwg-node/events" "0.0.2"
busboy "1.6.0"
"@whatwg-node/events" "^0.0.2"
busboy "^1.6.0"
fast-querystring "^1.1.1"
fast-url-parser "^1.1.3"
tslib "^2.3.1"
acorn-walk@^8.1.1:
@ -800,7 +803,7 @@ buffer@^5.5.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
busboy@1.6.0, busboy@^1.6.0:
busboy@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
@ -1037,10 +1040,10 @@ cross-fetch@^3.1.5:
dependencies:
node-fetch "2.6.7"
dataloader@2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.1.0.tgz#c69c538235e85e7ac6c6c444bae8ecabf5de9df7"
integrity sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==
dataloader@2.2.2, dataloader@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0"
integrity sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==
debounce@^1.2.0:
version "1.2.1"
@ -1096,7 +1099,7 @@ dotenv@^16.0.0:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07"
integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==
dset@3.1.2:
dset@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/dset/-/dset-3.1.2.tgz#89c436ca6450398396dc6538ea00abc0c54cd45a"
integrity sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==
@ -1149,6 +1152,11 @@ extract-files@^9.0.0:
resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a"
integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==
fast-decode-uri-component@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543"
integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==
fast-glob@^3.2.9:
version "3.2.12"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
@ -1160,6 +1168,20 @@ fast-glob@^3.2.9:
merge2 "^1.3.0"
micromatch "^4.0.4"
fast-querystring@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/fast-querystring/-/fast-querystring-1.1.1.tgz#f4c56ef56b1a954880cfd8c01b83f9e1a3d3fda2"
integrity sha512-qR2r+e3HvhEFmpdHMv//U8FnFlnYjaC6QKDuaXALDkw2kvHO8WDjxH+f/rHGR4Me4pnk8p9JAkRNTjYHAKRn2Q==
dependencies:
fast-decode-uri-component "^1.0.1"
fast-url-parser@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d"
integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==
dependencies:
punycode "^1.3.2"
fastq@^1.6.0:
version "1.15.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
@ -1422,7 +1444,7 @@ isomorphic-fetch@^3.0.0:
node-fetch "^2.6.1"
whatwg-fetch "^3.4.1"
isomorphic-ws@5.0.0:
isomorphic-ws@5.0.0, isomorphic-ws@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf"
integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==
@ -1569,7 +1591,7 @@ merge2@^1.3.0, merge2@^1.4.1:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
meros@1.2.1:
meros@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/meros/-/meros-1.2.1.tgz#056f7a76e8571d0aaf3c7afcbe7eb6407ff7329e"
integrity sha512-R2f/jxYqCAGI19KhAvaxSOxALBMkaXWH2a7rOyqQw+ZmizX5bKkEYWLzdhC+U82ZVVPVp6MCXe3EkVligh+12g==
@ -1753,18 +1775,23 @@ pinst@^3.0.0:
integrity sha512-cengSmBxtCyaJqtRSvJorIIZXMXg+lJ3sIljGmtBGUVonMnMsVJbnzl6jGN1HkOWwxNuJynCJ2hXxxqCQrFDdw==
prettier-plugin-solidity@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.1.tgz#4d3375b85f97812ffcbe48d5a8b3fe914d69c91f"
integrity sha512-uD24KO26tAHF+zMN2nt1OUzfknzza5AgxjogQQrMLZc7j8xiQrDoNWNeOlfFC0YLTwo12CLD10b9niLyP6AqXg==
version "1.1.2"
resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.2.tgz#452be4df925a4b16a974a04235839c9f56c2d10d"
integrity sha512-KC5oNbFJfyBaFiO0kl56J6AXnDmr9tUlBV1iqo864x4KQrKYKaBZvW9jhT2oC0NHoNp7/GoMJNxqL8pp8k7C/g==
dependencies:
"@solidity-parser/parser" "^0.14.5"
"@solidity-parser/parser" "^0.15.0"
semver "^7.3.8"
solidity-comments-extractor "^0.0.7"
prettier@^2.7.1:
version "2.8.3"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.3.tgz#ab697b1d3dd46fb4626fbe2f543afe0cc98d8632"
integrity sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==
version "2.8.4"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3"
integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==
punycode@^1.3.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==
pvtsutils@^1.3.2:
version "1.3.2"
@ -1784,9 +1811,9 @@ queue-microtask@^1.2.2:
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
readable-stream@^3.4.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
version "3.6.1"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.1.tgz#f9f9b5f536920253b3d26e7660e7da4ccff9bb62"
integrity sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
@ -2064,7 +2091,7 @@ ts-node@^10.9.1:
v8-compile-cache-lib "^3.0.1"
yn "3.1.1"
tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, tslib@~2.5.0:
tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
@ -2117,7 +2144,7 @@ v8-compile-cache-lib@^3.0.1:
resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
value-or-promise@1.0.12, value-or-promise@^1.0.11:
value-or-promise@1.0.12, value-or-promise@^1.0.11, value-or-promise@^1.0.12:
version "1.0.12"
resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c"
integrity sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==
@ -2135,9 +2162,9 @@ web-streams-polyfill@^3.2.1:
integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==
webcrypto-core@^1.7.4:
version "1.7.5"
resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.5.tgz#c02104c953ca7107557f9c165d194c6316587ca4"
integrity sha512-gaExY2/3EHQlRNNNVSrbG2Cg94Rutl7fAaKILS1w8ZDhGxdFOaw6EbCfHIxPy9vt/xwp5o0VQAx9aySPF6hU1A==
version "1.7.6"
resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.6.tgz#e32c4a12a13de4251f8f9ef336a6cba7cdec9b55"
integrity sha512-TBPiewB4Buw+HI3EQW+Bexm19/W4cP/qZG/02QJCXN+iN+T5sl074vZ3rJcle/ZtDBQSgjkbsQO/1eFcxnSBUA==
dependencies:
"@peculiar/asn1-schema" "^2.1.6"
"@peculiar/json-schema" "^1.1.12"
@ -2181,10 +2208,10 @@ wrap-ansi@^7.0.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
ws@8.12.0:
version "8.12.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8"
integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==
ws@8.12.1, ws@^8.12.0:
version "8.12.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f"
integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==
y18n@^5.0.5:
version "5.0.8"
@ -2212,9 +2239,9 @@ yargs-parser@^21.1.1:
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
yargs@^17.0.0:
version "17.6.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541"
integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==
version "17.7.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967"
integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==
dependencies:
cliui "^8.0.1"
escalade "^3.1.1"