@sundaeswap/wallet-lite 0.0.23 → 0.0.25

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.
Files changed (25) hide show
  1. package/dist/cjs/@types/observer.js.map +1 -1
  2. package/dist/cjs/classes/WalletObserver.class.js +151 -96
  3. package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
  4. package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.js +1 -3
  5. package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.js.map +1 -1
  6. package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +62 -59
  7. package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  8. package/dist/esm/@types/observer.js.map +1 -1
  9. package/dist/esm/classes/WalletObserver.class.js +56 -1
  10. package/dist/esm/classes/WalletObserver.class.js.map +1 -1
  11. package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.js +1 -3
  12. package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.js.map +1 -1
  13. package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +39 -36
  14. package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  15. package/dist/types/@types/observer.d.ts +1 -0
  16. package/dist/types/@types/observer.d.ts.map +1 -1
  17. package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
  18. package/dist/types/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.d.ts.map +1 -1
  19. package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts.map +1 -1
  20. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  21. package/package.json +1 -1
  22. package/src/@types/observer.ts +1 -0
  23. package/src/classes/WalletObserver.class.ts +68 -1
  24. package/src/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.ts +1 -3
  25. package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +66 -61
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sundaeswap/wallet-lite",
3
- "version": "0.0.23",
3
+ "version": "0.0.25",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -66,6 +66,7 @@ export interface IResolvedWalletObserverOptions<
66
66
  persistence: boolean;
67
67
  peerConnectArgs: DAppPeerConnectParameters;
68
68
  connectTimeout: number;
69
+ debug: boolean;
69
70
  }
70
71
 
