|
@@ -1,13 +1,12 @@
|
|
|
import {
|
|
import {
|
|
|
type Adapter,
|
|
type Adapter,
|
|
|
type MessageSignerWalletAdapterProps,
|
|
type MessageSignerWalletAdapterProps,
|
|
|
- type SendTransactionOptions,
|
|
|
|
|
type SignerWalletAdapterProps,
|
|
type SignerWalletAdapterProps,
|
|
|
type WalletAdapterProps,
|
|
type WalletAdapterProps,
|
|
|
type WalletName,
|
|
type WalletName,
|
|
|
type WalletReadyState,
|
|
type WalletReadyState,
|
|
|
} from '@solana/wallet-adapter-base';
|
|
} from '@solana/wallet-adapter-base';
|
|
|
-import { type Connection, type PublicKey, type Transaction, type VersionedTransaction } from '@solana/web3.js';
|
|
|
|
|
|
|
+import { type PublicKey } from '@solana/web3.js';
|
|
|
import { createContext, useContext } from 'react';
|
|
import { createContext, useContext } from 'react';
|
|
|
|
|
|
|
|
export interface Wallet {
|
|
export interface Wallet {
|
|
@@ -36,65 +35,59 @@ export interface WalletContextState {
|
|
|
|
|
|
|
|
const EMPTY_ARRAY: ReadonlyArray<never> = [];
|
|
const EMPTY_ARRAY: ReadonlyArray<never> = [];
|
|
|
|
|
|
|
|
-const DEFAULT_CONTEXT = {
|
|
|
|
|
|
|
+const DEFAULT_CONTEXT: Partial<WalletContextState> = {
|
|
|
autoConnect: false,
|
|
autoConnect: false,
|
|
|
connecting: false,
|
|
connecting: false,
|
|
|
connected: false,
|
|
connected: false,
|
|
|
disconnecting: false,
|
|
disconnecting: false,
|
|
|
- select(_name: WalletName | null) {
|
|
|
|
|
- console.error(constructMissingProviderErrorMessage('get', 'select'));
|
|
|
|
|
|
|
+ select() {
|
|
|
|
|
+ logMissingProviderError('call', 'select');
|
|
|
},
|
|
},
|
|
|
connect() {
|
|
connect() {
|
|
|
- return Promise.reject(console.error(constructMissingProviderErrorMessage('get', 'connect')));
|
|
|
|
|
|
|
+ return Promise.reject(logMissingProviderError('call', 'connect'));
|
|
|
},
|
|
},
|
|
|
disconnect() {
|
|
disconnect() {
|
|
|
- return Promise.reject(console.error(constructMissingProviderErrorMessage('get', 'disconnect')));
|
|
|
|
|
|
|
+ return Promise.reject(logMissingProviderError('call', 'disconnect'));
|
|
|
},
|
|
},
|
|
|
- sendTransaction(
|
|
|
|
|
- _transaction: VersionedTransaction | Transaction,
|
|
|
|
|
- _connection: Connection,
|
|
|
|
|
- _options?: SendTransactionOptions
|
|
|
|
|
- ) {
|
|
|
|
|
- return Promise.reject(console.error(constructMissingProviderErrorMessage('get', 'sendTransaction')));
|
|
|
|
|
|
|
+ sendTransaction() {
|
|
|
|
|
+ return Promise.reject(logMissingProviderError('call', 'sendTransaction'));
|
|
|
},
|
|
},
|
|
|
- signTransaction(_transaction: Transaction) {
|
|
|
|
|
- return Promise.reject(console.error(constructMissingProviderErrorMessage('get', 'signTransaction')));
|
|
|
|
|
|
|
+ signTransaction() {
|
|
|
|
|
+ return Promise.reject(logMissingProviderError('call', 'signTransaction'));
|
|
|
},
|
|
},
|
|
|
- signAllTransactions(_transaction: Transaction[]) {
|
|
|
|
|
- return Promise.reject(console.error(constructMissingProviderErrorMessage('get', 'signAllTransactions')));
|
|
|
|
|
|
|
+ signAllTransactions() {
|
|
|
|
|
+ return Promise.reject(logMissingProviderError('call', 'signAllTransactions'));
|
|
|
},
|
|
},
|
|
|
- signMessage(_message: Uint8Array) {
|
|
|
|
|
- return Promise.reject(console.error(constructMissingProviderErrorMessage('get', 'signMessage')));
|
|
|
|
|
|
|
+ signMessage() {
|
|
|
|
|
+ return Promise.reject(logMissingProviderError('call', 'signMessage'));
|
|
|
},
|
|
},
|
|
|
-} as WalletContextState;
|
|
|
|
|
|
|
+};
|
|
|
Object.defineProperty(DEFAULT_CONTEXT, 'wallets', {
|
|
Object.defineProperty(DEFAULT_CONTEXT, 'wallets', {
|
|
|
get() {
|
|
get() {
|
|
|
- console.error(constructMissingProviderErrorMessage('read', 'wallets'));
|
|
|
|
|
|
|
+ logMissingProviderError('read', 'wallets');
|
|
|
return EMPTY_ARRAY;
|
|
return EMPTY_ARRAY;
|
|
|
},
|
|
},
|
|
|
});
|
|
});
|
|
|
Object.defineProperty(DEFAULT_CONTEXT, 'wallet', {
|
|
Object.defineProperty(DEFAULT_CONTEXT, 'wallet', {
|
|
|
get() {
|
|
get() {
|
|
|
- console.error(constructMissingProviderErrorMessage('read', 'wallet'));
|
|
|
|
|
|
|
+ logMissingProviderError('read', 'wallet');
|
|
|
return null;
|
|
return null;
|
|
|
},
|
|
},
|
|
|
});
|
|
});
|
|
|
Object.defineProperty(DEFAULT_CONTEXT, 'publicKey', {
|
|
Object.defineProperty(DEFAULT_CONTEXT, 'publicKey', {
|
|
|
get() {
|
|
get() {
|
|
|
- console.error(constructMissingProviderErrorMessage('read', 'publicKey'));
|
|
|
|
|
|
|
+ logMissingProviderError('read', 'publicKey');
|
|
|
return null;
|
|
return null;
|
|
|
},
|
|
},
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-function constructMissingProviderErrorMessage(action: string, valueName: string) {
|
|
|
|
|
- return (
|
|
|
|
|
- 'You have tried to ' +
|
|
|
|
|
- ` ${action} "${valueName}"` +
|
|
|
|
|
- ' on a WalletContext without providing one.' +
|
|
|
|
|
- ' Make sure to render a WalletProvider' +
|
|
|
|
|
- ' as an ancestor of the component that uses ' +
|
|
|
|
|
- 'WalletContext'
|
|
|
|
|
|
|
+function logMissingProviderError(action: string, property: string) {
|
|
|
|
|
+ const error = new Error(
|
|
|
|
|
+ `You have tried to ${action} "${property}" on a WalletContext without providing one. ` +
|
|
|
|
|
+ 'Make sure to render a WalletProvider as an ancestor of the component that uses WalletContext.'
|
|
|
);
|
|
);
|
|
|
|
|
+ console.error(error);
|
|
|
|
|
+ return error;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
export const WalletContext = createContext<WalletContextState>(DEFAULT_CONTEXT as WalletContextState);
|
|
export const WalletContext = createContext<WalletContextState>(DEFAULT_CONTEXT as WalletContextState);
|