From 324f4c019a183564ac4cabab7bdc1349f9041547 Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Fri, 13 Aug 2021 18:47:44 -0500 Subject: [PATCH 1/9] add wallet-adapters to common package, fix deps and tsconfig --- js/package.json | 12 +- js/packages/common/package.json | 12 +- .../common/src/components/AppBar/index.tsx | 5 +- .../src/components/ConnectButton/index.tsx | 63 ++- .../src/components/CurrentUserBadge/index.tsx | 32 +- .../src/components/EtherscanLink/index.tsx | 2 +- .../common/src/components/Icons/info.tsx | 6 +- .../common/src/components/Input/numeric.tsx | 14 +- .../src/components/MetaplexOverlay/index.tsx | 25 +- .../common/src/components/Settings/index.tsx | 33 +- .../common/src/components/TokenIcon/index.tsx | 4 +- js/packages/common/src/contexts/accounts.tsx | 35 +- .../common/src/contexts/connection.tsx | 25 +- js/packages/common/src/contexts/index.tsx | 8 +- js/packages/common/src/contexts/wallet.tsx | 440 +++++++--------- js/packages/common/src/contracts/token.ts | 9 +- js/packages/common/src/index.tsx | 9 +- js/packages/common/src/types/jazzicon.d.ts | 4 + .../common/src/types/sol-wallet-adapter.d.ts | 4 - .../common/src/utils/notifications.tsx | 18 +- .../common/src/wallet-adapters/index.tsx | 4 - .../src/wallet-adapters/phantom/index.tsx | 108 ---- .../src/wallet-adapters/solflare/index.tsx | 112 ---- .../src/wallet-adapters/solong/index.tsx | 62 --- .../src/wallet-adapters/solong_adapter.tsx | 57 -- .../src/wallet-adapters/torus/index.tsx | 97 ---- js/packages/web/package.json | 19 +- js/packages/web/tsconfig.json | 1 + js/yarn.lock | 495 ++++++------------ 29 files changed, 528 insertions(+), 1187 deletions(-) create mode 100644 js/packages/common/src/types/jazzicon.d.ts delete mode 100644 js/packages/common/src/types/sol-wallet-adapter.d.ts delete mode 100644 js/packages/common/src/wallet-adapters/index.tsx delete mode 100644 js/packages/common/src/wallet-adapters/phantom/index.tsx delete mode 100644 js/packages/common/src/wallet-adapters/solflare/index.tsx delete mode 100644 js/packages/common/src/wallet-adapters/solong/index.tsx delete mode 100644 js/packages/common/src/wallet-adapters/solong_adapter.tsx delete mode 100644 js/packages/common/src/wallet-adapters/torus/index.tsx diff --git a/js/package.json b/js/package.json index 216a2c7..299d32d 100644 --- a/js/package.json +++ b/js/package.json @@ -15,7 +15,7 @@ "build": "lerna run build", "start": "cross-env CI=true lerna run start --scope @oyster/common --stream --parallel --scope web", "lint": "eslint 'packages/*/{src,test}/**/*.ts' && prettier -c 'packages/*/{src,test}/**/*.ts'", - "lint:fix": "eslint --fix 'packages/*/{src,test}/**/*.ts' && prettier --write 'packages/*/{src,test}/**/*.ts'", + "lint:fix": "eslint --fix 'packages/*/{src,test}/**/*.ts' && prettier --write 'packages/*/{src,test}/**/*.{ts,tsx}'", "deploy": "run-s deploy:docs build deploy:apps && gh-pages -d docs", "deploy:docs": "lerna run docs", "deploy:apps": "lerna run deploy:app", @@ -45,16 +45,14 @@ "dependencies": { "cross-env": "^7.0.3", "next": "^11.0.1", - "react": "17.0.2", - "react-dom": "17.0.2" + "react": "^17.0.2", + "react-dom": "^17.0.2" }, "devDependencies": { "@commitlint/cli": "^8.2.0", "@commitlint/config-conventional": "^8.2.0", "@types/animejs": "^3.1.3", "@types/jest": "^24.0.0", - "@types/react": "^16.9.50", - "@types/react-dom": "^16.9.8", "@typescript-eslint/eslint-plugin": "^4.6.0", "@typescript-eslint/parser": "^4.6.0", "eslint": "^6.6.0", @@ -71,9 +69,5 @@ "ts-jest": "^24.0.0", "ts-node": "^9.0.0", "typescript": "^4.1.3" - }, - "resolutions": { - "react": "17.0.2", - "react-dom": "17.0.2" } } diff --git a/js/packages/common/package.json b/js/packages/common/package.json index abc84a1..d61a57d 100644 --- a/js/packages/common/package.json +++ b/js/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@oyster/common", - "version": "0.0.1", + "version": "0.0.2", "description": "Oyster common utilities", "main": "dist/lib/index.js", "types": "dist/lib/index.d.ts", @@ -30,11 +30,11 @@ }, "dependencies": { "@project-serum/serum": "^0.13.52", - "@project-serum/sol-wallet-adapter": "^0.2.5", "@solana/spl-token": "0.1.6", "@solana/spl-token-registry": "0.2.202", - "@solana/wallet-base": "0.0.1", - "@solana/wallet-ledger": "0.0.1", + "@solana/wallet-adapter-base": "^0.4.1", + "@solana/wallet-adapter-react": "^0.7.0", + "@solana/wallet-adapter-wallets": "^0.6.0", "@solana/web3.js": "^1.21.0", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.5.0", @@ -76,9 +76,5 @@ "peerDependencies": { "react": "*", "react-dom": "*" - }, - "resolutions": { - "react": "17.0.2", - "react-dom": "17.0.2" } } diff --git a/js/packages/common/src/components/AppBar/index.tsx b/js/packages/common/src/components/AppBar/index.tsx index 1e44d00..ece71b2 100644 --- a/js/packages/common/src/components/AppBar/index.tsx +++ b/js/packages/common/src/components/AppBar/index.tsx @@ -5,7 +5,8 @@ import { SettingOutlined } from '@ant-design/icons'; import { Settings } from '../Settings'; import { LABELS } from '../../constants/labels'; import { ConnectButton } from '..'; -import { useWallet } from '../../contexts/wallet'; +import { useWallet } from '@solana/wallet-adapter-react'; + export const AppBar = (props: { left?: JSX.Element; right?: JSX.Element; @@ -23,8 +24,8 @@ export const AppBar = (props: { )} { +export interface ConnectButtonProps + extends ButtonProps, + React.RefAttributes { allowWalletChange?: boolean; } -export const ConnectButton = ( - props: ConnectButtonProps -) => { - const { connected, connect, select, provider } = useWallet(); +export const ConnectButton = (props: ConnectButtonProps) => { const { onClick, children, disabled, allowWalletChange, ...rest } = props; + const { wallet, connect, connected } = useWallet(); + const { setVisible } = useWalletModal(); + const open = useCallback(() => setVisible(true), [setVisible]); + + const handleClick = useCallback( + () => (wallet ? connect().catch(() => {}) : open()), + [wallet, connect, open], + ); + // only show if wallet selected or user connected - const menu = ( - - Change Wallet - - ); - - if(!provider || !allowWalletChange) { - return ; + if (!wallet || !allowWalletChange) { + return ( + + ); } return ( + onClick={handleClick} + disabled={connected && disabled} + overlay={ + + Change Wallet + + } + > Connect ); diff --git a/js/packages/common/src/components/CurrentUserBadge/index.tsx b/js/packages/common/src/components/CurrentUserBadge/index.tsx index 8524f34..b9eb2a0 100644 --- a/js/packages/common/src/components/CurrentUserBadge/index.tsx +++ b/js/packages/common/src/components/CurrentUserBadge/index.tsx @@ -1,10 +1,8 @@ import React from 'react'; - -import { Identicon } from '../Identicon'; import { LAMPORTS_PER_SOL } from '@solana/web3.js'; -import { useWallet } from '../../contexts/wallet'; +import { useWallet } from '@solana/wallet-adapter-react'; import { useNativeAccount } from '../../contexts/accounts'; -import { formatNumber, shortenAddress } from '../../utils'; +import { formatNumber } from '../../utils'; import { Popover } from 'antd'; import { Settings } from '../Settings'; @@ -13,10 +11,10 @@ export const CurrentUserBadge = (props: { showAddress?: boolean; iconSize?: number; }) => { - const { wallet } = useWallet(); + const { wallet, publicKey } = useWallet(); const { account } = useNativeAccount(); - if (!wallet || !wallet.publicKey) { + if (!wallet || !publicKey) { return null; } @@ -24,12 +22,12 @@ export const CurrentUserBadge = (props: { ? { marginLeft: '0.5rem', display: 'flex', - width: props.iconSize, + width: props.iconSize || 20, borderRadius: 50, } : { display: 'flex', - width: props.iconSize, + width: props.iconSize || 20, paddingLeft: 0, borderRadius: 50, }; @@ -43,20 +41,6 @@ export const CurrentUserBadge = (props: { ? baseWalletKey : { ...baseWalletKey, paddingLeft: 0 }; - let name = props.showAddress ? shortenAddress(`${wallet.publicKey}`) : ''; - const unknownWallet = wallet as any; - if (unknownWallet.name) { - name = unknownWallet.name; - } - - let image = ( - - ); - - if (unknownWallet.image) { - image = ; - } - return (
{props.showBalance && ( @@ -72,8 +56,8 @@ export const CurrentUserBadge = (props: { trigger="click" >
- {name && {name}} - {image} + {wallet.name} +
diff --git a/js/packages/common/src/components/EtherscanLink/index.tsx b/js/packages/common/src/components/EtherscanLink/index.tsx index 321febb..745daf3 100644 --- a/js/packages/common/src/components/EtherscanLink/index.tsx +++ b/js/packages/common/src/components/EtherscanLink/index.tsx @@ -3,7 +3,7 @@ import { Typography } from 'antd'; import { shortenAddress } from '../../utils/utils'; export const EtherscanLink = (props: { - address: string ; + address: string; type: string; code?: boolean; style?: React.CSSProperties; diff --git a/js/packages/common/src/components/Icons/info.tsx b/js/packages/common/src/components/Icons/info.tsx index 4bb0e3a..6ef9758 100644 --- a/js/packages/common/src/components/Icons/info.tsx +++ b/js/packages/common/src/components/Icons/info.tsx @@ -1,7 +1,7 @@ -import { Button, Popover } from "antd"; -import React from "react"; +import { Button, Popover } from 'antd'; +import React from 'react'; -import { InfoCircleOutlined } from "@ant-design/icons"; +import { InfoCircleOutlined } from '@ant-design/icons'; export const Info = (props: { text: React.ReactElement; diff --git a/js/packages/common/src/components/Input/numeric.tsx b/js/packages/common/src/components/Input/numeric.tsx index c307e3e..84ebc77 100644 --- a/js/packages/common/src/components/Input/numeric.tsx +++ b/js/packages/common/src/components/Input/numeric.tsx @@ -1,11 +1,11 @@ -import React from "react"; -import { Input } from "antd"; +import React from 'react'; +import { Input } from 'antd'; export class NumericInput extends React.Component { onChange = (e: any) => { const { value } = e.target; const reg = /^-?\d*(\.\d*)?$/; - if (reg.test(value) || value === "" || value === "-") { + if (reg.test(value) || value === '' || value === '-') { this.props.onChange(value); } }; @@ -17,14 +17,14 @@ export class NumericInput extends React.Component { if (value === undefined || value === null) return; if ( value.charAt && - (value.charAt(value.length - 1) === "." || value === "-") + (value.charAt(value.length - 1) === '.' || value === '-') ) { valueTemp = value.slice(0, -1); } - if (value.startsWith && (value.startsWith(".") || value.startsWith("-."))) { - valueTemp = valueTemp.replace(".", "0."); + if (value.startsWith && (value.startsWith('.') || value.startsWith('-.'))) { + valueTemp = valueTemp.replace('.', '0.'); } - if (valueTemp.replace) onChange?.(valueTemp.replace(/0*(\d+)/, "$1")); + if (valueTemp.replace) onChange?.(valueTemp.replace(/0*(\d+)/, '$1')); if (onBlur) { onBlur(); } diff --git a/js/packages/common/src/components/MetaplexOverlay/index.tsx b/js/packages/common/src/components/MetaplexOverlay/index.tsx index 2c9d787..8ff1133 100644 --- a/js/packages/common/src/components/MetaplexOverlay/index.tsx +++ b/js/packages/common/src/components/MetaplexOverlay/index.tsx @@ -2,18 +2,21 @@ import React from 'react'; import { Modal } from 'antd'; export const MetaplexOverlay = (props: any) => { + const { children, ...rest } = props; - const { children, ...rest } = props - - const content =
- {children} -
+ const content = ( +
+ {children} +
+ ); return ( { - const { connected, disconnect, select, wallet } = useWallet(); + const { connected, disconnect, publicKey } = useWallet(); const { endpoint, setEndpoint } = useConnectionConfig(); + const { setVisible } = useWalletModal(); + const open = useCallback(() => setVisible(true), [setVisible]); return ( <> @@ -31,26 +34,30 @@ export const Settings = ({ {connected && ( <> Wallet: - {wallet?.publicKey && ( + {publicKey && ( )} - + ); + }) + ) : ( + <> + +

setShowWallets(true)} + style={{ cursor: 'pointer', marginTop: 10 }} + > + Select a different Solana wallet +

+ + )} + ); - const [providerUrl, setProviderUrl] = useLocalStorageState('walletProvider'); +}; - const provider = useMemo( - () => WALLET_PROVIDERS.find(({ url }) => url === providerUrl), - [providerUrl], - ); - - const wallet = useMemo( - function () { - if (provider) { - return new (provider.adapter || Wallet)( - providerUrl, - endpoint, - ) as WalletAdapter; - } - }, - [provider, providerUrl, endpoint], - ); - - const [connected, setConnected] = useState(false); +export const WalletModalProvider: FC<{ children: ReactNode }> = ({ + children, +}) => { + const { publicKey } = useWallet(); + const [connected, setConnected] = useState(!!publicKey); + const [visible, setVisible] = useState(false); useEffect(() => { - if (wallet?.publicKey && connected) { - const walletPublicKey = wallet.publicKey.toBase58(); + if (publicKey) { + const base58 = publicKey.toBase58(); const keyToDisplay = - walletPublicKey.length > 20 - ? `${walletPublicKey.substring(0, 7)}.....${walletPublicKey.substring( - walletPublicKey.length - 7, - walletPublicKey.length, + base58.length > 20 + ? `${base58.substring(0, 7)}.....${base58.substring( + base58.length - 7, + base58.length, )}` - : walletPublicKey; + : base58; + notify({ message: 'Wallet update', description: 'Connected to wallet ' + keyToDisplay, }); } - }, [connected]); + }, [publicKey]); useEffect(() => { - if (wallet) { - wallet.on('connect', () => { - if (wallet.publicKey) { - setConnected(true); - } - }); - - wallet.on('disconnect', () => { - setConnected(false); - notify({ - message: 'Wallet update', - description: 'Disconnected from wallet', - }); + if (!publicKey && connected) { + notify({ + message: 'Wallet update', + description: 'Disconnected from wallet', }); } - - return () => { - setConnected(false); - if (wallet) { - wallet.disconnect(); - } - }; - }, [wallet]); - - useEffect(() => { - if (wallet && autoConnect) { - wallet.connect(); - setAutoConnect(false); - } - - return () => {}; - }, [wallet, autoConnect]); - - const [isModalVisible, setIsModalVisible] = useState(false); - const [showProviders, setShowProviders] = useState(false); - - const select = useCallback(() => setIsModalVisible(true), []); - const close = useCallback(() => { - setIsModalVisible(false); - setShowProviders(false); - }, []); - - const pp = WALLET_PROVIDERS.find(wp => wp.name === 'Phantom'); + setConnected(!!publicKey); + }, [publicKey, connected, setConnected]); return ( - {children} - -
- M -
- -

{provider ? 'Change provider' : 'Welcome to Metaplex'}

-

- {provider - ? 'Feel free to switch wallet provider' - : 'You must be signed in to place a bid'} -

- -
- - {provider || showProviders ? ( - <> - {WALLET_PROVIDERS.map((provider, idx) => { - if (providerUrl === provider.url) return null; - - const onClick = function () { - setProviderUrl(provider.url); - setAutoConnect(true); - close(); - }; - return ( - - ); - })} - - ) : ( - <> - -

setShowProviders(true)} - style={{ cursor: 'pointer', marginTop: 10 }} - > - Select a different Solana wallet -

- - )} -
-
+ + ); -} - -export const useWallet = () => { - const { wallet, connected, provider, select } = useContext(WalletContext); - return { - wallet, - connected, - provider, - select, - connect() { - wallet ? wallet.connect() : select(); - }, - disconnect() { - wallet?.disconnect(); - }, - }; }; + +export const WalletProvider: FC<{ children: ReactNode }> = ({ children }) => { + const wallets = useMemo( + () => [ + getPhantomWallet(), + getSolflareWallet(), + getTorusWallet({ + options: { + // @FIXME: this should be changed for Metaplex, and by each Metaplex storefront + clientId: + 'BOM5Cl7PXgE9Ylq1Z1tqzhpydY0RVr8k90QQ85N7AKI5QGSrr9iDC-3rvmy0K_hF0JfpLMiXoDhta68JwcxS1LQ', + }, + }), + getLedgerWallet(), + getSolongWallet(), + getMathWallet(), + getSolletWallet(), + ], + [], + ); + + const onError = useCallback((error: WalletError) => { + console.error(error); + notify({ + message: 'Wallet error', + description: error.message, + }); + }, []); + + return ( + + {children} + + ); +}; + +export type WalletSigner = Pick< + WalletAdapter, + 'publicKey' | 'signTransaction' | 'signAllTransactions' +>; diff --git a/js/packages/common/src/contracts/token.ts b/js/packages/common/src/contracts/token.ts index 9755a54..a09d52e 100644 --- a/js/packages/common/src/contracts/token.ts +++ b/js/packages/common/src/contracts/token.ts @@ -11,16 +11,17 @@ import { Account, SystemProgram, } from '@solana/web3.js'; +import { WalletSigner } from '../contexts'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; export const mintNFT = async ( connection: Connection, - wallet: { - publicKey: PublicKey; - signTransaction: (tx: Transaction) => Transaction; - }, + wallet: WalletSigner, // SOL account owner: PublicKey, ) => { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const TOKEN_PROGRAM_ID = new PublicKey( 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', ); diff --git a/js/packages/common/src/index.tsx b/js/packages/common/src/index.tsx index d0985ce..dbff96b 100644 --- a/js/packages/common/src/index.tsx +++ b/js/packages/common/src/index.tsx @@ -1,17 +1,14 @@ export * as actions from './actions'; export * from './actions'; export * as components from './components'; -export * from './components'; // Allow direct exports too +export * from './components'; export * as constants from './constants'; +export * from './constants'; export * as hooks from './hooks'; export * from './hooks'; export * as contexts from './contexts'; export * from './contexts'; export * as models from './models'; +export * from './models'; export * as utils from './utils'; export * from './utils'; -export * as walletAdapters from './wallet-adapters'; - -export { TokenAccount } from './models'; -export { ParsedAccount, ParsedAccountBase } from './contexts'; -export { KnownTokenMap, EventEmitter, Layout } from './utils'; diff --git a/js/packages/common/src/types/jazzicon.d.ts b/js/packages/common/src/types/jazzicon.d.ts new file mode 100644 index 0000000..3c462ee --- /dev/null +++ b/js/packages/common/src/types/jazzicon.d.ts @@ -0,0 +1,4 @@ +declare module 'jazzicon' { + const jazzicon: any; + export = jazzicon; +} diff --git a/js/packages/common/src/types/sol-wallet-adapter.d.ts b/js/packages/common/src/types/sol-wallet-adapter.d.ts deleted file mode 100644 index 41acf5d..0000000 --- a/js/packages/common/src/types/sol-wallet-adapter.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '@project-serum/sol-wallet-adapter' { - const adapter: any; - export = adapter; -} diff --git a/js/packages/common/src/utils/notifications.tsx b/js/packages/common/src/utils/notifications.tsx index ae1dc15..a6d2ad8 100644 --- a/js/packages/common/src/utils/notifications.tsx +++ b/js/packages/common/src/utils/notifications.tsx @@ -1,13 +1,13 @@ -import React from "react"; -import { notification } from "antd"; +import React from 'react'; +import { notification } from 'antd'; // import Link from '../components/Link'; export function notify({ - message = "", + message = '', description = undefined as any, - txid = "", - type = "info", - placement = "bottomLeft", + txid = '', + type = 'info', + placement = 'bottomLeft', }) { if (txid) { // ; } (notification as any)[type]({ - message: {message}, + message: {message}, description: ( - {description} + {description} ), placement, style: { - backgroundColor: "white", + backgroundColor: 'white', }, }); } diff --git a/js/packages/common/src/wallet-adapters/index.tsx b/js/packages/common/src/wallet-adapters/index.tsx deleted file mode 100644 index b1952ae..0000000 --- a/js/packages/common/src/wallet-adapters/index.tsx +++ /dev/null @@ -1,4 +0,0 @@ -export * from './solong'; -export * from './phantom'; -export * from './torus'; -export * as solong_adapter from './solong_adapter'; diff --git a/js/packages/common/src/wallet-adapters/phantom/index.tsx b/js/packages/common/src/wallet-adapters/phantom/index.tsx deleted file mode 100644 index 6618192..0000000 --- a/js/packages/common/src/wallet-adapters/phantom/index.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import EventEmitter from 'eventemitter3'; -import { PublicKey, Transaction } from '@solana/web3.js'; -import { notify } from '../../utils/notifications'; -import { WalletAdapter } from '@solana/wallet-base'; - -type PhantomEvent = 'disconnect' | 'connect'; -type PhantomRequestMethod = - | 'connect' - | 'disconnect' - | 'signTransaction' - | 'signAllTransactions'; - -interface PhantomProvider { - publicKey?: PublicKey; - isConnected?: boolean; - autoApprove?: boolean; - signTransaction: (transaction: Transaction) => Promise; - signAllTransactions: (transactions: Transaction[]) => Promise; - connect: () => Promise; - disconnect: () => Promise; - on: (event: PhantomEvent, handler: (args: any) => void) => void; - request: (method: PhantomRequestMethod, params: any) => Promise; -} - -export class PhantomWalletAdapter - extends EventEmitter - implements WalletAdapter { - _provider: PhantomProvider | undefined; - _cachedCorrectKey?: PublicKey; - constructor() { - super(); - this.connect = this.connect.bind(this); - } - - get connected() { - return this._provider?.isConnected || false; - } - - get autoApprove() { - return this._provider?.autoApprove || false; - } - - async signAllTransactions( - transactions: Transaction[], - ): Promise { - if (!this._provider) { - return transactions; - } - - return this._provider.signAllTransactions(transactions); - } - - get publicKey() { - // Due to weird phantom bug where their public key isnt quite like ours - if (!this._cachedCorrectKey && this._provider?.publicKey) - this._cachedCorrectKey = new PublicKey( - this._provider.publicKey.toBase58(), - ); - - return this._cachedCorrectKey || null; - } - - async signTransaction(transaction: Transaction) { - if (!this._provider) { - return transaction; - } - - return this._provider.signTransaction(transaction); - } - - connect = async () => { - if (this._provider) { - return; - } - - let provider: PhantomProvider; - if ((window as any)?.solana?.isPhantom) { - provider = (window as any).solana; - } else { - window.open('https://phantom.app/', '_blank'); - notify({ - message: 'Phantom Error', - description: 'Please install Phantom wallet from Chrome ', - }); - return; - } - - provider.on('connect', () => { - this._provider = provider; - this.emit('connect'); - }); - - if (!provider.isConnected) { - await provider.connect(); - } - - this._provider = provider; - this.emit('connect'); - }; - - disconnect() { - if (this._provider) { - this._provider.disconnect(); - this._provider = undefined; - this.emit('disconnect'); - } - } -} diff --git a/js/packages/common/src/wallet-adapters/solflare/index.tsx b/js/packages/common/src/wallet-adapters/solflare/index.tsx deleted file mode 100644 index 018bfab..0000000 --- a/js/packages/common/src/wallet-adapters/solflare/index.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import EventEmitter from 'eventemitter3'; -import { PublicKey, Transaction } from '@solana/web3.js'; -import { notify } from '../../utils/notifications'; -import { WalletAdapter } from '@solana/wallet-base'; - -interface SolflareWalletEvents { - connect: (...args: unknown[]) => unknown; - disconnect: (...args: unknown[]) => unknown; -} - -interface SolflareWallet extends EventEmitter { - isSolflare?: boolean; - publicKey?: { toBuffer(): Buffer }; - isConnected: boolean; - autoApprove: boolean; - signTransaction: (transaction: Transaction) => Promise; - signAllTransactions: (transactions: Transaction[]) => Promise; - connect: () => Promise; - disconnect: () => Promise; -} - -interface SolflareWindow extends Window { - solflare?: SolflareWallet; -} - -declare const window: SolflareWindow; - -export class SolflareWalletAdapter - extends EventEmitter - implements WalletAdapter { - - _wallet: SolflareWallet | undefined; - _publicKey: PublicKey | undefined; - - constructor() { - super(); - this.connect = this.connect.bind(this); - } - - get connected() { - return !!this._wallet?.isConnected; - } - - get autoApprove() { - return !!this._wallet?.autoApprove; - } - - async signAllTransactions( - transactions: Transaction[], - ): Promise { - if (!this._wallet) { - return transactions; - } - - return this._wallet.signAllTransactions(transactions); - } - - get publicKey() { - if (!this._publicKey && this._wallet?.publicKey) - this._publicKey = new PublicKey( - this._wallet.publicKey.toBuffer(), - ); - - return this._publicKey || null; - } - - async signTransaction(transaction: Transaction) { - if (!this._wallet) { - return transaction; - } - - return this._wallet.signTransaction(transaction); - } - - connect = async () => { - if (this._wallet) { - return; - } - - let wallet: SolflareWallet; - if (window.solflare?.isSolflare) { - wallet = window.solflare; - } else { - window.open('https://solflare.com', '_blank'); - notify({ - message: 'Solflare Error', - description: 'Please install Solflare wallet', - }); - return; - } - - wallet.on('connect', () => { - this._wallet = wallet; - this.emit('connect'); - }); - - if (!wallet.isConnected) { - await wallet.connect(); - } - - this._wallet = wallet; - this.emit('connect'); - }; - - disconnect() { - if (this._wallet) { - this._wallet.disconnect(); - this._wallet = undefined; - this.emit('disconnect'); - } - } -} diff --git a/js/packages/common/src/wallet-adapters/solong/index.tsx b/js/packages/common/src/wallet-adapters/solong/index.tsx deleted file mode 100644 index 4f2bcc6..0000000 --- a/js/packages/common/src/wallet-adapters/solong/index.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import EventEmitter from "eventemitter3"; -import {PublicKey, Transaction} from "@solana/web3.js"; -import { WalletAdapter } from "@solana/wallet-base"; -import { notify } from "../../utils/notifications"; - -export class SolongWalletAdapter extends EventEmitter implements WalletAdapter { - _publicKey: PublicKey | null; - _onProcess: boolean; - constructor() { - super(); - this._publicKey = null; - this._onProcess = false; - this.connect = this.connect.bind(this); - } - - get publicKey() { - return this._publicKey; - } - - async signTransaction(transaction: Transaction) { - return (window as any).solong.signTransaction(transaction); - } - - async signAllTransactions(transactions: Transaction[]) { - return transactions; - } - - connect() { - if (this._onProcess) { - return; - } - - if ((window as any).solong === undefined) { - notify({ - message: "Solong Error", - description: "Please install solong wallet from Chrome ", - }); - return; - } - - this._onProcess = true; - (window as any).solong - .selectAccount() - .then((account: any) => { - this._publicKey = new PublicKey(account); - this.emit("connect", this._publicKey); - }) - .catch(() => { - this.disconnect(); - }) - .finally(() => { - this._onProcess = false; - }); - } - - disconnect() { - if (this._publicKey) { - this._publicKey = null; - this.emit("disconnect"); - } - } -} diff --git a/js/packages/common/src/wallet-adapters/solong_adapter.tsx b/js/packages/common/src/wallet-adapters/solong_adapter.tsx deleted file mode 100644 index aef7dd6..0000000 --- a/js/packages/common/src/wallet-adapters/solong_adapter.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import EventEmitter from "eventemitter3"; -import { PublicKey } from "@solana/web3.js"; -import { notify } from "../utils/notifications"; - -export class SolongAdapter extends EventEmitter { - _publicKey: any; - _onProcess: boolean; - constructor(providerUrl: string, network: string) { - super(); - this._publicKey = null; - this._onProcess = false; - this.connect = this.connect.bind(this); - } - - get publicKey() { - return this._publicKey; - } - - async signTransaction(transaction: any) { - return (window as any).solong.signTransaction(transaction); - } - - connect() { - if (this._onProcess) { - return; - } - - if ((window as any).solong === undefined) { - notify({ - message: "Solong Error", - description: "Please install solong wallet from Chrome ", - }); - return; - } - - this._onProcess = true; - (window as any).solong - .selectAccount() - .then((account: any) => { - this._publicKey = new PublicKey(account); - this.emit("connect", this._publicKey); - }) - .catch(() => { - this.disconnect(); - }) - .finally(() => { - this._onProcess = false; - }); - } - - disconnect() { - if (this._publicKey) { - this._publicKey = null; - this.emit("disconnect"); - } - } -} diff --git a/js/packages/common/src/wallet-adapters/torus/index.tsx b/js/packages/common/src/wallet-adapters/torus/index.tsx deleted file mode 100644 index 12088ed..0000000 --- a/js/packages/common/src/wallet-adapters/torus/index.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import EventEmitter from "eventemitter3" -import { Keypair, PublicKey, Transaction } from "@solana/web3.js" -import { WalletAdapter } from "@solana/wallet-base" -import OpenLogin from "@toruslabs/openlogin" -import { getED25519Key } from "@toruslabs/openlogin-ed25519" - -const getSolanaPrivateKey = (openloginKey: string)=>{ - const { sk } = getED25519Key(openloginKey) - return sk -} - -export class TorusWalletAdapter extends EventEmitter implements WalletAdapter { - _provider: OpenLogin | undefined; - endpoint: string; - providerUrl: string; - account: Keypair | undefined; - image: string = ''; - name: string = ''; - - constructor(providerUrl: string, endpoint: string) { - super() - this.connect = this.connect.bind(this) - this.endpoint = endpoint; - this.providerUrl = providerUrl; - } - - async signAllTransactions(transactions: Transaction[]): Promise { - if(this.account) { - let account = this.account; - transactions.forEach(t => t.partialSign(account)); - } - - return transactions - } - - get publicKey() { - return this.account?.publicKey || null; - } - - async signTransaction(transaction: Transaction) { - if(this.account) { - transaction.partialSign(this.account) - } - - return transaction - } - - connect = async () => { - this._provider = new OpenLogin({ - clientId: process.env.REACT_APP_CLIENT_ID || 'BKBTX-SmaEFGddZQrwqd65YFoImRQLca_Tj2IdmKyD2UbDpzrtN2WQ-NYLuej6gP0DfF3jSpEkI13wPt1uPedm0', - network: "mainnet", // mainnet, testnet, development - uxMode: 'popup' - }); - - try { - await this._provider.init(); - } catch (ex) { - console.error('init failed', ex) - } - - console.error(this._provider?.state.store); - - if (this._provider.privKey) { - const privateKey = this._provider.privKey; - console.log(privateKey); - const secretKey = getSolanaPrivateKey(privateKey); - console.log(secretKey); - this.account = Keypair.fromSecretKey(secretKey); - } else { - try { - const { privKey } = await this._provider.login(); - console.log(privKey); - const secretKey = getSolanaPrivateKey(privKey); - console.log(secretKey); - this.account = Keypair.fromSecretKey(secretKey); - } catch(ex) { - console.error('login failed', ex); - } - } - - console.log(this.account?.publicKey.toBase58()); - this.name = this._provider?.state.store.get('name');; - this.image = this._provider?.state.store.get('profileImage');; - - this.emit("connect"); - } - - disconnect = async () => { - console.log("Disconnecting...") - if (this._provider) { - await this._provider.logout(); - await this._provider._cleanup(); - this._provider = undefined; - this.emit("disconnect"); - } - } -} diff --git a/js/packages/web/package.json b/js/packages/web/package.json index 3a37eef..583ae4c 100644 --- a/js/packages/web/package.json +++ b/js/packages/web/package.json @@ -5,18 +5,14 @@ "@ant-design/icons": "^4.4.0", "@babel/preset-typescript": "^7.12.13", "@cloudflare/stream-react": "^1.1.0", - "@oyster/common": "0.0.1", + "@oyster/common": "0.0.2", "@project-serum/serum": "^0.13.52", - "@project-serum/sol-wallet-adapter": "^0.2.5", "@solana/spl-name-service": "0.1.3", "@solana/spl-token": "0.1.6", "@solana/spl-token-registry": "^0.2.202", - "@solana/wallet-base": "0.0.1", - "@solana/wallet-ledger": "0.0.1", + "@solana/wallet-adapter-base": "^0.4.1", + "@solana/wallet-adapter-react": "^0.7.0", "@solana/web3.js": "^1.21.0", - "@toruslabs/openlogin": "0.9.0", - "@toruslabs/openlogin-ed25519": "0.9.0", - "@toruslabs/openlogin-utils": "0.9.0", "@welldone-software/why-did-you-render": "^6.0.5", "bn.js": "^5.1.3", "borsh": "^0.4.0", @@ -31,10 +27,10 @@ "next": "^11.0.1", "next-compose-plugins": "^2.2.1", "next-with-less": "^1.0.0", - "react": "16.13.1", + "react": "17.0.2", "react-chartjs-2": "^3.0.4", "react-content-loader": "^6.0.3", - "react-dom": "16.13.1", + "react-dom": "17.0.2", "react-intersection-observer": "^8.32.0", "react-masonry-css": "^1.0.16", "react-router-dom": "^5.2.0", @@ -100,10 +96,5 @@ "react": "*", "react-dom": "*" }, - "resolutions": { - "next": "11.0.1", - "react": "17.0.2", - "react-dom": "17.0.2" - }, "license": "MIT" } diff --git a/js/packages/web/tsconfig.json b/js/packages/web/tsconfig.json index 7a9b7bb..21ad486 100644 --- a/js/packages/web/tsconfig.json +++ b/js/packages/web/tsconfig.json @@ -15,6 +15,7 @@ "noFallthroughCasesInSwitch": true, "module": "esnext", "moduleResolution": "node", + "noImplicitAny": false, "resolveJsonModule": true, "isolatedModules": true, "downlevelIteration": true, diff --git a/js/yarn.lock b/js/yarn.lock index 290eca3..b9c8d64 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -339,7 +339,7 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": version "7.14.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== @@ -992,44 +992,44 @@ dependencies: "@json-rpc-tools/types" "^1.6.1" -"@ledgerhq/devices@^5.51.1": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.51.1.tgz#d741a4a5d8f17c2f9d282fd27147e6fe1999edb7" - integrity sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA== +"@ledgerhq/devices@^6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-6.3.0.tgz#7ee59614198882311d1805912e368451527d05b2" + integrity sha512-DmVxqMAf3FhkpKjkbBCFVJ5DmesfplujeCLzFwO/zF5VGuwY7xxPqeSxlpusXJkqhEq+DbFzIDRWJYDf7rtXqg== dependencies: - "@ledgerhq/errors" "^5.50.0" - "@ledgerhq/logs" "^5.50.0" + "@ledgerhq/errors" "^6.2.0" + "@ledgerhq/logs" "^6.2.0" rxjs "6" semver "^7.3.5" -"@ledgerhq/errors@^5.50.0": - version "5.50.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.50.0.tgz#e3a6834cb8c19346efca214c1af84ed28e69dad9" - integrity sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow== +"@ledgerhq/errors@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.2.0.tgz#7dc2b3bf6bdedccdaa1b97dccacfa912c4fc22f8" + integrity sha512-eO03x8HJmG60WtlrMuahigW/rwywFdcGzCnihta/MjkM8BD9A660cKVkyIuheCcpaB7UV/r+QsRl9abHbjjaag== -"@ledgerhq/hw-transport-webusb@^5.41.0": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-5.51.1.tgz#664a46dcde36ff78107dea44e32a1647d8e2e93f" - integrity sha512-k35KUlMT8I4X/Zj89sRrIyQ8ApSWSRc/uF/eu6Qv+0cp9mMIty/cfg9v0sBwJ3EA9FHQGY5jJHxJrWPWnZLMOg== +"@ledgerhq/hw-transport-webhid@^6.2.0": + version "6.4.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.4.1.tgz#81f0939c95154b47e00c7e95d6ccdfdbd3f883bc" + integrity sha512-usMuN/WpbReNk7/bKCCM9MKuqM2DlidJbgMFUqXpa1VAlDPI0M7lVhcutXTzILzgDNySMb0HLmRkio8zRXgRZg== dependencies: - "@ledgerhq/devices" "^5.51.1" - "@ledgerhq/errors" "^5.50.0" - "@ledgerhq/hw-transport" "^5.51.1" - "@ledgerhq/logs" "^5.50.0" + "@ledgerhq/devices" "^6.3.0" + "@ledgerhq/errors" "^6.2.0" + "@ledgerhq/hw-transport" "^6.3.0" + "@ledgerhq/logs" "^6.2.0" -"@ledgerhq/hw-transport@^5.51.1": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz#8dd14a8e58cbee4df0c29eaeef983a79f5f22578" - integrity sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw== +"@ledgerhq/hw-transport@^6.2.0", "@ledgerhq/hw-transport@^6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.3.0.tgz#4fc966b1a68c991c0a6b5384841f99c4f8304ce9" + integrity sha512-kdnVrgmxrFtKaRdkoaQBEa02RXgLzEBiooYbxA65BGSJig3PGWDS9LrqNpzLTZM1RQlivd9NLBmfwU2ze4chWA== dependencies: - "@ledgerhq/devices" "^5.51.1" - "@ledgerhq/errors" "^5.50.0" + "@ledgerhq/devices" "^6.3.0" + "@ledgerhq/errors" "^6.2.0" events "^3.3.0" -"@ledgerhq/logs@^5.50.0": - version "5.50.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" - integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== +"@ledgerhq/logs@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.2.0.tgz#9fb2d6f1811316697f7b3cc14607f6c608912419" + integrity sha512-SLyFyD7ElMhgKWPYedFGCT/ilcbGPgL5hXXYHxOM79Fs5fWi0zaUpt5oGqGMsOAAFaMa9/rbun0pokzPhEFz8A== "@lerna/add@3.21.0": version "3.21.0" @@ -2067,52 +2067,74 @@ buffer-layout "^1.2.0" dotenv "10.0.0" -"@solana/wallet-base@0.0.1", "@solana/wallet-base@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@solana/wallet-base/-/wallet-base-0.0.1.tgz#9b1a898b0d4ca029fe2cf1dad1b00f63448e394c" - integrity sha512-9trTSPktrXuZMOSbGFgBn9V+bcnCkUfJOCJeE7UcisqZUhrxUsuryUUsmUtHn3pblGsTpZqHOdto/IMtsvQ32w== +"@solana/wallet-adapter-base@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.4.1.tgz#3264220c7eef5abaf7eca0e77cc51403f4f0fcf6" + integrity sha512-VkMB0g89FNnfBY3PSrZh6gULWvLcvAUrQtAzKpojYdkSxL/Cm2sH9JsLylXXhT0r1vOvEc72aR/otwrX5YHm2g== dependencies: - "@solana/web3.js" "^0.86.2" eventemitter3 "^4.0.7" - typescript "^4.1.3" -"@solana/wallet-ledger@0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@solana/wallet-ledger/-/wallet-ledger-0.0.1.tgz#485dbf00072cf5f1ad5e0586885f84dad8e13e85" - integrity sha512-AKj/xeg50nyuBMx+c6TSIfA03pzM2z1u4uQJQGNF1p4P5mSjgabo2r3ABYlTt+vuRAG5XSxQQNuKD2Zsv5AnEA== +"@solana/wallet-adapter-ledger@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-ledger/-/wallet-adapter-ledger-0.4.1.tgz#4ca71b8bab1e3c2aa90c9794891652447c40fc42" + integrity sha512-r9RgXwZNtqqy3v0hXvvWNh+pc2qT7JjAn1XMSuoa6S9SPET/X8Dut7GTuYqI3rb8WSJYUTtlxVD5qJq/amzLvA== dependencies: - "@ledgerhq/hw-transport-webusb" "^5.41.0" - "@solana/wallet-base" "^0.0.1" - "@solana/web3.js" "^0.86.2" - bn.js "^5.1.3" - bs58 "^4.0.1" - buffer-layout "^1.2.0" - eventemitter3 "^4.0.7" - lodash "^4.17.20" - typescript "^4.1.3" + "@ledgerhq/hw-transport" "^6.2.0" + "@ledgerhq/hw-transport-webhid" "^6.2.0" -"@solana/web3.js@^0.86.2": - version "0.86.4" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-0.86.4.tgz#69216d3928ca4727c25a1ea96c405e897156ac3b" - integrity sha512-FpabDmdyxBN5aHIVUWc9Q6pXJFWiLRm/xeyxFg9O9ICHjiUkd38omds7G0CAmykIccG7zaMziwtkXp+0KvQOhA== +"@solana/wallet-adapter-mathwallet@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-mathwallet/-/wallet-adapter-mathwallet-0.4.1.tgz#f5eb5eaef6874b25f50d1a412a9c39d04d5f3505" + integrity sha512-7HMp5E2ZRw2CJnj/q81/BaaXR/BdY+PuLRAXQk+JhAJTLqxKZXMYOy9IiTCgLfvrY82WVU6EbqlwgtC+ZwsGmw== + +"@solana/wallet-adapter-phantom@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-phantom/-/wallet-adapter-phantom-0.4.1.tgz#db5f70aa1cf293314b447a902995099e7a3a1c16" + integrity sha512-2Y3625SyQi0Kz9crqzrYOJD76jfDlcFhUEfJYlWWc+aJTnKwLECd91qGoBmms40PyBuTmdB9eJWTYT0Ev0NAig== + +"@solana/wallet-adapter-react@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-react/-/wallet-adapter-react-0.7.0.tgz#b8d19a9619adb012667456edc033c1d076d0dfdd" + integrity sha512-1ZPxWcbvcvsw4oE22XBtDr7jtKCOof0PGWsDsWhhW04wXqMNNKq+pxqYzjKlY9+WJpe0dx8Kyzar3PWN+wqJUg== + +"@solana/wallet-adapter-solflare@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-solflare/-/wallet-adapter-solflare-0.1.0.tgz#28e8bb9572a1f5fb43396168252e27f13c0b369a" + integrity sha512-UR0puHUlVQZVZPpEaGXPJPj5A0qzCq69eEqbFIHtVXogYwIRpS5w84fakzBw34DobgnELX0ODb913jS+hbz2sw== + +"@solana/wallet-adapter-sollet@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-sollet/-/wallet-adapter-sollet-0.4.1.tgz#e376ee2a2ad2167b6bde9285c1a176250284808a" + integrity sha512-GvGGtitK4nqK/1zGXM66+xrZAWX7rsdNofOT06g5iL87WyZ+oiTneA9VdJYH8UcCJSPU+J8th3Eou+TyvaYUaA== dependencies: - "@babel/runtime" "^7.3.1" - bn.js "^5.0.0" - bs58 "^4.0.1" - buffer "^5.4.3" - buffer-layout "^1.2.0" - crypto-hash "^1.2.2" - esdoc-inject-style-plugin "^1.0.0" - jayson "^3.0.1" - keccak "^3.0.1" - mz "^2.7.0" - node-fetch "^2.2.0" - npm-run-all "^4.1.5" - rpc-websockets "^7.4.2" - secp256k1 "^4.0.2" - superstruct "^0.8.3" - tweetnacl "^1.0.0" - ws "^7.0.0" + "@project-serum/sol-wallet-adapter" "^0.2.5" + +"@solana/wallet-adapter-solong@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-solong/-/wallet-adapter-solong-0.4.1.tgz#4adba03cf30cf4ac835813a1e1ebd48f1bc00129" + integrity sha512-rf2fDB2JY8mYwqjmN3hvh/5eOzHMG+7J8MMbntwR8EWBp7nEhDNz5QUZfeDuFW2VKc4Iqdm4WzB0WOMFtNlEhA== + +"@solana/wallet-adapter-torus@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-torus/-/wallet-adapter-torus-0.5.0.tgz#79ad003ebdae61f838b6bf97055304fec798fecc" + integrity sha512-NP9WGBfxMwTLjvyi/WICffcGLvdnVymcNIStawGqzryWlrTgzeVF7v5GYVwyt0DLnZRbVy0+oJdIs6M2U0uHsQ== + dependencies: + "@toruslabs/openlogin" "^0.9.2" + "@toruslabs/openlogin-ed25519" "^0.9.2" + "@types/keccak" "^3.0.1" + +"@solana/wallet-adapter-wallets@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-wallets/-/wallet-adapter-wallets-0.6.0.tgz#03117cb2d102de10da5d975da71da45f17cd1076" + integrity sha512-MazpY4QiGl/ljdZrTGsQnEZFEIcas+nmceeleSCz9L1BEu8AqovcqmW0Ak//yhGZm6C/3RfxgwpV+4PKOrrexQ== + dependencies: + "@solana/wallet-adapter-ledger" "^0.4.1" + "@solana/wallet-adapter-mathwallet" "^0.4.1" + "@solana/wallet-adapter-phantom" "^0.4.1" + "@solana/wallet-adapter-solflare" "^0.1.0" + "@solana/wallet-adapter-sollet" "^0.4.1" + "@solana/wallet-adapter-solong" "^0.4.1" + "@solana/wallet-adapter-torus" "^0.5.0" "@solana/web3.js@^1.12.0", "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0": version "1.21.0" @@ -2210,6 +2232,18 @@ optionalDependencies: secp256k1 "^3.8.0" +"@toruslabs/eccrypto@^1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@toruslabs/eccrypto/-/eccrypto-1.1.7.tgz#962954d6416f56ca2ba9bb9948cd08bd3b8cd0c4" + integrity sha512-zU4GnrH21yDY179fgp5Ovi4YjLdHy3WXM3QHCHAomYNxa03eAw2lxNR2bZ7kb698yk40s4WMrbnauukgabXH4Q== + dependencies: + acorn "^8.4.1" + elliptic "^6.5.4" + es6-promise "^4.2.8" + nan "^2.14.2" + optionalDependencies: + secp256k1 "^3.8.0" + "@toruslabs/fetch-node-details@^2.6.1": version "2.6.1" resolved "https://registry.yarnpkg.com/@toruslabs/fetch-node-details/-/fetch-node-details-2.6.1.tgz#33b33d4dc825c47666a4e96df22ac0ba7f2296d6" @@ -2225,42 +2259,49 @@ dependencies: deepmerge "^4.2.2" -"@toruslabs/openlogin-ed25519@0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-ed25519/-/openlogin-ed25519-0.9.0.tgz#919c83b35d50f25d68605b44669741805f5e7817" - integrity sha512-wzD6bCi0Ka1gJ5m39HGRLdAE6Ocuc8j/5eeCkQMvhoHfVZK8lfTubxFev/YKWhOwQRdr8HqcLsRYyCdrqvfueg== +"@toruslabs/http-helpers@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@toruslabs/http-helpers/-/http-helpers-1.4.0.tgz#6d2d4129d1126876b0616b7dffec3f4b339739b5" + integrity sha512-lPRhTWeChQunds2CGV70xvaoFMMebZAqZLpTYZjUJfziumQjT12w9HWLIzlRfGFVKoYUsUiZLpGHl0JEwHCcqg== + dependencies: + deepmerge "^4.2.2" + +"@toruslabs/openlogin-ed25519@^0.9.2": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-ed25519/-/openlogin-ed25519-0.9.5.tgz#2435fdb45f0bd021ccdcbdb35fa0ed6615869427" + integrity sha512-zlwVR6nQD+mFVlmCEogmSGb0+fCKphfrIZ19XDTidlWoqSRFBDl/daditf33aTH58rrEmb2l7JKkwEYkxhdZJA== dependencies: "@toruslabs/tweetnacl-js" "^1.0.3" -"@toruslabs/openlogin-jrpc@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-0.9.0.tgz#56dbfb1675856e8b280049959e884f6c3e5bc521" - integrity sha512-Hkj9oR8ROavWRqptorFv8R4ka0GJY0O5VXuF+9bnGyWxY0kEcRKsDvOZpS4XO31GXThUGyLusHY4prwYGhUQ9Q== +"@toruslabs/openlogin-jrpc@^0.9.5": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-0.9.5.tgz#6fb14e7908967ab610ae48e9204a617830e556e7" + integrity sha512-jLvOMhsCZlpFT3lA2PZzaUlXbtwYEXRIUDWVXIWWquuRI5zgH9Pg19HtQ2+i46ikEDl+KAiEoGKo5QuuY6iDXA== dependencies: - "@toruslabs/openlogin-utils" "^0.9.0" + "@toruslabs/openlogin-utils" "^0.9.5" end-of-stream "^1.4.4" - fast-safe-stringify "^2.0.7" + fast-safe-stringify "^2.0.8" once "^1.4.0" pump "^3.0.0" -"@toruslabs/openlogin-utils@0.9.0", "@toruslabs/openlogin-utils@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-utils/-/openlogin-utils-0.9.0.tgz#817c352284de786577df5ab11ec34152013cdebe" - integrity sha512-OJTjqD/b3eUhkQkTZVywT++qKqejtx/4lNUeLwNjrOVrURLFClnjiqa6QFM+lVBD3OJpEdrNXTyzHcUhDBMwAg== +"@toruslabs/openlogin-utils@^0.9.5": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-utils/-/openlogin-utils-0.9.5.tgz#b334cab762e8b3e24224cc2b4ebd96812c05288d" + integrity sha512-1SvgRvxW+PARIppW/w9UxXgMtMTvnDucWznDhzJC8JlvdIObJBcmFkzL1gh2nctXEwJJeUIusXz/v6EsDCVkNA== dependencies: base64url "^3.0.1" keccak "^3.0.1" randombytes "^2.1.0" -"@toruslabs/openlogin@0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@toruslabs/openlogin/-/openlogin-0.9.0.tgz#cef446291ab6ca81b98e148afa90eae8a8124e1a" - integrity sha512-K+VjTOYAIKnxkuEhVL7I6ZRdvMQSCzdIghixlTxNq/Of9ge4/5PDfWDB8PYeb1Tsqm+SU3AwVtgHkfnY4tOhxA== +"@toruslabs/openlogin@^0.9.2": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@toruslabs/openlogin/-/openlogin-0.9.5.tgz#417abadc7796c584c043e59d5574687fe864eca6" + integrity sha512-wtYPpWQs+8BluA8NBowYzZ9COR1hi53W1QT43SDvlGy6JkMidyISK/waLpA5l2hTDGd2OFbcHaGVi41p9co6IQ== dependencies: - "@toruslabs/eccrypto" "^1.1.6" - "@toruslabs/http-helpers" "^1.3.7" - "@toruslabs/openlogin-jrpc" "^0.9.0" - "@toruslabs/openlogin-utils" "^0.9.0" + "@toruslabs/eccrypto" "^1.1.7" + "@toruslabs/http-helpers" "^1.4.0" + "@toruslabs/openlogin-jrpc" "^0.9.5" + "@toruslabs/openlogin-utils" "^0.9.5" lodash.merge "^4.6.2" pump "^3.0.0" @@ -2467,6 +2508,13 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/keccak@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/keccak/-/keccak-3.0.1.tgz#1dfad12395f32927cf409707534dd796d57aa84c" + integrity sha512-/MxAVmtyyeOvZ6dGf3ciLwFRuV5M8DRIyYNFGHYI6UyBW4/XqyO0LZw+JFMvaeY3cHItQAkELclBU1x5ank6mg== + dependencies: + "@types/node" "*" + "@types/lodash@^4.14.159": version "4.14.170" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.170.tgz#0d67711d4bf7f4ca5147e9091b847479b87925d6" @@ -2536,13 +2584,6 @@ dependencies: "@types/react" "*" -"@types/react-dom@^16.9.8": - version "16.9.13" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.13.tgz#5898f0ee68fe200685e6b61d3d7d8828692814d0" - integrity sha512-34Hr3XnmUSJbUVDxIw/e7dhQn2BJZhJmlAaPyPwfTQyuVS9mV/CeyghFcXyvkJXxI7notQJz8mF8FeCVvloJrA== - dependencies: - "@types/react" "^16" - "@types/react-router-dom@^5.1.6": version "5.1.7" resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.7.tgz#a126d9ea76079ffbbdb0d9225073eb5797ab7271" @@ -2569,15 +2610,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@^16", "@types/react@^16.9.50": - version "16.14.8" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.8.tgz#4aee3ab004cb98451917c9b7ada3c7d7e52db3fe" - integrity sha512-QN0/Qhmx+l4moe7WJuTxNiTsjBwlBGHqKGvInSQCBdo7Qio0VtOqwsC0Wq7q3PbJlB0cR4Y4CVo1OOe6BOsOmA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - "@types/scheduler@*": version "0.16.1" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" @@ -3026,6 +3058,11 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" + integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== + aes-js@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" @@ -4300,11 +4337,6 @@ bonjour@^3.5.0: multicast-dns "^6.0.1" multicast-dns-service-types "^1.1.0" -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - borsh@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.4.0.tgz#9dd6defe741627f1315eac2a73df61421f6ddb9f" @@ -4806,28 +4838,6 @@ checkpoint-store@^1.1.0: dependencies: functional-red-black-tree "^1.0.1" -cheerio@0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - chokidar@3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" @@ -5503,21 +5513,6 @@ crypto@^1.0.1: resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037" integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - css.escape@1.5.1, css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" @@ -5944,22 +5939,6 @@ dom-helpers@^5.1.3: "@babel/runtime" "^7.8.7" csstype "^3.0.2" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - dom-walk@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" @@ -5975,16 +5954,6 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== - domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -5992,29 +5961,6 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -6178,16 +6124,6 @@ enquirer@^2.3.6: dependencies: ansi-colors "^4.1.1" -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -6323,14 +6259,6 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -esdoc-inject-style-plugin@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esdoc-inject-style-plugin/-/esdoc-inject-style-plugin-1.0.0.tgz#a13597368bb9fb89c365e066495caf97a4decbb1" - integrity sha1-oTWXNou5+4nDZeBmSVyvl6Tey7E= - dependencies: - cheerio "0.22.0" - fs-extra "1.0.0" - eslint-config-prettier@^6.15.0: version "6.15.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" @@ -7190,11 +7118,16 @@ fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.0.7: +fast-safe-stringify@^2.0.6: version "2.0.7" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== +fast-safe-stringify@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz#dc2af48c46cf712b683e849b2bbd446b32de936f" + integrity sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag== + fastq@^1.6.0: version "1.11.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" @@ -7476,15 +7409,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -7835,7 +7759,7 @@ globby@^9.2.0: pify "^4.0.1" slash "^2.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -8055,18 +7979,6 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - http-cache-semantics@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -8909,7 +8821,7 @@ istanbul-reports@^2.2.6: dependencies: html-escaper "^2.0.0" -jayson@^3.0.1, jayson@^3.4.4: +jayson@^3.4.4: version "3.6.3" resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.6.3.tgz#b0bb8d2e37e34e39e68044ab925fd92f103f1bd9" integrity sha512-H/JuWKaJwU8FbwofPHROvtGoMF6R3DB0GGPpYyIaRzXU50Ser/4likFVfo/bpTGe0csB7n/+uybxJpBvX40VOQ== @@ -9504,13 +9416,6 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -9605,13 +9510,6 @@ kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= - optionalDependencies: - graceful-fs "^4.1.9" - kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -9882,16 +9780,6 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= - -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= - lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -9902,26 +9790,6 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.defaults@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= - -lodash.flatten@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" - integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= - lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -9932,46 +9800,21 @@ lodash.ismatch@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= - lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.merge@^4.4.0, lodash.merge@^4.6.2: +lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= - lodash.set@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -10569,7 +10412,7 @@ mute-stream@0.0.8, mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mz@^2.5.0, mz@^2.7.0: +mz@^2.5.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== @@ -10583,6 +10426,11 @@ nan@^2.12.1, nan@^2.13.2, nan@^2.14.0, nan@^2.14.1, nan@^2.2.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +nan@^2.14.2: + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + nanoid@^3.1.22: version "3.1.23" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" @@ -10746,7 +10594,7 @@ node-fetch@2.1.2: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= -node-fetch@2.6.1, node-fetch@^2.2.0, node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.1: +node-fetch@2.6.1, node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== @@ -11011,13 +10859,6 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -12470,7 +12311,7 @@ react-content-loader@^6.0.3: resolved "https://registry.yarnpkg.com/react-content-loader/-/react-content-loader-6.0.3.tgz#32e28ca7120e0a2552fc26655d0d4448cc1fc0c5" integrity sha512-CIRgTHze+ls+jGDIfCitw27YkW2XcaMpsYORTUdBxsMFiKuUYMnlvY76dZE4Lsaa9vFXVw+41ieBEK7SJt0nug== -react-dom@16.13.1, react-dom@17.0.2: +react-dom@17.0.2, react-dom@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== @@ -12550,7 +12391,7 @@ react-virtualized@^9.22.3: prop-types "^15.7.2" react-lifecycles-compat "^3.0.4" -react@16.13.1, react@17.0.2: +react@17.0.2, react@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== @@ -12665,7 +12506,7 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.5.0, readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.5.0, readable-stream@^3.6.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== @@ -14170,14 +14011,6 @@ superstruct@^0.14.2: resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== -superstruct@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.8.4.tgz#478a19649f6b02c6319c02044db6a1f5863c391f" - integrity sha512-48Ors8IVWZm/tMr8r0Si6+mJiB7mkD7jqvIzktjJ4+EnP5tBp0qOpiM1J8sCUorKx+TXWrfb3i1UcjdD1YK/wA== - dependencies: - kind-of "^6.0.2" - tiny-invariant "^1.0.6" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -15654,7 +15487,7 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" -ws@^7.0.0, ws@^7.4.5: +ws@^7.4.5: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== From 3d3c27513af1e359c9447df546ab0ccdec8b3c88 Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Fri, 13 Aug 2021 18:53:23 -0500 Subject: [PATCH 2/9] use wallet-adapter in actions --- .../web/src/actions/addTokensToVault.ts | 6 ++- js/packages/web/src/actions/cancelBid.ts | 12 ++++-- .../web/src/actions/claimUnusedPrizes.ts | 20 +++++++--- .../web/src/actions/closePersonalEscrow.ts | 7 +++- js/packages/web/src/actions/closeVault.ts | 7 +++- .../web/src/actions/convertMasterEditions.ts | 6 ++- .../web/src/actions/createAuctionManager.ts | 28 ++++++++++---- .../src/actions/createExternalPriceAccount.ts | 7 +++- js/packages/web/src/actions/createVault.ts | 13 ++++++- .../decommAuctionManagerAndReturnPrizes.ts | 6 ++- ...precatedCreateReservationListsForTokens.ts | 7 +++- .../deprecatedPopulatePrintingTokens.ts | 6 ++- js/packages/web/src/actions/makeAuction.ts | 6 ++- .../actions/markItemsThatArentMineAsSold.ts | 14 +++++-- js/packages/web/src/actions/nft.tsx | 11 +++--- js/packages/web/src/actions/saveAdmin.ts | 6 ++- js/packages/web/src/actions/sendPlaceBid.ts | 8 +++- js/packages/web/src/actions/sendRedeemBid.ts | 38 ++++++++++++++----- .../web/src/actions/sendSignMetadata.ts | 11 +++++- .../actions/setVaultAndAuctionAuthorities.ts | 11 +++++- js/packages/web/src/actions/settle.ts | 10 +++-- .../web/src/actions/startAuctionManually.ts | 4 +- js/packages/web/src/actions/unwindVault.ts | 6 ++- 23 files changed, 189 insertions(+), 61 deletions(-) diff --git a/js/packages/web/src/actions/addTokensToVault.ts b/js/packages/web/src/actions/addTokensToVault.ts index f9e161e..a1dad65 100644 --- a/js/packages/web/src/actions/addTokensToVault.ts +++ b/js/packages/web/src/actions/addTokensToVault.ts @@ -10,12 +10,14 @@ import { models, findProgramAddress, MetadataKey, + WalletSigner, } from '@oyster/common'; import { AccountLayout } from '@solana/spl-token'; import BN from 'bn.js'; import { SafetyDepositDraft } from './createAuctionManager'; import { SafetyDepositConfig } from '../models/metaplex'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const { createTokenAccount, addTokenToInactiveVault, VAULT_PREFIX } = actions; const { approve } = models; @@ -34,7 +36,7 @@ const BATCH_SIZE = 1; // the vault for use. It issues a series of transaction instructions and signers for the sendTransactions batch. export async function addTokensToVault( connection: Connection, - wallet: any, + wallet: WalletSigner, vault: PublicKey, nfts: SafetyDepositInstructionTemplate[], ): Promise<{ @@ -42,6 +44,8 @@ export async function addTokensToVault( signers: Array; safetyDepositTokenStores: PublicKey[]; }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const PROGRAM_IDS = utils.programIds(); const accountRentExempt = await connection.getMinimumBalanceForRentExemption( diff --git a/js/packages/web/src/actions/cancelBid.ts b/js/packages/web/src/actions/cancelBid.ts index 52393f5..1cf6980 100644 --- a/js/packages/web/src/actions/cancelBid.ts +++ b/js/packages/web/src/actions/cancelBid.ts @@ -9,6 +9,7 @@ import { sendTransactions, ParsedAccount, BidderMetadata, + WalletSigner, } from '@oyster/common'; import { AccountLayout } from '@solana/spl-token'; import { @@ -21,10 +22,11 @@ import { AuctionView } from '../hooks'; import { BidRedemptionTicket, PrizeTrackingTicket } from '../models/metaplex'; import { claimUnusedPrizes } from './claimUnusedPrizes'; import { setupPlaceBid } from './sendPlaceBid'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; export async function sendCancelBid( connection: Connection, - wallet: any, + wallet: WalletSigner, payingAccount: PublicKey, auctionView: AuctionView, accountsByMint: Map, @@ -32,6 +34,8 @@ export async function sendCancelBid( bidRedemptions: Record>, prizeTrackingTickets: Record>, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let signers: Array = []; let instructions: Array = []; if ( @@ -64,7 +68,7 @@ export async function sendCancelBid( ); if ( - wallet?.publicKey?.equals(auctionView.auctionManager.authority) && + wallet.publicKey.equals(auctionView.auctionManager.authority) && auctionView.auction.info.ended() ) { await claimUnusedPrizes( @@ -102,10 +106,12 @@ export async function setupCancelBid( auctionView: AuctionView, accountsByMint: Map, accountRentExempt: number, - wallet: any, + wallet: WalletSigner, signers: Array, instructions: Array, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let cancelSigners: Keypair[] = []; let cancelInstructions: TransactionInstruction[] = []; let cleanupInstructions: TransactionInstruction[] = []; diff --git a/js/packages/web/src/actions/claimUnusedPrizes.ts b/js/packages/web/src/actions/claimUnusedPrizes.ts index a4a7aad..54bbf30 100644 --- a/js/packages/web/src/actions/claimUnusedPrizes.ts +++ b/js/packages/web/src/actions/claimUnusedPrizes.ts @@ -17,6 +17,7 @@ import { createAssociatedTokenAccountInstruction, MetadataKey, BidderMetadata, + WalletSigner, } from '@oyster/common'; import { AccountLayout, MintLayout } from '@solana/spl-token'; @@ -36,6 +37,7 @@ import { setupRedeemPrintingV2Instructions, } from './sendRedeemBid'; import { WinningConfigStateItem } from '../models/metaplex/deprecatedStates'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const { createTokenAccount } = actions; export async function findEligibleParticipationBidsForRedemption( @@ -81,7 +83,7 @@ export async function findEligibleParticipationBidsForRedemption( export async function claimUnusedPrizes( connection: Connection, - wallet: any, + wallet: WalletSigner, auctionView: AuctionView, accountsByMint: Map, bids: ParsedAccount[], @@ -274,12 +276,14 @@ async function setupRedeemInstructions( auctionView: AuctionView, accountsByMint: Map, accountRentExempt: number, - wallet: any, + wallet: WalletSigner, safetyDeposit: ParsedAccount, signers: Array, instructions: Array, winningConfigIndex: number, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let winningPrizeSigner: Keypair[] = []; let winningPrizeInstructions: TransactionInstruction[] = []; @@ -325,13 +329,15 @@ async function setupRedeemFullRightsTransferInstructions( auctionView: AuctionView, accountsByMint: Map, accountRentExempt: number, - wallet: any, + wallet: WalletSigner, safetyDeposit: ParsedAccount, item: AuctionViewItem, signers: Array, instructions: Array, winningConfigIndex: number, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let winningPrizeSigner: Keypair[] = []; let winningPrizeInstructions: TransactionInstruction[] = []; const claimed = auctionView.auctionManager.isItemClaimed( @@ -373,12 +379,14 @@ async function setupRedeemFullRightsTransferInstructions( async function setupWithdrawMasterEditionInstructions( connection: Connection, auctionView: AuctionView, - wallet: any, + wallet: WalletSigner, safetyDeposit: ParsedAccount, item: AuctionViewItem, signers: Array, instructions: Array, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + if (!item.masterEdition || !item.metadata) { return; } @@ -426,13 +434,15 @@ async function deprecatedSetupRedeemPrintingInstructions( auctionView: AuctionView, accountsByMint: Map, accountRentExempt: number, - wallet: any, + wallet: WalletSigner, safetyDeposit: ParsedAccount, item: AuctionViewItem, signers: Array, instructions: Array, winningConfigIndex: number, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + if (!item.masterEdition || !item.metadata) { return; } diff --git a/js/packages/web/src/actions/closePersonalEscrow.ts b/js/packages/web/src/actions/closePersonalEscrow.ts index 4c6e32d..4a613ae 100644 --- a/js/packages/web/src/actions/closePersonalEscrow.ts +++ b/js/packages/web/src/actions/closePersonalEscrow.ts @@ -4,9 +4,10 @@ import { PublicKey, TransactionInstruction, } from '@solana/web3.js'; -import { utils, sendTransactionWithRetry } from '@oyster/common'; +import { utils, sendTransactionWithRetry, WalletSigner } from '@oyster/common'; import { Token } from '@solana/spl-token'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; // When you are an artist and you receive royalties, due to the design of the system // it is to a permanent ATA WSOL account. This is because the auctioneer can't transfer monies // from your WSOL to your SOL wallet since you own both, and having the auctioneer temporarily @@ -15,9 +16,11 @@ import { Token } from '@solana/spl-token'; // notification. All we do is then transfer the lamports out of the account. export async function closePersonalEscrow( connection: Connection, - wallet: any, + wallet: WalletSigner, ata: PublicKey, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const PROGRAM_IDS = utils.programIds(); let signers: Keypair[] = []; diff --git a/js/packages/web/src/actions/closeVault.ts b/js/packages/web/src/actions/closeVault.ts index bdcaf86..2653dad 100644 --- a/js/packages/web/src/actions/closeVault.ts +++ b/js/packages/web/src/actions/closeVault.ts @@ -4,10 +4,11 @@ import { PublicKey, TransactionInstruction, } from '@solana/web3.js'; -import { actions, models } from '@oyster/common'; +import { actions, models, WalletSigner } from '@oyster/common'; import { AccountLayout } from '@solana/spl-token'; import BN from 'bn.js'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const { createTokenAccount, activateVault, combineVault } = actions; const { approve } = models; @@ -15,7 +16,7 @@ const { approve } = models; // authority (that may or may not exist yet.) export async function closeVault( connection: Connection, - wallet: any, + wallet: WalletSigner, vault: PublicKey, fractionMint: PublicKey, fractionTreasury: PublicKey, @@ -26,6 +27,8 @@ export async function closeVault( instructions: TransactionInstruction[]; signers: Keypair[]; }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const accountRentExempt = await connection.getMinimumBalanceForRentExemption( AccountLayout.span, ); diff --git a/js/packages/web/src/actions/convertMasterEditions.ts b/js/packages/web/src/actions/convertMasterEditions.ts index 9d65bf5..6e6ed47 100644 --- a/js/packages/web/src/actions/convertMasterEditions.ts +++ b/js/packages/web/src/actions/convertMasterEditions.ts @@ -11,8 +11,10 @@ import { convertMasterEditionV1ToV2, TokenAccount, programIds, + WalletSigner, } from '@oyster/common'; import { Token } from '@solana/spl-token'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const BATCH_SIZE = 10; const CONVERT_TRANSACTION_SIZE = 10; @@ -124,10 +126,12 @@ export async function filterMetadata( // Given a vault you own, unwind all the tokens out of it. export async function convertMasterEditions( connection: Connection, - wallet: any, + wallet: WalletSigner, masterEditions: ParsedAccount[], accountsByMint: Map, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const PROGRAM_IDS = programIds(); let signers: Array> = []; let instructions: Array> = []; diff --git a/js/packages/web/src/actions/createAuctionManager.ts b/js/packages/web/src/actions/createAuctionManager.ts index 5da63fc..814e918 100644 --- a/js/packages/web/src/actions/createAuctionManager.ts +++ b/js/packages/web/src/actions/createAuctionManager.ts @@ -24,6 +24,7 @@ import { findProgramAddress, IPartialCreateAuctionArgs, MetadataKey, + WalletSigner, } from '@oyster/common'; import { AccountLayout, Token } from '@solana/spl-token'; @@ -55,6 +56,7 @@ import { setVaultAndAuctionAuthorities } from './setVaultAndAuctionAuthorities'; import { markItemsThatArentMineAsSold } from './markItemsThatArentMineAsSold'; import { validateSafetyDepositBoxV2 } from '../models/metaplex/validateSafetyDepositBoxV2'; import { initAuctionManagerV2 } from '../models/metaplex/initAuctionManagerV2'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const { createTokenAccount } = actions; interface normalPattern { @@ -98,7 +100,7 @@ export interface SafetyDepositDraft { // from some AuctionManagerSettings. export async function createAuctionManager( connection: Connection, - wallet: any, + wallet: WalletSigner, whitelistedCreatorsByCreator: Record< string, ParsedAccount @@ -368,10 +370,12 @@ export async function createAuctionManager( } async function buildSafetyDepositArray( - wallet: any, + wallet: WalletSigner, safetyDeposits: SafetyDepositDraft[], participationSafetyDepositDraft: SafetyDepositDraft | undefined, ): Promise { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let safetyDepositTemplates: SafetyDepositInstructionTemplate[] = []; safetyDeposits.forEach((s, i) => { const maxAmount = [...s.amountRanges.map(a => a.amount)] @@ -498,7 +502,7 @@ async function buildSafetyDepositArray( } async function setupAuctionManagerInstructions( - wallet: any, + wallet: WalletSigner, vault: PublicKey, paymentMint: PublicKey, accountRentExempt: number, @@ -509,6 +513,8 @@ async function setupAuctionManagerInstructions( signers: Keypair[]; auctionManager: PublicKey; }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let store = programIds().store; if (!store) { throw new Error('Store not initialized'); @@ -555,12 +561,14 @@ async function setupAuctionManagerInstructions( } async function setupStartAuction( - wallet: any, + wallet: WalletSigner, vault: PublicKey, ): Promise<{ instructions: TransactionInstruction[]; signers: Keypair[]; }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let signers: Keypair[] = []; let instructions: TransactionInstruction[] = []; @@ -570,7 +578,7 @@ async function setupStartAuction( } async function deprecatedValidateParticipationHelper( - wallet: any, + wallet: WalletSigner, auctionManager: PublicKey, whitelistedCreatorsByCreator: Record< string, @@ -581,6 +589,8 @@ async function deprecatedValidateParticipationHelper( participationSafetyDepositDraft: SafetyDepositDraft, accountRentExempt: number, ): Promise<{ instructions: TransactionInstruction[]; signers: Keypair[] }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const store = programIds().store; if (!store) { throw new Error('Store not initialized'); @@ -655,7 +665,7 @@ async function findValidWhitelistedCreator( } async function validateBoxes( - wallet: any, + wallet: WalletSigner, whitelistedCreatorsByCreator: Record< string, ParsedAccount @@ -667,6 +677,8 @@ async function validateBoxes( instructions: TransactionInstruction[][]; signers: Keypair[][]; }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const store = programIds().store; if (!store) { throw new Error('Store not initialized'); @@ -739,12 +751,14 @@ async function validateBoxes( async function deprecatedBuildAndPopulateOneTimeAuthorizationAccount( connection: Connection, - wallet: any, + wallet: WalletSigner, oneTimePrintingAuthorizationMint: PublicKey | undefined, ): Promise<{ instructions: TransactionInstruction[]; signers: Keypair[]; }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + if (!oneTimePrintingAuthorizationMint) return { instructions: [], signers: [] }; let signers: Keypair[] = []; diff --git a/js/packages/web/src/actions/createExternalPriceAccount.ts b/js/packages/web/src/actions/createExternalPriceAccount.ts index 26941c6..5eca61b 100644 --- a/js/packages/web/src/actions/createExternalPriceAccount.ts +++ b/js/packages/web/src/actions/createExternalPriceAccount.ts @@ -5,10 +5,11 @@ import { SystemProgram, TransactionInstruction, } from '@solana/web3.js'; -import { utils, actions } from '@oyster/common'; +import { utils, actions, WalletSigner } from '@oyster/common'; import BN from 'bn.js'; import { QUOTE_MINT } from '../constants'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const { updateExternalPriceAccount, ExternalPriceAccount, @@ -18,13 +19,15 @@ const { // This command creates the external pricing oracle export async function createExternalPriceAccount( connection: Connection, - wallet: any, + wallet: WalletSigner, ): Promise<{ priceMint: PublicKey; externalPriceAccount: PublicKey; instructions: TransactionInstruction[]; signers: Keypair[]; }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const PROGRAM_IDS = utils.programIds(); let signers: Keypair[] = []; diff --git a/js/packages/web/src/actions/createVault.ts b/js/packages/web/src/actions/createVault.ts index 4788e7b..9993f64 100644 --- a/js/packages/web/src/actions/createVault.ts +++ b/js/packages/web/src/actions/createVault.ts @@ -5,16 +5,23 @@ import { SystemProgram, TransactionInstruction, } from '@solana/web3.js'; -import { utils, actions, createMint, findProgramAddress } from '@oyster/common'; +import { + utils, + actions, + createMint, + findProgramAddress, + WalletSigner, +} from '@oyster/common'; import { AccountLayout, MintLayout } from '@solana/spl-token'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const { createTokenAccount, initVault, MAX_VAULT_SIZE, VAULT_PREFIX } = actions; // This command creates the external pricing oracle a vault // This gets the vault ready for adding the tokens. export async function createVault( connection: Connection, - wallet: any, + wallet: WalletSigner, priceMint: PublicKey, externalPriceAccount: PublicKey, ): Promise<{ @@ -25,6 +32,8 @@ export async function createVault( instructions: TransactionInstruction[]; signers: Keypair[]; }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const PROGRAM_IDS = utils.programIds(); let signers: Keypair[] = []; diff --git a/js/packages/web/src/actions/decommAuctionManagerAndReturnPrizes.ts b/js/packages/web/src/actions/decommAuctionManagerAndReturnPrizes.ts index 94c7ad9..cac3db9 100644 --- a/js/packages/web/src/actions/decommAuctionManagerAndReturnPrizes.ts +++ b/js/packages/web/src/actions/decommAuctionManagerAndReturnPrizes.ts @@ -6,6 +6,7 @@ import { setAuctionAuthority, setVaultAuthority, TokenAccount, + WalletSigner, } from '@oyster/common'; import { AuctionView } from '../hooks'; @@ -16,13 +17,16 @@ import { } from '../models/metaplex'; import { decommissionAuctionManager } from '../models/metaplex/decommissionAuctionManager'; import { claimUnusedPrizes } from './claimUnusedPrizes'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; export async function decommAuctionManagerAndReturnPrizes( connection: Connection, - wallet: any, + wallet: WalletSigner, auctionView: AuctionView, accountsByMint: Map, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let signers: Array = []; let instructions: Array = []; diff --git a/js/packages/web/src/actions/deprecatedCreateReservationListsForTokens.ts b/js/packages/web/src/actions/deprecatedCreateReservationListsForTokens.ts index 5afd630..0d0434d 100644 --- a/js/packages/web/src/actions/deprecatedCreateReservationListsForTokens.ts +++ b/js/packages/web/src/actions/deprecatedCreateReservationListsForTokens.ts @@ -1,20 +1,23 @@ import { Keypair, PublicKey, TransactionInstruction } from '@solana/web3.js'; -import { deprecatedCreateReservationList } from '@oyster/common'; +import { deprecatedCreateReservationList, WalletSigner } from '@oyster/common'; import { SafetyDepositInstructionTemplate } from './addTokensToVault'; import { WinningConfigType } from '../models/metaplex'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const BATCH_SIZE = 10; // This command batches out creating reservation lists for those tokens who are being sold in PrintingV1 mode. // Reservation lists are used to insure printing order among limited editions. export async function deprecatedCreateReservationListForTokens( - wallet: any, + wallet: WalletSigner, auctionManager: PublicKey, safetyDepositInstructionTemplates: SafetyDepositInstructionTemplate[], ): Promise<{ instructions: Array; signers: Array; }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let batchCounter = 0; let signers: Array = []; diff --git a/js/packages/web/src/actions/deprecatedPopulatePrintingTokens.ts b/js/packages/web/src/actions/deprecatedPopulatePrintingTokens.ts index 51833be..c374017 100644 --- a/js/packages/web/src/actions/deprecatedPopulatePrintingTokens.ts +++ b/js/packages/web/src/actions/deprecatedPopulatePrintingTokens.ts @@ -12,23 +12,27 @@ import { MasterEditionV1, ParsedAccount, MetadataKey, + WalletSigner, } from '@oyster/common'; import BN from 'bn.js'; import { SafetyDepositInstructionTemplate } from './addTokensToVault'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const BATCH_SIZE = 4; // Printing tokens are minted on the fly as needed. We need to pre-mint them to give to the vault // for all relevant NFTs. export async function deprecatedPopulatePrintingTokens( connection: Connection, - wallet: any, + wallet: WalletSigner, safetyDepositConfigs: SafetyDepositInstructionTemplate[], ): Promise<{ instructions: Array; signers: Array; safetyDepositConfigs: SafetyDepositInstructionTemplate[]; }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const PROGRAM_IDS = utils.programIds(); let batchCounter = 0; diff --git a/js/packages/web/src/actions/makeAuction.ts b/js/packages/web/src/actions/makeAuction.ts index ac58b52..7f6553d 100644 --- a/js/packages/web/src/actions/makeAuction.ts +++ b/js/packages/web/src/actions/makeAuction.ts @@ -5,13 +5,15 @@ import { findProgramAddress, IPartialCreateAuctionArgs, CreateAuctionArgs, + WalletSigner, } from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const { AUCTION_PREFIX, createAuction } = actions; // This command makes an auction export async function makeAuction( - wallet: any, + wallet: WalletSigner, vault: PublicKey, auctionSettings: IPartialCreateAuctionArgs, ): Promise<{ @@ -19,6 +21,8 @@ export async function makeAuction( instructions: TransactionInstruction[]; signers: Keypair[]; }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const PROGRAM_IDS = utils.programIds(); let signers: Keypair[] = []; diff --git a/js/packages/web/src/actions/markItemsThatArentMineAsSold.ts b/js/packages/web/src/actions/markItemsThatArentMineAsSold.ts index d042f45..78e9e54 100644 --- a/js/packages/web/src/actions/markItemsThatArentMineAsSold.ts +++ b/js/packages/web/src/actions/markItemsThatArentMineAsSold.ts @@ -1,12 +1,18 @@ import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; -import { updatePrimarySaleHappenedViaToken } from '@oyster/common'; +import { + updatePrimarySaleHappenedViaToken, + WalletSigner, +} from '@oyster/common'; import { SafetyDepositDraft } from './createAuctionManager'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const SALE_TRANSACTION_SIZE = 10; export async function markItemsThatArentMineAsSold( - wallet: any, + wallet: WalletSigner, safetyDepositDrafts: SafetyDepositDraft[], ): Promise<{ instructions: TransactionInstruction[][]; signers: Keypair[][] }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let signers: Array = []; let instructions: Array = []; @@ -19,7 +25,9 @@ export async function markItemsThatArentMineAsSold( const item = safetyDepositDrafts[i].metadata; if ( - !item.info.data.creators?.find(c => c.address.equals(wallet.publicKey)) && + !item.info.data.creators?.find(c => + c.address.equals(wallet.publicKey!), + ) && !item.info.primarySaleHappened ) { console.log( diff --git a/js/packages/web/src/actions/nft.tsx b/js/packages/web/src/actions/nft.tsx index 7399509..a025192 100644 --- a/js/packages/web/src/actions/nft.tsx +++ b/js/packages/web/src/actions/nft.tsx @@ -11,10 +11,10 @@ import { Data, Creator, findProgramAddress, + WalletSigner, } from '@oyster/common'; import React from 'react'; import { MintLayout, Token } from '@solana/spl-token'; -import { WalletAdapter } from '@solana/wallet-base'; import { Keypair, Connection, @@ -26,6 +26,7 @@ import crypto from 'crypto'; import { getAssetCostToStore } from '../utils/assets'; import { AR_SOL_HOLDER_ID } from '../utils/ids'; import BN from 'bn.js'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const RESERVED_TXN_MANIFEST = 'manifest.json'; interface IArweaveResult { @@ -40,7 +41,7 @@ interface IArweaveResult { export const mintNFT = async ( connection: Connection, - wallet: WalletAdapter | undefined, + wallet: WalletSigner, env: ENV, files: File[], metadata: { @@ -58,9 +59,7 @@ export const mintNFT = async ( ): Promise<{ metadataAccount: PublicKey; } | void> => { - if (!wallet?.publicKey) { - return; - } + if (!wallet.publicKey) return; const metadataContent = { name: metadata.name, @@ -304,7 +303,7 @@ export const mintNFT = async ( }; export const prepPayForFilesTxn = async ( - wallet: WalletAdapter, + wallet: WalletSigner, files: File[], metadata: any, ): Promise<{ diff --git a/js/packages/web/src/actions/saveAdmin.ts b/js/packages/web/src/actions/saveAdmin.ts index 473ad65..742d56a 100644 --- a/js/packages/web/src/actions/saveAdmin.ts +++ b/js/packages/web/src/actions/saveAdmin.ts @@ -3,20 +3,24 @@ import { SequenceType, sendTransactions, sendTransactionWithRetry, + WalletSigner, } from '@oyster/common'; import { WhitelistedCreator } from '../models/metaplex'; import { setStore } from '../models/metaplex/setStore'; import { setWhitelistedCreator } from '../models/metaplex/setWhitelistedCreator'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; // TODO if this becomes very slow move to batching txns like we do with settle.ts // but given how little this should be used keep it simple export async function saveAdmin( connection: Connection, - wallet: any, + wallet: WalletSigner, isPublic: boolean, whitelistedCreators: WhitelistedCreator[], ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let signers: Array = []; let instructions: Array = []; diff --git a/js/packages/web/src/actions/sendPlaceBid.ts b/js/packages/web/src/actions/sendPlaceBid.ts index 8582cc7..c3bba98 100644 --- a/js/packages/web/src/actions/sendPlaceBid.ts +++ b/js/packages/web/src/actions/sendPlaceBid.ts @@ -14,6 +14,7 @@ import { ensureWrappedAccount, toLamports, ParsedAccount, + WalletSigner, } from '@oyster/common'; import { AccountLayout, MintInfo } from '@solana/spl-token'; @@ -21,12 +22,13 @@ import { AuctionView } from '../hooks'; import BN from 'bn.js'; import { setupCancelBid } from './cancelBid'; import { QUOTE_MINT } from '../constants'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const { createTokenAccount } = actions; const { approve } = models; export async function sendPlaceBid( connection: Connection, - wallet: any, + wallet: WalletSigner, bidderTokenAccount: PublicKey | undefined, auctionView: AuctionView, accountsByMint: Map, @@ -61,7 +63,7 @@ export async function sendPlaceBid( export async function setupPlaceBid( connection: Connection, - wallet: any, + wallet: WalletSigner, bidderTokenAccount: PublicKey | undefined, auctionView: AuctionView, accountsByMint: Map, @@ -70,6 +72,8 @@ export async function setupPlaceBid( overallInstructions: TransactionInstruction[][], overallSigners: Keypair[][], ): Promise { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let signers: Keypair[] = []; let instructions: TransactionInstruction[] = []; let cleanupInstructions: TransactionInstruction[] = []; diff --git a/js/packages/web/src/actions/sendRedeemBid.ts b/js/packages/web/src/actions/sendRedeemBid.ts index 0095fa5..080a1bf 100644 --- a/js/packages/web/src/actions/sendRedeemBid.ts +++ b/js/packages/web/src/actions/sendRedeemBid.ts @@ -30,6 +30,7 @@ import { getEditionMarkPda, decodeEditionMarker, BidStateType, + WalletSigner, } from '@oyster/common'; import { AccountLayout, MintLayout, Token } from '@solana/spl-token'; @@ -59,6 +60,7 @@ import { AuctionManagerV1, ParticipationStateV1, } from '../models/metaplex/deprecatedStates'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const { createTokenAccount } = actions; const { approve } = models; @@ -89,7 +91,7 @@ export function eligibleForParticipationPrizeGivenWinningIndex( export async function sendRedeemBid( connection: Connection, - wallet: any, + wallet: WalletSigner, payingAccount: PublicKey, auctionView: AuctionView, accountsByMint: Map, @@ -97,6 +99,8 @@ export async function sendRedeemBid( bidRedemptions: Record>, bids: ParsedAccount[], ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let signers: Array = []; let instructions: Array = []; @@ -299,12 +303,14 @@ async function setupRedeemInstructions( auctionView: AuctionView, accountsByMint: Map, accountRentExempt: number, - wallet: any, + wallet: WalletSigner, safetyDeposit: ParsedAccount, winnerIndex: number, signers: Array, instructions: Array, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let winningPrizeSigner: Keypair[] = []; let winningPrizeInstructions: TransactionInstruction[] = []; @@ -356,13 +362,15 @@ async function setupRedeemFullRightsTransferInstructions( auctionView: AuctionView, accountsByMint: Map, accountRentExempt: number, - wallet: any, + wallet: WalletSigner, safetyDeposit: ParsedAccount, item: AuctionViewItem, winnerIndex: number, signers: Array, instructions: Array, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let winningPrizeSigner: Keypair[] = []; let winningPrizeInstructions: TransactionInstruction[] = []; @@ -411,12 +419,14 @@ async function setupRedeemFullRightsTransferInstructions( } async function createMintAndAccountWithOne( - wallet: any, + wallet: WalletSigner, receiverWallet: PublicKey, mintRent: any, instructions: TransactionInstruction[], signers: Keypair[], ): Promise<{ mint: PublicKey; account: PublicKey }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const mint = createMint( instructions, wallet.publicKey, @@ -466,7 +476,7 @@ export async function setupRedeemPrintingV2Instructions( connection: Connection, auctionView: AuctionView, mintRentExempt: number, - wallet: any, + wallet: WalletSigner, receiverWallet: PublicKey, safetyDeposit: ParsedAccount, item: AuctionViewItem, @@ -475,6 +485,8 @@ export async function setupRedeemPrintingV2Instructions( winningIndex: number, prizeTrackingTickets: Record>, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + if (!item.masterEdition || !item.metadata) { return; } @@ -581,13 +593,15 @@ async function deprecatedSetupRedeemPrintingV1Instructions( accountsByMint: Map, accountRentExempt: number, mintRentExempt: number, - wallet: any, + wallet: WalletSigner, safetyDeposit: ParsedAccount, item: AuctionViewItem, winnerIndex: number, signers: Array, instructions: Array, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + if (!item.masterEdition || !item.metadata) { return; } @@ -668,7 +682,7 @@ async function deprecatedSetupRedeemPrintingV1Instructions( } async function deprecatedRedeemPrintingV1Token( - wallet: any, + wallet: WalletSigner, updateAuth: PublicKey, item: AuctionViewItem, newTokenAccount: PublicKey, @@ -678,6 +692,8 @@ async function deprecatedRedeemPrintingV1Token( instructions: TransactionInstruction[][], reservationList?: PublicKey, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + if (!item.masterEdition) return; let cashInLimitedPrizeAuthorizationTokenSigner: Keypair[] = []; let cashInLimitedPrizeAuthorizationTokenInstruction: TransactionInstruction[] = @@ -754,7 +770,7 @@ export async function setupRedeemParticipationInstructions( accountsByMint: Map, accountRentExempt: number, mintRentExempt: number, - wallet: any, + wallet: WalletSigner, receiverWallet: PublicKey, safetyDeposit: ParsedAccount, bidRedemption: ParsedAccount | undefined, @@ -763,6 +779,8 @@ export async function setupRedeemParticipationInstructions( signers: Array, instructions: Array, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + if (!item.masterEdition || !item.metadata) { return; } @@ -890,12 +908,14 @@ async function deprecatedSetupRedeemParticipationInstructions( accountsByMint: Map, accountRentExempt: number, mintRentExempt: number, - wallet: any, + wallet: WalletSigner, safetyDeposit: ParsedAccount, item: AuctionViewItem, signers: Array, instructions: Array, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const me = item.masterEdition as ParsedAccount; const participationState: ParticipationStateV1 | null = ( auctionView.auctionManager.instance.info as AuctionManagerV1 diff --git a/js/packages/web/src/actions/sendSignMetadata.ts b/js/packages/web/src/actions/sendSignMetadata.ts index 57a7705..a668d76 100644 --- a/js/packages/web/src/actions/sendSignMetadata.ts +++ b/js/packages/web/src/actions/sendSignMetadata.ts @@ -4,13 +4,20 @@ import { TransactionInstruction, PublicKey, } from '@solana/web3.js'; -import { sendTransactionWithRetry, signMetadata } from '@oyster/common'; +import { + sendTransactionWithRetry, + signMetadata, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; export async function sendSignMetadata( connection: Connection, - wallet: any, + wallet: WalletSigner, metadata: PublicKey, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let signers: Keypair[] = []; let instructions: TransactionInstruction[] = []; diff --git a/js/packages/web/src/actions/setVaultAndAuctionAuthorities.ts b/js/packages/web/src/actions/setVaultAndAuctionAuthorities.ts index 16a82a0..d4bc1b2 100644 --- a/js/packages/web/src/actions/setVaultAndAuctionAuthorities.ts +++ b/js/packages/web/src/actions/setVaultAndAuctionAuthorities.ts @@ -1,9 +1,14 @@ import { Keypair, PublicKey, TransactionInstruction } from '@solana/web3.js'; -import { setAuctionAuthority, setVaultAuthority } from '@oyster/common'; +import { + setAuctionAuthority, + setVaultAuthority, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; // This command sets the authorities on the vault and auction to be the newly created auction manager. export async function setVaultAndAuctionAuthorities( - wallet: any, + wallet: WalletSigner, vault: PublicKey, auction: PublicKey, auctionManager: PublicKey, @@ -11,6 +16,8 @@ export async function setVaultAndAuctionAuthorities( instructions: TransactionInstruction[]; signers: Keypair[]; }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let signers: Keypair[] = []; let instructions: TransactionInstruction[] = []; diff --git a/js/packages/web/src/actions/settle.ts b/js/packages/web/src/actions/settle.ts index e15045c..d8d4a95 100644 --- a/js/packages/web/src/actions/settle.ts +++ b/js/packages/web/src/actions/settle.ts @@ -15,6 +15,7 @@ import { findProgramAddress, AuctionState, TokenAccount, + WalletSigner, } from '@oyster/common'; import { AuctionView } from '../hooks'; @@ -23,13 +24,14 @@ import { claimBid } from '../models/metaplex/claimBid'; import { emptyPaymentAccount } from '../models/metaplex/emptyPaymentAccount'; import { QUOTE_MINT } from '../constants'; import { setupPlaceBid } from './sendPlaceBid'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const BATCH_SIZE = 10; const SETTLE_TRANSACTION_SIZE = 6; const CLAIM_TRANSACTION_SIZE = 6; export async function settle( connection: Connection, - wallet: any, + wallet: WalletSigner, auctionView: AuctionView, bidsToClaim: ParsedAccount[], payingAccount: PublicKey | undefined, @@ -67,9 +69,11 @@ export async function settle( async function emptyPaymentAccountForAllTokens( connection: Connection, - wallet: any, + wallet: WalletSigner, auctionView: AuctionView, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const PROGRAM_IDS = programIds(); let signers: Array> = []; let instructions: Array> = []; @@ -214,7 +218,7 @@ async function emptyPaymentAccountForAllTokens( async function claimAllBids( connection: Connection, - wallet: any, + wallet: WalletSigner, auctionView: AuctionView, bids: ParsedAccount[], ) { diff --git a/js/packages/web/src/actions/startAuctionManually.ts b/js/packages/web/src/actions/startAuctionManually.ts index 982675c..d957ad7 100644 --- a/js/packages/web/src/actions/startAuctionManually.ts +++ b/js/packages/web/src/actions/startAuctionManually.ts @@ -1,11 +1,11 @@ import { Connection, Keypair, TransactionInstruction } from '@solana/web3.js'; import { startAuction } from '../models/metaplex'; -import { notify, sendTransactionWithRetry } from '@oyster/common'; +import { notify, sendTransactionWithRetry, WalletSigner } from '@oyster/common'; import { AuctionView } from '../hooks'; export async function startAuctionManually( connection: Connection, - wallet: any, + wallet: WalletSigner, auctionView: AuctionView, ) { try { diff --git a/js/packages/web/src/actions/unwindVault.ts b/js/packages/web/src/actions/unwindVault.ts index 4d3813a..4b8708e 100644 --- a/js/packages/web/src/actions/unwindVault.ts +++ b/js/packages/web/src/actions/unwindVault.ts @@ -10,23 +10,27 @@ import { sendTransactionsWithManualRetry, decodeExternalPriceAccount, findProgramAddress, + WalletSigner, } from '@oyster/common'; import BN from 'bn.js'; import { closeVault } from './closeVault'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; const BATCH_SIZE = 1; // Given a vault you own, unwind all the tokens out of it. export async function unwindVault( connection: Connection, - wallet: any, + wallet: WalletSigner, vault: ParsedAccount, safetyDepositBoxesByVaultAndIndex: Record< string, ParsedAccount >, ) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + let batchCounter = 0; const PROGRAM_IDS = programIds(); let signers: Array = []; From f55bd858116ceb99eda6325a36be309025f50246 Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Fri, 13 Aug 2021 19:02:35 -0500 Subject: [PATCH 3/9] use wallet-adapter in components and hooks --- .../web/src/components/AppBar/index.tsx | 12 +- .../web/src/components/AuctionCard/index.tsx | 174 +++++++++--------- .../src/components/Notifications/index.tsx | 23 +-- .../web/src/components/Settings/index.tsx | 2 +- js/packages/web/src/hooks/useAuction.ts | 5 +- js/packages/web/src/hooks/useAuctions.ts | 18 +- .../web/src/types/sol-wallet-adapter.d.ts | 4 - js/packages/web/src/views/admin/index.tsx | 12 +- js/packages/web/src/views/art/index.tsx | 9 +- js/packages/web/src/views/artCreate/index.tsx | 13 +- js/packages/web/src/views/artworks/index.tsx | 6 +- js/packages/web/src/views/auction/billing.tsx | 9 +- js/packages/web/src/views/auction/index.tsx | 6 +- .../web/src/views/auctionCreate/index.tsx | 6 +- js/packages/web/src/views/home/index.tsx | 25 ++- 15 files changed, 167 insertions(+), 157 deletions(-) delete mode 100644 js/packages/web/src/types/sol-wallet-adapter.d.ts diff --git a/js/packages/web/src/components/AppBar/index.tsx b/js/packages/web/src/components/AppBar/index.tsx index c2e5f24..20fccd0 100644 --- a/js/packages/web/src/components/AppBar/index.tsx +++ b/js/packages/web/src/components/AppBar/index.tsx @@ -1,16 +1,17 @@ import React, { useMemo } from 'react'; import { Link } from 'react-router-dom'; import { Button, Dropdown, Menu } from 'antd'; -import { ConnectButton, CurrentUserBadge, useWallet } from '@oyster/common'; +import { ConnectButton, CurrentUserBadge } from '@oyster/common'; +import { useWallet } from '@solana/wallet-adapter-react'; import { Notifications } from '../Notifications'; import useWindowDimensions from '../../utils/layout'; import { MenuOutlined } from '@ant-design/icons'; import { useMeta } from '../../contexts'; const UserActions = () => { - const { wallet } = useWallet(); + const { publicKey } = useWallet(); const { whitelistedCreatorsByCreator, store } = useMeta(); - const pubkey = wallet?.publicKey?.toBase58() || ''; + const pubkey = publicKey?.toBase58() || ''; const canCreate = useMemo(() => { return ( @@ -115,8 +116,7 @@ export const AppBar = () => {
- {!connected && } - {connected && ( + {connected ? (
{ iconSize={24} />
+ ) : ( + )} ); diff --git a/js/packages/web/src/components/AuctionCard/index.tsx b/js/packages/web/src/components/AuctionCard/index.tsx index 1472af4..2de1c59 100644 --- a/js/packages/web/src/components/AuctionCard/index.tsx +++ b/js/packages/web/src/components/AuctionCard/index.tsx @@ -1,11 +1,10 @@ -import React, { useMemo, useState } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; import { Col, Button, InputNumber, Spin } from 'antd'; import { MemoryRouter, Route, Redirect, Link } from 'react-router-dom'; import { useConnection, useUserAccounts, - contexts, MetaplexModal, MetaplexOverlay, formatAmount, @@ -20,7 +19,9 @@ import { BidderMetadata, MAX_METADATA_LEN, MAX_EDITION_LEN, + useWalletModal, } from '@oyster/common'; +import { useWallet } from '@solana/wallet-adapter-react'; import { AuctionView, useBidsForAuction, useUserBalance } from '../../hooks'; import { sendPlaceBid } from '../../actions/sendPlaceBid'; import { AuctionNumbers } from './../AuctionNumbers'; @@ -43,8 +44,6 @@ import { MAX_PRIZE_TRACKING_TICKET_SIZE, } from '../../models/metaplex'; -const { useWallet } = contexts.Wallet; - async function calculateTotalCostOfRedeemingOtherPeoplesBids( connection: Connection, auctionView: AuctionView, @@ -183,7 +182,14 @@ export const AuctionCard = ({ action?: JSX.Element; }) => { const connection = useConnection(); - const { wallet, connected, connect } = useWallet(); + + const wallet = useWallet(); + const { setVisible } = useWalletModal(); + const connect = useCallback( + () => (wallet.wallet ? wallet.connect().catch() : setVisible(true)), + [wallet.wallet, wallet.connect, setVisible], + ); + const mintInfo = useMint(auctionView.auction.info.tokenMint); const { prizeTrackingTickets, bidRedemptions } = useMeta(); const bids = useBidsForAuction(auctionView.auction.pubkey); @@ -240,7 +246,7 @@ export const AuctionCard = ({ const isAuctionManagerAuthorityNotWalletOwner = auctionView.auctionManager.authority.toBase58() != - wallet?.publicKey?.toBase58(); + wallet.publicKey?.toBase58(); const isAuctionNotStarted = auctionView.auction.info.state === AuctionState.Created; @@ -256,85 +262,87 @@ export const AuctionCard = ({ again. )} - {!hideDefaultAction && connected && auctionView.auction.info.ended() && ( - - )} + try { + if (eligibleForAnything) { + await sendRedeemBid( + connection, + wallet, + myPayingAccount.pubkey, + auctionView, + accountByMint, + prizeTrackingTickets, + bidRedemptions, + bids, + ).then(() => setShowRedeemedBidModal(true)); + } else { + await sendCancelBid( + connection, + wallet, + myPayingAccount.pubkey, + auctionView, + accountByMint, + bids, + bidRedemptions, + prizeTrackingTickets, + ); + } + } catch (e) { + console.error(e); + setShowRedemptionIssue(true); + } + setLoading(false); + }} + style={{ marginTop: 20 }} + > + {loading || + auctionView.items.find(i => i.find(it => !it.metadata)) || + !myPayingAccount ? ( + + ) : eligibleForAnything ? ( + `Redeem bid` + ) : ( + `${ + wallet.publicKey && + auctionView.auctionManager.authority.equals(wallet.publicKey) + ? 'Reclaim Items' + : 'Refund bid' + }` + )} + + )} {!hideDefaultAction && - connected && + wallet.connected && !auctionView.auction.info.ended() && (isAuctionNotStarted && !isAuctionManagerAuthorityNotWalletOwner ? ( ); diff --git a/js/packages/common/src/contexts/accounts.tsx b/js/packages/common/src/contexts/accounts.tsx index 6aa3461..b6b08a7 100644 --- a/js/packages/common/src/contexts/accounts.tsx +++ b/js/packages/common/src/contexts/accounts.tsx @@ -319,10 +319,7 @@ const UseNativeAccount = () => { const updateCache = useCallback( account => { if (publicKey) { - const wrapped = wrapNativeAccount( - publicKey.toBase58(), - account, - ); + const wrapped = wrapNativeAccount(publicKey.toBase58(), account); if (wrapped !== undefined) { const id = publicKey.toBase58(); cache.registerParser(id, TokenAccountParser); diff --git a/js/packages/web/.prettierignore b/js/packages/web/.prettierignore new file mode 100644 index 0000000..ed0d3af --- /dev/null +++ b/js/packages/web/.prettierignore @@ -0,0 +1,2 @@ +.next +public diff --git a/js/packages/web/next.config.js b/js/packages/web/next.config.js index a77aba2..faac8e7 100644 --- a/js/packages/web/next.config.js +++ b/js/packages/web/next.config.js @@ -27,8 +27,9 @@ module.exports = withPlugins(plugins, { eslint: { ignoreDuringBuilds: true, }, - env:{ - NEXT_PUBLIC_STORE_OWNER_ADDRESS_ADDRESS: process.env.REACT_APP_STORE_OWNER_ADDRESS_ADDRESS, + env: { + NEXT_PUBLIC_STORE_OWNER_ADDRESS_ADDRESS: + process.env.REACT_APP_STORE_OWNER_ADDRESS_ADDRESS, NEXT_PUBLIC_BIG_STORE: process.env.REACT_APP_BIG_STORE, }, async rewrites() { diff --git a/js/packages/web/src/components/AuctionCard/index.tsx b/js/packages/web/src/components/AuctionCard/index.tsx index 33af3c2..52671dc 100644 --- a/js/packages/web/src/components/AuctionCard/index.tsx +++ b/js/packages/web/src/components/AuctionCard/index.tsx @@ -245,8 +245,7 @@ export const AuctionCard = ({ const gapBidInvalid = useGapTickCheck(value, gapTick, gapTime, auctionView); const isAuctionManagerAuthorityNotWalletOwner = - auctionView.auctionManager.authority !== - wallet?.publicKey?.toBase58(); + auctionView.auctionManager.authority !== wallet?.publicKey?.toBase58(); const isAuctionNotStarted = auctionView.auction.info.state === AuctionState.Created; @@ -262,82 +261,86 @@ export const AuctionCard = ({ again. )} - {!hideDefaultAction && wallet.connected && auctionView.auction.info.ended() && ( - - )} + try { + if (eligibleForAnything) { + await sendRedeemBid( + connection, + wallet, + myPayingAccount.pubkey, + auctionView, + accountByMint, + prizeTrackingTickets, + bidRedemptions, + bids, + ).then(() => setShowRedeemedBidModal(true)); + } else { + await sendCancelBid( + connection, + wallet, + myPayingAccount.pubkey, + auctionView, + accountByMint, + bids, + bidRedemptions, + prizeTrackingTickets, + ); + } + } catch (e) { + console.error(e); + setShowRedemptionIssue(true); + } + setLoading(false); + }} + style={{ marginTop: 20 }} + > + {loading || + auctionView.items.find(i => i.find(it => !it.metadata)) || + !myPayingAccount ? ( + + ) : eligibleForAnything ? ( + `Redeem bid` + ) : ( + `${ + wallet?.publicKey && + auctionView.auctionManager.authority === + wallet.publicKey.toBase58() + ? 'Reclaim Items' + : 'Refund bid' + }` + )} + + )} {!hideDefaultAction && wallet.connected && diff --git a/js/packages/web/src/components/Notifications/index.tsx b/js/packages/web/src/components/Notifications/index.tsx index e79789a..5661c57 100644 --- a/js/packages/web/src/components/Notifications/index.tsx +++ b/js/packages/web/src/components/Notifications/index.tsx @@ -130,7 +130,9 @@ export function useCollapseWrappedSol({ const ata = await getPersonalEscrowAta(wallet); if (ata) { try { - const balance = await connection.getTokenAccountBalance(toPublicKey(ata)); + const balance = await connection.getTokenAccountBalance( + toPublicKey(ata), + ); if ((balance && balance.value.uiAmount) || 0 > 0) { setShowNotification(true); @@ -215,8 +217,7 @@ export function useSettlementAuctions({ ) { setValidDiscoveredEndedAuctions(old => ({ ...old, - [av.auctionManager.pubkey]: - balance.value.uiAmount || 0, + [av.auctionManager.pubkey]: balance.value.uiAmount || 0, })); } } catch (e) { @@ -401,8 +402,8 @@ export function Notifications() { title: 'You have a new artwork to approve!', description: ( - {whitelistedCreatorsByCreator[m.info.updateAuthority]?.info - ?.name || m.pubkey}{' '} + {whitelistedCreatorsByCreator[m.info.updateAuthority]?.info?.name || + m.pubkey}{' '} wants you to approve that you helped create their art{' '} here. diff --git a/js/packages/web/src/config/userNames.json b/js/packages/web/src/config/userNames.json index 2e952c3..7c57882 100644 --- a/js/packages/web/src/config/userNames.json +++ b/js/packages/web/src/config/userNames.json @@ -28,6 +28,5 @@ "image": "https://pbs.twimg.com/profile_images/1299400345144049665/sPxnVXa7_400x400.jpg", "description": "Account used by Solana to mint official NFTs.", "background": "" - } } diff --git a/js/packages/web/src/contexts/meta/meta.tsx b/js/packages/web/src/contexts/meta/meta.tsx index 0bc4982..8b2ba1a 100644 --- a/js/packages/web/src/contexts/meta/meta.tsx +++ b/js/packages/web/src/contexts/meta/meta.tsx @@ -21,7 +21,11 @@ import { processAuctions } from './processAuctions'; import { processMetaplexAccounts } from './processMetaplexAccounts'; import { processMetaData } from './processMetaData'; import { processVaultData } from './processVaultData'; -import { loadAccounts, makeSetter, metadataByMintUpdater } from './loadAccounts'; +import { + loadAccounts, + makeSetter, + metadataByMintUpdater, +} from './loadAccounts'; import { onChangeAccount } from './onChangeAccount'; const MetaContext = React.createContext({ @@ -155,14 +159,18 @@ export function MetaProvider({ children = null as any }) { const metaSubId = connection.onProgramAccountChange( toPublicKey(METADATA_PROGRAM_ID), - onChangeAccount(processMetaData, async (prop, key, value) => { - if (prop === 'metadataByMint') { - const nextState = await metadataByMintUpdater(value, state, all); - setState(nextState); - } else { - updateStateValue(prop, key, value); - } - }, all), + onChangeAccount( + processMetaData, + async (prop, key, value) => { + if (prop === 'metadataByMint') { + const nextState = await metadataByMintUpdater(value, state, all); + setState(nextState); + } else { + updateStateValue(prop, key, value); + } + }, + all, + ), ); return () => { diff --git a/js/packages/web/src/views/admin/index.tsx b/js/packages/web/src/views/admin/index.tsx index 94421ee..5424eb6 100644 --- a/js/packages/web/src/views/admin/index.tsx +++ b/js/packages/web/src/views/admin/index.tsx @@ -269,9 +269,7 @@ function InnerAdminView({ activated: uniqueCreatorsWithUpdates[key].activated, name: uniqueCreatorsWithUpdates[key].name || - shortenAddress( - uniqueCreatorsWithUpdates[key].address, - ), + shortenAddress(uniqueCreatorsWithUpdates[key].address), image: uniqueCreatorsWithUpdates[key].image, }))} > diff --git a/js/packages/web/src/views/analytics/index.tsx b/js/packages/web/src/views/analytics/index.tsx index 6c625cc..f93e083 100644 --- a/js/packages/web/src/views/analytics/index.tsx +++ b/js/packages/web/src/views/analytics/index.tsx @@ -94,15 +94,12 @@ const rerun = async ({ auction.auction.info.tokenMint === QUOTE_MINT.toBase58() ) { if (!LOOKUP[auction.auction.pubkey]) { - LOOKUP[auction.auction.pubkey] = ( - await getAuctionExtended({ - auctionProgramId: PROGRAM_IDS.auction, - resource: auction.vault.pubkey, - }) - ); + LOOKUP[auction.auction.pubkey] = await getAuctionExtended({ + auctionProgramId: PROGRAM_IDS.auction, + resource: auction.vault.pubkey, + }); } - const extended = - auctionDataExtended[LOOKUP[auction.auction.pubkey]]; + const extended = auctionDataExtended[LOOKUP[auction.auction.pubkey]]; if (extended && extended.info.totalUncancelledBids.toNumber() > 0) { totalAuctions++; averageBidders += extended.info.totalUncancelledBids.toNumber(); diff --git a/js/packages/web/src/views/artists/index.tsx b/js/packages/web/src/views/artists/index.tsx index f2431ec..af718fc 100644 --- a/js/packages/web/src/views/artists/index.tsx +++ b/js/packages/web/src/views/artists/index.tsx @@ -28,12 +28,15 @@ export const ArtistsView = () => { const id = m.info.address; return ( - + ); })} @@ -43,9 +46,7 @@ export const ArtistsView = () => { return ( - - {artistGrid} - + {artistGrid} ); diff --git a/js/packages/web/src/views/artworks/index.tsx b/js/packages/web/src/views/artworks/index.tsx index 70c288a..2c1378b 100644 --- a/js/packages/web/src/views/artworks/index.tsx +++ b/js/packages/web/src/views/artworks/index.tsx @@ -34,9 +34,9 @@ export const ArtworksView = () => { const items = activeKey === ArtworkViewState.Owned ? ownedMetadata.map(m => m.metadata) - : (activeKey === ArtworkViewState.Created - ? createdMetadata - : metadata); + : activeKey === ArtworkViewState.Created + ? createdMetadata + : metadata; useEffect(() => { if (connected) { diff --git a/js/packages/web/src/views/auction/billing.tsx b/js/packages/web/src/views/auction/billing.tsx index cc38667..f03cef9 100644 --- a/js/packages/web/src/views/auction/billing.tsx +++ b/js/packages/web/src/views/auction/billing.tsx @@ -147,7 +147,8 @@ function usePayoutTickets( ? [[auctionView.participationItem]] : []), ]; - const payoutPromises: { key: string; promise: Promise }[] = []; + const payoutPromises: { key: string; promise: Promise }[] = + []; let total = 0; for (let i = 0; i < prizeArrays.length; i++) { const items = prizeArrays[i]; @@ -162,9 +163,7 @@ function usePayoutTickets( for (let k = 0; k < recipientAddresses.length; k++) { // Ensure no clashes with tickets from other safety deposits in other winning configs even if from same creator by making long keys - const key = `${auctionView.auctionManager.pubkey}-${i}-${j}-${item.safetyDeposit.pubkey}-${recipientAddresses[ - k - ]}-${k}`; + const key = `${auctionView.auctionManager.pubkey}-${i}-${j}-${item.safetyDeposit.pubkey}-${recipientAddresses[k]}-${k}`; if (!currFound[key]) { payoutPromises.push({ @@ -187,8 +186,7 @@ function usePayoutTickets( (payoutKeys: StringPublicKey[]) => { payoutKeys.forEach((payoutKey: StringPublicKey, i: number) => { if (payoutTickets[payoutKey]) - currFound[payoutPromises[i].key] = - payoutTickets[payoutKey]; + currFound[payoutPromises[i].key] = payoutTickets[payoutKey]; }); setFoundPayoutTickets(pt => ({ ...pt, ...currFound })); @@ -345,9 +343,7 @@ export function useBillingInfo({ auctionView }: { auctionView: AuctionView }) { }[] = [ ...winnersThatCanBeEmptied.map(pot => ({ metadata: - bidderMetadataByAuctionAndBidder[ - `${auctionKey}-${pot.info.bidderAct}` - ], + bidderMetadataByAuctionAndBidder[`${auctionKey}-${pot.info.bidderAct}`], pot, })), ]; @@ -384,7 +380,9 @@ export const InnerBillingView = ({ useEffect(() => { connection - .getTokenAccountBalance(toPublicKey(auctionView.auctionManager.acceptPayment)) + .getTokenAccountBalance( + toPublicKey(auctionView.auctionManager.acceptPayment), + ) .then(resp => { if (resp.value.uiAmount !== undefined && resp.value.uiAmount !== null) setEscrowBalance(resp.value.uiAmount); diff --git a/js/packages/web/src/views/auctionCreate/artSelector.tsx b/js/packages/web/src/views/auctionCreate/artSelector.tsx index 3f7dd4e..ee215d0 100644 --- a/js/packages/web/src/views/auctionCreate/artSelector.tsx +++ b/js/packages/web/src/views/auctionCreate/artSelector.tsx @@ -65,9 +65,7 @@ export const ArtSelector = (props: ArtSelectorProps) => { preview={false} onClick={open} close={() => { - setSelected( - selected.filter(_ => _.metadata.pubkey !== key), - ); + setSelected(selected.filter(_ => _.metadata.pubkey !== key)); confirm(); }} /> diff --git a/js/packages/web/src/views/auctionCreate/index.tsx b/js/packages/web/src/views/auctionCreate/index.tsx index eda3ef6..00fc36b 100644 --- a/js/packages/web/src/views/auctionCreate/index.tsx +++ b/js/packages/web/src/views/auctionCreate/index.tsx @@ -37,10 +37,7 @@ import { useWallet } from '@solana/wallet-adapter-react'; import { MintLayout } from '@solana/spl-token'; import { useHistory, useParams } from 'react-router-dom'; import { capitalize } from 'lodash'; -import { - WinningConfigType, - AmountRange, -} from '../../models/metaplex'; +import { WinningConfigType, AmountRange } from '../../models/metaplex'; import moment from 'moment'; import { createAuctionManager, @@ -134,14 +131,15 @@ export const AuctionCreateView = () => { const [step, setStep] = useState(0); const [stepsVisible, setStepsVisible] = useState(true); - const [auctionObj, setAuctionObj] = useState< - | { - vault: StringPublicKey; - auction: StringPublicKey; - auctionManager: StringPublicKey; - } - | undefined - >(undefined); + const [auctionObj, setAuctionObj] = + useState< + | { + vault: StringPublicKey; + auction: StringPublicKey; + auctionManager: StringPublicKey; + } + | undefined + >(undefined); const [attributes, setAttributes] = useState({ reservationPrice: 0, items: [], @@ -197,8 +195,8 @@ export const AuctionCreateView = () => { item.winningConfigType = item.metadata.info.updateAuthority === (wallet?.publicKey || SystemProgram.programId).toBase58() - ? WinningConfigType.FullRightsTransfer - : WinningConfigType.TokenOnlyTransfer; + ? WinningConfigType.FullRightsTransfer + : WinningConfigType.TokenOnlyTransfer; } item.amountRanges = [ new AmountRange({ @@ -1485,12 +1483,12 @@ const TierTableStep = (props: { const newTiers = newImmutableTiers(props.attributes.tiers); if (items[0]) { - const existing = props.attributes.items.find(it => - it.metadata.pubkey === items[0].metadata.pubkey, + const existing = props.attributes.items.find( + it => it.metadata.pubkey === items[0].metadata.pubkey, ); if (!existing) newItems.push(items[0]); - const index = newItems.findIndex(it => - it.metadata.pubkey === items[0].metadata.pubkey, + const index = newItems.findIndex( + it => it.metadata.pubkey === items[0].metadata.pubkey, ); const myNewTier = newTiers[configIndex].items[itemIndex]; diff --git a/js/packages/web/src/views/home/index.tsx b/js/packages/web/src/views/home/index.tsx index 9a24bac..a1c8fdf 100644 --- a/js/packages/web/src/views/home/index.tsx +++ b/js/packages/web/src/views/home/index.tsx @@ -52,16 +52,17 @@ export const HomeView = () => { // Check if the auction is primary sale or not const checkPrimarySale = (auc: AuctionView) => { var flag = 0; - auc.items.forEach(i => - { - i.forEach(j => { - if (j.metadata.info.primarySaleHappened == true) { - flag = 1; - return true; - }}) - if (flag == 1) return true; - }) - if (flag == 1) return true; else return false; + auc.items.forEach(i => { + i.forEach(j => { + if (j.metadata.info.primarySaleHappened == true) { + flag = 1; + return true; + } + }); + if (flag == 1) return true; + }); + if (flag == 1) return true; + else return false; }; const resaleAuctions = auctions @@ -86,18 +87,24 @@ export const HomeView = () => { let items = liveAuctions; switch (activeKey) { - case LiveAuctionViewState.All: - items = liveAuctions; - break; - case LiveAuctionViewState.Participated: - items = liveAuctions.concat(auctionsEnded).filter((m, idx) => m.myBidderMetadata?.info.bidderPubkey == wallet?.publicKey?.toBase58()); - break; - case LiveAuctionViewState.Resale: - items = resaleAuctions; - break; - case LiveAuctionViewState.Ended: - items = auctionsEnded; - break; + case LiveAuctionViewState.All: + items = liveAuctions; + break; + case LiveAuctionViewState.Participated: + items = liveAuctions + .concat(auctionsEnded) + .filter( + (m, idx) => + m.myBidderMetadata?.info.bidderPubkey == + wallet?.publicKey?.toBase58(), + ); + break; + case LiveAuctionViewState.Resale: + items = resaleAuctions; + break; + case LiveAuctionViewState.Ended: + items = auctionsEnded; + break; } const heroAuction = useMemo( @@ -145,13 +152,13 @@ export const HomeView = () => { return; } - const id = m.auction.pubkey; - return ( - - - - ); - }) + const id = m.auction.pubkey; + return ( + + + + ); + }) : [...Array(10)].map((_, idx) => )} ); diff --git a/js/packages/web/tsconfig.json b/js/packages/web/tsconfig.json index 21ad486..1a43020 100644 --- a/js/packages/web/tsconfig.json +++ b/js/packages/web/tsconfig.json @@ -1,11 +1,7 @@ { "compilerOptions": { "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, @@ -21,14 +17,8 @@ "downlevelIteration": true, "noEmit": true, "jsx": "preserve", - "typeRoots": [ - "../../types" - ] + "typeRoots": ["../../types"] }, - "include": [ - "src" - ], - "exclude": [ - "node_modules" - ] + "include": ["src"], + "exclude": ["node_modules"] } From 08ed4a0c18eea7f805aff88b293173dec8a0f0fc Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Mon, 16 Aug 2021 17:40:13 -0500 Subject: [PATCH 7/9] update wallet-adapter versions --- js/packages/common/package.json | 4 ++-- js/packages/web/package.json | 2 +- js/yarn.lock | 16 ++++++++-------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/js/packages/common/package.json b/js/packages/common/package.json index 8249a35..560cadb 100644 --- a/js/packages/common/package.json +++ b/js/packages/common/package.json @@ -34,8 +34,8 @@ "@solana/spl-token": "0.1.6", "@solana/spl-token-registry": "0.2.202", "@solana/wallet-adapter-base": "^0.4.1", - "@solana/wallet-adapter-react": "^0.7.0", - "@solana/wallet-adapter-wallets": "^0.6.0", + "@solana/wallet-adapter-react": "^0.7.1", + "@solana/wallet-adapter-wallets": "^0.6.1", "@solana/web3.js": "^1.21.0", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.5.0", diff --git a/js/packages/web/package.json b/js/packages/web/package.json index 583ae4c..bb08fa6 100644 --- a/js/packages/web/package.json +++ b/js/packages/web/package.json @@ -11,7 +11,7 @@ "@solana/spl-token": "0.1.6", "@solana/spl-token-registry": "^0.2.202", "@solana/wallet-adapter-base": "^0.4.1", - "@solana/wallet-adapter-react": "^0.7.0", + "@solana/wallet-adapter-react": "^0.7.1", "@solana/web3.js": "^1.21.0", "@welldone-software/why-did-you-render": "^6.0.5", "bn.js": "^5.1.3", diff --git a/js/yarn.lock b/js/yarn.lock index b9c8d64..877218b 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -2092,10 +2092,10 @@ resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-phantom/-/wallet-adapter-phantom-0.4.1.tgz#db5f70aa1cf293314b447a902995099e7a3a1c16" integrity sha512-2Y3625SyQi0Kz9crqzrYOJD76jfDlcFhUEfJYlWWc+aJTnKwLECd91qGoBmms40PyBuTmdB9eJWTYT0Ev0NAig== -"@solana/wallet-adapter-react@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-react/-/wallet-adapter-react-0.7.0.tgz#b8d19a9619adb012667456edc033c1d076d0dfdd" - integrity sha512-1ZPxWcbvcvsw4oE22XBtDr7jtKCOof0PGWsDsWhhW04wXqMNNKq+pxqYzjKlY9+WJpe0dx8Kyzar3PWN+wqJUg== +"@solana/wallet-adapter-react@^0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-react/-/wallet-adapter-react-0.7.1.tgz#3b51028ff15a92f5cc6db990fbbc4d7b7db7f489" + integrity sha512-iqyMm7j5FNYOrn1hOYJtro07axEH7RQuMO93Q0gohiyu0zZEnNhbvch6e1EQMpfu2R+Z5qXJzEfbDT9X7G1aGg== "@solana/wallet-adapter-solflare@^0.1.0": version "0.1.0" @@ -2123,10 +2123,10 @@ "@toruslabs/openlogin-ed25519" "^0.9.2" "@types/keccak" "^3.0.1" -"@solana/wallet-adapter-wallets@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-wallets/-/wallet-adapter-wallets-0.6.0.tgz#03117cb2d102de10da5d975da71da45f17cd1076" - integrity sha512-MazpY4QiGl/ljdZrTGsQnEZFEIcas+nmceeleSCz9L1BEu8AqovcqmW0Ak//yhGZm6C/3RfxgwpV+4PKOrrexQ== +"@solana/wallet-adapter-wallets@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-wallets/-/wallet-adapter-wallets-0.6.1.tgz#e1afb5b7ebeba460384e9be5a378e165b76d61d5" + integrity sha512-BoejyJXuIJt89nRzQJdTEjG26q0tIyw0Cr3woIyCWTEIylmfGO9Oiedj5LsK9IvhP+5PGaXf/IfMhgmLtjyn1w== dependencies: "@solana/wallet-adapter-ledger" "^0.4.1" "@solana/wallet-adapter-mathwallet" "^0.4.1" From 1e92387686e4a753cf3e4a711fb093080357bb37 Mon Sep 17 00:00:00 2001 From: bartosz-lipinski <264380+bartosz-lipinski@users.noreply.github.com> Date: Wed, 25 Aug 2021 18:05:21 -0500 Subject: [PATCH 8/9] fix: build errors --- js/packages/web/src/actions/unwindVault.ts | 2 +- .../web/src/views/home/auctionList.tsx | 6 ++--- js/packages/web/src/views/home/setup.tsx | 27 ++++++++++--------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/js/packages/web/src/actions/unwindVault.ts b/js/packages/web/src/actions/unwindVault.ts index e68fbea..8111830 100644 --- a/js/packages/web/src/actions/unwindVault.ts +++ b/js/packages/web/src/actions/unwindVault.ts @@ -113,7 +113,7 @@ export async function unwindVault( nft.info.store, vault.pubkey, vault.info.fractionMint, - wallet.publicKey, + wallet.publicKey.toBase58(), currInstructions, ); diff --git a/js/packages/web/src/views/home/auctionList.tsx b/js/packages/web/src/views/home/auctionList.tsx index f7d777b..1d84b60 100644 --- a/js/packages/web/src/views/home/auctionList.tsx +++ b/js/packages/web/src/views/home/auctionList.tsx @@ -1,4 +1,4 @@ -import { useWallet } from '@oyster/common'; +import { useWallet } from '@solana/wallet-adapter-react'; import { Col, Layout, Row, Tabs } from 'antd'; import BN from 'bn.js'; import React, { useMemo, useState } from 'react'; @@ -26,7 +26,7 @@ export const AuctionListView = () => { const auctionsEnded = useAuctions(AuctionViewState.Ended); const [activeKey, setActiveKey] = useState(LiveAuctionViewState.All); const { isLoading } = useMeta(); - const { wallet, connected } = useWallet(); + const { wallet, connected, publicKey } = useWallet(); const breakpointColumnsObj = { default: 4, 1100: 3, @@ -81,7 +81,7 @@ export const AuctionListView = () => { .filter( (m, idx) => m.myBidderMetadata?.info.bidderPubkey == - wallet?.publicKey?.toBase58(), + publicKey?.toBase58(), ); break; case LiveAuctionViewState.Resale: diff --git a/js/packages/web/src/views/home/setup.tsx b/js/packages/web/src/views/home/setup.tsx index a375188..e4d134f 100644 --- a/js/packages/web/src/views/home/setup.tsx +++ b/js/packages/web/src/views/home/setup.tsx @@ -1,4 +1,5 @@ -import { useConnection, useStore, useWallet } from '@oyster/common'; +import { useConnection, useStore, WalletSigner } from '@oyster/common'; +import { useWallet } from '@solana/wallet-adapter-react'; import { Button } from 'antd'; import { useEffect, useState } from 'react'; import { useHistory } from 'react-router-dom'; @@ -6,6 +7,7 @@ import { saveAdmin } from '../../actions/saveAdmin'; import { useMeta } from '../../contexts'; import { WhitelistedCreator } from '../../models/metaplex'; import { SetupVariables } from '../../components/SetupVariables'; +import { WalletAdapter } from '@solana/wallet-adapter-base'; export const SetupView = () => { const [isInitalizingStore, setIsInitalizingStore] = useState(false); @@ -13,23 +15,23 @@ export const SetupView = () => { const { store } = useMeta(); const { setStoreForOwner } = useStore(); const history = useHistory(); - const { wallet, connected, connect } = useWallet(); + const wallet = useWallet(); const [storeAddress, setStoreAddress] = useState(); useEffect(() => { const getStore = async () => { - if (connected && wallet) { - const store = await setStoreForOwner(wallet?.publicKey?.toBase58()); + if (wallet.connected) { + const store = await setStoreForOwner(wallet.publicKey?.toBase58()); setStoreAddress(store); } else { setStoreAddress(undefined); } }; getStore(); - }, [wallet?.publicKey, connected]); + }, [wallet.publicKey, wallet.connected]); const initializeStore = async () => { - if (!wallet?.publicKey) { + if (!wallet.publicKey || !wallet) { return; } @@ -44,24 +46,23 @@ export const SetupView = () => { // TODO: process errors - // Fack to reload meta await setStoreForOwner(undefined); - await setStoreForOwner(wallet?.publicKey?.toBase58()); + await setStoreForOwner(wallet.publicKey?.toBase58()); history.push('/admin'); }; return ( <> - {!connected && ( + {!wallet.connected && (

- {' '} to configure store.

)} - {connected && !store && ( + {wallet.connected && !store && ( <>

Store is not initialized yet

There must be some ◎ SOL in the wallet before initialization.

@@ -82,7 +83,7 @@ export const SetupView = () => {

)} - {connected && store && ( + {wallet.connected && store && ( <>

To finish initialization please copy config below into{' '} @@ -90,7 +91,7 @@ export const SetupView = () => {

)} From 0e45b681427f32f3c63d1d9ad12b14fb1b47152c Mon Sep 17 00:00:00 2001 From: Jordan Sexton Date: Wed, 25 Aug 2021 18:12:12 -0500 Subject: [PATCH 9/9] wallet fixes --- .../actions/markItemsThatArentMineAsSold.ts | 8 ++--- js/packages/web/src/actions/saveAdmin.ts | 8 ++--- js/packages/web/src/actions/unwindVault.ts | 2 +- .../web/src/views/home/auctionList.tsx | 6 ++-- js/packages/web/src/views/home/setup.tsx | 30 +++++++++++-------- 5 files changed, 30 insertions(+), 24 deletions(-) diff --git a/js/packages/web/src/actions/markItemsThatArentMineAsSold.ts b/js/packages/web/src/actions/markItemsThatArentMineAsSold.ts index f47a251..f425927 100644 --- a/js/packages/web/src/actions/markItemsThatArentMineAsSold.ts +++ b/js/packages/web/src/actions/markItemsThatArentMineAsSold.ts @@ -13,6 +13,8 @@ export async function markItemsThatArentMineAsSold( ): Promise<{ instructions: TransactionInstruction[][]; signers: Keypair[][] }> { if (!wallet.publicKey) throw new WalletNotConnectedError(); + const publicKey = wallet.publicKey.toBase58(); + let signers: Array = []; let instructions: Array = []; @@ -25,9 +27,7 @@ export async function markItemsThatArentMineAsSold( const item = safetyDepositDrafts[i].metadata; if ( - !item.info.data.creators?.find( - c => c.address === wallet.publicKey!.toBase58(), - ) && + !item.info.data.creators?.find(c => c.address === publicKey) && !item.info.primarySaleHappened ) { console.log( @@ -37,7 +37,7 @@ export async function markItemsThatArentMineAsSold( ); await updatePrimarySaleHappenedViaToken( item.pubkey, - wallet.publicKey.toBase58(), + publicKey, safetyDepositDrafts[i].holding, markInstructions, ); diff --git a/js/packages/web/src/actions/saveAdmin.ts b/js/packages/web/src/actions/saveAdmin.ts index 567dc5c..c5c1731 100644 --- a/js/packages/web/src/actions/saveAdmin.ts +++ b/js/packages/web/src/actions/saveAdmin.ts @@ -28,8 +28,8 @@ export async function saveAdmin( await setStore( isPublic, - wallet.publicKey!.toBase58(), - wallet.publicKey!.toBase58(), + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), storeInstructions, ); signers.push(storeSigners); @@ -43,8 +43,8 @@ export async function saveAdmin( await setWhitelistedCreator( wc.address, wc.activated, - wallet.publicKey!.toBase58(), - wallet.publicKey!.toBase58(), + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), wcInstructions, ); signers.push(wcSigners); diff --git a/js/packages/web/src/actions/unwindVault.ts b/js/packages/web/src/actions/unwindVault.ts index e68fbea..8111830 100644 --- a/js/packages/web/src/actions/unwindVault.ts +++ b/js/packages/web/src/actions/unwindVault.ts @@ -113,7 +113,7 @@ export async function unwindVault( nft.info.store, vault.pubkey, vault.info.fractionMint, - wallet.publicKey, + wallet.publicKey.toBase58(), currInstructions, ); diff --git a/js/packages/web/src/views/home/auctionList.tsx b/js/packages/web/src/views/home/auctionList.tsx index f7d777b..5e4f947 100644 --- a/js/packages/web/src/views/home/auctionList.tsx +++ b/js/packages/web/src/views/home/auctionList.tsx @@ -1,4 +1,4 @@ -import { useWallet } from '@oyster/common'; +import { useWallet } from '@solana/wallet-adapter-react'; import { Col, Layout, Row, Tabs } from 'antd'; import BN from 'bn.js'; import React, { useMemo, useState } from 'react'; @@ -26,7 +26,7 @@ export const AuctionListView = () => { const auctionsEnded = useAuctions(AuctionViewState.Ended); const [activeKey, setActiveKey] = useState(LiveAuctionViewState.All); const { isLoading } = useMeta(); - const { wallet, connected } = useWallet(); + const { connected, publicKey } = useWallet(); const breakpointColumnsObj = { default: 4, 1100: 3, @@ -81,7 +81,7 @@ export const AuctionListView = () => { .filter( (m, idx) => m.myBidderMetadata?.info.bidderPubkey == - wallet?.publicKey?.toBase58(), + publicKey?.toBase58(), ); break; case LiveAuctionViewState.Resale: diff --git a/js/packages/web/src/views/home/setup.tsx b/js/packages/web/src/views/home/setup.tsx index a375188..d3e449d 100644 --- a/js/packages/web/src/views/home/setup.tsx +++ b/js/packages/web/src/views/home/setup.tsx @@ -1,6 +1,7 @@ -import { useConnection, useStore, useWallet } from '@oyster/common'; +import { useConnection, useStore, useWalletModal } from '@oyster/common'; +import { useWallet } from '@solana/wallet-adapter-react'; import { Button } from 'antd'; -import { useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { useHistory } from 'react-router-dom'; import { saveAdmin } from '../../actions/saveAdmin'; import { useMeta } from '../../contexts'; @@ -13,23 +14,28 @@ export const SetupView = () => { const { store } = useMeta(); const { setStoreForOwner } = useStore(); const history = useHistory(); - const { wallet, connected, connect } = useWallet(); + const wallet = useWallet(); + const { setVisible } = useWalletModal(); + const connect = useCallback( + () => (wallet.wallet ? wallet.connect().catch() : setVisible(true)), + [wallet.wallet, wallet.connect, setVisible], + ); const [storeAddress, setStoreAddress] = useState(); useEffect(() => { const getStore = async () => { - if (connected && wallet) { - const store = await setStoreForOwner(wallet?.publicKey?.toBase58()); + if (wallet.publicKey) { + const store = await setStoreForOwner(wallet.publicKey.toBase58()); setStoreAddress(store); } else { setStoreAddress(undefined); } }; getStore(); - }, [wallet?.publicKey, connected]); + }, [wallet.publicKey]); const initializeStore = async () => { - if (!wallet?.publicKey) { + if (!wallet.publicKey) { return; } @@ -46,14 +52,14 @@ export const SetupView = () => { // Fack to reload meta await setStoreForOwner(undefined); - await setStoreForOwner(wallet?.publicKey?.toBase58()); + await setStoreForOwner(wallet.publicKey.toBase58()); history.push('/admin'); }; return ( <> - {!connected && ( + {!wallet.connected && (