@sundaeswap/wallet-lite 0.0.55 → 0.0.57

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 (46) hide show
  1. package/dist/cjs/@types/observer.js.map +1 -1
  2. package/dist/cjs/classes/WalletObserver.class.js +27 -35
  3. package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
  4. package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
  5. package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  6. package/dist/cjs/react-components/hooks/useAvailableExtensions.js +51 -59
  7. package/dist/cjs/react-components/hooks/useAvailableExtensions.js.map +1 -1
  8. package/dist/cjs/react-components/hooks/useWalletHandles.js +7 -10
  9. package/dist/cjs/react-components/hooks/useWalletHandles.js.map +1 -1
  10. package/dist/cjs/utils/getLibs.js +26 -1
  11. package/dist/cjs/utils/getLibs.js.map +1 -1
  12. package/dist/esm/@types/observer.js.map +1 -1
  13. package/dist/esm/classes/WalletObserver.class.js +4 -12
  14. package/dist/esm/classes/WalletObserver.class.js.map +1 -1
  15. package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
  16. package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  17. package/dist/esm/react-components/hooks/useAvailableExtensions.js +39 -35
  18. package/dist/esm/react-components/hooks/useAvailableExtensions.js.map +1 -1
  19. package/dist/esm/react-components/hooks/useWalletHandles.js +3 -2
  20. package/dist/esm/react-components/hooks/useWalletHandles.js.map +1 -1
  21. package/dist/esm/utils/getLibs.js +10 -0
  22. package/dist/esm/utils/getLibs.js.map +1 -1
  23. package/dist/types/@types/observer.d.ts +3 -7
  24. package/dist/types/@types/observer.d.ts.map +1 -1
  25. package/dist/types/classes/WalletObserver.class.d.ts +5 -12
  26. package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
  27. package/dist/types/react-components/WalletObserverProvider/WalletObserverProvider.d.ts.map +1 -1
  28. package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts +3 -4
  29. package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts.map +1 -1
  30. package/dist/types/react-components/hooks/useAvailableExtensions.d.ts +3 -3
  31. package/dist/types/react-components/hooks/useAvailableExtensions.d.ts.map +1 -1
  32. package/dist/types/react-components/hooks/useWalletHandles.d.ts.map +1 -1
  33. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  34. package/dist/types/utils/getLibs.d.ts +5 -0
  35. package/dist/types/utils/getLibs.d.ts.map +1 -1
  36. package/package.json +1 -1
  37. package/src/@types/observer.ts +4 -21
  38. package/src/classes/WalletObserver.class.ts +12 -29
  39. package/src/classes/__tests__/WalletObserver.test.ts +9 -22
  40. package/src/react-components/WalletObserverProvider/WalletObserverProvider.tsx +3 -5
  41. package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +2 -4
  42. package/src/react-components/__tests__/__snapshots__/RenderWalletHandles.test.tsx.snap +0 -2
  43. package/src/react-components/__tests__/hooks/useAvailableExtensions.test.tsx +8 -6
  44. package/src/react-components/hooks/useAvailableExtensions.ts +52 -42
  45. package/src/react-components/hooks/useWalletHandles.ts +4 -6
  46. package/src/utils/getLibs.ts +11 -0
@@ -4,4 +4,9 @@ export declare const getCardanoCore: () => Promise<{
4
4
  }>;
5
5
  export declare const getCardanoUtil: () => Promise<(<T>(value: string, length?: number | undefined) => T)>;
6
6
  export declare const getPeerConnect: () => Promise<typeof import("@fabianbormann/cardano-peer-connect").DAppPeerConnect>;
7
+ export declare const getHandleLib: () => Promise<{
8
+ HandleClient: typeof import("@koralabs/adahandle-sdk").default;
9
+ HandleClientContext: typeof import("@koralabs/adahandle-sdk").HandleClientContext;
10
+ KoraLabsProvider: typeof import("@koralabs/adahandle-sdk").KoraLabsProvider;
11
+ }>;
7
12
  //# sourceMappingURL=getLibs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getLibs.d.ts","sourceRoot":"","sources":["../../../src/utils/getLibs.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;EAO1B,CAAC;AAEF,eAAO,MAAM,cAAc,uEAI1B,CAAC;AAEF,eAAO,MAAM,cAAc,qFAI1B,CAAC"}
