@xyo-network/react-chain-provider 1.9.0 → 1.10.1

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.
@@ -0,0 +1,11 @@
1
+ import type { GatewayName } from '@xyo-network/xl1-protocol';
2
+ import { MemoryXyoGateway } from '@xyo-network/xl1-rpc';
3
+ /**
4
+ * Retrieves a gateway from the wallet based on the provided networkId.
5
+ * Includes fallback logic to build a gateway from the connection if it does not exist in
6
+ * the global xyo object.
7
+ * @param networkId - a network id like 'sequence', 'local', etc.
8
+ * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.
9
+ */
10
+ export declare const resolveGateway: (networkId: GatewayName) => import("@xyo-network/xl1-protocol").XyoGatewayProvider | MemoryXyoGateway | undefined;
11
+ //# sourceMappingURL=resolveGateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveGateway.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/resolveGateway.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAC8D,gBAAgB,EACpF,MAAM,sBAAsB,CAAA;AA0B7B;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,WAAW,0FAWpD,CAAA"}
@@ -1,8 +1,9 @@
1
+ import type { GatewayName } from '@xyo-network/xl1-protocol';
1
2
  /**
2
3
  * Creates a JsonRpcXyoViewer instance based on the provided networkId.
3
4
  * @param networkId - a network id like 'sequence', 'local', etc.
4
5
  * @returns An instance of XyoViewer if the networkId is found in wallet gateways
5
6
  * otherwise undefined.
6
7
  */
7
- export declare const useViewerFromWallet: (networkId?: string) => import("@xyo-network/xl1-protocol").XyoViewer | undefined;
8
+ export declare const useViewerFromWallet: (networkId?: GatewayName) => import("@xyo-network/xl1-protocol").XyoViewer | undefined;
8
9
  //# sourceMappingURL=useViewerFromWallet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useViewerFromWallet.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/useViewerFromWallet.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,YAAY,MAAM,8DAoBrD,CAAA"}
1
+ {"version":3,"file":"useViewerFromWallet.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/useViewerFromWallet.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAK5D;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,YAAY,WAAW,8DAoB1D,CAAA"}
@@ -1,12 +1,9 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
1
  // src/hooks/useAddressBalance.ts
5
2
  import { usePromise } from "@xylabs/react-promise";
6
3
  import { isUndefined, isUndefinedOrNull } from "@xylabs/typeof";
7
4
  import { ShiftedBigInt } from "@xyo-network/chain-wrappers";
8
5
  import { useMemo, useState } from "react";
9
- var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
6
+ var useAddressBalance = (address, viewer, refresh) => {
10
7
  const [balancesResult, setBalancesResult] = useState();
11
8
  const [loading, setLoading] = useState(false);
12
9
  const [, balancesError] = usePromise(async () => {
@@ -16,18 +13,12 @@ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
16
13
  const balance = await viewer.accountBalance(address);
17
14
  setBalancesResult(balance);
18
15
  setLoading(false);
19
- }, [
20
- address,
21
- viewer,
22
- refresh
23
- ]);
16
+ }, [address, viewer, refresh]);
24
17
  useMemo(() => {
25
18
  if (balancesError) {
26
19
  setLoading(false);
27
20
  }
28
- }, [
29
- balancesError
30
- ]);
21
+ }, [balancesError]);
31
22
  const shiftedBigInt = useMemo(() => {
32
23
  if (typeof balancesResult !== "bigint") return;
33
24
  return new ShiftedBigInt(balancesResult, {
@@ -37,19 +28,13 @@ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
37
28
  minDecimals: 1,
38
29
  locale: navigator.language
39
30
  });
40
- }, [
41
- balancesResult
42
- ]);
31
+ }, [balancesResult]);
43
32
  const balanceIntlFriendly = useMemo(() => {
44
33
  return shiftedBigInt?.toFullString();
45
- }, [
46
- shiftedBigInt
47
- ]);
34
+ }, [shiftedBigInt]);
48
35
  const shortBalanceIntlFriendly = useMemo(() => {
49
36
  return isUndefinedOrNull(balancesResult) ? void 0 : balancesResult < 1000000000000n && balancesResult > 0n ? "<0.00001" : shiftedBigInt?.toShortString();
50
- }, [
51
- shiftedBigInt
52
- ]);
37
+ }, [shiftedBigInt]);
53
38
  return {
54
39
  address,
55
40
  balanceForAddress: balancesResult,
@@ -58,79 +43,82 @@ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
58
43
  error: balancesError,
59
44
  loading
60
45
  };
