@xyo-network/react-chain-provider 1.12.0 → 1.12.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.
@@ -1 +1 @@
1
- {"version":3,"file":"useAddressBalance.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAddressBalance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAI1C,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAGnE,eAAO,MAAM,iBAAiB,GAE5B,UAAU,OAAO,EAEjB,SAAS,SAAS,EAElB,UAAU,MAAM;;;;;;;;;;;CA6CjB,CAAA"}
1
+ {"version":3,"file":"useAddressBalance.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAddressBalance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAKnE,eAAO,MAAM,iBAAiB,GAE5B,UAAU,OAAO,EAEjB,SAAS,SAAS,EAElB,UAAU,MAAM;;;;;;;;;;;CAgEjB,CAAA"}
@@ -1,24 +1,45 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
1
4
  // src/hooks/useAddressBalance.ts
2
- import { usePromise } from "@xylabs/react-promise";
3
5
  import { isUndefined, isUndefinedOrNull } from "@xylabs/typeof";
4
6
  import { ShiftedBigInt } from "@xyo-network/chain-wrappers";
5
- import { useMemo, useState } from "react";
6
- var useAddressBalance = (address, viewer, refresh) => {
7
+ import { useEffect, useMemo, useState } from "react";
8
+ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
7
9
  const [balancesResult, setBalancesResult] = useState();
8
10
  const [loading, setLoading] = useState(false);
9
- const [, balancesError] = usePromise(async () => {
11
+ const [balancesError, setBalancesError] = useState();
12
+ useEffect(() => {
13
+ let isCurrent = true;
10
14
  if (isUndefined(viewer) || isUndefined(address)) return;
11
- setLoading(true);
12
- setBalancesResult(void 0);
13
- const balance = await viewer.accountBalance(address);
14
- setBalancesResult(balance);
15
- setLoading(false);
16
- }, [address, viewer, refresh]);
15
+ viewer.accountBalance(address).then((result) => {
16
+ if (isCurrent) {
17
+ setBalancesResult(result);
18
+ setLoading(false);
19
+ }
20
+ }).catch((err) => {
21
+ if (isCurrent) {
22
+ console.error("Error in queued call:", err);
23
+ setBalancesResult(void 0);
24
+ setBalancesError(err);
25
+ setLoading(false);
26
+ }
27
+ });
28
+ return () => {
29
+ isCurrent = false;
30
+ };
31
+ }, [
32
+ address,
33
+ viewer,
34
+ refresh
35
+ ]);
17
36
  useMemo(() => {
18
37
  if (balancesError) {
19
38
  setLoading(false);
20
39
  }
21
- }, [balancesError]);
40
+ }, [
41
+ balancesError
42
+ ]);
22
43
  const shiftedBigInt = useMemo(() => {
23
44
  if (typeof balancesResult !== "bigint") return;
24
45
  return new ShiftedBigInt(balancesResult, {
@@ -28,13 +49,19 @@ var useAddressBalance = (address, viewer, refresh) => {
28
49
  minDecimals: 1,
29
50
  locale: navigator.language
30
51
  });
31
- }, [balancesResult]);
52
+ }, [
53
+ balancesResult
54
+ ]);
32
55
  const balanceIntlFriendly = useMemo(() => {
33
56
  return shiftedBigInt?.toFullString();
34
- }, [shiftedBigInt]);
57
+ }, [
58
+ shiftedBigInt
59
+ ]);
35
60
  const shortBalanceIntlFriendly = useMemo(() => {
36
61
  return isUndefinedOrNull(balancesResult) ? void 0 : balancesResult < 1000000000000n && balancesResult > 0n ? "<0.00001" : shiftedBigInt?.toShortString();
37
- }, [shiftedBigInt]);
62
+ }, [
63
+ shiftedBigInt
64
+ ]);
38
65
  return {
39
66
  address,
40
67
  balanceForAddress: balancesResult,
@@ -43,82 +70,79 @@ var useAddressBalance = (address, viewer, refresh) => {
43
70
  error: balancesError,
44
71
  loading
45
72
  };
46
- };
73
+ }, "useAddressBalance");
47
74
 
48
75
  // src/hooks/useCurrentBlock.ts
49
- import { usePromise as usePromise2 } from "@xylabs/react-promise";
50
- var useCurrentBlock = (refresh = 1, viewer) => {
51
- return usePromise2(async () => {
76
+ import { usePromise } from "@xylabs/react-promise";
77
+ var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
78
+ return usePromise(async () => {
52
79
  if (viewer && refresh > 0) {
53
80
  const block = await viewer.currentBlock();
54
81
  return block;
55
82
  }
56
- }, [viewer, refresh]);
57
- };
83
+ }, [
84
+ viewer,
85
+ refresh
86
+ ]);
87
+ }, "useCurrentBlock");
58
88
 
59
89
  // src/hooks/useHttpRpcRunner.ts
60
90
  import { isUndefined as isUndefined2 } from "@xylabs/typeof";
