Kaynağa Gözat

Merge branch 'master' into jw/bump-walletconnect

Jordan Sexton 3 yıl önce
ebeveyn
işleme
ee123d55d1

+ 1 - 2
packages/core/base/src/signer.ts

@@ -1,5 +1,4 @@
-import type { Transaction, TransactionSignature } from '@solana/web3.js';
-import type { Connection } from '@solana/web3.js';
+import type { Connection, Transaction, TransactionSignature } from '@solana/web3.js';
 import type { SendTransactionOptions, WalletAdapter } from './adapter';
 import { BaseWalletAdapter } from './adapter';
 import { WalletSendTransactionError, WalletSignTransactionError } from './errors';

+ 1 - 1
packages/core/react/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@solana/wallet-adapter-react",
-    "version": "0.15.10",
+    "version": "0.15.13",
     "author": "Solana Maintainers <maintainers@solana.foundation>",
     "repository": "https://github.com/solana-labs/wallet-adapter",
     "license": "Apache-2.0",

+ 23 - 17
packages/core/react/src/WalletProvider.tsx

@@ -52,33 +52,39 @@ export const WalletProvider: FC<WalletProviderProps> = ({
         }))
     );
 
-    // When the wallets change, start to listen for changes to their `readyState`
+    // When the adapters change, start to listen for changes to their `readyState`
     useEffect(() => {
+        // When the adapters change, wrap them to conform to the `Wallet` interface
+        setWallets((wallets) =>
+            adapters.map((adapter, index) => {
+                const wallet = wallets[index];
+                // If the wallet hasn't changed, return the same instance
+                return wallet && wallet.adapter === adapter && wallet.readyState === adapter.readyState
+                    ? wallet
+                    : {
+                          adapter: adapter,
+                          readyState: adapter.readyState,
+                      };
+            })
+        );
+
         function handleReadyStateChange(this: Adapter, readyState: WalletReadyState) {
             setWallets((prevWallets) => {
-                const walletIndex = prevWallets.findIndex(({ adapter }) => adapter.name === this.name);
-                if (walletIndex === -1) return prevWallets;
+                const index = prevWallets.findIndex(({ adapter }) => adapter === this);
+                if (index === -1) return prevWallets;
 
-                return [
-                    ...prevWallets.slice(0, walletIndex),
-                    { ...prevWallets[walletIndex], readyState },
-                    ...prevWallets.slice(walletIndex + 1),
-                ];
+                const { adapter } = prevWallets[index]!;
+                return [...prevWallets.slice(0, index), { adapter, readyState }, ...prevWallets.slice(index + 1)];
             });
         }
-        for (const adapter of adapters) {
-            adapter.on('readyStateChange', handleReadyStateChange, adapter);
-        }
-        return () => {
-            for (const adapter of adapters) {
-                adapter.off('readyStateChange', handleReadyStateChange, adapter);
-            }
-        };
+
+        adapters.forEach((adapter) => adapter.on('readyStateChange', handleReadyStateChange, adapter));
+        return () => adapters.forEach((adapter) => adapter.off('readyStateChange', handleReadyStateChange, adapter));
     }, [adapters]);
 
     // When the selected wallet changes, initialize the state
     useEffect(() => {
-        const wallet = wallets.find(({ adapter }) => adapter.name === name);
+        const wallet = name && wallets.find(({ adapter }) => adapter.name === name);
         if (wallet) {
             setState({
                 wallet,

+ 1 - 1
packages/core/react/tsconfig.json

@@ -1,7 +1,7 @@
 {
     "extends": "../../../tsconfig.json",
     "include": ["src"],
-    "exclude": ["node_modules", "src/**/__tests__"],
+    "exclude": ["src/**/__tests__"],
     "compilerOptions": {
         "outDir": "lib/esm",
         "declarationDir": "lib/types",

+ 0 - 1
packages/core/react/tsconfig.test.json

@@ -1,6 +1,5 @@
 {
     "extends": "./tsconfig.json",
-    "exclude": ["node_modules"],
     "compilerOptions": {
         "noEmit": true,
         "allowJs": true

+ 0 - 1
packages/starter/example/tsconfig.json

@@ -1,6 +1,5 @@
 {
     "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
-    "exclude": ["node_modules"],
     "compilerOptions": {
         "target": "es6",
         "lib": ["dom", "dom.iterable", "esnext"],

+ 0 - 1
packages/starter/material-ui-starter/tsconfig.json

@@ -1,6 +1,5 @@
 {
     "include": ["src", "types"],
-    "exclude": ["node_modules"],
     "compilerOptions": {
         "noEmit": true,
         "target": "esnext",

+ 0 - 1
packages/starter/nextjs-starter/tsconfig.json

@@ -1,6 +1,5 @@
 {
     "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
-    "exclude": ["node_modules"],
     "compilerOptions": {
         "target": "es6",
         "lib": ["dom", "dom.iterable", "esnext"],

+ 0 - 1
packages/starter/react-ui-starter/tsconfig.json

@@ -1,6 +1,5 @@
 {
     "include": ["src", "types"],
-    "exclude": ["node_modules"],
     "compilerOptions": {
         "noEmit": true,
         "target": "esnext",

+ 4 - 4
packages/ui/react-ui/src/WalletModal.tsx

@@ -43,11 +43,11 @@ export const WalletModal: FC<WalletModalProps> = ({ className = '', container =
 
     const getStartedWallet = useMemo(() => {
         return installedWallets.length
-            ? installedWallets[0]
+            ? installedWallets[0]!
             : wallets.find((wallet: { adapter: { name: WalletName } }) => wallet.adapter.name === 'Torus') ||
                   wallets.find((wallet: { adapter: { name: WalletName } }) => wallet.adapter.name === 'Phantom') ||
                   wallets.find((wallet: { readyState: any }) => wallet.readyState === WalletReadyState.Loadable) ||
-                  otherWallets[0];
+                  otherWallets[0]!;
     }, [installedWallets, wallets, otherWallets]);
 
     const hideModal = useCallback(() => {
@@ -80,8 +80,8 @@ export const WalletModal: FC<WalletModalProps> = ({ className = '', container =
 
             // here we query all focusable elements
             const focusableElements = node.querySelectorAll('button');
-            const firstElement = focusableElements[0];
-            const lastElement = focusableElements[focusableElements.length - 1];
+            const firstElement = focusableElements[0]!;
+            const lastElement = focusableElements[focusableElements.length - 1]!;
 
             if (event.shiftKey) {
                 // if going backward by pressing tab and firstElement is active, shift focus to last focusable element

+ 2 - 2
packages/wallets/coin98/src/adapter.ts

@@ -100,7 +100,7 @@ export class Coin98WalletAdapter extends BaseMessageSignerWalletAdapter {
 
             let account: string;
             try {
-                [account] = await wallet.connect();
+                account = (await wallet.connect())[0]!;
             } catch (error: any) {
                 throw new WalletAccountError(error?.message, error);
             }
@@ -174,7 +174,7 @@ export class Coin98WalletAdapter extends BaseMessageSignerWalletAdapter {
                 const signatures = response.signatures;
 
                 return transactions.map((transaction, index) => {
-                    const signature = bs58.decode(signatures[index]);
+                    const signature = bs58.decode(signatures[index]!);
                     transaction.addSignature(publicKey, signature);
                     return transaction;
                 });

+ 1 - 1
packages/wallets/keystone/src/adapter.ts

@@ -68,7 +68,7 @@ export class KeystoneWalletAdapter extends BaseMessageSignerWalletAdapter {
             let account: string;
             try {
                 await keyring.readKeyring();
-                account = keyring.getAccounts()[0].pubKey;
+                account = keyring.getAccounts()[0]!.pubKey;
             } catch (error: any) {
                 throw new WalletAccountError(error?.message, error);
             }

+ 2 - 1
packages/wallets/keystone/tsconfig.json

@@ -4,6 +4,7 @@
     "compilerOptions": {
         "outDir": "lib/esm",
         "declarationDir": "lib/types",
-        "noEmit": false
+        "noEmit": false,
+        "noUncheckedIndexedAccess": false
     }
 }

+ 1 - 1
packages/wallets/krystal/src/adapter.ts

@@ -95,7 +95,7 @@ export class KrystalWalletAdapter extends BaseMessageSignerWalletAdapter {
 
             let account: string;
             try {
-                [account] = await wallet.connect();
+                account = (await wallet.connect())[0]!;
             } catch (error: any) {
                 throw new WalletAccountError(error?.message, error);
             }

+ 1 - 1
packages/wallets/slope/src/adapter.ts

@@ -200,7 +200,7 @@ export class SlopeWalletAdapter extends BaseMessageSignerWalletAdapter {
                 const publicKey = new PublicKey(data.publicKey);
 
                 for (let i = 0; i < length; i++) {
-                    transactions[i].addSignature(publicKey, bs58.decode(data.signatures[i]));
+                    transactions[i]!.addSignature(publicKey, bs58.decode(data.signatures[i]!));
                 }
 
                 return transactions;

+ 1 - 1
packages/wallets/torus/src/adapter.ts

@@ -108,7 +108,7 @@ export class TorusWalletAdapter extends BaseMessageSignerWalletAdapter {
 
             let publicKey: PublicKey;
             try {
-                publicKey = new PublicKey(accounts[0]);
+                publicKey = new PublicKey(accounts[0]!);
             } catch (error: any) {
                 throw new WalletPublicKeyError(error?.message, error);
             }

+ 1 - 2
tsconfig.json

@@ -1,6 +1,5 @@
 {
     "include": ["packages/*/*/src"],
-    "exclude": ["node_modules", "packages/*/*/node_modules"],
     "compilerOptions": {
         "target": "es2019",
         "module": "esnext",
@@ -15,7 +14,7 @@
         "esModuleInterop": true,
         "resolveJsonModule": true,
         "isolatedModules": true,
-        "typeRoots": ["node_modules/@types"]
+        "noUncheckedIndexedAccess": true
     },
     "typedocOptions": {
         "entryPoints": ".",