@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.
- package/dist/cjs/@types/observer.js.map +1 -1
- package/dist/cjs/classes/WalletObserver.class.js +151 -96
- package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.js +1 -3
- package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +62 -59
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
- package/dist/esm/@types/observer.js.map +1 -1
- package/dist/esm/classes/WalletObserver.class.js +56 -1
- package/dist/esm/classes/WalletObserver.class.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.js +1 -3
- package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +39 -36
- package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
- package/dist/types/@types/observer.d.ts +1 -0
- package/dist/types/@types/observer.d.ts.map +1 -1
- package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
- package/dist/types/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.d.ts.map +1 -1
- package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts.map +1 -1
- package/dist/types/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/@types/observer.ts +1 -0
- package/src/classes/WalletObserver.class.ts +68 -1
- package/src/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.ts +1 -3
- package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +66 -61
package/package.json
CHANGED
package/src/@types/observer.ts
CHANGED
|
@@ -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
|
|
package/src/react-components/WalletObserverProvider/hooks/effects/useProviderEventListeners.ts
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
|
|
107
|
-
|
|
81
|
+
setBalance((prevBalance) =>
|
|
82
|
+
areAssetMapsEqual(prevBalance, freshData.balanceMap)
|
|
83
|
+
? prevBalance
|
|
84
|
+
: freshData.balanceMap
|
|
85
|
+
);
|
|
108
86
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
87
|
+
setUsedAddresses((prevValue) =>
|
|
88
|
+
JSON.stringify(prevValue) === JSON.stringify(freshData.usedAddresses)
|
|
89
|
+
? prevValue
|
|
90
|
+
: freshData.usedAddresses
|
|
91
|
+
);
|
|
115
92
|
|
|
116
|
-
|
|
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
|
-
|
|
120
|
-
|
|
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 {
|