From a9e901ba4db594369183664b8146dcb9d2ad5c2c Mon Sep 17 00:00:00 2001 From: michaelhly Date: Tue, 4 Jan 2022 18:49:29 -0800 Subject: [PATCH 1/2] fix: Refactor and fix readonly provider --- packages/use-solana/src/adapters/index.tsx | 1 - packages/use-solana/src/adapters/readonly.tsx | 51 ------------------- .../src/adapters/readonly/index.tsx | 50 ++++++++++++++++++ packages/use-solana/src/providers.tsx | 9 ++-- .../use-solana/src/utils/useWalletInternal.ts | 1 + 5 files changed, 54 insertions(+), 58 deletions(-) delete mode 100644 packages/use-solana/src/adapters/readonly.tsx create mode 100644 packages/use-solana/src/adapters/readonly/index.tsx diff --git a/packages/use-solana/src/adapters/index.tsx b/packages/use-solana/src/adapters/index.tsx index 72f544fe8..b33c1fd12 100644 --- a/packages/use-solana/src/adapters/index.tsx +++ b/packages/use-solana/src/adapters/index.tsx @@ -1,4 +1,3 @@ export * from "./ledger"; -export * from "./readonly"; export * from "./solana"; export * from "./types"; diff --git a/packages/use-solana/src/adapters/readonly.tsx b/packages/use-solana/src/adapters/readonly.tsx deleted file mode 100644 index c9647518b..000000000 --- a/packages/use-solana/src/adapters/readonly.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import type { Transaction } from "@solana/web3.js"; -import { PublicKey } from "@solana/web3.js"; - -import type { WalletAdapter } from "./types"; - -export class ReadonlyAdapter implements WalletAdapter { - get connected(): boolean { - return true; - } - - get autoApprove(): boolean { - return false; - } - - signAllTransactions(_transactions: Transaction[]): Promise { - throw new Error("readonly adapter cannot sign transactions"); - } - - get publicKey(): PublicKey | null { - if (!process.env.LOCAL_PUBKEY && !process.env.REACT_APP_LOCAL_PUBKEY) { - console.warn("LOCAL_PUBKEY not set"); - return null; - } - return process.env.REACT_APP_LOCAL_PUBKEY - ? new PublicKey(process.env.REACT_APP_LOCAL_PUBKEY) - : process.env.LOCAL_PUBKEY - ? new PublicKey(process.env.LOCAL_PUBKEY) - : null; - } - - signTransaction(_transaction: Transaction): Promise { - throw new Error("readonly adapter cannot sign transactions"); - } - - connect = (): Promise => { - return this._noop(); - }; - - disconnect(): Promise { - return this._noop(); - } - - on(_event: "connect" | "disconnect", _fn: () => void): void { - console.warn("no-op for readonly adapter"); - } - - private async _noop(): Promise { - console.warn("no-op for readonly adapter"); - return Promise.resolve(); - } -} diff --git a/packages/use-solana/src/adapters/readonly/index.tsx b/packages/use-solana/src/adapters/readonly/index.tsx new file mode 100644 index 000000000..6e031608d --- /dev/null +++ b/packages/use-solana/src/adapters/readonly/index.tsx @@ -0,0 +1,50 @@ +import type { Transaction } from "@solana/web3.js"; +import { PublicKey } from "@solana/web3.js"; +import { EventEmitter } from "eventemitter3"; + +import type { WalletAdapter } from "../types"; + +export class ReadonlyAdapter extends EventEmitter implements WalletAdapter { + private _publicKey: PublicKey | null = null; + + constructor() { + super(); + + const localPubkey = + process.env.REACT_APP_LOCAL_PUBKEY ?? process.env.LOCAL_PUBKEY; + if (!localPubkey) { + console.warn("LOCAL_PUBKEY not set for readonly provider"); + } else { + this._publicKey = new PublicKey(localPubkey); + } + } + + get connected(): boolean { + return true; + } + + get autoApprove(): boolean { + return false; + } + + get publicKey(): PublicKey | null { + return this._publicKey; + } + + signAllTransactions(_transactions: Transaction[]): Promise { + throw new Error("readonly adapter cannot sign transactions"); + } + + signTransaction(_transaction: Transaction): Promise { + throw new Error("readonly adapter cannot sign transactions"); + } + + connect = (): Promise => { + this.emit("connect", this._publicKey); + return Promise.resolve(); + }; + + disconnect(): void { + this.emit("disconnect"); + } +} diff --git a/packages/use-solana/src/providers.tsx b/packages/use-solana/src/providers.tsx index 765146cce..74b9f1422 100644 --- a/packages/use-solana/src/providers.tsx +++ b/packages/use-solana/src/providers.tsx @@ -9,11 +9,8 @@ import { SolongWalletAdapter } from "@solana/wallet-adapter-solong"; import type React from "react"; import type { WalletAdapterBuilder } from "./adapters"; -import { - LedgerWalletAdapter, - ReadonlyAdapter, - SolanaWalletAdapter, -} from "./adapters"; +import { LedgerWalletAdapter, SolanaWalletAdapter } from "./adapters"; +import { ReadonlyAdapter } from "./adapters/readonly"; import { SecretKeyAdapter } from "./adapters/secret-key"; import { SolflareAdapter } from "./adapters/solflare"; import { @@ -156,7 +153,7 @@ export const DEFAULT_WALLET_PROVIDERS: WalletProviderMap< icon: "https://upload.wikimedia.org/wikipedia/commons/5/55/Magnifying_glass_icon.svg", makeAdapter: () => new ReadonlyAdapter(), isInstalled: () => - !!process.env.LOCAL_PUBKEY || !!process.env.REACT_APP_PUBKEY, + !!process.env.LOCAL_PUBKEY || !!process.env.REACT_APP_LOCAL_PUBKEY, }, }; diff --git a/packages/use-solana/src/utils/useWalletInternal.ts b/packages/use-solana/src/utils/useWalletInternal.ts index d127beabb..2877b64f8 100644 --- a/packages/use-solana/src/utils/useWalletInternal.ts +++ b/packages/use-solana/src/utils/useWalletInternal.ts @@ -184,6 +184,7 @@ export const useWalletInternal = < if (walletConfigStr === nextWalletConfigStr) { // reconnect try { + console.log("wallet", wallet); await wallet?.connect(nextWalletArgs); } catch (e) { onError( From 49ae5e7ca02887d900648dc006624a89fa660472 Mon Sep 17 00:00:00 2001 From: michaelhly Date: Tue, 4 Jan 2022 18:50:40 -0800 Subject: [PATCH 2/2] Remove extra console.log --- packages/use-solana/src/utils/useWalletInternal.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/use-solana/src/utils/useWalletInternal.ts b/packages/use-solana/src/utils/useWalletInternal.ts index 2877b64f8..d127beabb 100644 --- a/packages/use-solana/src/utils/useWalletInternal.ts +++ b/packages/use-solana/src/utils/useWalletInternal.ts @@ -184,7 +184,6 @@ export const useWalletInternal = < if (walletConfigStr === nextWalletConfigStr) { // reconnect try { - console.log("wallet", wallet); await wallet?.connect(nextWalletArgs); } catch (e) { onError(