61
- }, "useAddressBalance");
46
+ };
62
47
 
63
48
  // src/hooks/useCurrentBlock.ts
64
49
  import { usePromise as usePromise2 } from "@xylabs/react-promise";
65
- var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
50
+ var useCurrentBlock = (refresh = 1, viewer) => {
66
51
  return usePromise2(async () => {
67
52
  if (viewer && refresh > 0) {
68
53
  const block = await viewer.currentBlock();
69
54
  return block;
70
55
  }
71
- }, [
72
- viewer,
73
- refresh
74
- ]);
75
- }, "useCurrentBlock");
56
+ }, [viewer, refresh]);
57
+ };
76
58
 
77
59
  // src/hooks/useHttpRpcRunner.ts
78
60
  import { isUndefined as isUndefined2 } from "@xylabs/typeof";
79
- import { AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner } from "@xyo-network/xl1-rpc";
61
+ import {
62
+ AllRpcSchemas,
63
+ HttpRpcTransport,
64
+ JsonRpcXyoRunner
65
+ } from "@xyo-network/xl1-rpc";
80
66
  import { useMemo as useMemo2 } from "react";
81
- var useHttpRpcRunner = /* @__PURE__ */ __name((url) => {
67
+ var useHttpRpcRunner = (url) => {
82
68
  return useMemo2(() => {
83
69
  if (isUndefined2(url)) {
84
70
  return;
85
71
  }
86
72
  const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas);
87
73
  return new JsonRpcXyoRunner(transport);
88
- }, [
89
- url
90
- ]);
91
- }, "useHttpRpcRunner");
74
+ }, [url]);
75
+ };
92
76
 
93
77
  // src/hooks/useNetwork.ts
94
78
  import { isUndefined as isUndefined3 } from "@xylabs/typeof";
95
79
  import { MemoryXyoNetwork } from "@xyo-network/xl1-rpc";
96
80
  import { useMemo as useMemo3 } from "react";
97
- var useNetwork = /* @__PURE__ */ __name((id) => {
81
+ var useNetwork = (id) => {
98
82
  const network = useMemo3(() => {
99
83
  if (isUndefined3(id)) return;
100
84
  return new MemoryXyoNetwork(id);
101
- }, [
102
- id
103
- ]);
85
+ }, [id]);
104
86
  return network;
105
- }, "useNetwork");
87
+ };
106
88
 
107
89
  // src/hooks/useSigner.ts
108
90
  import { MemoryXyoSigner } from "@xyo-network/xl1-rpc";
109
91
  import { useMemo as useMemo4 } from "react";
110
- var useSigner = /* @__PURE__ */ __name((_provider, account) => {
111
- return useMemo4(() => account ? new MemoryXyoSigner(account) : void 0, [
112
- account
113
- ]);
114
- }, "useSigner");
92
+ var useSigner = (_provider, account) => {
93
+ return useMemo4(() => account ? new MemoryXyoSigner(account) : void 0, [account]);
94
+ };
115
95
 
116
96
  // src/hooks/viewer/useCheckRpc.ts
117
97
  import { delay } from "@xylabs/delay";
118
98
  import { isDefined, isUndefined as isUndefined4 } from "@xylabs/typeof";
119
99
  import { LocalNetwork, SequenceNetwork } from "@xyo-network/chain-network-model";