71
72
  /**
@@ -78,6 +78,7 @@ export class WalletObserver<
78
78
  metadataResolver: this.fallbackMetadataResolver,
79
79
  persistence: false,
80
80
  connectTimeout: 10000,
81
+ debug: false,
81
82
  peerConnectArgs: {
82
83
  dAppInfo: {
83
84
  name: "Placeholder dApp Connecter Name",
@@ -141,6 +142,8 @@ export class WalletObserver<
141
142
  );
142
143
  }
143
144
 
145
+ const start = performance.now();
146
+
144
147
  try {
145
148
  this._performingSync = true;
146
149
  this.dispatch(EWalletObserverEvents.SYNCING_WALLET_START);
@@ -185,6 +188,10 @@ export class WalletObserver<
185
188
  this.dispatch(EWalletObserverEvents.SYNCING_WALLET_END, result);
186
189
  this._performingSync = false;
187
190
 
191
+ const end = performance.now();
192
+ if (this._options.debug) {
193
+ console.log(`sync: ${end - start}ms`);
194
+ }
188
195
  return result;
189
196
  } catch (e) {
190
197
  this._performingSync = false;
@@ -267,6 +274,7 @@ export class WalletObserver<
267
274
  connectWallet = async (
268
275
  extension: TSupportedWalletExtensions
269
276
  ): Promise<void> => {
277
+ const start = performance.now();
270
278
  this.dispatch(EWalletObserverEvents.CONNECT_WALLET_START);
271
279
 
272
280
  let attempts = 0;
@@ -310,9 +318,15 @@ export class WalletObserver<
310
318
  this.dispatch(EWalletObserverEvents.CONNECT_WALLET_END, {
311
319
  extension,
312
320
  });
321
+
322
+ const end = performance.now();
323
+ if (this._options.debug) {
324
+ console.log(`connectWallet: ${end - start}ms`);
325
+ }
313
326
  };
314
327
 
315
328
  getCip45Instance = async () => {
329
+ const start = performance.now();
316
330
  if (!this.peerConnectInstance) {
317
331
  const { DAppPeerConnect } = await getPeerConnect();
318
332
  this.peerConnectInstance = new DAppPeerConnect(
@@ -320,6 +334,11 @@ export class WalletObserver<
320
334
  );
321
335
  }
322
336
 
337
+ const end = performance.now();
338
+ if (this._options.debug) {
339
+ console.log(`getCip45Instance: ${end - start}ms`);
340
+ }
341
+
323
342
  return {
324
343
  name: this._options.peerConnectArgs.dAppInfo.name,
325
344
  icon: this.peerConnectInstance.getIdenticon(),
@@ -376,6 +395,8 @@ export class WalletObserver<
376
395
  throw new Error("Attempted to query balance without an API instance.");
377
396
  }
378
397
 
398
+ const start = performance.now();
399
+
379
400
  this.dispatch(EWalletObserverEvents.GET_BALANCE_MAP_START);
380
401
  const [cbor, { Serialization }, { typedHex }] = await Promise.all([
381
402
  this.api.getBalance(),
@@ -411,6 +432,10 @@ export class WalletObserver<
411
432
  balanceMap,
412
433
  });
413
434
 
435
+ const end = performance.now();
436
+ if (this._options.debug) {
437
+ console.log(`getBalanceMap: ${end - start}ms`);
438
+ }
414
439
  return balanceMap;
415
440
  };
416
441
 
@@ -424,8 +449,15 @@ export class WalletObserver<
424
449
  throw new Error("Attempted to query network without an API instance.");
425
450
  }
426
451
 
452
+ const start = performance.now();
453
+
427
454
  const val = await this.api.getNetworkId();
428
455
  this.network = val;
456
+
457
+ const end = performance.now();
458
+ if (this._options.debug) {
459
+ console.log(`getNetwork: ${end - start}ms`);
460
+ }
429
461
  return val;
430
462
  };
431
463
 
@@ -441,6 +473,8 @@ export class WalletObserver<
441
473
  );
442
474
  }
443
475
 
476
+ const start = performance.now();
477
+
444
478
  const [cbor, { Cardano }, { typedHex }] = await Promise.all([
445
479
  this.api.getUsedAddresses(),
446
480
  getCardanoCore(),
@@ -451,6 +485,10 @@ export class WalletObserver<
451
485
  Cardano.Address.fromBytes(typedHex(val)).toBech32()
452
486
  );
453
487
 
488
+ const end = performance.now();
489
+ if (this._options.debug) {
490
+ console.log(`getUsedAddresses: ${end - start}ms`);
491
+ }
454
492
  return data;
455
493
  };
456
494
 
@@ -466,6 +504,8 @@ export class WalletObserver<
466
504
  );
467
505
  }
468
506
 
507
+ const start = performance.now();
508
+
469
509
  const [cbor, { Cardano }, { typedHex }] = await Promise.all([
470
510
  this.api.getUnusedAddresses(),
471
511
  getCardanoCore(),
@@ -476,6 +516,10 @@ export class WalletObserver<
476
516
  Cardano.Address.fromBytes(typedHex(val)).toBech32()
477
517
  );
478
518
 
519
+ const end = performance.now();
520
+ if (this._options.debug) {
521
+ console.log(`getUnusedAddresses: ${end - start}ms`);
522
+ }
479
523
  return data;
480
524
  };
481
525
 
@@ -489,6 +533,8 @@ export class WalletObserver<
489
533
  throw new Error("Attempted to query UTXOs without an API instance.");
490
534
  }
491
535
 
536
+ const start = performance.now();
537
+
492
538
  const [cbor, { Serialization }, { typedHex }] = await Promise.all([
493
539
  this.api.getUtxos(),
494
540
  getCardanoCore(),
@@ -506,6 +552,10 @@ export class WalletObserver<
506
552
  return txOutput;
507
553
  });
508
554
 
555
+ const end = performance.now();
556
+ if (this._options.debug) {
557
+ console.log(`getUtxos: ${end - start}ms`);
558
+ }
509
559
  return data;
510
560
  };
511
561
 
@@ -519,6 +569,8 @@ export class WalletObserver<
519
569
  throw new Error("Attempted to query UTXOs without an API instance.");
520
570
  }
521
571
 
572
+ const start = performance.now();
573
+
522
574
  const [cbor, { Serialization }, { typedHex }] = await Promise.all([
523
575
  (async () => {
524
576
  const funcCall =
@@ -545,6 +597,10 @@ export class WalletObserver<
545
597
  return txOutput;
546
598
  });
547
599
 
600
+ const end = performance.now();
601
+ if (this._options.debug) {
602
+ console.log(`getCollateral: ${end - start}ms`);
603
+ }
548
604
  return data;
549
605
  };
550
606
 
@@ -558,6 +614,8 @@ export class WalletObserver<
558
614
  private __metadataResolverWithCache = async (
559
615
  assetIds: string[]
560
616
  ): Promise<Map<string, AssetMetadata>> => {
617
+ const start = performance.now();
618
+
561
619
  if (this._cachedMetadata) {
562
620
  const cachedKeys = new Set(this._cachedMetadata.keys());
563
621
  const inputKeys = new Set(assetIds);
@@ -566,13 +624,17 @@ export class WalletObserver<
566
624
  cachedKeys.size === inputKeys.size &&
567
625
  [...cachedKeys].every((key) => inputKeys.has(key))
568
626
  ) {
627
+ const end = performance.now();
628
+ if (this._options.debug) {
629
+ console.log(`metadataResolver (cached): ${end - start}ms`);
630
+ }
569
631
  return this._cachedMetadata;
570
632
  }
571
633
  }
572
634
 
573
635
  let attempts = 0;
574
636
  let newMetadata: Map<string, AssetMetadata> | undefined;
575
- while (attempts <= 3) {
637
+ while (attempts <= 3 && !newMetadata) {
576
638
  try {
577
639
  newMetadata = await this._options.metadataResolver(
578
640
  assetIds.map(normalizeAssetIdWithDot),
@@ -593,6 +655,11 @@ export class WalletObserver<
593
655
  }
594
656
 
595
657
  this._cachedMetadata = newMetadata;
658
+
659
+ const end = performance.now();
660
+ if (this._options.debug) {
661
+ console.log(`metadataResolver: ${end - start}ms`);
662
+ }
596
663
  return newMetadata;
597
664
  };
598
665
 
@@ -80,9 +80,7 @@ export const useProviderEventListeners = (
80
80
  * Ensure the wallet syncs on connect and disconnect.
81
81
  */
