@sundaeswap/wallet-lite 0.0.15 → 0.0.17

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 (34) hide show
  1. package/dist/cjs/@types/observer.js.map +1 -1
  2. package/dist/cjs/classes/WalletObserver.class.js +114 -32
  3. package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
  4. package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +51 -11
  5. package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  6. package/dist/cjs/react-components/contexts/observer/types.js.map +1 -1
  7. package/dist/cjs/react-components/hooks/useWalletObserver.js +3 -1
  8. package/dist/cjs/react-components/hooks/useWalletObserver.js.map +1 -1
  9. package/dist/esm/@types/observer.js.map +1 -1
  10. package/dist/esm/classes/WalletObserver.class.js +51 -1
  11. package/dist/esm/classes/WalletObserver.class.js.map +1 -1
  12. package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +24 -0
  13. package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  14. package/dist/esm/react-components/contexts/observer/types.js.map +1 -1
  15. package/dist/esm/react-components/hooks/useWalletObserver.js +3 -1
  16. package/dist/esm/react-components/hooks/useWalletObserver.js.map +1 -1
  17. package/dist/types/@types/observer.d.ts +2 -0
  18. package/dist/types/@types/observer.d.ts.map +1 -1
  19. package/dist/types/classes/WalletObserver.class.d.ts +13 -0
  20. package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
  21. package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts +5 -0
  22. package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts.map +1 -1
  23. package/dist/types/react-components/contexts/observer/types.d.ts +6 -1
  24. package/dist/types/react-components/contexts/observer/types.d.ts.map +1 -1
  25. package/dist/types/react-components/hooks/useWalletObserver.d.ts.map +1 -1
  26. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  27. package/package.json +1 -1
  28. package/src/@types/observer.ts +2 -0
  29. package/src/__data__/eternl.ts +18 -0
  30. package/src/classes/WalletObserver.class.ts +77 -7
  31. package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +29 -0
  32. package/src/react-components/__tests__/RenderWalletHandles.test.tsx +0 -7
  33. package/src/react-components/contexts/observer/types.ts +9 -0
  34. package/src/react-components/hooks/useWalletObserver.ts +4 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sundaeswap/wallet-lite",
3
- "version": "0.0.15",
3
+ "version": "0.0.17",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -1,3 +1,4 @@
1
+ import type { TransactionUnspentOutput } from "@cardano-sdk/core/dist/cjs/Serialization/index.js";
1
2
  import type { Cip30WalletApi } from "@cardano-sdk/dapp-connector";
2
3
  import type { DAppPeerConnect } from "@fabianbormann/cardano-peer-connect";
3
4
  import type { DAppPeerConnectParameters } from "@fabianbormann/cardano-peer-connect/dist/src/types.js";
@@ -99,5 +100,6 @@ export interface IWalletObserverSync<
99
100
  balanceMap: WalletBalanceMap<AssetMetadata>;
100
101
  usedAddresses: string[];
101
102
  unusedAddresses: string[];
103
+ utxos?: TransactionUnspentOutput[];
102
104
  network: number;
103
105
  }