120
- import { HttpRpcTransport as HttpRpcTransport2, JsonRpcXyoViewer, XyoViewerRpcSchemas } from "@xyo-network/xl1-rpc";
121
- import { useEffect, useMemo as useMemo5, useState as useState2 } from "react";
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";
122
110
  var INTERVAL = 5e3;
123
111
  var localRpcEndpoint = `${LocalNetwork.url}/rpc`;
124
112
  var sequenceRpcEndpoint = `${SequenceNetwork.url}/rpc`;
125
- var useCheckLocalRpc = /* @__PURE__ */ __name(() => {
113
+ var useCheckLocalRpc = () => {
126
114
  const isLocalProducer = useCheckRpc(localRpcEndpoint);
127
115
  return isLocalProducer;
128
- }, "useCheckLocalRpc");
129
- var useCheckSequenceRpc = /* @__PURE__ */ __name(() => {
116
+ };
117
+ var useCheckSequenceRpc = () => {
130
118
  const isLocalProducer = useCheckRpc(sequenceRpcEndpoint);
131
119
  return isLocalProducer;
132
- }, "useCheckSequenceRpc");
133
- var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
120
+ };
121
+ var useCheckRpc = (endpoint) => {
134
122
  const [isLocalProducer, setIsLocalProducer] = useState2(false);
135
123
  const [error, setError] = useState2();
136
124
  const viewer = useMemo5(() => {
@@ -138,9 +126,7 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
138
126
  const transport = new HttpRpcTransport2(endpoint, XyoViewerRpcSchemas);
139
127
  const viewer2 = new JsonRpcXyoViewer(transport);
140
128
  return viewer2;
141
- }, [
142
- endpoint
143
- ]);
129
+ }, [endpoint]);
144
130
  useEffect(() => {
145
131
  if (isUndefined4(viewer)) return;
146
132
  void (async () => {
@@ -156,61 +142,91 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
156
142
  await delay(INTERVAL);
157
143
  }
158
144
  })();
159
- }, [
160
- viewer
161
- ]);
162
- return {
163
- isLocalProducer,
164
- error
165
- };
166
- }, "useCheckRpc");
145
+ }, [viewer]);
146
+ return { isLocalProducer, error };
147
+ };
167
148
 
168
149
  // src/hooks/viewer/useHttpRpcViewer.ts
169
150
  import { isUndefined as isUndefined5 } from "@xylabs/typeof";
170
- import { HttpRpcTransport as HttpRpcTransport3, JsonRpcXyoViewer as JsonRpcXyoViewer2, XyoViewerRpcSchemas as XyoViewerRpcSchemas2 } from "@xyo-network/xl1-rpc";
151
+ import {
152
+ HttpRpcTransport as HttpRpcTransport3,
153
+ JsonRpcXyoViewer as JsonRpcXyoViewer2,
154
+ XyoViewerRpcSchemas as XyoViewerRpcSchemas2
155
+ } from "@xyo-network/xl1-rpc";
171
156
  import { useMemo as useMemo6 } from "react";
172
- var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
157
+ var useHttpRpcViewer = (url) => {
173
158
  const resolvedViewer = useMemo6(() => {
174
159
  if (isUndefined5(url)) {
175
160
  return;
176
161
  }
177
162
  const transport = new HttpRpcTransport3(`${url}/rpc`, XyoViewerRpcSchemas2);
178
163
  return new JsonRpcXyoViewer2(transport);
179
- }, [
180
- url
181
- ]);
164
+ }, [url]);
182
165
  return resolvedViewer;
183
- }, "useHttpRpcViewer");
166
+ };
184
167
 
185
168
  // src/hooks/viewer/useViewerFromWallet.ts
186
169
  import { usePromise as usePromise3 } from "@xylabs/react-promise";
187
- import { isDefined as isDefined2, isTruthy, isUndefined as isUndefined6 } from "@xylabs/typeof";
170
+ import {
171
+ isDefined as isDefined3,
172
+ isTruthy,
173
+ isUndefined as isUndefined6
174
+ } from "@xylabs/typeof";
188
175
  import { useEffect as useEffect2, useMemo as useMemo7 } from "react";