61
- import {
62
- AllRpcSchemas,
63
- HttpRpcTransport,
64
- JsonRpcXyoRunner
65
- } from "@xyo-network/xl1-rpc";
91
+ import { AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner } from "@xyo-network/xl1-rpc";
66
92
  import { useMemo as useMemo2 } from "react";
67
- var useHttpRpcRunner = (url) => {
93
+ var useHttpRpcRunner = /* @__PURE__ */ __name((url) => {
68
94
  return useMemo2(() => {
69
95
  if (isUndefined2(url)) {
70
96
  return;
71
97
  }
72
98
  const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas);
73
99
  return new JsonRpcXyoRunner(transport);
74
- }, [url]);
75
- };
100
+ }, [
101
+ url
102
+ ]);
103
+ }, "useHttpRpcRunner");
76
104
 
77
105
  // src/hooks/useNetwork.ts
78
106
  import { isUndefined as isUndefined3 } from "@xylabs/typeof";
79
107
  import { MemoryXyoNetwork } from "@xyo-network/xl1-rpc";
80
108
  import { useMemo as useMemo3 } from "react";
81
- var useNetwork = (id) => {
109
+ var useNetwork = /* @__PURE__ */ __name((id) => {
82
110
  const network = useMemo3(() => {
83
111
  if (isUndefined3(id)) return;
84
112
  return new MemoryXyoNetwork(id);
85
- }, [id]);
113
+ }, [
114
+ id
115
+ ]);
86
116
  return network;
87
- };
117
+ }, "useNetwork");
88
118
 
89
119
  // src/hooks/useSigner.ts
90
120
  import { MemoryXyoSigner } from "@xyo-network/xl1-rpc";
91
121
  import { useMemo as useMemo4 } from "react";
92
- var useSigner = (_provider, account) => {
93
- return useMemo4(() => account ? new MemoryXyoSigner(account) : void 0, [account]);
94
- };
122
+ var useSigner = /* @__PURE__ */ __name((_provider, account) => {
123
+ return useMemo4(() => account ? new MemoryXyoSigner(account) : void 0, [
124
+ account
125
+ ]);
126
+ }, "useSigner");
95
127
 
96
128
  // src/hooks/viewer/useCheckRpc.ts
97
129
  import { delay } from "@xylabs/delay";
98
130
  import { isDefined, isUndefined as isUndefined4 } from "@xylabs/typeof";
99
131
  import { LocalNetwork, SequenceNetwork } from "@xyo-network/chain-network-model";
100
- import {
101
- HttpRpcTransport as HttpRpcTransport2,
102
- JsonRpcXyoViewer,
103
- XyoViewerRpcSchemas
104
- } from "@xyo-network/xl1-rpc";
105
- import {
106
- useEffect,
107
- useMemo as useMemo5,
108
- useState as useState2
109
- } from "react";
132
+ import { HttpRpcTransport as HttpRpcTransport2, JsonRpcXyoViewer, XyoViewerRpcSchemas } from "@xyo-network/xl1-rpc";
133
+ import { useEffect as useEffect2, useMemo as useMemo5, useState as useState2 } from "react";
110
134
  var INTERVAL = 5e3;
111
135
  var localRpcEndpoint = `${LocalNetwork.url}/rpc`;
112
136
  var sequenceRpcEndpoint = `${SequenceNetwork.url}/rpc`;
113
- var useCheckLocalRpc = () => {
137
+ var useCheckLocalRpc = /* @__PURE__ */ __name(() => {
114
138
  const isLocalProducer = useCheckRpc(localRpcEndpoint);
115
139
  return isLocalProducer;
116
- };
117
- var useCheckSequenceRpc = () => {
140
+ }, "useCheckLocalRpc");
141
+ var useCheckSequenceRpc = /* @__PURE__ */ __name(() => {
118
142
  const isLocalProducer = useCheckRpc(sequenceRpcEndpoint);
119
143
  return isLocalProducer;
120
- };
121
- var useCheckRpc = (endpoint) => {
144
+ }, "useCheckSequenceRpc");
145
+ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
122
146
  const [isLocalProducer, setIsLocalProducer] = useState2(false);
123
147
  const [error, setError] = useState2();
124
148
  const viewer = useMemo5(() => {
@@ -126,8 +150,10 @@ var useCheckRpc = (endpoint) => {
126
150
  const transport = new HttpRpcTransport2(endpoint, XyoViewerRpcSchemas);
127
151
  const viewer2 = new JsonRpcXyoViewer(transport);
128
152
  return viewer2;
129
- }, [endpoint]);
130
- useEffect(() => {
153
+ }, [
154
+ endpoint
155
+ ]);
156
+ useEffect2(() => {
131
157
  if (isUndefined4(viewer)) return;
132
158
  void (async () => {
133
159
  setError(void 0);
@@ -142,61 +168,56 @@ var useCheckRpc = (endpoint) => {
142
168
  await delay(INTERVAL);
143
169
  }
144
170
  })();
145
- }, [viewer]);
146
- return { isLocalProducer, error };
147
- };
171
+ }, [
172
+ viewer
173
+ ]);
174
+ return {
175
+ isLocalProducer,
176
+ error
177
+ };
178
+ }, "useCheckRpc");
148
179
 
