allow ref link (#97)
This commit is contained in:
parent
c098b44436
commit
7b7afc8606
|
@ -1,3 +1,4 @@
|
|||
REACT_APP_USDT_REFERRAL_FEES_ADDRESS=''
|
||||
REACT_APP_USDC_REFERRAL_FEES_ADDRESS=''
|
||||
REACT_APP_ALLOW_REF_LINK=true
|
||||
REACT_APP_EXCLUDE_MARKETS=[]
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
"@project-serum/pool": "0.2.2",
|
||||
"@project-serum/serum": "^0.13.41",
|
||||
"@project-serum/sol-wallet-adapter": "^0.2.0",
|
||||
"@solana/spl-name-service": "^0.1.2",
|
||||
"@solana/spl-token": "^0.1.6",
|
||||
"@solana/web3.js": "0.86.1",
|
||||
"@testing-library/jest-dom": "^4.2.4",
|
||||
|
@ -29,6 +30,7 @@
|
|||
"immutable-tuple": "^0.4.10",
|
||||
"nanoid": "^3.1.22",
|
||||
"qrcode.react": "^1.0.0",
|
||||
"query-string": "^7.0.1",
|
||||
"react": "^16.13.1",
|
||||
"react-app-polyfill": "^1.0.5",
|
||||
"react-copy-to-clipboard": "^5.0.2",
|
||||
|
|
17
src/App.tsx
17
src/App.tsx
|
@ -7,6 +7,7 @@ import { Spin } from 'antd';
|
|||
import ErrorBoundary from './components/ErrorBoundary';
|
||||
import { Routes } from './routes';
|
||||
import { PreferencesProvider } from './utils/preferences';
|
||||
import { ReferrerProvider } from './utils/referrer';
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
|
@ -14,13 +15,15 @@ export default function App() {
|
|||
<GlobalStyle />
|
||||
<ErrorBoundary>
|
||||
<ConnectionProvider>
|
||||
<WalletProvider>
|
||||
<PreferencesProvider>
|
||||
<Suspense fallback={() => <Spin size="large" />}>
|
||||
<Routes />
|
||||
</Suspense>
|
||||
</PreferencesProvider>
|
||||
</WalletProvider>
|
||||
<ReferrerProvider>
|
||||
<WalletProvider>
|
||||
<PreferencesProvider>
|
||||
<Suspense fallback={() => <Spin size="large" />}>
|
||||
<Routes />
|
||||
</Suspense>
|
||||
</PreferencesProvider>
|
||||
</WalletProvider>
|
||||
</ReferrerProvider>
|
||||
</ConnectionProvider>
|
||||
</ErrorBoundary>
|
||||
</Suspense>
|
||||
|
|
|
@ -1,10 +1,25 @@
|
|||
import { Layout } from 'antd';
|
||||
import React from 'react';
|
||||
import React, { useEffect } from 'react';
|
||||
import TopBar from './TopBar';
|
||||
import { CustomFooter as Footer } from './Footer';
|
||||
import { useReferrer } from '../utils/referrer';
|
||||
import queryString from 'query-string';
|
||||
import { useLocation } from 'react-router-dom';
|
||||
import { notify } from '../utils/notifications';
|
||||
const { Header, Content } = Layout;
|
||||
|
||||
export default function BasicLayout({ children }) {
|
||||
const { refCode, setRefCode, allowRefLink } = useReferrer();
|
||||
const { search } = useLocation();
|
||||
const parsed = queryString.parse(search);
|
||||
|
||||
useEffect(() => {
|
||||
if (!!parsed.refCode && parsed.refCode !== refCode && allowRefLink) {
|
||||
notify({ message: `New referrer ${parsed.refCode} added` });
|
||||
setRefCode(parsed.refCode);
|
||||
}
|
||||
}, [parsed, refCode, setRefCode, allowRefLink]);
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<Layout
|
||||
|
|
|
@ -2,6 +2,7 @@ import React from 'react';
|
|||
import { Layout, Row, Col, Grid } from 'antd';
|
||||
import Link from './Link';
|
||||
import { helpUrls } from './HelpUrls';
|
||||
import { useReferrer } from '../utils/referrer';
|
||||
const { Footer } = Layout;
|
||||
const { useBreakpoint } = Grid;
|
||||
|
||||
|
@ -19,15 +20,18 @@ const footerElements = [
|
|||
|
||||
export const CustomFooter = () => {
|
||||
const smallScreen = !useBreakpoint().lg;
|
||||
|
||||
const { refCode, allowRefLink } = useReferrer();
|
||||
return (
|
||||
<Footer
|
||||
style={{
|
||||
height: '45px',
|
||||
height: '55px',
|
||||
paddingBottom: 10,
|
||||
paddingTop: 10,
|
||||
}}
|
||||
>
|
||||
{refCode && allowRefLink && (
|
||||
<Row justify="center">Your referrer is {refCode}</Row>
|
||||
)}
|
||||
<Row align="middle" gutter={[16, 4]}>
|
||||
{!smallScreen && (
|
||||
<>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import {Button, Col, Divider, Popover, Row} from 'antd';
|
||||
import React, {useState} from 'react';
|
||||
import { Button, Col, Divider, Popover, Row } from 'antd';
|
||||
import React, { useState } from 'react';
|
||||
import FloatingElement from './layout/FloatingElement';
|
||||
import styled from 'styled-components';
|
||||
import {
|
||||
|
@ -11,18 +11,19 @@ import {
|
|||
useTokenAccounts,
|
||||
} from '../utils/markets';
|
||||
import DepositDialog from './DepositDialog';
|
||||
import {useWallet} from '../utils/wallet';
|
||||
import { useWallet } from '../utils/wallet';
|
||||
import Link from './Link';
|
||||
import {settleFunds} from '../utils/send';
|
||||
import {useSendConnection} from '../utils/connection';
|
||||
import {notify} from '../utils/notifications';
|
||||
import {Balances} from '../utils/types';
|
||||
import { settleFunds } from '../utils/send';
|
||||
import { useSendConnection } from '../utils/connection';
|
||||
import { notify } from '../utils/notifications';
|
||||
import { Balances } from '../utils/types';
|
||||
import StandaloneTokenAccountsSelect from './StandaloneTokenAccountSelect';
|
||||
import LinkAddress from './LinkAddress';
|
||||
import {InfoCircleOutlined} from '@ant-design/icons';
|
||||
import {useInterval} from "../utils/useInterval";
|
||||
import {useLocalStorageState} from "../utils/utils";
|
||||
import { AUTO_SETTLE_DISABLED_OVERRIDE } from "../utils/preferences";
|
||||
import { InfoCircleOutlined } from '@ant-design/icons';
|
||||
import { useInterval } from '../utils/useInterval';
|
||||
import { useLocalStorageState } from '../utils/utils';
|
||||
import { AUTO_SETTLE_DISABLED_OVERRIDE } from '../utils/preferences';
|
||||
import { useReferrer } from '../utils/referrer';
|
||||
|
||||
const RowBox = styled(Row)`
|
||||
padding-bottom: 20px;
|
||||
|
@ -53,12 +54,9 @@ export default function StandaloneBalancesDisplay() {
|
|||
balances && balances.find((b) => b.coin === baseCurrency);
|
||||
const quoteCurrencyBalances =
|
||||
balances && balances.find((b) => b.coin === quoteCurrency);
|
||||
const [autoSettleEnabled] = useLocalStorageState(
|
||||
'autoSettleEnabled',
|
||||
true,
|
||||
);
|
||||
const [autoSettleEnabled] = useLocalStorageState('autoSettleEnabled', true);
|
||||
const [lastSettledAt, setLastSettledAt] = useState<number>(0);
|
||||
|
||||
const { usdcRef, usdtRef } = useReferrer();
|
||||
async function onSettleFunds() {
|
||||
if (!wallet) {
|
||||
notify({
|
||||
|
@ -110,6 +108,8 @@ export default function StandaloneBalancesDisplay() {
|
|||
wallet,
|
||||
baseCurrencyAccount,
|
||||
quoteCurrencyAccount,
|
||||
usdcRef,
|
||||
usdtRef,
|
||||
});
|
||||
} catch (e) {
|
||||
notify({
|
||||
|
@ -122,10 +122,21 @@ export default function StandaloneBalancesDisplay() {
|
|||
|
||||
useInterval(() => {
|
||||
const autoSettle = async () => {
|
||||
if (AUTO_SETTLE_DISABLED_OVERRIDE || !wallet || !market || !openOrdersAccount || !baseCurrencyAccount || !quoteCurrencyAccount || !autoSettleEnabled) {
|
||||
if (
|
||||
AUTO_SETTLE_DISABLED_OVERRIDE ||
|
||||
!wallet ||
|
||||
!market ||
|
||||
!openOrdersAccount ||
|
||||
!baseCurrencyAccount ||
|
||||
!quoteCurrencyAccount ||
|
||||
!autoSettleEnabled
|
||||
) {
|
||||
return;
|
||||
}
|
||||
if (!baseCurrencyBalances?.unsettled && !quoteCurrencyBalances?.unsettled) {
|
||||
if (
|
||||
!baseCurrencyBalances?.unsettled &&
|
||||
!quoteCurrencyBalances?.unsettled
|
||||
) {
|
||||
return;
|
||||
}
|
||||
if (Date.now() - lastSettledAt < 15000) {
|
||||
|
@ -141,6 +152,8 @@ export default function StandaloneBalancesDisplay() {
|
|||
wallet,
|
||||
baseCurrencyAccount,
|
||||
quoteCurrencyAccount,
|
||||
usdcRef,
|
||||
usdtRef,
|
||||
});
|
||||
} catch (e) {
|
||||
console.log('Error auto settling funds: ' + e.message);
|
||||
|
@ -148,12 +161,7 @@ export default function StandaloneBalancesDisplay() {
|
|||
}
|
||||
console.log('Finished settling funds.');
|
||||
};
|
||||
(
|
||||
connected &&
|
||||
wallet?.autoApprove &&
|
||||
autoSettleEnabled &&
|
||||
autoSettle()
|
||||
);
|
||||
connected && wallet?.autoApprove && autoSettleEnabled && autoSettle();
|
||||
}, 1000);
|
||||
|
||||
const formattedBalances: [
|
||||
|
|
|
@ -9,6 +9,7 @@ import { useSendConnection } from '../../utils/connection';
|
|||
import { useWallet } from '../../utils/wallet';
|
||||
import { settleFunds } from '../../utils/send';
|
||||
import { notify } from '../../utils/notifications';
|
||||
import { useReferrer } from '../../utils/referrer';
|
||||
|
||||
export default function BalancesTable({
|
||||
balances,
|
||||
|
@ -19,6 +20,7 @@ export default function BalancesTable({
|
|||
const [accounts] = useTokenAccounts();
|
||||
const connection = useSendConnection();
|
||||
const { wallet } = useWallet();
|
||||
const { usdcRef, usdtRef } = useReferrer();
|
||||
|
||||
async function onSettleFunds(market, openOrders) {
|
||||
try {
|
||||
|
@ -35,6 +37,8 @@ export default function BalancesTable({
|
|||
accounts,
|
||||
market?.quoteMintAddress,
|
||||
),
|
||||
usdcRef,
|
||||
usdtRef,
|
||||
});
|
||||
} catch (e) {
|
||||
notify({
|
||||
|
|
|
@ -0,0 +1,147 @@
|
|||
import React, { useContext, useEffect, useState } from 'react';
|
||||
import { useConnection } from './connection';
|
||||
import { PublicKey } from '@solana/web3.js';
|
||||
import {
|
||||
NameRegistryState,
|
||||
getHashedName,
|
||||
getNameAccountKey,
|
||||
getTwitterRegistry,
|
||||
} from '@solana/spl-name-service';
|
||||
import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
|
||||
import { useLocalStorageState } from './utils';
|
||||
|
||||
interface ReferrerContextValues {
|
||||
usdcRef: PublicKey | undefined;
|
||||
usdtRef: PublicKey | undefined;
|
||||
setRefCode: (arg: any) => void;
|
||||
refCode: string | undefined;
|
||||
allowRefLink: boolean;
|
||||
}
|
||||
|
||||
const ReferrerContext: React.Context<null | ReferrerContextValues> = React.createContext<null | ReferrerContextValues>(
|
||||
null,
|
||||
);
|
||||
|
||||
export const ASSOCIATED_TOKEN_PROGRAM_ID: PublicKey = new PublicKey(
|
||||
'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',
|
||||
);
|
||||
|
||||
const USDC_MINT = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v');
|
||||
const USDT_MINT = new PublicKey('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB');
|
||||
|
||||
export async function findAssociatedTokenAddress(
|
||||
walletAddress: PublicKey,
|
||||
tokenMintAddress: PublicKey,
|
||||
): Promise<PublicKey> {
|
||||
return (
|
||||
await PublicKey.findProgramAddress(
|
||||
[
|
||||
walletAddress.toBuffer(),
|
||||
TOKEN_PROGRAM_ID.toBuffer(),
|
||||
tokenMintAddress.toBuffer(),
|
||||
],
|
||||
ASSOCIATED_TOKEN_PROGRAM_ID,
|
||||
)
|
||||
)[0];
|
||||
}
|
||||
|
||||
// Address of the SOL TLD
|
||||
export const SOL_TLD_AUTHORITY = new PublicKey(
|
||||
'58PwtjSDuFHuUkYjH9BYnnQKHfwo9reZhC2zMJv9JPkx',
|
||||
);
|
||||
|
||||
export const getInputKey = async (input: string) => {
|
||||
let hashed_input_name = await getHashedName(input);
|
||||
let inputDomainKey = await getNameAccountKey(
|
||||
hashed_input_name,
|
||||
undefined,
|
||||
SOL_TLD_AUTHORITY,
|
||||
);
|
||||
return { inputDomainKey: inputDomainKey, hashedInputName: hashed_input_name };
|
||||
};
|
||||
|
||||
export const useFeesAccountsFromRefCode = (refCode: string | undefined) => {
|
||||
const connection = useConnection();
|
||||
const [usdc, setUsdc] = useState<PublicKey | undefined>(undefined);
|
||||
const [usdt, setUsdt] = useState<PublicKey | undefined>(undefined);
|
||||
|
||||
useEffect(() => {
|
||||
const fn = async () => {
|
||||
let usdcAddress: undefined | PublicKey = undefined;
|
||||
let usdtAddress: undefined | PublicKey = undefined;
|
||||
if (!refCode) {
|
||||
setUsdc(
|
||||
process.env.REACT_APP_USDC_REFERRAL_FEES_ADDRESS
|
||||
? new PublicKey(process.env.REACT_APP_USDC_REFERRAL_FEES_ADDRESS)
|
||||
: undefined,
|
||||
);
|
||||
setUsdt(
|
||||
process.env.REACT_APP_USDT_REFERRAL_FEES_ADDRESS
|
||||
? new PublicKey(process.env.REACT_APP_USDT_REFERRAL_FEES_ADDRESS)
|
||||
: undefined,
|
||||
);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
let nameRegistryState: NameRegistryState;
|
||||
if (refCode.includes('.sol')) {
|
||||
const { inputDomainKey } = await getInputKey(
|
||||
refCode.replace('.sol', ''),
|
||||
);
|
||||
nameRegistryState = await NameRegistryState.retrieve(
|
||||
connection,
|
||||
inputDomainKey,
|
||||
);
|
||||
} else {
|
||||
nameRegistryState = await getTwitterRegistry(connection, refCode);
|
||||
}
|
||||
usdcAddress = await findAssociatedTokenAddress(
|
||||
nameRegistryState.owner,
|
||||
USDC_MINT,
|
||||
);
|
||||
usdtAddress = await findAssociatedTokenAddress(
|
||||
nameRegistryState.owner,
|
||||
USDT_MINT,
|
||||
);
|
||||
const usdcAccountInfo = await connection.getAccountInfo(usdcAddress);
|
||||
const usdtAccountInfo = await connection.getAccountInfo(usdtAddress);
|
||||
if (!!usdcAccountInfo?.data) setUsdc(usdcAddress);
|
||||
if (!!usdtAccountInfo?.data) setUsdt(usdtAddress);
|
||||
} catch (err) {
|
||||
console.warn(`Error getting refcode ${err}`);
|
||||
}
|
||||
};
|
||||
fn();
|
||||
}, [connection, refCode]);
|
||||
return { usdcRef: usdc, usdtRef: usdt };
|
||||
};
|
||||
|
||||
export const ReferrerProvider = ({ children }) => {
|
||||
const allowRefLink = process.env.REACT_APP_ALLOW_REF_LINK === 'true';
|
||||
const [refCode, setRefCode] = useLocalStorageState('refCode');
|
||||
const { usdcRef, usdtRef } = useFeesAccountsFromRefCode(
|
||||
allowRefLink ? refCode : undefined,
|
||||
);
|
||||
useEffect(() => {
|
||||
if (!allowRefLink) setRefCode(null);
|
||||
}, [allowRefLink, setRefCode]);
|
||||
return (
|
||||
<ReferrerContext.Provider
|
||||
value={{ usdcRef, usdtRef, setRefCode, refCode, allowRefLink }}
|
||||
>
|
||||
{children}
|
||||
</ReferrerContext.Provider>
|
||||
);
|
||||
};
|
||||
|
||||
export const useReferrer = () => {
|
||||
const context = useContext(ReferrerContext);
|
||||
if (!context) throw new Error('Missing referrer context');
|
||||
return {
|
||||
usdcRef: context.usdcRef,
|
||||
usdtRef: context.usdtRef,
|
||||
setRefCode: context.setRefCode,
|
||||
refCode: context.refCode,
|
||||
allowRefLink: context.allowRefLink,
|
||||
};
|
||||
};
|
|
@ -13,12 +13,17 @@ import {
|
|||
Transaction,
|
||||
TransactionSignature,
|
||||
} from '@solana/web3.js';
|
||||
import { Token, ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } from '@solana/spl-token';
|
||||
import {
|
||||
Token,
|
||||
ASSOCIATED_TOKEN_PROGRAM_ID,
|
||||
TOKEN_PROGRAM_ID,
|
||||
} from '@solana/spl-token';
|
||||
import BN from 'bn.js';
|
||||
import {
|
||||
DexInstructions,
|
||||
Market,
|
||||
OpenOrders, parseInstructionErrorResponse,
|
||||
OpenOrders,
|
||||
parseInstructionErrorResponse,
|
||||
TOKEN_MINTS,
|
||||
TokenInstructions,
|
||||
} from '@project-serum/serum';
|
||||
|
@ -72,6 +77,8 @@ export async function settleFunds({
|
|||
baseCurrencyAccount,
|
||||
quoteCurrencyAccount,
|
||||
sendNotification = true,
|
||||
usdcRef = undefined,
|
||||
usdtRef = undefined,
|
||||
}: {
|
||||
market: Market;
|
||||
openOrders: OpenOrders;
|
||||
|
@ -79,7 +86,9 @@ export async function settleFunds({
|
|||
wallet: WalletAdapter;
|
||||
baseCurrencyAccount: TokenAccount;
|
||||
quoteCurrencyAccount: TokenAccount;
|
||||
sendNotification?: boolean,
|
||||
sendNotification?: boolean;
|
||||
usdcRef?: PublicKey;
|
||||
usdtRef?: PublicKey;
|
||||
}): Promise<string | undefined> {
|
||||
if (
|
||||
!market ||
|
||||
|
@ -89,7 +98,7 @@ export async function settleFunds({
|
|||
(!baseCurrencyAccount && !quoteCurrencyAccount)
|
||||
) {
|
||||
if (sendNotification) {
|
||||
notify({message: 'Not connected'});
|
||||
notify({ message: 'Not connected' });
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -120,22 +129,14 @@ export async function settleFunds({
|
|||
if (market.supportsReferralFees) {
|
||||
const usdt = TOKEN_MINTS.find(({ name }) => name === 'USDT');
|
||||
const usdc = TOKEN_MINTS.find(({ name }) => name === 'USDC');
|
||||
if (
|
||||
process.env.REACT_APP_USDT_REFERRAL_FEES_ADDRESS &&
|
||||
usdt &&
|
||||
market.quoteMintAddress.equals(usdt.address)
|
||||
) {
|
||||
referrerQuoteWallet = new PublicKey(
|
||||
process.env.REACT_APP_USDT_REFERRAL_FEES_ADDRESS,
|
||||
);
|
||||
if (usdtRef && usdt && market.quoteMintAddress.equals(usdt.address)) {
|
||||
referrerQuoteWallet = usdtRef;
|
||||
} else if (
|
||||
process.env.REACT_APP_USDC_REFERRAL_FEES_ADDRESS &&
|
||||
usdcRef &&
|
||||
usdc &&
|
||||
market.quoteMintAddress.equals(usdc.address)
|
||||
) {
|
||||
referrerQuoteWallet = new PublicKey(
|
||||
process.env.REACT_APP_USDC_REFERRAL_FEES_ADDRESS,
|
||||
);
|
||||
referrerQuoteWallet = usdcRef;
|
||||
}
|
||||
}
|
||||
const {
|
||||
|
@ -160,7 +161,7 @@ export async function settleFunds({
|
|||
wallet,
|
||||
connection,
|
||||
sendingMessage: 'Settling funds...',
|
||||
sendNotification
|
||||
sendNotification,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -222,7 +223,10 @@ export async function settleAllFunds({
|
|||
// @ts-ignore
|
||||
m._decoded?.ownAddress?.equals(openOrdersAccount.market),
|
||||
);
|
||||
if (openOrdersAccount.baseTokenFree.isZero() && openOrdersAccount.quoteTokenFree.isZero()) {
|
||||
if (
|
||||
openOrdersAccount.baseTokenFree.isZero() &&
|
||||
openOrdersAccount.quoteTokenFree.isZero()
|
||||
) {
|
||||
// nothing to settle for this market.
|
||||
return null;
|
||||
}
|
||||
|
@ -643,7 +647,7 @@ export async function sendTransaction({
|
|||
sentMessage?: string;
|
||||
successMessage?: string;
|
||||
timeout?: number;
|
||||
sendNotification?: boolean
|
||||
sendNotification?: boolean;
|
||||
}) {
|
||||
const signedTransaction = await signTransaction({
|
||||
transaction,
|
||||
|
@ -658,7 +662,7 @@ export async function sendTransaction({
|
|||
sentMessage,
|
||||
successMessage,
|
||||
timeout,
|
||||
sendNotification
|
||||
sendNotification,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -726,11 +730,11 @@ export async function sendSignedTransaction({
|
|||
sentMessage?: string;
|
||||
successMessage?: string;
|
||||
timeout?: number;
|
||||
sendNotification?: boolean
|
||||
sendNotification?: boolean;
|
||||
}): Promise<string> {
|
||||
const rawTransaction = signedTransaction.serialize();
|
||||
const startTime = getUnixTs();
|
||||
if (sendNotification){
|
||||
if (sendNotification) {
|
||||
notify({ message: sendingMessage });
|
||||
}
|
||||
const txid: TransactionSignature = await connection.sendRawTransaction(
|
||||
|
@ -778,8 +782,14 @@ export async function sendSignedTransaction({
|
|||
}
|
||||
}
|
||||
let parsedError;
|
||||
if (typeof simulateResult.err == 'object' && "InstructionError" in simulateResult.err) {
|
||||
const parsedErrorInfo = parseInstructionErrorResponse(signedTransaction, simulateResult.err["InstructionError"]);
|
||||
if (
|
||||
typeof simulateResult.err == 'object' &&
|
||||
'InstructionError' in simulateResult.err
|
||||
) {
|
||||
const parsedErrorInfo = parseInstructionErrorResponse(
|
||||
signedTransaction,
|
||||
simulateResult.err['InstructionError'],
|
||||
);
|
||||
parsedError = parsedErrorInfo.error;
|
||||
} else {
|
||||
parsedError = JSON.stringify(simulateResult.err);
|
||||
|
|
|
@ -104,7 +104,7 @@ export function useLocalStorageStringState(
|
|||
} else {
|
||||
localStorage.setItem(key, newState);
|
||||
}
|
||||
localStorageListeners[key].forEach((listener) =>
|
||||
localStorageListeners[key]?.forEach((listener) =>
|
||||
listener(key + '\n' + newState),
|
||||
);
|
||||
},
|
||||
|
|
222
yarn.lock
222
yarn.lock
|
@ -1550,6 +1550,36 @@
|
|||
resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz#5405ee8e444ed212db44e79351f0c70a582aae25"
|
||||
integrity sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw==
|
||||
|
||||
"@solana/spl-name-service@^0.1.2":
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@solana/spl-name-service/-/spl-name-service-0.1.2.tgz#d49240a692bbf05ef56d79db0916b17a4829b99d"
|
||||
integrity sha512-rmVYzhmZgaYmaANzmuxemoJWMnkuM59zitJpdkJejn/oTPYc+SezhQk52fN4dqjCz1cTBnzDJ+0AUJIwgNWnNQ==
|
||||
dependencies:
|
||||
"@solana/spl-token" "0.1.4"
|
||||
"@solana/web3.js" "^1.11.0"
|
||||
bip32 "^2.0.6"
|
||||
bn.js "^5.1.3"
|
||||
bs58 "4.0.1"
|
||||
buffer-layout "^1.2.0"
|
||||
core-util-is "^1.0.2"
|
||||
crypto "^1.0.1"
|
||||
crypto-ts "^1.0.2"
|
||||
fs "^0.0.1-security"
|
||||
tweetnacl "^1.0.3"
|
||||
webpack-dev-server "^3.11.2"
|
||||
|
||||
"@solana/spl-token@0.1.4":
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.4.tgz#7fc6ba82a7fbb2b0907f7ffc87709488db83ed2a"
|
||||
integrity sha512-W8uSC4ysWVjbKK7lvsIHFxdMIkOCEoOm9tYY9VVpBlUIp4+K5bpPxHXUlxMiHfkKPWAxab6IGUn71VVLg8uq5Q==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.5"
|
||||
"@solana/web3.js" "^1.9.1"
|
||||
bn.js "^5.1.0"
|
||||
buffer "6.0.3"
|
||||
buffer-layout "^1.2.0"
|
||||
dotenv "8.2.0"
|
||||
|
||||
"@solana/spl-token@^0.1.6":
|
||||
version "0.1.6"
|
||||
resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.6.tgz#fa136b0a3db84f07a99bc0e54cf4e91f2d6da2e8"
|
||||
|
@ -1608,7 +1638,7 @@
|
|||
tweetnacl "^1.0.0"
|
||||
ws "^7.0.0"
|
||||
|
||||
"@solana/web3.js@^1.12.0":
|
||||
"@solana/web3.js@^1.11.0", "@solana/web3.js@^1.12.0", "@solana/web3.js@^1.9.1":
|
||||
version "1.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.20.0.tgz#9a1855a239c96c5b946bdbe4cc5e3768ee3b2a77"
|
||||
integrity sha512-s/hmbeC7h0QeMKDHl5HTJbY4NSrT3IK1oGerNwdmFfnbs9ygtBbXo1MXaeYVDcNazsthKgiYE+unNd+cpVH8HA==
|
||||
|
@ -1936,6 +1966,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.0.tgz#f0ddca5a61e52627c9dcb771a6039d44694597bc"
|
||||
integrity sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==
|
||||
|
||||
"@types/node@10.12.18":
|
||||
version "10.12.18"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67"
|
||||
integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==
|
||||
|
||||
"@types/node@^12.12.54":
|
||||
version "12.20.13"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.13.tgz#e743bae112bd779ac9650f907197dd2caa7f0364"
|
||||
|
@ -2982,19 +3017,32 @@ binary-extensions@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
|
||||
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
|
||||
|
||||
bindings@^1.5.0:
|
||||
bindings@^1.3.0, bindings@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
|
||||
integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
|
||||
dependencies:
|
||||
file-uri-to-path "1.0.0"
|
||||
|
||||
bip32@^2.0.6:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/bip32/-/bip32-2.0.6.tgz#6a81d9f98c4cd57d05150c60d8f9e75121635134"
|
||||
integrity sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA==
|
||||
dependencies:
|
||||
"@types/node" "10.12.18"
|
||||
bs58check "^2.1.1"
|
||||
create-hash "^1.2.0"
|
||||
create-hmac "^1.1.7"
|
||||
tiny-secp256k1 "^1.1.3"
|
||||
typeforce "^1.11.5"
|
||||
wif "^2.0.6"
|
||||
|
||||
bluebird@^3.5.5:
|
||||
version "3.7.2"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
||||
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
|
||||
|
||||
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
|
||||
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.8, bn.js@^4.11.9:
|
||||
version "4.12.0"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
|
||||
integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
|
||||
|
@ -3177,13 +3225,22 @@ browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4
|
|||
escalade "^3.1.1"
|
||||
node-releases "^1.1.70"
|
||||
|
||||
bs58@^4.0.0, bs58@^4.0.1:
|
||||
bs58@4.0.1, bs58@^4.0.0, bs58@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
|
||||
integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo=
|
||||
dependencies:
|
||||
base-x "^3.0.2"
|
||||
|
||||
bs58check@<3.0.0, bs58check@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc"
|
||||
integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==
|
||||
dependencies:
|
||||
bs58 "^4.0.0"
|
||||
create-hash "^1.1.0"
|
||||
safe-buffer "^5.1.2"
|
||||
|
||||
bser@2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
|
||||
|
@ -3910,7 +3967,7 @@ core-js@^3.5.0:
|
|||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.0.tgz#790b1bb11553a2272b36e2625c7179db345492f8"
|
||||
integrity sha512-PyFBJaLq93FlyYdsndE5VaueA9K5cNB7CGzeCj191YYLhkQM0gdZR2SKihM70oF0wdqKSKClv/tEBOpoRmdOVQ==
|
||||
|
||||
core-util-is@1.0.2, core-util-is@~1.0.0:
|
||||
core-util-is@1.0.2, core-util-is@^1.0.2, core-util-is@~1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||
|
@ -4037,6 +4094,18 @@ crypto-hash@^1.2.2:
|
|||
resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247"
|
||||
integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==
|
||||
|
||||
crypto-ts@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/crypto-ts/-/crypto-ts-1.0.2.tgz#c2ae47b42f1a8affcf33bddbe3283983150c8a05"
|
||||
integrity sha1-wq5HtC8aiv/PM73b4yg5gxUMigU=
|
||||
dependencies:
|
||||
tslib "^1.7.1"
|
||||
|
||||
crypto@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037"
|
||||
integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==
|
||||
|
||||
css-blank-pseudo@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5"
|
||||
|
@ -4323,7 +4392,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
|
|||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@^3.1.1, debug@^3.2.5:
|
||||
debug@^3.1.1, debug@^3.2.5, debug@^3.2.6:
|
||||
version "3.2.7"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
||||
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
|
||||
|
@ -4687,7 +4756,7 @@ electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.649:
|
|||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.673.tgz#b4f81c930b388f962b7eba20d0483299aaa40913"
|
||||
integrity sha512-ms+QR2ckfrrpEAjXweLx6kNCbpAl66DcW//3BZD4BV5KhUgr0RZRce1ON/9J3QyA3JO28nzgb5Xv8DnPr05ILg==
|
||||
|
||||
elliptic@^6.5.2, elliptic@^6.5.3:
|
||||
elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3:
|
||||
version "6.5.4"
|
||||
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
|
||||
integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
|
||||
|
@ -5369,6 +5438,13 @@ faye-websocket@^0.10.0:
|
|||
dependencies:
|
||||
websocket-driver ">=0.5.1"
|
||||
|
||||
faye-websocket@^0.11.3:
|
||||
version "0.11.4"
|
||||
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
|
||||
integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
|
||||
dependencies:
|
||||
websocket-driver ">=0.5.1"
|
||||
|
||||
faye-websocket@~0.11.1:
|
||||
version "0.11.3"
|
||||
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
|
||||
|
@ -5459,6 +5535,11 @@ fill-range@^7.0.1:
|
|||
dependencies:
|
||||
to-regex-range "^5.0.1"
|
||||
|
||||
filter-obj@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b"
|
||||
integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs=
|
||||
|
||||
finalhandler@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
|
||||
|
@ -5711,6 +5792,11 @@ fs.realpath@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
||||
|
||||
fs@^0.0.1-security:
|
||||
version "0.0.1-security"
|
||||
resolved "https://registry.yarnpkg.com/fs/-/fs-0.0.1-security.tgz#8a7bd37186b6dddf3813f23858b57ecaaf5e41d4"
|
||||
integrity sha1-invTcYa23d84E/I4WLV+yq9eQdQ=
|
||||
|
||||
fsevents@2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805"
|
||||
|
@ -7493,7 +7579,7 @@ json2mq@^0.2.0:
|
|||
dependencies:
|
||||
string-convert "^0.2.0"
|
||||
|
||||
json3@^3.3.2:
|
||||
json3@^3.3.2, json3@^3.3.3:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
|
||||
integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
|
||||
|
@ -8341,7 +8427,7 @@ mz@^2.7.0:
|
|||
object-assign "^4.0.1"
|
||||
thenify-all "^1.0.0"
|
||||
|
||||
nan@^2.12.1:
|
||||
nan@^2.12.1, nan@^2.13.2:
|
||||
version "2.14.2"
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
|
||||
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
|
||||
|
@ -10056,6 +10142,16 @@ query-string@^4.1.0:
|
|||
object-assign "^4.1.0"
|
||||
strict-uri-encode "^1.0.0"
|
||||
|
||||
query-string@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.0.1.tgz#45bd149cf586aaa582dffc7ec7a8ad97dd02f75d"
|
||||
integrity sha512-uIw3iRvHnk9to1blJCG3BTc+Ro56CBowJXKmNNAm3RulvPBzWLRqKSiiDk+IplJhsydwtuNMHi8UGQFcCLVfkA==
|
||||
dependencies:
|
||||
decode-uri-component "^0.2.0"
|
||||
filter-obj "^1.1.0"
|
||||
split-on-first "^1.0.0"
|
||||
strict-uri-encode "^2.0.0"
|
||||
|
||||
querystring-es3@^0.2.0:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
|
||||
|
@ -11179,6 +11275,13 @@ selfsigned@^1.10.7:
|
|||
dependencies:
|
||||
node-forge "^0.10.0"
|
||||
|
||||
selfsigned@^1.10.8:
|
||||
version "1.10.11"
|
||||
resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9"
|
||||
integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==
|
||||
dependencies:
|
||||
node-forge "^0.10.0"
|
||||
|
||||
semver-compare@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
|
||||
|
@ -11464,6 +11567,18 @@ sockjs-client@1.4.0:
|
|||
json3 "^3.3.2"
|
||||
url-parse "^1.4.3"
|
||||
|
||||
sockjs-client@^1.5.0:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6"
|
||||
integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==
|
||||
dependencies:
|
||||
debug "^3.2.6"
|
||||
eventsource "^1.0.7"
|
||||
faye-websocket "^0.11.3"
|
||||
inherits "^2.0.4"
|
||||
json3 "^3.3.3"
|
||||
url-parse "^1.5.1"
|
||||
|
||||
sockjs@0.3.20:
|
||||
version "0.3.20"
|
||||
resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855"
|
||||
|
@ -11473,6 +11588,15 @@ sockjs@0.3.20:
|
|||
uuid "^3.4.0"
|
||||
websocket-driver "0.6.5"
|
||||
|
||||
sockjs@^0.3.21:
|
||||
version "0.3.21"
|
||||
resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417"
|
||||
integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==
|
||||
dependencies:
|
||||
faye-websocket "^0.11.3"
|
||||
uuid "^3.4.0"
|
||||
websocket-driver "^0.7.4"
|
||||
|
||||
sort-keys@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
|
||||
|
@ -11568,6 +11692,11 @@ spdy@^4.0.2:
|
|||
select-hose "^2.0.0"
|
||||
spdy-transport "^3.0.0"
|
||||
|
||||
split-on-first@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
|
||||
integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
|
||||
|
||||
split-string@^3.0.1, split-string@^3.0.2:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
|
||||
|
@ -11677,6 +11806,11 @@ strict-uri-encode@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
|
||||
integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
|
||||
|
||||
strict-uri-encode@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
|
||||
integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
|
||||
|
||||
string-argv@0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
|
||||
|
@ -12086,6 +12220,17 @@ tiny-invariant@^1.0.2, tiny-invariant@^1.0.6:
|
|||
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875"
|
||||
integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==
|
||||
|
||||
tiny-secp256k1@^1.1.3:
|
||||
version "1.1.6"
|
||||
resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz#7e224d2bee8ab8283f284e40e6b4acb74ffe047c"
|
||||
integrity sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==
|
||||
dependencies:
|
||||
bindings "^1.3.0"
|
||||
bn.js "^4.11.8"
|
||||
create-hmac "^1.1.7"
|
||||
elliptic "^6.4.0"
|
||||
nan "^2.13.2"
|
||||
|
||||
tiny-warning@^1.0.0, tiny-warning@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
|
||||
|
@ -12187,7 +12332,7 @@ ts-pnp@^1.1.6:
|
|||
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
|
||||
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
|
||||
|
||||
tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0:
|
||||
tslib@^1.10.0, tslib@^1.7.1, tslib@^1.8.1, tslib@^1.9.0:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
|
||||
|
@ -12221,7 +12366,7 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
|
|||
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
|
||||
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
|
||||
|
||||
tweetnacl@^1.0.0:
|
||||
tweetnacl@^1.0.0, tweetnacl@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"
|
||||
integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
|
||||
|
@ -12271,6 +12416,11 @@ typedarray@^0.0.6:
|
|||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||
|
||||
typeforce@^1.11.5:
|
||||
version "1.18.0"
|
||||
resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc"
|
||||
integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==
|
||||
|
||||
typescript@^3.9.7:
|
||||
version "3.9.9"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674"
|
||||
|
@ -12392,7 +12542,7 @@ url-loader@2.3.0:
|
|||
mime "^2.4.4"
|
||||
schema-utils "^2.5.0"
|
||||
|
||||
url-parse@^1.4.3:
|
||||
url-parse@^1.4.3, url-parse@^1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b"
|
||||
integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==
|
||||
|
@ -12645,6 +12795,45 @@ webpack-dev-server@3.11.0:
|
|||
ws "^6.2.1"
|
||||
yargs "^13.3.2"
|
||||
|
||||
webpack-dev-server@^3.11.2:
|
||||
version "3.11.2"
|
||||
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708"
|
||||
integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==
|
||||
dependencies:
|
||||
ansi-html "0.0.7"
|
||||
bonjour "^3.5.0"
|
||||
chokidar "^2.1.8"
|
||||
compression "^1.7.4"
|
||||
connect-history-api-fallback "^1.6.0"
|
||||
debug "^4.1.1"
|
||||
del "^4.1.1"
|
||||
express "^4.17.1"
|
||||
html-entities "^1.3.1"
|
||||
http-proxy-middleware "0.19.1"
|
||||
import-local "^2.0.0"
|
||||
internal-ip "^4.3.0"
|
||||
ip "^1.1.5"
|
||||
is-absolute-url "^3.0.3"
|
||||
killable "^1.0.1"
|
||||
loglevel "^1.6.8"
|
||||
opn "^5.5.0"
|
||||
p-retry "^3.0.1"
|
||||
portfinder "^1.0.26"
|
||||
schema-utils "^1.0.0"
|
||||
selfsigned "^1.10.8"
|
||||
semver "^6.3.0"
|
||||
serve-index "^1.9.1"
|
||||
sockjs "^0.3.21"
|
||||
sockjs-client "^1.5.0"
|
||||
spdy "^4.0.2"
|
||||
strip-ansi "^3.0.1"
|
||||
supports-color "^6.1.0"
|
||||
url "^0.11.0"
|
||||
webpack-dev-middleware "^3.7.2"
|
||||
webpack-log "^2.0.0"
|
||||
ws "^6.2.1"
|
||||
yargs "^13.3.2"
|
||||
|
||||
webpack-log@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
|
||||
|
@ -12714,7 +12903,7 @@ websocket-driver@0.6.5:
|
|||
dependencies:
|
||||
websocket-extensions ">=0.1.1"
|
||||
|
||||
websocket-driver@>=0.5.1:
|
||||
websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
|
||||
version "0.7.4"
|
||||
resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
|
||||
integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
|
||||
|
@ -12798,6 +12987,13 @@ which@^2.0.1:
|
|||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wif@^2.0.6:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704"
|
||||
integrity sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=
|
||||
dependencies:
|
||||
bs58check "<3.0.0"
|
||||
|
||||
word-wrap@~1.2.3:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
|
||||
|
|
Loading…
Reference in New Issue