@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 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.ts
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 React2 = __toESM(require("react"), 1);
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 useWalletManager = () => {
48
- const manager = React.useContext(WalletContext);
49
- if (!manager) {
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
- return manager;
53
- };
54
- var WalletProvider = ({ manager, children }) => {
55
- const resumedRef = React.useRef(false);
56
- React.useEffect(() => {
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
- }, [manager, resumedRef.current]);
69
- return /* @__PURE__ */ React.createElement(WalletContext.Provider, { value: manager }, children);
70
- };
71
-
72
- // src/useWallet.ts
73
- function useWallet() {
74
- const manager = useWalletManager();
75
- const algodClient = manager.algodClient;
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 = React2.useMemo(() => {
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 activeNetwork = (0, import_react_store.useStore)(manager.store, (state) => state.activeNetwork);
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, returnGroup);
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,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/useWallet.ts","../src/WalletProvider.tsx"],"sourcesContent":["export * from '@txnlab/use-wallet'\nexport { useWallet, Wallet } from './useWallet'\nexport { WalletProvider } from './WalletProvider'\n","'use client'\n\nimport { useStore } from '@tanstack/react-store'\nimport * as React from 'react'\nimport { useWalletManager } from './WalletProvider'\nimport type { WalletAccount, WalletMetadata } from '@txnlab/use-wallet'\nimport type algosdk from 'algosdk'\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: () => Promise<WalletAccount[]>\n disconnect: () => Promise<void>\n setActive: () => void\n setActiveAccount: (address: string) => void\n}\n\nexport function useWallet() {\n const manager = useWalletManager()\n\n const algodClient: algosdk.Algodv2 = manager.algodClient\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: () => wallet.connect(),\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 activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n const setActiveNetwork = manager.setActiveNetwork\n\n const signTransactions = (\n txnGroup: algosdk.Transaction[] | algosdk.Transaction[][] | Uint8Array[] | Uint8Array[][],\n indexesToSign?: number[],\n returnGroup?: boolean\n ) => {\n if (!activeWallet) {\n throw new Error('No active wallet')\n }\n return activeWallet.signTransactions(txnGroup, indexesToSign, returnGroup)\n }\n\n const transactionSigner = (txnGroup: algosdk.Transaction[], indexesToSign: number[]) => {\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 signTransactions,\n transactionSigner\n }\n}\n","'use client'\n\nimport { WalletManager } from '@txnlab/use-wallet'\nimport * as React from 'react'\n\nconst WalletContext = React.createContext<WalletManager | undefined>(undefined)\n\nexport const useWalletManager = () => {\n const manager = React.useContext(WalletContext)\n\n if (!manager) {\n throw new Error('useWallet must be used within the WalletProvider')\n }\n\n return manager\n}\n\ninterface WalletProviderProps {\n manager: WalletManager\n children: React.ReactNode\n}\n\nexport const WalletProvider = ({ manager, children }: WalletProviderProps): JSX.Element => {\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, resumedRef.current])\n\n return <WalletContext.Provider value={manager}>{children}</WalletContext.Provider>\n}\n"],"mappings":"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","names":["React"]}
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 function useWallet(): {
19
+ declare const useWallet: () => {
20
20
  wallets: Wallet[];
21
21
  algodClient: algosdk.Algodv2;
22
- activeNetwork: _txnlab_use_wallet.NetworkId;
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: _txnlab_use_wallet.NetworkId) => void;
29
- signTransactions: (txnGroup: algosdk.Transaction[] | algosdk.Transaction[][] | Uint8Array[] | Uint8Array[][], indexesToSign?: number[], returnGroup?: boolean) => Promise<Uint8Array[]>;
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 function useWallet(): {
19
+ declare const useWallet: () => {
20
20
  wallets: Wallet[];
21
21
  algodClient: algosdk.Algodv2;
22
- activeNetwork: _txnlab_use_wallet.NetworkId;
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: _txnlab_use_wallet.NetworkId) => void;
29
- signTransactions: (txnGroup: algosdk.Transaction[] | algosdk.Transaction[][] | Uint8Array[] | Uint8Array[][], indexesToSign?: number[], returnGroup?: boolean) => Promise<Uint8Array[]>;
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.ts
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 * as React2 from "react";
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 useWalletManager = () => {
12
- const manager = React.useContext(WalletContext);
13
- if (!manager) {
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
- return manager;
17
- };
18
- var WalletProvider = ({ manager, children }) => {
19
- const resumedRef = React.useRef(false);
20
- React.useEffect(() => {
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
- }, [manager, resumedRef.current]);
33
- return /* @__PURE__ */ React.createElement(WalletContext.Provider, { value: manager }, children);
34
- };
35
-
36
- // src/useWallet.ts
37
- function useWallet() {
38
- const manager = useWalletManager();
39
- const algodClient = manager.algodClient;
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 = React2.useMemo(() => {
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 activeNetwork = useStore(manager.store, (state) => state.activeNetwork);
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, returnGroup);
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.ts","../src/useWallet.ts","../src/WalletProvider.tsx"],"sourcesContent":["export * from '@txnlab/use-wallet'\nexport { useWallet, Wallet } from './useWallet'\nexport { WalletProvider } from './WalletProvider'\n","'use client'\n\nimport { useStore } from '@tanstack/react-store'\nimport * as React from 'react'\nimport { useWalletManager } from './WalletProvider'\nimport type { WalletAccount, WalletMetadata } from '@txnlab/use-wallet'\nimport type algosdk from 'algosdk'\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: () => Promise<WalletAccount[]>\n disconnect: () => Promise<void>\n setActive: () => void\n setActiveAccount: (address: string) => void\n}\n\nexport function useWallet() {\n const manager = useWalletManager()\n\n const algodClient: algosdk.Algodv2 = manager.algodClient\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: () => wallet.connect(),\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 activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n const setActiveNetwork = manager.setActiveNetwork\n\n const signTransactions = (\n txnGroup: algosdk.Transaction[] | algosdk.Transaction[][] | Uint8Array[] | Uint8Array[][],\n indexesToSign?: number[],\n returnGroup?: boolean\n ) => {\n if (!activeWallet) {\n throw new Error('No active wallet')\n }\n return activeWallet.signTransactions(txnGroup, indexesToSign, returnGroup)\n }\n\n const transactionSigner = (txnGroup: algosdk.Transaction[], indexesToSign: number[]) => {\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 signTransactions,\n transactionSigner\n }\n}\n","'use client'\n\nimport { WalletManager } from '@txnlab/use-wallet'\nimport * as React from 'react'\n\nconst WalletContext = React.createContext<WalletManager | undefined>(undefined)\n\nexport const useWalletManager = () => {\n const manager = React.useContext(WalletContext)\n\n if (!manager) {\n throw new Error('useWallet must be used within the WalletProvider')\n }\n\n return manager\n}\n\ninterface WalletProviderProps {\n manager: WalletManager\n children: React.ReactNode\n}\n\nexport const WalletProvider = ({ manager, children }: WalletProviderProps): JSX.Element => {\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, resumedRef.current])\n\n return <WalletContext.Provider value={manager}>{children}</WalletContext.Provider>\n}\n"],"mappings":";AAAA,cAAc;;;ACEd,SAAS,gBAAgB;AACzB,YAAYA,YAAW;;;ACAvB,YAAY,WAAW;AAEvB,IAAM,gBAAsB,oBAAyC,MAAS;AAEvE,IAAM,mBAAmB,MAAM;AACpC,QAAM,UAAgB,iBAAW,aAAa;AAE9C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAEA,SAAO;AACT;AAOO,IAAM,iBAAiB,CAAC,EAAE,SAAS,SAAS,MAAwC;AACzF,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,SAAS,WAAW,OAAO,CAAC;AAEhC,SAAO,oCAAC,cAAc,UAAd,EAAuB,OAAO,WAAU,QAAS;AAC3D;;;ADpBO,SAAS,YAAY;AAC1B,QAAM,UAAU,iBAAiB;AAEjC,QAAM,cAA+B,QAAQ;AAE7C,QAAM,iBAAiB,SAAS,QAAQ,OAAO,CAAC,UAAU,MAAM,OAAO;AACvE,QAAM,iBAAiB,SAAS,QAAQ,OAAO,CAAC,UAAU,MAAM,YAAY;AAE5E,QAAM,UAAgB,eAAQ,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,MAAM,OAAO,QAAQ;AAAA,QAC9B,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,gBAAgB,SAAS,QAAQ,OAAO,CAAC,UAAU,MAAM,aAAa;AAC5E,QAAM,mBAAmB,QAAQ;AAEjC,QAAM,mBAAmB,CACvB,UACA,eACA,gBACG;AACH,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,WAAO,aAAa,iBAAiB,UAAU,eAAe,WAAW;AAAA,EAC3E;AAEA,QAAM,oBAAoB,CAAC,UAAiC,kBAA4B;AACtF,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,EACF;AACF;","names":["React"]}
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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@txnlab/use-wallet-react",
3
- "version": "3.0.0-beta.9",
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-beta.9"
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
- "@perawallet/connect-beta": "2.0.11",
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": {