189
- var gateways = /* @__PURE__ */ __name(() => globalThis.xyo?.client?.gateways, "gateways");
190
- var useViewerFromWallet = /* @__PURE__ */ __name((networkId) => {
176
+
177
+ // src/hooks/viewer/resolveGateway.ts
178
+ 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) => {
189
+ const connections = globalThis.xyo?.connections;
190
+ if (isDefined2(connections) && isDefined2(connections[networkId])) {
191
+ const legacyPostMessageRpcTransport = new LegacyPostMessageRpcTransport(networkId, void 0, globalThis.xyo.walletExtensionId() ?? "");
192
+ const signer = new RpcXyoSigner(legacyPostMessageRpcTransport);
193
+ const viewer = new JsonRpcXyoViewer3(legacyPostMessageRpcTransport);
194
+ const runner = new JsonRpcXyoRunner2(legacyPostMessageRpcTransport);
195
+ const connection = new XyoConnection({ viewer, runner });
196
+ return new MemoryXyoGateway(signer, connection);
197
+ }
198
+ };
199
+ var resolveGateway = (networkId) => {
200
+ const networkGateway = gateways()?.[networkId];
201
+ if (isDefined2(networkGateway)) {
202
+ return networkGateway;
203
+ }
204
+ const builtGateway = buildGatewayFromConnection(networkId);
205
+ if (isDefined2(builtGateway)) {
206
+ return builtGateway;
207
+ }
208
+ console.warn(`No gateway found for networkId: ${networkId}`);
209
+ };
210
+
211
+ // src/hooks/viewer/useViewerFromWallet.ts
212
+ var useViewerFromWallet = (networkId) => {
191
213
  const networkGateway = useMemo7(() => {
192
- if (isDefined2(networkId) && isDefined2(gateways()?.[networkId])) {
193
- return gateways()?.[networkId];
214
+ if (isDefined3(networkId)) {
215
+ return resolveGateway(networkId);
194
216
  }
195
- }, [
196
- networkId
197
- ]);
217
+ }, [networkId]);
198
218
  const [gatewayViewer, rpcError] = usePromise3(async () => {
199
219
  if (isUndefined6(networkGateway)) return;
200
220
  const connection = await networkGateway.connection();
201
221
  return connection.viewer;
202
- }, [
203
- networkGateway
204
- ]);
222
+ }, [networkGateway]);
205
223
  useEffect2(() => {
206
224
  if (isTruthy(rpcError)) {
207
225
  console.error("Error creating viewer from wallet:", rpcError);
208
226
  }
209
- }, [
210
- rpcError
211
- ]);
227
+ }, [rpcError]);
212
228
  return gatewayViewer;
