@sundaeswap/wallet-lite 0.0.93 → 0.0.95

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 +225 -175
  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 +31 -18
  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 +29 -2
  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 +9 -1
  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 +1 -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 +3 -1
  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 +1 -1
  39. package/src/@types/observer.ts +1 -0
  40. package/src/classes/WalletObserver.class.ts +38 -0
  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 +13 -2
  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.93",
3
+ "version": "0.0.95",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -102,4 +102,5 @@ export interface IWalletObserverSync<
102
102
  collateral?: Error | TransactionUnspentOutput[];
103
103
  network: Error | number;
104
104
  feeAddress?: Error | string;
105
+ changeAddress?: Error | string;
105
106
  }
@@ -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
  *
@@ -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
  };
@@ -2,8 +2,8 @@ import type { TransactionUnspentOutput } from "@cardano-sdk/core/dist/cjs/Serial
2
2
  import { AssetAmount, IAssetAmountMetadata } from "@sundaeswap/asset";
3
3
  import { useCallback, useEffect, useState, useTransition } from "react";
4
4
 
5
- import { IWalletObserverSync } from "src/@types/observer.js";
6
- import { ReadOnlyApi } from "src/classes/ReadOnlyApi.class.js";
5
+ import { IWalletObserverSync } from "../../../@types/observer.js";
6
+ import { ReadOnlyApi } from "../../../classes/ReadOnlyApi.class.js";
7
7
  import { WalletBalanceMap } from "../../../classes/WalletBalanceMap.class.js";
8
8
  import { WalletObserver } from "../../../classes/WalletObserver.class.js";
9
9
  import { ADA_ASSET_ID } from "../../../constants.js";
@@ -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,