@@ -133,3 +133,21 @@ export const balance =
133
133
  "821b00000004c09febb6b818581c06dd6a12db0a3eb41a9fa243dd53df588418d4819f245f36d8c45f49aa4b5265776172645374616b65014f546173746554657374506f6c6963790150526577617264466f6c64506f6c6963790151436f6c6c656374466f6c64506f6c6963790151546f6b656e486f6c646572506f6c696379015254617374655465737456616c696461746f720153526577617264466f6c6456616c696461746f720154436f6c6c656374466f6c6456616c696461746f720154546f6b656e486f6c64657256616c696461746f7201575461737465546573745374616b6556616c696461746f7201581c14e957a7799ee1feb0afe68a7abeb6f642832d28045e71fb0003b1cba1495454507265766965771b0000001878e4fd18581c2fe3c3364b443194b10954771c95819b8d6ed464033c21f03f8facb5a144695553441b0000000185d7560a581c4086577ed57c514f8e29b78f42ef4f379363355a3b65b9a032ee30c9a1446c70202d1a00bcd161581c44a1eb2d9f58add4eb1932bd0048e6a1947e85e3fe4f32956a110414a458200014df10035002e600d25a96003ecd1746007f59bac2788355687d18c79271191a00214ed558200014df102e74e6af9739616dd021f547bca1f68c937b566bb6ca2e4782e760011a0042f18658200014df10bd9437d9ec1a559d053f05dc38d337c32d1d0746952ea961f874c39a1abe4fb74958200014df10fe7606868521244f4a86d5e88ef483de7a441b286f4d751550518ff81a37c01cb3581c633a136877ed6ad0ab33e69a22611319673474c8bd0a79a4c76d9289a158200014df101750b21414d4198763ee4d442f5c03a295a13a6028def9be4a7854631a009ca627581c6c6011f808562c80d7d24b9462e3eec41bea9d96e3e7a51e620a061ea344425443621a97883a4d444a5059621b000019f16e3daf24464d41544943621b000000024dda5412581c8140c4b89428fc264e90b10c71c53a4c3f9ce52b676bf1d9b51eb9caa458200014df100ae1b3f34bfbf30e2fb38305f3a6c27aece138ba7febe13d5db3e1341a7960ea6b58200014df1034c2b9d553d3a74b3ac67cc8cefb423af0f77fc84664420090e099901a19c9dd1f58200014df105b3955db22793705b4e6f34871ef5429bace12e909fb1ccf862c60e91a0006d2ed58200014df108bf66e915c450ad94866abb02802821b599e32f43536a42470b21ea21a005bfec8581c824faecc3a7312f5cad0397dd9ffb96e15dd4cf6a3cf16e23d7352b3a1401b000000e8d4a51000581c919d4c2c9455016289341b1a14dedf697687af31751170d56a31466ea14874434c41524954591b000000cf898883f8581c99b071ce8580d6a3a11b4902145adb8bfd0d2a03935af8cf66403e15b14443484f431a01696cc444555344431a0bebc200465242455252591b000000ba8c6bfdef465342455252591b0000596460ffa1ed48544553545f4e4654014874526577617264731a203046184a546573744173736574311a009896804a546573744173736574321a009896804a546573744173736574331a009896804a546573744173736574341a009896804a546573744173736574351a009896804a546573744173736574361a009896804a546573744173736574371a009896804a546573744173736574381a009896804a546573744173736574391a009896804b54657374417373657431301a009884405153616c7361536f6c61726973233031343101581c99e7cd5c0aca25bc3e90be7e318326a188f913a07bbfe09b3bace0d4a1495454507265766965771b00000417d7b93b42581ca51963f936f00b0def70fc1196e70603cb95c85f18e836be6ba2ad8ba149446966667573696f6e1b000000016506cbcb581cb89bdcb78010912ce6e98c97d5ab38e8e62f3d0851cdca0811e4ae92aa4b5265776172645374616b65014f546173746554657374506f6c6963790150526577617264466f6c64506f6c6963790151436f6c6c656374466f6c64506f6c6963790151546f6b656e486f6c646572506f6c696379015254617374655465737456616c696461746f720153526577617264466f6c6456616c696461746f720154436f6c6c656374466f6c6456616c696461746f720154546f6b656e486f6c64657256616c696461746f7201575461737465546573745374616b6556616c696461746f7201581cba0062b8f68bb8f80d4509e53d97a554381030b5e84832115376cb0aa148544553545f4e465401581ccaaaa4dd8b3b5c9dae65573cdb0bc2e989c43c3963d06b93d37687f1a150537461626c6520446966667573696f6e1a00273a8a581ccadd6bf1f7535eed785b01169b03fc800360b396ab5617b560fccd4ea448544553545f4e465401514e45574d5f566f74655f507265766965771b00002d794ca2a4225353616c7361536f6c61726973446973636f696e196d60554e45574d5f50726f706f73616c5f5072657669657702581cd35c752af635d9e9cb79aea44537a57a5ecd91e23133cd7f210f0070a1456d544f53491822581cd441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcfa1465242455252591a0167e3da581cd606298f0f892cce3f4df1585d3723f3817be8198abbc0c83bb89fadaa4b5265776172645374616b65014f546173746554657374506f6c6963790150526577617264466f6c64506f6c6963790151436f6c6c656374466f6c64506f6c6963790151546f6b656e486f6c646572506f6c696379015254617374655465737456616c696461746f720153526577617264466f6c6456616c696461746f720154436f6c6c656374466f6c6456616c696461746f720154546f6b656e486f6c64657256616c696461746f7201575461737465546573745374616b6556616c696461746f7201581cd805c13981d8b6b239ab4df3a3c6de653fcb426312b768e90304fa41a7581f46534e0f050513190d2dffcc8ea86a615c8cbb9690f367e439071e8d3a241c01581f46534e4bab725e4899fb4b628f8e4773fcdffcbd1b34666736d2a4d9935b6d01581f46534e6e12a1701cb5b4173e4e21bd8ffa98f4ccd2a9b90cc325f561d972f301581f46534e7ae7c9465ccc850e25cacec07820883be9e1a972931511d63d078d9401581f46534e7fa42f43b2d7e1a9d8e3276f68d37b9b8a0746991b3f7a420673aca001581f46534eb0158422435c0130845b3141353463420e28f42696c18cef305a7c3101581f46534efeae1e5d3310dab9193f315e3124e97fc462b0b523b545e235c4704b01581cd8906ca5c7ba124a0407a32dab37b2c82b13b3dcd9111e42940dcea4a1480014df105553444d1b00000037e11d5fff581cf99a0cc5bac393156aa088bbe28993679feb59de74ccdb0c8586213aa158200014df10fc2c4a6ae8048b0b5affc169dfd496a7ace7d08288c476d9d7a5804e1a000f4240581cfa3eff2047fdf9293c5feef4dc85ce58097ea1c6da4845a351535183a14574494e44591a0fbd2529";