213
- }, "useViewerFromWallet");
229
+ };
214
230
  export {
215
231
  useAddressBalance,
216
232
  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"],"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 {\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)\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 { useEffect, useMemo } from 'react'\n\nconst gateways = () => globalThis.xyo?.client?.gateways\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?: string) => {\n const networkGateway = useMemo(() => {\n if (isDefined(networkId) && isDefined(gateways()?.[networkId])) {\n return gateways()?.[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"],"mappings":";;;;AACA,SAASA,kBAAkB;AAC3B,SAASC,aAAaC,yBAAyB;AAC/C,SAASC,qBAAqB;AAE9B,SAASC,SAASC,gBAAgB;AAE3B,IAAMC,oBAAoB,wBAE/BC,SAEAC,QAEAC,YAAAA;AAEA,QAAM,CAACC,gBAAgBC,iBAAAA,IAAqBC,SAAAA;AAC5C,QAAM,CAACC,SAASC,UAAAA,IAAcF,SAAS,KAAA;AAEvC,QAAM,CAAA,EAAGG,aAAAA,IAAiBC,WAAW,YAAA;AACnC,QAAIC,YAAYT,MAAAA,KAAWS,YAAYV,OAAAA,EAAU;AACjDO,eAAW,IAAA;AACXH,sBAAkBO,MAAAA;AAClB,UAAMC,UAAU,MAAMX,OAAOY,eAAeb,OAAAA;AAC5CI,sBAAkBQ,OAAAA;AAClBL,eAAW,KAAA;EACb,GAAG;IAACP;IAASC;IAAQC;GAAQ;AAE7BY,UAAQ,MAAA;AACN,QAAIN,eAAe;AACjBD,iBAAW,KAAA;IACb;EACF,GAAG;IAACC;GAAc;AAElB,QAAMO,gBAAgBD,QAAQ,MAAA;AAC5B,QAAI,OAAOX,mBAAmB,SAAU;AACxC,WAAO,IAAIa,cAAcb,gBAAgB;MACvCc,QAAQ;MAAIC,YAAY;MAAIC,eAAe;MAAGC,aAAa;MAAGC,QAAQC,UAAUC;IAClF,CAAA;EACF,GAAG;IAACpB;GAAe;AAEnB,QAAMqB,sBAAsBV,QAAQ,MAAA;AAClC,WAAOC,eAAeU,aAAAA;EACxB,GAAG;IAACV;GAAc;AAElB,QAAMW,2BAA2BZ,QAAQ,MAAA;AACvC,WAAOa,kBAAkBxB,cAAAA,IACrBQ,SACCR,iBAAiB,kBAAsBA,iBAAiB,KAAM,aAAaY,eAAea,cAAAA;EACjG,GAAG;IAACb;GAAc;AAElB,SAAO;IACLf;IACA6B,mBAAmB1B;IACnBqB;IACAE;IACAI,OAAOtB;IACPF;EACF;AACF,GAnDiC;;;ACPjC,SAASyB,cAAAA,mBAAkB;AAGpB,IAAMC,kBAAkB,wBAACC,UAAU,GAAGC,WAAAA;AAC3C,SAAOC,YAAW,YAAA;AAChB,QAAID,UAAUD,UAAU,GAAG;AACzB,YAAMG,QAAQ,MAAMF,OAAOG,aAAY;AACvC,aAAOD;IACT;EACF,GAAG;IAACF;IAAQD;GAAQ;AACtB,GAP+B;;;ACH/B,SAASK,eAAAA,oBAAmB;AAC5B,SACEC,eAAeC,kBAAkBC,wBAC5B;AACP,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,mBAAmB,wBAACC,QAAAA;AAC/B,SAAOC,SAAQ,MAAA;AACb,QAAIC,aAAYF,GAAAA,GAAM;AACpB;IACF;AACA,UAAMG,YAAY,IAAIC,iBAAiB,GAAGJ,GAAAA,QAAWK,aAAAA;AACrD,WAAO,IAAIC,iBAAiBH,SAAAA;EAC9B,GAAG;IAACH;GAAI;AACV,GARgC;;;ACNhC,SAASO,eAAAA,oBAAmB;AAE5B,SAASC,wBAAwB;AACjC,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,aAAa,wBAACC,OAAAA;AACzB,QAAMC,UAAUC,SAAQ,MAAA;AACtB,QAAIC,aAAYH,EAAAA,EAAK;AACrB,WAAO,IAAII,iBAAiBJ,EAAAA;EAC9B,GAAG;IAACA;GAAG;AAEP,SAAOC;AACT,GAP0B;;;ACH1B,SAASI,uBAAuB;AAChC,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,YAAY,wBAACC,WAAmCC,YAAAA;AAC3D,SAAOC,SAA+B,MAAMD,UAAU,IAAIE,gBAAgBF,OAAAA,IAAWG,QAAW;IAACH;GAAQ;AAC3G,GAFyB;;;ACLzB,SAASI,aAAa;AACtB,SAASC,WAAWC,eAAAA,oBAAmB;AACvC,SAASC,cAAcC,uBAAuB;AAC9C,SACEC,oBAAAA,mBAAkBC,kBAAkBC,2BAC/B;AACP,SACEC,WAAWC,WAAAA,UAASC,YAAAA,iBACf;AAEP,IAAMC,WAAW;AAEjB,IAAMC,mBAA2B,GAAGC,aAAaC,GAAG;AACpD,IAAMC,sBAA8B,GAAGC,gBAAgBF,GAAG;AAEnD,IAAMG,mBAAmB,6BAAA;AAC9B,QAAMC,kBAAkBC,YAAYP,gBAAAA;AACpC,SAAOM;AACT,GAHgC;AAKzB,IAAME,sBAAsB,6BAAA;AACjC,QAAMF,kBAAkBC,YAAYJ,mBAAAA;AACpC,SAAOG;AACT,GAHmC;AAK5B,IAAMC,cAAc,wBAACE,aAAAA;AAC1B,QAAM,CAACH,iBAAiBI,kBAAAA,IAAsBC,UAAS,KAAA;AACvD,QAAM,CAACC,OAAOC,QAAAA,IAAYF,UAAAA;AAE1B,QAAMG,SAASC,SAAQ,MAAA;AACrB,QAAIC,aAAYP,QAAAA,EAAW;AAE3B,UAAMQ,YAAY,IAAIC,kBAAiBT,UAAUU,mBAAAA;AACjD,UAAML,UAAS,IAAIM,iBAAiBH,SAAAA;AACpC,WAAOH;EACT,GAAG;IAACL;GAAS;AAEbY,YAAU,MAAA;AACR,QAAIL,aAAYF,MAAAA,EAAS;AAEzB,UAAM,YAAA;AACJD,eAASS,MAAAA;AACT,aAAO,CAAChB,iBAAiB;AACvB,YAAI;AACF,gBAAMiB,QAAQ,MAAMT,OAAOU,aAAY;AACvCd,6BAAmBe,UAAUF,KAAAA,CAAAA;QAC/B,SAASG,KAAK;AACZb,mBAASa,GAAAA;AACThB,6BAAmB,KAAA;QACrB;AACA,cAAMiB,MAAM5B,QAAAA;MACd;IACF,GAAA;EACF,GAAG;IAACe;GAAO;AAEX,SAAO;IAAER;IAAiBM;EAAM;AAClC,GA/B2B;;;ACzB3B,SAASgB,eAAAA,oBAAmB;AAC5B,SACEC,oBAAAA,mBAAkBC,oBAAAA,mBAAkBC,uBAAAA,4BAC/B;AACP,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,mBAAmB,wBAACC,QAAAA;AAC/B,QAAMC,iBAAiBC,SAAQ,MAAA;AAC7B,QAAIC,aAAYH,GAAAA,GAAM;AACpB;IACF;AACA,UAAMI,YAAY,IAAIC,kBAAiB,GAAGL,GAAAA,QAAWM,oBAAAA;AACrD,WAAO,IAAIC,kBAAiBH,SAAAA;EAC9B,GAAG;IAACJ;GAAI;AAER,SAAOC;AACT,GAVgC;;;ACNhC,SAASO,cAAAA,mBAAkB;AAC3B,SACEC,aAAAA,YAAWC,UAAUC,eAAAA,oBAChB;AACP,SAASC,aAAAA,YAAWC,WAAAA,gBAAe;AAEnC,IAAMC,WAAW,6BAAMC,WAAWC,KAAKC,QAAQH,UAA9B;AAQV,IAAMI,sBAAsB,wBAACC,cAAAA;AAClC,QAAMC,iBAAiBC,SAAQ,MAAA;AAC7B,QAAIC,WAAUH,SAAAA,KAAcG,WAAUR,SAAAA,IAAaK,SAAAA,CAAU,GAAG;AAC9D,aAAOL,SAAAA,IAAaK,SAAAA;IACtB;EACF,GAAG;IAACA;GAAU;AAEd,QAAM,CAACI,eAAeC,QAAAA,IAAYC,YAAW,YAAA;AAC3C,QAAIC,aAAYN,cAAAA,EAAiB;AACjC,UAAMO,aAAa,MAAMP,eAAeO,WAAU;AAClD,WAAOA,WAAWC;EACpB,GAAG;IAACR;GAAe;AAEnBS,EAAAA,WAAU,MAAA;AACR,QAAIC,SAASN,QAAAA,GAAW;AACtBO,cAAQC,MAAM,sCAAsCR,QAAAA;IACtD;EACF,GAAG;IAACA;GAAS;AAEb,SAAOD;AACT,GApBmC;","names":["usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","usePromise","isUndefined","undefined","balance","accountBalance","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","error","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","gateways","globalThis","xyo","client","useViewerFromWallet","networkId","networkGateway","useMemo","isDefined","gatewayViewer","rpcError","usePromise","isUndefined","connection","viewer","useEffect","isTruthy","console","error"]}
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 {\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)\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 {\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, undefined, globalThis.xyo.walletExtensionId() ?? '')\n const signer = new RpcXyoSigner(legacyPostMessageRpcTransport)\n const viewer = new JsonRpcXyoViewer(legacyPostMessageRpcTransport)\n const runner = new JsonRpcXyoRunner(legacyPostMessageRpcTransport)\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"]}
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.9.0",
4
+ "version": "1.10.1",
5
5
  "description": "XYO Layer One API",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -41,29 +41,30 @@
41
41
  "src"
42
42
  ],
43
43
  "dependencies": {
44
- "@xylabs/delay": "^5.0.0",
45
- "@xylabs/hex": "^5.0.0",
46
- "@xylabs/react-promise": "^7.0.0",
47
- "@xylabs/typeof": "^5.0.0",
48
- "@xyo-network/account-model": "^5.0.0",
49
- "@xyo-network/chain-network-model": "^1.9.0",
50
- "@xyo-network/chain-wrappers": "^1.9.0",
51
- "@xyo-network/xl1-protocol": "^1.8.0",
52
- "@xyo-network/xl1-rpc": "^1.9.0",
53
- "react": "^19.1.1"
44
+ "@xylabs/delay": "~5.0.3",
45
+ "@xylabs/hex": "~5.0.3",
46
+ "@xylabs/react-promise": "~7.0.0",
47
+ "@xylabs/typeof": "~5.0.3",
48
+ "@xyo-network/account-model": "~5.0.1",
49
+ "@xyo-network/chain-network-model": "~1.10.1",
50
+ "@xyo-network/chain-wrappers": "~1.10.1",
51
+ "@xyo-network/xl1-protocol": "~1.9.3",
52
+ "@xyo-network/xl1-rpc": "~1.10.1",
53
+ "react": "~19.1.1"
54
54
  },
55
55
  "devDependencies": {
56
- "@emotion/react": "^11.14.0",
57
- "@emotion/styled": "^11.14.1",
58
- "@mui/material": "^7.2.0",
59
- "@storybook/react-vite": "^9.0.18",
60
- "@types/react": "^19.1.9",
61
- "@xylabs/ts-scripts-yarn3": "^7.0.2",
62
- "@xylabs/tsconfig-react": "^7.0.2",
63
- "@xyo-network/chain-network-model": "^1.9.0",
64
- "@xyo-network/react-chain-model": "^1.9.0",
65
- "knip": "^5.62.0",
66
- "typescript": "^5.8.3"
56
+ "@emotion/react": "~11.14.0",
57
+ "@emotion/styled": "~11.14.1",
58
+ "@mui/material": "~7.3.1",
59
+ "@storybook/react-vite": "~9.1.1",
60
+ "@types/react": "~19.1.9",
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.10.1",
66
+ "@xyo-network/react-chain-model": "~1.10.1",
67
+ "typescript": "~5.9.2"
67
68
  },
68
69
  "packageManager": "yarn@4.6.0",
69
70
  "engines": {
package/src/global.d.ts CHANGED
@@ -6,5 +6,6 @@ export declare global {
6
6
  }
7
7
 
8
8
  var xyo: XyoGlobal
9
+ /** @deprecated - use globalThis.xyo.walletExtensionId() instead */
9
10
  var xyoWalletExtensionId: string
10
11
  }
@@ -0,0 +1,49 @@
1
+ import { isDefined } from '@xylabs/typeof'
2
+ import type { GatewayName } from '@xyo-network/xl1-protocol'
3
+ import {
4
+ JsonRpcXyoRunner, JsonRpcXyoViewer, LegacyPostMessageRpcTransport, MemoryXyoGateway, RpcXyoSigner, XyoConnection,
5
+ } from '@xyo-network/xl1-rpc'
6
+
7
+ /**
8
+ * Check the global xyo object for gateways on the injected client.
9
+ * @returns The gateways from the global xyo object, or undefined if it does not exist.
10
+ */
11
+ const gateways = () => globalThis.xyo?.client?.gateways
12
+
13
+ /**
14
+ * Builds a gateway from the connection if it exists in the global xyo object.
15
+ * @param networkId - a network id like 'sequence', 'local', etc.
16
+ * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.
17
+ */
18
+ const buildGatewayFromConnection = (networkId: GatewayName) => {
19
+ const connections = globalThis.xyo?.connections
20
+ if (isDefined(connections) && isDefined(connections[networkId])) {
21
+ // use the legacy post message transport to ensure compatibility with older implementations
22
+ const legacyPostMessageRpcTransport = new LegacyPostMessageRpcTransport(networkId, undefined, globalThis.xyo.walletExtensionId() ?? '')
23
+ const signer = new RpcXyoSigner(legacyPostMessageRpcTransport)
24
+ const viewer = new JsonRpcXyoViewer(legacyPostMessageRpcTransport)
25
+ const runner = new JsonRpcXyoRunner(legacyPostMessageRpcTransport)
26
+ const connection = new XyoConnection({ viewer, runner })
27
+ return new MemoryXyoGateway(signer, connection)
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Retrieves a gateway from the wallet based on the provided networkId.
33
+ * Includes fallback logic to build a gateway from the connection if it does not exist in
34
+ * the global xyo object.
35
+ * @param networkId - a network id like 'sequence', 'local', etc.
36
+ * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.
37
+ */
38
+ export const resolveGateway = (networkId: GatewayName) => {
39
+ const networkGateway = gateways()?.[networkId]
40
+ if (isDefined(networkGateway)) {
41
+ return networkGateway
42
+ }
43
+ const builtGateway = buildGatewayFromConnection(networkId)
44
+ if (isDefined(builtGateway)) {
45
+ return builtGateway
46
+ }
47
+ // If no gateway is found, log a warning
48
+ console.warn(`No gateway found for networkId: ${networkId}`)
49
+ }
@@ -2,9 +2,10 @@ import { usePromise } from '@xylabs/react-promise'
2
2
  import {
3
3
  isDefined, isTruthy, isUndefined,
4
4
  } from '@xylabs/typeof'
5
+ import type { GatewayName } from '@xyo-network/xl1-protocol'
5
6
  import { useEffect, useMemo } from 'react'
6
7
 
7
- const gateways = () => globalThis.xyo?.client?.gateways
8
+ import { resolveGateway } from './resolveGateway.ts'
8
9
 
9
10
  /**
10
11
  * Creates a JsonRpcXyoViewer instance based on the provided networkId.
@@ -12,10 +13,10 @@ const gateways = () => globalThis.xyo?.client?.gateways
12
13
  * @returns An instance of XyoViewer if the networkId is found in wallet gateways
13
14
  * otherwise undefined.
14
15
  */
15
- export const useViewerFromWallet = (networkId?: string) => {
16
+ export const useViewerFromWallet = (networkId?: GatewayName) => {
16
17
  const networkGateway = useMemo(() => {
17
- if (isDefined(networkId) && isDefined(gateways()?.[networkId])) {
18
- return gateways()?.[networkId]
18
+ if (isDefined(networkId)) {
19
+ return resolveGateway(networkId)
19
20
  }
20
21
  }, [networkId])
21
22