@sundaeswap/wallet-lite 0.0.94 → 0.0.96

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 (45) hide show
  1. package/dist/cjs/@types/observer.js.map +1 -1
  2. package/dist/cjs/classes/WalletObserver.class.js +227 -177
  3. package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
  4. package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js +2 -1
  5. package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
  6. package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js +6 -5
  7. package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
  8. package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +30 -17
  9. package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  10. package/dist/cjs/react-components/contexts/observer/types.js.map +1 -1
  11. package/dist/cjs/react-components/hooks/useWalletObserver.js +2 -1
  12. package/dist/cjs/react-components/hooks/useWalletObserver.js.map +1 -1
  13. package/dist/esm/@types/observer.js.map +1 -1
  14. package/dist/esm/classes/WalletObserver.class.js +30 -3
  15. package/dist/esm/classes/WalletObserver.class.js.map +1 -1
  16. package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js +2 -1
  17. package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
  18. package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js +6 -5
  19. package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
  20. package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +8 -0
  21. package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  22. package/dist/esm/react-components/contexts/observer/types.js.map +1 -1
  23. package/dist/esm/react-components/hooks/useWalletObserver.js +2 -1
  24. package/dist/esm/react-components/hooks/useWalletObserver.js.map +1 -1
  25. package/dist/types/@types/observer.d.ts +4 -0
  26. package/dist/types/@types/observer.d.ts.map +1 -1
  27. package/dist/types/classes/WalletObserver.class.d.ts +6 -0
  28. package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
  29. package/dist/types/react-components/WalletObserverProvider/WalletObserverProvider.d.ts.map +1 -1
  30. package/dist/types/react-components/WalletObserverProvider/hooks/effects/useDerivedState.d.ts +1 -1
  31. package/dist/types/react-components/WalletObserverProvider/hooks/effects/useDerivedState.d.ts.map +1 -1
  32. package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts +2 -0
  33. package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts.map +1 -1
  34. package/dist/types/react-components/contexts/observer/types.d.ts +1 -1
  35. package/dist/types/react-components/contexts/observer/types.d.ts.map +1 -1
  36. package/dist/types/react-components/hooks/useWalletObserver.d.ts.map +1 -1
  37. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  38. package/package.json +2 -1
  39. package/src/@types/observer.ts +4 -0
  40. package/src/classes/WalletObserver.class.ts +40 -1
  41. package/src/react-components/WalletObserverProvider/WalletObserverProvider.tsx +1 -0
  42. package/src/react-components/WalletObserverProvider/hooks/effects/useDerivedState.ts +8 -15
  43. package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +11 -0
  44. package/src/react-components/contexts/observer/types.ts +1 -0
  45. package/src/react-components/hooks/useWalletObserver.ts +2 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sundaeswap/wallet-lite",
3
- "version": "0.0.94",
3
+ "version": "0.0.96",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -66,6 +66,7 @@
66
66
  "@testing-library/react-hooks": "^8.0.1",
67
67
  "@testing-library/user-event": "^14.5.2",
68
68
  "@types/libsodium-wrappers-sumo": "^0.7.8",
69
+ "@tanstack/react-query": "^5.51.11",
69
70
  "@types/lodash": "^4.17.4",
70
71
  "@types/node": "^20.14.2",
71
72
  "@types/node-fetch": "^2.6.11",
@@ -18,6 +18,9 @@ export interface IWindowCip30Extension {
18
18
  icon: string;
19
19
  isEnabled: () => Promise<boolean>;
20
20
  name: string;
21
+ experimental?: {
22
+ feeAddress?: string;
23
+ };
21
24
  }
22
25
 