149
180
  // src/hooks/viewer/useHttpRpcViewer.ts
150
181
  import { isUndefined as isUndefined5 } from "@xylabs/typeof";
151
- import {
152
- HttpRpcTransport as HttpRpcTransport3,
153
- JsonRpcXyoViewer as JsonRpcXyoViewer2,
154
- XyoViewerRpcSchemas as XyoViewerRpcSchemas2
155
- } from "@xyo-network/xl1-rpc";
182
+ import { HttpRpcTransport as HttpRpcTransport3, JsonRpcXyoViewer as JsonRpcXyoViewer2, XyoViewerRpcSchemas as XyoViewerRpcSchemas2 } from "@xyo-network/xl1-rpc";
156
183
  import { useMemo as useMemo6 } from "react";
157
- var useHttpRpcViewer = (url) => {
184
+ var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
158
185
  const resolvedViewer = useMemo6(() => {
159
186
  if (isUndefined5(url)) {
160
187
  return;
161
188
  }
162
189
  const transport = new HttpRpcTransport3(`${url}/rpc`, XyoViewerRpcSchemas2);
163
190
  return new JsonRpcXyoViewer2(transport);
164
- }, [url]);
191
+ }, [
192
+ url
193
+ ]);
165
194
  return resolvedViewer;
166
- };
195
+ }, "useHttpRpcViewer");
167
196
 
168
197
  // src/hooks/viewer/useViewerFromWallet.ts
169
- import { usePromise as usePromise3 } from "@xylabs/react-promise";
170
- import {
171
- isDefined as isDefined3,
172
- isTruthy,
173
- isUndefined as isUndefined6
174
- } from "@xylabs/typeof";
175
- import { useEffect as useEffect2, useMemo as useMemo7 } from "react";
198
+ import { usePromise as usePromise2 } from "@xylabs/react-promise";
199
+ import { isDefined as isDefined3, isTruthy, isUndefined as isUndefined6 } from "@xylabs/typeof";
200
+ import { useEffect as useEffect3, useMemo as useMemo7 } from "react";
176
201
 
177
202
  // src/hooks/viewer/resolveGateway.ts
178
203
  import { isDefined as isDefined2 } from "@xylabs/typeof";
