@sundaeswap/wallet-lite 0.0.95 → 0.0.97

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 (38) hide show
  1. package/dist/cjs/@types/observer.js.map +1 -1
  2. package/dist/cjs/classes/WalletBalanceMap.class.js +1 -1
  3. package/dist/cjs/classes/WalletBalanceMap.class.js.map +1 -1
  4. package/dist/cjs/classes/WalletObserver.class.js +2 -2
  5. package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
  6. package/dist/cjs/classes/WalletObserverUtils.class.js +2 -1
  7. package/dist/cjs/classes/WalletObserverUtils.class.js.map +1 -1
  8. package/dist/cjs/react-components/hooks/useWalletHandles.js +7 -2
  9. package/dist/cjs/react-components/hooks/useWalletHandles.js.map +1 -1
  10. package/dist/esm/@types/observer.js.map +1 -1
  11. package/dist/esm/classes/WalletBalanceMap.class.js +1 -1
  12. package/dist/esm/classes/WalletBalanceMap.class.js.map +1 -1
  13. package/dist/esm/classes/WalletObserver.class.js +1 -1
  14. package/dist/esm/classes/WalletObserver.class.js.map +1 -1
  15. package/dist/esm/classes/WalletObserverUtils.class.js +2 -1
  16. package/dist/esm/classes/WalletObserverUtils.class.js.map +1 -1
  17. package/dist/esm/react-components/hooks/useWalletHandles.js +2 -1
  18. package/dist/esm/react-components/hooks/useWalletHandles.js.map +1 -1
  19. package/dist/types/@types/observer.d.ts +3 -0
  20. package/dist/types/@types/observer.d.ts.map +1 -1
  21. package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
  22. package/dist/types/classes/WalletObserverUtils.class.d.ts.map +1 -1
  23. package/dist/types/react-components/hooks/useWalletHandles.d.ts.map +1 -1
  24. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  25. package/package.json +2 -1
  26. package/src/@types/observer.ts +3 -0
  27. package/src/__data__/assets.ts +16 -106
  28. package/src/__data__/eternl.ts +5 -5
  29. package/src/classes/WalletBalanceMap.class.ts +1 -1
  30. package/src/classes/WalletObserver.class.ts +2 -1
  31. package/src/classes/WalletObserverUtils.class.ts +3 -1
  32. package/src/classes/__tests__/WalletBalanceMap.test.ts +31 -19
  33. package/src/classes/__tests__/WalletObserver.test.ts +47 -35
  34. package/src/classes/__tests__/WalletObserverUtils.test.ts +12 -50
  35. package/src/react-components/__tests__/hooks/useAvailableExtensions.test.tsx +1 -1
  36. package/src/react-components/__tests__/hooks/useWalletObserver.test.tsx +20 -9
  37. package/src/react-components/hooks/useWalletHandles.ts +6 -1
  38. package/src/react-components/__tests__/RenderWalletHandles.test.tsx +0 -77
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sundaeswap/wallet-lite",
3
- "version": "0.0.95",
3
+ "version": "0.0.97",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -61,6 +61,7 @@
61
61
  "@babel/preset-typescript": "^7.24.7",
62
62
  "@happy-dom/global-registrator": "^16.5.3",
63
63
  "@sundaeswap/babel-preset": "^2.0.15",
64
+ "@tanstack/react-query": "^5.51.11",
64
65
  "@testing-library/dom": "^10.1.0",
65
66
  "@testing-library/react": "^16.0.0",
66
67
  "@testing-library/react-hooks": "^8.0.1",
