@xyo-network/react-chain-provider 1.16.6 → 1.16.7
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/client/useClient.d.ts.map +1 -1
- package/dist/browser/hooks/client/useGateway.d.ts +1 -1
- package/dist/browser/hooks/client/useGateway.d.ts.map +1 -1
- package/dist/browser/hooks/helpers/getXyoClient.d.ts.map +1 -1
- package/dist/browser/hooks/useConnectAccount.d.ts +1 -1
- package/dist/browser/hooks/viewer/useViewerFromWallet.d.ts +1 -1
- package/dist/browser/hooks/viewer/useViewerFromWallet.d.ts.map +1 -1
- package/dist/browser/index.mjs +83 -47
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +11 -11
- package/src/hooks/client/useClient.ts +30 -3
- package/src/hooks/client/useGateway.ts +12 -1
- package/src/hooks/helpers/getXyoClient.ts +6 -0
- package/src/hooks/viewer/useViewerFromWallet.ts +14 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useClient.d.ts","sourceRoot":"","sources":["../../../../src/hooks/client/useClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useClient.d.ts","sourceRoot":"","sources":["../../../../src/hooks/client/useClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAO9D,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAoDD,eAAO,MAAM,SAAS,GAAI,UAAU,MAAM,gBA2BzC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { GatewayName } from '@xyo-network/xl1-protocol';
|
|
2
2
|
export declare const useGateway: (gatewayName?: GatewayName, timeout?: number) => {
|
|
3
|
-
gateway: import("@xyo-network/xl1-protocol-sdk").XyoGateway | undefined;
|
|
3
|
+
gateway: import("@xyo-network/xl1-protocol-sdk").XyoGateway | null | undefined;
|
|
4
4
|
isLoading: boolean;
|
|
5
5
|
error: Error | null;
|
|
6
6
|
timedout: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGateway.d.ts","sourceRoot":"","sources":["../../../../src/hooks/client/useGateway.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useGateway.d.ts","sourceRoot":"","sources":["../../../../src/hooks/client/useGateway.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAI5D,eAAO,MAAM,UAAU,GAAI,cAAc,WAAW,EAAE,UAAU,MAAM;;;;;CAoBrE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getXyoClient.d.ts","sourceRoot":"","sources":["../../../../src/hooks/helpers/getXyoClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getXyoClient.d.ts","sourceRoot":"","sources":["../../../../src/hooks/helpers/getXyoClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAQ9D,eAAO,MAAM,wBAAwB,GAAI,eAAe,MAAM,IAAI,EAAE,SAAS,MAAM,EAAE,WAAW,MAAM,IAAI,SAazG,CAAA;AAED,KAAK,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAA;AAE9C,wBAAsB,YAAY,CAAC,OAAO,SAA0B,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBzF"}
|
|
@@ -7,7 +7,7 @@ export declare const useConnectAccount: (gatewayName?: GatewayName, timeout?: nu
|
|
|
7
7
|
readonly __address: true;
|
|
8
8
|
}> | undefined>;
|
|
9
9
|
error: Error | undefined;
|
|
10
|
-
gateway: import("@xyo-network/xl1-protocol-sdk").XyoGateway | undefined;
|
|
10
|
+
gateway: import("@xyo-network/xl1-protocol-sdk").XyoGateway | null | undefined;
|
|
11
11
|
timedout: boolean;
|
|
12
12
|
};
|
|
13
13
|
//# sourceMappingURL=useConnectAccount.d.ts.map
|
|
@@ -5,5 +5,5 @@ import type { GatewayName } from '@xyo-network/xl1-protocol';
|
|
|
5
5
|
* @returns An instance of XyoViewer if the networkId is found in wallet gateways
|
|
6
6
|
* otherwise undefined.
|
|
7
7
|
*/
|
|
8
|
-
export declare const useViewerFromWallet: (networkId?: GatewayName) => [import("@xyo-network/xl1-protocol-sdk").XyoViewer | null | undefined, Error | undefined, import("@xylabs/react-promise").UsePromiseState | undefined];
|
|
8
|
+
export declare const useViewerFromWallet: (networkId?: GatewayName, timeout?: number) => [import("@xyo-network/xl1-protocol-sdk").XyoViewer | null | undefined, Error | undefined, import("@xylabs/react-promise").UsePromiseState | undefined];
|
|
9
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;AAI5D;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,WAAW,EACvB,UAAU,MAAM,2JAiBjB,CAAA"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -4,15 +4,17 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
4
4
|
// src/components/account/BalanceHistoryFlexbox.tsx
|
|
5
5
|
import { Typography } from "@mui/material";
|
|
6
6
|
import { FlexCol } from "@xylabs/react-flexbox";
|
|
7
|
-
import { isDefined as
|
|
7
|
+
import { isDefined as isDefined9 } from "@xylabs/typeof";
|
|
8
8
|
import { ErrorRender } from "@xyo-network/react-error";
|
|
9
9
|
import { AttoXL1, XL1Amount as XL1Amount2 } from "@xyo-network/xl1-protocol";
|
|
10
10
|
import React2 from "react";
|
|
11
11
|
|
|
12
12
|
// src/hooks/client/useClient.ts
|
|
13
|
-
import {
|
|
13
|
+
import { isNull as isNull2 } from "@xylabs/typeof";
|
|
14
|
+
import { useCallback, useEffect, useSyncExternalStore } from "react";
|
|
14
15
|
|
|
15
16
|
// src/hooks/helpers/getXyoClient.ts
|
|
17
|
+
import { isUndefined } from "@xylabs/typeof";
|
|
16
18
|
var CLIENT_LISTENER_TIMEOUT = 500;
|
|
17
19
|
var hasXyoClient = /* @__PURE__ */ __name(() => {
|
|
18
20
|
return "client" in globalThis.xyo;
|
|
@@ -26,11 +28,15 @@ var listenForClientInjection = /* @__PURE__ */ __name((onClientReady, timeout, o
|
|
|
26
28
|
globalThis.addEventListener("xyo:plugin-ready", listener);
|
|
27
29
|
setTimeout(() => {
|
|
28
30
|
if (!resolved) {
|
|
31
|
+
globalThis.removeEventListener("xyo:plugin-ready", listener);
|
|
29
32
|
onTimeout();
|
|
30
33
|
}
|
|
31
34
|
}, timeout);
|
|
32
35
|
}, "listenForClientInjection");
|
|
33
36
|
async function getXyoClient(timeout = CLIENT_LISTENER_TIMEOUT) {
|
|
37
|
+
if (isUndefined(globalThis.xyo)) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
34
40
|
return hasXyoClient() ? globalThis.xyo.client : await new Promise((resolve) => {
|
|
35
41
|
listenForClientInjection(() => {
|
|
36
42
|
resolve(globalThis.xyo.client);
|
|
@@ -203,8 +209,27 @@ var subscribe = /* @__PURE__ */ __name((listener, timeout) => {
|
|
|
203
209
|
}, "subscribe");
|
|
204
210
|
var getSnapshot = /* @__PURE__ */ __name(() => currentState, "getSnapshot");
|
|
205
211
|
var useClient = /* @__PURE__ */ __name((timeout) => {
|
|
206
|
-
const subscribeWithTimeout =
|
|
207
|
-
|
|
212
|
+
const subscribeWithTimeout = useCallback((listener) => subscribe(listener, timeout), [
|
|
213
|
+
timeout
|
|
214
|
+
]);
|
|
215
|
+
const clientState = useSyncExternalStore(subscribeWithTimeout, getSnapshot);
|
|
216
|
+
useEffect(() => {
|
|
217
|
+
let listener = /* @__PURE__ */ __name(() => {
|
|
218
|
+
updateState({
|
|
219
|
+
client: globalThis.xyo?.client,
|
|
220
|
+
isLoading: false,
|
|
221
|
+
error: null
|
|
222
|
+
});
|
|
223
|
+
emitChange();
|
|
224
|
+
}, "listener");
|
|
225
|
+
if (clientState.timedout && isNull2(clientState.client) && !clientState.isLoading) {
|
|
226
|
+
globalThis.addEventListener("xyo:plugin-ready", listener);
|
|
227
|
+
}
|
|
228
|
+
return () => {
|
|
229
|
+
globalThis.removeEventListener("xyo:plugin-ready", listener);
|
|
230
|
+
};
|
|
231
|
+
});
|
|
232
|
+
return clientState;
|
|
208
233
|
}, "useClient");
|
|
209
234
|
|
|
210
235
|
// src/hooks/client/permissions/usePermissions.ts
|
|
@@ -267,10 +292,18 @@ var useAccountPermissions = /* @__PURE__ */ __name(() => {
|
|
|
267
292
|
}, "useAccountPermissions");
|
|
268
293
|
|
|
269
294
|
// src/hooks/client/useGateway.ts
|
|
295
|
+
import { isDefined as isDefined4, isNull as isNull3 } from "@xylabs/typeof";
|
|
270
296
|
var useGateway = /* @__PURE__ */ __name((gatewayName, timeout) => {
|
|
271
297
|
const { client, isLoading, error, timedout } = useClient(timeout);
|
|
298
|
+
const resolveGateway = /* @__PURE__ */ __name(() => {
|
|
299
|
+
if (isNull3(client)) return null;
|
|
300
|
+
if (timedout && !isLoading && isDefined4(gatewayName)) {
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
return client?.gateways?.[gatewayName];
|
|
304
|
+
}, "resolveGateway");
|
|
272
305
|
return {
|
|
273
|
-
gateway: gatewayName ?
|
|
306
|
+
gateway: gatewayName ? resolveGateway() : void 0,
|
|
274
307
|
isLoading,
|
|
275
308
|
error,
|
|
276
309
|
timedout
|
|
@@ -280,7 +313,7 @@ var useGateway = /* @__PURE__ */ __name((gatewayName, timeout) => {
|
|
|
280
313
|
// src/hooks/useAccountBalanceHistory.ts
|
|
281
314
|
import { hexToBigInt as hexToBigInt2 } from "@xylabs/hex";
|
|
282
315
|
import { usePromise as usePromise2 } from "@xylabs/react-promise";
|
|
283
|
-
import { isUndefined } from "@xylabs/typeof";
|
|
316
|
+
import { isUndefined as isUndefined2 } from "@xylabs/typeof";
|
|
284
317
|
|
|
285
318
|
// src/lib/balanceForRange.ts
|
|
286
319
|
import { hexToBigInt, toHex } from "@xylabs/hex";
|
|
@@ -342,7 +375,7 @@ var formatAccountBalanceHistory = /* @__PURE__ */ __name((address, history) => {
|
|
|
342
375
|
}, "formatAccountBalanceHistory");
|
|
343
376
|
var useAccountBalanceHistory = /* @__PURE__ */ __name((address, viewer, refresh) => {
|
|
344
377
|
return usePromise2(async () => {
|
|
345
|
-
if (
|
|
378
|
+
if (isUndefined2(viewer) || isUndefined2(address)) return;
|
|
346
379
|
let page = 1;
|
|
347
380
|
let lastBlock;
|
|
348
381
|
const maxPage = 10;
|
|
@@ -377,7 +410,7 @@ var useAccountBalanceHistory = /* @__PURE__ */ __name((address, viewer, refresh)
|
|
|
377
410
|
|
|
378
411
|
// src/hooks/useAddressBalance.ts
|
|
379
412
|
import { usePromise as usePromise3 } from "@xylabs/react-promise";
|
|
380
|
-
import { isUndefined as
|
|
413
|
+
import { isUndefined as isUndefined3, isUndefinedOrNull } from "@xylabs/typeof";
|
|
381
414
|
import { ShiftedBigInt } from "@xyo-network/xl1-protocol";
|
|
382
415
|
import { useMemo, useRef, useState } from "react";
|
|
383
416
|
var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
|
|
@@ -386,7 +419,7 @@ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
|
|
|
386
419
|
const [balancesError, setBalancesError] = useState();
|
|
387
420
|
const balancePromiseRef = useRef(null);
|
|
388
421
|
usePromise3(async () => {
|
|
389
|
-
if (
|
|
422
|
+
if (isUndefined3(viewer) || isUndefined3(address)) return;
|
|
390
423
|
setLoading(true);
|
|
391
424
|
setBalancesError(void 0);
|
|
392
425
|
const currentPromise = viewer.accountBalance(address);
|
|
@@ -453,9 +486,9 @@ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
|
|
|
453
486
|
import { forget as forget2 } from "@xylabs/forget";
|
|
454
487
|
import { isHash } from "@xylabs/hex";
|
|
455
488
|
import { usePromise as usePromise4 } from "@xylabs/react-promise";
|
|
456
|
-
import { isDefined as
|
|
489
|
+
import { isDefined as isDefined5 } from "@xylabs/typeof";
|
|
457
490
|
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
458
|
-
import { useEffect, useState as useState2 } from "react";
|
|
491
|
+
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
459
492
|
var useConfirmTransactionBase = /* @__PURE__ */ __name((transaction, onBroadcast, onStatusUpdate, runner, viewer) => {
|
|
460
493
|
const [status, setStatus] = useState2();
|
|
461
494
|
const onStatusUpdateLocal = /* @__PURE__ */ __name((newStatus) => {
|
|
@@ -463,11 +496,11 @@ var useConfirmTransactionBase = /* @__PURE__ */ __name((transaction, onBroadcast
|
|
|
463
496
|
onStatusUpdate?.(newStatus);
|
|
464
497
|
}, "onStatusUpdateLocal");
|
|
465
498
|
const [transactionConfirmationStatus, transactionConfirmationError] = usePromise4(async () => {
|
|
466
|
-
const hasRunner =
|
|
499
|
+
const hasRunner = isDefined5(runner);
|
|
467
500
|
if (transaction && viewer) {
|
|
468
501
|
const hash = hasRunner ? await runner.broadcastTransaction(transaction) : await PayloadBuilder.hash(transaction[0]);
|
|
469
502
|
if (isHash(hash)) {
|
|
470
|
-
if (hasRunner &&
|
|
503
|
+
if (hasRunner && isDefined5(onBroadcast)) onBroadcast(hash);
|
|
471
504
|
const params = {
|
|
472
505
|
onStatusUpdate: onStatusUpdateLocal,
|
|
473
506
|
transaction,
|
|
@@ -486,7 +519,7 @@ var useConfirmTransactionBase = /* @__PURE__ */ __name((transaction, onBroadcast
|
|
|
486
519
|
runner,
|
|
487
520
|
viewer
|
|
488
521
|
]);
|
|
489
|
-
|
|
522
|
+
useEffect2(() => {
|
|
490
523
|
return () => {
|
|
491
524
|
if (transactionConfirmationStatus) {
|
|
492
525
|
forget2(transactionConfirmationStatus.stop());
|
|
@@ -505,13 +538,13 @@ var useConfirmTransactionBase = /* @__PURE__ */ __name((transaction, onBroadcast
|
|
|
505
538
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
506
539
|
import { asAddress } from "@xylabs/hex";
|
|
507
540
|
import { MainNetwork } from "@xyo-network/chain-network-model";
|
|
508
|
-
import { useCallback, useState as useState3 } from "react";
|
|
541
|
+
import { useCallback as useCallback2, useState as useState3 } from "react";
|
|
509
542
|
var useConnectAccount = /* @__PURE__ */ __name((gatewayName = MainNetwork.id, timeout) => {
|
|
510
543
|
const [connectError, setConnectError] = useState3();
|
|
511
544
|
const { gateway, error, timedout } = useGateway(gatewayName, timeout);
|
|
512
545
|
const [accountPermissions, accountPermissionsError] = useAccountPermissions();
|
|
513
546
|
const [address, setAddress] = useState3();
|
|
514
|
-
const connectSigner =
|
|
547
|
+
const connectSigner = useCallback2(async () => {
|
|
515
548
|
try {
|
|
516
549
|
const assertedGateway = assertEx2(gateway, () => `Gateway ${gatewayName} is not available`);
|
|
517
550
|
const signer = await assertedGateway.signer();
|
|
@@ -550,12 +583,12 @@ var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
|
|
|
550
583
|
}, "useCurrentBlock");
|
|
551
584
|
|
|
552
585
|
// src/hooks/useHttpRpcRunner.ts
|
|
553
|
-
import { isUndefined as
|
|
586
|
+
import { isUndefined as isUndefined4 } from "@xylabs/typeof";
|
|
554
587
|
import { AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner } from "@xyo-network/xl1-rpc";
|
|
555
588
|
import { useMemo as useMemo2 } from "react";
|
|
556
589
|
var useHttpRpcRunner = /* @__PURE__ */ __name((url) => {
|
|
557
590
|
return useMemo2(() => {
|
|
558
|
-
if (
|
|
591
|
+
if (isUndefined4(url)) {
|
|
559
592
|
return;
|
|
560
593
|
}
|
|
561
594
|
const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas);
|
|
@@ -566,12 +599,12 @@ var useHttpRpcRunner = /* @__PURE__ */ __name((url) => {
|
|
|
566
599
|
}, "useHttpRpcRunner");
|
|
567
600
|
|
|
568
601
|
// src/hooks/useNetwork.ts
|
|
569
|
-
import { isUndefined as
|
|
602
|
+
import { isUndefined as isUndefined5 } from "@xylabs/typeof";
|
|
570
603
|
import { SimpleXyoNetwork } from "@xyo-network/xl1-protocol-sdk";
|
|
571
604
|
import { useMemo as useMemo3 } from "react";
|
|
572
605
|
var useNetwork = /* @__PURE__ */ __name((id) => {
|
|
573
606
|
const network = useMemo3(() => {
|
|
574
|
-
if (
|
|
607
|
+
if (isUndefined5(id)) return;
|
|
575
608
|
return new SimpleXyoNetwork(id);
|
|
576
609
|
}, [
|
|
577
610
|
id
|
|
@@ -590,10 +623,10 @@ var useSigner = /* @__PURE__ */ __name((_provider, account) => {
|
|
|
590
623
|
|
|
591
624
|
// src/hooks/viewer/useCheckRpc.ts
|
|
592
625
|
import { delay as delay2 } from "@xylabs/delay";
|
|
593
|
-
import { isDefined as
|
|
626
|
+
import { isDefined as isDefined6, isUndefined as isUndefined6 } from "@xylabs/typeof";
|
|
594
627
|
import { LocalNetwork, SequenceNetwork } from "@xyo-network/chain-network-model";
|
|
595
628
|
import { HttpRpcTransport as HttpRpcTransport2, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, XyoViewerRpcSchemas } from "@xyo-network/xl1-rpc";
|
|
596
|
-
import { useEffect as
|
|
629
|
+
import { useEffect as useEffect3, useMemo as useMemo5, useState as useState4 } from "react";
|
|
597
630
|
var INTERVAL = 5e3;
|
|
598
631
|
var localRpcEndpoint = `${LocalNetwork.url}/rpc`;
|
|
599
632
|
var sequenceRpcEndpoint = `${SequenceNetwork.url}/rpc`;
|
|
@@ -609,7 +642,7 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
|
|
|
609
642
|
const [isLocalProducer, setIsLocalProducer] = useState4(false);
|
|
610
643
|
const [error, setError] = useState4();
|
|
611
644
|
const viewer = useMemo5(() => {
|
|
612
|
-
if (
|
|
645
|
+
if (isUndefined6(endpoint)) return;
|
|
613
646
|
const transport = new HttpRpcTransport2(endpoint, {
|
|
614
647
|
...XyoViewerRpcSchemas,
|
|
615
648
|
...NetworkStakeViewerRpcSchemas
|
|
@@ -622,14 +655,14 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
|
|
|
622
655
|
}, [
|
|
623
656
|
endpoint
|
|
624
657
|
]);
|
|
625
|
-
|
|
626
|
-
if (
|
|
658
|
+
useEffect3(() => {
|
|
659
|
+
if (isUndefined6(viewer)) return;
|
|
627
660
|
void (async () => {
|
|
628
661
|
setError(void 0);
|
|
629
662
|
while (!isLocalProducer) {
|
|
630
663
|
try {
|
|
631
664
|
const block = await viewer.currentBlock();
|
|
632
|
-
setIsLocalProducer(
|
|
665
|
+
setIsLocalProducer(isDefined6(block));
|
|
633
666
|
} catch (err) {
|
|
634
667
|
setError(err);
|
|
635
668
|
setIsLocalProducer(false);
|
|
@@ -647,12 +680,12 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
|
|
|
647
680
|
}, "useCheckRpc");
|
|
648
681
|
|
|
649
682
|
// src/hooks/viewer/useHttpRpcViewer.ts
|
|
650
|
-
import { isUndefined as
|
|
683
|
+
import { isUndefined as isUndefined7 } from "@xylabs/typeof";
|
|
651
684
|
import { HttpRpcTransport as HttpRpcTransport3, JsonRpcNetworkStakeViewer as JsonRpcNetworkStakeViewer2, JsonRpcXyoViewer as JsonRpcXyoViewer2, NetworkStakeViewerRpcSchemas as NetworkStakeViewerRpcSchemas2, XyoViewerRpcSchemas as XyoViewerRpcSchemas2 } from "@xyo-network/xl1-rpc";
|
|
652
685
|
import { useMemo as useMemo6 } from "react";
|
|
653
686
|
var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
|
|
654
687
|
const resolvedViewer = useMemo6(() => {
|
|
655
|
-
if (
|
|
688
|
+
if (isUndefined7(url)) {
|
|
656
689
|
return;
|
|
657
690
|
}
|
|
658
691
|
const transport = new HttpRpcTransport3(`${url}/rpc`, {
|
|
@@ -670,25 +703,28 @@ var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
|
|
|
670
703
|
|
|
671
704
|
// src/hooks/viewer/useViewerFromWallet.ts
|
|
672
705
|
import { usePromise as usePromise6 } from "@xylabs/react-promise";
|
|
673
|
-
import { isDefined as
|
|
674
|
-
var useViewerFromWallet = /* @__PURE__ */ __name((networkId) => {
|
|
675
|
-
const { gateway, error, isLoading } = useGateway(networkId);
|
|
676
|
-
|
|
706
|
+
import { isDefined as isDefined7, isDefinedNotNull as isDefinedNotNull3, isNull as isNull4 } from "@xylabs/typeof";
|
|
707
|
+
var useViewerFromWallet = /* @__PURE__ */ __name((networkId, timeout) => {
|
|
708
|
+
const { gateway, error, isLoading, timedout } = useGateway(networkId, timeout);
|
|
709
|
+
const result = usePromise6(async () => {
|
|
677
710
|
if (isDefinedNotNull3(error)) return null;
|
|
678
711
|
if (isLoading) return;
|
|
679
|
-
if (
|
|
712
|
+
if (timedout && isNull4(gateway)) return null;
|
|
713
|
+
if (isDefined7(gateway) && isDefined7(networkId)) {
|
|
680
714
|
const connection = await gateway?.connection();
|
|
681
715
|
return connection?.viewer;
|
|
682
716
|
}
|
|
683
717
|
}, [
|
|
684
718
|
gateway,
|
|
685
|
-
networkId
|
|
719
|
+
networkId,
|
|
720
|
+
timeout
|
|
686
721
|
]);
|
|
722
|
+
return result;
|
|
687
723
|
}, "useViewerFromWallet");
|
|
688
724
|
|
|
689
725
|
// src/components/account/BalanceHistoryTable.tsx
|
|
690
726
|
import { Table, TableBody, TableCell, TableHead, TableRow, Tooltip } from "@mui/material";
|
|
691
|
-
import { isDefined as
|
|
727
|
+
import { isDefined as isDefined8 } from "@xylabs/typeof";
|
|
692
728
|
import { BlockAddressChip, BlockEpochTableCellInner, BlockNumberTableCellInner } from "@xyo-network/react-chain-blockchain";
|
|
693
729
|
import { RawInfoIconButton } from "@xyo-network/react-payload-raw-info";
|
|
694
730
|
import { XL1Amount } from "@xyo-network/xl1-protocol";
|
|
@@ -708,7 +744,7 @@ var TableHeadingLabels = [
|
|
|
708
744
|
// src/components/account/BalanceHistoryTable.tsx
|
|
709
745
|
var AccountBalanceHistoryTable = /* @__PURE__ */ __name(({ history, ...props }) => {
|
|
710
746
|
const formatAmount = /* @__PURE__ */ __name((amount) => {
|
|
711
|
-
if (!
|
|
747
|
+
if (!isDefined8(amount)) {
|
|
712
748
|
return "N/A";
|
|
713
749
|
}
|
|
714
750
|
const xl1Amount = new XL1Amount(amount);
|
|
@@ -720,7 +756,7 @@ var AccountBalanceHistoryTable = /* @__PURE__ */ __name(({ history, ...props })
|
|
|
720
756
|
locale: navigator.language
|
|
721
757
|
});
|
|
722
758
|
}, "formatAmount");
|
|
723
|
-
return
|
|
759
|
+
return isDefined8(history) ? /* @__PURE__ */ React.createElement(Table, props, /* @__PURE__ */ React.createElement(TableHead, null, /* @__PURE__ */ React.createElement(TableRow, null, TableHeadingLabels.map((heading) => /* @__PURE__ */ React.createElement(TableCell, {
|
|
724
760
|
key: heading
|
|
725
761
|
}, heading)))), /* @__PURE__ */ React.createElement(TableBody, null, history?.map(({ amount, blockNumber, debug, from, key, timestamp, to, type, txHash }) => /* @__PURE__ */ React.createElement(TableRow, {
|
|
726
762
|
key
|
|
@@ -770,7 +806,7 @@ var AccountBalanceHistoryFlexBox = /* @__PURE__ */ __name(({ address, refresh, v
|
|
|
770
806
|
const netBalance = received - sent;
|
|
771
807
|
return netBalance < 0n ? `-${formatBalance(sent - received)}` : formatBalance(netBalance);
|
|
772
808
|
}, "formatBalanceMagnitude");
|
|
773
|
-
return
|
|
809
|
+
return isDefined9(history) && isDefined9(address) ? /* @__PURE__ */ React2.createElement(FlexCol, props, /* @__PURE__ */ React2.createElement(ErrorRender, {
|
|
774
810
|
error,
|
|
775
811
|
scope: "AccountBalanceHistoryTable"
|
|
776
812
|
}), /* @__PURE__ */ React2.createElement(Typography, {
|
|
@@ -810,9 +846,9 @@ var ConnectedAccount = /* @__PURE__ */ __name(({ address }) => {
|
|
|
810
846
|
// src/components/connected/ConnectAccountsStack.tsx
|
|
811
847
|
import { Alert, AlertTitle, Button, Stack as Stack2, Typography as Typography3 } from "@mui/material";
|
|
812
848
|
import { ButtonEx } from "@xylabs/react-button";
|
|
813
|
-
import { isDefined as
|
|
849
|
+
import { isDefined as isDefined10, isUndefined as isUndefined8 } from "@xylabs/typeof";
|
|
814
850
|
import { ErrorRender as ErrorRender2 } from "@xyo-network/react-error";
|
|
815
|
-
import React4, { useEffect as
|
|
851
|
+
import React4, { useEffect as useEffect4 } from "react";
|
|
816
852
|
var DefaultConnectComponent = /* @__PURE__ */ __name((props) => /* @__PURE__ */ React4.createElement(ButtonEx, {
|
|
817
853
|
variant: "contained",
|
|
818
854
|
size: "small",
|
|
@@ -835,16 +871,16 @@ var DefaultNoWalletInstalledComponent = /* @__PURE__ */ __name(() => /* @__PURE_
|
|
|
835
871
|
}, "Get XL1 Wallet")), "DefaultNoWalletInstalledComponent");
|
|
836
872
|
var ConnectAccountsStack = /* @__PURE__ */ __name(({ AccountComponent = ConnectedAccount, ConnectComponent = DefaultConnectComponent, NoWalletInstalledComponent = DefaultNoWalletInstalledComponent, onAccountConnected, onCancel, timeout, ...props }) => {
|
|
837
873
|
const { address, connectSigner, error, timedout } = useConnectAccount(void 0, timeout);
|
|
838
|
-
|
|
839
|
-
if (
|
|
874
|
+
useEffect4(() => {
|
|
875
|
+
if (isDefined10(error) && isDefined10(onCancel)) {
|
|
840
876
|
onCancel();
|
|
841
877
|
}
|
|
842
878
|
}, [
|
|
843
879
|
error,
|
|
844
880
|
onCancel
|
|
845
881
|
]);
|
|
846
|
-
|
|
847
|
-
if (
|
|
882
|
+
useEffect4(() => {
|
|
883
|
+
if (isDefined10(address) && isDefined10(onAccountConnected)) {
|
|
848
884
|
onAccountConnected(address);
|
|
849
885
|
}
|
|
850
886
|
}, [
|
|
@@ -856,11 +892,11 @@ var ConnectAccountsStack = /* @__PURE__ */ __name(({ AccountComponent = Connecte
|
|
|
856
892
|
alignItems: "start",
|
|
857
893
|
spacing: 2,
|
|
858
894
|
...props
|
|
859
|
-
},
|
|
895
|
+
}, isDefined10(address) ? /* @__PURE__ */ React4.createElement(AccountComponent, {
|
|
860
896
|
address
|
|
861
|
-
}) : null,
|
|
897
|
+
}) : null, isUndefined8(address) && !timedout ? /* @__PURE__ */ React4.createElement(ConnectComponent, {
|
|
862
898
|
onClick: /* @__PURE__ */ __name(() => void connectSigner(), "onClick")
|
|
863
|
-
}, "Connect") : null,
|
|
899
|
+
}, "Connect") : null, isUndefined8(address) && timedout ? /* @__PURE__ */ React4.createElement(NoWalletInstalledComponent, null) : null, /* @__PURE__ */ React4.createElement(ErrorRender2, {
|
|
864
900
|
error,
|
|
865
901
|
scope: "ConnectSigner:error"
|
|
866
902
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/account/BalanceHistoryFlexbox.tsx","../../src/hooks/client/useClient.ts","../../src/hooks/helpers/getXyoClient.ts","../../src/hooks/helpers/transaction/Confirmation.ts","../../src/hooks/client/permissions/usePermissions.ts","../../src/hooks/client/permissions/usePermissionsAccounts.ts","../../src/hooks/client/helpers/findCaveat.ts","../../src/hooks/client/useGateway.ts","../../src/hooks/useAccountBalanceHistory.ts","../../src/lib/balanceForRange.ts","../../src/lib/findMinimumBlock.ts","../../src/hooks/useAddressBalance.ts","../../src/hooks/useConfirmTransactionBase.ts","../../src/hooks/useConnectAccount.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/components/account/BalanceHistoryTable.tsx","../../src/types/account/Table.ts","../../src/components/connected/account/Connected.tsx","../../src/components/connected/ConnectAccountsStack.tsx"],"sourcesContent":["import { Typography } from '@mui/material'\nimport { type Address } from '@xylabs/hex'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { isDefined } from '@xylabs/typeof'\nimport { ErrorRender } from '@xyo-network/react-error'\nimport { AttoXL1, XL1Amount } from '@xyo-network/xl1-protocol'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\nimport React from 'react'\n\nimport { useAccountBalanceHistory } from '../../hooks/index.ts'\nimport { AccountBalanceHistoryTable } from './BalanceHistoryTable.tsx'\n\nexport interface AccountBalanceHistoryFlexBoxProps extends FlexBoxProps {\n address?: Address\n refresh?: number\n viewer?: XyoViewer\n}\n\nexport const AccountBalanceHistoryFlexBox: React.FC<AccountBalanceHistoryFlexBoxProps> = ({\n address, refresh, viewer, ...props\n}) => {\n const [results, error] = useAccountBalanceHistory(address, viewer, refresh)\n const {\n history, balance, truncated,\n } = results || { balance: [AttoXL1(0n), AttoXL1(0n)], history: undefined }\n\n const formatBalance = (balance: bigint) => {\n const xl1Amount = new XL1Amount(balance)\n return xl1Amount.toString(undefined, {\n places: 18, maxDecimal: 12, maxCharacters: 12, minDecimals: 1, locale: navigator.language,\n })\n }\n\n const formatBalanceMagnitude = (set: [AttoXL1, AttoXL1]) => {\n const [received, sent] = set\n const netBalance = received - sent\n return netBalance < 0n ? `-${formatBalance(sent - received)}` : formatBalance(netBalance)\n }\n\n return isDefined(history) && isDefined(address)\n ? (\n <FlexCol {...props}>\n <ErrorRender error={error} scope=\"AccountBalanceHistoryTable\" />\n <Typography variant=\"h6\" gutterBottom>\n {formatBalanceMagnitude(balance)}\n </Typography>\n {truncated\n ? (\n <Typography variant=\"caption\" gutterBottom>\n Ranged Balance from\n {' '}\n {history.at(-1)!.blockNumber}\n {' '}\n -\n {' '}\n {history[0].blockNumber}\n </Typography>\n )\n : null}\n <AccountBalanceHistoryTable history={history} />\n </FlexCol>\n )\n : null\n}\n","import type { XyoClient } from '@xyo-network/xl1-protocol-sdk'\nimport { useSyncExternalStore } from 'react'\n\nimport { getXyoClient } from '../helpers/index.ts'\n\ninterface ClientState {\n client?: XyoClient\n error: Error | null\n isLoading: boolean\n timedout: boolean\n}\n\nlet currentState: ClientState = {\n client: undefined,\n error: null,\n isLoading: false,\n timedout: false,\n}\n\nconst listeners = new Set<() => void>()\n\nconst emitChange = () => {\n for (const listener of listeners) listener()\n}\n\nconst updateState = (newState: Partial<ClientState>) => {\n currentState = { ...currentState, ...newState }\n emitChange()\n}\n\nconst initializeClient = async (timeout?: number) => {\n if (currentState.isLoading || currentState.client) return\n\n updateState({ isLoading: true, error: null })\n\n try {\n const client = await getXyoClient(timeout)\n if (client === null) {\n updateState({ timedout: true, isLoading: false })\n return\n }\n updateState({\n client, isLoading: false, error: null,\n })\n } catch (error) {\n console.error('Error initializing XyoClient', error)\n updateState({ error: error as Error, isLoading: false })\n }\n}\n\nconst subscribe = (listener: () => void, timeout?: number) => {\n listeners.add(listener)\n\n void initializeClient(timeout)\n\n return () => {\n listeners.delete(listener)\n }\n}\n\nconst getSnapshot = (): ClientState => currentState\n\nexport const useClient = (timeout?: number) => {\n const subscribeWithTimeout = (listener: () => void) => subscribe(listener, timeout)\n return useSyncExternalStore(subscribeWithTimeout, getSnapshot)\n}\n","import type { XyoClient } from '@xyo-network/xl1-protocol-sdk'\n\nconst CLIENT_LISTENER_TIMEOUT = 500\n\nconst hasXyoClient = () => {\n return 'client' in globalThis.xyo\n}\n\nexport const listenForClientInjection = (onClientReady: () => void, timeout: number, onTimeout: () => void) => {\n let resolved = false\n const listener: EventListener = () => {\n onClientReady()\n resolved = true\n }\n globalThis.addEventListener('xyo:plugin-ready', listener)\n setTimeout(() => {\n if (!resolved) {\n onTimeout()\n }\n }, timeout)\n}\n\ntype ReturnType = XyoClient | undefined | null\n\nexport async function getXyoClient(timeout = CLIENT_LISTENER_TIMEOUT): Promise<ReturnType> {\n return hasXyoClient()\n ? globalThis.xyo.client\n // listen for the XyoWallet to be injected\n : await new Promise<ReturnType>((resolve) => {\n listenForClientInjection(\n () => {\n resolve(globalThis.xyo.client)\n },\n timeout,\n () => {\n resolve(null)\n },\n )\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport { forget } from '@xylabs/forget'\nimport type { Hash } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport { isDefined, isNull } from '@xylabs/typeof'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nexport type ConfirmationStatusUpdate = {\n blockNumber: number\n confirmed: boolean\n error?: Error\n progress?: number\n remainingBlocks?: number\n}\n\nexport type TransactionConfirmationParams = {\n onStatusUpdate?: (status: ConfirmationStatusUpdate) => void\n transaction: SignedHydratedTransaction\n txHash: Hash\n viewer: XyoViewer\n}\n\nexport class TransactionConfirmationStatus {\n private readonly _params: TransactionConfirmationParams\n private active = false\n\n constructor(params: TransactionConfirmationParams) {\n this._params = params\n }\n\n get exp(): number {\n return assertEx(this.transaction[0].exp, () => 'exp is not found, transaction is not set')\n }\n\n get nbf(): number {\n return assertEx(this.transaction[0].nbf, () => 'nbf is not found, transaction is not set')\n }\n\n get onStatusUpdate(): TransactionConfirmationParams['onStatusUpdate'] {\n return this._params.onStatusUpdate\n }\n\n get params(): TransactionConfirmationParams {\n return this._params\n }\n\n get transaction(): SignedHydratedTransaction {\n return this.params.transaction\n }\n\n get txHash(): Hash {\n return this.params.txHash\n }\n\n get viewer(): XyoViewer {\n return this.params.viewer\n }\n\n static create(params: TransactionConfirmationParams): Promisable<TransactionConfirmationStatus> {\n return new TransactionConfirmationStatus(params)\n }\n\n async start(): Promise<void> {\n this.active = true\n try {\n const currentBlockNumber = await this.viewer.currentBlockNumber()\n while (isDefined(currentBlockNumber) && this.active) {\n await this.checkBlock(currentBlockNumber)\n // check block every second to see if the transaction is confirmed\n await delay(1000)\n }\n } catch (error) {\n await this.stop()\n forget(this.onStatusUpdate?.({\n error: error instanceof Error ? error : new Error('Unknown error occurred'),\n confirmed: false,\n blockNumber: 0,\n progress: 0,\n remainingBlocks: 0,\n }))\n }\n }\n\n stop(): Promisable<void> {\n this.active = false\n }\n\n private async checkBlock(blockNumber: number): Promise<void> {\n if (blockNumber < this.nbf) {\n await this.stop()\n forget(this.onStatusUpdate?.({\n error: new Error(`Block number: ${blockNumber} is before ${this.nbf}`),\n confirmed: false,\n blockNumber,\n progress: 0,\n remainingBlocks: this.exp - blockNumber,\n }))\n }\n if (blockNumber > this.exp) {\n forget(this.onStatusUpdate?.({\n confirmed: false, blockNumber, progress: 100, remainingBlocks: 0,\n }))\n return\n }\n if (blockNumber < this.exp) {\n await this.checkConfirmation(blockNumber)\n }\n }\n\n private async checkConfirmation(blockNumber: number): Promise<void> {\n const remainingBlocks = this.exp - blockNumber\n const progress = Math.round(((blockNumber - this.nbf) / (this.exp - this.nbf)) * 100)\n\n const tx = await this.viewer.transactionByHash?.(this.txHash)\n if (isNull(tx)) {\n this.onStatusUpdate?.({\n confirmed: false, blockNumber, progress, remainingBlocks,\n })\n } else {\n this.onStatusUpdate?.({\n confirmed: true, blockNumber, progress, remainingBlocks,\n })\n await this.stop()\n }\n }\n}\n","import { useClient } from '../useClient.ts'\n\nexport const usePermissions = () => {\n const {\n client, isLoading, error, timedout,\n } = useClient()\n const permissions = client?.permissions\n return {\n permissions,\n isLoading,\n error,\n timedout,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isArray, isDefined, isDefinedNotNull, isString,\n} from '@xylabs/typeof'\nimport type { JsonValue } from '@xyo-network/xl1-rpc'\n\nimport { findCaveat } from '../helpers/index.ts'\nimport { usePermissions } from './usePermissions.ts'\n\nconst validateRestrictedAccounts = (restrictedAccounts: JsonValue): readonly string [] => {\n if (isDefined(restrictedAccounts)) {\n if (isArray(restrictedAccounts) && restrictedAccounts.every(isString)) {\n return restrictedAccounts\n }\n throw new Error(\n `Unrecognized format for restrictReturnedAccounts caveat found on permissions. \\n\n Should be an array of strings: ${JSON.stringify(restrictedAccounts)}`,\n )\n }\n return []\n}\n\nexport const useAccountPermissions = () => {\n const { permissions, error } = usePermissions()\n\n return usePromise(async () => {\n if (isDefinedNotNull(error)) throw error\n if (isDefined(permissions)) {\n const restrictedAccounts = await findCaveat(\n permissions,\n // TODO - extract to constant in protocol package\n 'xyoWallet_getAccounts',\n 'restrictReturnedAccounts',\n )\n return validateRestrictedAccounts(restrictedAccounts)\n }\n }, [permissions])\n}\n","import { isDefined } from '@xylabs/typeof'\nimport type {\n CaveatTypes, ParentCapability, XyoPermissions,\n} from '@xyo-network/xl1-protocol-sdk'\n\nexport const findCaveat = async (\n permissions: XyoPermissions,\n targetCapability: ParentCapability,\n targetCaveatType: CaveatTypes,\n) => {\n const existingPermissions = await permissions.getPermissions()\n if (isDefined(existingPermissions) && existingPermissions.length > 0) {\n const foundPermissions = existingPermissions\n .find(p => p.parentCapability === targetCapability)\n if (isDefined(foundPermissions)) {\n return foundPermissions.caveats?.find(caveat => caveat.type === targetCaveatType)?.value ?? []\n }\n }\n return existingPermissions\n}\n","import type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useClient } from './useClient.ts'\n\nexport const useGateway = (gatewayName?: GatewayName, timeout?: number) => {\n const {\n client, isLoading, error, timedout,\n } = useClient(timeout)\n return {\n gateway: gatewayName ? client?.gateways?.[gatewayName] : undefined,\n isLoading,\n error,\n timedout,\n }\n}\n","import {\n type Address, type Hex,\n hexToBigInt,\n} from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isUndefined } from '@xylabs/typeof'\nimport type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport type { AccountBalanceHistoryItem, XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nimport { balanceForRange, findMinimumBlock } from '../lib/index.ts'\nimport type { AccountBalanceHistoryItemRow } from '../types/index.ts'\n\nexport const formatAccountBalanceHistory = (address: Address, history: AccountBalanceHistoryItem[]): AccountBalanceHistoryItemRow[] => {\n let results: AccountBalanceHistoryItemRow[] = []\n for (const item of history) {\n const [blockBw, txBw, transfer] = item\n if (address === transfer.from) {\n for (const [to, amount] of Object.entries(transfer.transfers)) {\n results.push({\n amount: hexToBigInt(amount as Hex),\n blockNumber: blockBw.block,\n from: transfer.from,\n timestamp: blockBw.$epoch,\n key: globalThis.crypto.randomUUID(),\n to: to as Address,\n txHash: txBw?._hash,\n debug: item,\n type: 'send',\n })\n }\n } else {\n results.push({\n amount: hexToBigInt(transfer.transfers[address] as Hex),\n blockNumber: blockBw.block,\n from: transfer.from,\n key: globalThis.crypto.randomUUID(),\n timestamp: blockBw.$epoch,\n to: address,\n txHash: txBw?._hash,\n debug: item,\n type: 'receive',\n })\n }\n }\n return results\n}\n\nexport const useAccountBalanceHistory = (address?: Address, viewer?: XyoViewer, refresh?: number) => {\n return usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n\n // Pagination Values\n let page = 1\n let lastBlock: number\n const maxPage = 10\n const pagedHistory: AccountBalanceHistoryItem[] = []\n\n // Fetch first page to get starting lastBlock\n const history = await viewer.accountBalanceHistory(address)\n if (history.length > 0) {\n pagedHistory.push(...history)\n // Set lastBlock to one less than the lowest block in the first page\n lastBlock = findMinimumBlock(history)\n while (page < maxPage) {\n // Fetch next page\n const nextHistory = await viewer.accountBalanceHistory(address, [0, lastBlock] as XL1BlockRange)\n // Break if no more history\n if (nextHistory.length === 0) break\n // Update lastBlock and append to pagedHistory\n lastBlock = findMinimumBlock(nextHistory)\n pagedHistory.push(...nextHistory)\n // Increment page\n // Even if we are going to go over and break the loop, we still want to increment to show the answer was truncated\n page++\n }\n }\n const formattedHistory = formatAccountBalanceHistory(address, pagedHistory)\n\n return {\n history: formattedHistory,\n balance: balanceForRange(address, pagedHistory),\n truncated: page >= maxPage,\n }\n }, [address, viewer, refresh])\n}\n","import type { Address } from '@xylabs/hex'\nimport { hexToBigInt, toHex } from '@xylabs/hex'\nimport type { AttoXL1 } from '@xyo-network/xl1-protocol'\nimport type { AccountBalanceHistoryItem } from '@xyo-network/xl1-protocol-sdk'\n\nexport const balanceForRange = (address: Address, results: AccountBalanceHistoryItem[]): [AttoXL1, AttoXL1] => {\n const totalReceivedBalance = results?.reduce((a, [_block, _tx, transfer]) => {\n return a + hexToBigInt(transfer.transfers[address] ?? toHex(0))\n }, 0n)\n // eslint-disable-next-line unicorn/no-array-reduce\n const totalSentBalance = results?.reduce((a, [_block, _tx, transfer]) => {\n return (transfer.from === address) ? a + Object.values(transfer.transfers).reduce((a, v) => a + (v ? hexToBigInt(v) : 0n), 0n) : a\n }, 0n)\n return [totalReceivedBalance, totalSentBalance] as [AttoXL1, AttoXL1]\n}\n","import type { AccountBalanceHistoryItem } from '@xyo-network/xl1-protocol-sdk'\n\nexport const findMinimumBlock = (history: AccountBalanceHistoryItem[]): number => {\n // since taking Math.min of an empty array returns Infinity\n if (history.length === 0) return 0\n const blockNumbers = history.map(([blockBw]) => blockBw.block)\n const min = Math.min(...blockNumbers)\n return Math.max(min - 1, 0)\n}\n","import type { Address } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport type { AttoXL1 } from '@xyo-network/xl1-protocol'\nimport { ShiftedBigInt } from '@xyo-network/xl1-protocol'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\nimport {\n useMemo, useRef, useState,\n} from 'react'\n\nexport const useAddressBalance = (\n // address to get balance for\n address?: Address,\n // viewer to use for fetching balance\n viewer?: XyoViewer,\n // refresh balance trigger\n refresh?: number,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n const [balancesError, setBalancesError] = useState<Error>()\n\n const balancePromiseRef = useRef<Promise<AttoXL1> | null>(null)\n usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n\n setLoading(true)\n setBalancesError(undefined)\n\n // Create and store the current promise\n const currentPromise = viewer.accountBalance(address) as Promise<AttoXL1>\n balancePromiseRef.current = currentPromise\n\n try {\n const result = await currentPromise\n // Only update state if this is still the latest promise\n if (balancePromiseRef.current === currentPromise) {\n setBalancesResult(result as AttoXL1)\n setLoading(false)\n }\n } catch (err) {\n // Only update state if this is still the latest promise\n if (balancePromiseRef.current === currentPromise) {\n console.error('Error in queued call:', err)\n setBalancesResult(undefined)\n setBalancesError(err as Error)\n setLoading(false)\n }\n }\n }, [address, viewer, refresh])\n\n useMemo(() => {\n if (balancesError) {\n setLoading(false)\n }\n }, [balancesError])\n\n const shiftedBigInt = useMemo(() => {\n if (typeof balancesResult !== 'bigint') return\n return new ShiftedBigInt(balancesResult, {\n places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,\n })\n }, [balancesResult])\n\n const balanceIntlFriendly = useMemo(() => {\n return shiftedBigInt?.toFullString()\n }, [shiftedBigInt])\n\n const shortBalanceIntlFriendly = useMemo(() => {\n return isUndefinedOrNull(balancesResult)\n ? undefined\n : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()\n }, [shiftedBigInt])\n\n return {\n address,\n balanceForAddress: balancesResult,\n balanceIntlFriendly,\n shortBalanceIntlFriendly,\n error: balancesError,\n loading,\n }\n}\n","import { forget } from '@xylabs/forget'\nimport type { Hash } from '@xylabs/hex'\nimport { isHash } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isDefined } from '@xylabs/typeof'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { XyoRunner, XyoViewer } from '@xyo-network/xl1-protocol-sdk'\nimport { useEffect, useState } from 'react'\n\nimport type { ConfirmationStatusUpdate, TransactionConfirmationParams } from './helpers/index.ts'\nimport { TransactionConfirmationStatus } from './helpers/index.ts'\n\nexport const useConfirmTransactionBase = (\n // The transaction to confirm\n transaction?: SignedHydratedTransaction,\n // Callback for when the transaction is broadcast to the network\n onBroadcast?: (hash: Hash) => void,\n // Optional callback for status updates during confirmation\n onStatusUpdate?: TransactionConfirmationParams['onStatusUpdate'],\n // Runner to use for broadcasting transactions\n runner?: XyoRunner,\n // Viewer to use for checking transaction status\n viewer?: XyoViewer,\n) => {\n const [status, setStatus] = useState<ConfirmationStatusUpdate>()\n const onStatusUpdateLocal = (newStatus: ConfirmationStatusUpdate) => {\n setStatus(newStatus)\n onStatusUpdate?.(newStatus)\n }\n\n const [transactionConfirmationStatus, transactionConfirmationError] = usePromise(async () => {\n const hasRunner = isDefined(runner)\n if (transaction && viewer) {\n const hash = hasRunner ? (await runner.broadcastTransaction(transaction)) : await PayloadBuilder.hash(transaction[0])\n if (isHash(hash)) {\n if (hasRunner && isDefined(onBroadcast)) onBroadcast(hash)\n const params: TransactionConfirmationParams = {\n onStatusUpdate: onStatusUpdateLocal,\n transaction,\n txHash: hash,\n viewer,\n }\n const instance = await TransactionConfirmationStatus.create(params)\n await instance.start()\n return instance\n } else {\n throw new Error('unexpected return type from broadcast transaction')\n }\n }\n }, [transaction, runner, viewer])\n\n useEffect(() => {\n return () => {\n if (transactionConfirmationStatus) {\n // Stop the transaction confirmation status instance when the component unmounts\n forget(transactionConfirmationStatus.stop())\n }\n }\n }, [transactionConfirmationStatus])\n\n return { status, transactionConfirmationError }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { type Address, asAddress } from '@xylabs/hex'\nimport { MainNetwork } from '@xyo-network/chain-network-model'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useCallback, useState } from 'react'\n\nimport { useAccountPermissions, useGateway } from './client/index.ts'\n\nexport const useConnectAccount = (gatewayName: GatewayName = MainNetwork.id, timeout?: number) => {\n const [connectError, setConnectError] = useState<Error>()\n\n const {\n gateway, error, timedout,\n } = useGateway(gatewayName, timeout)\n\n const [accountPermissions, accountPermissionsError] = useAccountPermissions()\n\n const [address, setAddress] = useState<Address>()\n\n const connectSigner = useCallback(async () => {\n try {\n const assertedGateway = assertEx(gateway, () => `Gateway ${gatewayName} is not available`)\n const signer = await assertedGateway.signer()\n const address = await signer.address()\n setAddress(address)\n return address\n } catch (e) {\n setConnectError(e as Error)\n }\n }, [gateway, gatewayName])\n\n return {\n address: asAddress(accountPermissions?.[0] ?? address), connectSigner, error: error ?? accountPermissionsError ?? connectError, gateway, timedout,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { isDefinedNotNull } from '@xylabs/typeof'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer | null) => {\n return usePromise(async () => {\n if (isDefinedNotNull(viewer) && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { RpcTransport, XyoRunnerRpcSchemas } from '@xyo-network/xl1-rpc'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcRunner = (url?: string) => {\n return useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport as RpcTransport<typeof XyoRunnerRpcSchemas>)\n }, [url])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { DefaultNetworkIds } from '@xyo-network/xl1-protocol'\nimport { SimpleXyoNetwork } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nexport const useNetwork = (id?: DefaultNetworkIds) => {\n const network = useMemo(() => {\n if (isUndefined(id)) return\n return new SimpleXyoNetwork(id)\n }, [id])\n\n return network\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport {\n SimpleXyoSigner, type XyoConnection, type XyoSigner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnection, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new SimpleXyoSigner(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, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, 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, ...NetworkStakeViewerRpcSchemas })\n const networkStakeViewer = new JsonRpcNetworkStakeViewer(transport)\n const viewer = new JsonRpcXyoViewer(transport, { networkStakeViewer })\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, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, 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, ...NetworkStakeViewerRpcSchemas })\n return new JsonRpcXyoViewer(transport, { networkStakeViewer: new JsonRpcNetworkStakeViewer(transport) })\n }, [url])\n\n return resolvedViewer\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { isDefined, isDefinedNotNull } from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useGateway } from '../client/index.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 {\n gateway, error, isLoading,\n } = useGateway(networkId)\n\n return usePromise(async () => {\n if (isDefinedNotNull(error)) return null\n if (isLoading) return\n if (isDefined(gateway) && isDefined(networkId)) {\n const connection = await gateway?.connection()\n return connection?.viewer\n }\n }, [gateway, networkId])\n}\n","import type { TableProps } from '@mui/material'\nimport {\n Table, TableBody, TableCell, TableHead, TableRow,\n Tooltip,\n} from '@mui/material'\nimport { isDefined } from '@xylabs/typeof'\nimport {\n BlockAddressChip, BlockEpochTableCellInner, BlockNumberTableCellInner,\n} from '@xyo-network/react-chain-blockchain'\nimport { RawInfoIconButton } from '@xyo-network/react-payload-raw-info'\nimport { XL1Amount } from '@xyo-network/xl1-protocol'\nimport type { JsonValue } from '@xyo-network/xl1-rpc'\nimport React from 'react'\n\nimport type { AccountBalanceHistoryItemRow } from '../../types/index.ts'\nimport { TableHeadingLabels } from '../../types/index.ts'\n\nexport interface AccountBalanceHistoryTableProps extends TableProps {\n history?: AccountBalanceHistoryItemRow[]\n}\n\nexport const AccountBalanceHistoryTable: React.FC<AccountBalanceHistoryTableProps> = ({ history, ...props }) => {\n const formatAmount = (amount?: bigint) => {\n if (!isDefined(amount)) {\n return 'N/A'\n }\n const xl1Amount = new XL1Amount(amount)\n return xl1Amount.toString(undefined, {\n places: 18, maxDecimal: 12, maxCharacters: 12, minDecimals: 1, locale: navigator.language,\n })\n }\n\n return isDefined(history)\n ? (\n <Table {...props}>\n <TableHead>\n <TableRow>\n {TableHeadingLabels.map(heading => (\n <TableCell key={heading}>{heading}</TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {history?.map(({\n amount, blockNumber, debug, from, key, timestamp, to, type, txHash,\n }) => (\n <TableRow key={key}>\n <TableCell>{txHash || 'N/A'}</TableCell>\n <BlockNumberTableCellInner blockNumber={blockNumber} />\n <BlockEpochTableCellInner epoch={timestamp} />\n <TableCell>\n <Tooltip title={`From Address: ${from}`}>\n <BlockAddressChip address={from} toolTipTitle={`From: ${from}`} />\n </Tooltip>\n </TableCell>\n <TableCell>\n <Tooltip title={`To Address: ${to}`}>\n <BlockAddressChip address={to} toolTipTitle={`To: ${to}`} />\n </Tooltip>\n </TableCell>\n <TableCell>\n <Tooltip title={`Raw Amount: ${amount}`}>\n <span>\n {type === 'send' ? '-' : ''}\n {formatAmount(amount)}\n </span>\n </Tooltip>\n </TableCell>\n <TableCell>\n <RawInfoIconButton rawValue={debug as JsonValue} />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )\n : null\n}\n","import type { AccountBalanceHistoryItemRow } from './BalanceHistoryItemRow.ts'\n\nexport type TableHeadingLabels = 'Tx Hash' | 'BlockNumber' | 'Timestamp' | 'From' | 'To' | 'Amount' | 'Debug'\nexport type TableHeadings = { [key in keyof AccountBalanceHistoryItemRow]: TableHeadingLabels }\n\nexport const TableHeadingLabels: TableHeadingLabels[] = [\n 'Tx Hash',\n 'BlockNumber',\n 'Timestamp',\n 'From',\n 'To',\n 'Amount',\n 'Debug',\n] as const\n","import {\n Stack, Tooltip, Typography,\n} from '@mui/material'\nimport { EthAddressWrapper } from '@xylabs/eth-address'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport React from 'react'\n\nexport const ConnectedAccount: React.FC<{ address: string }> = ({ address }) => {\n const shortenedAddress = `${EthAddressWrapper.fromString(address)?.toShortString(4)}`\n\n return (\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <BlockiesAvatarAddress address={address} size={21} />\n <Tooltip title={address}>\n <Typography color=\"textSecondary\" variant=\"caption\" fontFamily=\"monospace\">{shortenedAddress}</Typography>\n </Tooltip>\n </Stack>\n )\n}\n","import type { StackProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Button, Stack,\n Typography,\n} from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport type { ButtonExProps } from '@xylabs/react-button'\nimport { ButtonEx } from '@xylabs/react-button'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { ErrorRender } from '@xyo-network/react-error'\nimport type { ComponentType, MouseEventHandler } from 'react'\nimport React, { useEffect } from 'react'\n\nimport { useConnectAccount } from '../../hooks/index.ts'\nimport { ConnectedAccount } from './account/index.ts'\n\nconst DefaultConnectComponent: React.FC<ButtonExProps> = props => (\n <ButtonEx variant=\"contained\" size=\"small\" {...props} />\n)\n\nconst DefaultNoWalletInstalledComponent: React.FC = () => (\n <Alert severity=\"warning\">\n <AlertTitle>XL1 Wallet Not Found</AlertTitle>\n <Typography gutterBottom>\n Please ensure that your XL1 Wallet is installed to connect your account.\n </Typography>\n <Button\n sx={{ display: 'flex', justifySelf: 'end' }}\n size=\"small\"\n variant=\"outlined\"\n href=\"https://chromewebstore.google.com/detail/xl1-wallet/fblbagcjeigmhakkfgjpdlcapcgmcfbm\"\n target=\"_blank\"\n rel=\"noopener\"\n >\n Get XL1 Wallet\n </Button>\n </Alert>\n)\n\nexport interface ConnectClientAccountsStackProps extends StackProps {\n AccountComponent?: ComponentType<{ account?: string }>\n ConnectComponent?: ComponentType<{ onClick?: MouseEventHandler<HTMLElement> }>\n NoWalletInstalledComponent?: ComponentType\n onAccountConnected?: (account: Address) => void\n onCancel?: () => void\n timeout?: number\n}\n\nexport const ConnectAccountsStack: React.FC<ConnectClientAccountsStackProps> = ({\n AccountComponent = ConnectedAccount,\n ConnectComponent = DefaultConnectComponent,\n NoWalletInstalledComponent = DefaultNoWalletInstalledComponent,\n onAccountConnected,\n onCancel,\n timeout,\n ...props\n}) => {\n const {\n address, connectSigner, error, timedout,\n } = useConnectAccount(undefined, timeout)\n\n useEffect(() => {\n if (isDefined(error) && isDefined(onCancel)) {\n onCancel()\n }\n }, [error, onCancel])\n\n useEffect(() => {\n if (isDefined(address) && isDefined(onAccountConnected)) {\n onAccountConnected(address)\n }\n }, [address, onAccountConnected])\n\n return (\n <Stack direction=\"row\" alignItems=\"start\" spacing={2} {...props}>\n {isDefined(address)\n ? <AccountComponent address={address} />\n : null}\n {isUndefined(address) && !timedout\n ? (\n <ConnectComponent onClick={() => void connectSigner()}>Connect</ConnectComponent>\n )\n : null}\n {isUndefined(address) && timedout\n ? (\n <NoWalletInstalledComponent />\n )\n : null}\n <ErrorRender error={error} scope=\"ConnectSigner:error\" />\n </Stack>\n )\n}\n"],"mappings":"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","names":["Typography","FlexCol","isDefined","ErrorRender","AttoXL1","XL1Amount","React","useSyncExternalStore","CLIENT_LISTENER_TIMEOUT","hasXyoClient","globalThis","xyo","listenForClientInjection","onClientReady","timeout","onTimeout","resolved","listener","addEventListener","setTimeout","getXyoClient","client","Promise","resolve","assertEx","delay","forget","isDefined","isNull","TransactionConfirmationStatus","_params","active","params","exp","assertEx","transaction","nbf","onStatusUpdate","txHash","viewer","create","start","currentBlockNumber","isDefined","checkBlock","delay","error","stop","forget","Error","confirmed","blockNumber","progress","remainingBlocks","checkConfirmation","Math","round","tx","transactionByHash","isNull","currentState","client","undefined","error","isLoading","timedout","listeners","Set","emitChange","listener","updateState","newState","initializeClient","timeout","getXyoClient","console","subscribe","add","delete","getSnapshot","useClient","subscribeWithTimeout","useSyncExternalStore","usePermissions","client","isLoading","error","timedout","useClient","permissions","usePromise","isArray","isDefined","isDefinedNotNull","isString","isDefined","findCaveat","permissions","targetCapability","targetCaveatType","existingPermissions","getPermissions","isDefined","length","foundPermissions","find","p","parentCapability","caveats","caveat","type","value","validateRestrictedAccounts","restrictedAccounts","isDefined","isArray","every","isString","Error","JSON","stringify","useAccountPermissions","permissions","error","usePermissions","usePromise","isDefinedNotNull","findCaveat","useGateway","gatewayName","timeout","client","isLoading","error","timedout","useClient","gateway","gateways","undefined","hexToBigInt","usePromise","isUndefined","hexToBigInt","toHex","balanceForRange","address","results","totalReceivedBalance","reduce","a","_block","_tx","transfer","hexToBigInt","transfers","toHex","totalSentBalance","from","Object","values","v","findMinimumBlock","history","length","blockNumbers","map","blockBw","block","min","Math","max","formatAccountBalanceHistory","address","history","results","item","blockBw","txBw","transfer","from","to","amount","Object","entries","transfers","push","hexToBigInt","blockNumber","block","timestamp","$epoch","key","globalThis","crypto","randomUUID","txHash","_hash","debug","type","useAccountBalanceHistory","viewer","refresh","usePromise","isUndefined","page","lastBlock","maxPage","pagedHistory","accountBalanceHistory","length","findMinimumBlock","nextHistory","formattedHistory","balance","balanceForRange","truncated","usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useRef","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","setBalancesError","balancePromiseRef","useRef","usePromise","isUndefined","undefined","currentPromise","accountBalance","current","result","err","console","error","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","forget","isHash","usePromise","isDefined","PayloadBuilder","useEffect","useState","useConfirmTransactionBase","transaction","onBroadcast","onStatusUpdate","runner","viewer","status","setStatus","useState","onStatusUpdateLocal","newStatus","transactionConfirmationStatus","transactionConfirmationError","usePromise","hasRunner","isDefined","hash","broadcastTransaction","PayloadBuilder","isHash","params","txHash","instance","TransactionConfirmationStatus","create","start","Error","useEffect","forget","stop","assertEx","asAddress","MainNetwork","useCallback","useState","useConnectAccount","gatewayName","MainNetwork","id","timeout","connectError","setConnectError","useState","gateway","error","timedout","useGateway","accountPermissions","accountPermissionsError","useAccountPermissions","address","setAddress","connectSigner","useCallback","assertedGateway","assertEx","signer","e","asAddress","usePromise","isDefinedNotNull","useCurrentBlock","refresh","viewer","usePromise","isDefinedNotNull","block","currentBlock","isUndefined","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useHttpRpcRunner","url","useMemo","isUndefined","transport","HttpRpcTransport","AllRpcSchemas","JsonRpcXyoRunner","isUndefined","SimpleXyoNetwork","useMemo","useNetwork","id","network","useMemo","isUndefined","SimpleXyoNetwork","SimpleXyoSigner","useMemo","useSigner","_provider","account","useMemo","SimpleXyoSigner","undefined","delay","isDefined","isUndefined","LocalNetwork","SequenceNetwork","HttpRpcTransport","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","NetworkStakeViewerRpcSchemas","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","NetworkStakeViewerRpcSchemas","networkStakeViewer","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","useEffect","undefined","block","currentBlock","isDefined","err","delay","isUndefined","HttpRpcTransport","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","NetworkStakeViewerRpcSchemas","XyoViewerRpcSchemas","useMemo","useHttpRpcViewer","url","resolvedViewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","NetworkStakeViewerRpcSchemas","JsonRpcXyoViewer","networkStakeViewer","JsonRpcNetworkStakeViewer","usePromise","isDefined","isDefinedNotNull","useViewerFromWallet","networkId","gateway","error","isLoading","useGateway","usePromise","isDefinedNotNull","isDefined","connection","viewer","Table","TableBody","TableCell","TableHead","TableRow","Tooltip","isDefined","BlockAddressChip","BlockEpochTableCellInner","BlockNumberTableCellInner","RawInfoIconButton","XL1Amount","React","TableHeadingLabels","AccountBalanceHistoryTable","history","props","formatAmount","amount","isDefined","xl1Amount","XL1Amount","toString","undefined","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","Table","TableHead","TableRow","TableHeadingLabels","map","heading","TableCell","key","TableBody","blockNumber","debug","from","timestamp","to","type","txHash","BlockNumberTableCellInner","BlockEpochTableCellInner","epoch","Tooltip","title","BlockAddressChip","address","toolTipTitle","span","RawInfoIconButton","rawValue","AccountBalanceHistoryFlexBox","address","refresh","viewer","props","results","error","useAccountBalanceHistory","history","balance","truncated","AttoXL1","undefined","formatBalance","xl1Amount","XL1Amount","toString","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","formatBalanceMagnitude","set","received","sent","netBalance","isDefined","React","FlexCol","ErrorRender","scope","Typography","variant","gutterBottom","at","blockNumber","AccountBalanceHistoryTable","Stack","Tooltip","Typography","EthAddressWrapper","BlockiesAvatarAddress","React","ConnectedAccount","address","shortenedAddress","EthAddressWrapper","fromString","toShortString","React","Stack","direction","alignItems","spacing","BlockiesAvatarAddress","size","Tooltip","title","Typography","color","variant","fontFamily","Alert","AlertTitle","Button","Stack","Typography","ButtonEx","isDefined","isUndefined","ErrorRender","React","useEffect","DefaultConnectComponent","props","React","ButtonEx","variant","size","DefaultNoWalletInstalledComponent","Alert","severity","AlertTitle","Typography","gutterBottom","Button","sx","display","justifySelf","href","target","rel","ConnectAccountsStack","AccountComponent","ConnectedAccount","ConnectComponent","NoWalletInstalledComponent","onAccountConnected","onCancel","timeout","address","connectSigner","error","timedout","useConnectAccount","undefined","useEffect","isDefined","Stack","direction","alignItems","spacing","isUndefined","onClick","ErrorRender","scope"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/account/BalanceHistoryFlexbox.tsx","../../src/hooks/client/useClient.ts","../../src/hooks/helpers/getXyoClient.ts","../../src/hooks/helpers/transaction/Confirmation.ts","../../src/hooks/client/permissions/usePermissions.ts","../../src/hooks/client/permissions/usePermissionsAccounts.ts","../../src/hooks/client/helpers/findCaveat.ts","../../src/hooks/client/useGateway.ts","../../src/hooks/useAccountBalanceHistory.ts","../../src/lib/balanceForRange.ts","../../src/lib/findMinimumBlock.ts","../../src/hooks/useAddressBalance.ts","../../src/hooks/useConfirmTransactionBase.ts","../../src/hooks/useConnectAccount.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/components/account/BalanceHistoryTable.tsx","../../src/types/account/Table.ts","../../src/components/connected/account/Connected.tsx","../../src/components/connected/ConnectAccountsStack.tsx"],"sourcesContent":["import { Typography } from '@mui/material'\nimport { type Address } from '@xylabs/hex'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { isDefined } from '@xylabs/typeof'\nimport { ErrorRender } from '@xyo-network/react-error'\nimport { AttoXL1, XL1Amount } from '@xyo-network/xl1-protocol'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\nimport React from 'react'\n\nimport { useAccountBalanceHistory } from '../../hooks/index.ts'\nimport { AccountBalanceHistoryTable } from './BalanceHistoryTable.tsx'\n\nexport interface AccountBalanceHistoryFlexBoxProps extends FlexBoxProps {\n address?: Address\n refresh?: number\n viewer?: XyoViewer\n}\n\nexport const AccountBalanceHistoryFlexBox: React.FC<AccountBalanceHistoryFlexBoxProps> = ({\n address, refresh, viewer, ...props\n}) => {\n const [results, error] = useAccountBalanceHistory(address, viewer, refresh)\n const {\n history, balance, truncated,\n } = results || { balance: [AttoXL1(0n), AttoXL1(0n)], history: undefined }\n\n const formatBalance = (balance: bigint) => {\n const xl1Amount = new XL1Amount(balance)\n return xl1Amount.toString(undefined, {\n places: 18, maxDecimal: 12, maxCharacters: 12, minDecimals: 1, locale: navigator.language,\n })\n }\n\n const formatBalanceMagnitude = (set: [AttoXL1, AttoXL1]) => {\n const [received, sent] = set\n const netBalance = received - sent\n return netBalance < 0n ? `-${formatBalance(sent - received)}` : formatBalance(netBalance)\n }\n\n return isDefined(history) && isDefined(address)\n ? (\n <FlexCol {...props}>\n <ErrorRender error={error} scope=\"AccountBalanceHistoryTable\" />\n <Typography variant=\"h6\" gutterBottom>\n {formatBalanceMagnitude(balance)}\n </Typography>\n {truncated\n ? (\n <Typography variant=\"caption\" gutterBottom>\n Ranged Balance from\n {' '}\n {history.at(-1)!.blockNumber}\n {' '}\n -\n {' '}\n {history[0].blockNumber}\n </Typography>\n )\n : null}\n <AccountBalanceHistoryTable history={history} />\n </FlexCol>\n )\n : null\n}\n","import { isNull } from '@xylabs/typeof'\nimport type { XyoClient } from '@xyo-network/xl1-protocol-sdk'\nimport {\n useCallback, useEffect, useSyncExternalStore,\n} from 'react'\n\nimport { getXyoClient } from '../helpers/index.ts'\n\ninterface ClientState {\n client?: XyoClient\n error: Error | null\n isLoading: boolean\n timedout: boolean\n}\n\nlet currentState: ClientState = {\n client: undefined,\n error: null,\n isLoading: false,\n timedout: false,\n}\n\nconst listeners = new Set<() => void>()\n\nconst emitChange = () => {\n for (const listener of listeners) listener()\n}\n\nconst updateState = (newState: Partial<ClientState>) => {\n currentState = { ...currentState, ...newState }\n emitChange()\n}\n\nconst initializeClient = async (timeout?: number) => {\n if (currentState.isLoading || currentState.client) return\n\n updateState({ isLoading: true, error: null })\n\n try {\n const client = await getXyoClient(timeout)\n if (client === null) {\n updateState({ timedout: true, isLoading: false })\n return\n }\n updateState({\n client, isLoading: false, error: null,\n })\n } catch (error) {\n console.error('Error initializing XyoClient', error)\n updateState({ error: error as Error, isLoading: false })\n }\n}\n\nconst subscribe = (listener: () => void, timeout?: number) => {\n listeners.add(listener)\n\n void initializeClient(timeout)\n\n return () => {\n listeners.delete(listener)\n }\n}\n\nconst getSnapshot = (): ClientState => currentState\n\nexport const useClient = (timeout?: number) => {\n const subscribeWithTimeout = useCallback((listener: () => void) => subscribe(listener, timeout), [timeout])\n const clientState = useSyncExternalStore(subscribeWithTimeout, getSnapshot)\n\n useEffect(() => {\n // if client appears after timeout\n let listener = () => {\n // Update state when client becomes available\n updateState({\n client: globalThis.xyo?.client,\n isLoading: false,\n error: null,\n })\n // Notify listeners of the change\n emitChange()\n }\n // If we have timed out and still no client, listen for the plugin-ready event\n if (clientState.timedout && isNull(clientState.client) && !clientState.isLoading) {\n globalThis.addEventListener('xyo:plugin-ready', listener)\n }\n\n return () => {\n globalThis.removeEventListener('xyo:plugin-ready', listener)\n }\n })\n\n return clientState\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { XyoClient } from '@xyo-network/xl1-protocol-sdk'\n\nconst CLIENT_LISTENER_TIMEOUT = 500\n\nconst hasXyoClient = () => {\n return 'client' in globalThis.xyo\n}\n\nexport const listenForClientInjection = (onClientReady: () => void, timeout: number, onTimeout: () => void) => {\n let resolved = false\n const listener: EventListener = () => {\n onClientReady()\n resolved = true\n }\n globalThis.addEventListener('xyo:plugin-ready', listener)\n setTimeout(() => {\n if (!resolved) {\n globalThis.removeEventListener('xyo:plugin-ready', listener)\n onTimeout()\n }\n }, timeout)\n}\n\ntype ReturnType = XyoClient | undefined | null\n\nexport async function getXyoClient(timeout = CLIENT_LISTENER_TIMEOUT): Promise<ReturnType> {\n // if no xyo object, we can bail early\n if (isUndefined(globalThis.xyo)) {\n return null\n }\n return hasXyoClient()\n ? globalThis.xyo.client\n // listen for the XyoWallet to be injected\n : await new Promise<ReturnType>((resolve) => {\n listenForClientInjection(\n () => {\n resolve(globalThis.xyo.client)\n },\n timeout,\n () => {\n resolve(null)\n },\n )\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport { forget } from '@xylabs/forget'\nimport type { Hash } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport { isDefined, isNull } from '@xylabs/typeof'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nexport type ConfirmationStatusUpdate = {\n blockNumber: number\n confirmed: boolean\n error?: Error\n progress?: number\n remainingBlocks?: number\n}\n\nexport type TransactionConfirmationParams = {\n onStatusUpdate?: (status: ConfirmationStatusUpdate) => void\n transaction: SignedHydratedTransaction\n txHash: Hash\n viewer: XyoViewer\n}\n\nexport class TransactionConfirmationStatus {\n private readonly _params: TransactionConfirmationParams\n private active = false\n\n constructor(params: TransactionConfirmationParams) {\n this._params = params\n }\n\n get exp(): number {\n return assertEx(this.transaction[0].exp, () => 'exp is not found, transaction is not set')\n }\n\n get nbf(): number {\n return assertEx(this.transaction[0].nbf, () => 'nbf is not found, transaction is not set')\n }\n\n get onStatusUpdate(): TransactionConfirmationParams['onStatusUpdate'] {\n return this._params.onStatusUpdate\n }\n\n get params(): TransactionConfirmationParams {\n return this._params\n }\n\n get transaction(): SignedHydratedTransaction {\n return this.params.transaction\n }\n\n get txHash(): Hash {\n return this.params.txHash\n }\n\n get viewer(): XyoViewer {\n return this.params.viewer\n }\n\n static create(params: TransactionConfirmationParams): Promisable<TransactionConfirmationStatus> {\n return new TransactionConfirmationStatus(params)\n }\n\n async start(): Promise<void> {\n this.active = true\n try {\n const currentBlockNumber = await this.viewer.currentBlockNumber()\n while (isDefined(currentBlockNumber) && this.active) {\n await this.checkBlock(currentBlockNumber)\n // check block every second to see if the transaction is confirmed\n await delay(1000)\n }\n } catch (error) {\n await this.stop()\n forget(this.onStatusUpdate?.({\n error: error instanceof Error ? error : new Error('Unknown error occurred'),\n confirmed: false,\n blockNumber: 0,\n progress: 0,\n remainingBlocks: 0,\n }))\n }\n }\n\n stop(): Promisable<void> {\n this.active = false\n }\n\n private async checkBlock(blockNumber: number): Promise<void> {\n if (blockNumber < this.nbf) {\n await this.stop()\n forget(this.onStatusUpdate?.({\n error: new Error(`Block number: ${blockNumber} is before ${this.nbf}`),\n confirmed: false,\n blockNumber,\n progress: 0,\n remainingBlocks: this.exp - blockNumber,\n }))\n }\n if (blockNumber > this.exp) {\n forget(this.onStatusUpdate?.({\n confirmed: false, blockNumber, progress: 100, remainingBlocks: 0,\n }))\n return\n }\n if (blockNumber < this.exp) {\n await this.checkConfirmation(blockNumber)\n }\n }\n\n private async checkConfirmation(blockNumber: number): Promise<void> {\n const remainingBlocks = this.exp - blockNumber\n const progress = Math.round(((blockNumber - this.nbf) / (this.exp - this.nbf)) * 100)\n\n const tx = await this.viewer.transactionByHash?.(this.txHash)\n if (isNull(tx)) {\n this.onStatusUpdate?.({\n confirmed: false, blockNumber, progress, remainingBlocks,\n })\n } else {\n this.onStatusUpdate?.({\n confirmed: true, blockNumber, progress, remainingBlocks,\n })\n await this.stop()\n }\n }\n}\n","import { useClient } from '../useClient.ts'\n\nexport const usePermissions = () => {\n const {\n client, isLoading, error, timedout,\n } = useClient()\n const permissions = client?.permissions\n return {\n permissions,\n isLoading,\n error,\n timedout,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isArray, isDefined, isDefinedNotNull, isString,\n} from '@xylabs/typeof'\nimport type { JsonValue } from '@xyo-network/xl1-rpc'\n\nimport { findCaveat } from '../helpers/index.ts'\nimport { usePermissions } from './usePermissions.ts'\n\nconst validateRestrictedAccounts = (restrictedAccounts: JsonValue): readonly string [] => {\n if (isDefined(restrictedAccounts)) {\n if (isArray(restrictedAccounts) && restrictedAccounts.every(isString)) {\n return restrictedAccounts\n }\n throw new Error(\n `Unrecognized format for restrictReturnedAccounts caveat found on permissions. \\n\n Should be an array of strings: ${JSON.stringify(restrictedAccounts)}`,\n )\n }\n return []\n}\n\nexport const useAccountPermissions = () => {\n const { permissions, error } = usePermissions()\n\n return usePromise(async () => {\n if (isDefinedNotNull(error)) throw error\n if (isDefined(permissions)) {\n const restrictedAccounts = await findCaveat(\n permissions,\n // TODO - extract to constant in protocol package\n 'xyoWallet_getAccounts',\n 'restrictReturnedAccounts',\n )\n return validateRestrictedAccounts(restrictedAccounts)\n }\n }, [permissions])\n}\n","import { isDefined } from '@xylabs/typeof'\nimport type {\n CaveatTypes, ParentCapability, XyoPermissions,\n} from '@xyo-network/xl1-protocol-sdk'\n\nexport const findCaveat = async (\n permissions: XyoPermissions,\n targetCapability: ParentCapability,\n targetCaveatType: CaveatTypes,\n) => {\n const existingPermissions = await permissions.getPermissions()\n if (isDefined(existingPermissions) && existingPermissions.length > 0) {\n const foundPermissions = existingPermissions\n .find(p => p.parentCapability === targetCapability)\n if (isDefined(foundPermissions)) {\n return foundPermissions.caveats?.find(caveat => caveat.type === targetCaveatType)?.value ?? []\n }\n }\n return existingPermissions\n}\n","import { isDefined, isNull } from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useClient } from './useClient.ts'\n\nexport const useGateway = (gatewayName?: GatewayName, timeout?: number) => {\n const {\n client, isLoading, error, timedout,\n } = useClient(timeout)\n\n const resolveGateway = () => {\n // null client means we do not have to wait for timedout\n if (isNull(client)) return null\n if (timedout && !isLoading && isDefined(gatewayName)) {\n return null\n }\n return client?.gateways?.[gatewayName!]\n }\n\n return {\n gateway: gatewayName ? resolveGateway() : undefined,\n isLoading,\n error,\n timedout,\n }\n}\n","import {\n type Address, type Hex,\n hexToBigInt,\n} from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isUndefined } from '@xylabs/typeof'\nimport type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport type { AccountBalanceHistoryItem, XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nimport { balanceForRange, findMinimumBlock } from '../lib/index.ts'\nimport type { AccountBalanceHistoryItemRow } from '../types/index.ts'\n\nexport const formatAccountBalanceHistory = (address: Address, history: AccountBalanceHistoryItem[]): AccountBalanceHistoryItemRow[] => {\n let results: AccountBalanceHistoryItemRow[] = []\n for (const item of history) {\n const [blockBw, txBw, transfer] = item\n if (address === transfer.from) {\n for (const [to, amount] of Object.entries(transfer.transfers)) {\n results.push({\n amount: hexToBigInt(amount as Hex),\n blockNumber: blockBw.block,\n from: transfer.from,\n timestamp: blockBw.$epoch,\n key: globalThis.crypto.randomUUID(),\n to: to as Address,\n txHash: txBw?._hash,\n debug: item,\n type: 'send',\n })\n }\n } else {\n results.push({\n amount: hexToBigInt(transfer.transfers[address] as Hex),\n blockNumber: blockBw.block,\n from: transfer.from,\n key: globalThis.crypto.randomUUID(),\n timestamp: blockBw.$epoch,\n to: address,\n txHash: txBw?._hash,\n debug: item,\n type: 'receive',\n })\n }\n }\n return results\n}\n\nexport const useAccountBalanceHistory = (address?: Address, viewer?: XyoViewer, refresh?: number) => {\n return usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n\n // Pagination Values\n let page = 1\n let lastBlock: number\n const maxPage = 10\n const pagedHistory: AccountBalanceHistoryItem[] = []\n\n // Fetch first page to get starting lastBlock\n const history = await viewer.accountBalanceHistory(address)\n if (history.length > 0) {\n pagedHistory.push(...history)\n // Set lastBlock to one less than the lowest block in the first page\n lastBlock = findMinimumBlock(history)\n while (page < maxPage) {\n // Fetch next page\n const nextHistory = await viewer.accountBalanceHistory(address, [0, lastBlock] as XL1BlockRange)\n // Break if no more history\n if (nextHistory.length === 0) break\n // Update lastBlock and append to pagedHistory\n lastBlock = findMinimumBlock(nextHistory)\n pagedHistory.push(...nextHistory)\n // Increment page\n // Even if we are going to go over and break the loop, we still want to increment to show the answer was truncated\n page++\n }\n }\n const formattedHistory = formatAccountBalanceHistory(address, pagedHistory)\n\n return {\n history: formattedHistory,\n balance: balanceForRange(address, pagedHistory),\n truncated: page >= maxPage,\n }\n }, [address, viewer, refresh])\n}\n","import type { Address } from '@xylabs/hex'\nimport { hexToBigInt, toHex } from '@xylabs/hex'\nimport type { AttoXL1 } from '@xyo-network/xl1-protocol'\nimport type { AccountBalanceHistoryItem } from '@xyo-network/xl1-protocol-sdk'\n\nexport const balanceForRange = (address: Address, results: AccountBalanceHistoryItem[]): [AttoXL1, AttoXL1] => {\n const totalReceivedBalance = results?.reduce((a, [_block, _tx, transfer]) => {\n return a + hexToBigInt(transfer.transfers[address] ?? toHex(0))\n }, 0n)\n // eslint-disable-next-line unicorn/no-array-reduce\n const totalSentBalance = results?.reduce((a, [_block, _tx, transfer]) => {\n return (transfer.from === address) ? a + Object.values(transfer.transfers).reduce((a, v) => a + (v ? hexToBigInt(v) : 0n), 0n) : a\n }, 0n)\n return [totalReceivedBalance, totalSentBalance] as [AttoXL1, AttoXL1]\n}\n","import type { AccountBalanceHistoryItem } from '@xyo-network/xl1-protocol-sdk'\n\nexport const findMinimumBlock = (history: AccountBalanceHistoryItem[]): number => {\n // since taking Math.min of an empty array returns Infinity\n if (history.length === 0) return 0\n const blockNumbers = history.map(([blockBw]) => blockBw.block)\n const min = Math.min(...blockNumbers)\n return Math.max(min - 1, 0)\n}\n","import type { Address } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport type { AttoXL1 } from '@xyo-network/xl1-protocol'\nimport { ShiftedBigInt } from '@xyo-network/xl1-protocol'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\nimport {\n useMemo, useRef, useState,\n} from 'react'\n\nexport const useAddressBalance = (\n // address to get balance for\n address?: Address,\n // viewer to use for fetching balance\n viewer?: XyoViewer,\n // refresh balance trigger\n refresh?: number,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n const [balancesError, setBalancesError] = useState<Error>()\n\n const balancePromiseRef = useRef<Promise<AttoXL1> | null>(null)\n usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n\n setLoading(true)\n setBalancesError(undefined)\n\n // Create and store the current promise\n const currentPromise = viewer.accountBalance(address) as Promise<AttoXL1>\n balancePromiseRef.current = currentPromise\n\n try {\n const result = await currentPromise\n // Only update state if this is still the latest promise\n if (balancePromiseRef.current === currentPromise) {\n setBalancesResult(result as AttoXL1)\n setLoading(false)\n }\n } catch (err) {\n // Only update state if this is still the latest promise\n if (balancePromiseRef.current === currentPromise) {\n console.error('Error in queued call:', err)\n setBalancesResult(undefined)\n setBalancesError(err as Error)\n setLoading(false)\n }\n }\n }, [address, viewer, refresh])\n\n useMemo(() => {\n if (balancesError) {\n setLoading(false)\n }\n }, [balancesError])\n\n const shiftedBigInt = useMemo(() => {\n if (typeof balancesResult !== 'bigint') return\n return new ShiftedBigInt(balancesResult, {\n places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,\n })\n }, [balancesResult])\n\n const balanceIntlFriendly = useMemo(() => {\n return shiftedBigInt?.toFullString()\n }, [shiftedBigInt])\n\n const shortBalanceIntlFriendly = useMemo(() => {\n return isUndefinedOrNull(balancesResult)\n ? undefined\n : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()\n }, [shiftedBigInt])\n\n return {\n address,\n balanceForAddress: balancesResult,\n balanceIntlFriendly,\n shortBalanceIntlFriendly,\n error: balancesError,\n loading,\n }\n}\n","import { forget } from '@xylabs/forget'\nimport type { Hash } from '@xylabs/hex'\nimport { isHash } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isDefined } from '@xylabs/typeof'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { XyoRunner, XyoViewer } from '@xyo-network/xl1-protocol-sdk'\nimport { useEffect, useState } from 'react'\n\nimport type { ConfirmationStatusUpdate, TransactionConfirmationParams } from './helpers/index.ts'\nimport { TransactionConfirmationStatus } from './helpers/index.ts'\n\nexport const useConfirmTransactionBase = (\n // The transaction to confirm\n transaction?: SignedHydratedTransaction,\n // Callback for when the transaction is broadcast to the network\n onBroadcast?: (hash: Hash) => void,\n // Optional callback for status updates during confirmation\n onStatusUpdate?: TransactionConfirmationParams['onStatusUpdate'],\n // Runner to use for broadcasting transactions\n runner?: XyoRunner,\n // Viewer to use for checking transaction status\n viewer?: XyoViewer,\n) => {\n const [status, setStatus] = useState<ConfirmationStatusUpdate>()\n const onStatusUpdateLocal = (newStatus: ConfirmationStatusUpdate) => {\n setStatus(newStatus)\n onStatusUpdate?.(newStatus)\n }\n\n const [transactionConfirmationStatus, transactionConfirmationError] = usePromise(async () => {\n const hasRunner = isDefined(runner)\n if (transaction && viewer) {\n const hash = hasRunner ? (await runner.broadcastTransaction(transaction)) : await PayloadBuilder.hash(transaction[0])\n if (isHash(hash)) {\n if (hasRunner && isDefined(onBroadcast)) onBroadcast(hash)\n const params: TransactionConfirmationParams = {\n onStatusUpdate: onStatusUpdateLocal,\n transaction,\n txHash: hash,\n viewer,\n }\n const instance = await TransactionConfirmationStatus.create(params)\n await instance.start()\n return instance\n } else {\n throw new Error('unexpected return type from broadcast transaction')\n }\n }\n }, [transaction, runner, viewer])\n\n useEffect(() => {\n return () => {\n if (transactionConfirmationStatus) {\n // Stop the transaction confirmation status instance when the component unmounts\n forget(transactionConfirmationStatus.stop())\n }\n }\n }, [transactionConfirmationStatus])\n\n return { status, transactionConfirmationError }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { type Address, asAddress } from '@xylabs/hex'\nimport { MainNetwork } from '@xyo-network/chain-network-model'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useCallback, useState } from 'react'\n\nimport { useAccountPermissions, useGateway } from './client/index.ts'\n\nexport const useConnectAccount = (gatewayName: GatewayName = MainNetwork.id, timeout?: number) => {\n const [connectError, setConnectError] = useState<Error>()\n\n const {\n gateway, error, timedout,\n } = useGateway(gatewayName, timeout)\n\n const [accountPermissions, accountPermissionsError] = useAccountPermissions()\n\n const [address, setAddress] = useState<Address>()\n\n const connectSigner = useCallback(async () => {\n try {\n const assertedGateway = assertEx(gateway, () => `Gateway ${gatewayName} is not available`)\n const signer = await assertedGateway.signer()\n const address = await signer.address()\n setAddress(address)\n return address\n } catch (e) {\n setConnectError(e as Error)\n }\n }, [gateway, gatewayName])\n\n return {\n address: asAddress(accountPermissions?.[0] ?? address), connectSigner, error: error ?? accountPermissionsError ?? connectError, gateway, timedout,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { isDefinedNotNull } from '@xylabs/typeof'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer | null) => {\n return usePromise(async () => {\n if (isDefinedNotNull(viewer) && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { RpcTransport, XyoRunnerRpcSchemas } from '@xyo-network/xl1-rpc'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcRunner = (url?: string) => {\n return useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport as RpcTransport<typeof XyoRunnerRpcSchemas>)\n }, [url])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { DefaultNetworkIds } from '@xyo-network/xl1-protocol'\nimport { SimpleXyoNetwork } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nexport const useNetwork = (id?: DefaultNetworkIds) => {\n const network = useMemo(() => {\n if (isUndefined(id)) return\n return new SimpleXyoNetwork(id)\n }, [id])\n\n return network\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport {\n SimpleXyoSigner, type XyoConnection, type XyoSigner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnection, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new SimpleXyoSigner(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, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, 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, ...NetworkStakeViewerRpcSchemas })\n const networkStakeViewer = new JsonRpcNetworkStakeViewer(transport)\n const viewer = new JsonRpcXyoViewer(transport, { networkStakeViewer })\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, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, 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, ...NetworkStakeViewerRpcSchemas })\n return new JsonRpcXyoViewer(transport, { networkStakeViewer: new JsonRpcNetworkStakeViewer(transport) })\n }, [url])\n\n return resolvedViewer\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isDefined, isDefinedNotNull, isNull,\n} from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useGateway } from '../client/index.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 = (\n networkId?: GatewayName,\n timeout?: number,\n) => {\n const {\n gateway, error, isLoading, timedout,\n } = useGateway(networkId, timeout)\n\n const result = usePromise(async () => {\n if (isDefinedNotNull(error)) return null\n if (isLoading) return\n if (timedout && isNull(gateway)) return null\n if (isDefined(gateway) && isDefined(networkId)) {\n const connection = await gateway?.connection()\n return connection?.viewer\n }\n }, [gateway, networkId, timeout])\n\n return result\n}\n","import type { TableProps } from '@mui/material'\nimport {\n Table, TableBody, TableCell, TableHead, TableRow,\n Tooltip,\n} from '@mui/material'\nimport { isDefined } from '@xylabs/typeof'\nimport {\n BlockAddressChip, BlockEpochTableCellInner, BlockNumberTableCellInner,\n} from '@xyo-network/react-chain-blockchain'\nimport { RawInfoIconButton } from '@xyo-network/react-payload-raw-info'\nimport { XL1Amount } from '@xyo-network/xl1-protocol'\nimport type { JsonValue } from '@xyo-network/xl1-rpc'\nimport React from 'react'\n\nimport type { AccountBalanceHistoryItemRow } from '../../types/index.ts'\nimport { TableHeadingLabels } from '../../types/index.ts'\n\nexport interface AccountBalanceHistoryTableProps extends TableProps {\n history?: AccountBalanceHistoryItemRow[]\n}\n\nexport const AccountBalanceHistoryTable: React.FC<AccountBalanceHistoryTableProps> = ({ history, ...props }) => {\n const formatAmount = (amount?: bigint) => {\n if (!isDefined(amount)) {\n return 'N/A'\n }\n const xl1Amount = new XL1Amount(amount)\n return xl1Amount.toString(undefined, {\n places: 18, maxDecimal: 12, maxCharacters: 12, minDecimals: 1, locale: navigator.language,\n })\n }\n\n return isDefined(history)\n ? (\n <Table {...props}>\n <TableHead>\n <TableRow>\n {TableHeadingLabels.map(heading => (\n <TableCell key={heading}>{heading}</TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {history?.map(({\n amount, blockNumber, debug, from, key, timestamp, to, type, txHash,\n }) => (\n <TableRow key={key}>\n <TableCell>{txHash || 'N/A'}</TableCell>\n <BlockNumberTableCellInner blockNumber={blockNumber} />\n <BlockEpochTableCellInner epoch={timestamp} />\n <TableCell>\n <Tooltip title={`From Address: ${from}`}>\n <BlockAddressChip address={from} toolTipTitle={`From: ${from}`} />\n </Tooltip>\n </TableCell>\n <TableCell>\n <Tooltip title={`To Address: ${to}`}>\n <BlockAddressChip address={to} toolTipTitle={`To: ${to}`} />\n </Tooltip>\n </TableCell>\n <TableCell>\n <Tooltip title={`Raw Amount: ${amount}`}>\n <span>\n {type === 'send' ? '-' : ''}\n {formatAmount(amount)}\n </span>\n </Tooltip>\n </TableCell>\n <TableCell>\n <RawInfoIconButton rawValue={debug as JsonValue} />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )\n : null\n}\n","import type { AccountBalanceHistoryItemRow } from './BalanceHistoryItemRow.ts'\n\nexport type TableHeadingLabels = 'Tx Hash' | 'BlockNumber' | 'Timestamp' | 'From' | 'To' | 'Amount' | 'Debug'\nexport type TableHeadings = { [key in keyof AccountBalanceHistoryItemRow]: TableHeadingLabels }\n\nexport const TableHeadingLabels: TableHeadingLabels[] = [\n 'Tx Hash',\n 'BlockNumber',\n 'Timestamp',\n 'From',\n 'To',\n 'Amount',\n 'Debug',\n] as const\n","import {\n Stack, Tooltip, Typography,\n} from '@mui/material'\nimport { EthAddressWrapper } from '@xylabs/eth-address'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport React from 'react'\n\nexport const ConnectedAccount: React.FC<{ address: string }> = ({ address }) => {\n const shortenedAddress = `${EthAddressWrapper.fromString(address)?.toShortString(4)}`\n\n return (\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <BlockiesAvatarAddress address={address} size={21} />\n <Tooltip title={address}>\n <Typography color=\"textSecondary\" variant=\"caption\" fontFamily=\"monospace\">{shortenedAddress}</Typography>\n </Tooltip>\n </Stack>\n )\n}\n","import type { StackProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Button, Stack,\n Typography,\n} from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport type { ButtonExProps } from '@xylabs/react-button'\nimport { ButtonEx } from '@xylabs/react-button'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { ErrorRender } from '@xyo-network/react-error'\nimport type { ComponentType, MouseEventHandler } from 'react'\nimport React, { useEffect } from 'react'\n\nimport { useConnectAccount } from '../../hooks/index.ts'\nimport { ConnectedAccount } from './account/index.ts'\n\nconst DefaultConnectComponent: React.FC<ButtonExProps> = props => (\n <ButtonEx variant=\"contained\" size=\"small\" {...props} />\n)\n\nconst DefaultNoWalletInstalledComponent: React.FC = () => (\n <Alert severity=\"warning\">\n <AlertTitle>XL1 Wallet Not Found</AlertTitle>\n <Typography gutterBottom>\n Please ensure that your XL1 Wallet is installed to connect your account.\n </Typography>\n <Button\n sx={{ display: 'flex', justifySelf: 'end' }}\n size=\"small\"\n variant=\"outlined\"\n href=\"https://chromewebstore.google.com/detail/xl1-wallet/fblbagcjeigmhakkfgjpdlcapcgmcfbm\"\n target=\"_blank\"\n rel=\"noopener\"\n >\n Get XL1 Wallet\n </Button>\n </Alert>\n)\n\nexport interface ConnectClientAccountsStackProps extends StackProps {\n AccountComponent?: ComponentType<{ account?: string }>\n ConnectComponent?: ComponentType<{ onClick?: MouseEventHandler<HTMLElement> }>\n NoWalletInstalledComponent?: ComponentType\n onAccountConnected?: (account: Address) => void\n onCancel?: () => void\n timeout?: number\n}\n\nexport const ConnectAccountsStack: React.FC<ConnectClientAccountsStackProps> = ({\n AccountComponent = ConnectedAccount,\n ConnectComponent = DefaultConnectComponent,\n NoWalletInstalledComponent = DefaultNoWalletInstalledComponent,\n onAccountConnected,\n onCancel,\n timeout,\n ...props\n}) => {\n const {\n address, connectSigner, error, timedout,\n } = useConnectAccount(undefined, timeout)\n\n useEffect(() => {\n if (isDefined(error) && isDefined(onCancel)) {\n onCancel()\n }\n }, [error, onCancel])\n\n useEffect(() => {\n if (isDefined(address) && isDefined(onAccountConnected)) {\n onAccountConnected(address)\n }\n }, [address, onAccountConnected])\n\n return (\n <Stack direction=\"row\" alignItems=\"start\" spacing={2} {...props}>\n {isDefined(address)\n ? <AccountComponent address={address} />\n : null}\n {isUndefined(address) && !timedout\n ? (\n <ConnectComponent onClick={() => void connectSigner()}>Connect</ConnectComponent>\n )\n : null}\n {isUndefined(address) && timedout\n ? (\n <NoWalletInstalledComponent />\n )\n : null}\n <ErrorRender error={error} scope=\"ConnectSigner:error\" />\n </Stack>\n )\n}\n"],"mappings":"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","names":["Typography","FlexCol","isDefined","ErrorRender","AttoXL1","XL1Amount","React","isNull","useCallback","useEffect","useSyncExternalStore","isUndefined","CLIENT_LISTENER_TIMEOUT","hasXyoClient","globalThis","xyo","listenForClientInjection","onClientReady","timeout","onTimeout","resolved","listener","addEventListener","setTimeout","removeEventListener","getXyoClient","isUndefined","client","Promise","resolve","assertEx","delay","forget","isDefined","isNull","TransactionConfirmationStatus","_params","active","params","exp","assertEx","transaction","nbf","onStatusUpdate","txHash","viewer","create","start","currentBlockNumber","isDefined","checkBlock","delay","error","stop","forget","Error","confirmed","blockNumber","progress","remainingBlocks","checkConfirmation","Math","round","tx","transactionByHash","isNull","currentState","client","undefined","error","isLoading","timedout","listeners","Set","emitChange","listener","updateState","newState","initializeClient","timeout","getXyoClient","console","subscribe","add","delete","getSnapshot","useClient","subscribeWithTimeout","useCallback","clientState","useSyncExternalStore","useEffect","globalThis","xyo","isNull","addEventListener","removeEventListener","usePermissions","client","isLoading","error","timedout","useClient","permissions","usePromise","isArray","isDefined","isDefinedNotNull","isString","isDefined","findCaveat","permissions","targetCapability","targetCaveatType","existingPermissions","getPermissions","isDefined","length","foundPermissions","find","p","parentCapability","caveats","caveat","type","value","validateRestrictedAccounts","restrictedAccounts","isDefined","isArray","every","isString","Error","JSON","stringify","useAccountPermissions","permissions","error","usePermissions","usePromise","isDefinedNotNull","findCaveat","isDefined","isNull","useGateway","gatewayName","timeout","client","isLoading","error","timedout","useClient","resolveGateway","isNull","isDefined","gateways","gateway","undefined","hexToBigInt","usePromise","isUndefined","hexToBigInt","toHex","balanceForRange","address","results","totalReceivedBalance","reduce","a","_block","_tx","transfer","hexToBigInt","transfers","toHex","totalSentBalance","from","Object","values","v","findMinimumBlock","history","length","blockNumbers","map","blockBw","block","min","Math","max","formatAccountBalanceHistory","address","history","results","item","blockBw","txBw","transfer","from","to","amount","Object","entries","transfers","push","hexToBigInt","blockNumber","block","timestamp","$epoch","key","globalThis","crypto","randomUUID","txHash","_hash","debug","type","useAccountBalanceHistory","viewer","refresh","usePromise","isUndefined","page","lastBlock","maxPage","pagedHistory","accountBalanceHistory","length","findMinimumBlock","nextHistory","formattedHistory","balance","balanceForRange","truncated","usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useRef","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","setBalancesError","balancePromiseRef","useRef","usePromise","isUndefined","undefined","currentPromise","accountBalance","current","result","err","console","error","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","forget","isHash","usePromise","isDefined","PayloadBuilder","useEffect","useState","useConfirmTransactionBase","transaction","onBroadcast","onStatusUpdate","runner","viewer","status","setStatus","useState","onStatusUpdateLocal","newStatus","transactionConfirmationStatus","transactionConfirmationError","usePromise","hasRunner","isDefined","hash","broadcastTransaction","PayloadBuilder","isHash","params","txHash","instance","TransactionConfirmationStatus","create","start","Error","useEffect","forget","stop","assertEx","asAddress","MainNetwork","useCallback","useState","useConnectAccount","gatewayName","MainNetwork","id","timeout","connectError","setConnectError","useState","gateway","error","timedout","useGateway","accountPermissions","accountPermissionsError","useAccountPermissions","address","setAddress","connectSigner","useCallback","assertedGateway","assertEx","signer","e","asAddress","usePromise","isDefinedNotNull","useCurrentBlock","refresh","viewer","usePromise","isDefinedNotNull","block","currentBlock","isUndefined","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useHttpRpcRunner","url","useMemo","isUndefined","transport","HttpRpcTransport","AllRpcSchemas","JsonRpcXyoRunner","isUndefined","SimpleXyoNetwork","useMemo","useNetwork","id","network","useMemo","isUndefined","SimpleXyoNetwork","SimpleXyoSigner","useMemo","useSigner","_provider","account","useMemo","SimpleXyoSigner","undefined","delay","isDefined","isUndefined","LocalNetwork","SequenceNetwork","HttpRpcTransport","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","NetworkStakeViewerRpcSchemas","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","NetworkStakeViewerRpcSchemas","networkStakeViewer","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","useEffect","undefined","block","currentBlock","isDefined","err","delay","isUndefined","HttpRpcTransport","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","NetworkStakeViewerRpcSchemas","XyoViewerRpcSchemas","useMemo","useHttpRpcViewer","url","resolvedViewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","NetworkStakeViewerRpcSchemas","JsonRpcXyoViewer","networkStakeViewer","JsonRpcNetworkStakeViewer","usePromise","isDefined","isDefinedNotNull","isNull","useViewerFromWallet","networkId","timeout","gateway","error","isLoading","timedout","useGateway","result","usePromise","isDefinedNotNull","isNull","isDefined","connection","viewer","Table","TableBody","TableCell","TableHead","TableRow","Tooltip","isDefined","BlockAddressChip","BlockEpochTableCellInner","BlockNumberTableCellInner","RawInfoIconButton","XL1Amount","React","TableHeadingLabels","AccountBalanceHistoryTable","history","props","formatAmount","amount","isDefined","xl1Amount","XL1Amount","toString","undefined","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","Table","TableHead","TableRow","TableHeadingLabels","map","heading","TableCell","key","TableBody","blockNumber","debug","from","timestamp","to","type","txHash","BlockNumberTableCellInner","BlockEpochTableCellInner","epoch","Tooltip","title","BlockAddressChip","address","toolTipTitle","span","RawInfoIconButton","rawValue","AccountBalanceHistoryFlexBox","address","refresh","viewer","props","results","error","useAccountBalanceHistory","history","balance","truncated","AttoXL1","undefined","formatBalance","xl1Amount","XL1Amount","toString","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","formatBalanceMagnitude","set","received","sent","netBalance","isDefined","React","FlexCol","ErrorRender","scope","Typography","variant","gutterBottom","at","blockNumber","AccountBalanceHistoryTable","Stack","Tooltip","Typography","EthAddressWrapper","BlockiesAvatarAddress","React","ConnectedAccount","address","shortenedAddress","EthAddressWrapper","fromString","toShortString","React","Stack","direction","alignItems","spacing","BlockiesAvatarAddress","size","Tooltip","title","Typography","color","variant","fontFamily","Alert","AlertTitle","Button","Stack","Typography","ButtonEx","isDefined","isUndefined","ErrorRender","React","useEffect","DefaultConnectComponent","props","React","ButtonEx","variant","size","DefaultNoWalletInstalledComponent","Alert","severity","AlertTitle","Typography","gutterBottom","Button","sx","display","justifySelf","href","target","rel","ConnectAccountsStack","AccountComponent","ConnectedAccount","ConnectComponent","NoWalletInstalledComponent","onAccountConnected","onCancel","timeout","address","connectSigner","error","timedout","useConnectAccount","undefined","useEffect","isDefined","Stack","direction","alignItems","spacing","isUndefined","onClick","ErrorRender","scope"]}
|
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.16.
|
|
4
|
+
"version": "1.16.7",
|
|
5
5
|
"description": "XYO Layer One API",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -51,29 +51,29 @@
|
|
|
51
51
|
"@xylabs/react-flexbox": "~7.1.8",
|
|
52
52
|
"@xylabs/react-promise": "~7.1.8",
|
|
53
53
|
"@xylabs/typeof": "~5.0.24",
|
|
54
|
-
"@xyo-network/account-model": "~5.1.
|
|
55
|
-
"@xyo-network/chain-network-model": "~1.16.
|
|
56
|
-
"@xyo-network/payload-builder": "~5.1.
|
|
57
|
-
"@xyo-network/react-chain-blockchain": "~1.16.
|
|
58
|
-
"@xyo-network/react-chain-blockies": "~1.16.
|
|
54
|
+
"@xyo-network/account-model": "~5.1.21",
|
|
55
|
+
"@xyo-network/chain-network-model": "~1.16.7",
|
|
56
|
+
"@xyo-network/payload-builder": "~5.1.21",
|
|
57
|
+
"@xyo-network/react-chain-blockchain": "~1.16.7",
|
|
58
|
+
"@xyo-network/react-chain-blockies": "~1.16.7",
|
|
59
59
|
"@xyo-network/react-error": "~7.3.10",
|
|
60
60
|
"@xyo-network/react-payload-raw-info": "~7.3.10",
|
|
61
|
-
"@xyo-network/xl1-protocol": "~1.13.
|
|
62
|
-
"@xyo-network/xl1-protocol-sdk": "~1.16.
|
|
63
|
-
"@xyo-network/xl1-rpc": "~1.16.
|
|
61
|
+
"@xyo-network/xl1-protocol": "~1.13.6",
|
|
62
|
+
"@xyo-network/xl1-protocol-sdk": "~1.16.7",
|
|
63
|
+
"@xyo-network/xl1-rpc": "~1.16.7"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
66
|
"@emotion/react": "~11.14.0",
|
|
67
67
|
"@emotion/styled": "~11.14.1",
|
|
68
68
|
"@mui/material": "~7.3.5",
|
|
69
69
|
"@storybook/react-vite": "~10.0.7",
|
|
70
|
-
"@types/react": "~19.2.
|
|
70
|
+
"@types/react": "~19.2.4",
|
|
71
71
|
"@xylabs/react-button": "~7.1.8",
|
|
72
72
|
"@xylabs/ts-scripts-yarn3": "~7.2.8",
|
|
73
73
|
"@xylabs/tsconfig": "~7.2.8",
|
|
74
74
|
"@xylabs/tsconfig-dom": "~7.2.8",
|
|
75
75
|
"@xylabs/tsconfig-react": "~7.2.8",
|
|
76
|
-
"@xyo-network/react-chain-model": "~1.16.
|
|
76
|
+
"@xyo-network/react-chain-model": "~1.16.7",
|
|
77
77
|
"@xyo-network/react-error": "~7.3.10",
|
|
78
78
|
"eslint": "^9.39.1",
|
|
79
79
|
"react": "~19.2.0",
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { isNull } from '@xylabs/typeof'
|
|
1
2
|
import type { XyoClient } from '@xyo-network/xl1-protocol-sdk'
|
|
2
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
useCallback, useEffect, useSyncExternalStore,
|
|
5
|
+
} from 'react'
|
|
3
6
|
|
|
4
7
|
import { getXyoClient } from '../helpers/index.ts'
|
|
5
8
|
|
|
@@ -61,6 +64,30 @@ const subscribe = (listener: () => void, timeout?: number) => {
|
|
|
61
64
|
const getSnapshot = (): ClientState => currentState
|
|
62
65
|
|
|
63
66
|
export const useClient = (timeout?: number) => {
|
|
64
|
-
const subscribeWithTimeout = (listener: () => void) => subscribe(listener, timeout)
|
|
65
|
-
|
|
67
|
+
const subscribeWithTimeout = useCallback((listener: () => void) => subscribe(listener, timeout), [timeout])
|
|
68
|
+
const clientState = useSyncExternalStore(subscribeWithTimeout, getSnapshot)
|
|
69
|
+
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
// if client appears after timeout
|
|
72
|
+
let listener = () => {
|
|
73
|
+
// Update state when client becomes available
|
|
74
|
+
updateState({
|
|
75
|
+
client: globalThis.xyo?.client,
|
|
76
|
+
isLoading: false,
|
|
77
|
+
error: null,
|
|
78
|
+
})
|
|
79
|
+
// Notify listeners of the change
|
|
80
|
+
emitChange()
|
|
81
|
+
}
|
|
82
|
+
// If we have timed out and still no client, listen for the plugin-ready event
|
|
83
|
+
if (clientState.timedout && isNull(clientState.client) && !clientState.isLoading) {
|
|
84
|
+
globalThis.addEventListener('xyo:plugin-ready', listener)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return () => {
|
|
88
|
+
globalThis.removeEventListener('xyo:plugin-ready', listener)
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
return clientState
|
|
66
93
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isDefined, isNull } from '@xylabs/typeof'
|
|
1
2
|
import type { GatewayName } from '@xyo-network/xl1-protocol'
|
|
2
3
|
|
|
3
4
|
import { useClient } from './useClient.ts'
|
|
@@ -6,8 +7,18 @@ export const useGateway = (gatewayName?: GatewayName, timeout?: number) => {
|
|
|
6
7
|
const {
|
|
7
8
|
client, isLoading, error, timedout,
|
|
8
9
|
} = useClient(timeout)
|
|
10
|
+
|
|
11
|
+
const resolveGateway = () => {
|
|
12
|
+
// null client means we do not have to wait for timedout
|
|
13
|
+
if (isNull(client)) return null
|
|
14
|
+
if (timedout && !isLoading && isDefined(gatewayName)) {
|
|
15
|
+
return null
|
|
16
|
+
}
|
|
17
|
+
return client?.gateways?.[gatewayName!]
|
|
18
|
+
}
|
|
19
|
+
|
|
9
20
|
return {
|
|
10
|
-
gateway: gatewayName ?
|
|
21
|
+
gateway: gatewayName ? resolveGateway() : undefined,
|
|
11
22
|
isLoading,
|
|
12
23
|
error,
|
|
13
24
|
timedout,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isUndefined } from '@xylabs/typeof'
|
|
1
2
|
import type { XyoClient } from '@xyo-network/xl1-protocol-sdk'
|
|
2
3
|
|
|
3
4
|
const CLIENT_LISTENER_TIMEOUT = 500
|
|
@@ -15,6 +16,7 @@ export const listenForClientInjection = (onClientReady: () => void, timeout: num
|
|
|
15
16
|
globalThis.addEventListener('xyo:plugin-ready', listener)
|
|
16
17
|
setTimeout(() => {
|
|
17
18
|
if (!resolved) {
|
|
19
|
+
globalThis.removeEventListener('xyo:plugin-ready', listener)
|
|
18
20
|
onTimeout()
|
|
19
21
|
}
|
|
20
22
|
}, timeout)
|
|
@@ -23,6 +25,10 @@ export const listenForClientInjection = (onClientReady: () => void, timeout: num
|
|
|
23
25
|
type ReturnType = XyoClient | undefined | null
|
|
24
26
|
|
|
25
27
|
export async function getXyoClient(timeout = CLIENT_LISTENER_TIMEOUT): Promise<ReturnType> {
|
|
28
|
+
// if no xyo object, we can bail early
|
|
29
|
+
if (isUndefined(globalThis.xyo)) {
|
|
30
|
+
return null
|
|
31
|
+
}
|
|
26
32
|
return hasXyoClient()
|
|
27
33
|
? globalThis.xyo.client
|
|
28
34
|
// listen for the XyoWallet to be injected
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { usePromise } from '@xylabs/react-promise'
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
isDefined, isDefinedNotNull, isNull,
|
|
4
|
+
} from '@xylabs/typeof'
|
|
3
5
|
import type { GatewayName } from '@xyo-network/xl1-protocol'
|
|
4
6
|
|
|
5
7
|
import { useGateway } from '../client/index.ts'
|
|
@@ -10,17 +12,23 @@ import { useGateway } from '../client/index.ts'
|
|
|
10
12
|
* @returns An instance of XyoViewer if the networkId is found in wallet gateways
|
|
11
13
|
* otherwise undefined.
|
|
12
14
|
*/
|
|
13
|
-
export const useViewerFromWallet = (
|
|
15
|
+
export const useViewerFromWallet = (
|
|
16
|
+
networkId?: GatewayName,
|
|
17
|
+
timeout?: number,
|
|
18
|
+
) => {
|
|
14
19
|
const {
|
|
15
|
-
gateway, error, isLoading,
|
|
16
|
-
} = useGateway(networkId)
|
|
20
|
+
gateway, error, isLoading, timedout,
|
|
21
|
+
} = useGateway(networkId, timeout)
|
|
17
22
|
|
|
18
|
-
|
|
23
|
+
const result = usePromise(async () => {
|
|
19
24
|
if (isDefinedNotNull(error)) return null
|
|
20
25
|
if (isLoading) return
|
|
26
|
+
if (timedout && isNull(gateway)) return null
|
|
21
27
|
if (isDefined(gateway) && isDefined(networkId)) {
|
|
22
28
|
const connection = await gateway?.connection()
|
|
23
29
|
return connection?.viewer
|
|
24
30
|
}
|
|
25
|
-
}, [gateway, networkId])
|
|
31
|
+
}, [gateway, networkId, timeout])
|
|
32
|
+
|
|
33
|
+
return result
|
|
26
34
|
}
|