82
82
  useEffect(() => {
83
- window.addEventListener("focus", () => {
84
- syncWallet;
85
- });
83
+ window.addEventListener("focus", syncWallet);
86
84
 
87
85
  observer.addEventListener(
88
86
  EWalletObserverEvents.CONNECT_WALLET_END,
@@ -1,6 +1,7 @@
1
1
  import type { TransactionUnspentOutput } from "@cardano-sdk/core/dist/cjs/Serialization/index.js";
2
2
  import { AssetAmount } from "@sundaeswap/asset";
3
- import { useCallback, useRef, useState } from "react";
3
+ import { useCallback, useState } from "react";
4
+ import { unstable_batchedUpdates } from "react-dom";
4
5
 
5
6
  import {
6
7
  TAssetAmountMap,
@@ -19,7 +20,6 @@ import { THandleMetadata } from "../../contexts/observer/index.js";
19
20
  * @param {WalletObserver} observer
20
21
  */
21
22
  export const useWalletObserverState = (observer: WalletObserver) => {
22
- const prevActiveWallet = useRef<TSupportedWalletExtensions>();
23
23
  const [activeWallet, setActiveWallet] =
24
24
  useState<TSupportedWalletExtensions>();
25
25
  const [adaBalance, setAdaBalance] = useState<AssetAmount>(
@@ -47,77 +47,82 @@ export const useWalletObserverState = (observer: WalletObserver) => {
47
47
  const newWallet = observer.getActiveWallet();
48
48
 
49
49
  if (!newWallet) {
50
- setAdaBalance(new AssetAmount(0n));
51
- setBalance(new WalletBalanceMap(observer));
52
- setUsedAddresses([]);
53
- setUnusedAddresses([]);
54
- setActiveWallet(undefined);
55
- setNetwork(undefined);
56
- setUtxos(undefined);
57
- setCollateral(undefined);
50
+ unstable_batchedUpdates(() => {
51
+ setAdaBalance(new AssetAmount(0n));
52
+ setBalance(new WalletBalanceMap(observer));
53
+ setUsedAddresses([]);
54
+ setUnusedAddresses([]);
55
+ setActiveWallet(undefined);
56
+ setNetwork(undefined);
57
+ setUtxos(undefined);
58
+ setCollateral(undefined);
59
+ });
58
60
  return;
59
61
  }
60
62
 
61
- prevActiveWallet.current = newWallet;
62
- setActiveWallet((prevWallet) =>
63
- newWallet === prevWallet ? prevWallet : newWallet
64
- );
65
-
66
63
  const freshData = await observer.sync();
67
64
 
68
- const newAdaBalance = freshData.balanceMap.get(WalletObserver.ADA_ASSET_ID);
69
- if (newAdaBalance) {
70
- setAdaBalance((prevBalance) =>
71
- prevBalance.amount === newAdaBalance.amount
72
- ? prevBalance
73
- : newAdaBalance
65
+ unstable_batchedUpdates(() => {
66
+ setActiveWallet((prevWallet) =>
67
+ newWallet === prevWallet ? prevWallet : newWallet
74
68
  );
75
- }
76
69
 
77
- setBalance((prevBalance) =>
78
- areAssetMapsEqual(prevBalance, freshData.balanceMap)
79
- ? prevBalance
80
- : freshData.balanceMap
81
- );
82
-
83
- setUsedAddresses((prevValue) =>
84
- JSON.stringify(prevValue) === JSON.stringify(freshData.usedAddresses)
85
- ? prevValue
86
- : freshData.usedAddresses
87
- );
88
-
89
- setUnusedAddresses((prevValue) =>
90
- JSON.stringify(prevValue) === JSON.stringify(freshData.unusedAddresses)
91
- ? prevValue
92
- : freshData.unusedAddresses
93
- );
94
-
95
- setNetwork((prevValue) =>
96
- prevValue === freshData.network ? prevValue : freshData.network
97
- );
98
-
99
- setUtxos((prevValue) => {
100
- const prevValueRep = prevValue?.map((v) => v.toCbor());
101
- const newValueRep = freshData.utxos?.map((v) => v.toCbor());
102
- if (prevValueRep !== newValueRep) {
103
- return freshData.utxos;
70
+ const newAdaBalance = freshData.balanceMap.get(
71
+ WalletObserver.ADA_ASSET_ID
72
+ );
73
+ if (newAdaBalance) {
74
+ setAdaBalance((prevBalance) =>
75
+ prevBalance.amount === newAdaBalance.amount
76
+ ? prevBalance
77
+ : newAdaBalance
78
+ );
104
79
  }
105
80
 
106
- return prevValue;
107
- });
81
+ setBalance((prevBalance) =>
82
+ areAssetMapsEqual(prevBalance, freshData.balanceMap)
83
+ ? prevBalance
84
+ : freshData.balanceMap
85
+ );
108
86
 
109
- setCollateral((prevValue) => {
110
- const prevValueRep = prevValue?.map((v) => v.toCbor());
111
- const newValueRep = freshData.utxos?.map((v) => v.toCbor());
112
- if (prevValueRep !== newValueRep) {
113
- return freshData.utxos;
114
- }
87
+ setUsedAddresses((prevValue) =>
88
+ JSON.stringify(prevValue) === JSON.stringify(freshData.usedAddresses)
89
+ ? prevValue
90
+ : freshData.usedAddresses
91
+ );
115
92
 
116
- return prevValue;
117
- });
93
+ setUnusedAddresses((prevValue) =>
94
+ JSON.stringify(prevValue) === JSON.stringify(freshData.unusedAddresses)
95
+ ? prevValue
96
+ : freshData.unusedAddresses
97
+ );
98
+
99
+ setNetwork((prevValue) =>
100
+ prevValue === freshData.network ? prevValue : freshData.network
101
+ );
102
+
103
+ setUtxos((prevValue) => {
104
+ const prevValueRep = prevValue?.map((v) => v.toCbor());
105
+ const newValueRep = freshData.utxos?.map((v) => v.toCbor());
106
+ if (prevValueRep !== newValueRep) {
107
+ return freshData.utxos;
108
+ }
118
109
 
119
- setReady(true);
120
- setIsCip45(newWallet.includes("p2p"));
110
+ return prevValue;
111
+ });
112
+
113
+ setCollateral((prevValue) => {
114
+ const prevValueRep = prevValue?.map((v) => v.toCbor());
115
+ const newValueRep = freshData.utxos?.map((v) => v.toCbor());
116
+ if (prevValueRep !== newValueRep) {
117
+ return freshData.utxos;
118
+ }
119
+
120
+ return prevValue;
121
+ });
122
+
123
+ setReady(true);
124
+ setIsCip45(newWallet.includes("p2p"));
125
+ });
121
126
  }, [observer]);
122
127
 
123
128
  return {