@@ -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
  /**
@@ -1,113 +1,23 @@
1
+ import { Serialization } from "@cardano-sdk/core";
2
+ import { HexBlob } from "@cardano-sdk/util";
1
3
  import { AssetAmount } from "@sundaeswap/asset";
2
4
  import { normalizeAssetIdWithDot } from "../utils/assets";
5
+ import { mockBalance } from "./eternl";
3
6
 
4
- export const assetIds = [
5
- "ada.lovelace",
6
- "04b95368393c821f180deee8229fbd941baaf9bd748ebcdbf7adbb147273455247",
7
- "063bbb14b22e39aedf7beba84d7ce9ea771a6f19d9ad02f70d6f3eaa446973636f536f6c6172697345787472617330313431",
8
- "063bbb14b22e39aedf7beba84d7ce9ea771a6f19d9ad02f70d6f3eaa446973636f536f6c6172697345787472617339303038",
9
- "0cf7296fe09e9225d8cc0a444ee60e8d4f09c1c5f3dbc8aaee1ebc705448554e54",
10
- "1088b361c41f49906645cedeeb7a9ef0e0b793b1a2d24f623ea748764861766f63576f726c647336393339",
11
- "2b7e1c65b836affa518d0a63067e52962c37e0485cf28edcd970bff676424f4f4b",
12
- "2d3b299285e911a6dddb915d03d47970a45cb0a08aa8a138dba39c6f4b4a4232393932",
13
- "3059f54ae7c2d56237bd921a864eb090d7d0c98b2775f9784f854fdd72434f5049",
14
- "3e9499856b0421b4424c8fc3a75c4e05aadab5e05f1337304efb6c1f53505f6b55325a4164",
15
- "41142faeb5e3c644625966715c0a844bb4d6aeef2bcdbf535b14e5a57448414e444c45",
16
- "46e607b3046a34c95e7c29e47047618dbf5e10de777ba56c590cfd5c4e45574d5f31",
17
- "477cec772adb1466b301fb8161f505aa66ed1ee8d69d3e7984256a43477574656e62657267204269626c65202336393232",
18
- "477cec772adb1466b301fb8161f505aa66ed1ee8d69d3e7984256a43477574656e62657267204269626c65202337393130",
19
- "477cec772adb1466b301fb8161f505aa66ed1ee8d69d3e7984256a43477574656e62657267204269626c65202339313538",
20
- "51a5e236c4de3af2b8020442e2a26f454fda3b04cb621c1294a0ef34424f4f4b",
21
- "5c1abfb2c2b2a4ce2fa731cdb2f793fcd4ab2c2c05b8ee39b142a4a64d694c4b3630",
22
- "6a10a650be925743cb0e5592442326dd1094e107b1b0402c13160ebd446973636f696e45617272696e673335",
23
- "76dbbc78587bf972c710f22a0807a6905a8a5e713418515fc9abeed1646973636f736f6c617269733038393233",
24
- "7f9a722eac5d460444e4df7e65144785e7f16de8579c00663232879c4e49444f57415645303831",
25
- "8d7526784ef72fe0ccdd085976ada0da88e7fb013e38e794b09233414245415244",
26
- "9293316c91ff5143e3bc60d78d44dfb87edff59d61b99cf4c938d9084142544e",
27
- "92a7b9d9d8e6111ca2105409e0f0efea9661d2a0bd44e322253420b453505f354956317337",
28
- "9460f3352773623741fcf6fd471668998021c3ebb805413c80e9b43941424f4f4b",
29
- "960d6f6cb6d3f8d9746bff157000ca71ed1c8cc419fff09796ee9e8a4d694c4b44726f707a20315f3236",
30
- "a0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235484f534b59",
31
- "a706fc87764cde4ac018c38bf61630c1065932db49e6f495be3b29f8436f636f4c6f636f477265656e50616c6d53314e465431363537",
32
- "ad14d754d349ac1a6cbd3e08d404e67bc5b3ab265884736a5bf07eb05448554e54",
33
- "ae1b29e34cb98ca4e02011a2b2c465261ae9805a1e256c41647a952072424f4f4b",
34
- "b6a7467ea1deb012808ef4e87b5ff371e85f7142d7b356a40d9b42a0436f726e75636f70696173205b76696120436861696e506f72742e696f5d",
35
- "bf5aebb0481d3b0031eac8b495808235f7d5f252421504e64f3729dd4d494e544b4559",
36
- "c117f33edeee4b531dfdb85ead5753433c9dbd875629bc971013ffac42656174426f792023343136",
37
- "c117f33edeee4b531dfdb85ead5753433c9dbd875629bc971013ffac42656174426f79202331383334",
38
- "c117f33edeee4b531dfdb85ead5753433c9dbd875629bc971013ffac42656174426f79202332363237",
39
- "c117f33edeee4b531dfdb85ead5753433c9dbd875629bc971013ffac42656174426f79202336343934",
40
- "c281975562f394761771f13f599881517fa8455946e7e30454de22da474f415454726962653034313736",
41
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697331313738",
42
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697331343434",
43
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697331363037",
44
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697331373030",
45
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697331383538",
46
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697332333938",
47
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697332343734",
48
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697332353239",
49
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697332353837",
50
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697332393635",
51
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697333303938",
52
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697333323235",
53
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697334303031",
54
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697334323638",
55
- "d0112837f8f856b2ca14f69b375bc394e73d146fdadcc993bb993779446973636f536f6c6172697334343533",
56
- "d1218edd90bd8446051a22d043b4cc7369ad48be46299528f8b22c487241584f",
57
- "d55bf9d2ad12cc55e4ed29d97c64dba0e4905d3c80f800449f3d51f04368616e6765",
58
- "df6268fb872b81a349469825c23bd4d0f5fb4b35bcba547493b35fd6446f78786f536f6c6172697330313431",
59
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe36976",
60
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3666171",
61
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3666472",
62
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe368756773",
63
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe36d696e69",
64
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe372656b74",
65
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe377656233",
66
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe36269703339",
67
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3636f2d6f70",
68
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3656964616e",
69
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe36761746573",
70
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe374616e7961",
71
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3647275646765",
72
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe366696e6c6579",
73
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe36b6f65706b65",
74
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe36d616b657273",
75
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe36d6f6465726e",
76
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe373796e746178",
77
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe37a656b696168",
78
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3636176656d616e",
79
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe364697372757074",
80
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3656e6372797074",
81
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe368757362616e64",
82
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe36d696e696d616c",
83
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe370726f66696c65",
84
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe370757273756974",
85
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3736176696e6773",
86
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3616c64657262696e",
87
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe362726577636c7562",
88
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe36f726967696e616c",
89
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3706c61793277696e",
90
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe37072656d69657265",
91
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3646179747261646572",
92
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe363687269737469616e6e",
93
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3706f7274666f6c696f31",
94
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3706f7274666f6c696f32",
95
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3706f7274666f6c696f33",
96
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe373756666696369656e74",
97
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe373757270726973656d65",
98
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe36f70706f7274756e697374",
99
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3736f6c6f7072656e657572",
100
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe3737572766976616c697374",
101
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe374686562726577636c7562",
102
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe36472756467657265706f7274",
103
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe368617070796e657779656172",
104
- "f55ac9646c45e899603a5617d398570705fd7b93278a6e4879136f954d6f6f6e6c69676874313834",
105
- "f55ac9646c45e899603a5617d398570705fd7b93278a6e4879136f954d6f6f6e6c69676874313937",
106
- "f55ac9646c45e899603a5617d398570705fd7b93278a6e4879136f954d6f6f6e6c69676874323237",
107
- "f66d78b4a3cb3d37afa0ec36461e51ecbde00f26c8f0a68f94b6988069425443",
108
- ];
7
+ const assets = Serialization.Value.fromCbor(HexBlob(mockBalance));
8
+ const assetsCore = assets.toCore();
9
+ export const mockWalletAssetIds: string[] = [];
109
10
 
110
- export const assetMap = assetIds.map((id) => {
11
+ if (assetsCore.coins > 0n) {
12
+ mockWalletAssetIds.push("ada.lovelace");
13
+ }
14
+ if (assetsCore.assets) {
15
+ for (const [assetId] of assetsCore.assets) {
16
+ mockWalletAssetIds.push(assetId);
17
+ }
18
+ }
19
+
20
+ export const assetMap = mockWalletAssetIds.map((id) => {
111
21
  const assetId = normalizeAssetIdWithDot(id);
112
22
  const name = Buffer.from(id.slice(56), "hex").toString("utf-8");
113
23
 
@@ -1,4 +1,4 @@
1
- export const usedAddresses = [
1
+ export const mockUsedAddresses = [
2
2
  "00c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0",
3
3
  "00e855cd3dbc30bad8ac8fffbed87d36325b407a8e934b1507725fcd80121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0",
4
4
  "00129ee829b3cea5762f0c1077db667390a9ee007825a0ed7b1150d35d121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0",
@@ -125,16 +125,16 @@ export const usedAddresses = [
125
125
  "6033b94204fa0c33953e26834572de06f89496dd9b910c98d622e21612",
126
126
  ];
127
127
 
128
- export const unusedAddresses = [
128
+ export const mockUnusedAddresses = [
129
129
  "00c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0",
130
130
  ];
131
131
 
132
- export const balance =
132
+ export const mockBalance =
133
133
  "821b00000004c09febb6b818581c06dd6a12db0a3eb41a9fa243dd53df588418d4819f245f36d8c45f49aa4b5265776172645374616b65014f546173746554657374506f6c6963790150526577617264466f6c64506f6c6963790151436f6c6c656374466f6c64506f6c6963790151546f6b656e486f6c646572506f6c696379015254617374655465737456616c696461746f720153526577617264466f6c6456616c696461746f720154436f6c6c656374466f6c6456616c696461746f720154546f6b656e486f6c64657256616c696461746f7201575461737465546573745374616b6556616c696461746f7201581c14e957a7799ee1feb0afe68a7abeb6f642832d28045e71fb0003b1cba1495454507265766965771b0000001878e4fd18581c2fe3c3364b443194b10954771c95819b8d6ed464033c21f03f8facb5a144695553441b0000000185d7560a581c4086577ed57c514f8e29b78f42ef4f379363355a3b65b9a032ee30c9a1446c70202d1a00bcd161581c44a1eb2d9f58add4eb1932bd0048e6a1947e85e3fe4f32956a110414a458200014df10035002e600d25a96003ecd1746007f59bac2788355687d18c79271191a00214ed558200014df102e74e6af9739616dd021f547bca1f68c937b566bb6ca2e4782e760011a0042f18658200014df10bd9437d9ec1a559d053f05dc38d337c32d1d0746952ea961f874c39a1abe4fb74958200014df10fe7606868521244f4a86d5e88ef483de7a441b286f4d751550518ff81a37c01cb3581c633a136877ed6ad0ab33e69a22611319673474c8bd0a79a4c76d9289a158200014df101750b21414d4198763ee4d442f5c03a295a13a6028def9be4a7854631a009ca627581c6c6011f808562c80d7d24b9462e3eec41bea9d96e3e7a51e620a061ea344425443621a97883a4d444a5059621b000019f16e3daf24464d41544943621b000000024dda5412581c8140c4b89428fc264e90b10c71c53a4c3f9ce52b676bf1d9b51eb9caa458200014df100ae1b3f34bfbf30e2fb38305f3a6c27aece138ba7febe13d5db3e1341a7960ea6b58200014df1034c2b9d553d3a74b3ac67cc8cefb423af0f77fc84664420090e099901a19c9dd1f58200014df105b3955db22793705b4e6f34871ef5429bace12e909fb1ccf862c60e91a0006d2ed58200014df108bf66e915c450ad94866abb02802821b599e32f43536a42470b21ea21a005bfec8581c824faecc3a7312f5cad0397dd9ffb96e15dd4cf6a3cf16e23d7352b3a1401b000000e8d4a51000581c919d4c2c9455016289341b1a14dedf697687af31751170d56a31466ea14874434c41524954591b000000cf898883f8581c99b071ce8580d6a3a11b4902145adb8bfd0d2a03935af8cf66403e15b14443484f431a01696cc444555344431a0bebc200465242455252591b000000ba8c6bfdef465342455252591b0000596460ffa1ed48544553545f4e4654014874526577617264731a203046184a546573744173736574311a009896804a546573744173736574321a009896804a546573744173736574331a009896804a546573744173736574341a009896804a546573744173736574351a009896804a546573744173736574361a009896804a546573744173736574371a009896804a546573744173736574381a009896804a546573744173736574391a009896804b54657374417373657431301a009884405153616c7361536f6c61726973233031343101581c99e7cd5c0aca25bc3e90be7e318326a188f913a07bbfe09b3bace0d4a1495454507265766965771b00000417d7b93b42581ca51963f936f00b0def70fc1196e70603cb95c85f18e836be6ba2ad8ba149446966667573696f6e1b000000016506cbcb581cb89bdcb78010912ce6e98c97d5ab38e8e62f3d0851cdca0811e4ae92aa4b5265776172645374616b65014f546173746554657374506f6c6963790150526577617264466f6c64506f6c6963790151436f6c6c656374466f6c64506f6c6963790151546f6b656e486f6c646572506f6c696379015254617374655465737456616c696461746f720153526577617264466f6c6456616c696461746f720154436f6c6c656374466f6c6456616c696461746f720154546f6b656e486f6c64657256616c696461746f7201575461737465546573745374616b6556616c696461746f7201581cba0062b8f68bb8f80d4509e53d97a554381030b5e84832115376cb0aa148544553545f4e465401581ccaaaa4dd8b3b5c9dae65573cdb0bc2e989c43c3963d06b93d37687f1a150537461626c6520446966667573696f6e1a00273a8a581ccadd6bf1f7535eed785b01169b03fc800360b396ab5617b560fccd4ea448544553545f4e465401514e45574d5f566f74655f507265766965771b00002d794ca2a4225353616c7361536f6c61726973446973636f696e196d60554e45574d5f50726f706f73616c5f5072657669657702581cd35c752af635d9e9cb79aea44537a57a5ecd91e23133cd7f210f0070a1456d544f53491822581cd441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcfa1465242455252591a0167e3da581cd606298f0f892cce3f4df1585d3723f3817be8198abbc0c83bb89fadaa4b5265776172645374616b65014f546173746554657374506f6c6963790150526577617264466f6c64506f6c6963790151436f6c6c656374466f6c64506f6c6963790151546f6b656e486f6c646572506f6c696379015254617374655465737456616c696461746f720153526577617264466f6c6456616c696461746f720154436f6c6c656374466f6c6456616c696461746f720154546f6b656e486f6c64657256616c696461746f7201575461737465546573745374616b6556616c696461746f7201581cd805c13981d8b6b239ab4df3a3c6de653fcb426312b768e90304fa41a7581f46534e0f050513190d2dffcc8ea86a615c8cbb9690f367e439071e8d3a241c01581f46534e4bab725e4899fb4b628f8e4773fcdffcbd1b34666736d2a4d9935b6d01581f46534e6e12a1701cb5b4173e4e21bd8ffa98f4ccd2a9b90cc325f561d972f301581f46534e7ae7c9465ccc850e25cacec07820883be9e1a972931511d63d078d9401581f46534e7fa42f43b2d7e1a9d8e3276f68d37b9b8a0746991b3f7a420673aca001581f46534eb0158422435c0130845b3141353463420e28f42696c18cef305a7c3101581f46534efeae1e5d3310dab9193f315e3124e97fc462b0b523b545e235c4704b01581cd8906ca5c7ba124a0407a32dab37b2c82b13b3dcd9111e42940dcea4a1480014df105553444d1b00000037e11d5fff581cf99a0cc5bac393156aa088bbe28993679feb59de74ccdb0c8586213aa158200014df10fc2c4a6ae8048b0b5affc169dfd496a7ace7d08288c476d9d7a5804e1a000f4240581cfa3eff2047fdf9293c5feef4dc85ce58097ea1c6da4845a351535183a14574494e44591a0fbd2529";
134
134
 
135
- export const network = 0;
135
+ export const mockNetwork = 0;
136
136
 
137
- export const utxos = [
137
+ export const mockUtxos = [
138
138
  "828258202ffa2cb637456ddc2326ff71ca525cc3c066b74aa0e7251df708640280782a6f0082583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d01ab2d05e00",
139
139
  "82825820739753ecb91d7ca749748e789f114db73650d70ee3241fb937abe8dba37dcb920182583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0821a1d56b205a1581c44a1eb2d9f58add4eb1932bd0048e6a1947e85e3fe4f32956a110414a158200014df10035002e600d25a96003ecd1746007f59bac2788355687d18c79271191a00214ed5",
140
140
  "8282582068869e3b2181917a443240a11e865352010138b63b60fb28869779cdd459c07c0182583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0821a1109e7c0a1581c99b071ce8580d6a3a11b4902145adb8bfd0d2a03935af8cf66403e15a1465242455252591a00603449",
@@ -62,7 +62,7 @@ export class WalletBalanceMap<
62
62
  const map: TAssetAmountMap<AssetMetadata> = new WalletAssetMap();
63
63
  [...this.entries()].forEach(([key, asset]) => {
64
64
  const isHandle = this._handlePolicyIds[this._observer.network]?.some(
65
- (policyId) => asset.metadata.assetId.includes(policyId),
65
+ (policyId) => asset.id.includes(policyId),
66
66
  );
67
67
 
68
68
  if (isHandle) {
@@ -673,7 +673,8 @@ export class WalletObserver<
673
673
 
674
674
  const start = performance.now();
675
675
  try {
676
- const address = this.api.experimental?.feeAddress;
676
+ const address =
677
+ window.cardano?.[this.activeWallet!]?.experimental?.feeAddress;
677
678
  const end = performance.now();
678
679
 
679
680
  if (this._options.debug) {
@@ -48,6 +48,8 @@ export class WalletObserverUtils {
48
48
  this.network,
49
49
  stakingCredential,
50
50
  );
51
- return stakingAddress.toAddress().toBech32();
51
+
52
+ const bech32 = stakingAddress.toAddress().toBech32();
53
+ return bech32;
52
54
  }
53
55
  }
@@ -1,6 +1,7 @@
1
1
  import { beforeEach, describe, expect, it, spyOn, test } from "bun:test";
2
2
 
3
- import { assetIds, assetMap } from "../../__data__/assets.js";
3
+ import { IAssetAmountMetadata } from "@sundaeswap/asset";
4
+ import { mockWalletAssetIds } from "../../__data__/assets.js";
4
5
  import { normalizeAssetIdWithDot } from "../../utils/assets.js";
5
6
  import { WalletBalanceMap } from "../WalletBalanceMap.class.js";
6
7
  import { WalletObserver } from "../WalletObserver.class.js";
@@ -8,17 +9,28 @@ import { WalletObserver } from "../WalletObserver.class.js";
8
9
  let instance: WalletBalanceMap;
9
10
 
10
11
  const fungibleId = "ada.lovelace";
11
- const handleId =
12
- "8d18d786e92776c824607fd8e193ec535c79dc61ea2405ddf3b09fe36d696e696d616c";
13
12
  const nftId =
14
- "477cec772adb1466b301fb8161f505aa66ed1ee8d69d3e7984256a43477574656e62657267204269626c65202336393232";
13
+ "06dd6a12db0a3eb41a9fa243dd53df588418d4819f245f36d8c45f49.5265776172645374616b65";
15
14
 
16
- beforeEach(() => {
17
- const observer = new WalletObserver();
18
- instance = new WalletBalanceMap(observer);
19
- assetMap.forEach(({ key, assetAmount }) => {
20
- instance.set(key, assetAmount);
15
+ beforeEach(async () => {
16
+ const observer = new WalletObserver({
17
+ metadataResolver: async ({ assetIds, normalizeAssetId }) => {
18
+ const map = new Map<string, IAssetAmountMetadata>();
19
+ for (const id of assetIds) {
20
+ const decimals = id === nftId ? 0 : 6;
21
+ map.set(normalizeAssetId(id), {
22
+ assetId: normalizeAssetId(id),
23
+ decimals,
24
+ });
25
+ }
26
+ return map;
27
+ },
21
28
  });
29
+ await observer.connectWallet("eternl");
30
+ const balanceMap = await observer.getBalanceMap();
31
+ if (balanceMap instanceof WalletBalanceMap) {
32
+ instance = balanceMap;
33
+ }
22
34
  });
23
35
 
24
36
  describe("WalletBalanceMap", () => {
@@ -30,26 +42,28 @@ describe("WalletBalanceMap", () => {
30
42
  });
31
43
 
32
44
  it("should setup the test instance properly", () => {
33
- expect(instance.size).toEqual(103);
34
- expect([...instance.keys()]).toEqual(assetIds.map(normalizeAssetIdWithDot));
45
+ expect(instance.size).toEqual(mockWalletAssetIds.length);
46
+ expect([...instance.keys()]).toEqual(
47
+ mockWalletAssetIds.map(normalizeAssetIdWithDot),
48
+ );
35
49
  });
36
50
 
37
51
  test("getFungibleTokens()", () => {
38
52
  const fungible = instance.getFungibleTokens();
39
53
  expect(fungible).toBeInstanceOf(Map);
40
- expect(fungible.size).toEqual(55);
54
+ // It will be one less than the total because we set the decimals for only one of them to 0.
55
+ expect(fungible.size).toEqual(mockWalletAssetIds.length - 1);
41
56
 
42
57
  expect(fungible.get(fungibleId)).toBeDefined();
43
- expect(fungible.get(handleId)).toBeUndefined();
44
58
  expect(fungible.get(nftId)).toBeUndefined();
45
59
  });
46
60
 
47
61
  test("getHandles()", () => {
48
62
  const handles = instance.getHandles();
49
63
  expect(handles).toBeInstanceOf(Map);
50
- expect(handles.size).toEqual(45);
64
+ // No handles exist in the dataset.
65
+ expect(handles.size).toEqual(0);
51
66
 
52
- expect(handles.get(handleId)).toBeDefined();
53
67
  expect(handles.get(nftId)).toBeUndefined();
54
68
  expect(handles.get(fungibleId)).toBeUndefined();
55
69
  });
@@ -57,20 +71,18 @@ describe("WalletBalanceMap", () => {
57
71
  test("getNonFungibleTokens()", () => {
58
72
  const nfts = instance.getNonFungibleTokens();
59
73
  expect(nfts).toBeInstanceOf(Map);
60
- expect(nfts.size).toEqual(3);
74
+ expect(nfts.size).toEqual(1);
61
75
 
62
76
  expect(nfts.get(nftId)).toBeDefined();
63
- expect(nfts.get(handleId)).toBeUndefined();
64
77
  expect(nfts.get(fungibleId)).toBeUndefined();
65
78
  });
66
79
 
67
80
  test("getNonFungibleTokens(withHandles?: true)", () => {
68
81
  const nfts = instance.getNonFungibleTokens(true);
69
82
  expect(nfts).toBeInstanceOf(Map);
70
- expect(nfts.size).toEqual(48);
83
+ expect(nfts.size).toEqual(1);
71
84
 
72
85
  expect(nfts.get(nftId)).toBeDefined();
73
- expect(nfts.get(handleId)).toBeDefined();
74
86
  expect(nfts.get(fungibleId)).toBeUndefined();
75
87
  });
76
88
 
@@ -1,11 +1,12 @@
1
1
  import { IAssetAmountMetadata } from "@sundaeswap/asset";
2
2
  import { afterEach, describe, expect, it, spyOn, test } from "bun:test";
3
3
 
4
- import { assetIds } from "../../__data__/assets.js";
4
+ import { Cardano } from "@cardano-sdk/core";
5
+ import { mockWalletAssetIds } from "../../__data__/assets.js";
5
6
  import {
6
- network,
7
- unusedAddresses,
8
- usedAddresses,
7
+ mockNetwork,
8
+ mockUnusedAddresses,
9
+ mockUsedAddresses,
9
10
  } from "../../__data__/eternl.js";
10
11
  import {
11
12
  EWalletObserverEvents,
@@ -154,29 +155,42 @@ describe("WalletObserver", async () => {
154
155
  expect(spiedDispatch).toHaveBeenNthCalledWith(
155
156
  4,
156
157
  EWalletObserverEvents.GET_BALANCE_MAP_END,
157
- {
158
+ expect.objectContaining({
158
159
  balanceMap: expect.objectContaining({
159
- size: assetIds.length,
160
+ size: mockWalletAssetIds.length,
160
161
  }),
161
- },
162
+ }),
162
163
  );
163
164
  expect(spiedDispatch).toHaveBeenNthCalledWith(
164
165
  5,
165
166
  EWalletObserverEvents.SYNCING_WALLET_END,
166
167
  expect.objectContaining({
167
168
  balanceMap: expect.objectContaining({
168
- size: assetIds.length,
169
+ size: mockWalletAssetIds.length,
170
+ }),
171
+ network: mockNetwork,
172
+ unusedAddresses: expect.objectContaining({
173
+ length: mockUnusedAddresses.length,
174
+ }),
175
+ usedAddresses: expect.objectContaining({
176
+ length: mockUsedAddresses.length,
169
177
  }),
170
- network,
171
- unusedAddresses,
172
- usedAddresses,
173
178
  }),
174
179
  );
175
180
 
176
- expect(syncResults.balanceMap.size).toEqual(assetIds.length);
177
- expect(syncResults.network).toBe(network);
178
- expect(syncResults.unusedAddresses).toEqual(unusedAddresses);
179
- expect(syncResults.usedAddresses).toEqual(usedAddresses);
181
+ expect(syncResults.balanceMap).toHaveProperty(
182
+ "size",
183
+ mockWalletAssetIds.length,
184
+ );
185
+ expect(syncResults.network).toBe(mockNetwork);
186
+ expect(syncResults.unusedAddresses).toHaveProperty(
187
+ "length",
188
+ mockUnusedAddresses.length,
189
+ );
190
+ expect(syncResults.usedAddresses).toHaveProperty(
191
+ "length",
192
+ mockUsedAddresses.length,
193
+ );
180
194
  });
181
195
 
182
196
  it("should connect correctly with persistence", async () => {
@@ -196,14 +210,23 @@ describe("WalletObserver", async () => {
196
210
 
197
211
  const syncResults = await observer.sync();
198
212
 
199
- expect(syncResults.balanceMap.size).toEqual(assetIds.length);
200
- expect(syncResults.network).toBe(network);
201
- expect(syncResults.unusedAddresses).toEqual(unusedAddresses);
202
- expect(syncResults.usedAddresses).toEqual(usedAddresses);
213
+ expect(syncResults.balanceMap).toHaveProperty(
214
+ "size",
215
+ mockWalletAssetIds.length,
216
+ );
217
+ expect(syncResults.network).toBe(mockNetwork);
218
+ expect(syncResults.unusedAddresses).toHaveProperty(
219
+ "length",
220
+ mockUnusedAddresses.length,
221
+ );
222
+ expect(syncResults.usedAddresses).toHaveProperty(
223
+ "length",
224
+ mockUsedAddresses.length,
225
+ );
203
226
  expect(
204
227
  window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY),
205
228
  ).toEqual(
206
- `{"activeWallet":"eternl","mainAddress":"${usedAddresses[0]}"}`,
229
+ `{"activeWallet":"eternl","mainAddress":"${Cardano.Address.fromString(mockUsedAddresses[0])?.toBech32()}"}`,
207
230
  );
208
231
  });
209
232
  });
@@ -224,13 +247,15 @@ describe("WalletObserver", async () => {
224
247
  expect(
225
248
  window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY),
226
249
  ).toEqual(
227
- `{"activeWallet":"eternl","mainAddress":"${usedAddresses[0]}"}`,
250
+ `{"activeWallet":"eternl","mainAddress":"${Cardano.Address.fromString(mockUsedAddresses[0])?.toBech32()}"}`,
228
251
  );
229
252
 
230
253
  await observer.sync();
231
254
 
232
255
  expect(observer.activeWallet).toEqual("eternl");
233
- expect(observer.getCachedAssetMetadata().size).toEqual(assetIds.length);
256
+ expect(observer.getCachedAssetMetadata().size).toEqual(
257
+ mockWalletAssetIds.length,
258
+ );
234
259
 
235
260
  observer.disconnect();
236
261
 
@@ -263,8 +288,6 @@ describe("WalletObserver", async () => {
263
288
  },
264
289
  },
265
290
  });
266
- const spiedOnConnect = spyOn(observer, "connectWallet");
267
- const spiedOnDisconnect = spyOn(observer, "disconnect");
268
291
 
269
292
  expect(observer.peerConnectInstance).toBeUndefined();
270
293
 
@@ -277,17 +300,6 @@ describe("WalletObserver", async () => {
277
300
  instance: data.instance,
278
301
  }),
279
302
  );
280
-
281
- // Simulate injection.
282
- // @ts-expect-error Simulating the actual function.
283
- data.instance.__testStartServer();
284
- expect(spiedOnConnect).toHaveBeenCalledWith("eternl-p2p");
285
-
286
- data.instance.shutdownServer();
287
- expect(spiedOnDisconnect).toHaveBeenCalled();
288
-
289
- // Restore window.
290
- delete window.cardano?.["eternl-p2p"];
291
303
  });
292
304
  });
293
305
  });
@@ -1,17 +1,16 @@
1
1
  import {
2
2
  afterAll,
3
3
  beforeAll,
4
- beforeEach,
5
4
  describe,
6
5
  expect,
7
6
  it,
7
+ Mock,
8
8
  mock,
9
9
  spyOn,
10
10
  } from "bun:test";
11
- import { merge } from "lodash";
12
11
 
13
- import { coreModuleMock } from "../../../setup-tests.js";
14
- import * as getLibModules from "../../utils/getLibs.js";
12
+ // import { coreModuleMock } from "../../../setup-tests.js";
13
+ import { Cardano } from "@cardano-sdk/core";
15
14
  import { WalletObserverUtils } from "../WalletObserverUtils.class.js";
16
15
 
17
16
  const testAddress =
@@ -19,59 +18,24 @@ const testAddress =
19
18
  const stakeAddress =
20
19
  "stake_test1uqfpl53wpdt6cgr0alrk879l5pm3jx04yx95q6g7afz3f5quuwrwt";
21
20
 
22
- const fromBech32Mock = mock();
23
- const getStakeCredentialMock = mock(() => ({
24
- hash: "121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0",
25
- type: 1,
26
- }));
27
- const fromAddressMock = mock(() => ({
28
- getPaymentCredential: mock(() => ({
29
- hash: "c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a",
30
- type: 0,
31
- })),
32
- getStakeCredential: getStakeCredentialMock,
33
- }));
34
- const isValidMock = mock();
35
- const spiedOnGetCardanoCore = spyOn(getLibModules, "getCardanoCore");
36
-
37
- beforeAll(() => {
38
- mock.module("@cardano-sdk/core", () =>
39
- merge(coreModuleMock, {
40
- Cardano: {
41
- Address: {
42
- isValidBech32: isValidMock,
43
- fromBech32: fromBech32Mock,
44
- },
45
- BaseAddress: {
46
- fromAddress: fromAddressMock,
47
- },
48
- RewardAddress: {
49
- fromCredentials: mock(() => ({
50
- toAddress: mock(() => ({
51
- toBech32: mock(() => stakeAddress),
52
- })),
53
- })),
54
- },
55
- },
56
- }),
57
- );
58
- });
59
-
60
21
  afterAll(() => {
61
22
  mock.restore();
62
23
  });
63
24
 
64
25
  describe("WalletObserverUtils", async () => {
65
- const instance = await WalletObserverUtils.new(0);
26
+ let instance: WalletObserverUtils;
27
+ let isValidMock: Mock<(bech32: string) => boolean>;
28
+ let fromBech32Mock: Mock<(bech32: string) => Cardano.Address>;
66
29
 
67
- beforeEach(() => {
68
- isValidMock.mockImplementation(() => true);
30
+ beforeAll(async () => {
31
+ instance = await WalletObserverUtils.new(0);
32
+ isValidMock = spyOn(instance.Cardano.Address, "isValidBech32");
33
+ fromBech32Mock = spyOn(instance.Cardano.Address, "fromBech32");
69
34
  });
70
35
 
71
36
  it("should instantiate with expected defaults", () => {
72
37
  expect(instance).toBeInstanceOf(WalletObserverUtils);
73
38
  expect(instance.network).toEqual(0);
74
- expect(spiedOnGetCardanoCore).toHaveBeenCalledTimes(1);
75
39
  });
76
40
 
77
41
  it("should be able to switch networks", () => {
@@ -89,7 +53,7 @@ describe("WalletObserverUtils", async () => {
89
53
  });
90
54
 
91
55
  it("should throw an error if the address is malformed", () => {
92
- isValidMock.mockImplementation(() => false);
56
+ isValidMock.mockImplementationOnce(() => false);
93
57
  expect(() => instance.getAddressDetails("invalid")).toThrowError(
94
58
  "Expected a Bech32 encoded address.",
95
59
  );
@@ -103,14 +67,12 @@ describe("WalletObserverUtils", async () => {
103
67
  stakeAddress,
104
68
  );
105
69
 
106
- isValidMock.mockImplementation(() => false);
70
+ isValidMock.mockImplementationOnce(() => false);
107
71
  expect(() => instance.getBech32StakingAddress("invalid")).toThrowError(
108
72
  "Expected a Bech32 encoded address.",
109
73
  );
110
74
  expect(isValidMock).toHaveBeenCalled();
111
75
 
112
- // @ts-expect-error It can be undefined.
113
- getStakeCredentialMock.mockImplementation(() => undefined);
114
76
  expect(() => instance.getBech32StakingAddress("invalid")).toThrowError(
115
77
  "Expected a Bech32 encoded address.",
116
78
  );
@@ -3,7 +3,7 @@ import { act } from "@testing-library/react";
3
3
  import { renderHook } from "@testing-library/react-hooks";
4
4
  import { describe, expect, it } from "bun:test";
5
5
 
6
- import { mockedEternlWallet } from "../../../../setup-tests.js";
6
+ import { mockedEternlWallet } from "../../../../../setup-tests.js";
7
7
  import {
8
8
  IWalletObserverProviderProps,
9
9
  useAvailableExtensions,
@@ -1,11 +1,12 @@
1
1
  import { act, renderHook } from "@testing-library/react-hooks";
2
2
  import { describe, expect, it } from "bun:test";
3
3
 
4
- import { assetIds } from "../../../__data__/assets.js";
4
+ import { Cardano } from "@cardano-sdk/core";
5
+ import { mockWalletAssetIds } from "../../../__data__/assets.js";
5
6
  import {
6
- network,
7
- unusedAddresses,
8
- usedAddresses,
7
+ mockNetwork,
8
+ mockUnusedAddresses,
9
+ mockUsedAddresses,
9
10
  } from "../../../__data__/eternl.js";
10
11
  import { WalletObserver } from "../../../classes/WalletObserver.class.js";
11
12
  import {
@@ -52,11 +53,21 @@ describe("useWalletObserver", () => {
52
53
 
53
54
  expect(result.current.activeWallet).toEqual("eternl");
54
55
  expect(result.current.adaBalance.amount.toString()).not.toEqual("0");
55
- expect(result.current.balance.size).toEqual(assetIds.length);
56
+ expect(result.current.balance.size).toEqual(mockWalletAssetIds.length);
56
57
  expect(result.current.isCip45).toBeFalse();
57
- expect(result.current.mainAddress).toEqual(usedAddresses[0]);
58
- expect(result.current.network).toEqual(network);
59
- expect(result.current.unusedAddresses).toEqual(unusedAddresses);
60
- expect(result.current.usedAddresses).toEqual(usedAddresses);
58
+ expect(result.current.mainAddress).toEqual(
59
+ Cardano.Address.fromString(mockUsedAddresses[0])!.toBech32(),
60
+ );
61
+ expect(result.current.network).toEqual(mockNetwork);
62
+ expect(result.current.unusedAddresses).toEqual(
63
+ mockUnusedAddresses.map((cbor) =>
64
+ Cardano.Address.fromString(cbor)!.toBech32(),
65
+ ),
66
+ );
67
+ expect(result.current.usedAddresses).toEqual(
68
+ mockUsedAddresses.map((cbor) =>
69
+ Cardano.Address.fromString(cbor)!.toBech32(),
70
+ ),
71
+ );
61
72
  });
62
73
  });
@@ -22,7 +22,12 @@ export const useWalletHandles = <
22
22
  >({
23
23
  queryKey,
24
24
  queryFn: async () => {
25
- return getHandleMetadata(state.balance.getHandles(), state.network || 0);
25
+ const result = await getHandleMetadata(
26
+ state.balance.getHandles(),
27
+ state.network || 0,
28
+ );
29
+
30
+ return result;
26
31
  },
27
32
  refetchInterval: false,
28
33
  notifyOnChangeProps: ["data", "isLoading"],