179
- import {
180
- JsonRpcXyoRunner as JsonRpcXyoRunner2,
181
- JsonRpcXyoViewer as JsonRpcXyoViewer3,
182
- LegacyPostMessageRpcTransport,
183
- MemoryXyoGateway,
184
- RpcXyoSigner,
185
- XyoConnection
186
- } from "@xyo-network/xl1-rpc";
187
- var gateways = () => globalThis.xyo?.client?.gateways;
188
- var buildGatewayFromConnection = (networkId) => {
204
+ import { JsonRpcXyoRunner as JsonRpcXyoRunner2, JsonRpcXyoViewer as JsonRpcXyoViewer3, LegacyPostMessageRpcTransport, MemoryXyoGateway, RpcXyoSigner, XyoConnection } from "@xyo-network/xl1-rpc";
205
+ var gateways = /* @__PURE__ */ __name(() => globalThis.xyo?.client?.gateways, "gateways");
206
+ var buildGatewayFromConnection = /* @__PURE__ */ __name((networkId) => {
189
207
  const connections = globalThis.xyo?.connections;
190
208
  if (isDefined2(connections) && isDefined2(connections[networkId])) {
191
209
  const legacyPostMessageRpcTransport = new LegacyPostMessageRpcTransport(networkId, globalThis.xyo.walletExtensionId() ?? "");
192
210
  const signer = new RpcXyoSigner(legacyPostMessageRpcTransport);
193
211
  const viewer = new JsonRpcXyoViewer3(legacyPostMessageRpcTransport);
194
212
  const runner = new JsonRpcXyoRunner2(legacyPostMessageRpcTransport);
195
- const connection = new XyoConnection({ viewer, runner });
213
+ const connection = new XyoConnection({
214
+ viewer,
215
+ runner
216
+ });
196
217
  return new MemoryXyoGateway(signer, connection);
197
218
  }
198
- };
199
- var resolveGateway = (networkId) => {
219
+ }, "buildGatewayFromConnection");
220
+ var resolveGateway = /* @__PURE__ */ __name((networkId) => {
200
221
  const networkGateway = gateways()?.[networkId];
201
222
  if (isDefined2(networkGateway)) {
202
223
  return networkGateway;
@@ -206,27 +227,33 @@ var resolveGateway = (networkId) => {
206
227
  return builtGateway;
207
228
  }
208
229
  console.warn(`No gateway found for networkId: ${networkId}`);
209
- };
230
+ }, "resolveGateway");
210
231
 
211
232
  // src/hooks/viewer/useViewerFromWallet.ts
212
- var useViewerFromWallet = (networkId) => {
233
+ var useViewerFromWallet = /* @__PURE__ */ __name((networkId) => {
213
234
  const networkGateway = useMemo7(() => {
214
235
  if (isDefined3(networkId)) {
215
236
  return resolveGateway(networkId);
216
237
  }
217
- }, [networkId]);
218
- const [gatewayViewer, rpcError] = usePromise3(async () => {
238
+ }, [
239
+ networkId
240
+ ]);
241
+ const [gatewayViewer, rpcError] = usePromise2(async () => {
219
242
  if (isUndefined6(networkGateway)) return;
220
243
  const connection = await networkGateway.connection();
221
244
  return connection.viewer;
222
- }, [networkGateway]);
223
- useEffect2(() => {
245
+ }, [
246
+ networkGateway
247
+ ]);
248
+ useEffect3(() => {
224
249
  if (isTruthy(rpcError)) {
225
250
  console.error("Error creating viewer from wallet:", rpcError);
226
251
  }
227
- }, [rpcError]);
252
+ }, [
253
+ rpcError
254
+ ]);
228
255
  return gatewayViewer;
229
- };
256
+ }, "useViewerFromWallet");
230
257
  export {
231
258
  useAddressBalance,
232
259
  useCheckLocalRpc,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useAddressBalance.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useHttpRpcRunner.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useSigner.ts","../../src/hooks/viewer/useCheckRpc.ts","../../src/hooks/viewer/useHttpRpcViewer.ts","../../src/hooks/viewer/useViewerFromWallet.ts","../../src/hooks/viewer/resolveGateway.ts"],"sourcesContent":["import type { Address } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport { ShiftedBigInt } from '@xyo-network/chain-wrappers'\nimport type { AttoXL1, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { useMemo, useState } from 'react'\n\nexport const useAddressBalance = (\n // address to get balance for\n address?: Address,\n // viewer to use for fetching balance\n viewer?: XyoViewer,\n // refresh balance trigger\n refresh?: number,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n\n const [, balancesError] = usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n setLoading(true)\n setBalancesResult(undefined)\n const balance = await viewer.accountBalance(address)\n setBalancesResult(balance as AttoXL1)\n setLoading(false)\n }, [address, viewer, refresh])\n\n useMemo(() => {\n if (balancesError) {\n setLoading(false)\n }\n }, [balancesError])\n\n const shiftedBigInt = useMemo(() => {\n if (typeof balancesResult !== 'bigint') return\n return new ShiftedBigInt(balancesResult, {\n places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,\n })\n }, [balancesResult])\n\n const balanceIntlFriendly = useMemo(() => {\n return shiftedBigInt?.toFullString()\n }, [shiftedBigInt])\n\n const shortBalanceIntlFriendly = useMemo(() => {\n return isUndefinedOrNull(balancesResult)\n ? undefined\n : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()\n }, [shiftedBigInt])\n\n return {\n address,\n balanceForAddress: balancesResult,\n balanceIntlFriendly,\n shortBalanceIntlFriendly,\n error: balancesError,\n loading,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\n\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {\n return usePromise(async () => {\n if (viewer && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { RpcTransport, XyoRunnerRpcSchemas } from '@xyo-network/xl1-rpc'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcRunner = (url?: string) => {\n return useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport as RpcTransport<typeof XyoRunnerRpcSchemas>)\n }, [url])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { DefaultNetworkIds } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoNetwork } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useNetwork = (id?: DefaultNetworkIds) => {\n const network = useMemo(() => {\n if (isUndefined(id)) return\n return new MemoryXyoNetwork(id)\n }, [id])\n\n return network\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { XyoConnectionProvider, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnectionProvider, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new MemoryXyoSigner(account) : undefined, [account])\n}\n","import { delay } from '@xylabs/delay'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { LocalNetwork, SequenceNetwork } from '@xyo-network/chain-network-model'\nimport {\n HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport {\n useEffect, useMemo, useState,\n} from 'react'\n\nconst INTERVAL = 5000 // 5 seconds\n\nconst localRpcEndpoint: string = `${LocalNetwork.url}/rpc`\nconst sequenceRpcEndpoint: string = `${SequenceNetwork.url}/rpc`\n\nexport const useCheckLocalRpc = () => {\n const isLocalProducer = useCheckRpc(localRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckSequenceRpc = () => {\n const isLocalProducer = useCheckRpc(sequenceRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckRpc = (endpoint?: string) => {\n const [isLocalProducer, setIsLocalProducer] = useState(false)\n const [error, setError] = useState<Error>()\n\n const viewer = useMemo(() => {\n if (isUndefined(endpoint)) return\n\n const transport = new HttpRpcTransport(endpoint, XyoViewerRpcSchemas)\n const viewer = new JsonRpcXyoViewer(transport)\n return viewer\n }, [endpoint])\n\n useEffect(() => {\n if (isUndefined(viewer)) return\n\n void (async () => {\n setError(undefined)\n while (!isLocalProducer) {\n try {\n const block = await viewer.currentBlock()\n setIsLocalProducer(isDefined(block))\n } catch (err) {\n setError(err as Error)\n setIsLocalProducer(false)\n }\n await delay(INTERVAL)\n }\n })()\n }, [viewer])\n\n return { isLocalProducer, error }\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport {\n HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcViewer = (url?: string) => {\n const resolvedViewer = useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, XyoViewerRpcSchemas)\n return new JsonRpcXyoViewer(transport)\n }, [url])\n\n return resolvedViewer\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isDefined, isTruthy, isUndefined,\n} from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useEffect, useMemo } from 'react'\n\nimport { resolveGateway } from './resolveGateway.ts'\n\n/**\n * Creates a JsonRpcXyoViewer instance based on the provided networkId.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns An instance of XyoViewer if the networkId is found in wallet gateways\n * otherwise undefined.\n */\nexport const useViewerFromWallet = (networkId?: GatewayName) => {\n const networkGateway = useMemo(() => {\n if (isDefined(networkId)) {\n return resolveGateway(networkId)\n }\n }, [networkId])\n\n const [gatewayViewer, rpcError] = usePromise(async () => {\n if (isUndefined(networkGateway)) return\n const connection = await networkGateway.connection()\n return connection.viewer\n }, [networkGateway])\n\n useEffect(() => {\n if (isTruthy(rpcError)) {\n console.error('Error creating viewer from wallet:', rpcError)\n }\n }, [rpcError])\n\n return gatewayViewer\n}\n","import { isDefined } from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport type {\n RpcTransport,\n XyoRunnerRpcSchemas, XyoSignerRpcSchemas,\n XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport {\n JsonRpcXyoRunner, JsonRpcXyoViewer, LegacyPostMessageRpcTransport, MemoryXyoGateway, RpcXyoSigner, XyoConnection,\n} from '@xyo-network/xl1-rpc'\n\n/**\n * Check the global xyo object for gateways on the injected client.\n * @returns The gateways from the global xyo object, or undefined if it does not exist.\n */\nconst gateways = () => globalThis.xyo?.client?.gateways\n\n/**\n * Builds a gateway from the connection if it exists in the global xyo object.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.\n */\nconst buildGatewayFromConnection = (networkId: GatewayName) => {\n const connections = globalThis.xyo?.connections\n if (isDefined(connections) && isDefined(connections[networkId])) {\n // use the legacy post message transport to ensure compatibility with older implementations\n const legacyPostMessageRpcTransport = new LegacyPostMessageRpcTransport(networkId, globalThis.xyo.walletExtensionId() ?? '')\n const signer = new RpcXyoSigner(legacyPostMessageRpcTransport as RpcTransport<typeof XyoSignerRpcSchemas>)\n const viewer = new JsonRpcXyoViewer(legacyPostMessageRpcTransport as RpcTransport<typeof XyoViewerRpcSchemas>)\n const runner = new JsonRpcXyoRunner(legacyPostMessageRpcTransport as RpcTransport<typeof XyoRunnerRpcSchemas>)\n const connection = new XyoConnection({ viewer, runner })\n return new MemoryXyoGateway(signer, connection)\n }\n}\n\n/**\n * Retrieves a gateway from the wallet based on the provided networkId.\n * Includes fallback logic to build a gateway from the connection if it does not exist in\n * the global xyo object.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.\n */\nexport const resolveGateway = (networkId: GatewayName) => {\n const networkGateway = gateways()?.[networkId]\n if (isDefined(networkGateway)) {\n return networkGateway\n }\n const builtGateway = buildGatewayFromConnection(networkId)\n if (isDefined(builtGateway)) {\n return builtGateway\n }\n // If no gateway is found, log a warning\n console.warn(`No gateway found for networkId: ${networkId}`)\n}\n"],"mappings":"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","names":["usePromise","isUndefined","useMemo","isUndefined","useMemo","useMemo","isUndefined","HttpRpcTransport","useMemo","useState","viewer","isUndefined","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useMemo","usePromise","isDefined","isUndefined","useEffect","useMemo","isDefined","JsonRpcXyoRunner","JsonRpcXyoViewer","useMemo","isDefined","usePromise","isUndefined","useEffect"]}
1
+ {"version":3,"sources":["../../src/hooks/useAddressBalance.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useHttpRpcRunner.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useSigner.ts","../../src/hooks/viewer/useCheckRpc.ts","../../src/hooks/viewer/useHttpRpcViewer.ts","../../src/hooks/viewer/useViewerFromWallet.ts","../../src/hooks/viewer/resolveGateway.ts"],"sourcesContent":["import type { Address } from '@xylabs/hex'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport { ShiftedBigInt } from '@xyo-network/chain-wrappers'\nimport type { AttoXL1, XyoViewer } from '@xyo-network/xl1-protocol'\nimport {\n useEffect, useMemo, useState,\n} from 'react'\n\nexport const useAddressBalance = (\n // address to get balance for\n address?: Address,\n // viewer to use for fetching balance\n viewer?: XyoViewer,\n // refresh balance trigger\n refresh?: number,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n const [balancesError, setBalancesError] = useState<Error>()\n\n useEffect(() => {\n let isCurrent = true\n if (isUndefined(viewer) || isUndefined(address)) return\n // Ensure the render is the current one before setting the state.\n // This solves the issue of overlapping calls where a previous call takes\n // longer than a subsequent one and returns a state value. Now, the latest\n // result is always returned.\n (viewer.accountBalance(address) as Promise<AttoXL1>).then((result) => {\n if (isCurrent) {\n setBalancesResult(result as AttoXL1)\n setLoading(false)\n }\n })\n .catch((err) => {\n if (isCurrent) {\n console.error('Error in queued call:', err)\n setBalancesResult(undefined)\n setBalancesError(err)\n setLoading(false)\n }\n })\n\n return () => {\n isCurrent = false\n }\n }, [address, viewer, refresh])\n\n useMemo(() => {\n if (balancesError) {\n setLoading(false)\n }\n }, [balancesError])\n\n const shiftedBigInt = useMemo(() => {\n if (typeof balancesResult !== 'bigint') return\n return new ShiftedBigInt(balancesResult, {\n places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,\n })\n }, [balancesResult])\n\n const balanceIntlFriendly = useMemo(() => {\n return shiftedBigInt?.toFullString()\n }, [shiftedBigInt])\n\n const shortBalanceIntlFriendly = useMemo(() => {\n return isUndefinedOrNull(balancesResult)\n ? undefined\n : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()\n }, [shiftedBigInt])\n\n return {\n address,\n balanceForAddress: balancesResult,\n balanceIntlFriendly,\n shortBalanceIntlFriendly,\n error: balancesError,\n loading,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\n\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {\n return usePromise(async () => {\n if (viewer && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { RpcTransport, XyoRunnerRpcSchemas } from '@xyo-network/xl1-rpc'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcRunner = (url?: string) => {\n return useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport as RpcTransport<typeof XyoRunnerRpcSchemas>)\n }, [url])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { DefaultNetworkIds } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoNetwork } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useNetwork = (id?: DefaultNetworkIds) => {\n const network = useMemo(() => {\n if (isUndefined(id)) return\n return new MemoryXyoNetwork(id)\n }, [id])\n\n return network\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { XyoConnectionProvider, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnectionProvider, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new MemoryXyoSigner(account) : undefined, [account])\n}\n","import { delay } from '@xylabs/delay'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { LocalNetwork, SequenceNetwork } from '@xyo-network/chain-network-model'\nimport {\n HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport {\n useEffect, useMemo, useState,\n} from 'react'\n\nconst INTERVAL = 5000 // 5 seconds\n\nconst localRpcEndpoint: string = `${LocalNetwork.url}/rpc`\nconst sequenceRpcEndpoint: string = `${SequenceNetwork.url}/rpc`\n\nexport const useCheckLocalRpc = () => {\n const isLocalProducer = useCheckRpc(localRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckSequenceRpc = () => {\n const isLocalProducer = useCheckRpc(sequenceRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckRpc = (endpoint?: string) => {\n const [isLocalProducer, setIsLocalProducer] = useState(false)\n const [error, setError] = useState<Error>()\n\n const viewer = useMemo(() => {\n if (isUndefined(endpoint)) return\n\n const transport = new HttpRpcTransport(endpoint, XyoViewerRpcSchemas)\n const viewer = new JsonRpcXyoViewer(transport)\n return viewer\n }, [endpoint])\n\n useEffect(() => {\n if (isUndefined(viewer)) return\n\n void (async () => {\n setError(undefined)\n while (!isLocalProducer) {\n try {\n const block = await viewer.currentBlock()\n setIsLocalProducer(isDefined(block))\n } catch (err) {\n setError(err as Error)\n setIsLocalProducer(false)\n }\n await delay(INTERVAL)\n }\n })()\n }, [viewer])\n\n return { isLocalProducer, error }\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport {\n HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcViewer = (url?: string) => {\n const resolvedViewer = useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, XyoViewerRpcSchemas)\n return new JsonRpcXyoViewer(transport)\n }, [url])\n\n return resolvedViewer\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isDefined, isTruthy, isUndefined,\n} from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useEffect, useMemo } from 'react'\n\nimport { resolveGateway } from './resolveGateway.ts'\n\n/**\n * Creates a JsonRpcXyoViewer instance based on the provided networkId.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns An instance of XyoViewer if the networkId is found in wallet gateways\n * otherwise undefined.\n */\nexport const useViewerFromWallet = (networkId?: GatewayName) => {\n const networkGateway = useMemo(() => {\n if (isDefined(networkId)) {\n return resolveGateway(networkId)\n }\n }, [networkId])\n\n const [gatewayViewer, rpcError] = usePromise(async () => {\n if (isUndefined(networkGateway)) return\n const connection = await networkGateway.connection()\n return connection.viewer\n }, [networkGateway])\n\n useEffect(() => {\n if (isTruthy(rpcError)) {\n console.error('Error creating viewer from wallet:', rpcError)\n }\n }, [rpcError])\n\n return gatewayViewer\n}\n","import { isDefined } from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport type {\n RpcTransport,\n XyoRunnerRpcSchemas, XyoSignerRpcSchemas,\n XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport {\n JsonRpcXyoRunner, JsonRpcXyoViewer, LegacyPostMessageRpcTransport, MemoryXyoGateway, RpcXyoSigner, XyoConnection,\n} from '@xyo-network/xl1-rpc'\n\n/**\n * Check the global xyo object for gateways on the injected client.\n * @returns The gateways from the global xyo object, or undefined if it does not exist.\n */\nconst gateways = () => globalThis.xyo?.client?.gateways\n\n/**\n * Builds a gateway from the connection if it exists in the global xyo object.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.\n */\nconst buildGatewayFromConnection = (networkId: GatewayName) => {\n const connections = globalThis.xyo?.connections\n if (isDefined(connections) && isDefined(connections[networkId])) {\n // use the legacy post message transport to ensure compatibility with older implementations\n const legacyPostMessageRpcTransport = new LegacyPostMessageRpcTransport(networkId, globalThis.xyo.walletExtensionId() ?? '')\n const signer = new RpcXyoSigner(legacyPostMessageRpcTransport as RpcTransport<typeof XyoSignerRpcSchemas>)\n const viewer = new JsonRpcXyoViewer(legacyPostMessageRpcTransport as RpcTransport<typeof XyoViewerRpcSchemas>)\n const runner = new JsonRpcXyoRunner(legacyPostMessageRpcTransport as RpcTransport<typeof XyoRunnerRpcSchemas>)\n const connection = new XyoConnection({ viewer, runner })\n return new MemoryXyoGateway(signer, connection)\n }\n}\n\n/**\n * Retrieves a gateway from the wallet based on the provided networkId.\n * Includes fallback logic to build a gateway from the connection if it does not exist in\n * the global xyo object.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.\n */\nexport const resolveGateway = (networkId: GatewayName) => {\n const networkGateway = gateways()?.[networkId]\n if (isDefined(networkGateway)) {\n return networkGateway\n }\n const builtGateway = buildGatewayFromConnection(networkId)\n if (isDefined(builtGateway)) {\n return builtGateway\n }\n // If no gateway is found, log a warning\n console.warn(`No gateway found for networkId: ${networkId}`)\n}\n"],"mappings":"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","names":["isUndefined","isUndefinedOrNull","ShiftedBigInt","useEffect","useMemo","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","setBalancesError","useEffect","isCurrent","isUndefined","accountBalance","then","result","catch","err","console","error","undefined","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","usePromise","useCurrentBlock","refresh","viewer","usePromise","block","currentBlock","isUndefined","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useHttpRpcRunner","url","useMemo","isUndefined","transport","HttpRpcTransport","AllRpcSchemas","JsonRpcXyoRunner","isUndefined","MemoryXyoNetwork","useMemo","useNetwork","id","network","useMemo","isUndefined","MemoryXyoNetwork","MemoryXyoSigner","useMemo","useSigner","_provider","account","useMemo","MemoryXyoSigner","undefined","delay","isDefined","isUndefined","LocalNetwork","SequenceNetwork","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useEffect","useMemo","useState","INTERVAL","localRpcEndpoint","LocalNetwork","url","sequenceRpcEndpoint","SequenceNetwork","useCheckLocalRpc","isLocalProducer","useCheckRpc","useCheckSequenceRpc","endpoint","setIsLocalProducer","useState","error","setError","viewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","JsonRpcXyoViewer","useEffect","undefined","block","currentBlock","isDefined","err","delay","isUndefined","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useMemo","useHttpRpcViewer","url","resolvedViewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","JsonRpcXyoViewer","usePromise","isDefined","isTruthy","isUndefined","useEffect","useMemo","isDefined","JsonRpcXyoRunner","JsonRpcXyoViewer","LegacyPostMessageRpcTransport","MemoryXyoGateway","RpcXyoSigner","XyoConnection","gateways","globalThis","xyo","client","buildGatewayFromConnection","networkId","connections","isDefined","legacyPostMessageRpcTransport","LegacyPostMessageRpcTransport","walletExtensionId","signer","RpcXyoSigner","viewer","JsonRpcXyoViewer","runner","JsonRpcXyoRunner","connection","XyoConnection","MemoryXyoGateway","resolveGateway","networkGateway","builtGateway","console","warn","useViewerFromWallet","networkId","networkGateway","useMemo","isDefined","resolveGateway","gatewayViewer","rpcError","usePromise","isUndefined","connection","viewer","useEffect","isTruthy","console","error"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/react-chain-provider",
4
- "version": "1.12.0",
4
+ "version": "1.12.2",
5
5
  "description": "XYO Layer One API",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -41,15 +41,15 @@
41
41
  "src"
42
42
  ],
43
43
  "dependencies": {
44
- "@xylabs/delay": "~5.0.7",
45
- "@xylabs/hex": "~5.0.7",
46
- "@xylabs/react-promise": "~7.0.0",
47
- "@xylabs/typeof": "~5.0.7",
48
- "@xyo-network/account-model": "~5.0.2",
49
- "@xyo-network/chain-network-model": "~1.12.0",
50
- "@xyo-network/chain-wrappers": "~1.12.0",
51
- "@xyo-network/xl1-protocol": "~1.10.12",
52
- "@xyo-network/xl1-rpc": "~1.12.0",
44
+ "@xylabs/delay": "~5.0.10",
45
+ "@xylabs/hex": "~5.0.10",
46
+ "@xylabs/react-promise": "~7.0.4",
47
+ "@xylabs/typeof": "~5.0.10",
48
+ "@xyo-network/account-model": "~5.0.7",
49
+ "@xyo-network/chain-network-model": "~1.12.2",
50
+ "@xyo-network/chain-wrappers": "~1.12.2",
51
+ "@xyo-network/xl1-protocol": "~1.10.15",
52
+ "@xyo-network/xl1-rpc": "~1.12.2",
53
53
  "react": "~19.1.1"
54
54
  },
55
55
  "devDependencies": {
@@ -58,12 +58,11 @@
58
58
  "@mui/material": "~7.3.1",
59
59
  "@storybook/react-vite": "~9.1.2",
60
60
  "@types/react": "~19.1.10",
61
- "@xylabs/ts-scripts-yarn3": "~7.1.0",
62
- "@xylabs/tsconfig": "~7.1.0",
63
- "@xylabs/tsconfig-dom": "~7.1.0",
64
- "@xylabs/tsconfig-react": "~7.1.0",
65
- "@xyo-network/chain-network-model": "~1.12.0",
66
- "@xyo-network/react-chain-model": "~1.12.0",
61
+ "@xylabs/ts-scripts-yarn3": "~7.1.3",
62
+ "@xylabs/tsconfig": "~7.1.3",
63
+ "@xylabs/tsconfig-dom": "~7.1.3",
64
+ "@xylabs/tsconfig-react": "~7.1.3",
65
+ "@xyo-network/react-chain-model": "~1.12.2",
67
66
  "typescript": "~5.9.2"
68
67
  },
69
68
  "packageManager": "yarn@4.6.0",
@@ -1,9 +1,10 @@
1
1
  import type { Address } from '@xylabs/hex'
2
- import { usePromise } from '@xylabs/react-promise'
3
2
  import { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'
4
3
  import { ShiftedBigInt } from '@xyo-network/chain-wrappers'
5
4
  import type { AttoXL1, XyoViewer } from '@xyo-network/xl1-protocol'
6
- import { useMemo, useState } from 'react'
5
+ import {
6
+ useEffect, useMemo, useState,
7
+ } from 'react'
7
8
 
8
9
  export const useAddressBalance = (
9
10
  // address to get balance for
@@ -15,14 +16,33 @@ export const useAddressBalance = (
15
16
  ) => {
16
17
  const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()
17
18
  const [loading, setLoading] = useState(false)
19
+ const [balancesError, setBalancesError] = useState<Error>()
18
20
 
19
- const [, balancesError] = usePromise(async () => {
21
+ useEffect(() => {
22
+ let isCurrent = true
20
23
  if (isUndefined(viewer) || isUndefined(address)) return
21
- setLoading(true)
22
- setBalancesResult(undefined)
23
- const balance = await viewer.accountBalance(address)
24
- setBalancesResult(balance as AttoXL1)
25
- setLoading(false)
24
+ // Ensure the render is the current one before setting the state.
25
+ // This solves the issue of overlapping calls where a previous call takes
26
+ // longer than a subsequent one and returns a state value. Now, the latest
27
+ // result is always returned.
28
+ (viewer.accountBalance(address) as Promise<AttoXL1>).then((result) => {
29
+ if (isCurrent) {
30
+ setBalancesResult(result as AttoXL1)
31
+ setLoading(false)
32
+ }
33
+ })
34
+ .catch((err) => {
35
+ if (isCurrent) {
36
+ console.error('Error in queued call:', err)
37
+ setBalancesResult(undefined)
38
+ setBalancesError(err)
39
+ setLoading(false)
40
+ }
41
+ })
42
+
43
+ return () => {
44
+ isCurrent = false
45
+ }
26
46
  }, [address, viewer, refresh])
27
47
 
28
48
  useMemo(() => {