@txnlab/use-wallet-react 4.0.0-beta.4 → 4.0.0-beta.5
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 +63 -32
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -10
- package/dist/index.d.ts +17 -10
- package/dist/index.js +58 -28
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
package/dist/index.cjs
CHANGED
|
@@ -29,23 +29,38 @@ 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
|
|
33
|
-
__export(
|
|
32
|
+
var index_exports = {};
|
|
33
|
+
__export(index_exports, {
|
|
34
34
|
WalletProvider: () => WalletProvider,
|
|
35
|
+
useNetwork: () => useNetwork,
|
|
35
36
|
useWallet: () => useWallet
|
|
36
37
|
});
|
|
37
|
-
module.exports = __toCommonJS(
|
|
38
|
+
module.exports = __toCommonJS(index_exports);
|
|
38
39
|
var import_react_store = require("@tanstack/react-store");
|
|
39
40
|
var import_algosdk = __toESM(require("algosdk"), 1);
|
|
40
41
|
var React = __toESM(require("react"), 1);
|
|
41
|
-
__reExport(
|
|
42
|
+
__reExport(index_exports, require("@txnlab/use-wallet"), module.exports);
|
|
42
43
|
var WalletContext = React.createContext(void 0);
|
|
43
|
-
var
|
|
44
|
+
var WalletProvider = ({ manager, children }) => {
|
|
45
|
+
const [algodClient, setAlgodClient] = React.useState(manager.algodClient);
|
|
46
|
+
React.useEffect(() => {
|
|
47
|
+
manager.algodClient = algodClient;
|
|
48
|
+
}, [algodClient, manager]);
|
|
49
|
+
const resumedRef = React.useRef(false);
|
|
50
|
+
React.useEffect(() => {
|
|
51
|
+
if (!resumedRef.current) {
|
|
52
|
+
manager.resumeSessions();
|
|
53
|
+
resumedRef.current = true;
|
|
54
|
+
}
|
|
55
|
+
}, [manager]);
|
|
56
|
+
return /* @__PURE__ */ React.createElement(WalletContext.Provider, { value: { manager, algodClient, setAlgodClient } }, children);
|
|
57
|
+
};
|
|
58
|
+
var useNetwork = () => {
|
|
44
59
|
const context = React.useContext(WalletContext);
|
|
45
60
|
if (!context) {
|
|
46
|
-
throw new Error("
|
|
61
|
+
throw new Error("useNetwork must be used within the WalletProvider");
|
|
47
62
|
}
|
|
48
|
-
const { manager,
|
|
63
|
+
const { manager, setAlgodClient } = context;
|
|
49
64
|
const activeNetwork = (0, import_react_store.useStore)(manager.store, (state) => state.activeNetwork);
|
|
50
65
|
const setActiveNetwork = async (networkId) => {
|
|
51
66
|
if (networkId === activeNetwork) {
|
|
@@ -54,7 +69,7 @@ var useWallet = () => {
|
|
|
54
69
|
if (!manager.networkConfig[networkId]) {
|
|
55
70
|
throw new Error(`Network "${networkId}" not found in network configuration`);
|
|
56
71
|
}
|
|
57
|
-
console.info(`[React] Creating Algodv2 client
|
|
72
|
+
console.info(`[React] Creating new Algodv2 client...`);
|
|
58
73
|
const { algod } = manager.networkConfig[networkId];
|
|
59
74
|
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
60
75
|
const newClient = new import_algosdk.default.Algodv2(token, baseServer, port, headers);
|
|
@@ -65,6 +80,43 @@ var useWallet = () => {
|
|
|
65
80
|
}));
|
|
66
81
|
console.info(`[React] \u2705 Active network set to ${networkId}.`);
|
|
67
82
|
};
|
|
83
|
+
const updateAlgodConfig = (networkId, config) => {
|
|
84
|
+
manager.updateAlgodConfig(networkId, config);
|
|
85
|
+
if (networkId === activeNetwork) {
|
|
86
|
+
console.info(`[React] Creating new Algodv2 client...`);
|
|
87
|
+
const { algod } = manager.networkConfig[networkId];
|
|
88
|
+
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
89
|
+
const newClient = new import_algosdk.default.Algodv2(token, baseServer, port, headers);
|
|
90
|
+
setAlgodClient(newClient);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const resetNetworkConfig = (networkId) => {
|
|
94
|
+
manager.resetNetworkConfig(networkId);
|
|
95
|
+
if (networkId === activeNetwork) {
|
|
96
|
+
console.info(`[React] Creating new Algodv2 client...`);
|
|
97
|
+
const { algod } = manager.networkConfig[networkId];
|
|
98
|
+
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
99
|
+
const newClient = new import_algosdk.default.Algodv2(token, baseServer, port, headers);
|
|
100
|
+
setAlgodClient(newClient);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
return {
|
|
104
|
+
activeNetwork,
|
|
105
|
+
networkConfig: manager.networkConfig,
|
|
106
|
+
activeNetworkConfig: manager.activeNetworkConfig,
|
|
107
|
+
setActiveNetwork,
|
|
108
|
+
updateAlgodConfig,
|
|
109
|
+
resetNetworkConfig
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
var useWallet = () => {
|
|
113
|
+
const context = React.useContext(WalletContext);
|
|
114
|
+
if (!context) {
|
|
115
|
+
throw new Error("useWallet must be used within the WalletProvider");
|
|
116
|
+
}
|
|
117
|
+
const { manager, algodClient, setAlgodClient } = context;
|
|
118
|
+
const managerStatus = (0, import_react_store.useStore)(manager.store, (state) => state.managerStatus);
|
|
119
|
+
const isReady = managerStatus === "ready";
|
|
68
120
|
const walletStateMap = (0, import_react_store.useStore)(manager.store, (state) => state.wallets);
|
|
69
121
|
const activeWalletId = (0, import_react_store.useStore)(manager.store, (state) => state.activeWallet);
|
|
70
122
|
const wallets = React.useMemo(() => {
|
|
@@ -104,43 +156,22 @@ var useWallet = () => {
|
|
|
104
156
|
};
|
|
105
157
|
return {
|
|
106
158
|
wallets,
|
|
159
|
+
isReady,
|
|
107
160
|
algodClient,
|
|
108
|
-
|
|
161
|
+
setAlgodClient,
|
|
109
162
|
activeWallet,
|
|
110
163
|
activeWalletAccounts,
|
|
111
164
|
activeWalletAddresses,
|
|
112
165
|
activeAccount,
|
|
113
166
|
activeAddress,
|
|
114
|
-
setActiveNetwork,
|
|
115
|
-
setAlgodClient,
|
|
116
167
|
signTransactions,
|
|
117
168
|
transactionSigner
|
|
118
169
|
};
|
|
119
170
|
};
|
|
120
|
-
var WalletProvider = ({ manager, children }) => {
|
|
121
|
-
const [algodClient, setAlgodClient] = React.useState(manager.algodClient);
|
|
122
|
-
React.useEffect(() => {
|
|
123
|
-
manager.algodClient = algodClient;
|
|
124
|
-
}, [algodClient, manager]);
|
|
125
|
-
const resumedRef = React.useRef(false);
|
|
126
|
-
React.useEffect(() => {
|
|
127
|
-
const resumeSessions = async () => {
|
|
128
|
-
try {
|
|
129
|
-
await manager.resumeSessions();
|
|
130
|
-
} catch (error) {
|
|
131
|
-
console.error("Error resuming sessions:", error);
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
if (!resumedRef.current) {
|
|
135
|
-
resumeSessions();
|
|
136
|
-
resumedRef.current = true;
|
|
137
|
-
}
|
|
138
|
-
}, [manager]);
|
|
139
|
-
return /* @__PURE__ */ React.createElement(WalletContext.Provider, { value: { manager, algodClient, setAlgodClient } }, children);
|
|
140
|
-
};
|
|
141
171
|
// Annotate the CommonJS export names for ESM import in node:
|
|
142
172
|
0 && (module.exports = {
|
|
143
173
|
WalletProvider,
|
|
174
|
+
useNetwork,
|
|
144
175
|
useWallet,
|
|
145
176
|
...require("@txnlab/use-wallet")
|
|
146
177
|
});
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport { 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: string): Promise<void> => {\n if (networkId === activeNetwork) {\n return\n }\n\n if (!manager.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n console.info(`[React] Creating Algodv2 client for ${networkId}...`)\n\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n\n manager.store.setState((state) => ({\n ...state,\n activeNetwork: networkId\n }))\n\n console.info(`[React] ✅ Active network set to ${networkId}.`)\n }\n\n const 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,cAAqC;AACnE,QAAI,cAAc,eAAe;AAC/B;AAAA,IACF;AAEA,QAAI,CAAC,QAAQ,cAAc,SAAS,GAAG;AACrC,YAAM,IAAI,MAAM,YAAY,SAAS,sCAAsC;AAAA,IAC7E;AAEA,YAAQ,KAAK,uCAAuC,SAAS,KAAK;AAElE,UAAM,EAAE,MAAM,IAAI,QAAQ,cAAc,SAAS;AACjD,UAAM,EAAE,QAAQ,IAAI,YAAY,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI;AAC5D,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 {\n NetworkId,\n WalletManager,\n type AlgodConfig,\n type WalletAccount,\n type WalletMetadata\n} from '@txnlab/use-wallet'\nimport algosdk from 'algosdk'\nimport * as React from 'react'\n\nexport * from '@txnlab/use-wallet'\n\ninterface IWalletContext {\n manager: WalletManager\n algodClient: algosdk.Algodv2\n setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>\n}\n\nconst WalletContext = React.createContext<IWalletContext | undefined>(undefined)\n\ninterface WalletProviderProps {\n manager: WalletManager\n children: React.ReactNode\n}\n\nexport const WalletProvider = ({ manager, children }: WalletProviderProps): JSX.Element => {\n const [algodClient, setAlgodClient] = React.useState(manager.algodClient)\n\n React.useEffect(() => {\n manager.algodClient = algodClient\n }, [algodClient, manager])\n\n const resumedRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!resumedRef.current) {\n manager.resumeSessions()\n resumedRef.current = true\n }\n }, [manager])\n\n return (\n <WalletContext.Provider value={{ manager, algodClient, setAlgodClient }}>\n {children}\n </WalletContext.Provider>\n )\n}\n\nexport const useNetwork = () => {\n const context = React.useContext(WalletContext)\n\n if (!context) {\n throw new Error('useNetwork must be used within the WalletProvider')\n }\n\n const { manager, setAlgodClient } = context\n\n const activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n\n const setActiveNetwork = async (networkId: NetworkId | string): Promise<void> => {\n if (networkId === activeNetwork) {\n return\n }\n\n if (!manager.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n console.info(`[React] Creating new Algodv2 client...`)\n\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n\n manager.store.setState((state) => ({\n ...state,\n activeNetwork: networkId\n }))\n\n console.info(`[React] ✅ Active network set to ${networkId}.`)\n }\n\n const updateAlgodConfig = (networkId: string, config: Partial<AlgodConfig>): void => {\n manager.updateAlgodConfig(networkId, config)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork) {\n console.info(`[React] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n }\n }\n\n const resetNetworkConfig = (networkId: string): void => {\n manager.resetNetworkConfig(networkId)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork) {\n console.info(`[React] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n }\n }\n\n return {\n activeNetwork,\n networkConfig: manager.networkConfig,\n activeNetworkConfig: manager.activeNetworkConfig,\n setActiveNetwork,\n updateAlgodConfig,\n resetNetworkConfig\n }\n}\n\nexport interface Wallet {\n id: 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 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 setAlgodClient,\n activeWallet,\n activeWalletAccounts,\n activeWalletAddresses,\n activeAccount,\n activeAddress,\n signTransactions,\n transactionSigner\n }\n}\n"],"mappings":"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","names":["algosdk"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
import * as _txnlab_use_wallet from '@txnlab/use-wallet';
|
|
2
|
-
import { WalletMetadata, WalletAccount, WalletManager } from '@txnlab/use-wallet';
|
|
2
|
+
import { NetworkId, AlgodConfig, WalletMetadata, WalletAccount, 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';
|
|
6
6
|
|
|
7
|
+
interface WalletProviderProps {
|
|
8
|
+
manager: WalletManager;
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
}
|
|
11
|
+
declare const WalletProvider: ({ manager, children }: WalletProviderProps) => JSX.Element;
|
|
12
|
+
declare const useNetwork: () => {
|
|
13
|
+
activeNetwork: string;
|
|
14
|
+
networkConfig: Record<string, _txnlab_use_wallet.NetworkConfig>;
|
|
15
|
+
activeNetworkConfig: _txnlab_use_wallet.NetworkConfig;
|
|
16
|
+
setActiveNetwork: (networkId: NetworkId | string) => Promise<void>;
|
|
17
|
+
updateAlgodConfig: (networkId: string, config: Partial<AlgodConfig>) => void;
|
|
18
|
+
resetNetworkConfig: (networkId: string) => void;
|
|
19
|
+
};
|
|
7
20
|
interface Wallet {
|
|
8
21
|
id: string;
|
|
9
22
|
metadata: WalletMetadata;
|
|
@@ -18,22 +31,16 @@ interface Wallet {
|
|
|
18
31
|
}
|
|
19
32
|
declare const useWallet: () => {
|
|
20
33
|
wallets: Wallet[];
|
|
34
|
+
isReady: boolean;
|
|
21
35
|
algodClient: algosdk.Algodv2;
|
|
22
|
-
|
|
36
|
+
setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>;
|
|
23
37
|
activeWallet: _txnlab_use_wallet.BaseWallet | null;
|
|
24
38
|
activeWalletAccounts: WalletAccount[] | null;
|
|
25
39
|
activeWalletAddresses: string[] | null;
|
|
26
40
|
activeAccount: WalletAccount | null;
|
|
27
41
|
activeAddress: string | null;
|
|
28
|
-
setActiveNetwork: (networkId: string) => Promise<void>;
|
|
29
|
-
setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>;
|
|
30
42
|
signTransactions: <T extends algosdk.Transaction[] | Uint8Array[]>(txnGroup: T | T[], indexesToSign?: number[]) => Promise<(Uint8Array | null)[]>;
|
|
31
43
|
transactionSigner: (txnGroup: algosdk.Transaction[], indexesToSign: number[]) => Promise<Uint8Array[]>;
|
|
32
44
|
};
|
|
33
|
-
interface WalletProviderProps {
|
|
34
|
-
manager: WalletManager;
|
|
35
|
-
children: React.ReactNode;
|
|
36
|
-
}
|
|
37
|
-
declare const WalletProvider: ({ manager, children }: WalletProviderProps) => JSX.Element;
|
|
38
45
|
|
|
39
|
-
export { type Wallet, WalletProvider, useWallet };
|
|
46
|
+
export { type Wallet, WalletProvider, useNetwork, useWallet };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
import * as _txnlab_use_wallet from '@txnlab/use-wallet';
|
|
2
|
-
import { WalletMetadata, WalletAccount, WalletManager } from '@txnlab/use-wallet';
|
|
2
|
+
import { NetworkId, AlgodConfig, WalletMetadata, WalletAccount, 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';
|
|
6
6
|
|
|
7
|
+
interface WalletProviderProps {
|
|
8
|
+
manager: WalletManager;
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
}
|
|
11
|
+
declare const WalletProvider: ({ manager, children }: WalletProviderProps) => JSX.Element;
|
|
12
|
+
declare const useNetwork: () => {
|
|
13
|
+
activeNetwork: string;
|
|
14
|
+
networkConfig: Record<string, _txnlab_use_wallet.NetworkConfig>;
|
|
15
|
+
activeNetworkConfig: _txnlab_use_wallet.NetworkConfig;
|
|
16
|
+
setActiveNetwork: (networkId: NetworkId | string) => Promise<void>;
|
|
17
|
+
updateAlgodConfig: (networkId: string, config: Partial<AlgodConfig>) => void;
|
|
18
|
+
resetNetworkConfig: (networkId: string) => void;
|
|
19
|
+
};
|
|
7
20
|
interface Wallet {
|
|
8
21
|
id: string;
|
|
9
22
|
metadata: WalletMetadata;
|
|
@@ -18,22 +31,16 @@ interface Wallet {
|
|
|
18
31
|
}
|
|
19
32
|
declare const useWallet: () => {
|
|
20
33
|
wallets: Wallet[];
|
|
34
|
+
isReady: boolean;
|
|
21
35
|
algodClient: algosdk.Algodv2;
|
|
22
|
-
|
|
36
|
+
setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>;
|
|
23
37
|
activeWallet: _txnlab_use_wallet.BaseWallet | null;
|
|
24
38
|
activeWalletAccounts: WalletAccount[] | null;
|
|
25
39
|
activeWalletAddresses: string[] | null;
|
|
26
40
|
activeAccount: WalletAccount | null;
|
|
27
41
|
activeAddress: string | null;
|
|
28
|
-
setActiveNetwork: (networkId: string) => Promise<void>;
|
|
29
|
-
setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>;
|
|
30
42
|
signTransactions: <T extends algosdk.Transaction[] | Uint8Array[]>(txnGroup: T | T[], indexesToSign?: number[]) => Promise<(Uint8Array | null)[]>;
|
|
31
43
|
transactionSigner: (txnGroup: algosdk.Transaction[], indexesToSign: number[]) => Promise<Uint8Array[]>;
|
|
32
44
|
};
|
|
33
|
-
interface WalletProviderProps {
|
|
34
|
-
manager: WalletManager;
|
|
35
|
-
children: React.ReactNode;
|
|
36
|
-
}
|
|
37
|
-
declare const WalletProvider: ({ manager, children }: WalletProviderProps) => JSX.Element;
|
|
38
45
|
|
|
39
|
-
export { type Wallet, WalletProvider, useWallet };
|
|
46
|
+
export { type Wallet, WalletProvider, useNetwork, useWallet };
|
package/dist/index.js
CHANGED
|
@@ -4,12 +4,26 @@ import algosdk from "algosdk";
|
|
|
4
4
|
import * as React from "react";
|
|
5
5
|
export * from "@txnlab/use-wallet";
|
|
6
6
|
var WalletContext = React.createContext(void 0);
|
|
7
|
-
var
|
|
7
|
+
var WalletProvider = ({ manager, children }) => {
|
|
8
|
+
const [algodClient, setAlgodClient] = React.useState(manager.algodClient);
|
|
9
|
+
React.useEffect(() => {
|
|
10
|
+
manager.algodClient = algodClient;
|
|
11
|
+
}, [algodClient, manager]);
|
|
12
|
+
const resumedRef = React.useRef(false);
|
|
13
|
+
React.useEffect(() => {
|
|
14
|
+
if (!resumedRef.current) {
|
|
15
|
+
manager.resumeSessions();
|
|
16
|
+
resumedRef.current = true;
|
|
17
|
+
}
|
|
18
|
+
}, [manager]);
|
|
19
|
+
return /* @__PURE__ */ React.createElement(WalletContext.Provider, { value: { manager, algodClient, setAlgodClient } }, children);
|
|
20
|
+
};
|
|
21
|
+
var useNetwork = () => {
|
|
8
22
|
const context = React.useContext(WalletContext);
|
|
9
23
|
if (!context) {
|
|
10
|
-
throw new Error("
|
|
24
|
+
throw new Error("useNetwork must be used within the WalletProvider");
|
|
11
25
|
}
|
|
12
|
-
const { manager,
|
|
26
|
+
const { manager, setAlgodClient } = context;
|
|
13
27
|
const activeNetwork = useStore(manager.store, (state) => state.activeNetwork);
|
|
14
28
|
const setActiveNetwork = async (networkId) => {
|
|
15
29
|
if (networkId === activeNetwork) {
|
|
@@ -18,7 +32,7 @@ var useWallet = () => {
|
|
|
18
32
|
if (!manager.networkConfig[networkId]) {
|
|
19
33
|
throw new Error(`Network "${networkId}" not found in network configuration`);
|
|
20
34
|
}
|
|
21
|
-
console.info(`[React] Creating Algodv2 client
|
|
35
|
+
console.info(`[React] Creating new Algodv2 client...`);
|
|
22
36
|
const { algod } = manager.networkConfig[networkId];
|
|
23
37
|
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
24
38
|
const newClient = new algosdk.Algodv2(token, baseServer, port, headers);
|
|
@@ -29,6 +43,43 @@ var useWallet = () => {
|
|
|
29
43
|
}));
|
|
30
44
|
console.info(`[React] \u2705 Active network set to ${networkId}.`);
|
|
31
45
|
};
|
|
46
|
+
const updateAlgodConfig = (networkId, config) => {
|
|
47
|
+
manager.updateAlgodConfig(networkId, config);
|
|
48
|
+
if (networkId === activeNetwork) {
|
|
49
|
+
console.info(`[React] Creating new Algodv2 client...`);
|
|
50
|
+
const { algod } = manager.networkConfig[networkId];
|
|
51
|
+
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
52
|
+
const newClient = new algosdk.Algodv2(token, baseServer, port, headers);
|
|
53
|
+
setAlgodClient(newClient);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const resetNetworkConfig = (networkId) => {
|
|
57
|
+
manager.resetNetworkConfig(networkId);
|
|
58
|
+
if (networkId === activeNetwork) {
|
|
59
|
+
console.info(`[React] Creating new Algodv2 client...`);
|
|
60
|
+
const { algod } = manager.networkConfig[networkId];
|
|
61
|
+
const { token = "", baseServer, port = "", headers = {} } = algod;
|
|
62
|
+
const newClient = new algosdk.Algodv2(token, baseServer, port, headers);
|
|
63
|
+
setAlgodClient(newClient);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
return {
|
|
67
|
+
activeNetwork,
|
|
68
|
+
networkConfig: manager.networkConfig,
|
|
69
|
+
activeNetworkConfig: manager.activeNetworkConfig,
|
|
70
|
+
setActiveNetwork,
|
|
71
|
+
updateAlgodConfig,
|
|
72
|
+
resetNetworkConfig
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
var useWallet = () => {
|
|
76
|
+
const context = React.useContext(WalletContext);
|
|
77
|
+
if (!context) {
|
|
78
|
+
throw new Error("useWallet must be used within the WalletProvider");
|
|
79
|
+
}
|
|
80
|
+
const { manager, algodClient, setAlgodClient } = context;
|
|
81
|
+
const managerStatus = useStore(manager.store, (state) => state.managerStatus);
|
|
82
|
+
const isReady = managerStatus === "ready";
|
|
32
83
|
const walletStateMap = useStore(manager.store, (state) => state.wallets);
|
|
33
84
|
const activeWalletId = useStore(manager.store, (state) => state.activeWallet);
|
|
34
85
|
const wallets = React.useMemo(() => {
|
|
@@ -68,42 +119,21 @@ var useWallet = () => {
|
|
|
68
119
|
};
|
|
69
120
|
return {
|
|
70
121
|
wallets,
|
|
122
|
+
isReady,
|
|
71
123
|
algodClient,
|
|
72
|
-
|
|
124
|
+
setAlgodClient,
|
|
73
125
|
activeWallet,
|
|
74
126
|
activeWalletAccounts,
|
|
75
127
|
activeWalletAddresses,
|
|
76
128
|
activeAccount,
|
|
77
129
|
activeAddress,
|
|
78
|
-
setActiveNetwork,
|
|
79
|
-
setAlgodClient,
|
|
80
130
|
signTransactions,
|
|
81
131
|
transactionSigner
|
|
82
132
|
};
|
|
83
133
|
};
|
|
84
|
-
var WalletProvider = ({ manager, children }) => {
|
|
85
|
-
const [algodClient, setAlgodClient] = React.useState(manager.algodClient);
|
|
86
|
-
React.useEffect(() => {
|
|
87
|
-
manager.algodClient = algodClient;
|
|
88
|
-
}, [algodClient, manager]);
|
|
89
|
-
const resumedRef = React.useRef(false);
|
|
90
|
-
React.useEffect(() => {
|
|
91
|
-
const resumeSessions = async () => {
|
|
92
|
-
try {
|
|
93
|
-
await manager.resumeSessions();
|
|
94
|
-
} catch (error) {
|
|
95
|
-
console.error("Error resuming sessions:", error);
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
if (!resumedRef.current) {
|
|
99
|
-
resumeSessions();
|
|
100
|
-
resumedRef.current = true;
|
|
101
|
-
}
|
|
102
|
-
}, [manager]);
|
|
103
|
-
return /* @__PURE__ */ React.createElement(WalletContext.Provider, { value: { manager, algodClient, setAlgodClient } }, children);
|
|
104
|
-
};
|
|
105
134
|
export {
|
|
106
135
|
WalletProvider,
|
|
136
|
+
useNetwork,
|
|
107
137
|
useWallet
|
|
108
138
|
};
|
|
109
139
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport { WalletAccount
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import { useStore } from '@tanstack/react-store'\nimport {\n NetworkId,\n WalletManager,\n type AlgodConfig,\n type WalletAccount,\n type WalletMetadata\n} from '@txnlab/use-wallet'\nimport algosdk from 'algosdk'\nimport * as React from 'react'\n\nexport * from '@txnlab/use-wallet'\n\ninterface IWalletContext {\n manager: WalletManager\n algodClient: algosdk.Algodv2\n setAlgodClient: React.Dispatch<React.SetStateAction<algosdk.Algodv2>>\n}\n\nconst WalletContext = React.createContext<IWalletContext | undefined>(undefined)\n\ninterface WalletProviderProps {\n manager: WalletManager\n children: React.ReactNode\n}\n\nexport const WalletProvider = ({ manager, children }: WalletProviderProps): JSX.Element => {\n const [algodClient, setAlgodClient] = React.useState(manager.algodClient)\n\n React.useEffect(() => {\n manager.algodClient = algodClient\n }, [algodClient, manager])\n\n const resumedRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!resumedRef.current) {\n manager.resumeSessions()\n resumedRef.current = true\n }\n }, [manager])\n\n return (\n <WalletContext.Provider value={{ manager, algodClient, setAlgodClient }}>\n {children}\n </WalletContext.Provider>\n )\n}\n\nexport const useNetwork = () => {\n const context = React.useContext(WalletContext)\n\n if (!context) {\n throw new Error('useNetwork must be used within the WalletProvider')\n }\n\n const { manager, setAlgodClient } = context\n\n const activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n\n const setActiveNetwork = async (networkId: NetworkId | string): Promise<void> => {\n if (networkId === activeNetwork) {\n return\n }\n\n if (!manager.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n console.info(`[React] Creating new Algodv2 client...`)\n\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n\n manager.store.setState((state) => ({\n ...state,\n activeNetwork: networkId\n }))\n\n console.info(`[React] ✅ Active network set to ${networkId}.`)\n }\n\n const updateAlgodConfig = (networkId: string, config: Partial<AlgodConfig>): void => {\n manager.updateAlgodConfig(networkId, config)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork) {\n console.info(`[React] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n }\n }\n\n const resetNetworkConfig = (networkId: string): void => {\n manager.resetNetworkConfig(networkId)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork) {\n console.info(`[React] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n setAlgodClient(newClient)\n }\n }\n\n return {\n activeNetwork,\n networkConfig: manager.networkConfig,\n activeNetworkConfig: manager.activeNetworkConfig,\n setActiveNetwork,\n updateAlgodConfig,\n resetNetworkConfig\n }\n}\n\nexport interface Wallet {\n id: 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 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 setAlgodClient,\n activeWallet,\n activeWalletAccounts,\n activeWalletAddresses,\n activeAccount,\n activeAddress,\n signTransactions,\n transactionSigner\n }\n}\n"],"mappings":";AAAA,SAAS,gBAAgB;AAQzB,OAAO,aAAa;AACpB,YAAY,WAAW;AAEvB,cAAc;AAQd,IAAM,gBAAsB,oBAA0C,MAAS;AAOxE,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,QAAI,CAAC,WAAW,SAAS;AACvB,cAAQ,eAAe;AACvB,iBAAW,UAAU;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,SACE,oCAAC,cAAc,UAAd,EAAuB,OAAO,EAAE,SAAS,aAAa,eAAe,KACnE,QACH;AAEJ;AAEO,IAAM,aAAa,MAAM;AAC9B,QAAM,UAAgB,iBAAW,aAAa;AAE9C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AAEA,QAAM,EAAE,SAAS,eAAe,IAAI;AAEpC,QAAM,gBAAgB,SAAS,QAAQ,OAAO,CAAC,UAAU,MAAM,aAAa;AAE5E,QAAM,mBAAmB,OAAO,cAAiD;AAC/E,QAAI,cAAc,eAAe;AAC/B;AAAA,IACF;AAEA,QAAI,CAAC,QAAQ,cAAc,SAAS,GAAG;AACrC,YAAM,IAAI,MAAM,YAAY,SAAS,sCAAsC;AAAA,IAC7E;AAEA,YAAQ,KAAK,wCAAwC;AAErD,UAAM,EAAE,MAAM,IAAI,QAAQ,cAAc,SAAS;AACjD,UAAM,EAAE,QAAQ,IAAI,YAAY,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI;AAC5D,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,oBAAoB,CAAC,WAAmB,WAAuC;AACnF,YAAQ,kBAAkB,WAAW,MAAM;AAG3C,QAAI,cAAc,eAAe;AAC/B,cAAQ,KAAK,wCAAwC;AACrD,YAAM,EAAE,MAAM,IAAI,QAAQ,cAAc,SAAS;AACjD,YAAM,EAAE,QAAQ,IAAI,YAAY,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI;AAC5D,YAAM,YAAY,IAAI,QAAQ,QAAQ,OAAO,YAAY,MAAM,OAAO;AACtE,qBAAe,SAAS;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,qBAAqB,CAAC,cAA4B;AACtD,YAAQ,mBAAmB,SAAS;AAGpC,QAAI,cAAc,eAAe;AAC/B,cAAQ,KAAK,wCAAwC;AACrD,YAAM,EAAE,MAAM,IAAI,QAAQ,cAAc,SAAS;AACjD,YAAM,EAAE,QAAQ,IAAI,YAAY,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI;AAC5D,YAAM,YAAY,IAAI,QAAQ,QAAQ,OAAO,YAAY,MAAM,OAAO;AACtE,qBAAe,SAAS;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,eAAe,QAAQ;AAAA,IACvB,qBAAqB,QAAQ;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAeO,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;AAC5E,QAAM,UAAU,kBAAkB;AAElC,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,EACF;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@txnlab/use-wallet-react",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.5",
|
|
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,27 +30,27 @@
|
|
|
30
30
|
"dist"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@tanstack/react-store": "0.
|
|
34
|
-
"@txnlab/use-wallet": "4.0.0-beta.
|
|
33
|
+
"@tanstack/react-store": "0.7.0",
|
|
34
|
+
"@txnlab/use-wallet": "4.0.0-beta.5"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@types/react": "18.3.
|
|
37
|
+
"@types/react": "18.3.18",
|
|
38
38
|
"algosdk": "3.0.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.
|
|
43
|
+
"typescript": "5.7.2"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
46
|
"@blockshake/defly-connect": "^1.2.1",
|
|
47
|
-
"@magic-ext/algorand": "^23.
|
|
47
|
+
"@magic-ext/algorand": "^23.20.0",
|
|
48
48
|
"@walletconnect/modal": "^2.7.0",
|
|
49
49
|
"@perawallet/connect": "^1.4.1",
|
|
50
|
-
"@walletconnect/sign-client": "^2.17.
|
|
50
|
+
"@walletconnect/sign-client": "^2.17.3",
|
|
51
51
|
"algosdk": "^3.0.0",
|
|
52
52
|
"lute-connect": "^1.4.1",
|
|
53
|
-
"magic-sdk": "^28.
|
|
53
|
+
"magic-sdk": "^28.21.0",
|
|
54
54
|
"react": "^17.0.0 || ^18.0.0",
|
|
55
55
|
"react-dom": "^17.0.0 || ^18.0.0"
|
|
56
56
|
},
|