23
26
  /**
@@ -102,4 +105,5 @@ export interface IWalletObserverSync<
102
105
  collateral?: Error | TransactionUnspentOutput[];
103
106
  network: Error | number;
104
107
  feeAddress?: Error | string;
108
+ changeAddress?: Error | string;
105
109
  }
@@ -150,6 +150,7 @@ export class WalletObserver<
150
150
  newOutputs,
151
151
  newCollateral,
152
152
  newFeeAddress,
153
+ newChangeAddress,
153
154
  ] = await Promise.all([
154
155
  this.getNetwork(),
155
156
  this.getUsedAddresses(),
@@ -157,6 +158,7 @@ export class WalletObserver<
157
158
  this.getUtxos(),
158
159
  this.getCollateral(),
159
160
  this.getFeeAddress(),
161
+ this.getChangeAddress(),
160
162
  ]);
161
163
 
162
164
  const result: IWalletObserverSync<AssetMetadata> = {
@@ -167,6 +169,7 @@ export class WalletObserver<
167
169
  collateral: newCollateral,
168
170
  network: newNetwork,
169
171
  feeAddress: newFeeAddress,
172
+ changeAddress: newChangeAddress,
170
173
  };
171
174
 
172
175
  const end = performance.now();
@@ -414,6 +417,41 @@ export class WalletObserver<
414
417
  this.dispatch(EWalletObserverEvents.DISCONNECT);
415
418
  };
416
419
 
420
+ /**
421
+ * Gets a the change address.
422
+ *
423
+ * @returns {Promise<string | Error>} The change address, or an error.
424
+ */
425
+ getChangeAddress = async (): Promise<string | Error> => {
426
+ if (!this.api) {
427
+ throw new Error(
428
+ "Attempted to query change address without an API instance.",
429
+ );
430
+ }
431
+
432
+ const start = performance.now();
433
+
434
+ const [{ Cardano }, typedHex] = await Promise.all([
435
+ getCardanoCore(),
436
+ getCardanoUtil(),
437
+ ]);
438
+
439
+ let cbor: string;
440
+ try {
441
+ cbor = await this.api.getChangeAddress();
442
+ } catch (e) {
443
+ return e as Error;
444
+ }
445
+
446
+ const data = Cardano.Address.fromBytes(typedHex(cbor)).toBech32();
447
+
448
+ const end = performance.now();
449
+ if (this._options.debug) {
450
+ console.log(`getChangeAddress: ${end - start}ms`);
451
+ }
452
+ return data;
453
+ };
454
+
417
455
  /**
418
456
  * Retrieves the balance of the wallet, including metadata for each asset.
419
457
  *
@@ -635,7 +673,8 @@ export class WalletObserver<
635
673
 
636
674
  const start = performance.now();
637
675
  try {
638
- const address = this.api.experimental?.feeAddress;
676
+ const address =
677
+ window.cardano?.[this.activeWallet!]?.experimental?.feeAddress;
639
678
  const end = performance.now();
640
679
 
641
680
  if (this._options.debug) {
@@ -39,6 +39,7 @@ const WalletObserverProvider: FC<
39
39
  const derivedState = useDerivedState(observerRef.current, {
40
40
  usedAddresses: state.usedAddresses,
41
41
  unusedAddresses: state.unusedAddresses,
42
+ changeAddress: state.changeAddress,
42
43
  });
43
44
 
44
45
  // Memoize the context value
@@ -7,32 +7,30 @@ export const useDerivedState = (
7
7
  observer: WalletObserver,
8
8
  state: Pick<
9
9
  ReturnType<typeof useWalletObserverState>,
10
- "usedAddresses" | "unusedAddresses"
10
+ "usedAddresses" | "unusedAddresses" | "changeAddress"
11
11
  >,
12
12
  ) => {
13
13
  const [stakeAddress, setStakeAddress] = useState<string>();
14
+ const address =
15
+ state.changeAddress || state.usedAddresses[0] || state.unusedAddresses[0];
14
16
 
15
17
  useEffect(() => {
16
- if (!state.usedAddresses[0] && !state.unusedAddresses[0]) {
18
+ if (!address) {
17
19
  return;
18
20
  }
19
21
 
20
22
  observer.getUtils().then((utils) => {
21
- setStakeAddress(
22
- utils.getBech32StakingAddress(
23
- state.usedAddresses[0] || state.unusedAddresses[0],
24
- ),
25
- );
23
+ setStakeAddress(utils.getBech32StakingAddress(address));
26
24
  });
27
- }, [state.usedAddresses[0] || state.unusedAddresses[0]]);
25
+ }, [address]);
28
26
 
29
27
  const memoizedDerivedState = useMemo(() => {
30
- let mainAddress = state.usedAddresses[0] || state.unusedAddresses[0];
31
28
  const persistentCache = window.localStorage.getItem(
32
29
  WalletObserver.PERSISTENCE_CACHE_KEY,
33
30
  );
34
31
  const usePersistence = observer.getOptions().persistence;
35
32
 
33
+ let mainAddress = address;
36
34
  if (usePersistence && persistentCache && !mainAddress) {
37
35
  const cache = JSON.parse(persistentCache) as IWalletObserverSeed;
38
36
  mainAddress = cache.mainAddress;
@@ -42,12 +40,7 @@ export const useDerivedState = (
42
40
  stakeAddress,
43
41
  mainAddress,
44
42
  };
45
- }, [
46
- observer,
47
- state.usedAddresses[0],
48
- state.unusedAddresses[0],
49
- stakeAddress,
50
- ]);
43
+ }, [observer, address, stakeAddress]);
51
44
 
52
45
  return memoizedDerivedState;
53
46
  };
@@ -31,6 +31,7 @@ export const useWalletObserverState = <
31
31
  const [network, setNetwork] = useState<number | undefined>();
32
32
  const [usedAddresses, setUsedAddresses] = useState<string[]>([]);
33
33
  const [unusedAddresses, setUnusedAddresses] = useState<string[]>([]);
34
+ const [changeAddress, setChangeAddress] = useState<string | undefined>();
34
35
  const [feeAddress, setFeeAddress] = useState<string | undefined>();
35
36
  const [utxos, setUtxos] = useState<TransactionUnspentOutput[]>();
36
37
  const [collateral, setCollateral] = useState<TransactionUnspentOutput[]>();
@@ -54,6 +55,7 @@ export const useWalletObserverState = <
54
55
  setBalance(new WalletBalanceMap(observer));
55
56
  setUsedAddresses([]);
56
57
  setUnusedAddresses([]);
58
+ setChangeAddress(undefined);
57
59
  setActiveWallet(undefined);
58
60
  setNetwork(undefined);
59
61
  setUtxos(undefined);
@@ -176,6 +178,13 @@ export const useWalletObserverState = <
176
178
  prevValue === newFeeAddress ? prevValue : newFeeAddress,
177
179
  );
178
180
  }
181
+
182
+ const newChangeAddress = freshData.changeAddress;
183
+ if (!(newChangeAddress instanceof Error)) {
184
+ setChangeAddress((prevValue) =>
185
+ prevValue === newChangeAddress ? prevValue : newChangeAddress,
186
+ );
187
+ }
179
188
  });
180
189
  } catch (e) {
181
190
  setErrorSyncing(true);
@@ -212,6 +221,7 @@ export const useWalletObserverState = <
212
221
  isPending,
213
222
  isReadOnlyMode,
214
223
  network,
224
+ changeAddress,
215
225
  setActiveWallet,
216
226
  setAdaBalance,
217
227
  setBalance,
@@ -224,6 +234,7 @@ export const useWalletObserverState = <
224
234
  setUnusedAddresses,
225
235
  setUsedAddresses,
226
236
  setUtxos,
237
+ setChangeAddress,
227
238
  switching,
228
239
  syncWallet,
229
240
  unusedAddresses,
@@ -95,4 +95,5 @@ export type TUseWalletObserverState<
95
95
  | "setCollateral"
96
96
  | "setFeeAddress"
97
97
  | "setIsReadOnlyMode"
98
+ | "setChangeAddress"
98
99
  >;
@@ -36,6 +36,7 @@ export const useWalletObserver = <
36
36
  isPending: state.isPending,
37
37
  isReadOnlyMode: state.isReadOnlyMode,
38
38
  mainAddress: state.mainAddress,
39
+ changeAddress: state.changeAddress,
39
40
  network: state.network,
40
41
  observer: state.observer,
41
42
  stakeAddress: state.stakeAddress,
@@ -47,6 +48,7 @@ export const useWalletObserver = <
47
48
  willAutoConnect: state.willAutoConnect,
48
49
  }),
49
50
  [
51
+ state.changeAddress,
50
52
  state.activeWallet,
51
53
  state.adaBalance.amount,
52
54
  state.balance.size,