@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.
@@ -1 +1 @@
1
- {"version":3,"file":"useClient.d.ts","sourceRoot":"","sources":["../../../../src/hooks/client/useClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAK9D,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,gBAGzC,CAAA"}
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":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAI5D,eAAO,MAAM,UAAU,GAAI,cAAc,WAAW,EAAE,UAAU,MAAM;;;;;CAUrE,CAAA"}
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":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAQ9D,eAAO,MAAM,wBAAwB,GAAI,eAAe,MAAM,IAAI,EAAE,SAAS,MAAM,EAAE,WAAW,MAAM,IAAI,SAYzG,CAAA;AAED,KAAK,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAA;AAE9C,wBAAsB,YAAY,CAAC,OAAO,SAA0B,GAAG,OAAO,CAAC,UAAU,CAAC,CAezF"}
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":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAI5D;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,YAAY,WAAW,2JAa1D,CAAA"}
1
+ {"version":3,"file":"useViewerFromWallet.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/useViewerFromWallet.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAI5D;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,WAAW,EACvB,UAAU,MAAM,2JAiBjB,CAAA"}
@@ -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 isDefined8 } from "@xylabs/typeof";
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 { useSyncExternalStore } from "react";
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 = /* @__PURE__ */ __name((listener) => subscribe(listener, timeout), "subscribeWithTimeout");
207
- return useSyncExternalStore(subscribeWithTimeout, getSnapshot);
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 ? client?.gateways?.[gatewayName] : void 0,
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 (isUndefined(viewer) || isUndefined(address)) return;
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 isUndefined2, isUndefinedOrNull } from "@xylabs/typeof";
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 (isUndefined2(viewer) || isUndefined2(address)) return;
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 isDefined4 } from "@xylabs/typeof";
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 = isDefined4(runner);
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 && isDefined4(onBroadcast)) onBroadcast(hash);
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
- useEffect(() => {
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 = useCallback(async () => {
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 isUndefined3 } from "@xylabs/typeof";
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 (isUndefined3(url)) {
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 isUndefined4 } from "@xylabs/typeof";
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 (isUndefined4(id)) return;
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 isDefined5, isUndefined as isUndefined5 } from "@xylabs/typeof";
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 useEffect2, useMemo as useMemo5, useState as useState4 } from "react";
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 (isUndefined5(endpoint)) return;
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
- useEffect2(() => {
626
- if (isUndefined5(viewer)) return;
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(isDefined5(block));
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 isUndefined6 } from "@xylabs/typeof";
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 (isUndefined6(url)) {
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 isDefined6, isDefinedNotNull as isDefinedNotNull3 } from "@xylabs/typeof";
674
- var useViewerFromWallet = /* @__PURE__ */ __name((networkId) => {
675
- const { gateway, error, isLoading } = useGateway(networkId);
676
- return usePromise6(async () => {
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 (isDefined6(gateway) && isDefined6(networkId)) {
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 isDefined7 } from "@xylabs/typeof";
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 (!isDefined7(amount)) {
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 isDefined7(history) ? /* @__PURE__ */ React.createElement(Table, props, /* @__PURE__ */ React.createElement(TableHead, null, /* @__PURE__ */ React.createElement(TableRow, null, TableHeadingLabels.map((heading) => /* @__PURE__ */ React.createElement(TableCell, {
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 isDefined8(history) && isDefined8(address) ? /* @__PURE__ */ React2.createElement(FlexCol, props, /* @__PURE__ */ React2.createElement(ErrorRender, {
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 isDefined9, isUndefined as isUndefined7 } from "@xylabs/typeof";
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 useEffect3 } from "react";
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
- useEffect3(() => {
839
- if (isDefined9(error) && isDefined9(onCancel)) {
874
+ useEffect4(() => {
875
+ if (isDefined10(error) && isDefined10(onCancel)) {
840
876
  onCancel();
841
877
  }
842
878
  }, [
843
879
  error,
844
880
  onCancel
845
881
  ]);
846
- useEffect3(() => {
847
- if (isDefined9(address) && isDefined9(onAccountConnected)) {
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
- }, isDefined9(address) ? /* @__PURE__ */ React4.createElement(AccountComponent, {
895
+ }, isDefined10(address) ? /* @__PURE__ */ React4.createElement(AccountComponent, {
860
896
  address
861
- }) : null, isUndefined7(address) && !timedout ? /* @__PURE__ */ React4.createElement(ConnectComponent, {
897
+ }) : null, isUndefined8(address) && !timedout ? /* @__PURE__ */ React4.createElement(ConnectComponent, {
862
898
  onClick: /* @__PURE__ */ __name(() => void connectSigner(), "onClick")
863
- }, "Connect") : null, isUndefined7(address) && timedout ? /* @__PURE__ */ React4.createElement(NoWalletInstalledComponent, null) : null, /* @__PURE__ */ React4.createElement(ErrorRender2, {
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.6",
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.19",
55
- "@xyo-network/chain-network-model": "~1.16.6",
56
- "@xyo-network/payload-builder": "~5.1.19",
57
- "@xyo-network/react-chain-blockchain": "~1.16.6",
58
- "@xyo-network/react-chain-blockies": "~1.16.6",
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.5",
62
- "@xyo-network/xl1-protocol-sdk": "~1.16.6",
63
- "@xyo-network/xl1-rpc": "~1.16.6"
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.3",
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.6",
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 { useSyncExternalStore } from 'react'
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
- return useSyncExternalStore(subscribeWithTimeout, getSnapshot)
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 ? client?.gateways?.[gatewayName] : undefined,
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 { isDefined, isDefinedNotNull } from '@xylabs/typeof'
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 = (networkId?: GatewayName) => {
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
- return usePromise(async () => {
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
  }