@xyo-network/react-chain-network 1.19.10 → 1.19.12
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/components/broadcast/Drawer.d.ts +5 -2
- package/dist/browser/components/broadcast/Drawer.d.ts.map +1 -1
- package/dist/browser/components/broadcast/details/Card.d.ts +3 -2
- package/dist/browser/components/broadcast/details/Card.d.ts.map +1 -1
- package/dist/browser/components/broadcast/details/SummaryStack.d.ts +2 -0
- package/dist/browser/components/broadcast/details/SummaryStack.d.ts.map +1 -1
- package/dist/browser/components/broadcast/details/SummaryStack.stories.d.ts +8 -0
- package/dist/browser/components/broadcast/details/SummaryStack.stories.d.ts.map +1 -0
- package/dist/browser/components/broadcast/usePaginatedEventPairs.d.ts +13 -0
- package/dist/browser/components/broadcast/usePaginatedEventPairs.d.ts.map +1 -0
- package/dist/browser/hooks/provider/UseViewerInPage.stories.d.ts.map +1 -1
- package/dist/browser/hooks/provider/useRpcBroadcastListener.d.ts +3 -2
- package/dist/browser/hooks/provider/useRpcBroadcastListener.d.ts.map +1 -1
- package/dist/browser/index.mjs +469 -337
- package/dist/browser/index.mjs.map +1 -1
- package/dist/browser/model/BroadcastRpc.d.ts +3 -0
- package/dist/browser/model/BroadcastRpc.d.ts.map +1 -1
- package/package.json +11 -10
- package/src/components/broadcast/Drawer.tsx +66 -14
- package/src/components/broadcast/details/Card.tsx +26 -9
- package/src/components/broadcast/details/SummaryStack.stories.tsx +36 -0
- package/src/components/broadcast/details/SummaryStack.tsx +41 -3
- package/src/components/broadcast/usePaginatedEventPairs.ts +64 -0
- package/src/hooks/provider/UseViewerInPage.stories.tsx +10 -8
- package/src/hooks/provider/useRpcBroadcastListener.ts +36 -6
- package/src/model/BroadcastRpc.ts +4 -0
- package/dist/browser/components/broadcast/helpers/formatEvents.d.ts +0 -7
- package/dist/browser/components/broadcast/helpers/formatEvents.d.ts.map +0 -1
- package/dist/browser/components/broadcast/helpers/index.d.ts +0 -2
- package/dist/browser/components/broadcast/helpers/index.d.ts.map +0 -1
- package/src/components/broadcast/helpers/formatEvents.ts +0 -40
- package/src/components/broadcast/helpers/index.ts +0 -1
package/dist/browser/index.mjs
CHANGED
|
@@ -2,15 +2,288 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
3
|
|
|
4
4
|
// src/components/broadcast/Drawer.tsx
|
|
5
|
-
import { Drawer, Stack as Stack3, Typography as Typography3 } from "@mui/material";
|
|
6
|
-
import
|
|
5
|
+
import { Box, Button, Drawer, Pagination, Stack as Stack3, Typography as Typography3 } from "@mui/material";
|
|
6
|
+
import React5 from "react";
|
|
7
|
+
|
|
8
|
+
// src/hooks/provider/useActiveNetworkCurrentBlock.ts
|
|
9
|
+
import { useCurrentBlock, useViewerFromWallet as useViewerFromWallet2 } from "@xyo-network/react-chain-provider";
|
|
10
|
+
|
|
11
|
+
// src/hooks/provider/useViewerInPage.ts
|
|
12
|
+
import { isDefined as isDefined2, isNull, isUndefined } from "@xylabs/sdk-js";
|
|
13
|
+
import { useHttpRpcViewer, useViewerFromWallet } from "@xyo-network/react-chain-provider";
|
|
14
|
+
|
|
15
|
+
// src/context/network/context.ts
|
|
16
|
+
import { createContextEx } from "@xylabs/react-shared";
|
|
17
|
+
var ChainNetworkContext = createContextEx();
|
|
18
|
+
|
|
19
|
+
// src/context/network/Provider.tsx
|
|
20
|
+
import { ErrorRender } from "@xylabs/react-error";
|
|
21
|
+
import { usePromise } from "@xylabs/react-promise";
|
|
22
|
+
import { isDefined } from "@xylabs/sdk-js";
|
|
23
|
+
import { MainNetwork } from "@xyo-network/xl1-sdk";
|
|
24
|
+
import React, { useCallback as useCallback2, useMemo, useState as useState2 } from "react";
|
|
25
|
+
|
|
26
|
+
// src/context/network/settings/defaultChainNetworkSettings.ts
|
|
27
|
+
import { LocalNetwork } from "@xyo-network/xl1-sdk";
|
|
28
|
+
var defaultChainNetworkSettings = {
|
|
29
|
+
[LocalNetwork.id]: {
|
|
30
|
+
proxy: true
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// src/context/network/settings/useChainNetworkSettings.ts
|
|
35
|
+
import { useCallback, useState } from "react";
|
|
36
|
+
var useChainNetworkSettings = /* @__PURE__ */ __name((defaults = defaultChainNetworkSettings) => {
|
|
37
|
+
const [networkSettings, setNetworkSettings] = useState(defaults);
|
|
38
|
+
const updateNetworkSettings = useCallback((networkId, settings) => {
|
|
39
|
+
setNetworkSettings((prevSettings) => ({
|
|
40
|
+
...prevSettings,
|
|
41
|
+
[networkId]: {
|
|
42
|
+
...prevSettings[networkId],
|
|
43
|
+
...settings
|
|
44
|
+
}
|
|
45
|
+
}));
|
|
46
|
+
}, []);
|
|
47
|
+
return {
|
|
48
|
+
networkSettings,
|
|
49
|
+
updateNetworkSettings
|
|
50
|
+
};
|
|
51
|
+
}, "useChainNetworkSettings");
|
|
52
|
+
|
|
53
|
+
// src/context/network/Provider.tsx
|
|
54
|
+
var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork, networkSettings: networkSettingsProp = defaultChainNetworkSettings, networks, setActiveNetwork: setActiveNetworkExternal }) => {
|
|
55
|
+
const [activeNetwork, setActiveNetwork] = useState2();
|
|
56
|
+
const [error, setError] = useState2();
|
|
57
|
+
const { networkSettings, updateNetworkSettings } = useChainNetworkSettings(networkSettingsProp);
|
|
58
|
+
const [resolvedActiveNetwork, activeNetworkError] = usePromise(async () => {
|
|
59
|
+
if (!networks) return;
|
|
60
|
+
const activeNetwork2 = await getActiveNetwork?.();
|
|
61
|
+
if (activeNetwork2 && networks?.find((network) => network.id === activeNetwork2.id)) {
|
|
62
|
+
return activeNetwork2;
|
|
63
|
+
} else {
|
|
64
|
+
const defaultNetwork = networks.find((network) => network.id === MainNetwork.id) ?? networks[0];
|
|
65
|
+
await setActiveNetworkExternal?.(defaultNetwork.id);
|
|
66
|
+
return defaultNetwork;
|
|
67
|
+
}
|
|
68
|
+
}, [
|
|
69
|
+
networks
|
|
70
|
+
]);
|
|
71
|
+
const [previousResolvedActiveNetwork, setPreviousResolvedActiveNetwork] = useState2(resolvedActiveNetwork);
|
|
72
|
+
if (isDefined(resolvedActiveNetwork) && resolvedActiveNetwork !== previousResolvedActiveNetwork) {
|
|
73
|
+
setActiveNetwork(resolvedActiveNetwork);
|
|
74
|
+
setPreviousResolvedActiveNetwork(resolvedActiveNetwork);
|
|
75
|
+
}
|
|
76
|
+
const updateActiveNetwork = useCallback2((networkId) => {
|
|
77
|
+
setError(void 0);
|
|
78
|
+
const network = networks?.find((network2) => network2.id === networkId);
|
|
79
|
+
if (!network) {
|
|
80
|
+
setError(new Error(`Network with id ${networkId} not found`));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
setActiveNetwork(network);
|
|
84
|
+
void setActiveNetworkExternal?.(networkId);
|
|
85
|
+
}, [
|
|
86
|
+
networks,
|
|
87
|
+
setActiveNetworkExternal
|
|
88
|
+
]);
|
|
89
|
+
const value = useMemo(() => ({
|
|
90
|
+
activeNetwork,
|
|
91
|
+
networks,
|
|
92
|
+
provided: true,
|
|
93
|
+
updateActiveNetwork,
|
|
94
|
+
networkSettings,
|
|
95
|
+
updateNetworkSettings,
|
|
96
|
+
chainNetworkError: error ?? activeNetworkError
|
|
97
|
+
}), [
|
|
98
|
+
activeNetwork,
|
|
99
|
+
activeNetworkError,
|
|
100
|
+
error,
|
|
101
|
+
networkSettings,
|
|
102
|
+
networks,
|
|
103
|
+
updateActiveNetwork,
|
|
104
|
+
updateNetworkSettings
|
|
105
|
+
]);
|
|
106
|
+
return /* @__PURE__ */ React.createElement(ChainNetworkContext, {
|
|
107
|
+
value
|
|
108
|
+
}, /* @__PURE__ */ React.createElement(ErrorRender, {
|
|
109
|
+
error: error ?? activeNetworkError,
|
|
110
|
+
scope: "ChainNetworkProvider"
|
|
111
|
+
}), children);
|
|
112
|
+
}, "ChainNetworkProvider");
|
|
113
|
+
|
|
114
|
+
// src/context/network/use.ts
|
|
115
|
+
import { useContextEx } from "@xylabs/react-shared";
|
|
116
|
+
var useChainNetwork = /* @__PURE__ */ __name((required = true) => useContextEx(ChainNetworkContext, "ChainNetwork", required), "useChainNetwork");
|
|
117
|
+
|
|
118
|
+
// src/hooks/provider/useViewerInPage.ts
|
|
119
|
+
var shouldProxy = /* @__PURE__ */ __name((networkSettings, networkBootstrap) => {
|
|
120
|
+
return isDefined2(networkBootstrap) && isDefined2(networkSettings[networkBootstrap.id]) && networkSettings[networkBootstrap.id].proxy;
|
|
121
|
+
}, "shouldProxy");
|
|
122
|
+
var useViewerInPage = /* @__PURE__ */ __name((networkOverride) => {
|
|
123
|
+
let networkBootstrap;
|
|
124
|
+
const { activeNetwork, networkSettings } = useChainNetwork();
|
|
125
|
+
networkBootstrap = isDefined2(networkOverride) ? networkOverride : activeNetwork;
|
|
126
|
+
const httpRpcViewer = useHttpRpcViewer(networkBootstrap?.url);
|
|
127
|
+
const [walletRpcViewer] = useViewerFromWallet(networkBootstrap?.id);
|
|
128
|
+
if (isUndefined(walletRpcViewer)) return;
|
|
129
|
+
if (shouldProxy(networkSettings, networkBootstrap)) {
|
|
130
|
+
if (isNull(walletRpcViewer)) {
|
|
131
|
+
console.warn(`Network ${networkBootstrap?.id} is set to proxy but no wallet viewer is available, falling back to HTTP RPC viewer`);
|
|
132
|
+
return httpRpcViewer;
|
|
133
|
+
}
|
|
134
|
+
return walletRpcViewer;
|
|
135
|
+
}
|
|
136
|
+
return httpRpcViewer;
|
|
137
|
+
}, "useViewerInPage");
|
|
138
|
+
|
|
139
|
+
// src/hooks/provider/useActiveNetworkCurrentBlock.ts
|
|
140
|
+
var useActiveNetworkCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
|
|
141
|
+
const currentBlock = useCurrentBlock(refresh, viewer);
|
|
142
|
+
return currentBlock;
|
|
143
|
+
}, "useActiveNetworkCurrentBlock");
|
|
144
|
+
var useActiveNetworkCurrentBlockInPage = /* @__PURE__ */ __name((refresh = 1) => {
|
|
145
|
+
const viewer = useViewerInPage();
|
|
146
|
+
const currentBlock = useCurrentBlock(refresh, viewer);
|
|
147
|
+
return currentBlock;
|
|
148
|
+
}, "useActiveNetworkCurrentBlockInPage");
|
|
149
|
+
var useActiveNetworkCurrentBlockInWallet = /* @__PURE__ */ __name((refresh = 1) => {
|
|
150
|
+
const [viewer] = useViewerFromWallet2();
|
|
151
|
+
const currentBlock = useCurrentBlock(refresh, viewer);
|
|
152
|
+
return currentBlock;
|
|
153
|
+
}, "useActiveNetworkCurrentBlockInWallet");
|
|
154
|
+
|
|
155
|
+
// src/hooks/provider/useActiveNetworkNetwork.ts
|
|
156
|
+
import { useNetwork } from "@xyo-network/react-chain-provider";
|
|
157
|
+
var useActiveNetworkNetwork = /* @__PURE__ */ __name(() => {
|
|
158
|
+
const { activeNetwork } = useChainNetwork();
|
|
159
|
+
const network = useNetwork(activeNetwork?.id);
|
|
160
|
+
return network;
|
|
161
|
+
}, "useActiveNetworkNetwork");
|
|
162
|
+
|
|
163
|
+
// src/hooks/provider/useActiveNetworkRunner.ts
|
|
164
|
+
import { useHttpRpcRunner } from "@xyo-network/react-chain-provider";
|
|
165
|
+
var useActiveNetworkRunner = /* @__PURE__ */ __name(() => {
|
|
166
|
+
const { activeNetwork } = useChainNetwork();
|
|
167
|
+
const runner = useHttpRpcRunner(activeNetwork?.url);
|
|
168
|
+
return runner;
|
|
169
|
+
}, "useActiveNetworkRunner");
|
|
170
|
+
|
|
171
|
+
// src/hooks/provider/useRpcBroadcastListener.ts
|
|
172
|
+
import { isJsonRpcRequest, isJsonRpcResponse } from "@metamask/utils";
|
|
173
|
+
import { isDefined as isDefined3, isString } from "@xylabs/sdk-js";
|
|
174
|
+
import { useEffect, useState as useState3 } from "react";
|
|
175
|
+
var parseRpcCall = /* @__PURE__ */ __name((acc, event) => {
|
|
176
|
+
if (isJsonRpcResponse(event.rpcCall)) {
|
|
177
|
+
const castedEvent = event;
|
|
178
|
+
acc[castedEvent.rpcCall.id].result = castedEvent;
|
|
179
|
+
} else if (isJsonRpcRequest(event.rpcCall)) {
|
|
180
|
+
const castedEvent = event;
|
|
181
|
+
acc[castedEvent.rpcCall.id].request = castedEvent;
|
|
182
|
+
} else {
|
|
183
|
+
console.error("Unknown RPC call type", event);
|
|
184
|
+
}
|
|
185
|
+
acc[event.rpcCall.id].source = event.source;
|
|
186
|
+
return acc;
|
|
187
|
+
}, "parseRpcCall");
|
|
188
|
+
var useRpcBroadcastListener = /* @__PURE__ */ __name(() => {
|
|
189
|
+
const [events, setEvents] = useState3({});
|
|
190
|
+
const clearEvents = /* @__PURE__ */ __name(() => setEvents({}), "clearEvents");
|
|
191
|
+
useEffect(() => {
|
|
192
|
+
const listener = /* @__PURE__ */ __name((e) => {
|
|
193
|
+
if ("detail" in e) {
|
|
194
|
+
const { detail } = e ?? {};
|
|
195
|
+
if (isString(detail)) {
|
|
196
|
+
try {
|
|
197
|
+
const parsedDetail = JSON.parse(detail);
|
|
198
|
+
const { data: rpcCall, source } = parsedDetail;
|
|
199
|
+
const broadcastedRpcCall = {
|
|
200
|
+
rpcCall,
|
|
201
|
+
source,
|
|
202
|
+
timestamp: Date.now()
|
|
203
|
+
};
|
|
204
|
+
setEvents((prev) => {
|
|
205
|
+
const { id } = broadcastedRpcCall.rpcCall;
|
|
206
|
+
const newState = {
|
|
207
|
+
...prev
|
|
208
|
+
};
|
|
209
|
+
if (isDefined3(newState[id])) {
|
|
210
|
+
parseRpcCall(newState, broadcastedRpcCall);
|
|
211
|
+
} else {
|
|
212
|
+
newState[id] = {};
|
|
213
|
+
parseRpcCall(newState, broadcastedRpcCall);
|
|
214
|
+
}
|
|
215
|
+
return newState;
|
|
216
|
+
});
|
|
217
|
+
} catch (err) {
|
|
218
|
+
console.error(err);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}, "listener");
|
|
223
|
+
globalThis.addEventListener("xyo:broadcast-rpc-request", listener);
|
|
224
|
+
globalThis.addEventListener("xyo:broadcast-rpc-response", listener);
|
|
225
|
+
return () => {
|
|
226
|
+
globalThis.removeEventListener("xyo:broadcast-rpc-request", listener);
|
|
227
|
+
globalThis.removeEventListener("xyo:broadcast-rpc-response", listener);
|
|
228
|
+
};
|
|
229
|
+
}, []);
|
|
230
|
+
return {
|
|
231
|
+
events,
|
|
232
|
+
clearEvents
|
|
233
|
+
};
|
|
234
|
+
}, "useRpcBroadcastListener");
|
|
235
|
+
|
|
236
|
+
// src/hooks/provider/useViewerInWallet.ts
|
|
237
|
+
import { useHttpRpcViewer as useHttpRpcViewer2 } from "@xyo-network/react-chain-provider";
|
|
238
|
+
var useViewerInWallet = /* @__PURE__ */ __name(() => {
|
|
239
|
+
const { activeNetwork } = useChainNetwork();
|
|
240
|
+
const walletViewer = useHttpRpcViewer2(activeNetwork?.url);
|
|
241
|
+
return walletViewer;
|
|
242
|
+
}, "useViewerInWallet");
|
|
243
|
+
|
|
244
|
+
// src/hooks/status/usePollNetworkStatus.ts
|
|
245
|
+
import { delay, isUndefined as isUndefined2 } from "@xylabs/sdk-js";
|
|
246
|
+
import { useEffect as useEffect2, useState as useState4 } from "react";
|
|
247
|
+
var STATUS_CHECK_INTERVAL = 1e4;
|
|
248
|
+
var usePollNetworkStatus = /* @__PURE__ */ __name(() => {
|
|
249
|
+
const network = useActiveNetworkNetwork();
|
|
250
|
+
const [networkStatus, setNetworkStatus] = useState4();
|
|
251
|
+
const [networkStatusError, setNetworkStatusError] = useState4();
|
|
252
|
+
useEffect2(() => {
|
|
253
|
+
let checkNetwork = true;
|
|
254
|
+
void (async () => {
|
|
255
|
+
if (isUndefined2(network)) return;
|
|
256
|
+
while (checkNetwork) {
|
|
257
|
+
try {
|
|
258
|
+
const response = await network.status();
|
|
259
|
+
setNetworkStatus(response);
|
|
260
|
+
setNetworkStatusError(void 0);
|
|
261
|
+
} catch (error) {
|
|
262
|
+
console.error("Error fetching network status:", error);
|
|
263
|
+
setNetworkStatus(void 0);
|
|
264
|
+
setNetworkStatusError(error);
|
|
265
|
+
}
|
|
266
|
+
await delay(STATUS_CHECK_INTERVAL);
|
|
267
|
+
}
|
|
268
|
+
})();
|
|
269
|
+
return () => {
|
|
270
|
+
checkNetwork = false;
|
|
271
|
+
};
|
|
272
|
+
}, [
|
|
273
|
+
network
|
|
274
|
+
]);
|
|
275
|
+
return [
|
|
276
|
+
networkStatus,
|
|
277
|
+
networkStatusError
|
|
278
|
+
];
|
|
279
|
+
}, "usePollNetworkStatus");
|
|
7
280
|
|
|
8
281
|
// src/components/broadcast/CloseDrawerIconButton.tsx
|
|
9
282
|
import { Cancel } from "@mui/icons-material";
|
|
10
283
|
import { IconButton } from "@mui/material";
|
|
11
|
-
import
|
|
284
|
+
import React2 from "react";
|
|
12
285
|
var CloseDrawerIconButton = /* @__PURE__ */ __name(({ anchor, onClose }) => {
|
|
13
|
-
return /* @__PURE__ */
|
|
286
|
+
return /* @__PURE__ */ React2.createElement(IconButton, {
|
|
14
287
|
onClick: /* @__PURE__ */ __name((e) => onClose?.(e, "backdropClick"), "onClick"),
|
|
15
288
|
size: "small",
|
|
16
289
|
sx: {
|
|
@@ -19,275 +292,278 @@ var CloseDrawerIconButton = /* @__PURE__ */ __name(({ anchor, onClose }) => {
|
|
|
19
292
|
right: anchor === "right" ? void 0 : 8,
|
|
20
293
|
left: anchor === "left" ? void 0 : 8
|
|
21
294
|
}
|
|
22
|
-
}, /* @__PURE__ */
|
|
295
|
+
}, /* @__PURE__ */ React2.createElement(Cancel, {
|
|
23
296
|
fontSize: "small"
|
|
24
297
|
}));
|
|
25
298
|
}, "CloseDrawerIconButton");
|
|
26
299
|
|
|
27
300
|
// src/components/broadcast/details/Card.tsx
|
|
28
301
|
import { Card, Collapse, Stack as Stack2, Typography as Typography2 } from "@mui/material";
|
|
29
|
-
import { isDefined as
|
|
302
|
+
import { isDefined as isDefined5 } from "@xylabs/sdk-js";
|
|
30
303
|
import { JsonViewerEx } from "@xyo-network/react-payload-raw-info";
|
|
31
|
-
import
|
|
304
|
+
import React4, { memo, useState as useState5 } from "react";
|
|
32
305
|
|
|
33
306
|
// src/components/broadcast/details/SummaryStack.tsx
|
|
34
307
|
import { ArrowRight, CheckCircle, Warning } from "@mui/icons-material";
|
|
35
|
-
import { Icon, IconButton as IconButton2, Stack, Typography } from "@mui/material";
|
|
36
|
-
import {
|
|
37
|
-
import
|
|
38
|
-
|
|
39
|
-
|
|
308
|
+
import { Avatar, Icon, IconButton as IconButton2, Stack, Typography, useTheme } from "@mui/material";
|
|
309
|
+
import { Identicon } from "@xylabs/react-identicon";
|
|
310
|
+
import { isDefined as isDefined4, isHash } from "@xylabs/sdk-js";
|
|
311
|
+
import React3 from "react";
|
|
312
|
+
var inferParamsType = /* @__PURE__ */ __name((params) => {
|
|
313
|
+
if (!params || !Array.isArray(params)) return {
|
|
314
|
+
type: "unknown"
|
|
315
|
+
};
|
|
316
|
+
const firstParam = params[0];
|
|
317
|
+
if (isHash(firstParam)) {
|
|
318
|
+
return {
|
|
319
|
+
type: "hash",
|
|
320
|
+
value: firstParam
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
return {
|
|
324
|
+
type: "unknown"
|
|
325
|
+
};
|
|
326
|
+
}, "inferParamsType");
|
|
327
|
+
var BroadcastedRpcCallDetailsSummaryStack = /* @__PURE__ */ __name(({ expanded, setExpanded, method, timestamp, hasResult, params, ...props }) => {
|
|
328
|
+
const theme = useTheme();
|
|
329
|
+
const { type, value } = inferParamsType(params);
|
|
330
|
+
return /* @__PURE__ */ React3.createElement(Stack, {
|
|
40
331
|
direction: "row",
|
|
41
332
|
gap: 2,
|
|
42
333
|
alignItems: "center",
|
|
43
334
|
justifyContent: "space-between",
|
|
44
335
|
...props
|
|
45
|
-
}, /* @__PURE__ */
|
|
336
|
+
}, /* @__PURE__ */ React3.createElement(Stack, {
|
|
46
337
|
direction: "row",
|
|
47
338
|
gap: 2,
|
|
48
339
|
alignItems: "center"
|
|
49
|
-
}, /* @__PURE__ */
|
|
340
|
+
}, /* @__PURE__ */ React3.createElement(IconButton2, {
|
|
50
341
|
size: "small",
|
|
51
342
|
onClick: /* @__PURE__ */ __name(() => setExpanded?.(!expanded), "onClick")
|
|
52
|
-
}, /* @__PURE__ */
|
|
343
|
+
}, /* @__PURE__ */ React3.createElement(ArrowRight, {
|
|
344
|
+
sx: {
|
|
345
|
+
transform: expanded ? "rotate(90deg)" : "rotate(0deg)",
|
|
346
|
+
transition: "transform 0.2s ease-in-out"
|
|
347
|
+
},
|
|
53
348
|
fontSize: "small"
|
|
54
|
-
})), /* @__PURE__ */
|
|
349
|
+
})), /* @__PURE__ */ React3.createElement(Typography, {
|
|
55
350
|
component: "span",
|
|
56
351
|
variant: "body2",
|
|
57
352
|
fontFamily: "monospace"
|
|
58
|
-
}, method), /* @__PURE__ */
|
|
353
|
+
}, method), type === "hash" ? /* @__PURE__ */ React3.createElement(Avatar, {
|
|
354
|
+
sx: {
|
|
355
|
+
backgroundColor: theme.vars?.palette.text.primary,
|
|
356
|
+
width: 20,
|
|
357
|
+
height: 20
|
|
358
|
+
}
|
|
359
|
+
}, /* @__PURE__ */ React3.createElement(Identicon, {
|
|
360
|
+
value,
|
|
361
|
+
size: 14
|
|
362
|
+
})) : null, /* @__PURE__ */ React3.createElement(Typography, {
|
|
59
363
|
component: "span",
|
|
60
364
|
variant: "caption",
|
|
61
365
|
color: "text.secondary",
|
|
62
366
|
sx: {
|
|
63
367
|
opacity: 0.6
|
|
64
368
|
}
|
|
65
|
-
},
|
|
369
|
+
}, isDefined4(timestamp) ? new Date(timestamp).toLocaleString() : "")), /* @__PURE__ */ React3.createElement(Icon, {
|
|
66
370
|
sx: {
|
|
67
371
|
justifySelf: "end"
|
|
68
372
|
}
|
|
69
|
-
}, hasResult ? /* @__PURE__ */
|
|
373
|
+
}, hasResult ? /* @__PURE__ */ React3.createElement(CheckCircle, {
|
|
70
374
|
color: "success"
|
|
71
|
-
}) : /* @__PURE__ */
|
|
375
|
+
}) : /* @__PURE__ */ React3.createElement(Warning, {
|
|
72
376
|
color: "warning"
|
|
73
377
|
})));
|
|
74
378
|
}, "BroadcastedRpcCallDetailsSummaryStack");
|
|
75
379
|
|
|
76
380
|
// src/components/broadcast/details/Card.tsx
|
|
77
|
-
var
|
|
78
|
-
|
|
381
|
+
var JSON_VIEWER_WIDTH = 600;
|
|
382
|
+
var BroadcastedRpcCallDetailsCard = /* @__PURE__ */ memo(({ rpcRequestResponsePairs, sx, ...props }) => {
|
|
383
|
+
const [expanded, setExpanded] = useState5(false);
|
|
79
384
|
if (!rpcRequestResponsePairs) return null;
|
|
80
385
|
const { request, result, source } = rpcRequestResponsePairs;
|
|
81
|
-
return /* @__PURE__ */
|
|
386
|
+
return /* @__PURE__ */ React4.createElement(Card, {
|
|
82
387
|
sx: {
|
|
83
|
-
p: 1
|
|
84
|
-
|
|
85
|
-
|
|
388
|
+
p: 1,
|
|
389
|
+
display: "flex",
|
|
390
|
+
flexDirection: "column",
|
|
391
|
+
width: JSON_VIEWER_WIDTH,
|
|
392
|
+
...sx
|
|
393
|
+
},
|
|
394
|
+
...props
|
|
395
|
+
}, /* @__PURE__ */ React4.createElement(BroadcastedRpcCallDetailsSummaryStack, {
|
|
86
396
|
expanded,
|
|
87
|
-
|
|
397
|
+
params: request.rpcCall.params,
|
|
398
|
+
hasResult: isDefined5(result),
|
|
88
399
|
method: request.rpcCall.method,
|
|
89
400
|
setExpanded,
|
|
90
401
|
timestamp: request.timestamp
|
|
91
|
-
}), /* @__PURE__ */
|
|
92
|
-
in: expanded
|
|
93
|
-
|
|
402
|
+
}), /* @__PURE__ */ React4.createElement(Collapse, {
|
|
403
|
+
in: expanded,
|
|
404
|
+
unmountOnExit: true
|
|
405
|
+
}, /* @__PURE__ */ React4.createElement(Stack2, {
|
|
94
406
|
direction: "column",
|
|
95
407
|
p: 1,
|
|
96
408
|
gap: 2,
|
|
97
|
-
|
|
98
|
-
}, /* @__PURE__ */
|
|
409
|
+
alignItems: "stretch"
|
|
410
|
+
}, /* @__PURE__ */ React4.createElement(Typography2, {
|
|
99
411
|
variant: "body2"
|
|
100
|
-
}, "Source:", /* @__PURE__ */
|
|
412
|
+
}, "Source:", /* @__PURE__ */ React4.createElement(Typography2, {
|
|
101
413
|
variant: "caption",
|
|
102
414
|
component: "span",
|
|
103
415
|
fontFamily: "monospace",
|
|
104
416
|
sx: {
|
|
105
417
|
ml: 1
|
|
106
418
|
}
|
|
107
|
-
}, source)), /* @__PURE__ */
|
|
419
|
+
}, source)), /* @__PURE__ */ React4.createElement(Typography2, {
|
|
108
420
|
variant: "body2"
|
|
109
|
-
}, "Request:"), /* @__PURE__ */
|
|
421
|
+
}, "Request:"), /* @__PURE__ */ React4.createElement(JsonViewerEx, {
|
|
110
422
|
value: request,
|
|
111
423
|
sx: {
|
|
112
424
|
maxHeight: 300,
|
|
113
425
|
overflow: "auto"
|
|
114
426
|
}
|
|
115
|
-
}),
|
|
427
|
+
}), isDefined5(result) ? /* @__PURE__ */ React4.createElement(React4.Fragment, null, /* @__PURE__ */ React4.createElement(Typography2, {
|
|
116
428
|
variant: "body2"
|
|
117
|
-
}, "Result:"), /* @__PURE__ */
|
|
429
|
+
}, "Result:"), /* @__PURE__ */ React4.createElement(JsonViewerEx, {
|
|
118
430
|
value: result,
|
|
119
431
|
sx: {
|
|
120
432
|
maxHeight: 300,
|
|
121
433
|
overflow: "auto"
|
|
122
434
|
}
|
|
123
435
|
})) : null)));
|
|
124
|
-
}
|
|
436
|
+
});
|
|
125
437
|
|
|
126
|
-
// src/components/broadcast/
|
|
127
|
-
import {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
return
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
438
|
+
// src/components/broadcast/usePaginatedEventPairs.ts
|
|
439
|
+
import { useCallback as useCallback3, useMemo as useMemo2, useState as useState6 } from "react";
|
|
440
|
+
var usePaginatedEventPairs = /* @__PURE__ */ __name((formattedEvents, numberOfVisiblePairs, onClearEvents) => {
|
|
441
|
+
const [currentPage, setCurrentPage] = useState6(0);
|
|
442
|
+
const allEventEntries = useMemo2(() => {
|
|
443
|
+
return Object.entries(formattedEvents ?? {}).toSorted(([, a], [, b]) => b.request.timestamp - a.request.timestamp);
|
|
444
|
+
}, [
|
|
445
|
+
formattedEvents
|
|
446
|
+
]);
|
|
447
|
+
const totalPages = useMemo2(() => {
|
|
448
|
+
return Math.ceil(allEventEntries.length / numberOfVisiblePairs);
|
|
449
|
+
}, [
|
|
450
|
+
allEventEntries.length,
|
|
451
|
+
numberOfVisiblePairs
|
|
452
|
+
]);
|
|
453
|
+
const effectiveCurrentPage = useMemo2(() => {
|
|
454
|
+
if (totalPages === 0) return 0;
|
|
455
|
+
return Math.min(currentPage, totalPages - 1);
|
|
456
|
+
}, [
|
|
457
|
+
currentPage,
|
|
458
|
+
totalPages
|
|
459
|
+
]);
|
|
460
|
+
const visibleEvents = useMemo2(() => {
|
|
461
|
+
const startIndex = effectiveCurrentPage * numberOfVisiblePairs;
|
|
462
|
+
const endIndex = startIndex + numberOfVisiblePairs;
|
|
463
|
+
return allEventEntries.slice(startIndex, endIndex);
|
|
464
|
+
}, [
|
|
465
|
+
allEventEntries,
|
|
466
|
+
effectiveCurrentPage,
|
|
467
|
+
numberOfVisiblePairs
|
|
468
|
+
]);
|
|
469
|
+
const handlePreviousPage = useCallback3(() => {
|
|
470
|
+
setCurrentPage((prev) => Math.max(0, prev - 1));
|
|
471
|
+
}, []);
|
|
472
|
+
const handleNextPage = useCallback3(() => {
|
|
473
|
+
setCurrentPage((prev) => Math.min(totalPages - 1, prev + 1));
|
|
474
|
+
}, [
|
|
475
|
+
totalPages
|
|
476
|
+
]);
|
|
477
|
+
const handleClearEvents = useCallback3(() => {
|
|
478
|
+
setCurrentPage(0);
|
|
479
|
+
onClearEvents?.();
|
|
480
|
+
}, [
|
|
481
|
+
onClearEvents
|
|
482
|
+
]);
|
|
483
|
+
const handlePageChange = useCallback3((_event, page) => {
|
|
484
|
+
setCurrentPage(page - 1);
|
|
485
|
+
}, []);
|
|
486
|
+
return {
|
|
487
|
+
allEventEntries,
|
|
488
|
+
visibleEvents,
|
|
489
|
+
effectiveCurrentPage: effectiveCurrentPage + 1,
|
|
490
|
+
totalPages,
|
|
491
|
+
handlePreviousPage,
|
|
492
|
+
handleNextPage,
|
|
493
|
+
handleClearEvents,
|
|
494
|
+
handlePageChange
|
|
495
|
+
};
|
|
496
|
+
}, "usePaginatedEventPairs");
|
|
156
497
|
|
|
157
498
|
// src/components/broadcast/Drawer.tsx
|
|
158
|
-
var BroadcastedRpcCallsDrawer = /* @__PURE__ */ __name(({ anchor = "right", drawerTitle, events, onClose, ...props }) => {
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
]);
|
|
162
|
-
return /* @__PURE__ */ React4.createElement(Drawer, {
|
|
499
|
+
var BroadcastedRpcCallsDrawer = /* @__PURE__ */ __name(({ anchor = "right", onClearEvents, drawerTitle, events, onClose, numberOfVisibleEvents = 25, ...props }) => {
|
|
500
|
+
const { allEventEntries, visibleEvents, totalPages, effectiveCurrentPage, handleClearEvents, handlePageChange } = usePaginatedEventPairs(events, numberOfVisibleEvents, onClearEvents);
|
|
501
|
+
return /* @__PURE__ */ React5.createElement(Drawer, {
|
|
163
502
|
anchor,
|
|
164
503
|
onClose,
|
|
504
|
+
keepMounted: false,
|
|
165
505
|
...props
|
|
166
|
-
}, /* @__PURE__ */
|
|
506
|
+
}, /* @__PURE__ */ React5.createElement(CloseDrawerIconButton, {
|
|
167
507
|
anchor,
|
|
168
508
|
onClose
|
|
169
|
-
}), /* @__PURE__ */
|
|
509
|
+
}), /* @__PURE__ */ React5.createElement(Stack3, {
|
|
170
510
|
gap: 2,
|
|
171
511
|
sx: {
|
|
172
512
|
p: 3
|
|
173
|
-
}
|
|
174
|
-
|
|
513
|
+
},
|
|
514
|
+
flexShrink: 0
|
|
515
|
+
}, /* @__PURE__ */ React5.createElement(Stack3, {
|
|
516
|
+
direction: "row",
|
|
517
|
+
justifyContent: "space-between",
|
|
518
|
+
alignItems: "center",
|
|
519
|
+
gap: 4
|
|
520
|
+
}, /* @__PURE__ */ React5.createElement(Typography3, {
|
|
175
521
|
variant: "h6"
|
|
176
|
-
}, drawerTitle ?? "Broadcasted RPC Calls"),
|
|
177
|
-
|
|
522
|
+
}, drawerTitle ?? "Broadcasted RPC Calls"), /* @__PURE__ */ React5.createElement(Button, {
|
|
523
|
+
variant: "outlined",
|
|
524
|
+
size: "small",
|
|
525
|
+
onClick: handleClearEvents
|
|
526
|
+
}, "Clear All")), allEventEntries.length > 0 && /* @__PURE__ */ React5.createElement(Pagination, {
|
|
527
|
+
count: totalPages,
|
|
528
|
+
page: effectiveCurrentPage,
|
|
529
|
+
onChange: handlePageChange,
|
|
530
|
+
color: "primary"
|
|
531
|
+
})), /* @__PURE__ */ React5.createElement(Stack3, {
|
|
532
|
+
direction: "column",
|
|
533
|
+
id: "events-container",
|
|
534
|
+
flexGrow: 1,
|
|
535
|
+
sx: {
|
|
536
|
+
overflowY: "hidden"
|
|
537
|
+
}
|
|
538
|
+
}, /* @__PURE__ */ React5.createElement(Box, {
|
|
539
|
+
sx: {
|
|
540
|
+
overflowY: "auto",
|
|
541
|
+
px: 3,
|
|
542
|
+
pb: 3
|
|
543
|
+
}
|
|
544
|
+
}, visibleEvents.map(([id, broadcastedRpcCall], index) => {
|
|
545
|
+
return /* @__PURE__ */ React5.createElement(BroadcastedRpcCallDetailsCard, {
|
|
178
546
|
key: id,
|
|
179
|
-
rpcRequestResponsePairs: broadcastedRpcCall
|
|
547
|
+
rpcRequestResponsePairs: broadcastedRpcCall,
|
|
548
|
+
sx: {
|
|
549
|
+
mb: index < visibleEvents.length - 1 ? 2 : 0
|
|
550
|
+
}
|
|
180
551
|
});
|
|
181
|
-
})));
|
|
552
|
+
}))));
|
|
182
553
|
}, "BroadcastedRpcCallsDrawer");
|
|
554
|
+
var BroadcastedRpcCallsDrawerWithEvents = /* @__PURE__ */ __name((props) => {
|
|
555
|
+
const { clearEvents, events } = useRpcBroadcastListener();
|
|
556
|
+
return /* @__PURE__ */ React5.createElement(BroadcastedRpcCallsDrawer, {
|
|
557
|
+
events,
|
|
558
|
+
onClearEvents: clearEvents,
|
|
559
|
+
...props
|
|
560
|
+
});
|
|
561
|
+
}, "BroadcastedRpcCallsDrawerWithEvents");
|
|
183
562
|
|
|
184
563
|
// src/components/menu/Avatar.tsx
|
|
185
|
-
import { Avatar } from "@mui/material";
|
|
564
|
+
import { Avatar as Avatar2 } from "@mui/material";
|
|
186
565
|
import React7 from "react";
|
|
187
566
|
|
|
188
|
-
// src/context/network/context.ts
|
|
189
|
-
import { createContextEx } from "@xylabs/react-shared";
|
|
190
|
-
var ChainNetworkContext = createContextEx();
|
|
191
|
-
|
|
192
|
-
// src/context/network/Provider.tsx
|
|
193
|
-
import { ErrorRender } from "@xylabs/react-error";
|
|
194
|
-
import { usePromise } from "@xylabs/react-promise";
|
|
195
|
-
import { isDefined as isDefined4 } from "@xylabs/sdk-js";
|
|
196
|
-
import { MainNetwork } from "@xyo-network/xl1-sdk";
|
|
197
|
-
import React5, { useCallback as useCallback2, useMemo as useMemo2, useState as useState3 } from "react";
|
|
198
|
-
|
|
199
|
-
// src/context/network/settings/defaultChainNetworkSettings.ts
|
|
200
|
-
import { LocalNetwork } from "@xyo-network/xl1-sdk";
|
|
201
|
-
var defaultChainNetworkSettings = {
|
|
202
|
-
[LocalNetwork.id]: {
|
|
203
|
-
proxy: true
|
|
204
|
-
}
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
// src/context/network/settings/useChainNetworkSettings.ts
|
|
208
|
-
import { useCallback, useState as useState2 } from "react";
|
|
209
|
-
var useChainNetworkSettings = /* @__PURE__ */ __name((defaults = defaultChainNetworkSettings) => {
|
|
210
|
-
const [networkSettings, setNetworkSettings] = useState2(defaults);
|
|
211
|
-
const updateNetworkSettings = useCallback((networkId, settings) => {
|
|
212
|
-
setNetworkSettings((prevSettings) => ({
|
|
213
|
-
...prevSettings,
|
|
214
|
-
[networkId]: {
|
|
215
|
-
...prevSettings[networkId],
|
|
216
|
-
...settings
|
|
217
|
-
}
|
|
218
|
-
}));
|
|
219
|
-
}, []);
|
|
220
|
-
return {
|
|
221
|
-
networkSettings,
|
|
222
|
-
updateNetworkSettings
|
|
223
|
-
};
|
|
224
|
-
}, "useChainNetworkSettings");
|
|
225
|
-
|
|
226
|
-
// src/context/network/Provider.tsx
|
|
227
|
-
var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork, networkSettings: networkSettingsProp = defaultChainNetworkSettings, networks, setActiveNetwork: setActiveNetworkExternal }) => {
|
|
228
|
-
const [activeNetwork, setActiveNetwork] = useState3();
|
|
229
|
-
const [error, setError] = useState3();
|
|
230
|
-
const { networkSettings, updateNetworkSettings } = useChainNetworkSettings(networkSettingsProp);
|
|
231
|
-
const [resolvedActiveNetwork, activeNetworkError] = usePromise(async () => {
|
|
232
|
-
if (!networks) return;
|
|
233
|
-
const activeNetwork2 = await getActiveNetwork?.();
|
|
234
|
-
if (activeNetwork2 && networks?.find((network) => network.id === activeNetwork2.id)) {
|
|
235
|
-
return activeNetwork2;
|
|
236
|
-
} else {
|
|
237
|
-
const defaultNetwork = networks.find((network) => network.id === MainNetwork.id) ?? networks[0];
|
|
238
|
-
await setActiveNetworkExternal?.(defaultNetwork.id);
|
|
239
|
-
return defaultNetwork;
|
|
240
|
-
}
|
|
241
|
-
}, [
|
|
242
|
-
networks
|
|
243
|
-
]);
|
|
244
|
-
const [previousResolvedActiveNetwork, setPreviousResolvedActiveNetwork] = useState3(resolvedActiveNetwork);
|
|
245
|
-
if (isDefined4(resolvedActiveNetwork) && resolvedActiveNetwork !== previousResolvedActiveNetwork) {
|
|
246
|
-
setActiveNetwork(resolvedActiveNetwork);
|
|
247
|
-
setPreviousResolvedActiveNetwork(resolvedActiveNetwork);
|
|
248
|
-
}
|
|
249
|
-
const updateActiveNetwork = useCallback2((networkId) => {
|
|
250
|
-
setError(void 0);
|
|
251
|
-
const network = networks?.find((network2) => network2.id === networkId);
|
|
252
|
-
if (!network) {
|
|
253
|
-
setError(new Error(`Network with id ${networkId} not found`));
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
setActiveNetwork(network);
|
|
257
|
-
void setActiveNetworkExternal?.(networkId);
|
|
258
|
-
}, [
|
|
259
|
-
networks,
|
|
260
|
-
setActiveNetworkExternal
|
|
261
|
-
]);
|
|
262
|
-
const value = useMemo2(() => ({
|
|
263
|
-
activeNetwork,
|
|
264
|
-
networks,
|
|
265
|
-
provided: true,
|
|
266
|
-
updateActiveNetwork,
|
|
267
|
-
networkSettings,
|
|
268
|
-
updateNetworkSettings,
|
|
269
|
-
chainNetworkError: error ?? activeNetworkError
|
|
270
|
-
}), [
|
|
271
|
-
activeNetwork,
|
|
272
|
-
activeNetworkError,
|
|
273
|
-
error,
|
|
274
|
-
networkSettings,
|
|
275
|
-
networks,
|
|
276
|
-
updateActiveNetwork,
|
|
277
|
-
updateNetworkSettings
|
|
278
|
-
]);
|
|
279
|
-
return /* @__PURE__ */ React5.createElement(ChainNetworkContext, {
|
|
280
|
-
value
|
|
281
|
-
}, /* @__PURE__ */ React5.createElement(ErrorRender, {
|
|
282
|
-
error: error ?? activeNetworkError,
|
|
283
|
-
scope: "ChainNetworkProvider"
|
|
284
|
-
}), children);
|
|
285
|
-
}, "ChainNetworkProvider");
|
|
286
|
-
|
|
287
|
-
// src/context/network/use.ts
|
|
288
|
-
import { useContextEx } from "@xylabs/react-shared";
|
|
289
|
-
var useChainNetwork = /* @__PURE__ */ __name((required = true) => useContextEx(ChainNetworkContext, "ChainNetwork", required), "useChainNetwork");
|
|
290
|
-
|
|
291
567
|
// src/components/menu/Icon.tsx
|
|
292
568
|
import React6 from "react";
|
|
293
569
|
var NetworkIcon = /* @__PURE__ */ __name(({ icon, style, ...props }) => {
|
|
@@ -308,7 +584,7 @@ var NetworkIcon = /* @__PURE__ */ __name(({ icon, style, ...props }) => {
|
|
|
308
584
|
|
|
309
585
|
// src/components/menu/Avatar.tsx
|
|
310
586
|
var NetworkAvatar = /* @__PURE__ */ __name(({ icon, iconStyles, name, sx, ...props }) => {
|
|
311
|
-
return /* @__PURE__ */ React7.createElement(
|
|
587
|
+
return /* @__PURE__ */ React7.createElement(Avatar2, {
|
|
312
588
|
sx: {
|
|
313
589
|
backgroundColor: "white",
|
|
314
590
|
...sx
|
|
@@ -361,11 +637,11 @@ var NetworkMenuItem = /* @__PURE__ */ __name(({ active, network, onClick, update
|
|
|
361
637
|
}, "NetworkMenuItem");
|
|
362
638
|
|
|
363
639
|
// src/components/status/Alert.tsx
|
|
364
|
-
import { Alert, AlertTitle, Button as
|
|
365
|
-
import React10, { useMemo as useMemo3, useState as
|
|
640
|
+
import { Alert, AlertTitle, Button as Button3 } from "@mui/material";
|
|
641
|
+
import React10, { useMemo as useMemo3, useState as useState7 } from "react";
|
|
366
642
|
|
|
367
643
|
// src/components/status/Dialog.tsx
|
|
368
|
-
import { Button, Dialog, DialogActions, DialogContent, DialogTitle, List, ListItem, Typography as Typography4 } from "@mui/material";
|
|
644
|
+
import { Button as Button2, Dialog, DialogActions, DialogContent, DialogTitle, List, ListItem, Typography as Typography4 } from "@mui/material";
|
|
369
645
|
import React9 from "react";
|
|
370
646
|
var NetworkStatusDialog = /* @__PURE__ */ __name(({ updates, ...props }) => {
|
|
371
647
|
return /* @__PURE__ */ React9.createElement(Dialog, props, /* @__PURE__ */ React9.createElement(DialogTitle, null, "Recent Status Updates"), /* @__PURE__ */ React9.createElement(DialogContent, null, /* @__PURE__ */ React9.createElement(List, null, updates.map(({ start, end, update }) => /* @__PURE__ */ React9.createElement(ListItem, {
|
|
@@ -381,7 +657,7 @@ var NetworkStatusDialog = /* @__PURE__ */ __name(({ updates, ...props }) => {
|
|
|
381
657
|
opacity: 0.75,
|
|
382
658
|
fontSize: ".8333rem"
|
|
383
659
|
}
|
|
384
|
-
}, "Start:", " ", new Date(start).toLocaleString(), " ", /* @__PURE__ */ React9.createElement("br", null), "End:", " ", new Date(end).toLocaleString()))))), /* @__PURE__ */ React9.createElement(DialogActions, null, /* @__PURE__ */ React9.createElement(
|
|
660
|
+
}, "Start:", " ", new Date(start).toLocaleString(), " ", /* @__PURE__ */ React9.createElement("br", null), "End:", " ", new Date(end).toLocaleString()))))), /* @__PURE__ */ React9.createElement(DialogActions, null, /* @__PURE__ */ React9.createElement(Button2, {
|
|
385
661
|
onClick: /* @__PURE__ */ __name((e) => props.onClose?.(e, "backdropClick"), "onClick"),
|
|
386
662
|
color: "primary",
|
|
387
663
|
variant: "outlined"
|
|
@@ -390,7 +666,7 @@ var NetworkStatusDialog = /* @__PURE__ */ __name(({ updates, ...props }) => {
|
|
|
390
666
|
|
|
391
667
|
// src/components/status/Alert.tsx
|
|
392
668
|
var NetworkStatusAlert = /* @__PURE__ */ __name(({ status, ...props }) => {
|
|
393
|
-
const [open, setOpen] =
|
|
669
|
+
const [open, setOpen] = useState7(false);
|
|
394
670
|
const handleClose = /* @__PURE__ */ __name(() => setOpen(false), "handleClose");
|
|
395
671
|
const severity = useMemo3(() => {
|
|
396
672
|
if (!status) return;
|
|
@@ -414,7 +690,7 @@ var NetworkStatusAlert = /* @__PURE__ */ __name(({ status, ...props }) => {
|
|
|
414
690
|
return /* @__PURE__ */ React10.createElement(Alert, {
|
|
415
691
|
severity,
|
|
416
692
|
...props
|
|
417
|
-
}, /* @__PURE__ */ React10.createElement(AlertTitle, null, status?.description), status?.updates && status.updates.length > 0 ? /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement(
|
|
693
|
+
}, /* @__PURE__ */ React10.createElement(AlertTitle, null, status?.description), status?.updates && status.updates.length > 0 ? /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement(Button3, {
|
|
418
694
|
color: severity,
|
|
419
695
|
variant: "outlined",
|
|
420
696
|
size: "small",
|
|
@@ -428,151 +704,6 @@ var NetworkStatusAlert = /* @__PURE__ */ __name(({ status, ...props }) => {
|
|
|
428
704
|
|
|
429
705
|
// src/components/status/NetworkStatus.tsx
|
|
430
706
|
import React11 from "react";
|
|
431
|
-
|
|
432
|
-
// src/hooks/provider/useActiveNetworkCurrentBlock.ts
|
|
433
|
-
import { useCurrentBlock, useViewerFromWallet as useViewerFromWallet2 } from "@xyo-network/react-chain-provider";
|
|
434
|
-
|
|
435
|
-
// src/hooks/provider/useViewerInPage.ts
|
|
436
|
-
import { isDefined as isDefined5, isNull, isUndefined } from "@xylabs/sdk-js";
|
|
437
|
-
import { useHttpRpcViewer, useViewerFromWallet } from "@xyo-network/react-chain-provider";
|
|
438
|
-
var shouldProxy = /* @__PURE__ */ __name((networkSettings, networkBootstrap) => {
|
|
439
|
-
return isDefined5(networkBootstrap) && isDefined5(networkSettings[networkBootstrap.id]) && networkSettings[networkBootstrap.id].proxy;
|
|
440
|
-
}, "shouldProxy");
|
|
441
|
-
var useViewerInPage = /* @__PURE__ */ __name((networkOverride) => {
|
|
442
|
-
let networkBootstrap;
|
|
443
|
-
const { activeNetwork, networkSettings } = useChainNetwork();
|
|
444
|
-
networkBootstrap = isDefined5(networkOverride) ? networkOverride : activeNetwork;
|
|
445
|
-
const httpRpcViewer = useHttpRpcViewer(networkBootstrap?.url);
|
|
446
|
-
const [walletRpcViewer] = useViewerFromWallet(networkBootstrap?.id);
|
|
447
|
-
if (isUndefined(walletRpcViewer)) return;
|
|
448
|
-
if (shouldProxy(networkSettings, networkBootstrap)) {
|
|
449
|
-
if (isNull(walletRpcViewer)) {
|
|
450
|
-
console.warn(`Network ${networkBootstrap?.id} is set to proxy but no wallet viewer is available, falling back to HTTP RPC viewer`);
|
|
451
|
-
return httpRpcViewer;
|
|
452
|
-
}
|
|
453
|
-
return walletRpcViewer;
|
|
454
|
-
}
|
|
455
|
-
return httpRpcViewer;
|
|
456
|
-
}, "useViewerInPage");
|
|
457
|
-
|
|
458
|
-
// src/hooks/provider/useActiveNetworkCurrentBlock.ts
|
|
459
|
-
var useActiveNetworkCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
|
|
460
|
-
const currentBlock = useCurrentBlock(refresh, viewer);
|
|
461
|
-
return currentBlock;
|
|
462
|
-
}, "useActiveNetworkCurrentBlock");
|
|
463
|
-
var useActiveNetworkCurrentBlockInPage = /* @__PURE__ */ __name((refresh = 1) => {
|
|
464
|
-
const viewer = useViewerInPage();
|
|
465
|
-
const currentBlock = useCurrentBlock(refresh, viewer);
|
|
466
|
-
return currentBlock;
|
|
467
|
-
}, "useActiveNetworkCurrentBlockInPage");
|
|
468
|
-
var useActiveNetworkCurrentBlockInWallet = /* @__PURE__ */ __name((refresh = 1) => {
|
|
469
|
-
const [viewer] = useViewerFromWallet2();
|
|
470
|
-
const currentBlock = useCurrentBlock(refresh, viewer);
|
|
471
|
-
return currentBlock;
|
|
472
|
-
}, "useActiveNetworkCurrentBlockInWallet");
|
|
473
|
-
|
|
474
|
-
// src/hooks/provider/useActiveNetworkNetwork.ts
|
|
475
|
-
import { useNetwork } from "@xyo-network/react-chain-provider";
|
|
476
|
-
var useActiveNetworkNetwork = /* @__PURE__ */ __name(() => {
|
|
477
|
-
const { activeNetwork } = useChainNetwork();
|
|
478
|
-
const network = useNetwork(activeNetwork?.id);
|
|
479
|
-
return network;
|
|
480
|
-
}, "useActiveNetworkNetwork");
|
|
481
|
-
|
|
482
|
-
// src/hooks/provider/useActiveNetworkRunner.ts
|
|
483
|
-
import { useHttpRpcRunner } from "@xyo-network/react-chain-provider";
|
|
484
|
-
var useActiveNetworkRunner = /* @__PURE__ */ __name(() => {
|
|
485
|
-
const { activeNetwork } = useChainNetwork();
|
|
486
|
-
const runner = useHttpRpcRunner(activeNetwork?.url);
|
|
487
|
-
return runner;
|
|
488
|
-
}, "useActiveNetworkRunner");
|
|
489
|
-
|
|
490
|
-
// src/hooks/provider/useRpcBroadcastListener.ts
|
|
491
|
-
import { isString } from "@xylabs/sdk-js";
|
|
492
|
-
import { useEffect, useState as useState5 } from "react";
|
|
493
|
-
var useRpcBroadcastListener = /* @__PURE__ */ __name(() => {
|
|
494
|
-
const [events, setEvents] = useState5([]);
|
|
495
|
-
useEffect(() => {
|
|
496
|
-
const listener = /* @__PURE__ */ __name((e) => {
|
|
497
|
-
if ("detail" in e) {
|
|
498
|
-
const { detail } = e ?? {};
|
|
499
|
-
if (isString(detail)) {
|
|
500
|
-
try {
|
|
501
|
-
const parsedDetail = JSON.parse(detail);
|
|
502
|
-
const { data: rpcCall, source } = parsedDetail;
|
|
503
|
-
const broadcastedRpcCall = {
|
|
504
|
-
rpcCall,
|
|
505
|
-
source,
|
|
506
|
-
timestamp: e.timeStamp
|
|
507
|
-
};
|
|
508
|
-
setEvents((prev) => [
|
|
509
|
-
broadcastedRpcCall,
|
|
510
|
-
...prev
|
|
511
|
-
]);
|
|
512
|
-
} catch (err) {
|
|
513
|
-
console.error(err);
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
}, "listener");
|
|
518
|
-
globalThis.addEventListener("xyo:broadcast-rpc-request", listener);
|
|
519
|
-
globalThis.addEventListener("xyo:broadcast-rpc-response", listener);
|
|
520
|
-
return () => {
|
|
521
|
-
globalThis.removeEventListener("xyo:broadcast-rpc-request", listener);
|
|
522
|
-
globalThis.removeEventListener("xyo:broadcast-rpc-response", listener);
|
|
523
|
-
};
|
|
524
|
-
}, []);
|
|
525
|
-
return {
|
|
526
|
-
events
|
|
527
|
-
};
|
|
528
|
-
}, "useRpcBroadcastListener");
|
|
529
|
-
|
|
530
|
-
// src/hooks/provider/useViewerInWallet.ts
|
|
531
|
-
import { useHttpRpcViewer as useHttpRpcViewer2 } from "@xyo-network/react-chain-provider";
|
|
532
|
-
var useViewerInWallet = /* @__PURE__ */ __name(() => {
|
|
533
|
-
const { activeNetwork } = useChainNetwork();
|
|
534
|
-
const walletViewer = useHttpRpcViewer2(activeNetwork?.url);
|
|
535
|
-
return walletViewer;
|
|
536
|
-
}, "useViewerInWallet");
|
|
537
|
-
|
|
538
|
-
// src/hooks/status/usePollNetworkStatus.ts
|
|
539
|
-
import { delay, isUndefined as isUndefined2 } from "@xylabs/sdk-js";
|
|
540
|
-
import { useEffect as useEffect2, useState as useState6 } from "react";
|
|
541
|
-
var STATUS_CHECK_INTERVAL = 1e4;
|
|
542
|
-
var usePollNetworkStatus = /* @__PURE__ */ __name(() => {
|
|
543
|
-
const network = useActiveNetworkNetwork();
|
|
544
|
-
const [networkStatus, setNetworkStatus] = useState6();
|
|
545
|
-
const [networkStatusError, setNetworkStatusError] = useState6();
|
|
546
|
-
useEffect2(() => {
|
|
547
|
-
let checkNetwork = true;
|
|
548
|
-
void (async () => {
|
|
549
|
-
if (isUndefined2(network)) return;
|
|
550
|
-
while (checkNetwork) {
|
|
551
|
-
try {
|
|
552
|
-
const response = await network.status();
|
|
553
|
-
setNetworkStatus(response);
|
|
554
|
-
setNetworkStatusError(void 0);
|
|
555
|
-
} catch (error) {
|
|
556
|
-
console.error("Error fetching network status:", error);
|
|
557
|
-
setNetworkStatus(void 0);
|
|
558
|
-
setNetworkStatusError(error);
|
|
559
|
-
}
|
|
560
|
-
await delay(STATUS_CHECK_INTERVAL);
|
|
561
|
-
}
|
|
562
|
-
})();
|
|
563
|
-
return () => {
|
|
564
|
-
checkNetwork = false;
|
|
565
|
-
};
|
|
566
|
-
}, [
|
|
567
|
-
network
|
|
568
|
-
]);
|
|
569
|
-
return [
|
|
570
|
-
networkStatus,
|
|
571
|
-
networkStatusError
|
|
572
|
-
];
|
|
573
|
-
}, "usePollNetworkStatus");
|
|
574
|
-
|
|
575
|
-
// src/components/status/NetworkStatus.tsx
|
|
576
707
|
var validNetworkStates = /* @__PURE__ */ new Set([
|
|
577
708
|
"online",
|
|
578
709
|
"unknown"
|
|
@@ -598,6 +729,7 @@ export {
|
|
|
598
729
|
BroadcastRpcRequestEventName,
|
|
599
730
|
BroadcastRpcResponseEventName,
|
|
600
731
|
BroadcastedRpcCallsDrawer,
|
|
732
|
+
BroadcastedRpcCallsDrawerWithEvents,
|
|
601
733
|
ChainNetworkContext,
|
|
602
734
|
ChainNetworkProvider,
|
|
603
735
|
NetworkAvatar,
|