@txnlab/use-wallet-react 4.6.0 → 5.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +35 -45
- package/dist/index.js +146 -155
- package/dist/index.js.map +1 -1
- package/package.json +23 -52
- package/dist/index.cjs +0 -202
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -52
package/dist/index.d.ts
CHANGED
|
@@ -1,52 +1,42 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
import
|
|
5
|
-
|
|
1
|
+
import algosdk from "algosdk";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import * as _txnlab_use_wallet0 from "@txnlab/use-wallet";
|
|
4
|
+
import { AlgodConfig, NetworkId, SignDataResponse, SignMetadata, Wallet, WalletManager } from "@txnlab/use-wallet";
|
|
5
|
+
export * from "@txnlab/use-wallet";
|
|
6
6
|
|
|
7
|
+
//#region src/index.d.ts
|
|
7
8
|
interface WalletProviderProps {
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
manager: WalletManager;
|
|
10
|
+
children: React.ReactNode;
|
|
10
11
|
}
|
|
11
|
-
declare const WalletProvider: ({
|
|
12
|
+
declare const WalletProvider: ({
|
|
13
|
+
manager,
|
|
14
|
+
children
|
|
15
|
+
}: WalletProviderProps) => React.JSX.Element;
|
|
12
16
|
declare const useNetwork: () => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
activeNetwork: string;
|
|
18
|
+
networkConfig: Record<string, _txnlab_use_wallet0.NetworkConfig>;
|
|
19
|
+
activeNetworkConfig: _txnlab_use_wallet0.NetworkConfig;
|
|
20
|
+
setActiveNetwork: (networkId: NetworkId | string) => Promise<void>;
|
|
21
|
+
updateAlgodConfig: (networkId: string, config: Partial<AlgodConfig>) => void;
|
|
22
|
+
resetNetworkConfig: (networkId: string) => void;
|
|
19
23
|
};
|
|
20
|
-
interface Wallet {
|
|
21
|
-
id: WalletId;
|
|
22
|
-
/** Unique key for this wallet instance. Used for skinned WalletConnect instances. */
|
|
23
|
-
walletKey: WalletKey;
|
|
24
|
-
metadata: WalletMetadata;
|
|
25
|
-
accounts: WalletAccount[];
|
|
26
|
-
activeAccount: WalletAccount | null;
|
|
27
|
-
isConnected: boolean;
|
|
28
|
-
isActive: boolean;
|
|
29
|
-
canSignData: boolean;
|
|
30
|
-
canUsePrivateKey: boolean;
|
|
31
|
-
connect: (args?: Record<string, any>) => Promise<WalletAccount[]>;
|
|
32
|
-
disconnect: () => Promise<void>;
|
|
33
|
-
setActive: () => void;
|
|
34
|
-
setActiveAccount: (address: string) => void;
|
|
35
|
-
}
|
|
36
24
|
declare const useWallet: () => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
25
|
+
wallets: Wallet[];
|
|
26
|
+
availableWallets: Wallet[];
|
|
27
|
+
isReady: boolean;
|
|
28
|
+
algodClient: algosdk.Algodv2;
|
|
29
|
+
setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>;
|
|
30
|
+
activeWallet: Wallet | null;
|
|
31
|
+
activeWalletAccounts: _txnlab_use_wallet0.WalletAccount[] | null;
|
|
32
|
+
activeWalletAddresses: string[] | null;
|
|
33
|
+
activeAccount: _txnlab_use_wallet0.WalletAccount | null;
|
|
34
|
+
activeAddress: string | null;
|
|
35
|
+
signData: (data: string, metadata: SignMetadata) => Promise<SignDataResponse>;
|
|
36
|
+
withPrivateKey: <T>(callback: (secretKey: Uint8Array) => Promise<T>) => Promise<T>;
|
|
37
|
+
signTransactions: <T extends algosdk.Transaction[] | Uint8Array[]>(txnGroup: T | T[], indexesToSign?: number[]) => Promise<(Uint8Array | null)[]>;
|
|
38
|
+
transactionSigner: (txnGroup: algosdk.Transaction[], indexesToSign: number[]) => Promise<Uint8Array[]>;
|
|
50
39
|
};
|
|
51
|
-
|
|
52
|
-
export {
|
|
40
|
+
//#endregion
|
|
41
|
+
export { WalletProvider, useNetwork, useWallet };
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,163 +1,154 @@
|
|
|
1
|
-
// src/index.tsx
|
|
2
1
|
import { useStore } from "@tanstack/react-store";
|
|
3
2
|
import algosdk from "algosdk";
|
|
4
3
|
import * as React from "react";
|
|
5
|
-
export * from "@txnlab/use-wallet";
|
|
6
4
|
import { jsx } from "react/jsx-runtime";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (networkId === activeNetwork) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
if (!manager.networkConfig[networkId]) {
|
|
34
|
-
throw new Error(`Network "${networkId}" not found in network configuration`);
|
|
35
|
-
}
|
|
36
|
-
console.info(`[React] Creating new Algodv2 client...`);
|
|
37
|
-
const { algod } = manager.networkConfig[networkId];
|
|
38
|
-
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
39
|
-
const newClient = new algosdk.Algodv2(token, baseServer, port, headers);
|
|
40
|
-
setAlgodClient(newClient);
|
|
41
|
-
manager.store.setState((state) => ({
|
|
42
|
-
...state,
|
|
43
|
-
activeNetwork: networkId
|
|
44
|
-
}));
|
|
45
|
-
console.info(`[React] \u2705 Active network set to ${networkId}.`);
|
|
46
|
-
};
|
|
47
|
-
const updateAlgodConfig = (networkId, config) => {
|
|
48
|
-
manager.updateAlgodConfig(networkId, config);
|
|
49
|
-
if (networkId === activeNetwork) {
|
|
50
|
-
console.info(`[React] Creating new Algodv2 client...`);
|
|
51
|
-
const { algod } = manager.networkConfig[networkId];
|
|
52
|
-
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
53
|
-
const newClient = new algosdk.Algodv2(token, baseServer, port, headers);
|
|
54
|
-
setAlgodClient(newClient);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
const resetNetworkConfig = (networkId) => {
|
|
58
|
-
manager.resetNetworkConfig(networkId);
|
|
59
|
-
if (networkId === activeNetwork) {
|
|
60
|
-
console.info(`[React] Creating new Algodv2 client...`);
|
|
61
|
-
const { algod } = manager.networkConfig[networkId];
|
|
62
|
-
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
63
|
-
const newClient = new algosdk.Algodv2(token, baseServer, port, headers);
|
|
64
|
-
setAlgodClient(newClient);
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
return {
|
|
68
|
-
activeNetwork,
|
|
69
|
-
networkConfig: manager.networkConfig,
|
|
70
|
-
activeNetworkConfig: manager.activeNetworkConfig,
|
|
71
|
-
setActiveNetwork,
|
|
72
|
-
updateAlgodConfig,
|
|
73
|
-
resetNetworkConfig
|
|
74
|
-
};
|
|
5
|
+
export * from "@txnlab/use-wallet";
|
|
6
|
+
//#region src/index.tsx
|
|
7
|
+
const WalletContext = React.createContext(void 0);
|
|
8
|
+
const WalletProvider = ({ manager, children }) => {
|
|
9
|
+
const [algodClient, setAlgodClient] = React.useState(manager.algodClient);
|
|
10
|
+
React.useEffect(() => {
|
|
11
|
+
manager.algodClient = algodClient;
|
|
12
|
+
}, [algodClient, manager]);
|
|
13
|
+
const resumedRef = React.useRef(false);
|
|
14
|
+
React.useEffect(() => {
|
|
15
|
+
if (!resumedRef.current) {
|
|
16
|
+
manager.resumeSessions();
|
|
17
|
+
resumedRef.current = true;
|
|
18
|
+
}
|
|
19
|
+
}, [manager]);
|
|
20
|
+
return /* @__PURE__ */ jsx(WalletContext.Provider, {
|
|
21
|
+
value: {
|
|
22
|
+
manager,
|
|
23
|
+
algodClient,
|
|
24
|
+
setAlgodClient
|
|
25
|
+
},
|
|
26
|
+
children
|
|
27
|
+
});
|
|
75
28
|
};
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
throw new Error("No active wallet");
|
|
121
|
-
}
|
|
122
|
-
return activeBaseWallet.signTransactions(txnGroup, indexesToSign);
|
|
123
|
-
};
|
|
124
|
-
const transactionSigner = (txnGroup, indexesToSign) => {
|
|
125
|
-
if (!activeBaseWallet) {
|
|
126
|
-
throw new Error("No active wallet");
|
|
127
|
-
}
|
|
128
|
-
return activeBaseWallet.transactionSigner(txnGroup, indexesToSign);
|
|
129
|
-
};
|
|
130
|
-
const signData = (data, metadata) => {
|
|
131
|
-
if (!activeBaseWallet) {
|
|
132
|
-
throw new Error("No active wallet");
|
|
133
|
-
}
|
|
134
|
-
return activeBaseWallet.signData(data, metadata);
|
|
135
|
-
};
|
|
136
|
-
const withPrivateKey = (callback) => {
|
|
137
|
-
if (!activeBaseWallet) {
|
|
138
|
-
throw new Error("No active wallet");
|
|
139
|
-
}
|
|
140
|
-
return activeBaseWallet.withPrivateKey(callback);
|
|
141
|
-
};
|
|
142
|
-
return {
|
|
143
|
-
wallets,
|
|
144
|
-
isReady,
|
|
145
|
-
algodClient,
|
|
146
|
-
setAlgodClient,
|
|
147
|
-
activeWallet,
|
|
148
|
-
activeWalletAccounts,
|
|
149
|
-
activeWalletAddresses,
|
|
150
|
-
activeAccount,
|
|
151
|
-
activeAddress,
|
|
152
|
-
signData,
|
|
153
|
-
withPrivateKey,
|
|
154
|
-
signTransactions,
|
|
155
|
-
transactionSigner
|
|
156
|
-
};
|
|
29
|
+
const useNetwork = () => {
|
|
30
|
+
const context = React.useContext(WalletContext);
|
|
31
|
+
if (!context) throw new Error("useNetwork must be used within the WalletProvider");
|
|
32
|
+
const { manager, setAlgodClient } = context;
|
|
33
|
+
const activeNetwork = useStore(manager.store, (state) => state.activeNetwork);
|
|
34
|
+
const setActiveNetwork = async (networkId) => {
|
|
35
|
+
if (networkId === activeNetwork) return;
|
|
36
|
+
if (!manager.networkConfig[networkId]) throw new Error(`Network "${networkId}" not found in network configuration`);
|
|
37
|
+
console.info(`[React] Creating new Algodv2 client...`);
|
|
38
|
+
const { algod } = manager.networkConfig[networkId];
|
|
39
|
+
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
40
|
+
setAlgodClient(new algosdk.Algodv2(token, baseServer, port, headers));
|
|
41
|
+
manager.store.setState((state) => ({
|
|
42
|
+
...state,
|
|
43
|
+
activeNetwork: networkId
|
|
44
|
+
}));
|
|
45
|
+
console.info(`[React] ✅ Active network set to ${networkId}.`);
|
|
46
|
+
};
|
|
47
|
+
const updateAlgodConfig = (networkId, config) => {
|
|
48
|
+
manager.updateAlgodConfig(networkId, config);
|
|
49
|
+
if (networkId === activeNetwork) {
|
|
50
|
+
console.info(`[React] Creating new Algodv2 client...`);
|
|
51
|
+
const { algod } = manager.networkConfig[networkId];
|
|
52
|
+
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
53
|
+
setAlgodClient(new algosdk.Algodv2(token, baseServer, port, headers));
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const resetNetworkConfig = (networkId) => {
|
|
57
|
+
manager.resetNetworkConfig(networkId);
|
|
58
|
+
if (networkId === activeNetwork) {
|
|
59
|
+
console.info(`[React] Creating new Algodv2 client...`);
|
|
60
|
+
const { algod } = manager.networkConfig[networkId];
|
|
61
|
+
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
62
|
+
setAlgodClient(new algosdk.Algodv2(token, baseServer, port, headers));
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
return {
|
|
66
|
+
activeNetwork,
|
|
67
|
+
networkConfig: manager.networkConfig,
|
|
68
|
+
activeNetworkConfig: manager.activeNetworkConfig,
|
|
69
|
+
setActiveNetwork,
|
|
70
|
+
updateAlgodConfig,
|
|
71
|
+
resetNetworkConfig
|
|
72
|
+
};
|
|
157
73
|
};
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
74
|
+
const useWallet = () => {
|
|
75
|
+
const context = React.useContext(WalletContext);
|
|
76
|
+
if (!context) throw new Error("useWallet must be used within the WalletProvider");
|
|
77
|
+
const { manager, algodClient, setAlgodClient } = context;
|
|
78
|
+
const isReady = useStore(manager.store, (state) => state.managerStatus) === "ready";
|
|
79
|
+
const walletStateMap = useStore(manager.store, (state) => state.wallets);
|
|
80
|
+
const activeWalletId = useStore(manager.store, (state) => state.activeWallet);
|
|
81
|
+
const activeNetwork = useStore(manager.store, (state) => state.activeNetwork);
|
|
82
|
+
const transformToWallet = React.useCallback((wallet) => {
|
|
83
|
+
const walletState = walletStateMap[wallet.walletKey];
|
|
84
|
+
return {
|
|
85
|
+
id: wallet.id,
|
|
86
|
+
walletKey: wallet.walletKey,
|
|
87
|
+
metadata: wallet.metadata,
|
|
88
|
+
accounts: walletState?.accounts ?? [],
|
|
89
|
+
activeAccount: walletState?.activeAccount ?? null,
|
|
90
|
+
isConnected: !!walletState,
|
|
91
|
+
isActive: wallet.walletKey === activeWalletId,
|
|
92
|
+
canSignData: wallet.canSignData ?? false,
|
|
93
|
+
canUsePrivateKey: wallet.canUsePrivateKey ?? false,
|
|
94
|
+
connect: (args) => wallet.connect(args),
|
|
95
|
+
disconnect: () => wallet.disconnect(),
|
|
96
|
+
setActive: () => wallet.setActive(),
|
|
97
|
+
setActiveAccount: (addr) => wallet.setActiveAccount(addr)
|
|
98
|
+
};
|
|
99
|
+
}, [walletStateMap, activeWalletId]);
|
|
100
|
+
const wallets = React.useMemo(() => {
|
|
101
|
+
return [...manager.wallets.values()].map(transformToWallet);
|
|
102
|
+
}, [manager, transformToWallet]);
|
|
103
|
+
const availableWallets = React.useMemo(() => {
|
|
104
|
+
return manager.availableWallets.map(transformToWallet);
|
|
105
|
+
}, [
|
|
106
|
+
manager,
|
|
107
|
+
transformToWallet,
|
|
108
|
+
activeNetwork
|
|
109
|
+
]);
|
|
110
|
+
const activeBaseWallet = activeWalletId ? manager.getWallet(activeWalletId) || null : null;
|
|
111
|
+
const activeWallet = React.useMemo(() => {
|
|
112
|
+
return activeBaseWallet ? transformToWallet(activeBaseWallet) : null;
|
|
113
|
+
}, [activeBaseWallet, transformToWallet]);
|
|
114
|
+
const activeWalletAccounts = activeWallet?.accounts ?? null;
|
|
115
|
+
const activeWalletAddresses = activeWalletAccounts?.map((account) => account.address) ?? null;
|
|
116
|
+
const activeAccount = activeWallet?.activeAccount ?? null;
|
|
117
|
+
const activeAddress = activeAccount?.address ?? null;
|
|
118
|
+
const signTransactions = (txnGroup, indexesToSign) => {
|
|
119
|
+
if (!activeBaseWallet) throw new Error("No active wallet");
|
|
120
|
+
return activeBaseWallet.signTransactions(txnGroup, indexesToSign);
|
|
121
|
+
};
|
|
122
|
+
const transactionSigner = (txnGroup, indexesToSign) => {
|
|
123
|
+
if (!activeBaseWallet) throw new Error("No active wallet");
|
|
124
|
+
return activeBaseWallet.transactionSigner(txnGroup, indexesToSign);
|
|
125
|
+
};
|
|
126
|
+
const signData = (data, metadata) => {
|
|
127
|
+
if (!activeBaseWallet) throw new Error("No active wallet");
|
|
128
|
+
return activeBaseWallet.signData(data, metadata);
|
|
129
|
+
};
|
|
130
|
+
const withPrivateKey = (callback) => {
|
|
131
|
+
if (!activeBaseWallet) throw new Error("No active wallet");
|
|
132
|
+
return activeBaseWallet.withPrivateKey(callback);
|
|
133
|
+
};
|
|
134
|
+
return {
|
|
135
|
+
wallets,
|
|
136
|
+
availableWallets,
|
|
137
|
+
isReady,
|
|
138
|
+
algodClient,
|
|
139
|
+
setAlgodClient,
|
|
140
|
+
activeWallet,
|
|
141
|
+
activeWalletAccounts,
|
|
142
|
+
activeWalletAddresses,
|
|
143
|
+
activeAccount,
|
|
144
|
+
activeAddress,
|
|
145
|
+
signData,
|
|
146
|
+
withPrivateKey,
|
|
147
|
+
signTransactions,
|
|
148
|
+
transactionSigner
|
|
149
|
+
};
|
|
162
150
|
};
|
|
151
|
+
//#endregion
|
|
152
|
+
export { WalletProvider, useNetwork, useWallet };
|
|
153
|
+
|
|
163
154
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport {\n type AlgodConfig,\n type BaseWallet,\n NetworkId,\n SignDataResponse,\n SignMetadata,\n type WalletAccount,\n WalletId,\n type WalletKey,\n WalletManager,\n type WalletMetadata\n} from '@txnlab/use-wallet'\nimport algosdk from 'algosdk'\nimport * as React from 'react'\n\nexport * from '@txnlab/use-wallet'\n\ninterface IWalletContext {\n manager: WalletManager\n algodClient: algosdk.Algodv2\n setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>\n}\n\nconst WalletContext = React.createContext<IWalletContext | undefined>(undefined)\n\ninterface WalletProviderProps {\n manager: WalletManager\n children: React.ReactNode\n}\n\nexport const WalletProvider = ({ manager, children }: WalletProviderProps): JSX.Element => {\n const [algodClient, setAlgodClient] = React.useState(manager.algodClient)\n\n React.useEffect(() => {\n manager.algodClient = algodClient\n }, [algodClient, manager])\n\n const resumedRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!resumedRef.current) {\n manager.resumeSessions()\n resumedRef.current = true\n }\n }, [manager])\n\n return (\n <WalletContext.Provider value={{ manager, algodClient, setAlgodClient }}>\n {children}\n </WalletContext.Provider>\n )\n}\n\nexport const useNetwork = () => {\n const context = React.useContext(WalletContext)\n\n if (!context) {\n throw new Error('useNetwork must be used within the WalletProvider')\n }\n\n const { manager, setAlgodClient } = context\n\n const activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n\n const setActiveNetwork = async (networkId: NetworkId | string): Promise<void> => {\n if (networkId === activeNetwork) {\n return\n }\n\n if (!manager.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n console.info(`[React] Creating new Algodv2 client...`)\n\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n\n manager.store.setState((state) => ({\n ...state,\n activeNetwork: networkId\n }))\n\n console.info(`[React] ✅ Active network set to ${networkId}.`)\n }\n\n const updateAlgodConfig = (networkId: string, config: Partial<AlgodConfig>): void => {\n manager.updateAlgodConfig(networkId, config)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork) {\n console.info(`[React] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n }\n }\n\n const resetNetworkConfig = (networkId: string): void => {\n manager.resetNetworkConfig(networkId)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork) {\n console.info(`[React] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n }\n }\n\n return {\n activeNetwork,\n networkConfig: manager.networkConfig,\n activeNetworkConfig: manager.activeNetworkConfig,\n setActiveNetwork,\n updateAlgodConfig,\n resetNetworkConfig\n }\n}\n\nexport interface Wallet {\n id: WalletId\n /** Unique key for this wallet instance. Used for skinned WalletConnect instances. */\n walletKey: WalletKey\n metadata: WalletMetadata\n accounts: WalletAccount[]\n activeAccount: WalletAccount | null\n isConnected: boolean\n isActive: boolean\n canSignData: boolean\n canUsePrivateKey: boolean\n connect: (args?: Record<string, any>) => Promise<WalletAccount[]>\n disconnect: () => Promise<void>\n setActive: () => void\n setActiveAccount: (address: string) => void\n}\n\nexport const useWallet = () => {\n const context = React.useContext(WalletContext)\n\n if (!context) {\n throw new Error('useWallet must be used within the WalletProvider')\n }\n\n const { manager, algodClient, setAlgodClient } = context\n\n const managerStatus = useStore(manager.store, (state) => state.managerStatus)\n const isReady = managerStatus === 'ready'\n\n const walletStateMap = useStore(manager.store, (state) => state.wallets)\n const activeWalletId = useStore(manager.store, (state) => state.activeWallet)\n\n const transformToWallet = React.useCallback(\n (wallet: BaseWallet): Wallet => {\n const walletState = walletStateMap[wallet.walletKey]\n return {\n id: wallet.id,\n walletKey: wallet.walletKey,\n metadata: wallet.metadata,\n accounts: walletState?.accounts ?? [],\n activeAccount: walletState?.activeAccount ?? null,\n isConnected: !!walletState,\n isActive: wallet.walletKey === activeWalletId,\n canSignData: wallet.canSignData ?? false,\n canUsePrivateKey: wallet.canUsePrivateKey ?? false,\n connect: (args) => wallet.connect(args),\n disconnect: () => wallet.disconnect(),\n setActive: () => wallet.setActive(),\n setActiveAccount: (addr) => wallet.setActiveAccount(addr)\n }\n },\n [walletStateMap, activeWalletId]\n )\n\n const wallets = React.useMemo(() => {\n return [...manager.wallets.values()].map(transformToWallet)\n }, [manager, transformToWallet])\n\n const activeBaseWallet = activeWalletId ? manager.getWallet(activeWalletId) || null : null\n const activeWallet = React.useMemo(() => {\n return activeBaseWallet ? transformToWallet(activeBaseWallet) : null\n }, [activeBaseWallet, transformToWallet])\n\n const activeWalletAccounts = activeWallet?.accounts ?? null\n const activeWalletAddresses = activeWalletAccounts?.map((account) => account.address) ?? null\n const activeAccount = activeWallet?.activeAccount ?? null\n const activeAddress = activeAccount?.address ?? null\n\n const signTransactions = <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n if (!activeBaseWallet) {\n throw new Error('No active wallet')\n }\n return activeBaseWallet.signTransactions(txnGroup, indexesToSign)\n }\n\n const transactionSigner = (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n if (!activeBaseWallet) {\n throw new Error('No active wallet')\n }\n return activeBaseWallet.transactionSigner(txnGroup, indexesToSign)\n }\n\n const signData = (data: string, metadata: SignMetadata): Promise<SignDataResponse> => {\n if (!activeBaseWallet) {\n throw new Error('No active wallet')\n }\n return activeBaseWallet.signData(data, metadata)\n }\n\n const withPrivateKey = <T,>(callback: (secretKey: Uint8Array) => Promise<T>): Promise<T> => {\n if (!activeBaseWallet) {\n throw new Error('No active wallet')\n }\n return activeBaseWallet.withPrivateKey(callback)\n }\n\n return {\n wallets,\n isReady,\n algodClient,\n setAlgodClient,\n activeWallet,\n activeWalletAccounts,\n activeWalletAddresses,\n activeAccount,\n activeAddress,\n signData,\n withPrivateKey,\n signTransactions,\n transactionSigner\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport {\n type AlgodConfig,\n type BaseWallet,\n NetworkId,\n SignDataResponse,\n SignMetadata,\n type Wallet,\n WalletManager\n} from '@txnlab/use-wallet'\nimport algosdk from 'algosdk'\nimport * as React from 'react'\n\nexport * from '@txnlab/use-wallet'\n\ninterface IWalletContext {\n manager: WalletManager\n algodClient: algosdk.Algodv2\n setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>\n}\n\nconst WalletContext = React.createContext<IWalletContext | undefined>(undefined)\n\ninterface WalletProviderProps {\n manager: WalletManager\n children: React.ReactNode\n}\n\nexport const WalletProvider = ({ manager, children }: WalletProviderProps): React.JSX.Element => {\n const [algodClient, setAlgodClient] = React.useState(manager.algodClient)\n\n React.useEffect(() => {\n manager.algodClient = algodClient\n }, [algodClient, manager])\n\n const resumedRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!resumedRef.current) {\n manager.resumeSessions()\n resumedRef.current = true\n }\n }, [manager])\n\n return (\n <WalletContext.Provider value={{ manager, algodClient, setAlgodClient }}>\n {children}\n </WalletContext.Provider>\n )\n}\n\nexport const useNetwork = () => {\n const context = React.useContext(WalletContext)\n\n if (!context) {\n throw new Error('useNetwork must be used within the WalletProvider')\n }\n\n const { manager, setAlgodClient } = context\n\n const activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n\n const setActiveNetwork = async (networkId: NetworkId | string): Promise<void> => {\n if (networkId === activeNetwork) {\n return\n }\n\n if (!manager.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n console.info(`[React] Creating new Algodv2 client...`)\n\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n\n manager.store.setState((state) => ({\n ...state,\n activeNetwork: networkId\n }))\n\n console.info(`[React] ✅ Active network set to ${networkId}.`)\n }\n\n const updateAlgodConfig = (networkId: string, config: Partial<AlgodConfig>): void => {\n manager.updateAlgodConfig(networkId, config)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork) {\n console.info(`[React] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n }\n }\n\n const resetNetworkConfig = (networkId: string): void => {\n manager.resetNetworkConfig(networkId)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork) {\n console.info(`[React] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n }\n }\n\n return {\n activeNetwork,\n networkConfig: manager.networkConfig,\n activeNetworkConfig: manager.activeNetworkConfig,\n setActiveNetwork,\n updateAlgodConfig,\n resetNetworkConfig\n }\n}\n\nexport const useWallet = () => {\n const context = React.useContext(WalletContext)\n\n if (!context) {\n throw new Error('useWallet must be used within the WalletProvider')\n }\n\n const { manager, algodClient, setAlgodClient } = context\n\n const managerStatus = useStore(manager.store, (state) => state.managerStatus)\n const isReady = managerStatus === 'ready'\n\n const walletStateMap = useStore(manager.store, (state) => state.wallets)\n const activeWalletId = useStore(manager.store, (state) => state.activeWallet)\n const activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n\n const transformToWallet = React.useCallback(\n (wallet: BaseWallet): Wallet => {\n const walletState = walletStateMap[wallet.walletKey]\n return {\n id: wallet.id,\n walletKey: wallet.walletKey,\n metadata: wallet.metadata,\n accounts: walletState?.accounts ?? [],\n activeAccount: walletState?.activeAccount ?? null,\n isConnected: !!walletState,\n isActive: wallet.walletKey === activeWalletId,\n canSignData: wallet.canSignData ?? false,\n canUsePrivateKey: wallet.canUsePrivateKey ?? false,\n connect: (args) => wallet.connect(args),\n disconnect: () => wallet.disconnect(),\n setActive: () => wallet.setActive(),\n setActiveAccount: (addr) => wallet.setActiveAccount(addr)\n }\n },\n [walletStateMap, activeWalletId]\n )\n\n const wallets = React.useMemo(() => {\n return [...manager.wallets.values()].map(transformToWallet)\n }, [manager, transformToWallet])\n\n const availableWallets = React.useMemo(() => {\n return manager.availableWallets.map(transformToWallet)\n }, [manager, transformToWallet, activeNetwork])\n\n const activeBaseWallet = activeWalletId ? manager.getWallet(activeWalletId) || null : null\n const activeWallet = React.useMemo(() => {\n return activeBaseWallet ? transformToWallet(activeBaseWallet) : null\n }, [activeBaseWallet, transformToWallet])\n\n const activeWalletAccounts = activeWallet?.accounts ?? null\n const activeWalletAddresses = activeWalletAccounts?.map((account) => account.address) ?? null\n const activeAccount = activeWallet?.activeAccount ?? null\n const activeAddress = activeAccount?.address ?? null\n\n const signTransactions = <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n if (!activeBaseWallet) {\n throw new Error('No active wallet')\n }\n return activeBaseWallet.signTransactions(txnGroup, indexesToSign)\n }\n\n const transactionSigner = (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n if (!activeBaseWallet) {\n throw new Error('No active wallet')\n }\n return activeBaseWallet.transactionSigner(txnGroup, indexesToSign)\n }\n\n const signData = (data: string, metadata: SignMetadata): Promise<SignDataResponse> => {\n if (!activeBaseWallet) {\n throw new Error('No active wallet')\n }\n return activeBaseWallet.signData(data, metadata)\n }\n\n const withPrivateKey = <T,>(callback: (secretKey: Uint8Array) => Promise<T>): Promise<T> => {\n if (!activeBaseWallet) {\n throw new Error('No active wallet')\n }\n return activeBaseWallet.withPrivateKey(callback)\n }\n\n return {\n wallets,\n availableWallets,\n isReady,\n algodClient,\n setAlgodClient,\n activeWallet,\n activeWalletAccounts,\n activeWalletAddresses,\n activeAccount,\n activeAddress,\n signData,\n withPrivateKey,\n signTransactions,\n transactionSigner\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,88 +1,59 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@txnlab/use-wallet-react",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0-rc.1",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public",
|
|
6
|
+
"provenance": true
|
|
7
|
+
},
|
|
4
8
|
"description": "React library for integrating Algorand wallets into decentralized applications",
|
|
5
9
|
"author": "Doug Richar <drichar@gmail.com>",
|
|
6
10
|
"license": "MIT",
|
|
7
11
|
"repository": {
|
|
8
12
|
"type": "git",
|
|
9
|
-
"url": "https://github.com/txnlab/use-wallet.git",
|
|
10
|
-
"directory": "packages/
|
|
13
|
+
"url": "git+https://github.com/txnlab/use-wallet.git",
|
|
14
|
+
"directory": "packages/frameworks/react"
|
|
11
15
|
},
|
|
12
16
|
"type": "module",
|
|
13
|
-
"main": "./dist/index.
|
|
14
|
-
"module": "./dist/index.js",
|
|
15
|
-
"exports": "./dist/index.js",
|
|
17
|
+
"main": "./dist/index.js",
|
|
16
18
|
"types": "./dist/index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"default": "./dist/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
17
25
|
"keywords": [
|
|
18
26
|
"algorand",
|
|
19
27
|
"wallet",
|
|
20
|
-
"walletconnect",
|
|
21
|
-
"pera",
|
|
22
|
-
"defly",
|
|
23
|
-
"exodus",
|
|
24
|
-
"algosdk",
|
|
25
|
-
"algokit",
|
|
26
|
-
"kmd",
|
|
27
28
|
"react"
|
|
28
29
|
],
|
|
29
30
|
"files": [
|
|
30
31
|
"dist"
|
|
31
32
|
],
|
|
32
33
|
"dependencies": {
|
|
33
|
-
"@tanstack/react-store": "0.
|
|
34
|
-
"@txnlab/use-wallet": "
|
|
34
|
+
"@tanstack/react-store": "0.9.1",
|
|
35
|
+
"@txnlab/use-wallet": "5.0.0-rc.1"
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
37
|
-
"@types/react": "
|
|
38
|
+
"@types/react": "19.2.14",
|
|
38
39
|
"algosdk": "3.5.2",
|
|
39
40
|
"jsdom": "26.1.0",
|
|
40
|
-
"react": "
|
|
41
|
-
"react-dom": "
|
|
42
|
-
"
|
|
41
|
+
"react": "19.2.4",
|
|
42
|
+
"react-dom": "19.2.4",
|
|
43
|
+
"tsdown": "0.21.0",
|
|
43
44
|
"typescript": "5.9.3"
|
|
44
45
|
},
|
|
45
46
|
"peerDependencies": {
|
|
46
|
-
"@blockshake/defly-connect": "^1.2.1",
|
|
47
|
-
"@magic-ext/algorand": "^24.4.2",
|
|
48
|
-
"@walletconnect/modal": "^2.7.0",
|
|
49
|
-
"@perawallet/connect": "^1.4.1",
|
|
50
|
-
"@walletconnect/sign-client": "^2.23.4",
|
|
51
47
|
"algosdk": "^3.0.0",
|
|
52
|
-
"lute-connect": "^1.6.3",
|
|
53
|
-
"magic-sdk": "^29.4.2",
|
|
54
48
|
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
55
49
|
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
|
56
50
|
},
|
|
57
|
-
"peerDependenciesMeta": {
|
|
58
|
-
"@blockshake/defly-connect": {
|
|
59
|
-
"optional": true
|
|
60
|
-
},
|
|
61
|
-
"@magic-ext/algorand": {
|
|
62
|
-
"optional": true
|
|
63
|
-
},
|
|
64
|
-
"@perawallet/connect": {
|
|
65
|
-
"optional": true
|
|
66
|
-
},
|
|
67
|
-
"@walletconnect/modal": {
|
|
68
|
-
"optional": true
|
|
69
|
-
},
|
|
70
|
-
"@walletconnect/sign-client": {
|
|
71
|
-
"optional": true
|
|
72
|
-
},
|
|
73
|
-
"lute-connect": {
|
|
74
|
-
"optional": true
|
|
75
|
-
},
|
|
76
|
-
"magic-sdk": {
|
|
77
|
-
"optional": true
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
51
|
"scripts": {
|
|
81
|
-
"build": "
|
|
82
|
-
"start": "
|
|
52
|
+
"build": "tsdown",
|
|
53
|
+
"start": "tsdown --watch",
|
|
83
54
|
"test": "vitest run",
|
|
84
55
|
"test:watch": "vitest --watch",
|
|
85
|
-
"lint": "eslint
|
|
56
|
+
"lint": "eslint \"src/**/*.{js,ts,tsx}\"",
|
|
86
57
|
"typecheck": "tsc --noEmit"
|
|
87
58
|
}
|
|
88
59
|
}
|
package/dist/index.cjs
DELETED
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
21
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
-
mod
|
|
28
|
-
));
|
|
29
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
-
|
|
31
|
-
// src/index.tsx
|
|
32
|
-
var index_exports = {};
|
|
33
|
-
__export(index_exports, {
|
|
34
|
-
WalletProvider: () => WalletProvider,
|
|
35
|
-
useNetwork: () => useNetwork,
|
|
36
|
-
useWallet: () => useWallet
|
|
37
|
-
});
|
|
38
|
-
module.exports = __toCommonJS(index_exports);
|
|
39
|
-
var import_react_store = require("@tanstack/react-store");
|
|
40
|
-
var import_algosdk = __toESM(require("algosdk"), 1);
|
|
41
|
-
var React = __toESM(require("react"), 1);
|
|
42
|
-
__reExport(index_exports, require("@txnlab/use-wallet"), module.exports);
|
|
43
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
44
|
-
var WalletContext = React.createContext(void 0);
|
|
45
|
-
var WalletProvider = ({ manager, children }) => {
|
|
46
|
-
const [algodClient, setAlgodClient] = React.useState(manager.algodClient);
|
|
47
|
-
React.useEffect(() => {
|
|
48
|
-
manager.algodClient = algodClient;
|
|
49
|
-
}, [algodClient, manager]);
|
|
50
|
-
const resumedRef = React.useRef(false);
|
|
51
|
-
React.useEffect(() => {
|
|
52
|
-
if (!resumedRef.current) {
|
|
53
|
-
manager.resumeSessions();
|
|
54
|
-
resumedRef.current = true;
|
|
55
|
-
}
|
|
56
|
-
}, [manager]);
|
|
57
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(WalletContext.Provider, { value: { manager, algodClient, setAlgodClient }, children });
|
|
58
|
-
};
|
|
59
|
-
var useNetwork = () => {
|
|
60
|
-
const context = React.useContext(WalletContext);
|
|
61
|
-
if (!context) {
|
|
62
|
-
throw new Error("useNetwork must be used within the WalletProvider");
|
|
63
|
-
}
|
|
64
|
-
const { manager, setAlgodClient } = context;
|
|
65
|
-
const activeNetwork = (0, import_react_store.useStore)(manager.store, (state) => state.activeNetwork);
|
|
66
|
-
const setActiveNetwork = async (networkId) => {
|
|
67
|
-
if (networkId === activeNetwork) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
if (!manager.networkConfig[networkId]) {
|
|
71
|
-
throw new Error(`Network "${networkId}" not found in network configuration`);
|
|
72
|
-
}
|
|
73
|
-
console.info(`[React] Creating new Algodv2 client...`);
|
|
74
|
-
const { algod } = manager.networkConfig[networkId];
|
|
75
|
-
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
76
|
-
const newClient = new import_algosdk.default.Algodv2(token, baseServer, port, headers);
|
|
77
|
-
setAlgodClient(newClient);
|
|
78
|
-
manager.store.setState((state) => ({
|
|
79
|
-
...state,
|
|
80
|
-
activeNetwork: networkId
|
|
81
|
-
}));
|
|
82
|
-
console.info(`[React] \u2705 Active network set to ${networkId}.`);
|
|
83
|
-
};
|
|
84
|
-
const updateAlgodConfig = (networkId, config) => {
|
|
85
|
-
manager.updateAlgodConfig(networkId, config);
|
|
86
|
-
if (networkId === activeNetwork) {
|
|
87
|
-
console.info(`[React] Creating new Algodv2 client...`);
|
|
88
|
-
const { algod } = manager.networkConfig[networkId];
|
|
89
|
-
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
90
|
-
const newClient = new import_algosdk.default.Algodv2(token, baseServer, port, headers);
|
|
91
|
-
setAlgodClient(newClient);
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
const resetNetworkConfig = (networkId) => {
|
|
95
|
-
manager.resetNetworkConfig(networkId);
|
|
96
|
-
if (networkId === activeNetwork) {
|
|
97
|
-
console.info(`[React] Creating new Algodv2 client...`);
|
|
98
|
-
const { algod } = manager.networkConfig[networkId];
|
|
99
|
-
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
100
|
-
const newClient = new import_algosdk.default.Algodv2(token, baseServer, port, headers);
|
|
101
|
-
setAlgodClient(newClient);
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
return {
|
|
105
|
-
activeNetwork,
|
|
106
|
-
networkConfig: manager.networkConfig,
|
|
107
|
-
activeNetworkConfig: manager.activeNetworkConfig,
|
|
108
|
-
setActiveNetwork,
|
|
109
|
-
updateAlgodConfig,
|
|
110
|
-
resetNetworkConfig
|
|
111
|
-
};
|
|
112
|
-
};
|
|
113
|
-
var useWallet = () => {
|
|
114
|
-
const context = React.useContext(WalletContext);
|
|
115
|
-
if (!context) {
|
|
116
|
-
throw new Error("useWallet must be used within the WalletProvider");
|
|
117
|
-
}
|
|
118
|
-
const { manager, algodClient, setAlgodClient } = context;
|
|
119
|
-
const managerStatus = (0, import_react_store.useStore)(manager.store, (state) => state.managerStatus);
|
|
120
|
-
const isReady = managerStatus === "ready";
|
|
121
|
-
const walletStateMap = (0, import_react_store.useStore)(manager.store, (state) => state.wallets);
|
|
122
|
-
const activeWalletId = (0, import_react_store.useStore)(manager.store, (state) => state.activeWallet);
|
|
123
|
-
const transformToWallet = React.useCallback(
|
|
124
|
-
(wallet) => {
|
|
125
|
-
const walletState = walletStateMap[wallet.walletKey];
|
|
126
|
-
return {
|
|
127
|
-
id: wallet.id,
|
|
128
|
-
walletKey: wallet.walletKey,
|
|
129
|
-
metadata: wallet.metadata,
|
|
130
|
-
accounts: walletState?.accounts ?? [],
|
|
131
|
-
activeAccount: walletState?.activeAccount ?? null,
|
|
132
|
-
isConnected: !!walletState,
|
|
133
|
-
isActive: wallet.walletKey === activeWalletId,
|
|
134
|
-
canSignData: wallet.canSignData ?? false,
|
|
135
|
-
canUsePrivateKey: wallet.canUsePrivateKey ?? false,
|
|
136
|
-
connect: (args) => wallet.connect(args),
|
|
137
|
-
disconnect: () => wallet.disconnect(),
|
|
138
|
-
setActive: () => wallet.setActive(),
|
|
139
|
-
setActiveAccount: (addr) => wallet.setActiveAccount(addr)
|
|
140
|
-
};
|
|
141
|
-
},
|
|
142
|
-
[walletStateMap, activeWalletId]
|
|
143
|
-
);
|
|
144
|
-
const wallets = React.useMemo(() => {
|
|
145
|
-
return [...manager.wallets.values()].map(transformToWallet);
|
|
146
|
-
}, [manager, transformToWallet]);
|
|
147
|
-
const activeBaseWallet = activeWalletId ? manager.getWallet(activeWalletId) || null : null;
|
|
148
|
-
const activeWallet = React.useMemo(() => {
|
|
149
|
-
return activeBaseWallet ? transformToWallet(activeBaseWallet) : null;
|
|
150
|
-
}, [activeBaseWallet, transformToWallet]);
|
|
151
|
-
const activeWalletAccounts = activeWallet?.accounts ?? null;
|
|
152
|
-
const activeWalletAddresses = activeWalletAccounts?.map((account) => account.address) ?? null;
|
|
153
|
-
const activeAccount = activeWallet?.activeAccount ?? null;
|
|
154
|
-
const activeAddress = activeAccount?.address ?? null;
|
|
155
|
-
const signTransactions = (txnGroup, indexesToSign) => {
|
|
156
|
-
if (!activeBaseWallet) {
|
|
157
|
-
throw new Error("No active wallet");
|
|
158
|
-
}
|
|
159
|
-
return activeBaseWallet.signTransactions(txnGroup, indexesToSign);
|
|
160
|
-
};
|
|
161
|
-
const transactionSigner = (txnGroup, indexesToSign) => {
|
|
162
|
-
if (!activeBaseWallet) {
|
|
163
|
-
throw new Error("No active wallet");
|
|
164
|
-
}
|
|
165
|
-
return activeBaseWallet.transactionSigner(txnGroup, indexesToSign);
|
|
166
|
-
};
|
|
167
|
-
const signData = (data, metadata) => {
|
|
168
|
-
if (!activeBaseWallet) {
|
|
169
|
-
throw new Error("No active wallet");
|
|
170
|
-
}
|
|
171
|
-
return activeBaseWallet.signData(data, metadata);
|
|
172
|
-
};
|
|
173
|
-
const withPrivateKey = (callback) => {
|
|
174
|
-
if (!activeBaseWallet) {
|
|
175
|
-
throw new Error("No active wallet");
|
|
176
|
-
}
|
|
177
|
-
return activeBaseWallet.withPrivateKey(callback);
|
|
178
|
-
};
|
|
179
|
-
return {
|
|
180
|
-
wallets,
|
|
181
|
-
isReady,
|
|
182
|
-
algodClient,
|
|
183
|
-
setAlgodClient,
|
|
184
|
-
activeWallet,
|
|
185
|
-
activeWalletAccounts,
|
|
186
|
-
activeWalletAddresses,
|
|
187
|
-
activeAccount,
|
|
188
|
-
activeAddress,
|
|
189
|
-
signData,
|
|
190
|
-
withPrivateKey,
|
|
191
|
-
signTransactions,
|
|
192
|
-
transactionSigner
|
|
193
|
-
};
|
|
194
|
-
};
|
|
195
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
196
|
-
0 && (module.exports = {
|
|
197
|
-
WalletProvider,
|
|
198
|
-
useNetwork,
|
|
199
|
-
useWallet,
|
|
200
|
-
...require("@txnlab/use-wallet")
|
|
201
|
-
});
|
|
202
|
-
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport {\n type AlgodConfig,\n type BaseWallet,\n NetworkId,\n SignDataResponse,\n SignMetadata,\n type WalletAccount,\n WalletId,\n type WalletKey,\n WalletManager,\n type WalletMetadata\n} from '@txnlab/use-wallet'\nimport algosdk from 'algosdk'\nimport * as React from 'react'\n\nexport * from '@txnlab/use-wallet'\n\ninterface IWalletContext {\n manager: WalletManager\n algodClient: algosdk.Algodv2\n setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>\n}\n\nconst WalletContext = React.createContext<IWalletContext | undefined>(undefined)\n\ninterface WalletProviderProps {\n manager: WalletManager\n children: React.ReactNode\n}\n\nexport const WalletProvider = ({ manager, children }: WalletProviderProps): JSX.Element => {\n const [algodClient, setAlgodClient] = React.useState(manager.algodClient)\n\n React.useEffect(() => {\n manager.algodClient = algodClient\n }, [algodClient, manager])\n\n const resumedRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!resumedRef.current) {\n manager.resumeSessions()\n resumedRef.current = true\n }\n }, [manager])\n\n return (\n <WalletContext.Provider value={{ manager, algodClient, setAlgodClient }}>\n {children}\n </WalletContext.Provider>\n )\n}\n\nexport const useNetwork = () => {\n const context = React.useContext(WalletContext)\n\n if (!context) {\n throw new Error('useNetwork must be used within the WalletProvider')\n }\n\n const { manager, setAlgodClient } = context\n\n const activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n\n const setActiveNetwork = async (networkId: NetworkId | string): Promise<void> => {\n if (networkId === activeNetwork) {\n return\n }\n\n if (!manager.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n console.info(`[React] Creating new Algodv2 client...`)\n\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n\n manager.store.setState((state) => ({\n ...state,\n activeNetwork: networkId\n }))\n\n console.info(`[React] ✅ Active network set to ${networkId}.`)\n }\n\n const updateAlgodConfig = (networkId: string, config: Partial<AlgodConfig>): void => {\n manager.updateAlgodConfig(networkId, config)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork) {\n console.info(`[React] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n }\n }\n\n const resetNetworkConfig = (networkId: string): void => {\n manager.resetNetworkConfig(networkId)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork) {\n console.info(`[React] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n }\n }\n\n return {\n activeNetwork,\n networkConfig: manager.networkConfig,\n activeNetworkConfig: manager.activeNetworkConfig,\n setActiveNetwork,\n updateAlgodConfig,\n resetNetworkConfig\n }\n}\n\nexport interface Wallet {\n id: WalletId\n /** Unique key for this wallet instance. Used for skinned WalletConnect instances. */\n walletKey: WalletKey\n metadata: WalletMetadata\n accounts: WalletAccount[]\n activeAccount: WalletAccount | null\n isConnected: boolean\n isActive: boolean\n canSignData: boolean\n canUsePrivateKey: boolean\n connect: (args?: Record<string, any>) => Promise<WalletAccount[]>\n disconnect: () => Promise<void>\n setActive: () => void\n setActiveAccount: (address: string) => void\n}\n\nexport const useWallet = () => {\n const context = React.useContext(WalletContext)\n\n if (!context) {\n throw new Error('useWallet must be used within the WalletProvider')\n }\n\n const { manager, algodClient, setAlgodClient } = context\n\n const managerStatus = useStore(manager.store, (state) => state.managerStatus)\n const isReady = managerStatus === 'ready'\n\n const walletStateMap = useStore(manager.store, (state) => state.wallets)\n const activeWalletId = useStore(manager.store, (state) => state.activeWallet)\n\n const transformToWallet = React.useCallback(\n (wallet: BaseWallet): Wallet => {\n const walletState = walletStateMap[wallet.walletKey]\n return {\n id: wallet.id,\n walletKey: wallet.walletKey,\n metadata: wallet.metadata,\n accounts: walletState?.accounts ?? [],\n activeAccount: walletState?.activeAccount ?? null,\n isConnected: !!walletState,\n isActive: wallet.walletKey === activeWalletId,\n canSignData: wallet.canSignData ?? false,\n canUsePrivateKey: wallet.canUsePrivateKey ?? false,\n connect: (args) => wallet.connect(args),\n disconnect: () => wallet.disconnect(),\n setActive: () => wallet.setActive(),\n setActiveAccount: (addr) => wallet.setActiveAccount(addr)\n }\n },\n [walletStateMap, activeWalletId]\n )\n\n const wallets = React.useMemo(() => {\n return [...manager.wallets.values()].map(transformToWallet)\n }, [manager, transformToWallet])\n\n const activeBaseWallet = activeWalletId ? manager.getWallet(activeWalletId) || null : null\n const activeWallet = React.useMemo(() => {\n return activeBaseWallet ? transformToWallet(activeBaseWallet) : null\n }, [activeBaseWallet, transformToWallet])\n\n const activeWalletAccounts = activeWallet?.accounts ?? null\n const activeWalletAddresses = activeWalletAccounts?.map((account) => account.address) ?? null\n const activeAccount = activeWallet?.activeAccount ?? null\n const activeAddress = activeAccount?.address ?? null\n\n const signTransactions = <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n if (!activeBaseWallet) {\n throw new Error('No active wallet')\n }\n return activeBaseWallet.signTransactions(txnGroup, indexesToSign)\n }\n\n const transactionSigner = (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n if (!activeBaseWallet) {\n throw new Error('No active wallet')\n }\n return activeBaseWallet.transactionSigner(txnGroup, indexesToSign)\n }\n\n const signData = (data: string, metadata: SignMetadata): Promise<SignDataResponse> => {\n if (!activeBaseWallet) {\n throw new Error('No active wallet')\n }\n return activeBaseWallet.signData(data, metadata)\n }\n\n const withPrivateKey = <T,>(callback: (secretKey: Uint8Array) => Promise<T>): Promise<T> => {\n if (!activeBaseWallet) {\n throw new Error('No active wallet')\n }\n return activeBaseWallet.withPrivateKey(callback)\n }\n\n return {\n wallets,\n isReady,\n algodClient,\n setAlgodClient,\n activeWallet,\n activeWalletAccounts,\n activeWalletAddresses,\n activeAccount,\n activeAddress,\n signData,\n withPrivateKey,\n signTransactions,\n transactionSigner\n }\n}\n"],"mappings":"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","names":["algosdk"]}
|
package/dist/index.d.cts
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import * as _txnlab_use_wallet from '@txnlab/use-wallet';
|
|
2
|
-
import { WalletId, WalletKey, WalletMetadata, WalletAccount, WalletManager, NetworkId, AlgodConfig, SignMetadata, SignDataResponse } from '@txnlab/use-wallet';
|
|
3
|
-
export * from '@txnlab/use-wallet';
|
|
4
|
-
import algosdk from 'algosdk';
|
|
5
|
-
import * as React from 'react';
|
|
6
|
-
|
|
7
|
-
interface WalletProviderProps {
|
|
8
|
-
manager: WalletManager;
|
|
9
|
-
children: React.ReactNode;
|
|
10
|
-
}
|
|
11
|
-
declare const WalletProvider: ({ manager, children }: WalletProviderProps) => JSX.Element;
|
|
12
|
-
declare const useNetwork: () => {
|
|
13
|
-
activeNetwork: string;
|
|
14
|
-
networkConfig: Record<string, _txnlab_use_wallet.NetworkConfig>;
|
|
15
|
-
activeNetworkConfig: _txnlab_use_wallet.NetworkConfig;
|
|
16
|
-
setActiveNetwork: (networkId: NetworkId | string) => Promise<void>;
|
|
17
|
-
updateAlgodConfig: (networkId: string, config: Partial<AlgodConfig>) => void;
|
|
18
|
-
resetNetworkConfig: (networkId: string) => void;
|
|
19
|
-
};
|
|
20
|
-
interface Wallet {
|
|
21
|
-
id: WalletId;
|
|
22
|
-
/** Unique key for this wallet instance. Used for skinned WalletConnect instances. */
|
|
23
|
-
walletKey: WalletKey;
|
|
24
|
-
metadata: WalletMetadata;
|
|
25
|
-
accounts: WalletAccount[];
|
|
26
|
-
activeAccount: WalletAccount | null;
|
|
27
|
-
isConnected: boolean;
|
|
28
|
-
isActive: boolean;
|
|
29
|
-
canSignData: boolean;
|
|
30
|
-
canUsePrivateKey: boolean;
|
|
31
|
-
connect: (args?: Record<string, any>) => Promise<WalletAccount[]>;
|
|
32
|
-
disconnect: () => Promise<void>;
|
|
33
|
-
setActive: () => void;
|
|
34
|
-
setActiveAccount: (address: string) => void;
|
|
35
|
-
}
|
|
36
|
-
declare const useWallet: () => {
|
|
37
|
-
wallets: Wallet[];
|
|
38
|
-
isReady: boolean;
|
|
39
|
-
algodClient: algosdk.Algodv2;
|
|
40
|
-
setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>;
|
|
41
|
-
activeWallet: Wallet | null;
|
|
42
|
-
activeWalletAccounts: WalletAccount[] | null;
|
|
43
|
-
activeWalletAddresses: string[] | null;
|
|
44
|
-
activeAccount: WalletAccount | null;
|
|
45
|
-
activeAddress: string | null;
|
|
46
|
-
signData: (data: string, metadata: SignMetadata) => Promise<SignDataResponse>;
|
|
47
|
-
withPrivateKey: <T>(callback: (secretKey: Uint8Array) => Promise<T>) => Promise<T>;
|
|
48
|
-
signTransactions: <T extends algosdk.Transaction[] | Uint8Array[]>(txnGroup: T | T[], indexesToSign?: number[]) => Promise<(Uint8Array | null)[]>;
|
|
49
|
-
transactionSigner: (txnGroup: algosdk.Transaction[], indexesToSign: number[]) => Promise<Uint8Array[]>;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
export { type Wallet, WalletProvider, useNetwork, useWallet };
|