1
+ {"version":3,"file":"getLibs.d.ts","sourceRoot":"","sources":["../../../src/utils/getLibs.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;EAO1B,CAAC;AAEF,eAAO,MAAM,cAAc,uEAI1B,CAAC;AAEF,eAAO,MAAM,cAAc,qFAI1B,CAAC;AAEF,eAAO,MAAM,YAAY;;;;EASxB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sundaeswap/wallet-lite",
3
- "version": "0.0.55",
3
+ "version": "0.0.57",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -8,24 +8,6 @@ import { WalletAssetMap } from "../classes/WalletAssetMap.class.js";
8
8
  import { WalletBalanceMap } from "../classes/WalletBalanceMap.class.js";
9
9
  import { isAdaAsset, normalizeAssetIdWithDot } from "../utils/assets.js";
10
10
 
11
- /**
12
- * A list of support CIP-30 wallet extensions in the browser.
13
- */
14
- export type TSupportedWalletExtensions =
15
- | "nami"
16
- | "eternl"
17
- | "typhoncip30"
18
- | "ccvault"
19
- | "typhon"
20
- | "yoroi"
21
- | "flint"
22
- | "gerowallet"
23
- | "cardwallet"
24
- | "nufi"
25
- | "begin"
26
- | "lace"
27
- | "sorbet";
28
-
29
11
  /**
30
12
  * Interface to describe window extension.
31
13
  */
@@ -34,14 +16,15 @@ export interface IWindowCip30Extension {
34
16
  enable: () => Promise<Cip30WalletApi>;
35
17
  icon: string;
36
18
  isEnabled: () => Promise<boolean>;
37
- name: TSupportedWalletExtensions;
19
+ name: string;
38
20
  }
39
21
 
40
22
  /**
41
23
  * Interface to describe our expected window configuration.
42
24
  */
43
25
  export type TWindowCardano = {
44
- [K in TSupportedWalletExtensions]?: IWindowCip30Extension;
26
+ // eslint-disable-next-line
27
+ [key: string]: any;
45
28
  };
46
29
 
47
30
  /**
@@ -93,7 +76,7 @@ export type TAssetAmountMap<
93
76
  * data located in local storage.
94
77
  */
95
78
  export interface IWalletObserverSeed {
96
- activeWallet: TSupportedWalletExtensions;
79
+ activeWallet: string;
97
80
  mainAddress: string;
98
81
  }
99
82
 
@@ -14,7 +14,6 @@ import type {
14
14
  IWalletObserverSeed,
15
15
  IWalletObserverSync,
16
16
  TMetadataResolverFunc,
17
- TSupportedWalletExtensions,
18
17
  TWalletObserverOptions,
19
18
  } from "../@types/observer.js";
20
19
  import { isAdaAsset, normalizeAssetIdWithDot } from "../utils/assets.js";
@@ -48,20 +47,12 @@ export class WalletObserver<
48
47
  static ADA_ASSET_ID = "ada.lovelace";
49
48
  public network: number = 0;
50
49
  public api?: Cip30WalletApi;
51
- public activeWallet?: TSupportedWalletExtensions;
50
+ public activeWallet?: string;
52
51
  public utils?: WalletObserverUtils;
53
52
  public peerConnectInstance?: import("@fabianbormann/cardano-peer-connect").DAppPeerConnect;
54
53
 
55
54
  private _performingSync: boolean = false;
56
55
  private _options: IResolvedWalletObserverOptions<AssetMetadata>;
57
- private _supportedExtensions: TSupportedWalletExtensions[] = [
58
- "eternl",
59
- "lace",
60
- "typhon",
61
- "sorbet",
62
- "flint",
63
- "nami",
64
- ];
65
56
 
66
57
  // Caching
67
58
  private _cachedMetadata: Map<string, AssetMetadata> = new Map();
@@ -92,7 +83,7 @@ export class WalletObserver<
92
83
  },
93
84
  onApiInject: (name, address) => {
94
85
  options?.peerConnectArgs?.onApiInject?.(name, address);
95
- this.connectWallet(name as TSupportedWalletExtensions);
86
+ this.connectWallet(name);
96
87
  },
97
88
  verifyConnection(walletInfo, callback) {
98
89
  return callback(true, walletInfo.requestAutoconnect ?? true);
@@ -217,11 +208,11 @@ export class WalletObserver<
217
208
  * Synchronizes the API with the wallet. This is useful if the account has changed,
218
209
  * but the underlying intent has not.
219
210
  *
220
- * @param {TSupportedWalletExtensions} [activeWallet] - The wallet to sync with.
211
+ * @param {string} [activeWallet] - The wallet to sync with.
221
212
  * @returns {Promise<Cip30WalletApi | undefined>} - A promise that resolves to the API instance.
222
213
  */
223
214
  syncApi = async (
224
- activeWallet?: TSupportedWalletExtensions,
215
+ activeWallet?: string,
225
216
  ): Promise<Cip30WalletApi | undefined> => {
226
217
  if (!activeWallet && !this.activeWallet) {
227
218
  throw new Error(
@@ -229,8 +220,7 @@ export class WalletObserver<
229
220
  );
230
221
  }
231
222
 
232
- const selectedWallet =
233
- activeWallet || (this.activeWallet as TSupportedWalletExtensions);
223
+ const selectedWallet = (activeWallet || this.activeWallet) as string;
234
224
 
235
225
  let attempts = 0;
236
226
  let shouldContinue = true;
@@ -243,7 +233,8 @@ export class WalletObserver<
243
233
  }
244
234
 
245
235
  try {
246
- const api = await window.cardano?.[selectedWallet]?.enable();
236
+ const cardano = window?.cardano || window?.parent?.cardano;
237
+ const api = await cardano?.[selectedWallet]?.enable();
247
238
 
248
239
  if (!api) {
249
240
  throw Error;
@@ -254,7 +245,10 @@ export class WalletObserver<
254
245
  shouldContinue = false;
255
246
  } catch (e) {
256
247
  if (
257
- (e as Error)?.message === "user canceled connection" ||
248
+ [
249
+ "user canceled connection",
250
+ "User declined to sign the data.",
251
+ ].includes((e as Error)?.message) ||
258
252
  (e as ApiError)?.code === APIErrorCode.Refused
259
253
  ) {
260
254
  shouldContinue = false;
@@ -286,9 +280,7 @@ export class WalletObserver<
286
280
  * @param {string} extension The name of the extension to enable.
287
281
  * @return {Promise<void>}
288
282
  */
289
- connectWallet = async (
290
- extension: TSupportedWalletExtensions,
291
- ): Promise<void> => {
283
+ connectWallet = async (extension: string): Promise<void> => {
292
284
  const start = performance.now();
293
285
  this.dispatch(EWalletObserverEvents.CONNECT_WALLET_START);
294
286
 
@@ -366,15 +358,6 @@ export class WalletObserver<
366
358
  getCachedAssetMetadata = (): Map<string, AssetMetadata> =>
367
359
  this._cachedMetadata;
368
360
 
369
- /**
370
- * Helper function to retrieve a list of supported wallet extensions.
371
- *
372
- * @returns {keyof TSupportedWalletExtensions[] | undefined}
373
- */
374
- getSupportedExtensions = (): TSupportedWalletExtensions[] => {
375
- return this._supportedExtensions;
376
- };
377
-
378
361
  /**
379
362
  * Helper function to restore the class instance to its initial state.
380
363
  *
@@ -59,14 +59,6 @@ describe("WalletObserver", async () => {
59
59
  expect(observer.activeWallet).toBeUndefined();
60
60
  expect(observer.network).toEqual(0);
61
61
  expect(observer.api).toBeUndefined();
62
- expect(observer.getSupportedExtensions()).toEqual([
63
- "eternl",
64
- "lace",
65
- "typhon",
66
- "sorbet",
67
- "flint",
68
- "nami",
69
- ]);
70
62
  expect(observer.peerConnectInstance).toBeUndefined();
71
63
  expect(observer.getOptions()).toMatchObject({
72
64
  metadataResolver: expect.anything(),
@@ -91,13 +83,13 @@ describe("WalletObserver", async () => {
91
83
  });
92
84
 
93
85
  test("with parameters", () => {
94
- const handler: TMetadataResolverFunc<IAssetAmountMetadata> = async (
95
- ids: string[],
96
- normalize,
97
- ) => {
98
- const metadata = ids.map((id) => ({ decimals: 6, assetId: id }));
86
+ const handler: TMetadataResolverFunc<IAssetAmountMetadata> = async ({
87
+ assetIds,
88
+ normalizeAssetId,
89
+ }) => {
90
+ const metadata = assetIds.map((id) => ({ decimals: 6, assetId: id }));
99
91
  const map = new Map<string, IAssetAmountMetadata>();
100
- metadata.forEach((m) => map.set(normalize(m.assetId), m));
92
+ metadata.forEach((m) => map.set(normalizeAssetId(m.assetId), m));
101
93
  return map;
102
94
  };
103
95
  const observer = new WalletObserver({
@@ -117,14 +109,6 @@ describe("WalletObserver", async () => {
117
109
  expect(observer.activeWallet).toBeUndefined();
118
110
  expect(observer.network).toEqual(0);
119
111
  expect(observer.api).toBeUndefined();
120
- expect(observer.getSupportedExtensions()).toEqual([
121
- "eternl",
122
- "lace",
123
- "typhon",
124
- "sorbet",
125
- "flint",
126
- "nami",
127
- ]);
128
112
  expect(observer.getOptions()).toMatchObject({
129
113
  metadataResolver: handler,
130
114
  persistence: true,
@@ -297,6 +281,9 @@ describe("WalletObserver", async () => {
297
281
 
298
282
  data.instance.shutdownServer();
299
283
  expect(spiedOnDisconnect).toHaveBeenCalled();
284
+
285
+ // Restore window.
286
+ delete window.cardano?.["eternl-p2p"];
300
287
  });
301
288
  });
302
289
  });
@@ -1,6 +1,5 @@
1
1
  import { FC, PropsWithChildren, useEffect, useMemo } from "react";
2
2
 
3
- import { TSupportedWalletExtensions } from "../../@types/observer.js";
4
3
  import { WalletObserver } from "../../classes/WalletObserver.class.js";
5
4
  import {
6
5
  IWalletObserverProviderProps,
@@ -71,10 +70,9 @@ const WalletObserverProvider: FC<
71
70
  return;
72
71
  }
73
72
 
74
- const wallet: TSupportedWalletExtensions | null =
75
- window.localStorage.getItem(
76
- WalletObserver.PERSISTENCE_CACHE_KEY,
77
- ) as TSupportedWalletExtensions;
73
+ const wallet = window.localStorage.getItem(
74
+ WalletObserver.PERSISTENCE_CACHE_KEY,
75
+ );
78
76
 
79
77
  if (wallet && observerRef.current?.getOptions()?.persistence) {
80
78
  state.connectWallet(JSON.parse(wallet).activeWallet);
@@ -2,7 +2,6 @@ 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 { TSupportedWalletExtensions } from "../../../@types/observer.js";
6
5
  import { WalletBalanceMap } from "../../../classes/WalletBalanceMap.class.js";
7
6
  import { WalletObserver } from "../../../classes/WalletObserver.class.js";
8
7
  import { areAssetMapsEqual } from "../../../utils/comparisons.js";
@@ -18,8 +17,7 @@ export const useWalletObserverState = <
18
17
  >(
19
18
  observer: WalletObserver<AssetMetadata>,
20
19
  ) => {
21
- const [activeWallet, setActiveWallet] =
22
- useState<TSupportedWalletExtensions>();
20
+ const [activeWallet, setActiveWallet] = useState<string>();
23
21
  const [adaBalance, setAdaBalance] = useState<AssetAmount<AssetMetadata>>(
24
22
  new AssetAmount<AssetMetadata>(0n),
25
23
  );
@@ -134,7 +132,7 @@ export const useWalletObserverState = <
134
132
  }, [observer, disconnect]);
135
133
 
136
134
  const connectWallet = useCallback(
137
- async (wallet: TSupportedWalletExtensions) => {
135
+ async (wallet: string) => {
138
136
  if (observer.hasActiveConnection() && wallet !== observer.activeWallet) {
139
137
  setSwitching(() => true);
140
138
  }
@@ -3,5 +3,3 @@
3
3
  exports[`RenderWalletHandles should successfully update state with handle metadata 1`] = `"<pre>falsefalse<button data-testid="connect-with-handles"></button></pre>"`;
4
4
 
5
5
  exports[`RenderWalletHandles should successfully update state with handle metadata 2`] = `"<pre>eternltruefalse00c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0000c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d000c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00e855cd3dbc30bad8ac8fffbed87d36325b407a8e934b1507725fcd80121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00129ee829b3cea5762f0c1077db667390a9ee007825a0ed7b1150d35d121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00d98f028bd372ed61079c6ed5083e3a977d69ab5d0b17b25bc87343dd121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00c888866b693e1ae8cb237351ba4bdc7e16882a1dc4a53d4de0537e56121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0082d061e45a1ff5b30de61d3d1137e6ebdd44d6056be88a44d547b5a3121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,009de2d448e439c970d94bf483f8bcc0eb47040d3f293e096a580d3aca121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00da3f1060013b6e9be44cd2890a6f20f524d2071d22410a5264de115b121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00d1c9c1d95ce5ee7e666cc83b2b56dd25d82f0c91b5c34175fd8448b6121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0002659dc406e1d51c2695bc23962b30487d3ceb995beb13b698509c6f121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00c46c44a29807de8fa23693b3da1c1976ebe8858f74199ca840b557ee121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,005d48e3d5655bf8a05eda49ea6683ccaf5351d505c38ae7ad43cbd4ab121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0095f329c349c57bd4bcf021c8a96e68eca384627fee9ebea56ff8167d121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0081378bb3d576f8dce84a9bb6d6761530ef8088f335d231bd98eaedc3121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0070fc9c5a5d80650a87dce6dc4ea9a066f3185352e89f946165995593121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,008063fa1c1fb41cafd24f484e2a7d0014202ffef9407af05bf4279889121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00134fd13220198b9e8d0523cec39465b2bf3400fdeca305bf88fe0bb2121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00fccd5b37e433d56779cf1beb43440415eaca903ca92c61de2bbf0c72121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,003c0b43dcb3cee0988607c478f11c5c657cb31ebeafe495d8eca5b4ee121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,002e0f369f4fabf5f314fd2dbd34e7d6a03d0336b8d974f2208c75bc34121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00d38956d5d8c3e996880298b8e1534679e285f93475cf6aa3256205c7121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00486dede781535d8ff49d9a0dadeb5c0d38ef150f6fc80180921ebe85121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,002ea947a2d3c0c95ca5124f6b61b83a5f4e0b71223f863be838831168121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00b7a6f578ed78826a3c32cadf5ede889ee350e43c4d11f8f9b94cb03e121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00e1a7fdf8d8010e238948dec7150e84fd158acdeaa76c200d8a4b1f63121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00af0a05d243de50100af100863c88b4f6524fa4ee86a84127cf15b82b121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0022de41ad5b3628ecd8686bce555846bedde16ea7881bd63abf9198e2121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0075fcbf24479728322e5f128c84c15c27aeea10196f56d1ff44d40b94121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00be01633e07d001fff611b3d39ac3ca89127acecef79aabb812cea125121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,005b819971068bae01c3d411f2b5b8a12331df4d9fbeb899c0a59afb9e121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0018edec9fc995f6ea029f87b6142efdd4a132cbe4f3c14cdad54e1362121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00ce805857db7601ac7af226290a0f0bee4608736fea251b8813359805121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,008911a9404ee35265e5b39ca1e38a5d64a67384307bc47ea5b1c2f1f3121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00b80d7dfef9f0e989a62aabdbc9aec4703bc38dcc0363bcb902aad20f121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00a3aabe29cf0d4cf0acd9c0c4231e69ae145e426fd40d9bc089117416121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,001f64ff5164c16467e229f4305e5cd05cea85f407d68ba5c8f33f6d5d121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00c1ce344ee9f695a9bfa4230254c0008aa62cf09f5f4444f6ece352d8121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00412be6abc6a8d58aa914bed006e77c0e8e6870a5405a0a00db9119b0121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00ebc9713be7aa719a00d2be641418b59747b8ba846e1687253d6667b5121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00b5c852e07c831c968ae7e0388bd0ed591097238ca3a3742367facf0f121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00e10a1ec68fe34887f87c4badc81f93c2d69999614683cf05c8e97069121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0066de96d2a1c75f99185f4d5a39e49adccf18515cc512c5a7392b98cc121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0032c425519672bec473a8971a79a2758356ad24ee99353c7020fd5cac121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0036e19cee7f33f141d34fbb899c27a68900ac6593f082edfbe6fc3fe5121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,001280d6db873a83fa7908f1416acbbc189624b392be7935ba787f3cb9121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00ce1657bbdc8cceabecad61bb8bff3f9865d7c46170c6555c9e406aa0121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00de2d51517b76fcb141908bfa07a93f1bf93b92124838d2ed24022819121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00e35880324d3302478a8c48cc9c71b81710b50f8fb444a5a56462e4b5121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00eb4b163aa81b319275f796b7b19b50c945604f47f807a5a5b5acd19a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0016f85346dc9b1efccaa9a69e357b49d7a25c03936ea5d05ede3cfca0121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,004746a8792a9eb11769d7593eeb4d0bf1be04d68c00ef50d2752c4d02121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00f0ccab792b8e74acca2e08533b805afc59a38671c3c68d337f16c185121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0061831490182c6c68168cddf4c995dca27c8b8b144b2643a010f938bc121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,001a150c13e1b5a2c6f5aa49e53ce9fc20e06d844ff162fcbd691624cd121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00631b6ceb11ddd4afc4ed3d098f978ff0bfbceda084f263dfebca0e9b121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00f282664fba7a04a7e2c3e782e6a23153ea5384b4c680d9dc1a98959b121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00e594ceb9f74bd9fb58473f225f443dbd7be9ad76ab1c45925fe1d8ee121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00f9369f45d0ae6a0ac710a02cf92277c091ef548e493e1fccb8b149e3121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,007b1da5a2d2cdac17fba68066eb5cb135776f0badd0ec77790115f34d121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00dfcdec7a63f0e2422e938cdf3df012a9eefeccb0c835e56419fe345c121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,009da13e2ed25bdc1df37e3eef351aaee057ac926cedd1bb1ce02122d4121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0033b94204fa0c33953e26834572de06f89496dd9b910c98d622e21612121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,60c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a,60e855cd3dbc30bad8ac8fffbed87d36325b407a8e934b1507725fcd80,60129ee829b3cea5762f0c1077db667390a9ee007825a0ed7b1150d35d,60d98f028bd372ed61079c6ed5083e3a977d69ab5d0b17b25bc87343dd,60c888866b693e1ae8cb237351ba4bdc7e16882a1dc4a53d4de0537e56,6082d061e45a1ff5b30de61d3d1137e6ebdd44d6056be88a44d547b5a3,609de2d448e439c970d94bf483f8bcc0eb47040d3f293e096a580d3aca,60da3f1060013b6e9be44cd2890a6f20f524d2071d22410a5264de115b,60d1c9c1d95ce5ee7e666cc83b2b56dd25d82f0c91b5c34175fd8448b6,6002659dc406e1d51c2695bc23962b30487d3ceb995beb13b698509c6f,60c46c44a29807de8fa23693b3da1c1976ebe8858f74199ca840b557ee,605d48e3d5655bf8a05eda49ea6683ccaf5351d505c38ae7ad43cbd4ab,6095f329c349c57bd4bcf021c8a96e68eca384627fee9ebea56ff8167d,6081378bb3d576f8dce84a9bb6d6761530ef8088f335d231bd98eaedc3,6070fc9c5a5d80650a87dce6dc4ea9a066f3185352e89f946165995593,608063fa1c1fb41cafd24f484e2a7d0014202ffef9407af05bf4279889,60134fd13220198b9e8d0523cec39465b2bf3400fdeca305bf88fe0bb2,60fccd5b37e433d56779cf1beb43440415eaca903ca92c61de2bbf0c72,603c0b43dcb3cee0988607c478f11c5c657cb31ebeafe495d8eca5b4ee,602e0f369f4fabf5f314fd2dbd34e7d6a03d0336b8d974f2208c75bc34,60d38956d5d8c3e996880298b8e1534679e285f93475cf6aa3256205c7,60486dede781535d8ff49d9a0dadeb5c0d38ef150f6fc80180921ebe85,602ea947a2d3c0c95ca5124f6b61b83a5f4e0b71223f863be838831168,60b7a6f578ed78826a3c32cadf5ede889ee350e43c4d11f8f9b94cb03e,60e1a7fdf8d8010e238948dec7150e84fd158acdeaa76c200d8a4b1f63,60af0a05d243de50100af100863c88b4f6524fa4ee86a84127cf15b82b,6022de41ad5b3628ecd8686bce555846bedde16ea7881bd63abf9198e2,6075fcbf24479728322e5f128c84c15c27aeea10196f56d1ff44d40b94,60be01633e07d001fff611b3d39ac3ca89127acecef79aabb812cea125,605b819971068bae01c3d411f2b5b8a12331df4d9fbeb899c0a59afb9e,6018edec9fc995f6ea029f87b6142efdd4a132cbe4f3c14cdad54e1362,60ce805857db7601ac7af226290a0f0bee4608736fea251b8813359805,608911a9404ee35265e5b39ca1e38a5d64a67384307bc47ea5b1c2f1f3,60b80d7dfef9f0e989a62aabdbc9aec4703bc38dcc0363bcb902aad20f,60a3aabe29cf0d4cf0acd9c0c4231e69ae145e426fd40d9bc089117416,601f64ff5164c16467e229f4305e5cd05cea85f407d68ba5c8f33f6d5d,60c1ce344ee9f695a9bfa4230254c0008aa62cf09f5f4444f6ece352d8,60412be6abc6a8d58aa914bed006e77c0e8e6870a5405a0a00db9119b0,60ebc9713be7aa719a00d2be641418b59747b8ba846e1687253d6667b5,60b5c852e07c831c968ae7e0388bd0ed591097238ca3a3742367facf0f,60e10a1ec68fe34887f87c4badc81f93c2d69999614683cf05c8e97069,6066de96d2a1c75f99185f4d5a39e49adccf18515cc512c5a7392b98cc,6032c425519672bec473a8971a79a2758356ad24ee99353c7020fd5cac,6036e19cee7f33f141d34fbb899c27a68900ac6593f082edfbe6fc3fe5,601280d6db873a83fa7908f1416acbbc189624b392be7935ba787f3cb9,60ce1657bbdc8cceabecad61bb8bff3f9865d7c46170c6555c9e406aa0,60de2d51517b76fcb141908bfa07a93f1bf93b92124838d2ed24022819,60e35880324d3302478a8c48cc9c71b81710b50f8fb444a5a56462e4b5,60eb4b163aa81b319275f796b7b19b50c945604f47f807a5a5b5acd19a,6016f85346dc9b1efccaa9a69e357b49d7a25c03936ea5d05ede3cfca0,604746a8792a9eb11769d7593eeb4d0bf1be04d68c00ef50d2752c4d02,60f0ccab792b8e74acca2e08533b805afc59a38671c3c68d337f16c185,6061831490182c6c68168cddf4c995dca27c8b8b144b2643a010f938bc,601a150c13e1b5a2c6f5aa49e53ce9fc20e06d844ff162fcbd691624cd,60631b6ceb11ddd4afc4ed3d098f978ff0bfbceda084f263dfebca0e9b,60f282664fba7a04a7e2c3e782e6a23153ea5384b4c680d9dc1a98959b,60e594ceb9f74bd9fb58473f225f443dbd7be9ad76ab1c45925fe1d8ee,60f9369f45d0ae6a0ac710a02cf92277c091ef548e493e1fccb8b149e3,607b1da5a2d2cdac17fba68066eb5cb135776f0badd0ec77790115f34d,60dfcdec7a63f0e2422e938cdf3df012a9eefeccb0c835e56419fe345c,609da13e2ed25bdc1df37e3eef351aaee057ac926cedd1bb1ce02122d4,6033b94204fa0c33953e26834572de06f89496dd9b910c98d622e21612<p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6976","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.666171","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.666472","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.68756773","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6d696e69","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.72656b74","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.77656233","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6269703339","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.636f2d6f70","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.656964616e","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6761746573","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.74616e7961","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.647275646765","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.66696e6c6579","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6b6f65706b65","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6d616b657273","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6d6f6465726e","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.73796e746178","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.7a656b696168","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.636176656d616e","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.64697372757074","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.656e6372797074","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.68757362616e64","decimals":0}</p><p data-testid="calvin">{"hex":"6d696e696d616c","name":"calvin","image":"ipfs://zdj7We5kz4op3HNodbzfRt14AqUJdygK2gHosAnbaDx7fGck2","standard_image":"ipfs://zb2rhenCxDXo56r7AwHsHuSBmK9x63diFzwxtsL6PsQnM3uUs","holder":"stake1uyyyruv2y289xm7laay8a9sgrn95q627q3q4v3z4eagjdrs4j0yqu","holder_type":"wallet","length":6,"og_number":0,"rarity":"common","utxo":"3911b59931d3f5e938bef6d773d4b0d6a48fab96d63c658aa4b240a50dcba679#1","characters":"letters","numeric_modifiers":"","default_in_wallet":"cal","pfp_image":"","bg_image":"ipfs://bafybeicuvareow6exu2ti6xtsxkzpcpsc7dj54q7oaratjm4uaqgd77ham","bg_asset":"c705d66dd826fa750a3fcc0a74c27fdb20db2ed18ad569232d7123ad001bc2804772616469656e7420536861706573202d2043616765","resolved_addresses":{"ada":"addr1qyzpu6dy0tp926q72qdsxmu3ydqg9qyavs7tanfcpudv24sgg8cc5g5w2dhalm6g06tqs8xtgp54upzp2ez9tn63y68qn5st78"},"created_slot_number":103834977,"updated_slot_number":115852137,"has_datum":false,"svg_version":"2.4.0","image_hash":"0291cbb9f046a27bb067b4310c6eab6ae8e755a49a3b7e1ae87314b569ab6548","standard_image_hash":"78e558e2c32e3de4e95cefad00857a98665cd323bf11bdd4b9b48a707de61910","version":1,"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6d696e696d616c","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.70726f66696c65","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.70757273756974","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.736176696e6773","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.616c64657262696e","decimals":0}</p><p data-testid="pi">{"hex":"62726577636c7562","name":"pi","image":"ipfs://QmYKjoA9fsLaGnz92BJbC5kHFsSKsijAdmowQqbmzjfWBT","standard_image":"ipfs://QmYKjoA9fsLaGnz92BJbC5kHFsSKsijAdmowQqbmzjfWBT","holder":"stake1u8q07kgyuhffc8v9auvn4jlqcm4hehdu7wsd9fvna95nr3qynl7dk","holder_type":"wallet","length":2,"og_number":0,"rarity":"ultra_rare","utxo":"8ae62ab3631124197cdd4faac83428c404e529f07db510899c68a373a22fa77c#1","characters":"letters","numeric_modifiers":"","default_in_wallet":"pi","pfp_image":"","bg_image":"","resolved_addresses":{"ada":"addr1qyyrwcs73wk9cp9e7lxpn86d2n4wxgyduxqxmmj6psmjejkqlavsfewjnswctmce8t97p3ht0nwmeuaq62je86tfx8zq6lh9kr"},"created_slot_number":55725690,"updated_slot_number":104951843,"has_datum":false,"svg_version":"","image_hash":"","standard_image_hash":"","version":0,"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.62726577636c7562","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6f726967696e616c","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.706c61793277696e","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.7072656d69657265","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.646179747261646572","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.63687269737469616e6e","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.706f7274666f6c696f31","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.706f7274666f6c696f32","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.706f7274666f6c696f33","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.73756666696369656e74","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.73757270726973656d65","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6f70706f7274756e697374","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.736f6c6f7072656e657572","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.737572766976616c697374","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.74686562726577636c7562","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6472756467657265706f7274","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.68617070796e657779656172","decimals":0}</p><button data-testid="connect-with-handles"></button></pre>"`;
6
-
7
- exports[`RenderWalletHandles should successfully update state with handle metadata 3`] = `"<pre>eternltruefalse00c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0000c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d000c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00e855cd3dbc30bad8ac8fffbed87d36325b407a8e934b1507725fcd80121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00129ee829b3cea5762f0c1077db667390a9ee007825a0ed7b1150d35d121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00d98f028bd372ed61079c6ed5083e3a977d69ab5d0b17b25bc87343dd121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00c888866b693e1ae8cb237351ba4bdc7e16882a1dc4a53d4de0537e56121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0082d061e45a1ff5b30de61d3d1137e6ebdd44d6056be88a44d547b5a3121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,009de2d448e439c970d94bf483f8bcc0eb47040d3f293e096a580d3aca121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00da3f1060013b6e9be44cd2890a6f20f524d2071d22410a5264de115b121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00d1c9c1d95ce5ee7e666cc83b2b56dd25d82f0c91b5c34175fd8448b6121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0002659dc406e1d51c2695bc23962b30487d3ceb995beb13b698509c6f121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00c46c44a29807de8fa23693b3da1c1976ebe8858f74199ca840b557ee121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,005d48e3d5655bf8a05eda49ea6683ccaf5351d505c38ae7ad43cbd4ab121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0095f329c349c57bd4bcf021c8a96e68eca384627fee9ebea56ff8167d121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0081378bb3d576f8dce84a9bb6d6761530ef8088f335d231bd98eaedc3121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0070fc9c5a5d80650a87dce6dc4ea9a066f3185352e89f946165995593121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,008063fa1c1fb41cafd24f484e2a7d0014202ffef9407af05bf4279889121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00134fd13220198b9e8d0523cec39465b2bf3400fdeca305bf88fe0bb2121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00fccd5b37e433d56779cf1beb43440415eaca903ca92c61de2bbf0c72121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,003c0b43dcb3cee0988607c478f11c5c657cb31ebeafe495d8eca5b4ee121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,002e0f369f4fabf5f314fd2dbd34e7d6a03d0336b8d974f2208c75bc34121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00d38956d5d8c3e996880298b8e1534679e285f93475cf6aa3256205c7121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00486dede781535d8ff49d9a0dadeb5c0d38ef150f6fc80180921ebe85121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,002ea947a2d3c0c95ca5124f6b61b83a5f4e0b71223f863be838831168121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00b7a6f578ed78826a3c32cadf5ede889ee350e43c4d11f8f9b94cb03e121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00e1a7fdf8d8010e238948dec7150e84fd158acdeaa76c200d8a4b1f63121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00af0a05d243de50100af100863c88b4f6524fa4ee86a84127cf15b82b121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0022de41ad5b3628ecd8686bce555846bedde16ea7881bd63abf9198e2121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0075fcbf24479728322e5f128c84c15c27aeea10196f56d1ff44d40b94121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00be01633e07d001fff611b3d39ac3ca89127acecef79aabb812cea125121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,005b819971068bae01c3d411f2b5b8a12331df4d9fbeb899c0a59afb9e121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0018edec9fc995f6ea029f87b6142efdd4a132cbe4f3c14cdad54e1362121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00ce805857db7601ac7af226290a0f0bee4608736fea251b8813359805121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,008911a9404ee35265e5b39ca1e38a5d64a67384307bc47ea5b1c2f1f3121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00b80d7dfef9f0e989a62aabdbc9aec4703bc38dcc0363bcb902aad20f121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00a3aabe29cf0d4cf0acd9c0c4231e69ae145e426fd40d9bc089117416121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,001f64ff5164c16467e229f4305e5cd05cea85f407d68ba5c8f33f6d5d121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00c1ce344ee9f695a9bfa4230254c0008aa62cf09f5f4444f6ece352d8121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00412be6abc6a8d58aa914bed006e77c0e8e6870a5405a0a00db9119b0121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00ebc9713be7aa719a00d2be641418b59747b8ba846e1687253d6667b5121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00b5c852e07c831c968ae7e0388bd0ed591097238ca3a3742367facf0f121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00e10a1ec68fe34887f87c4badc81f93c2d69999614683cf05c8e97069121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0066de96d2a1c75f99185f4d5a39e49adccf18515cc512c5a7392b98cc121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0032c425519672bec473a8971a79a2758356ad24ee99353c7020fd5cac121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0036e19cee7f33f141d34fbb899c27a68900ac6593f082edfbe6fc3fe5121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,001280d6db873a83fa7908f1416acbbc189624b392be7935ba787f3cb9121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00ce1657bbdc8cceabecad61bb8bff3f9865d7c46170c6555c9e406aa0121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00de2d51517b76fcb141908bfa07a93f1bf93b92124838d2ed24022819121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00e35880324d3302478a8c48cc9c71b81710b50f8fb444a5a56462e4b5121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00eb4b163aa81b319275f796b7b19b50c945604f47f807a5a5b5acd19a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0016f85346dc9b1efccaa9a69e357b49d7a25c03936ea5d05ede3cfca0121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,004746a8792a9eb11769d7593eeb4d0bf1be04d68c00ef50d2752c4d02121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00f0ccab792b8e74acca2e08533b805afc59a38671c3c68d337f16c185121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0061831490182c6c68168cddf4c995dca27c8b8b144b2643a010f938bc121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,001a150c13e1b5a2c6f5aa49e53ce9fc20e06d844ff162fcbd691624cd121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00631b6ceb11ddd4afc4ed3d098f978ff0bfbceda084f263dfebca0e9b121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00f282664fba7a04a7e2c3e782e6a23153ea5384b4c680d9dc1a98959b121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00e594ceb9f74bd9fb58473f225f443dbd7be9ad76ab1c45925fe1d8ee121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00f9369f45d0ae6a0ac710a02cf92277c091ef548e493e1fccb8b149e3121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,007b1da5a2d2cdac17fba68066eb5cb135776f0badd0ec77790115f34d121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,00dfcdec7a63f0e2422e938cdf3df012a9eefeccb0c835e56419fe345c121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,009da13e2ed25bdc1df37e3eef351aaee057ac926cedd1bb1ce02122d4121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,0033b94204fa0c33953e26834572de06f89496dd9b910c98d622e21612121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0,60c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a,60e855cd3dbc30bad8ac8fffbed87d36325b407a8e934b1507725fcd80,60129ee829b3cea5762f0c1077db667390a9ee007825a0ed7b1150d35d,60d98f028bd372ed61079c6ed5083e3a977d69ab5d0b17b25bc87343dd,60c888866b693e1ae8cb237351ba4bdc7e16882a1dc4a53d4de0537e56,6082d061e45a1ff5b30de61d3d1137e6ebdd44d6056be88a44d547b5a3,609de2d448e439c970d94bf483f8bcc0eb47040d3f293e096a580d3aca,60da3f1060013b6e9be44cd2890a6f20f524d2071d22410a5264de115b,60d1c9c1d95ce5ee7e666cc83b2b56dd25d82f0c91b5c34175fd8448b6,6002659dc406e1d51c2695bc23962b30487d3ceb995beb13b698509c6f,60c46c44a29807de8fa23693b3da1c1976ebe8858f74199ca840b557ee,605d48e3d5655bf8a05eda49ea6683ccaf5351d505c38ae7ad43cbd4ab,6095f329c349c57bd4bcf021c8a96e68eca384627fee9ebea56ff8167d,6081378bb3d576f8dce84a9bb6d6761530ef8088f335d231bd98eaedc3,6070fc9c5a5d80650a87dce6dc4ea9a066f3185352e89f946165995593,608063fa1c1fb41cafd24f484e2a7d0014202ffef9407af05bf4279889,60134fd13220198b9e8d0523cec39465b2bf3400fdeca305bf88fe0bb2,60fccd5b37e433d56779cf1beb43440415eaca903ca92c61de2bbf0c72,603c0b43dcb3cee0988607c478f11c5c657cb31ebeafe495d8eca5b4ee,602e0f369f4fabf5f314fd2dbd34e7d6a03d0336b8d974f2208c75bc34,60d38956d5d8c3e996880298b8e1534679e285f93475cf6aa3256205c7,60486dede781535d8ff49d9a0dadeb5c0d38ef150f6fc80180921ebe85,602ea947a2d3c0c95ca5124f6b61b83a5f4e0b71223f863be838831168,60b7a6f578ed78826a3c32cadf5ede889ee350e43c4d11f8f9b94cb03e,60e1a7fdf8d8010e238948dec7150e84fd158acdeaa76c200d8a4b1f63,60af0a05d243de50100af100863c88b4f6524fa4ee86a84127cf15b82b,6022de41ad5b3628ecd8686bce555846bedde16ea7881bd63abf9198e2,6075fcbf24479728322e5f128c84c15c27aeea10196f56d1ff44d40b94,60be01633e07d001fff611b3d39ac3ca89127acecef79aabb812cea125,605b819971068bae01c3d411f2b5b8a12331df4d9fbeb899c0a59afb9e,6018edec9fc995f6ea029f87b6142efdd4a132cbe4f3c14cdad54e1362,60ce805857db7601ac7af226290a0f0bee4608736fea251b8813359805,608911a9404ee35265e5b39ca1e38a5d64a67384307bc47ea5b1c2f1f3,60b80d7dfef9f0e989a62aabdbc9aec4703bc38dcc0363bcb902aad20f,60a3aabe29cf0d4cf0acd9c0c4231e69ae145e426fd40d9bc089117416,601f64ff5164c16467e229f4305e5cd05cea85f407d68ba5c8f33f6d5d,60c1ce344ee9f695a9bfa4230254c0008aa62cf09f5f4444f6ece352d8,60412be6abc6a8d58aa914bed006e77c0e8e6870a5405a0a00db9119b0,60ebc9713be7aa719a00d2be641418b59747b8ba846e1687253d6667b5,60b5c852e07c831c968ae7e0388bd0ed591097238ca3a3742367facf0f,60e10a1ec68fe34887f87c4badc81f93c2d69999614683cf05c8e97069,6066de96d2a1c75f99185f4d5a39e49adccf18515cc512c5a7392b98cc,6032c425519672bec473a8971a79a2758356ad24ee99353c7020fd5cac,6036e19cee7f33f141d34fbb899c27a68900ac6593f082edfbe6fc3fe5,601280d6db873a83fa7908f1416acbbc189624b392be7935ba787f3cb9,60ce1657bbdc8cceabecad61bb8bff3f9865d7c46170c6555c9e406aa0,60de2d51517b76fcb141908bfa07a93f1bf93b92124838d2ed24022819,60e35880324d3302478a8c48cc9c71b81710b50f8fb444a5a56462e4b5,60eb4b163aa81b319275f796b7b19b50c945604f47f807a5a5b5acd19a,6016f85346dc9b1efccaa9a69e357b49d7a25c03936ea5d05ede3cfca0,604746a8792a9eb11769d7593eeb4d0bf1be04d68c00ef50d2752c4d02,60f0ccab792b8e74acca2e08533b805afc59a38671c3c68d337f16c185,6061831490182c6c68168cddf4c995dca27c8b8b144b2643a010f938bc,601a150c13e1b5a2c6f5aa49e53ce9fc20e06d844ff162fcbd691624cd,60631b6ceb11ddd4afc4ed3d098f978ff0bfbceda084f263dfebca0e9b,60f282664fba7a04a7e2c3e782e6a23153ea5384b4c680d9dc1a98959b,60e594ceb9f74bd9fb58473f225f443dbd7be9ad76ab1c45925fe1d8ee,60f9369f45d0ae6a0ac710a02cf92277c091ef548e493e1fccb8b149e3,607b1da5a2d2cdac17fba68066eb5cb135776f0badd0ec77790115f34d,60dfcdec7a63f0e2422e938cdf3df012a9eefeccb0c835e56419fe345c,609da13e2ed25bdc1df37e3eef351aaee057ac926cedd1bb1ce02122d4,6033b94204fa0c33953e26834572de06f89496dd9b910c98d622e21612<p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6976","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.666171","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.666472","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.68756773","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6d696e69","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.72656b74","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.77656233","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6269703339","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.636f2d6f70","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.656964616e","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6761746573","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.74616e7961","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.647275646765","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.66696e6c6579","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6b6f65706b65","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6d616b657273","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6d6f6465726e","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.73796e746178","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.7a656b696168","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.636176656d616e","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.64697372757074","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.656e6372797074","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.68757362616e64","decimals":0}</p><p data-testid="calvin">{"hex":"6d696e696d616c","name":"calvin","image":"ipfs://zdj7We5kz4op3HNodbzfRt14AqUJdygK2gHosAnbaDx7fGck2","standard_image":"ipfs://zb2rhenCxDXo56r7AwHsHuSBmK9x63diFzwxtsL6PsQnM3uUs","holder":"stake1uyyyruv2y289xm7laay8a9sgrn95q627q3q4v3z4eagjdrs4j0yqu","holder_type":"wallet","length":6,"og_number":0,"rarity":"common","utxo":"3911b59931d3f5e938bef6d773d4b0d6a48fab96d63c658aa4b240a50dcba679#1","characters":"letters","numeric_modifiers":"","default_in_wallet":"cal","pfp_image":"","bg_image":"ipfs://bafybeicuvareow6exu2ti6xtsxkzpcpsc7dj54q7oaratjm4uaqgd77ham","bg_asset":"c705d66dd826fa750a3fcc0a74c27fdb20db2ed18ad569232d7123ad001bc2804772616469656e7420536861706573202d2043616765","resolved_addresses":{"ada":"addr1qyzpu6dy0tp926q72qdsxmu3ydqg9qyavs7tanfcpudv24sgg8cc5g5w2dhalm6g06tqs8xtgp54upzp2ez9tn63y68qn5st78"},"created_slot_number":103834977,"updated_slot_number":115852137,"has_datum":false,"svg_version":"2.4.0","image_hash":"0291cbb9f046a27bb067b4310c6eab6ae8e755a49a3b7e1ae87314b569ab6548","standard_image_hash":"78e558e2c32e3de4e95cefad00857a98665cd323bf11bdd4b9b48a707de61910","version":1,"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6d696e696d616c","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.70726f66696c65","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.70757273756974","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.736176696e6773","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.616c64657262696e","decimals":0}</p><p data-testid="pi">{"hex":"62726577636c7562","name":"pi","image":"ipfs://QmYKjoA9fsLaGnz92BJbC5kHFsSKsijAdmowQqbmzjfWBT","standard_image":"ipfs://QmYKjoA9fsLaGnz92BJbC5kHFsSKsijAdmowQqbmzjfWBT","holder":"stake1u8q07kgyuhffc8v9auvn4jlqcm4hehdu7wsd9fvna95nr3qynl7dk","holder_type":"wallet","length":2,"og_number":0,"rarity":"ultra_rare","utxo":"8ae62ab3631124197cdd4faac83428c404e529f07db510899c68a373a22fa77c#1","characters":"letters","numeric_modifiers":"","default_in_wallet":"pi","pfp_image":"","bg_image":"","resolved_addresses":{"ada":"addr1qyyrwcs73wk9cp9e7lxpn86d2n4wxgyduxqxmmj6psmjejkqlavsfewjnswctmce8t97p3ht0nwmeuaq62je86tfx8zq6lh9kr"},"created_slot_number":55725690,"updated_slot_number":104951843,"has_datum":false,"svg_version":"","image_hash":"","standard_image_hash":"","version":0,"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.62726577636c7562","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6f726967696e616c","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.706c61793277696e","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.7072656d69657265","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.646179747261646572","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.63687269737469616e6e","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.706f7274666f6c696f31","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.706f7274666f6c696f32","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.706f7274666f6c696f33","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.73756666696369656e74","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.73757270726973656d65","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6f70706f7274756e697374","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.736f6c6f7072656e657572","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.737572766976616c697374","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.74686562726577636c7562","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.6472756467657265706f7274","decimals":0}</p><p>{"assetId":"8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3.68617070796e657779656172","decimals":0}</p><button data-testid="connect-with-handles"></button></pre>"`;
@@ -10,20 +10,22 @@ import {
10
10
  WalletObserverProvider,
11
11
  } from "../../../index.js";
12
12
 
13
- const REFRESH_INTERVAL = 10;
13
+ const INTERVAL_AMOUNT = 10;
14
14
 
15
15
  describe("useAvailableExtensions", () => {
16
16
  it("should correctly retrieve the instance", async () => {
17
17
  const { result } = renderHook<
18
18
  IWalletObserverProviderProps,
19
19
  ReturnType<typeof useAvailableExtensions>
20
- >(() => useAvailableExtensions(REFRESH_INTERVAL), {
20
+ >(() => useAvailableExtensions(INTERVAL_AMOUNT), {
21
21
  wrapper: (props) => <WalletObserverProvider {...props} />,
22
22
  });
23
23
 
24
- expect(result.current).toEqual([
25
- { name: "Eternl", property: "eternl", reference: mockedEternlWallet },
26
- ]);
24
+ act(() => {
25
+ expect(result.current).toEqual([
26
+ { name: "Eternl", property: "eternl", reference: mockedEternlWallet },
27
+ ]);
28
+ });
27
29
 
28
30
  await act(async () => {
29
31
  // Inject a duplicate api.
@@ -34,7 +36,7 @@ describe("useAvailableExtensions", () => {
34
36
  };
35
37
 
36
38
  // Wait 10 milliseconds for interval to catch.
37
- await new Promise((res) => setTimeout(res, REFRESH_INTERVAL));
39
+ await new Promise((res) => setTimeout(res, INTERVAL_AMOUNT));
38
40
  });
39
41
 
40
42
  expect(result.current).toEqual([
@@ -1,17 +1,14 @@
1
1
  import capitalize from "lodash/capitalize.js";
2
+ import isEqual from "lodash/isEqual.js";
2
3
  import { useCallback, useEffect, useState } from "react";
3
4
 
4
- import {
5
- IWindowCip30Extension,
6
- TSupportedWalletExtensions,
7
- } from "../../@types/observer.js";
8
- import { useWalletObserverContext } from "../contexts/observer/context.js";
5
+ import { IWindowCip30Extension } from "../../@types/observer.js";
9
6
 
10
7
  /**
11
8
  * Defines the interface for a returned wallet
12
9
  */
13
10
  export interface IWalletExtension {
14
- property: TSupportedWalletExtensions;
11
+ property: string;
15
12
  name: string;
16
13
  reference: IWindowCip30Extension;
17
14
  }
@@ -23,29 +20,60 @@ export interface IWalletExtension {
23
20
  *
24
21
  * @returns {IWalletExtension[]} A list of available wallet extensions.
25
22
  */
26
- export const useAvailableExtensions = (refreshInterval?: number) => {
27
- const { observerRef } = useWalletObserverContext();
28
- const [list, setList] = useState<IWalletExtension[]>([]);
23
+ export const useAvailableExtensions = (intervalAmount?: number) => {
24
+ const getSanitizedCardanoNamespace = useCallback(() => {
25
+ const newCardano = window?.cardano || window?.parent?.cardano;
26
+ const sanitizedExtension: { [key: string]: IWindowCip30Extension } = {};
27
+ for (const [key, val] of Object.entries(newCardano || {})) {
28
+ if (!val?.apiVersion) {
29
+ continue;
30
+ }
29
31
 
30
- const updateExtensions = useCallback(() => {
31
- if (!window.cardano && !window.parent.cardano) {
32
- return;
32
+ sanitizedExtension[key] = val;
33
33
  }
34
34
 
35
- let cardano: typeof window.cardano;
35
+ return sanitizedExtension;
36
+ }, []);
36
37
 
37
- if (window.self !== window.top) {
38
- cardano = window.parent.cardano;
39
- } else {
40
- cardano = window.cardano;
41
- }
38
+ const [list, setList] = useState<IWalletExtension[]>([]);
39
+ const [cardano, setCardano] = useState<
40
+ | {
41
+ [key: string]: IWindowCip30Extension;
42
+ }
43
+ | undefined
44
+ >(getSanitizedCardanoNamespace());
45
+
46
+ useEffect(() => {
47
+ const checkForUpdates = () => {
48
+ const supportedExtensions = getSanitizedCardanoNamespace();
49
+ setCardano((prevCardano) => {
50
+ if (isEqual(prevCardano, supportedExtensions)) {
51
+ return prevCardano;
52
+ }
53
+
54
+ return supportedExtensions;
55
+ });
56
+ };
57
+
58
+ const interval = setInterval(checkForUpdates, intervalAmount || 1000);
59
+
60
+ // Stop checking after 5 minutes;
61
+ setTimeout(() => {
62
+ clearInterval(interval);
63
+ }, 60000 * 5);
42
64
 
43
- const list: IWalletExtension[] = [];
44
- observerRef.current.getSupportedExtensions().forEach((key) => {
45
- const extension = cardano?.[key];
65
+ return () => clearInterval(interval);
66
+ }, [cardano]);
46
67
 
68
+ useEffect(() => {
69
+ if (!cardano) {
70
+ return;
71
+ }
72
+
73
+ const newList: IWalletExtension[] = [];
74
+ Object.entries(cardano).forEach(([key, extension]) => {
47
75
  if (extension) {
48
- list.push({
76
+ newList.push({
49
77
  name: capitalize(extension.name),
50
78
  property: key,
51
79
  reference: extension,
@@ -53,26 +81,8 @@ export const useAvailableExtensions = (refreshInterval?: number) => {
53
81
  }
54
82
  });
55
83
 
56
- setList((prevExtensions) => {
57
- if (list.length > prevExtensions.length) {
58
- return list;
59
- }
60
-
61
- return prevExtensions;
62
- });
63
- }, [observerRef]);
64
-
65
- useEffect(() => {
66
- updateExtensions();
67
-
68
- // Check every 2 seconds for 20 seconds (late loading extensions.)
69
- (async () => {
70
- for (let i = 0; i < 20; i++) {
71
- updateExtensions();
72
- await new Promise((res) => setTimeout(res, refreshInterval || 2000));
73
- }
74
- })();
75
- }, []);
84
+ setList(newList);
85
+ }, [cardano]);
76
86
 
77
87
  return list;
78
88
  };
@@ -1,4 +1,4 @@
1
- import { IHandle } from "@koralabs/adahandle-sdk";
1
+ import type { IHandle } from "@koralabs/adahandle-sdk";
2
2
  import { IAssetAmountMetadata } from "@sundaeswap/asset";
3
3
  import { useQuery, useQueryClient } from "@tanstack/react-query";
4
4
  import { useMemo } from "react";
@@ -6,6 +6,7 @@ import { useMemo } from "react";
6
6
  import { TAssetAmountMap } from "../../@types/observer.js";
7
7
  import { WalletAssetMap } from "../../classes/WalletAssetMap.class.js";
8
8
  import { normalizeAssetIdWithDot } from "../../utils/assets.js";
9
+ import { getHandleLib } from "../../utils/getLibs.js";
9
10
  import { THandleMetadata } from "../contexts/observer/types.js";
10
11
  import { useWalletObserver } from "./useWalletObserver.js";
11
12
 
@@ -49,11 +50,8 @@ export const useWalletHandles = <
49
50
  }
50
51
 
51
52
  try {
52
- const {
53
- default: HandleClient,
54
- HandleClientContext,
55
- KoraLabsProvider,
56
- } = await import("@koralabs/adahandle-sdk");
53
+ const { HandleClient, HandleClientContext, KoraLabsProvider } =
54
+ await getHandleLib();
57
55
 
58
56
  const context =
59
57
  state.network === 1
@@ -18,3 +18,14 @@ export const getPeerConnect = async () => {
18
18
  return module?.DAppPeerConnect || module.default.DAppPeerConnect;
19
19
  });
20
20
  };
21
+
22
+ export const getHandleLib = async () => {
23
+ return import("@koralabs/adahandle-sdk").then((module) => {
24
+ const HandleClient = module?.default || module;
25
+ return {
26
+ HandleClient,
27
+ HandleClientContext: module.HandleClientContext,
28
+ KoraLabsProvider: module.KoraLabsProvider,
29
+ };
30
+ });
31
+ };