134
134
 
135
135
  export const network = 0;
136
+
137
+ export const utxos = [
138
+ "828258202ffa2cb637456ddc2326ff71ca525cc3c066b74aa0e7251df708640280782a6f0082583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d01ab2d05e00",
139
+ "82825820739753ecb91d7ca749748e789f114db73650d70ee3241fb937abe8dba37dcb920182583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0821a1d56b205a1581c44a1eb2d9f58add4eb1932bd0048e6a1947e85e3fe4f32956a110414a158200014df10035002e600d25a96003ecd1746007f59bac2788355687d18c79271191a00214ed5",
140
+ "8282582068869e3b2181917a443240a11e865352010138b63b60fb28869779cdd459c07c0182583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0821a1109e7c0a1581c99b071ce8580d6a3a11b4902145adb8bfd0d2a03935af8cf66403e15a1465242455252591a00603449",
141
+ "82825820e44e2b827ba57ea87f9b1ae58baec750043977b6df6c7723a012cb2c56518fe90282583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d01a071fdcc0",
142
+ "828258207726e613624ffd58855e14c5763ef878964e16271b77a778ceefd1ceedb0fcd20282583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d01a62d293a6",
143
+ "828258206ea2f82ee156e9106b1e47b766e2f61a1c19c8b61eeb24e91cce465655c5ec610282583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d01ac93d1fc5",
144
+ "828258207731bd825b2d67f41bf183711886036290d464a3653a7298fba2712f9dfc8b970182583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0821a004efdeea1581c99b071ce8580d6a3a11b4902145adb8bfd0d2a03935af8cf66403e15a1465242455252591a2239d241",
145
+ "828258208be1eb6f5d2b8f9a5d3e507f9f63d99264072a12e2db165f4516d406a0c01dfc0282583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d01b0000000293c615e3",
146
+ "828258205b79717fb587c46c69d95e178867c6c5dd0e61212bbe5ee4a44b9eb097413f4d0282583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d01a0dcb3190",
147
+ "82825820626e9e5265e5c4ee3ced0041772a84cb53e531eda12f78908ff2cc4caf2ac7a40282583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0821a00bb51faa1581c99b071ce8580d6a3a11b4902145adb8bfd0d2a03935af8cf66403e15a1465242455252591a092dfde0",
148
+ "82825820aa46ff8f84d0e49fe4a0dffaff29247c7fc7c53b96012e016accab016fb51d300182583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0821a00b2c014b818581c06dd6a12db0a3eb41a9fa243dd53df588418d4819f245f36d8c45f49aa4b5265776172645374616b65014f546173746554657374506f6c6963790150526577617264466f6c64506f6c6963790151436f6c6c656374466f6c64506f6c6963790151546f6b656e486f6c646572506f6c696379015254617374655465737456616c696461746f720153526577617264466f6c6456616c696461746f720154436f6c6c656374466f6c6456616c696461746f720154546f6b656e486f6c64657256616c696461746f7201575461737465546573745374616b6556616c696461746f7201581c14e957a7799ee1feb0afe68a7abeb6f642832d28045e71fb0003b1cba1495454507265766965771b0000001878e4fd18581c2fe3c3364b443194b10954771c95819b8d6ed464033c21f03f8facb5a144695553441b0000000185d7560a581c4086577ed57c514f8e29b78f42ef4f379363355a3b65b9a032ee30c9a1446c70202d1a00bcd161581c44a1eb2d9f58add4eb1932bd0048e6a1947e85e3fe4f32956a110414a358200014df102e74e6af9739616dd021f547bca1f68c937b566bb6ca2e4782e760011a0042f18658200014df10bd9437d9ec1a559d053f05dc38d337c32d1d0746952ea961f874c39a1abe4fb74958200014df10fe7606868521244f4a86d5e88ef483de7a441b286f4d751550518ff81a37c01cb3581c633a136877ed6ad0ab33e69a22611319673474c8bd0a79a4c76d9289a158200014df101750b21414d4198763ee4d442f5c03a295a13a6028def9be4a7854631a009ca627581c6c6011f808562c80d7d24b9462e3eec41bea9d96e3e7a51e620a061ea344425443621a97883a4d444a5059621b000019f16e3daf24464d41544943621b000000024dda5412581c8140c4b89428fc264e90b10c71c53a4c3f9ce52b676bf1d9b51eb9caa458200014df100ae1b3f34bfbf30e2fb38305f3a6c27aece138ba7febe13d5db3e1341a7960ea6b58200014df1034c2b9d553d3a74b3ac67cc8cefb423af0f77fc84664420090e099901a19c9dd1f58200014df105b3955db22793705b4e6f34871ef5429bace12e909fb1ccf862c60e91a0006d2ed58200014df108bf66e915c450ad94866abb02802821b599e32f43536a42470b21ea21a005bfec8581c824faecc3a7312f5cad0397dd9ffb96e15dd4cf6a3cf16e23d7352b3a1401b000000e8d4a51000581c919d4c2c9455016289341b1a14dedf697687af31751170d56a31466ea14874434c41524954591b000000cf898883f8581c99b071ce8580d6a3a11b4902145adb8bfd0d2a03935af8cf66403e15b14443484f431a01696cc444555344431a0bebc200465242455252591b000000ba5b74e529465342455252591b0000596460ffa1ed48544553545f4e4654014874526577617264731a203046184a546573744173736574311a009896804a546573744173736574321a009896804a546573744173736574331a009896804a546573744173736574341a009896804a546573744173736574351a009896804a546573744173736574361a009896804a546573744173736574371a009896804a546573744173736574381a009896804a546573744173736574391a009896804b54657374417373657431301a009884405153616c7361536f6c61726973233031343101581c99e7cd5c0aca25bc3e90be7e318326a188f913a07bbfe09b3bace0d4a1495454507265766965771b00000417d7b93b42581ca51963f936f00b0def70fc1196e70603cb95c85f18e836be6ba2ad8ba149446966667573696f6e1b000000016506cbcb581cb89bdcb78010912ce6e98c97d5ab38e8e62f3d0851cdca0811e4ae92aa4b5265776172645374616b65014f546173746554657374506f6c6963790150526577617264466f6c64506f6c6963790151436f6c6c656374466f6c64506f6c6963790151546f6b656e486f6c646572506f6c696379015254617374655465737456616c696461746f720153526577617264466f6c6456616c696461746f720154436f6c6c656374466f6c6456616c696461746f720154546f6b656e486f6c64657256616c696461746f7201575461737465546573745374616b6556616c696461746f7201581cba0062b8f68bb8f80d4509e53d97a554381030b5e84832115376cb0aa148544553545f4e465401581ccaaaa4dd8b3b5c9dae65573cdb0bc2e989c43c3963d06b93d37687f1a150537461626c6520446966667573696f6e1a00273a8a581ccadd6bf1f7535eed785b01169b03fc800360b396ab5617b560fccd4ea448544553545f4e465401514e45574d5f566f74655f507265766965771b00002d794ca2a4225353616c7361536f6c61726973446973636f696e196d60554e45574d5f50726f706f73616c5f5072657669657702581cd35c752af635d9e9cb79aea44537a57a5ecd91e23133cd7f210f0070a1456d544f53491822581cd441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcfa1465242455252591a0167e3da581cd606298f0f892cce3f4df1585d3723f3817be8198abbc0c83bb89fadaa4b5265776172645374616b65014f546173746554657374506f6c6963790150526577617264466f6c64506f6c6963790151436f6c6c656374466f6c64506f6c6963790151546f6b656e486f6c646572506f6c696379015254617374655465737456616c696461746f720153526577617264466f6c6456616c696461746f720154436f6c6c656374466f6c6456616c696461746f720154546f6b656e486f6c64657256616c696461746f7201575461737465546573745374616b6556616c696461746f7201581cd805c13981d8b6b239ab4df3a3c6de653fcb426312b768e90304fa41a7581f46534e0f050513190d2dffcc8ea86a615c8cbb9690f367e439071e8d3a241c01581f46534e4bab725e4899fb4b628f8e4773fcdffcbd1b34666736d2a4d9935b6d01581f46534e6e12a1701cb5b4173e4e21bd8ffa98f4ccd2a9b90cc325f561d972f301581f46534e7ae7c9465ccc850e25cacec07820883be9e1a972931511d63d078d9401581f46534e7fa42f43b2d7e1a9d8e3276f68d37b9b8a0746991b3f7a420673aca001581f46534eb0158422435c0130845b3141353463420e28f42696c18cef305a7c3101581f46534efeae1e5d3310dab9193f315e3124e97fc462b0b523b545e235c4704b01581cd8906ca5c7ba124a0407a32dab37b2c82b13b3dcd9111e42940dcea4a1480014df105553444d1b00000037e11d5fff581cf99a0cc5bac393156aa088bbe28993679feb59de74ccdb0c8586213aa158200014df10fc2c4a6ae8048b0b5affc169dfd496a7ace7d08288c476d9d7a5804e1a000f4240581cfa3eff2047fdf9293c5feef4dc85ce58097ea1c6da4845a351535183a14574494e44591a0fbd2529",
149
+ "82825820aa46ff8f84d0e49fe4a0dffaff29247c7fc7c53b96012e016accab016fb51d300282583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d01a012ec474",
150
+ "82825820babbe340a5ab0d5a9d7d7b68644e49cf807de321d87e9f21e47eff5d62ff03df0282583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0821a00775e20a1581c99b071ce8580d6a3a11b4902145adb8bfd0d2a03935af8cf66403e15a1465242455252591a052f145c",
151
+ "82825820a2eea54d0d54c0bd120dfe28b28da6770938764ef6a9e421ff136e67720f72630182583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d01a05ac1642",
152
+ "82825820e0828e37187b0aace1aae10a207f4603efee98d31f9fb0335c211c510f55bb360282583900c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d0821a001ef94aa1581c4086577ed57c514f8e29b78f42ef4f379363355a3b65b9a032ee30c9a1446c7020021a0043e171",
153
+ ];
@@ -1,7 +1,8 @@
1
+ import type { TransactionUnspentOutput } from "@cardano-sdk/core/dist/cjs/Serialization/index.js";
1
2
  import type { Cip30WalletApi } from "@cardano-sdk/dapp-connector";
