@txnlab/use-wallet-react 3.0.0-beta.9 → 3.0.0-rc.2
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.cjs +49 -40
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -7
- package/dist/index.d.ts +7 -7
- package/dist/index.js +49 -40
- package/dist/index.js.map +1 -1
- package/package.json +15 -3
package/dist/index.cjs
CHANGED
|
@@ -28,54 +28,43 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
));
|
|
29
29
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
30
|
|
|
31
|
-
// src/index.
|
|
31
|
+
// src/index.tsx
|
|
32
32
|
var src_exports = {};
|
|
33
33
|
__export(src_exports, {
|
|
34
34
|
WalletProvider: () => WalletProvider,
|
|
35
35
|
useWallet: () => useWallet
|
|
36
36
|
});
|
|
37
37
|
module.exports = __toCommonJS(src_exports);
|
|
38
|
-
__reExport(src_exports, require("@txnlab/use-wallet"), module.exports);
|
|
39
|
-
|
|
40
|
-
// src/useWallet.ts
|
|
41
38
|
var import_react_store = require("@tanstack/react-store");
|
|
42
|
-
var
|
|
43
|
-
|
|
44
|
-
// src/WalletProvider.tsx
|
|
39
|
+
var import_algosdk = __toESM(require("algosdk"), 1);
|
|
45
40
|
var React = __toESM(require("react"), 1);
|
|
41
|
+
__reExport(src_exports, require("@txnlab/use-wallet"), module.exports);
|
|
46
42
|
var WalletContext = React.createContext(void 0);
|
|
47
|
-
var
|
|
48
|
-
const
|
|
49
|
-
if (!
|
|
43
|
+
var useWallet = () => {
|
|
44
|
+
const context = React.useContext(WalletContext);
|
|
45
|
+
if (!context) {
|
|
50
46
|
throw new Error("useWallet must be used within the WalletProvider");
|
|
51
47
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const resumeSessions = async () => {
|
|
58
|
-
try {
|
|
59
|
-
await manager.resumeSessions();
|
|
60
|
-
} catch (error) {
|
|
61
|
-
console.error("Error resuming sessions:", error);
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
if (!resumedRef.current) {
|
|
65
|
-
resumeSessions();
|
|
66
|
-
resumedRef.current = true;
|
|
48
|
+
const { manager, algodClient, setAlgodClient } = context;
|
|
49
|
+
const activeNetwork = (0, import_react_store.useStore)(manager.store, (state) => state.activeNetwork);
|
|
50
|
+
const setActiveNetwork = async (networkId) => {
|
|
51
|
+
if (networkId === activeNetwork) {
|
|
52
|
+
return;
|
|
67
53
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
54
|
+
await manager.disconnect();
|
|
55
|
+
console.info(`[React] Creating Algodv2 client for ${networkId}...`);
|
|
56
|
+
const { token = "", baseServer, port = "", headers = {} } = manager.networkConfig[networkId];
|
|
57
|
+
const newClient = new import_algosdk.default.Algodv2(token, baseServer, port, headers);
|
|
58
|
+
setAlgodClient(newClient);
|
|
59
|
+
manager.store.setState((state) => ({
|
|
60
|
+
...state,
|
|
61
|
+
activeNetwork: networkId
|
|
62
|
+
}));
|
|
63
|
+
console.info(`[React] \u2705 Active network set to ${networkId}.`);
|
|
64
|
+
};
|
|
76
65
|
const walletStateMap = (0, import_react_store.useStore)(manager.store, (state) => state.wallets);
|
|
77
66
|
const activeWalletId = (0, import_react_store.useStore)(manager.store, (state) => state.activeWallet);
|
|
78
|
-
const wallets =
|
|
67
|
+
const wallets = React.useMemo(() => {
|
|
79
68
|
return [...manager.wallets.values()].map((wallet) => {
|
|
80
69
|
const walletState = walletStateMap[wallet.id];
|
|
81
70
|
return {
|
|
@@ -85,7 +74,7 @@ function useWallet() {
|
|
|
85
74
|
activeAccount: walletState?.activeAccount ?? null,
|
|
86
75
|
isConnected: !!walletState,
|
|
87
76
|
isActive: wallet.id === activeWalletId,
|
|
88
|
-
connect: () => wallet.connect(),
|
|
77
|
+
connect: (args) => wallet.connect(args),
|
|
89
78
|
disconnect: () => wallet.disconnect(),
|
|
90
79
|
setActive: () => wallet.setActive(),
|
|
91
80
|
setActiveAccount: (addr) => wallet.setActiveAccount(addr)
|
|
@@ -98,13 +87,11 @@ function useWallet() {
|
|
|
98
87
|
const activeWalletAddresses = activeWalletAccounts?.map((account) => account.address) ?? null;
|
|
99
88
|
const activeAccount = activeWalletState?.activeAccount ?? null;
|
|
100
89
|
const activeAddress = activeAccount?.address ?? null;
|
|
101
|
-
const
|
|
102
|
-
const setActiveNetwork = manager.setActiveNetwork;
|
|
103
|
-
const signTransactions = (txnGroup, indexesToSign, returnGroup) => {
|
|
90
|
+
const signTransactions = (txnGroup, indexesToSign) => {
|
|
104
91
|
if (!activeWallet) {
|
|
105
92
|
throw new Error("No active wallet");
|
|
106
93
|
}
|
|
107
|
-
return activeWallet.signTransactions(txnGroup, indexesToSign
|
|
94
|
+
return activeWallet.signTransactions(txnGroup, indexesToSign);
|
|
108
95
|
};
|
|
109
96
|
const transactionSigner = (txnGroup, indexesToSign) => {
|
|
110
97
|
if (!activeWallet) {
|
|
@@ -122,10 +109,32 @@ function useWallet() {
|
|
|
122
109
|
activeAccount,
|
|
123
110
|
activeAddress,
|
|
124
111
|
setActiveNetwork,
|
|
112
|
+
setAlgodClient,
|
|
125
113
|
signTransactions,
|
|
126
114
|
transactionSigner
|
|
127
115
|
};
|
|
128
|
-
}
|
|
116
|
+
};
|
|
117
|
+
var WalletProvider = ({ manager, children }) => {
|
|
118
|
+
const [algodClient, setAlgodClient] = React.useState(manager.algodClient);
|
|
119
|
+
React.useEffect(() => {
|
|
120
|
+
manager.algodClient = algodClient;
|
|
121
|
+
}, [algodClient, manager]);
|
|
122
|
+
const resumedRef = React.useRef(false);
|
|
123
|
+
React.useEffect(() => {
|
|
124
|
+
const resumeSessions = async () => {
|
|
125
|
+
try {
|
|
126
|
+
await manager.resumeSessions();
|
|
127
|
+
} catch (error) {
|
|
128
|
+
console.error("Error resuming sessions:", error);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
if (!resumedRef.current) {
|
|
132
|
+
resumeSessions();
|
|
133
|
+
resumedRef.current = true;
|
|
134
|
+
}
|
|
135
|
+
}, [manager]);
|
|
136
|
+
return /* @__PURE__ */ React.createElement(WalletContext.Provider, { value: { manager, algodClient, setAlgodClient } }, children);
|
|
137
|
+
};
|
|
129
138
|
// Annotate the CommonJS export names for ESM import in node:
|
|
130
139
|
0 && (module.exports = {
|
|
131
140
|
WalletProvider,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport { NetworkId, WalletAccount, WalletManager, WalletMetadata } 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\nexport interface Wallet {\n id: string\n metadata: WalletMetadata\n accounts: WalletAccount[]\n activeAccount: WalletAccount | null\n isConnected: boolean\n isActive: 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 activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n\n const setActiveNetwork = async (networkId: NetworkId): Promise<void> => {\n if (networkId === activeNetwork) {\n return\n }\n // Disconnect any connected wallets\n await manager.disconnect()\n\n console.info(`[React] Creating Algodv2 client for ${networkId}...`)\n\n const { token = '', baseServer, port = '', headers = {} } = manager.networkConfig[networkId]\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 walletStateMap = useStore(manager.store, (state) => state.wallets)\n const activeWalletId = useStore(manager.store, (state) => state.activeWallet)\n\n const wallets = React.useMemo(() => {\n return [...manager.wallets.values()].map((wallet): Wallet => {\n const walletState = walletStateMap[wallet.id]\n\n return {\n id: wallet.id,\n metadata: wallet.metadata,\n accounts: walletState?.accounts ?? [],\n activeAccount: walletState?.activeAccount ?? null,\n isConnected: !!walletState,\n isActive: wallet.id === activeWalletId,\n connect: (args) => wallet.connect(args),\n disconnect: () => wallet.disconnect(),\n setActive: () => wallet.setActive(),\n setActiveAccount: (addr) => wallet.setActiveAccount(addr)\n }\n })\n }, [manager, walletStateMap, activeWalletId])\n\n const activeWallet = activeWalletId ? manager.getWallet(activeWalletId) || null : null\n const activeWalletState = activeWalletId ? walletStateMap[activeWalletId] || null : null\n\n const activeWalletAccounts = activeWalletState?.accounts ?? null\n const activeWalletAddresses = activeWalletAccounts?.map((account) => account.address) ?? null\n const activeAccount = activeWalletState?.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 (!activeWallet) {\n throw new Error('No active wallet')\n }\n return activeWallet.signTransactions(txnGroup, indexesToSign)\n }\n\n const transactionSigner = (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n if (!activeWallet) {\n throw new Error('No active wallet')\n }\n return activeWallet.transactionSigner(txnGroup, indexesToSign)\n }\n\n return {\n wallets,\n algodClient,\n activeNetwork,\n activeWallet,\n activeWalletAccounts,\n activeWalletAddresses,\n activeAccount,\n activeAddress,\n setActiveNetwork,\n setAlgodClient,\n signTransactions,\n transactionSigner\n }\n}\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 const resumeSessions = async () => {\n try {\n await manager.resumeSessions()\n } catch (error) {\n console.error('Error resuming sessions:', error)\n }\n }\n\n if (!resumedRef.current) {\n 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"],"mappings":"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","names":["algosdk"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _txnlab_use_wallet from '@txnlab/use-wallet';
|
|
2
|
-
import { WalletMetadata, WalletAccount, WalletManager } from '@txnlab/use-wallet';
|
|
2
|
+
import { WalletMetadata, WalletAccount, NetworkId, WalletManager } from '@txnlab/use-wallet';
|
|
3
3
|
export * from '@txnlab/use-wallet';
|
|
4
4
|
import algosdk from 'algosdk';
|
|
5
5
|
import * as React from 'react';
|
|
@@ -11,25 +11,25 @@ interface Wallet {
|
|
|
11
11
|
activeAccount: WalletAccount | null;
|
|
12
12
|
isConnected: boolean;
|
|
13
13
|
isActive: boolean;
|
|
14
|
-
connect: () => Promise<WalletAccount[]>;
|
|
14
|
+
connect: (args?: Record<string, any>) => Promise<WalletAccount[]>;
|
|
15
15
|
disconnect: () => Promise<void>;
|
|
16
16
|
setActive: () => void;
|
|
17
17
|
setActiveAccount: (address: string) => void;
|
|
18
18
|
}
|
|
19
|
-
declare
|
|
19
|
+
declare const useWallet: () => {
|
|
20
20
|
wallets: Wallet[];
|
|
21
21
|
algodClient: algosdk.Algodv2;
|
|
22
|
-
activeNetwork:
|
|
22
|
+
activeNetwork: NetworkId;
|
|
23
23
|
activeWallet: _txnlab_use_wallet.BaseWallet | null;
|
|
24
24
|
activeWalletAccounts: WalletAccount[] | null;
|
|
25
25
|
activeWalletAddresses: string[] | null;
|
|
26
26
|
activeAccount: WalletAccount | null;
|
|
27
27
|
activeAddress: string | null;
|
|
28
|
-
setActiveNetwork: (networkId:
|
|
29
|
-
|
|
28
|
+
setActiveNetwork: (networkId: NetworkId) => Promise<void>;
|
|
29
|
+
setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>;
|
|
30
|
+
signTransactions: <T extends algosdk.Transaction[] | Uint8Array[]>(txnGroup: T | T[], indexesToSign?: number[]) => Promise<(Uint8Array | null)[]>;
|
|
30
31
|
transactionSigner: (txnGroup: algosdk.Transaction[], indexesToSign: number[]) => Promise<Uint8Array[]>;
|
|
31
32
|
};
|
|
32
|
-
|
|
33
33
|
interface WalletProviderProps {
|
|
34
34
|
manager: WalletManager;
|
|
35
35
|
children: React.ReactNode;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _txnlab_use_wallet from '@txnlab/use-wallet';
|
|
2
|
-
import { WalletMetadata, WalletAccount, WalletManager } from '@txnlab/use-wallet';
|
|
2
|
+
import { WalletMetadata, WalletAccount, NetworkId, WalletManager } from '@txnlab/use-wallet';
|
|
3
3
|
export * from '@txnlab/use-wallet';
|
|
4
4
|
import algosdk from 'algosdk';
|
|
5
5
|
import * as React from 'react';
|
|
@@ -11,25 +11,25 @@ interface Wallet {
|
|
|
11
11
|
activeAccount: WalletAccount | null;
|
|
12
12
|
isConnected: boolean;
|
|
13
13
|
isActive: boolean;
|
|
14
|
-
connect: () => Promise<WalletAccount[]>;
|
|
14
|
+
connect: (args?: Record<string, any>) => Promise<WalletAccount[]>;
|
|
15
15
|
disconnect: () => Promise<void>;
|
|
16
16
|
setActive: () => void;
|
|
17
17
|
setActiveAccount: (address: string) => void;
|
|
18
18
|
}
|
|
19
|
-
declare
|
|
19
|
+
declare const useWallet: () => {
|
|
20
20
|
wallets: Wallet[];
|
|
21
21
|
algodClient: algosdk.Algodv2;
|
|
22
|
-
activeNetwork:
|
|
22
|
+
activeNetwork: NetworkId;
|
|
23
23
|
activeWallet: _txnlab_use_wallet.BaseWallet | null;
|
|
24
24
|
activeWalletAccounts: WalletAccount[] | null;
|
|
25
25
|
activeWalletAddresses: string[] | null;
|
|
26
26
|
activeAccount: WalletAccount | null;
|
|
27
27
|
activeAddress: string | null;
|
|
28
|
-
setActiveNetwork: (networkId:
|
|
29
|
-
|
|
28
|
+
setActiveNetwork: (networkId: NetworkId) => Promise<void>;
|
|
29
|
+
setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>;
|
|
30
|
+
signTransactions: <T extends algosdk.Transaction[] | Uint8Array[]>(txnGroup: T | T[], indexesToSign?: number[]) => Promise<(Uint8Array | null)[]>;
|
|
30
31
|
transactionSigner: (txnGroup: algosdk.Transaction[], indexesToSign: number[]) => Promise<Uint8Array[]>;
|
|
31
32
|
};
|
|
32
|
-
|
|
33
33
|
interface WalletProviderProps {
|
|
34
34
|
manager: WalletManager;
|
|
35
35
|
children: React.ReactNode;
|
package/dist/index.js
CHANGED
|
@@ -1,45 +1,34 @@
|
|
|
1
|
-
// src/index.
|
|
2
|
-
export * from "@txnlab/use-wallet";
|
|
3
|
-
|
|
4
|
-
// src/useWallet.ts
|
|
1
|
+
// src/index.tsx
|
|
5
2
|
import { useStore } from "@tanstack/react-store";
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
// src/WalletProvider.tsx
|
|
3
|
+
import algosdk from "algosdk";
|
|
9
4
|
import * as React from "react";
|
|
5
|
+
export * from "@txnlab/use-wallet";
|
|
10
6
|
var WalletContext = React.createContext(void 0);
|
|
11
|
-
var
|
|
12
|
-
const
|
|
13
|
-
if (!
|
|
7
|
+
var useWallet = () => {
|
|
8
|
+
const context = React.useContext(WalletContext);
|
|
9
|
+
if (!context) {
|
|
14
10
|
throw new Error("useWallet must be used within the WalletProvider");
|
|
15
11
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const resumeSessions = async () => {
|
|
22
|
-
try {
|
|
23
|
-
await manager.resumeSessions();
|
|
24
|
-
} catch (error) {
|
|
25
|
-
console.error("Error resuming sessions:", error);
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
if (!resumedRef.current) {
|
|
29
|
-
resumeSessions();
|
|
30
|
-
resumedRef.current = true;
|
|
12
|
+
const { manager, algodClient, setAlgodClient } = context;
|
|
13
|
+
const activeNetwork = useStore(manager.store, (state) => state.activeNetwork);
|
|
14
|
+
const setActiveNetwork = async (networkId) => {
|
|
15
|
+
if (networkId === activeNetwork) {
|
|
16
|
+
return;
|
|
31
17
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
18
|
+
await manager.disconnect();
|
|
19
|
+
console.info(`[React] Creating Algodv2 client for ${networkId}...`);
|
|
20
|
+
const { token = "", baseServer, port = "", headers = {} } = manager.networkConfig[networkId];
|
|
21
|
+
const newClient = new algosdk.Algodv2(token, baseServer, port, headers);
|
|
22
|
+
setAlgodClient(newClient);
|
|
23
|
+
manager.store.setState((state) => ({
|
|
24
|
+
...state,
|
|
25
|
+
activeNetwork: networkId
|
|
26
|
+
}));
|
|
27
|
+
console.info(`[React] \u2705 Active network set to ${networkId}.`);
|
|
28
|
+
};
|
|
40
29
|
const walletStateMap = useStore(manager.store, (state) => state.wallets);
|
|
41
30
|
const activeWalletId = useStore(manager.store, (state) => state.activeWallet);
|
|
42
|
-
const wallets =
|
|
31
|
+
const wallets = React.useMemo(() => {
|
|
43
32
|
return [...manager.wallets.values()].map((wallet) => {
|
|
44
33
|
const walletState = walletStateMap[wallet.id];
|
|
45
34
|
return {
|
|
@@ -49,7 +38,7 @@ function useWallet() {
|
|
|
49
38
|
activeAccount: walletState?.activeAccount ?? null,
|
|
50
39
|
isConnected: !!walletState,
|
|
51
40
|
isActive: wallet.id === activeWalletId,
|
|
52
|
-
connect: () => wallet.connect(),
|
|
41
|
+
connect: (args) => wallet.connect(args),
|
|
53
42
|
disconnect: () => wallet.disconnect(),
|
|
54
43
|
setActive: () => wallet.setActive(),
|
|
55
44
|
setActiveAccount: (addr) => wallet.setActiveAccount(addr)
|
|
@@ -62,13 +51,11 @@ function useWallet() {
|
|
|
62
51
|
const activeWalletAddresses = activeWalletAccounts?.map((account) => account.address) ?? null;
|
|
63
52
|
const activeAccount = activeWalletState?.activeAccount ?? null;
|
|
64
53
|
const activeAddress = activeAccount?.address ?? null;
|
|
65
|
-
const
|
|
66
|
-
const setActiveNetwork = manager.setActiveNetwork;
|
|
67
|
-
const signTransactions = (txnGroup, indexesToSign, returnGroup) => {
|
|
54
|
+
const signTransactions = (txnGroup, indexesToSign) => {
|
|
68
55
|
if (!activeWallet) {
|
|
69
56
|
throw new Error("No active wallet");
|
|
70
57
|
}
|
|
71
|
-
return activeWallet.signTransactions(txnGroup, indexesToSign
|
|
58
|
+
return activeWallet.signTransactions(txnGroup, indexesToSign);
|
|
72
59
|
};
|
|
73
60
|
const transactionSigner = (txnGroup, indexesToSign) => {
|
|
74
61
|
if (!activeWallet) {
|
|
@@ -86,10 +73,32 @@ function useWallet() {
|
|
|
86
73
|
activeAccount,
|
|
87
74
|
activeAddress,
|
|
88
75
|
setActiveNetwork,
|
|
76
|
+
setAlgodClient,
|
|
89
77
|
signTransactions,
|
|
90
78
|
transactionSigner
|
|
91
79
|
};
|
|
92
|
-
}
|
|
80
|
+
};
|
|
81
|
+
var WalletProvider = ({ manager, children }) => {
|
|
82
|
+
const [algodClient, setAlgodClient] = React.useState(manager.algodClient);
|
|
83
|
+
React.useEffect(() => {
|
|
84
|
+
manager.algodClient = algodClient;
|
|
85
|
+
}, [algodClient, manager]);
|
|
86
|
+
const resumedRef = React.useRef(false);
|
|
87
|
+
React.useEffect(() => {
|
|
88
|
+
const resumeSessions = async () => {
|
|
89
|
+
try {
|
|
90
|
+
await manager.resumeSessions();
|
|
91
|
+
} catch (error) {
|
|
92
|
+
console.error("Error resuming sessions:", error);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
if (!resumedRef.current) {
|
|
96
|
+
resumeSessions();
|
|
97
|
+
resumedRef.current = true;
|
|
98
|
+
}
|
|
99
|
+
}, [manager]);
|
|
100
|
+
return /* @__PURE__ */ React.createElement(WalletContext.Provider, { value: { manager, algodClient, setAlgodClient } }, children);
|
|
101
|
+
};
|
|
93
102
|
export {
|
|
94
103
|
WalletProvider,
|
|
95
104
|
useWallet
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport { NetworkId, WalletAccount, WalletManager, WalletMetadata } 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\nexport interface Wallet {\n id: string\n metadata: WalletMetadata\n accounts: WalletAccount[]\n activeAccount: WalletAccount | null\n isConnected: boolean\n isActive: 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 activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n\n const setActiveNetwork = async (networkId: NetworkId): Promise<void> => {\n if (networkId === activeNetwork) {\n return\n }\n // Disconnect any connected wallets\n await manager.disconnect()\n\n console.info(`[React] Creating Algodv2 client for ${networkId}...`)\n\n const { token = '', baseServer, port = '', headers = {} } = manager.networkConfig[networkId]\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 walletStateMap = useStore(manager.store, (state) => state.wallets)\n const activeWalletId = useStore(manager.store, (state) => state.activeWallet)\n\n const wallets = React.useMemo(() => {\n return [...manager.wallets.values()].map((wallet): Wallet => {\n const walletState = walletStateMap[wallet.id]\n\n return {\n id: wallet.id,\n metadata: wallet.metadata,\n accounts: walletState?.accounts ?? [],\n activeAccount: walletState?.activeAccount ?? null,\n isConnected: !!walletState,\n isActive: wallet.id === activeWalletId,\n connect: (args) => wallet.connect(args),\n disconnect: () => wallet.disconnect(),\n setActive: () => wallet.setActive(),\n setActiveAccount: (addr) => wallet.setActiveAccount(addr)\n }\n })\n }, [manager, walletStateMap, activeWalletId])\n\n const activeWallet = activeWalletId ? manager.getWallet(activeWalletId) || null : null\n const activeWalletState = activeWalletId ? walletStateMap[activeWalletId] || null : null\n\n const activeWalletAccounts = activeWalletState?.accounts ?? null\n const activeWalletAddresses = activeWalletAccounts?.map((account) => account.address) ?? null\n const activeAccount = activeWalletState?.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 (!activeWallet) {\n throw new Error('No active wallet')\n }\n return activeWallet.signTransactions(txnGroup, indexesToSign)\n }\n\n const transactionSigner = (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n if (!activeWallet) {\n throw new Error('No active wallet')\n }\n return activeWallet.transactionSigner(txnGroup, indexesToSign)\n }\n\n return {\n wallets,\n algodClient,\n activeNetwork,\n activeWallet,\n activeWalletAccounts,\n activeWalletAddresses,\n activeAccount,\n activeAddress,\n setActiveNetwork,\n setAlgodClient,\n signTransactions,\n transactionSigner\n }\n}\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 const resumeSessions = async () => {\n try {\n await manager.resumeSessions()\n } catch (error) {\n console.error('Error resuming sessions:', error)\n }\n }\n\n if (!resumedRef.current) {\n 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"],"mappings":";AAAA,SAAS,gBAAgB;AAEzB,OAAO,aAAa;AACpB,YAAY,WAAW;AAEvB,cAAc;AAQd,IAAM,gBAAsB,oBAA0C,MAAS;AAexE,IAAM,YAAY,MAAM;AAC7B,QAAM,UAAgB,iBAAW,aAAa;AAE9C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAEA,QAAM,EAAE,SAAS,aAAa,eAAe,IAAI;AAEjD,QAAM,gBAAgB,SAAS,QAAQ,OAAO,CAAC,UAAU,MAAM,aAAa;AAE5E,QAAM,mBAAmB,OAAO,cAAwC;AACtE,QAAI,cAAc,eAAe;AAC/B;AAAA,IACF;AAEA,UAAM,QAAQ,WAAW;AAEzB,YAAQ,KAAK,uCAAuC,SAAS,KAAK;AAElE,UAAM,EAAE,QAAQ,IAAI,YAAY,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI,QAAQ,cAAc,SAAS;AAC3F,UAAM,YAAY,IAAI,QAAQ,QAAQ,OAAO,YAAY,MAAM,OAAO;AACtE,mBAAe,SAAS;AAExB,YAAQ,MAAM,SAAS,CAAC,WAAW;AAAA,MACjC,GAAG;AAAA,MACH,eAAe;AAAA,IACjB,EAAE;AAEF,YAAQ,KAAK,wCAAmC,SAAS,GAAG;AAAA,EAC9D;AAEA,QAAM,iBAAiB,SAAS,QAAQ,OAAO,CAAC,UAAU,MAAM,OAAO;AACvE,QAAM,iBAAiB,SAAS,QAAQ,OAAO,CAAC,UAAU,MAAM,YAAY;AAE5E,QAAM,UAAgB,cAAQ,MAAM;AAClC,WAAO,CAAC,GAAG,QAAQ,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,WAAmB;AAC3D,YAAM,cAAc,eAAe,OAAO,EAAE;AAE5C,aAAO;AAAA,QACL,IAAI,OAAO;AAAA,QACX,UAAU,OAAO;AAAA,QACjB,UAAU,aAAa,YAAY,CAAC;AAAA,QACpC,eAAe,aAAa,iBAAiB;AAAA,QAC7C,aAAa,CAAC,CAAC;AAAA,QACf,UAAU,OAAO,OAAO;AAAA,QACxB,SAAS,CAAC,SAAS,OAAO,QAAQ,IAAI;AAAA,QACtC,YAAY,MAAM,OAAO,WAAW;AAAA,QACpC,WAAW,MAAM,OAAO,UAAU;AAAA,QAClC,kBAAkB,CAAC,SAAS,OAAO,iBAAiB,IAAI;AAAA,MAC1D;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,SAAS,gBAAgB,cAAc,CAAC;AAE5C,QAAM,eAAe,iBAAiB,QAAQ,UAAU,cAAc,KAAK,OAAO;AAClF,QAAM,oBAAoB,iBAAiB,eAAe,cAAc,KAAK,OAAO;AAEpF,QAAM,uBAAuB,mBAAmB,YAAY;AAC5D,QAAM,wBAAwB,sBAAsB,IAAI,CAAC,YAAY,QAAQ,OAAO,KAAK;AACzF,QAAM,gBAAgB,mBAAmB,iBAAiB;AAC1D,QAAM,gBAAgB,eAAe,WAAW;AAEhD,QAAM,mBAAmB,CACvB,UACA,kBACmC;AACnC,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,WAAO,aAAa,iBAAiB,UAAU,aAAa;AAAA,EAC9D;AAEA,QAAM,oBAAoB,CACxB,UACA,kBAC0B;AAC1B,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,WAAO,aAAa,kBAAkB,UAAU,aAAa;AAAA,EAC/D;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAOO,IAAM,iBAAiB,CAAC,EAAE,SAAS,SAAS,MAAwC;AACzF,QAAM,CAAC,aAAa,cAAc,IAAU,eAAS,QAAQ,WAAW;AAExE,EAAM,gBAAU,MAAM;AACpB,YAAQ,cAAc;AAAA,EACxB,GAAG,CAAC,aAAa,OAAO,CAAC;AAEzB,QAAM,aAAmB,aAAO,KAAK;AAErC,EAAM,gBAAU,MAAM;AACpB,UAAM,iBAAiB,YAAY;AACjC,UAAI;AACF,cAAM,QAAQ,eAAe;AAAA,MAC/B,SAAS,OAAO;AACd,gBAAQ,MAAM,4BAA4B,KAAK;AAAA,MACjD;AAAA,IACF;AAEA,QAAI,CAAC,WAAW,SAAS;AACvB,qBAAe;AACf,iBAAW,UAAU;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,SACE,oCAAC,cAAc,UAAd,EAAuB,OAAO,EAAE,SAAS,aAAa,eAAe,KACnE,QACH;AAEJ;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@txnlab/use-wallet-react",
|
|
3
|
-
"version": "3.0.0-
|
|
3
|
+
"version": "3.0.0-rc.2",
|
|
4
4
|
"description": "React library for integrating Algorand wallets into decentralized applications",
|
|
5
5
|
"author": "Doug Richar <drichar@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@tanstack/react-store": "0.4.1",
|
|
34
|
-
"@txnlab/use-wallet": "3.0.0-
|
|
34
|
+
"@txnlab/use-wallet": "3.0.0-rc.2"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/react": "^18.2.45",
|
|
@@ -44,11 +44,14 @@
|
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
46
|
"@blockshake/defly-connect": "^1.1.6",
|
|
47
|
-
"@
|
|
47
|
+
"@magic-ext/algorand": "^23.0.2",
|
|
48
|
+
"@perawallet/connect-beta": "^2.0.11",
|
|
48
49
|
"@walletconnect/modal": "^2.6.2",
|
|
50
|
+
"@perawallet/connect": "^1.3.4",
|
|
49
51
|
"@walletconnect/sign-client": "^2.10.2",
|
|
50
52
|
"algosdk": "^2.7.0",
|
|
51
53
|
"lute-connect": "^1.2.0",
|
|
54
|
+
"magic-sdk": "^28.0.3",
|
|
52
55
|
"react": "^17.0.0 || ^18.0.0",
|
|
53
56
|
"react-dom": "^17.0.0 || ^18.0.0"
|
|
54
57
|
},
|
|
@@ -56,6 +59,12 @@
|
|
|
56
59
|
"@blockshake/defly-connect": {
|
|
57
60
|
"optional": true
|
|
58
61
|
},
|
|
62
|
+
"@magic-ext/algorand": {
|
|
63
|
+
"optional": true
|
|
64
|
+
},
|
|
65
|
+
"@perawallet/connect": {
|
|
66
|
+
"optional": true
|
|
67
|
+
},
|
|
59
68
|
"@perawallet/connect-beta": {
|
|
60
69
|
"optional": true
|
|
61
70
|
},
|
|
@@ -67,6 +76,9 @@
|
|
|
67
76
|
},
|
|
68
77
|
"lute-connect": {
|
|
69
78
|
"optional": true
|
|
79
|
+
},
|
|
80
|
+
"magic-sdk": {
|
|
81
|
+
"optional": true
|
|
70
82
|
}
|
|
71
83
|
},
|
|
72
84
|
"scripts": {
|