@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.
- package/dist/browser/hooks/viewer/resolveGateway.d.ts +11 -0
- package/dist/browser/hooks/viewer/resolveGateway.d.ts.map +1 -0
- package/dist/browser/hooks/viewer/useViewerFromWallet.d.ts +2 -1
- package/dist/browser/hooks/viewer/useViewerFromWallet.d.ts.map +1 -1
- package/dist/browser/index.mjs +99 -83
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +23 -22
- package/src/global.d.ts +1 -0
- package/src/hooks/viewer/resolveGateway.ts +49 -0
- package/src/hooks/viewer/useViewerFromWallet.ts +5 -4
|
@@ -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?:
|
|
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":"
|
|
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"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -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 =
|
|
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
|
-
}
|
|
46
|
+
};
|
|
62
47
|
|
|
63
48
|
// src/hooks/useCurrentBlock.ts
|
|
64
49
|
import { usePromise as usePromise2 } from "@xylabs/react-promise";
|
|
65
|
-
var useCurrentBlock =
|
|
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
|
-
|
|
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 {
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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
|
-
}
|
|
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 =
|
|
111
|
-
return useMemo4(() => account ? new MemoryXyoSigner(account) : void 0, [
|
|
112
|
-
|
|
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 {
|
|
121
|
-
|
|
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 =
|
|
113
|
+
var useCheckLocalRpc = () => {
|
|
126
114
|
const isLocalProducer = useCheckRpc(localRpcEndpoint);
|
|
127
115
|
return isLocalProducer;
|
|
128
|
-
}
|
|
129
|
-
var useCheckSequenceRpc =
|
|
116
|
+
};
|
|
117
|
+
var useCheckSequenceRpc = () => {
|
|
130
118
|
const isLocalProducer = useCheckRpc(sequenceRpcEndpoint);
|
|
131
119
|
return isLocalProducer;
|
|
132
|
-
}
|
|
133
|
-
var useCheckRpc =
|
|
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
|
-
|
|
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 {
|
|
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 =
|
|
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
|
-
}
|
|
166
|
+
};
|
|
184
167
|
|
|
185
168
|
// src/hooks/viewer/useViewerFromWallet.ts
|
|
186
169
|
import { usePromise as usePromise3 } from "@xylabs/react-promise";
|
|
187
|
-
import {
|
|
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
|
-
|
|
190
|
-
|
|
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 (
|
|
193
|
-
return
|
|
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
|
-
}
|
|
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.
|
|
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": "
|
|
45
|
-
"@xylabs/hex": "
|
|
46
|
-
"@xylabs/react-promise": "
|
|
47
|
-
"@xylabs/typeof": "
|
|
48
|
-
"@xyo-network/account-model": "
|
|
49
|
-
"@xyo-network/chain-network-model": "
|
|
50
|
-
"@xyo-network/chain-wrappers": "
|
|
51
|
-
"@xyo-network/xl1-protocol": "
|
|
52
|
-
"@xyo-network/xl1-rpc": "
|
|
53
|
-
"react": "
|
|
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": "
|
|
57
|
-
"@emotion/styled": "
|
|
58
|
-
"@mui/material": "
|
|
59
|
-
"@storybook/react-vite": "
|
|
60
|
-
"@types/react": "
|
|
61
|
-
"@xylabs/ts-scripts-yarn3": "
|
|
62
|
-
"@xylabs/tsconfig
|
|
63
|
-
"@
|
|
64
|
-
"@
|
|
65
|
-
"
|
|
66
|
-
"
|
|
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
|
@@ -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
|
-
|
|
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?:
|
|
16
|
+
export const useViewerFromWallet = (networkId?: GatewayName) => {
|
|
16
17
|
const networkGateway = useMemo(() => {
|
|
17
|
-
if (isDefined(networkId)
|
|
18
|
-
return
|
|
18
|
+
if (isDefined(networkId)) {
|
|
19
|
+
return resolveGateway(networkId)
|
|
19
20
|
}
|
|
20
21
|
}, [networkId])
|
|
21
22
|
|