2
3
  import { AssetAmount, type IAssetAmountMetadata } from "@sundaeswap/asset";
3
-
4
4
  import merge from "lodash/merge.js";
5
+
5
6
  import { EWalletObserverEvents } from "../@types/events.js";
6
7
  import type {
7
8
  IResolvedWalletObserverOptions,
@@ -153,17 +154,26 @@ export class WalletObserver<
153
154
  }
154
155
  }
155
156
 
156
- const [newBalanceMap, newUsedAddresses, newUnusedAddresses] =
157
- await Promise.all([
158
- this.getBalanceMap(),
159
- this.getUsedAddresses(),
160
- this.getUnusedAddresses(),
161
- ]);
157
+ const [
158
+ newBalanceMap,
159
+ newUsedAddresses,
160
+ newUnusedAddresses,
161
+ newOutputs,
162
+ newCollateral,
163
+ ] = await Promise.all([
164
+ this.getBalanceMap(),
165
+ this.getUsedAddresses(),
166
+ this.getUnusedAddresses(),
167
+ this.getUtxos(),
168
+ this.getCollateral(),
169
+ ]);
162
170
 
163
171
  const result = {
164
172
  balanceMap: newBalanceMap,
165
173
  usedAddresses: newUsedAddresses,
166
174
  unusedAddresses: newUnusedAddresses,
175
+ utxos: newOutputs,
176
+ collateral: newCollateral,
167
177
  network: newNetwork,
168
178
  };
