@txnlab/use-wallet-react 3.11.0 → 3.12.0

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
@@ -29,16 +29,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
29
29
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
30
 
31
31
  // src/index.tsx
32
- var src_exports = {};
33
- __export(src_exports, {
32
+ var index_exports = {};
33
+ __export(index_exports, {
34
34
  WalletProvider: () => WalletProvider,
35
35
  useWallet: () => useWallet
36
36
  });
37
- module.exports = __toCommonJS(src_exports);
37
+ module.exports = __toCommonJS(index_exports);
38
38
  var import_react_store = require("@tanstack/react-store");
39
39
  var import_algosdk = __toESM(require("algosdk"), 1);
40
40
  var React = __toESM(require("react"), 1);
41
- __reExport(src_exports, require("@txnlab/use-wallet"), module.exports);
41
+ __reExport(index_exports, require("@txnlab/use-wallet"), module.exports);
42
42
  var WalletContext = React.createContext(void 0);
43
43
  var useWallet = () => {
44
44
  const context = React.useContext(WalletContext);
@@ -46,6 +46,8 @@ var useWallet = () => {
46
46
  throw new Error("useWallet must be used within the WalletProvider");
47
47
  }
48
48
  const { manager, algodClient, setAlgodClient } = context;
49
+ const managerStatus = (0, import_react_store.useStore)(manager.store, (state) => state.managerStatus);
50
+ const isReady = managerStatus === "ready";
49
51
  const activeNetwork = (0, import_react_store.useStore)(manager.store, (state) => state.activeNetwork);
50
52
  const setActiveNetwork = async (networkId) => {
51
53
  if (networkId === activeNetwork) {
@@ -100,6 +102,7 @@ var useWallet = () => {
100
102
  };
101
103
  return {
102
104
  wallets,
105
+ isReady,
103
106
  algodClient,
104
107
  activeNetwork,
105
108
  activeWallet,
@@ -120,15 +123,8 @@ var WalletProvider = ({ manager, children }) => {
120
123
  }, [algodClient, manager]);
121
124
  const resumedRef = React.useRef(false);
122
125
  React.useEffect(() => {
123
- const resumeSessions = async () => {
124
- try {
125
- await manager.resumeSessions();
126
- } catch (error) {
127
- console.error("Error resuming sessions:", error);
128
- }
129
- };
130
126
  if (!resumedRef.current) {
131
- resumeSessions();
127
+ manager.resumeSessions();
132
128
  resumedRef.current = true;
133
129
  }
134
130
  }, [manager]);
@@ -1 +1 @@
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\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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAyB;AAEzB,qBAAoB;AACpB,YAAuB;AAEvB,wBAAc,+BALd;AAaA,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,oBAAgB,6BAAS,QAAQ,OAAO,CAAC,UAAU,MAAM,aAAa;AAE5E,QAAM,mBAAmB,OAAO,cAAwC;AACtE,QAAI,cAAc,eAAe;AAC/B;AAAA,IACF;AAEA,YAAQ,KAAK,uCAAuC,SAAS,KAAK;AAElE,UAAM,EAAE,QAAQ,IAAI,YAAY,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI,QAAQ,cAAc,SAAS;AAC3F,UAAM,YAAY,IAAI,eAAAA,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,qBAAiB,6BAAS,QAAQ,OAAO,CAAC,UAAU,MAAM,OAAO;AACvE,QAAM,qBAAiB,6BAAS,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":["algosdk"]}
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 managerStatus = useStore(manager.store, (state) => state.managerStatus)\n const isReady = managerStatus === 'ready'\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\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 isReady,\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 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"],"mappings":"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","names":["algosdk"]}
package/dist/index.d.cts CHANGED
@@ -18,6 +18,7 @@ interface Wallet {
18
18
  }
19
19
  declare const useWallet: () => {
20
20
  wallets: Wallet[];
21
+ isReady: boolean;
21
22
  algodClient: algosdk.Algodv2;
22
23
  activeNetwork: NetworkId;
23
24
  activeWallet: _txnlab_use_wallet.BaseWallet | null;
package/dist/index.d.ts CHANGED
@@ -18,6 +18,7 @@ interface Wallet {
18
18
  }
19
19
  declare const useWallet: () => {
20
20
  wallets: Wallet[];
21
+ isReady: boolean;
21
22
  algodClient: algosdk.Algodv2;
22
23
  activeNetwork: NetworkId;
23
24
  activeWallet: _txnlab_use_wallet.BaseWallet | null;
package/dist/index.js CHANGED
@@ -10,6 +10,8 @@ var useWallet = () => {
10
10
  throw new Error("useWallet must be used within the WalletProvider");
11
11
  }
12
12
  const { manager, algodClient, setAlgodClient } = context;
13
+ const managerStatus = useStore(manager.store, (state) => state.managerStatus);
14
+ const isReady = managerStatus === "ready";
13
15
  const activeNetwork = useStore(manager.store, (state) => state.activeNetwork);
14
16
  const setActiveNetwork = async (networkId) => {
15
17
  if (networkId === activeNetwork) {
@@ -64,6 +66,7 @@ var useWallet = () => {
64
66
  };
65
67
  return {
66
68
  wallets,
69
+ isReady,
67
70
  algodClient,
68
71
  activeNetwork,
69
72
  activeWallet,
@@ -84,15 +87,8 @@ var WalletProvider = ({ manager, children }) => {
84
87
  }, [algodClient, manager]);
85
88
  const resumedRef = React.useRef(false);
86
89
  React.useEffect(() => {
87
- const resumeSessions = async () => {
88
- try {
89
- await manager.resumeSessions();
90
- } catch (error) {
91
- console.error("Error resuming sessions:", error);
92
- }
93
- };
94
90
  if (!resumedRef.current) {
95
- resumeSessions();
91
+ manager.resumeSessions();
96
92
  resumedRef.current = true;
97
93
  }
98
94
  }, [manager]);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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\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":[]}
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 managerStatus = useStore(manager.store, (state) => state.managerStatus)\n const isReady = managerStatus === 'ready'\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\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 isReady,\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 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"],"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.11.0",
3
+ "version": "3.12.0",
4
4
  "description": "React library for integrating Algorand wallets into decentralized applications",
5
5
  "author": "Doug Richar <drichar@gmail.com>",
6
6
  "license": "MIT",
@@ -30,28 +30,28 @@
30
30
  "dist"
31
31
  ],
32
32
  "dependencies": {
33
- "@tanstack/react-store": "0.6.1",
34
- "@txnlab/use-wallet": "3.11.0"
33
+ "@tanstack/react-store": "0.7.0",
34
+ "@txnlab/use-wallet": "3.12.0"
35
35
  },
36
36
  "devDependencies": {
37
- "@types/react": "18.3.12",
37
+ "@types/react": "18.3.18",
38
38
  "algosdk": "2.9.0",
39
39
  "jsdom": "25.0.1",
40
40
  "react": "18.3.1",
41
41
  "react-dom": "18.3.1",
42
42
  "tsup": "8.3.5",
43
- "typescript": "5.6.3"
43
+ "typescript": "5.7.2"
44
44
  },
45
45
  "peerDependencies": {
46
46
  "@blockshake/defly-connect": "^1.1.6",
47
- "@magic-ext/algorand": "^23.18.0",
47
+ "@magic-ext/algorand": "^23.20.0",
48
48
  "@perawallet/connect-beta": "^2.0.21",
49
49
  "@walletconnect/modal": "^2.7.0",
50
50
  "@perawallet/connect": "^1.3.5",
51
- "@walletconnect/sign-client": "^2.17.2",
51
+ "@walletconnect/sign-client": "^2.17.3",
52
52
  "algosdk": "^2.7.0",
53
53
  "lute-connect": "^1.4.1",
54
- "magic-sdk": "^28.19.0",
54
+ "magic-sdk": "^28.21.0",
55
55
  "react": "^17.0.0 || ^18.0.0",
56
56
  "react-dom": "^17.0.0 || ^18.0.0"
57
57
  },