169
179
 
@@ -457,6 +467,66 @@ export class WalletObserver<
457
467
  return data;
458
468
  };
459
469
 
470
+ /**
471
+ * Gets a list of wallet UTXOs.
472
+ *
473
+ * @returns {Promise<TransactionUnspentOutput[]>} The list of TransactionUnspentOutputs.
474
+ */
475
+ getUtxos = async (): Promise<TransactionUnspentOutput[] | undefined> => {
476
+ if (!this.api) {
477
+ throw new Error("Attempted to query UTXOs without an API instance.");
478
+ }
479
+
480
+ const [cbor, { Serialization }, { typedHex }] = await Promise.all([
481
+ this.api.getUtxos(),
482
+ getCardanoCore(),
483
+ getCardanoUtil(),
484
+ ]);
485
+
486
+ const data = cbor?.map((val) => {
487
+ let txOutput = Serialization.TransactionUnspentOutput.fromCbor(
488
+ typedHex(val)
489
+ );
490
+
491
+ // These methods must be bound to their initial creation instance.
492
+ txOutput.input = txOutput.input.bind(txOutput);
493
+ txOutput.output = txOutput.output.bind(txOutput);
494
+ return txOutput;
495
+ });
496
+
497
+ return data;
498
+ };
499
+
500
+ /**
501
+ * Gets a list of wallet UTXOs suitable for collateral.
502
+ *
503
+ * @returns {Promise<TransactionUnspentOutput[]>} The list of TransactionUnspentOutputs.
504
+ */
505
+ getCollateral = async (): Promise<TransactionUnspentOutput[] | undefined> => {
506
+ if (!this.api) {
507
+ throw new Error("Attempted to query UTXOs without an API instance.");
508
+ }
509
+
510
+ const [cbor, { Serialization }, { typedHex }] = await Promise.all([
511
+ this.api.getCollateral(),
512
+ getCardanoCore(),
513
+ getCardanoUtil(),
514
+ ]);
515
+
516
+ const data = cbor?.map((val) => {
517
+ let txOutput = Serialization.TransactionUnspentOutput.fromCbor(
518
+ typedHex(val)
519
+ );
520
+
521
+ // These methods must be bound to their initial creation instance.
522
+ txOutput.input = txOutput.input.bind(txOutput);
523
+ txOutput.output = txOutput.output.bind(txOutput);
524
+ return txOutput;
525
+ });
526
+
527
+ return data;
528
+ };
529
+
460
530
  /**
461
531
  * Resolves metadata for the given asset IDs, using a cached version if available.
462
532
  *
@@ -1,3 +1,4 @@
1
+ import type { TransactionUnspentOutput } from "@cardano-sdk/core/dist/cjs/Serialization/index.js";
1
2
  import { AssetAmount } from "@sundaeswap/asset";
2
3
  import { useCallback, useRef, useState } from "react";
3
4
 
@@ -32,6 +33,8 @@ export const useWalletObserverState = (observer: WalletObserver) => {
32
33
  const [network, setNetwork] = useState<number | undefined>();
33
34
  const [usedAddresses, setUsedAddresses] = useState<string[]>([]);
34
35
  const [unusedAddresses, setUnusedAddresses] = useState<string[]>([]);
36
+ const [utxos, setUtxos] = useState<TransactionUnspentOutput[]>();
37
+ const [collateral, setCollateral] = useState<TransactionUnspentOutput[]>();
35
38
  const [ready, setReady] = useState(false);
36
39
  const [isCip45, setIsCip45] = useState(false);
37
40
 
@@ -49,6 +52,8 @@ export const useWalletObserverState = (observer: WalletObserver) => {
49
52
  setUnusedAddresses([]);
50
53
  setActiveWallet(undefined);
51
54
  setNetwork(undefined);
55
+ setUtxos(undefined);
56
+ setCollateral(undefined);
52
57
  return;
53
58
  }
54
59
 
@@ -90,6 +95,26 @@ export const useWalletObserverState = (observer: WalletObserver) => {
90
95
  prevValue === freshData.network ? prevValue : freshData.network
91
96
  );
92
97
 
98
+ setUtxos((prevValue) => {
99
+ const prevValueRep = prevValue?.map((v) => v.toCbor());
100
+ const newValueRep = freshData.utxos?.map((v) => v.toCbor());
101
+ if (prevValueRep !== newValueRep) {
102
+ return freshData.utxos;
103
+ }
104
+
105
+ return prevValue;
106
+ });
107
+
108
+ setCollateral((prevValue) => {
109
+ const prevValueRep = prevValue?.map((v) => v.toCbor());
110
+ const newValueRep = freshData.utxos?.map((v) => v.toCbor());
111
+ if (prevValueRep !== newValueRep) {
112
+ return freshData.utxos;
113
+ }
114
+
115
+ return prevValue;
116
+ });
117
+
93
118
  setReady(true);
94
119
  setIsCip45(newWallet.includes("p2p"));
95
120
  }, [observer]);
@@ -111,6 +136,10 @@ export const useWalletObserverState = (observer: WalletObserver) => {
111
136
  setUnusedAddresses,
112
137
  usedAddresses,
113
138
  setUsedAddresses,
139
+ utxos,
140
+ setUtxos,
141
+ collateral,
142
+ setCollateral,
114
143
  syncWallet,
115
144
  ready,
116
145
  setReady,
@@ -50,13 +50,6 @@ describe("RenderWalletHandles", () => {
50
50
  () => async () => mockHandleMetadata
51
51
  );
52
52
 
53
- // Necessary because we are mocking transitions and this will return false.
54
- // const spiedOnUseDerivedState = spyOn(derivedStateHook, "useDerivedState");
55
- // spiedOnUseDerivedState.mockImplementation(() => ({
56
- // mainAddress: "0c279a3fb3b4e62bbc78e288783b58045d4ae82a18867d8352d02775a121fd22e0b57ac206fefc763f8bfa0771919f5218b40691eea4514d00",
57
- // stakeAddress: "",
58
- // }));
59
-
60
53
  const { container, getByTestId, queryByTestId, rerender } = render(
61
54
  <RenderWalletHandles render={TestComponent} />,
62
55
  {
@@ -1,3 +1,4 @@
1
+ import type { TransactionUnspentOutput } from "@cardano-sdk/core/dist/cjs/Serialization/index.js";
1
2
  import type { IHandle } from "@koralabs/adahandle-sdk";
2
3
  import type { AssetAmount, IAssetAmountMetadata } from "@sundaeswap/asset";
3
4
  import type { Dispatch, MutableRefObject, SetStateAction } from "react";
@@ -58,6 +59,12 @@ export interface IWalletObserverState<
58
59
  >;
59
60
  adaBalance: AssetAmount<AssetMetadata>;
60
61
  balance: WalletBalanceMap<AssetMetadata>;
62
+ utxos?: TransactionUnspentOutput[];
63
+ setUtxos: Dispatch<SetStateAction<TransactionUnspentOutput[] | undefined>>;
64
+ collateral?: TransactionUnspentOutput[];
65
+ setCollateral: Dispatch<
66
+ SetStateAction<TransactionUnspentOutput[] | undefined>
67
+ >;
61
68
  setBalance: Dispatch<SetStateAction<WalletBalanceMap<AssetMetadata>>>;
62
69
  observer: WalletObserver;
63
70
  mainAddress?: string;
@@ -95,4 +102,6 @@ export type TUseWalletObserverState<
95
102
  | "setUsedAddresses"
96
103
  | "setReady"
97
104
  | "setIsCip45"
105
+ | "setUtxos"
106
+ | "setCollateral"
98
107
  >;
@@ -26,6 +26,8 @@ export const useWalletObserver = <
26
26
  mainAddress: state.mainAddress,
27
27
  stakeAddress: state.stakeAddress,
28
28
  network: state.network,
29
+ utxos: state.utxos,
30
+ collateral: state.collateral,
29
31
  observer: state.observer,
30
32
  syncWallet: state.syncWallet,
31
33
  unusedAddresses: state.unusedAddresses,
@@ -44,6 +46,8 @@ export const useWalletObserver = <
44
46
  state.syncWallet,
45
47
  state.unusedAddresses,
46
48
  state.usedAddresses,
49
+ state.utxos,
50
+ state.collateral,
47
51
  state.ready,
48
52
  state.isCip45,
49
53
  ]);