@sundaeswap/wallet-lite 0.0.16 → 0.0.18
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.
- package/dist/cjs/@types/observer.js.map +1 -1
- package/dist/cjs/classes/WalletAssetMap.class.js +74 -0
- package/dist/cjs/classes/WalletAssetMap.class.js.map +1 -0
- package/dist/cjs/classes/WalletBalanceMap.class.js +9 -11
- package/dist/cjs/classes/WalletBalanceMap.class.js.map +1 -1
- package/dist/cjs/classes/WalletObserver.class.js +78 -36
- package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +32 -11
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
- package/dist/cjs/react-components/contexts/observer/types.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletHandles.js +26 -21
- package/dist/cjs/react-components/hooks/useWalletHandles.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletObserver.js +2 -1
- package/dist/cjs/react-components/hooks/useWalletObserver.js.map +1 -1
- package/dist/cjs/utils/assets.js +35 -0
- package/dist/cjs/utils/assets.js.map +1 -0
- package/dist/esm/@types/observer.js.map +1 -1
- package/dist/esm/classes/WalletAssetMap.class.js +38 -0
- package/dist/esm/classes/WalletAssetMap.class.js.map +1 -0
- package/dist/esm/classes/WalletBalanceMap.class.js +5 -4
- package/dist/esm/classes/WalletBalanceMap.class.js.map +1 -1
- package/dist/esm/classes/WalletObserver.class.js +31 -5
- package/dist/esm/classes/WalletObserver.class.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +14 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
- package/dist/esm/react-components/contexts/observer/types.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletHandles.js +11 -10
- package/dist/esm/react-components/hooks/useWalletHandles.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletObserver.js +2 -1
- package/dist/esm/react-components/hooks/useWalletObserver.js.map +1 -1
- package/dist/esm/utils/assets.js +28 -0
- package/dist/esm/utils/assets.js.map +1 -0
- package/dist/types/@types/observer.d.ts +5 -3
- package/dist/types/@types/observer.d.ts.map +1 -1
- package/dist/types/classes/WalletAssetMap.class.d.ts +29 -0
- package/dist/types/classes/WalletAssetMap.class.d.ts.map +1 -0
- package/dist/types/classes/WalletBalanceMap.class.d.ts +3 -2
- package/dist/types/classes/WalletBalanceMap.class.d.ts.map +1 -1
- package/dist/types/classes/WalletObserver.class.d.ts +6 -0
- package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts +2 -0
- package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts.map +1 -1
- package/dist/types/react-components/contexts/observer/types.d.ts +3 -1
- package/dist/types/react-components/contexts/observer/types.d.ts.map +1 -1
- package/dist/types/react-components/hooks/useWalletHandles.d.ts.map +1 -1
- package/dist/types/react-components/hooks/useWalletObserver.d.ts.map +1 -1
- package/dist/types/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/utils/assets.d.ts +15 -0
- package/dist/types/utils/assets.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/@types/observer.ts +9 -3
- package/src/__data__/assets.ts +3 -2
- package/src/classes/WalletAssetMap.class.ts +40 -0
- package/src/classes/WalletBalanceMap.class.ts +5 -4
- package/src/classes/WalletObserver.class.ts +56 -11
- package/src/classes/__tests__/WalletBalanceMap.test.ts +2 -1
- package/src/classes/__tests__/WalletObserver.test.ts +10 -3
- package/src/index.ts +2 -0
- package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +16 -1
- package/src/react-components/__tests__/__snapshots__/RenderWalletHandles.test.tsx.snap +2 -2
- package/src/react-components/contexts/observer/types.ts +5 -0
- package/src/react-components/hooks/useWalletHandles.ts +35 -29
- package/src/react-components/hooks/useWalletObserver.ts +2 -0
- package/src/utils/assets.ts +31 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WalletObserver.class.js","names":["AssetAmount","merge","EWalletObserverEvents","getCardanoCore","getCardanoUtil","getPeerConnect","WalletBalanceMap","WalletObserverEvent","WalletObserverUtils","WalletObserver","constructor","options","_defineProperty","Map","api","Error","_performingSync","dispatch","SYNCING_WALLET_START","newNetwork","getNetwork","e","syncApi","SYNCING_WALLET_END","newBalanceMap","newUsedAddresses","newUnusedAddresses","newOutputs","Promise","all","getBalanceMap","getUsedAddresses","getUnusedAddresses","getUtxos","result","balanceMap","usedAddresses","unusedAddresses","utxos","network","activeWallet","attempts","undefined","_activeWallet","selectedWallet","window","cardano","enable","getNetworkId","res","setTimeout","_options","extension","CONNECT_WALLET_START","extensionObject","includes","peerConnectInstance","shutdownServer","connectTimeout","persistence","seed","localStorage","setItem","PERSISTENCE_CACHE_KEY","JSON","stringify","CONNECT_WALLET_END","DAppPeerConnect","peerConnectArgs","name","dAppInfo","icon","getIdenticon","instance","_cachedMetadata","_supportedExtensions","removeItem","DISCONNECT","GET_BALANCE_MAP_START","cbor","Serialization","typedHex","getBalance","data","Value","fromCbor","multiassetKeys","multiasset","keys","metadata","__metadataResolverWithCache","ADA_ASSET_ID","set","coin","get","multiassetEntries","entries","id","amount","GET_BALANCE_MAP_END","val","Cardano","map","Address","fromBytes","toBech32","txOutput","TransactionUnspentOutput","input","bind","output","assetIds","cachedKeys","Set","inputKeys","size","every","key","has","newMetadata","metadataResolver","forEach","assetId","decimals","fallbackMetadataResolver","url","location","hostname","onApiEject","address","disconnect","onApiInject","connectWallet","verifyConnection","walletInfo","callback","requestAutoconnect","useWalletDiscovery","announce","savedWallet","getItem","parse","isSyncing","getUtils","utils","new"],"sources":["../../../src/classes/WalletObserver.class.ts"],"sourcesContent":["import type { TransactionUnspentOutput } from \"@cardano-sdk/core/dist/cjs/Serialization/index.js\";\nimport type { Cip30WalletApi } from \"@cardano-sdk/dapp-connector\";\nimport { AssetAmount, type IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport merge from \"lodash/merge.js\";\n\nimport { EWalletObserverEvents } from \"../@types/events.js\";\nimport type {\n IResolvedWalletObserverOptions,\n IWalletObserverSeed,\n IWalletObserverSync,\n TMetadataResolverFunc,\n TSupportedWalletExtensions,\n TWalletObserverOptions,\n} from \"../@types/observer.js\";\nimport {\n getCardanoCore,\n getCardanoUtil,\n getPeerConnect,\n} from \"../utils/getLibs.js\";\nimport { WalletBalanceMap } from \"./WalletBalanceMap.class.js\";\nimport { WalletObserverEvent } from \"./WalletObserverEvent.js\";\nimport { WalletObserverUtils } from \"./WalletObserverUtils.class.js\";\n\n/**\n * Class representing the Wallet Observer. This is the main interface\n * for interacting with a wallet extension that is available in the\n * browser window. It handles all the deserialization required when\n * querying raw data from a CIP-30 API, and converts it to readable and\n * usable interfaces.\n *\n * Notably, it extends the WalletObserverEvent class which\n * acts as an internal event handler to hook into actions, such as connecting,\n * syncing, and disconnecting.\n *\n * @template AssetMetadata - Type extending IAssetAmountMetadata.\n * @extends {WalletObserverEvent}\n */\nexport class WalletObserver<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n> extends WalletObserverEvent {\n static PERSISTENCE_CACHE_KEY = \"walletObserver\";\n static ADA_ASSET_ID = \"ada.lovelace\";\n public network: number = 0;\n public api?: Cip30WalletApi;\n public utils?: WalletObserverUtils;\n public peerConnectInstance?: import(\"@fabianbormann/cardano-peer-connect\").DAppPeerConnect;\n\n private _performingSync: boolean = false;\n private _activeWallet?: TSupportedWalletExtensions;\n private _options: IResolvedWalletObserverOptions<AssetMetadata>;\n private _supportedExtensions: TSupportedWalletExtensions[] = [\n \"eternl\",\n \"lace\",\n \"typhon\",\n \"sorbet\",\n \"flint\",\n \"nami\",\n ];\n\n // Caching\n private _cachedMetadata: Map<string, AssetMetadata> = new Map();\n\n /**\n * Creates an instance of WalletObserver.\n *\n * @param {Partial<TWalletObserverOptions<AssetMetadata>>} [options] - Options for the wallet observer.\n */\n constructor(options?: Partial<TWalletObserverOptions<AssetMetadata>>) {\n super();\n\n // Set options.\n this._options = merge<IResolvedWalletObserverOptions, typeof options>(\n {\n metadataResolver: this.fallbackMetadataResolver,\n persistence: false,\n connectTimeout: 10000,\n peerConnectArgs: {\n dAppInfo: {\n name: \"Placeholder dApp Connecter Name\",\n url: window.location.hostname,\n },\n onApiEject: (name, address) => {\n options?.peerConnectArgs?.onApiEject?.(name, address);\n this.disconnect();\n },\n onApiInject: (name, address) => {\n options?.peerConnectArgs?.onApiInject?.(name, address);\n this.connectWallet(name as TSupportedWalletExtensions);\n },\n verifyConnection(walletInfo, callback) {\n return callback(true, walletInfo.requestAutoconnect ?? true);\n },\n useWalletDiscovery: true,\n announce: [\n \"wss://tracker.de-5.eternl.art\",\n \"wss://tracker.de-6.eternl.art\",\n \"wss://tracker.us-5.eternl.art\",\n ],\n },\n },\n options\n );\n\n if (!this._options.persistence) {\n return;\n }\n\n const savedWallet = window.localStorage.getItem(\n WalletObserver.PERSISTENCE_CACHE_KEY\n );\n\n if (!savedWallet) {\n return;\n }\n\n // Init connection\n const seed: IWalletObserverSeed = JSON.parse(savedWallet);\n this.connectWallet(seed.activeWallet);\n }\n\n /**\n * Synchronizes the wallet. This method handles syncing the class\n * against the currently selected active wallet. If the wallet has\n * changed networks, or if the account within the wallet has changed,\n * this method will automatically attempt to reconcile this error before\n * eventually throwing.\n *\n * In the event that a promise will not resolve due to external issues,\n * after 7 seconds, a timeout function will fire that resets the API and tries again.\n *\n * @returns {Promise<IWalletObserverSync>} - A promise that resolves to the wallet sync data.\n */\n sync = async (): Promise<IWalletObserverSync> => {\n if (!this.api) {\n throw new Error(\n \"Attempted to perform a sync operation without a connected wallet.\"\n );\n }\n\n this._performingSync = true;\n this.dispatch(EWalletObserverEvents.SYNCING_WALLET_START);\n\n let newNetwork: number;\n try {\n newNetwork = await this.getNetwork();\n } catch (e) {\n try {\n await this.syncApi();\n newNetwork = await this.getNetwork();\n } catch (e) {\n this.dispatch(EWalletObserverEvents.SYNCING_WALLET_END);\n this._performingSync = false;\n throw e;\n }\n }\n\n const [newBalanceMap, newUsedAddresses, newUnusedAddresses, newOutputs] =\n await Promise.all([\n this.getBalanceMap(),\n this.getUsedAddresses(),\n this.getUnusedAddresses(),\n this.getUtxos(),\n ]);\n\n const result = {\n balanceMap: newBalanceMap,\n usedAddresses: newUsedAddresses,\n unusedAddresses: newUnusedAddresses,\n utxos: newOutputs,\n network: newNetwork,\n };\n\n this.dispatch(EWalletObserverEvents.SYNCING_WALLET_END, result);\n this._performingSync = false;\n\n return result;\n };\n\n /**\n * Helper method to check if the class is currently performing a sync\n * operation. This is useful to avoid duplicate calls, but does not\n * prevent it within the class.\n *\n * @returns {boolean}\n */\n isSyncing(): boolean {\n return this._performingSync;\n }\n\n /**\n * Synchronizes the API with the wallet. This is useful if the account has changed,\n * but the underlying intent has not.\n *\n * @param {TSupportedWalletExtensions} [activeWallet] - The wallet to sync with.\n * @returns {Promise<Cip30WalletApi>} - A promise that resolves to the API instance.\n */\n syncApi = async (activeWallet?: TSupportedWalletExtensions): Promise<any> => {\n let attempts = 0;\n this.api = undefined;\n if (!activeWallet && !this._activeWallet) {\n throw new Error(\n \"A wallet is required to be passed as a parameter, or to be defined in the class.\"\n );\n }\n\n const selectedWallet =\n activeWallet || (this._activeWallet as TSupportedWalletExtensions);\n\n while (!this.api) {\n if (attempts === 10) {\n throw new Error(\n \"Could not reconnect to the selected wallet. Please check your extension.\"\n );\n }\n\n try {\n const api = await window.cardano?.[selectedWallet]?.enable();\n\n if (!api) {\n throw Error;\n }\n\n this.api = api;\n this.network = await api.getNetworkId();\n } catch (e) {\n await new Promise((res) => setTimeout(res, 200));\n attempts++;\n }\n }\n\n return this.api;\n };\n\n /**\n * Gets the options for the wallet observer.\n *\n * @returns {TWalletObserverOptions} - The wallet observer options.\n */\n getOptions = (): TWalletObserverOptions => {\n return this._options;\n };\n\n /**\n * Attempts to connect a wallet using the global window\n * reference. If no reference is found, it will retry for\n * 10 seconds before throw an error.\n *\n * @param {string} extension The name of the extension to enable.\n * @return {Promise<void>}\n */\n connectWallet = async (\n extension: TSupportedWalletExtensions\n ): Promise<void> => {\n this.dispatch(EWalletObserverEvents.CONNECT_WALLET_START);\n\n let attempts = 0;\n let extensionObject = window.cardano?.[extension];\n\n // Disconnect any CIP45 connections.\n if (!extension?.includes(\"p2p\")) {\n this.peerConnectInstance?.shutdownServer();\n }\n\n while (typeof extensionObject === \"undefined\") {\n if (attempts === 40) {\n break;\n }\n\n await new Promise((res) =>\n setTimeout(res, (this._options.connectTimeout as number) / 40)\n );\n extensionObject = window.cardano?.[extension];\n attempts++;\n }\n\n if (!extensionObject) {\n throw new Error(\"Wallet extension not found in the global context.\");\n }\n\n await this.syncApi(extension);\n\n this._activeWallet = extension;\n if (this._options.persistence) {\n const seed: IWalletObserverSeed = {\n activeWallet: extension,\n };\n\n window.localStorage.setItem(\n WalletObserver.PERSISTENCE_CACHE_KEY,\n JSON.stringify(seed)\n );\n }\n\n this.dispatch(EWalletObserverEvents.CONNECT_WALLET_END, {\n extension,\n });\n };\n\n getCip45Instance = async () => {\n if (!this.peerConnectInstance) {\n const { DAppPeerConnect } = await getPeerConnect();\n this.peerConnectInstance = new DAppPeerConnect(\n this._options.peerConnectArgs\n );\n }\n\n return {\n name: this._options.peerConnectArgs.dAppInfo.name,\n icon: this.peerConnectInstance.getIdenticon(),\n instance: this.peerConnectInstance,\n };\n };\n\n /**\n * Helper function to retrieve currently active wallet connection, if present.\n *\n * @returns {TSupportedWalletExtensions | undefined}\n */\n getActiveWallet = (): TSupportedWalletExtensions | undefined => {\n return this._activeWallet;\n };\n\n /**\n * Helper function to retrieve the currently cached metadata.\n *\n * @returns {Map<string, AssetMetadata>}\n */\n getCachedAssetMetadata = (): Map<string, AssetMetadata> =>\n this._cachedMetadata;\n\n /**\n * Helper function to retrieve a list of supported wallet extensions.\n *\n * @returns {keyof TSupportedWalletExtensions[] | undefined}\n */\n getSupportedExtensions = (): TSupportedWalletExtensions[] => {\n return this._supportedExtensions;\n };\n\n /**\n * Helper function to restore the class instance to its initial state.\n *\n * @returns {void}\n */\n disconnect = (): void => {\n this._activeWallet = undefined;\n this.api = undefined;\n this._cachedMetadata = new Map();\n window.localStorage.removeItem(WalletObserver.PERSISTENCE_CACHE_KEY);\n this.dispatch(EWalletObserverEvents.DISCONNECT);\n };\n\n /**\n * Retrieves the balance of the wallet, including metadata for each asset.\n *\n * @returns {Promise<WalletBalanceMap<AssetMetadata>>} - A promise that resolves to a map of asset amounts keyed by asset IDs.\n */\n getBalanceMap = async (): Promise<WalletBalanceMap<AssetMetadata>> => {\n if (!this.api) {\n throw new Error(\"Attempted to query balance without an API instance.\");\n }\n\n this.dispatch(EWalletObserverEvents.GET_BALANCE_MAP_START);\n const [cbor, { Serialization }, { typedHex }] = await Promise.all([\n this.api.getBalance(),\n getCardanoCore(),\n getCardanoUtil(),\n ]);\n\n const data = Serialization.Value.fromCbor(typedHex(cbor));\n const multiassetKeys = data.multiasset()?.keys() ?? [];\n\n const metadata = await this.__metadataResolverWithCache([\n WalletObserver.ADA_ASSET_ID,\n ...multiassetKeys,\n ]);\n\n const balanceMap = new WalletBalanceMap<AssetMetadata>(this);\n balanceMap.set(\n WalletObserver.ADA_ASSET_ID,\n new AssetAmount(data.coin(), metadata.get(WalletObserver.ADA_ASSET_ID))\n );\n\n const multiassetEntries = data.multiasset()?.entries() ?? [];\n if (multiassetEntries) {\n for (const [id, amount] of multiassetEntries) {\n balanceMap.set(id, new AssetAmount(amount, metadata.get(id)));\n }\n }\n\n this.dispatch(EWalletObserverEvents.GET_BALANCE_MAP_END, {\n balanceMap,\n });\n\n return balanceMap;\n };\n\n /**\n * Gets the current network connection.\n *\n * @returns {Promise<number>} The network ID.\n */\n getNetwork = async (): Promise<number> => {\n if (!this.api) {\n throw new Error(\"Attempted to query network without an API instance.\");\n }\n\n const val = await this.api.getNetworkId();\n this.network = val;\n return val;\n };\n\n /**\n * Gets a list of used addresses, encoded as Bech32.\n *\n * @returns {Promise<string[]>} The list of addresses.\n */\n getUsedAddresses = async (): Promise<string[]> => {\n if (!this.api) {\n throw new Error(\n \"Attempted to query used addresses without an API instance.\"\n );\n }\n\n const [cbor, { Cardano }, { typedHex }] = await Promise.all([\n this.api.getUsedAddresses(),\n getCardanoCore(),\n getCardanoUtil(),\n ]);\n\n const data = cbor.map((val) =>\n Cardano.Address.fromBytes(typedHex(val)).toBech32()\n );\n\n return data;\n };\n\n /**\n * Gets a list of unused addresses, encoded as Bech32.\n *\n * @returns {Promise<string[]>} The list of addresses.\n */\n getUnusedAddresses = async (): Promise<string[]> => {\n if (!this.api) {\n throw new Error(\n \"Attempted to query unused addresses without an API instance.\"\n );\n }\n\n const [cbor, { Cardano }, { typedHex }] = await Promise.all([\n this.api.getUnusedAddresses(),\n getCardanoCore(),\n getCardanoUtil(),\n ]);\n\n const data = cbor.map((val) =>\n Cardano.Address.fromBytes(typedHex(val)).toBech32()\n );\n\n return data;\n };\n\n /**\n * Gets a list of wallet UTXOs.\n *\n * @returns {Promise<TransactionUnspentOutput[]>} The list of TransactionUnspentOutputs.\n */\n getUtxos = async (): Promise<TransactionUnspentOutput[] | undefined> => {\n if (!this.api) {\n throw new Error(\"Attempted to query UTXOs without an API instance.\");\n }\n\n const [cbor, { Serialization }, { typedHex }] = await Promise.all([\n this.api.getUtxos(),\n getCardanoCore(),\n getCardanoUtil(),\n ]);\n\n const data = cbor?.map((val) => {\n let txOutput = Serialization.TransactionUnspentOutput.fromCbor(\n typedHex(val)\n );\n\n // These methods must be bound to their initial creation instance.\n txOutput.input = txOutput.input.bind(txOutput);\n txOutput.output = txOutput.output.bind(txOutput);\n return txOutput;\n });\n\n return data;\n };\n\n /**\n * Resolves metadata for the given asset IDs, using a cached version if available.\n *\n * @private\n * @param {string[]} assetIds - The IDs of the assets to resolve metadata for.\n * @returns {Promise<Map<string, AssetMetadata>>} - A promise that resolves to a map of asset metadata.\n */\n private __metadataResolverWithCache = async (\n assetIds: string[]\n ): Promise<Map<string, AssetMetadata>> => {\n if (this._cachedMetadata) {\n const cachedKeys = new Set(this._cachedMetadata.keys());\n const inputKeys = new Set(assetIds);\n\n if (\n cachedKeys.size === inputKeys.size &&\n [...cachedKeys].every((key) => inputKeys.has(key))\n ) {\n return this._cachedMetadata;\n }\n }\n\n const newMetadata = await this._options.metadataResolver(assetIds);\n this._cachedMetadata = newMetadata;\n return newMetadata;\n };\n\n /**\n * A fallback metadata resolver function that generates default metadata for given asset IDs.\n *\n * @type {TMetadataResolverFunc<AssetMetadata>}\n */\n public fallbackMetadataResolver: TMetadataResolverFunc<AssetMetadata> =\n async (assetIds) => {\n const map = new Map<string, AssetMetadata>();\n assetIds.forEach((id) =>\n map.set(id, {\n assetId: id,\n decimals: 6,\n } as AssetMetadata)\n );\n\n return map;\n };\n\n /**\n * Helper method to retrieve the cached utils instance.\n *\n * @returns {Promise<WalletObserverUtils>} Resolves to a WalletObserverUtils class.\n */\n public async getUtils(): Promise<WalletObserverUtils> {\n if (!this.utils) {\n this.utils = await WalletObserverUtils.new(this.network);\n }\n\n return this.utils;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"WalletObserver.class.js","names":["AssetAmount","merge","EWalletObserverEvents","isAdaAsset","normalizeAssetIdWithDot","getCardanoCore","getCardanoUtil","getPeerConnect","WalletBalanceMap","WalletObserverEvent","WalletObserverUtils","WalletObserver","constructor","options","_defineProperty","Map","api","Error","_performingSync","dispatch","SYNCING_WALLET_START","newNetwork","getNetwork","e","syncApi","SYNCING_WALLET_END","newBalanceMap","newUsedAddresses","newUnusedAddresses","newOutputs","newCollateral","Promise","all","getBalanceMap","getUsedAddresses","getUnusedAddresses","getUtxos","getCollateral","result","balanceMap","usedAddresses","unusedAddresses","utxos","collateral","network","activeWallet","attempts","undefined","_activeWallet","selectedWallet","window","cardano","enable","getNetworkId","res","setTimeout","_options","extension","CONNECT_WALLET_START","extensionObject","includes","peerConnectInstance","shutdownServer","connectTimeout","persistence","seed","localStorage","setItem","PERSISTENCE_CACHE_KEY","JSON","stringify","CONNECT_WALLET_END","DAppPeerConnect","peerConnectArgs","name","dAppInfo","icon","getIdenticon","instance","_cachedMetadata","_supportedExtensions","removeItem","DISCONNECT","GET_BALANCE_MAP_START","cbor","Serialization","typedHex","getBalance","data","Value","fromCbor","multiassetKeys","multiasset","keys","metadata","__metadataResolverWithCache","ADA_ASSET_ID","set","coin","get","multiassetEntries","entries","id","amount","GET_BALANCE_MAP_END","val","Cardano","map","Address","fromBytes","toBech32","txOutput","TransactionUnspentOutput","input","bind","output","assetIds","cachedKeys","Set","inputKeys","size","every","key","has","newMetadata","metadataResolver","forEach","assetId","decimals","fallbackMetadataResolver","url","location","hostname","onApiEject","address","disconnect","onApiInject","connectWallet","verifyConnection","walletInfo","callback","requestAutoconnect","useWalletDiscovery","announce","savedWallet","getItem","parse","isSyncing","getUtils","utils","new"],"sources":["../../../src/classes/WalletObserver.class.ts"],"sourcesContent":["import type { TransactionUnspentOutput } from \"@cardano-sdk/core/dist/cjs/Serialization/index.js\";\nimport type { Cip30WalletApi } from \"@cardano-sdk/dapp-connector\";\nimport { AssetAmount, type IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport merge from \"lodash/merge.js\";\n\nimport { EWalletObserverEvents } from \"../@types/events.js\";\nimport type {\n IResolvedWalletObserverOptions,\n IWalletObserverSeed,\n IWalletObserverSync,\n TMetadataResolverFunc,\n TSupportedWalletExtensions,\n TWalletObserverOptions,\n} from \"../@types/observer.js\";\nimport { isAdaAsset, normalizeAssetIdWithDot } from \"../utils/assets.js\";\nimport {\n getCardanoCore,\n getCardanoUtil,\n getPeerConnect,\n} from \"../utils/getLibs.js\";\nimport { WalletBalanceMap } from \"./WalletBalanceMap.class.js\";\nimport { WalletObserverEvent } from \"./WalletObserverEvent.js\";\nimport { WalletObserverUtils } from \"./WalletObserverUtils.class.js\";\n\n/**\n * Class representing the Wallet Observer. This is the main interface\n * for interacting with a wallet extension that is available in the\n * browser window. It handles all the deserialization required when\n * querying raw data from a CIP-30 API, and converts it to readable and\n * usable interfaces.\n *\n * Notably, it extends the WalletObserverEvent class which\n * acts as an internal event handler to hook into actions, such as connecting,\n * syncing, and disconnecting.\n *\n * @template AssetMetadata - Type extending IAssetAmountMetadata.\n * @extends {WalletObserverEvent}\n */\nexport class WalletObserver<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n> extends WalletObserverEvent {\n static PERSISTENCE_CACHE_KEY = \"walletObserver\";\n static ADA_ASSET_ID = \"ada.lovelace\";\n public network: number = 0;\n public api?: Cip30WalletApi;\n public utils?: WalletObserverUtils;\n public peerConnectInstance?: import(\"@fabianbormann/cardano-peer-connect\").DAppPeerConnect;\n\n private _performingSync: boolean = false;\n private _activeWallet?: TSupportedWalletExtensions;\n private _options: IResolvedWalletObserverOptions<AssetMetadata>;\n private _supportedExtensions: TSupportedWalletExtensions[] = [\n \"eternl\",\n \"lace\",\n \"typhon\",\n \"sorbet\",\n \"flint\",\n \"nami\",\n ];\n\n // Caching\n private _cachedMetadata: Map<string, AssetMetadata> = new Map();\n\n /**\n * Creates an instance of WalletObserver.\n *\n * @param {Partial<TWalletObserverOptions<AssetMetadata>>} [options] - Options for the wallet observer.\n */\n constructor(options?: Partial<TWalletObserverOptions<AssetMetadata>>) {\n super();\n\n // Set options.\n this._options = merge<IResolvedWalletObserverOptions, typeof options>(\n {\n metadataResolver: this.fallbackMetadataResolver,\n persistence: false,\n connectTimeout: 10000,\n peerConnectArgs: {\n dAppInfo: {\n name: \"Placeholder dApp Connecter Name\",\n url: window.location.hostname,\n },\n onApiEject: (name, address) => {\n options?.peerConnectArgs?.onApiEject?.(name, address);\n this.disconnect();\n },\n onApiInject: (name, address) => {\n options?.peerConnectArgs?.onApiInject?.(name, address);\n this.connectWallet(name as TSupportedWalletExtensions);\n },\n verifyConnection(walletInfo, callback) {\n return callback(true, walletInfo.requestAutoconnect ?? true);\n },\n useWalletDiscovery: true,\n announce: [\n \"wss://tracker.de-5.eternl.art\",\n \"wss://tracker.de-6.eternl.art\",\n \"wss://tracker.us-5.eternl.art\",\n ],\n },\n },\n options\n );\n\n if (!this._options.persistence) {\n return;\n }\n\n const savedWallet = window.localStorage.getItem(\n WalletObserver.PERSISTENCE_CACHE_KEY\n );\n\n if (!savedWallet) {\n return;\n }\n\n // Init connection\n const seed: IWalletObserverSeed = JSON.parse(savedWallet);\n this.connectWallet(seed.activeWallet);\n }\n\n /**\n * Synchronizes the wallet. This method handles syncing the class\n * against the currently selected active wallet. If the wallet has\n * changed networks, or if the account within the wallet has changed,\n * this method will automatically attempt to reconcile this error before\n * eventually throwing.\n *\n * In the event that a promise will not resolve due to external issues,\n * after 7 seconds, a timeout function will fire that resets the API and tries again.\n *\n * @returns {Promise<IWalletObserverSync>} - A promise that resolves to the wallet sync data.\n */\n sync = async (): Promise<IWalletObserverSync> => {\n if (!this.api) {\n throw new Error(\n \"Attempted to perform a sync operation without a connected wallet.\"\n );\n }\n\n this._performingSync = true;\n this.dispatch(EWalletObserverEvents.SYNCING_WALLET_START);\n\n let newNetwork: number;\n try {\n newNetwork = await this.getNetwork();\n } catch (e) {\n try {\n await this.syncApi();\n newNetwork = await this.getNetwork();\n } catch (e) {\n this.dispatch(EWalletObserverEvents.SYNCING_WALLET_END);\n this._performingSync = false;\n throw e;\n }\n }\n\n const [\n newBalanceMap,\n newUsedAddresses,\n newUnusedAddresses,\n newOutputs,\n newCollateral,\n ] = await Promise.all([\n this.getBalanceMap(),\n this.getUsedAddresses(),\n this.getUnusedAddresses(),\n this.getUtxos(),\n this.getCollateral(),\n ]);\n\n const result = {\n balanceMap: newBalanceMap,\n usedAddresses: newUsedAddresses,\n unusedAddresses: newUnusedAddresses,\n utxos: newOutputs,\n collateral: newCollateral,\n network: newNetwork,\n };\n\n this.dispatch(EWalletObserverEvents.SYNCING_WALLET_END, result);\n this._performingSync = false;\n\n return result;\n };\n\n /**\n * Helper method to check if the class is currently performing a sync\n * operation. This is useful to avoid duplicate calls, but does not\n * prevent it within the class.\n *\n * @returns {boolean}\n */\n isSyncing(): boolean {\n return this._performingSync;\n }\n\n /**\n * Synchronizes the API with the wallet. This is useful if the account has changed,\n * but the underlying intent has not.\n *\n * @param {TSupportedWalletExtensions} [activeWallet] - The wallet to sync with.\n * @returns {Promise<Cip30WalletApi>} - A promise that resolves to the API instance.\n */\n syncApi = async (activeWallet?: TSupportedWalletExtensions): Promise<any> => {\n let attempts = 0;\n this.api = undefined;\n if (!activeWallet && !this._activeWallet) {\n throw new Error(\n \"A wallet is required to be passed as a parameter, or to be defined in the class.\"\n );\n }\n\n const selectedWallet =\n activeWallet || (this._activeWallet as TSupportedWalletExtensions);\n\n while (!this.api) {\n if (attempts === 10) {\n throw new Error(\n \"Could not reconnect to the selected wallet. Please check your extension.\"\n );\n }\n\n try {\n const api = await window.cardano?.[selectedWallet]?.enable();\n\n if (!api) {\n throw Error;\n }\n\n this.api = api;\n this.network = await api.getNetworkId();\n } catch (e) {\n await new Promise((res) => setTimeout(res, 200));\n attempts++;\n }\n }\n\n return this.api;\n };\n\n /**\n * Gets the options for the wallet observer.\n *\n * @returns {TWalletObserverOptions} - The wallet observer options.\n */\n getOptions = (): TWalletObserverOptions => {\n return this._options;\n };\n\n /**\n * Attempts to connect a wallet using the global window\n * reference. If no reference is found, it will retry for\n * 10 seconds before throw an error.\n *\n * @param {string} extension The name of the extension to enable.\n * @return {Promise<void>}\n */\n connectWallet = async (\n extension: TSupportedWalletExtensions\n ): Promise<void> => {\n this.dispatch(EWalletObserverEvents.CONNECT_WALLET_START);\n\n let attempts = 0;\n let extensionObject = window.cardano?.[extension];\n\n // Disconnect any CIP45 connections.\n if (!extension?.includes(\"p2p\")) {\n this.peerConnectInstance?.shutdownServer();\n }\n\n while (typeof extensionObject === \"undefined\") {\n if (attempts === 40) {\n break;\n }\n\n await new Promise((res) =>\n setTimeout(res, (this._options.connectTimeout as number) / 40)\n );\n extensionObject = window.cardano?.[extension];\n attempts++;\n }\n\n if (!extensionObject) {\n throw new Error(\"Wallet extension not found in the global context.\");\n }\n\n await this.syncApi(extension);\n\n this._activeWallet = extension;\n if (this._options.persistence) {\n const seed: IWalletObserverSeed = {\n activeWallet: extension,\n };\n\n window.localStorage.setItem(\n WalletObserver.PERSISTENCE_CACHE_KEY,\n JSON.stringify(seed)\n );\n }\n\n this.dispatch(EWalletObserverEvents.CONNECT_WALLET_END, {\n extension,\n });\n };\n\n getCip45Instance = async () => {\n if (!this.peerConnectInstance) {\n const { DAppPeerConnect } = await getPeerConnect();\n this.peerConnectInstance = new DAppPeerConnect(\n this._options.peerConnectArgs\n );\n }\n\n return {\n name: this._options.peerConnectArgs.dAppInfo.name,\n icon: this.peerConnectInstance.getIdenticon(),\n instance: this.peerConnectInstance,\n };\n };\n\n /**\n * Helper function to retrieve currently active wallet connection, if present.\n *\n * @returns {TSupportedWalletExtensions | undefined}\n */\n getActiveWallet = (): TSupportedWalletExtensions | undefined => {\n return this._activeWallet;\n };\n\n /**\n * Helper function to retrieve the currently cached metadata.\n *\n * @returns {Map<string, AssetMetadata>}\n */\n getCachedAssetMetadata = (): Map<string, AssetMetadata> =>\n this._cachedMetadata;\n\n /**\n * Helper function to retrieve a list of supported wallet extensions.\n *\n * @returns {keyof TSupportedWalletExtensions[] | undefined}\n */\n getSupportedExtensions = (): TSupportedWalletExtensions[] => {\n return this._supportedExtensions;\n };\n\n /**\n * Helper function to restore the class instance to its initial state.\n *\n * @returns {void}\n */\n disconnect = (): void => {\n this._activeWallet = undefined;\n this.api = undefined;\n this._cachedMetadata = new Map();\n window.localStorage.removeItem(WalletObserver.PERSISTENCE_CACHE_KEY);\n this.dispatch(EWalletObserverEvents.DISCONNECT);\n };\n\n /**\n * Retrieves the balance of the wallet, including metadata for each asset.\n *\n * @returns {Promise<WalletBalanceMap<AssetMetadata>>} - A promise that resolves to a map of asset amounts keyed by asset IDs.\n */\n getBalanceMap = async (): Promise<WalletBalanceMap<AssetMetadata>> => {\n if (!this.api) {\n throw new Error(\"Attempted to query balance without an API instance.\");\n }\n\n this.dispatch(EWalletObserverEvents.GET_BALANCE_MAP_START);\n const [cbor, { Serialization }, { typedHex }] = await Promise.all([\n this.api.getBalance(),\n getCardanoCore(),\n getCardanoUtil(),\n ]);\n\n const data = Serialization.Value.fromCbor(typedHex(cbor));\n const multiassetKeys = data.multiasset()?.keys() ?? [];\n\n const metadata = await this.__metadataResolverWithCache([\n WalletObserver.ADA_ASSET_ID,\n ...multiassetKeys,\n ]);\n\n const balanceMap = new WalletBalanceMap<AssetMetadata>(this);\n balanceMap.set(\n WalletObserver.ADA_ASSET_ID,\n new AssetAmount(data.coin(), metadata.get(WalletObserver.ADA_ASSET_ID))\n );\n\n const multiassetEntries = data.multiasset()?.entries() ?? [];\n if (multiassetEntries) {\n for (const [id, amount] of multiassetEntries) {\n balanceMap.set(\n id,\n new AssetAmount(amount, metadata.get(normalizeAssetIdWithDot(id)))\n );\n }\n }\n\n this.dispatch(EWalletObserverEvents.GET_BALANCE_MAP_END, {\n balanceMap,\n });\n\n return balanceMap;\n };\n\n /**\n * Gets the current network connection.\n *\n * @returns {Promise<number>} The network ID.\n */\n getNetwork = async (): Promise<number> => {\n if (!this.api) {\n throw new Error(\"Attempted to query network without an API instance.\");\n }\n\n const val = await this.api.getNetworkId();\n this.network = val;\n return val;\n };\n\n /**\n * Gets a list of used addresses, encoded as Bech32.\n *\n * @returns {Promise<string[]>} The list of addresses.\n */\n getUsedAddresses = async (): Promise<string[]> => {\n if (!this.api) {\n throw new Error(\n \"Attempted to query used addresses without an API instance.\"\n );\n }\n\n const [cbor, { Cardano }, { typedHex }] = await Promise.all([\n this.api.getUsedAddresses(),\n getCardanoCore(),\n getCardanoUtil(),\n ]);\n\n const data = cbor.map((val) =>\n Cardano.Address.fromBytes(typedHex(val)).toBech32()\n );\n\n return data;\n };\n\n /**\n * Gets a list of unused addresses, encoded as Bech32.\n *\n * @returns {Promise<string[]>} The list of addresses.\n */\n getUnusedAddresses = async (): Promise<string[]> => {\n if (!this.api) {\n throw new Error(\n \"Attempted to query unused addresses without an API instance.\"\n );\n }\n\n const [cbor, { Cardano }, { typedHex }] = await Promise.all([\n this.api.getUnusedAddresses(),\n getCardanoCore(),\n getCardanoUtil(),\n ]);\n\n const data = cbor.map((val) =>\n Cardano.Address.fromBytes(typedHex(val)).toBech32()\n );\n\n return data;\n };\n\n /**\n * Gets a list of wallet UTXOs.\n *\n * @returns {Promise<TransactionUnspentOutput[]>} The list of TransactionUnspentOutputs.\n */\n getUtxos = async (): Promise<TransactionUnspentOutput[] | undefined> => {\n if (!this.api) {\n throw new Error(\"Attempted to query UTXOs without an API instance.\");\n }\n\n const [cbor, { Serialization }, { typedHex }] = await Promise.all([\n this.api.getUtxos(),\n getCardanoCore(),\n getCardanoUtil(),\n ]);\n\n const data = cbor?.map((val) => {\n let txOutput = Serialization.TransactionUnspentOutput.fromCbor(\n typedHex(val)\n );\n\n // These methods must be bound to their initial creation instance.\n txOutput.input = txOutput.input.bind(txOutput);\n txOutput.output = txOutput.output.bind(txOutput);\n return txOutput;\n });\n\n return data;\n };\n\n /**\n * Gets a list of wallet UTXOs suitable for collateral.\n *\n * @returns {Promise<TransactionUnspentOutput[]>} The list of TransactionUnspentOutputs.\n */\n getCollateral = async (): Promise<TransactionUnspentOutput[] | undefined> => {\n if (!this.api) {\n throw new Error(\"Attempted to query UTXOs without an API instance.\");\n }\n\n const [cbor, { Serialization }, { typedHex }] = await Promise.all([\n this.api.getCollateral(),\n getCardanoCore(),\n getCardanoUtil(),\n ]);\n\n const data = cbor?.map((val) => {\n let txOutput = Serialization.TransactionUnspentOutput.fromCbor(\n typedHex(val)\n );\n\n // These methods must be bound to their initial creation instance.\n txOutput.input = txOutput.input.bind(txOutput);\n txOutput.output = txOutput.output.bind(txOutput);\n return txOutput;\n });\n\n return data;\n };\n\n /**\n * Resolves metadata for the given asset IDs, using a cached version if available.\n *\n * @private\n * @param {string[]} assetIds - The IDs of the assets to resolve metadata for.\n * @returns {Promise<Map<string, AssetMetadata>>} - A promise that resolves to a map of asset metadata.\n */\n private __metadataResolverWithCache = async (\n assetIds: string[]\n ): Promise<Map<string, AssetMetadata>> => {\n if (this._cachedMetadata) {\n const cachedKeys = new Set(this._cachedMetadata.keys());\n const inputKeys = new Set(assetIds);\n\n if (\n cachedKeys.size === inputKeys.size &&\n [...cachedKeys].every((key) => inputKeys.has(key))\n ) {\n return this._cachedMetadata;\n }\n }\n\n const newMetadata = await this._options.metadataResolver(\n assetIds.map(normalizeAssetIdWithDot),\n normalizeAssetIdWithDot,\n isAdaAsset\n );\n this._cachedMetadata = newMetadata;\n return newMetadata;\n };\n\n /**\n * A fallback metadata resolver function that generates default metadata for given asset IDs.\n *\n * @type {TMetadataResolverFunc<AssetMetadata>}\n */\n public fallbackMetadataResolver: TMetadataResolverFunc<AssetMetadata> =\n async (assetIds) => {\n const map = new Map<string, AssetMetadata>();\n assetIds.forEach((id) =>\n map.set(normalizeAssetIdWithDot(id), {\n assetId: normalizeAssetIdWithDot(id),\n decimals: 6,\n } as AssetMetadata)\n );\n\n return map;\n };\n\n /**\n * Helper method to retrieve the cached utils instance.\n *\n * @returns {Promise<WalletObserverUtils>} Resolves to a WalletObserverUtils class.\n */\n public async getUtils(): Promise<WalletObserverUtils> {\n if (!this.utils) {\n this.utils = await WalletObserverUtils.new(this.network);\n }\n\n return this.utils;\n }\n}\n"],"mappings":";;;AAEA,SAASA,WAAW,QAAmC,mBAAmB;AAC1E,OAAOC,KAAK,MAAM,iBAAiB;AAEnC,SAASC,qBAAqB,QAAQ,qBAAqB;AAS3D,SAASC,UAAU,EAAEC,uBAAuB,QAAQ,oBAAoB;AACxE,SACEC,cAAc,EACdC,cAAc,EACdC,cAAc,QACT,qBAAqB;AAC5B,SAASC,gBAAgB,QAAQ,6BAA6B;AAC9D,SAASC,mBAAmB,QAAQ,0BAA0B;AAC9D,SAASC,mBAAmB,QAAQ,gCAAgC;;AAEpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,cAAc,SAEjBF,mBAAmB,CAAC;EAuB5B;AACF;AACA;AACA;AACA;EACEG,WAAWA,CAACC,OAAwD,EAAE;IACpE,KAAK,CAAC,CAAC;;IAEP;IAAAC,eAAA,kBA5BuB,CAAC;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,0BAKS,KAAK;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,+BAGqB,CAC3D,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,MAAM,CACP;IAED;IAAAA,eAAA,0BACsD,IAAIC,GAAG,CAAC,CAAC;IA4D/D;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IAXED,eAAA,eAYO,YAA0C;MAC/C,IAAI,CAAC,IAAI,CAACE,GAAG,EAAE;QACb,MAAM,IAAIC,KAAK,CACb,mEACF,CAAC;MACH;MAEA,IAAI,CAACC,eAAe,GAAG,IAAI;MAC3B,IAAI,CAACC,QAAQ,CAACjB,qBAAqB,CAACkB,oBAAoB,CAAC;MAEzD,IAAIC,UAAkB;MACtB,IAAI;QACFA,UAAU,GAAG,MAAM,IAAI,CAACC,UAAU,CAAC,CAAC;MACtC,CAAC,CAAC,OAAOC,CAAC,EAAE;QACV,IAAI;UACF,MAAM,IAAI,CAACC,OAAO,CAAC,CAAC;UACpBH,UAAU,GAAG,MAAM,IAAI,CAACC,UAAU,CAAC,CAAC;QACtC,CAAC,CAAC,OAAOC,CAAC,EAAE;UACV,IAAI,CAACJ,QAAQ,CAACjB,qBAAqB,CAACuB,kBAAkB,CAAC;UACvD,IAAI,CAACP,eAAe,GAAG,KAAK;UAC5B,MAAMK,CAAC;QACT;MACF;MAEA,MAAM,CACJG,aAAa,EACbC,gBAAgB,EAChBC,kBAAkB,EAClBC,UAAU,EACVC,aAAa,CACd,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CACpB,IAAI,CAACC,aAAa,CAAC,CAAC,EACpB,IAAI,CAACC,gBAAgB,CAAC,CAAC,EACvB,IAAI,CAACC,kBAAkB,CAAC,CAAC,EACzB,IAAI,CAACC,QAAQ,CAAC,CAAC,EACf,IAAI,CAACC,aAAa,CAAC,CAAC,CACrB,CAAC;MAEF,MAAMC,MAAM,GAAG;QACbC,UAAU,EAAEb,aAAa;QACzBc,aAAa,EAAEb,gBAAgB;QAC/Bc,eAAe,EAAEb,kBAAkB;QACnCc,KAAK,EAAEb,UAAU;QACjBc,UAAU,EAAEb,aAAa;QACzBc,OAAO,EAAEvB;MACX,CAAC;MAED,IAAI,CAACF,QAAQ,CAACjB,qBAAqB,CAACuB,kBAAkB,EAAEa,MAAM,CAAC;MAC/D,IAAI,CAACpB,eAAe,GAAG,KAAK;MAE5B,OAAOoB,MAAM;IACf,CAAC;IAaD;AACF;AACA;AACA;AACA;AACA;AACA;IANExB,eAAA,kBAOU,MAAO+B,YAAyC,IAAmB;MAC3E,IAAIC,QAAQ,GAAG,CAAC;MAChB,IAAI,CAAC9B,GAAG,GAAG+B,SAAS;MACpB,IAAI,CAACF,YAAY,IAAI,CAAC,IAAI,CAACG,aAAa,EAAE;QACxC,MAAM,IAAI/B,KAAK,CACb,kFACF,CAAC;MACH;MAEA,MAAMgC,cAAc,GAClBJ,YAAY,IAAK,IAAI,CAACG,aAA4C;MAEpE,OAAO,CAAC,IAAI,CAAChC,GAAG,EAAE;QAChB,IAAI8B,QAAQ,KAAK,EAAE,EAAE;UACnB,MAAM,IAAI7B,KAAK,CACb,0EACF,CAAC;QACH;QAEA,IAAI;UACF,MAAMD,GAAG,GAAG,MAAMkC,MAAM,CAACC,OAAO,GAAGF,cAAc,CAAC,EAAEG,MAAM,CAAC,CAAC;UAE5D,IAAI,CAACpC,GAAG,EAAE;YACR,MAAMC,KAAK;UACb;UAEA,IAAI,CAACD,GAAG,GAAGA,GAAG;UACd,IAAI,CAAC4B,OAAO,GAAG,MAAM5B,GAAG,CAACqC,YAAY,CAAC,CAAC;QACzC,CAAC,CAAC,OAAO9B,CAAC,EAAE;UACV,MAAM,IAAIQ,OAAO,CAAEuB,GAAG,IAAKC,UAAU,CAACD,GAAG,EAAE,GAAG,CAAC,CAAC;UAChDR,QAAQ,EAAE;QACZ;MACF;MAEA,OAAO,IAAI,CAAC9B,GAAG;IACjB,CAAC;IAED;AACF;AACA;AACA;AACA;IAJEF,eAAA,qBAKa,MAA8B;MACzC,OAAO,IAAI,CAAC0C,QAAQ;IACtB,CAAC;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IAPE1C,eAAA,wBAQgB,MACd2C,SAAqC,IACnB;MAClB,IAAI,CAACtC,QAAQ,CAACjB,qBAAqB,CAACwD,oBAAoB,CAAC;MAEzD,IAAIZ,QAAQ,GAAG,CAAC;MAChB,IAAIa,eAAe,GAAGT,MAAM,CAACC,OAAO,GAAGM,SAAS,CAAC;;MAEjD;MACA,IAAI,CAACA,SAAS,EAAEG,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC/B,IAAI,CAACC,mBAAmB,EAAEC,cAAc,CAAC,CAAC;MAC5C;MAEA,OAAO,OAAOH,eAAe,KAAK,WAAW,EAAE;QAC7C,IAAIb,QAAQ,KAAK,EAAE,EAAE;UACnB;QACF;QAEA,MAAM,IAAIf,OAAO,CAAEuB,GAAG,IACpBC,UAAU,CAACD,GAAG,EAAG,IAAI,CAACE,QAAQ,CAACO,cAAc,GAAc,EAAE,CAC/D,CAAC;QACDJ,eAAe,GAAGT,MAAM,CAACC,OAAO,GAAGM,SAAS,CAAC;QAC7CX,QAAQ,EAAE;MACZ;MAEA,IAAI,CAACa,eAAe,EAAE;QACpB,MAAM,IAAI1C,KAAK,CAAC,mDAAmD,CAAC;MACtE;MAEA,MAAM,IAAI,CAACO,OAAO,CAACiC,SAAS,CAAC;MAE7B,IAAI,CAACT,aAAa,GAAGS,SAAS;MAC9B,IAAI,IAAI,CAACD,QAAQ,CAACQ,WAAW,EAAE;QAC7B,MAAMC,IAAyB,GAAG;UAChCpB,YAAY,EAAEY;QAChB,CAAC;QAEDP,MAAM,CAACgB,YAAY,CAACC,OAAO,CACzBxD,cAAc,CAACyD,qBAAqB,EACpCC,IAAI,CAACC,SAAS,CAACL,IAAI,CACrB,CAAC;MACH;MAEA,IAAI,CAAC9C,QAAQ,CAACjB,qBAAqB,CAACqE,kBAAkB,EAAE;QACtDd;MACF,CAAC,CAAC;IACJ,CAAC;IAAA3C,eAAA,2BAEkB,YAAY;MAC7B,IAAI,CAAC,IAAI,CAAC+C,mBAAmB,EAAE;QAC7B,MAAM;UAAEW;QAAgB,CAAC,GAAG,MAAMjE,cAAc,CAAC,CAAC;QAClD,IAAI,CAACsD,mBAAmB,GAAG,IAAIW,eAAe,CAC5C,IAAI,CAAChB,QAAQ,CAACiB,eAChB,CAAC;MACH;MAEA,OAAO;QACLC,IAAI,EAAE,IAAI,CAAClB,QAAQ,CAACiB,eAAe,CAACE,QAAQ,CAACD,IAAI;QACjDE,IAAI,EAAE,IAAI,CAACf,mBAAmB,CAACgB,YAAY,CAAC,CAAC;QAC7CC,QAAQ,EAAE,IAAI,CAACjB;MACjB,CAAC;IACH,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE/C,eAAA,0BAKkB,MAA8C;MAC9D,OAAO,IAAI,CAACkC,aAAa;IAC3B,CAAC;IAED;AACF;AACA;AACA;AACA;IAJElC,eAAA,iCAKyB,MACvB,IAAI,CAACiE,eAAe;IAEtB;AACF;AACA;AACA;AACA;IAJEjE,eAAA,iCAKyB,MAAoC;MAC3D,OAAO,IAAI,CAACkE,oBAAoB;IAClC,CAAC;IAED;AACF;AACA;AACA;AACA;IAJElE,eAAA,qBAKa,MAAY;MACvB,IAAI,CAACkC,aAAa,GAAGD,SAAS;MAC9B,IAAI,CAAC/B,GAAG,GAAG+B,SAAS;MACpB,IAAI,CAACgC,eAAe,GAAG,IAAIhE,GAAG,CAAC,CAAC;MAChCmC,MAAM,CAACgB,YAAY,CAACe,UAAU,CAACtE,cAAc,CAACyD,qBAAqB,CAAC;MACpE,IAAI,CAACjD,QAAQ,CAACjB,qBAAqB,CAACgF,UAAU,CAAC;IACjD,CAAC;IAED;AACF;AACA;AACA;AACA;IAJEpE,eAAA,wBAKgB,YAAsD;MACpE,IAAI,CAAC,IAAI,CAACE,GAAG,EAAE;QACb,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;MACxE;MAEA,IAAI,CAACE,QAAQ,CAACjB,qBAAqB,CAACiF,qBAAqB,CAAC;MAC1D,MAAM,CAACC,IAAI,EAAE;QAAEC;MAAc,CAAC,EAAE;QAAEC;MAAS,CAAC,CAAC,GAAG,MAAMvD,OAAO,CAACC,GAAG,CAAC,CAChE,IAAI,CAAChB,GAAG,CAACuE,UAAU,CAAC,CAAC,EACrBlF,cAAc,CAAC,CAAC,EAChBC,cAAc,CAAC,CAAC,CACjB,CAAC;MAEF,MAAMkF,IAAI,GAAGH,aAAa,CAACI,KAAK,CAACC,QAAQ,CAACJ,QAAQ,CAACF,IAAI,CAAC,CAAC;MACzD,MAAMO,cAAc,GAAGH,IAAI,CAACI,UAAU,CAAC,CAAC,EAAEC,IAAI,CAAC,CAAC,IAAI,EAAE;MAEtD,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACC,2BAA2B,CAAC,CACtDpF,cAAc,CAACqF,YAAY,EAC3B,GAAGL,cAAc,CAClB,CAAC;MAEF,MAAMpD,UAAU,GAAG,IAAI/B,gBAAgB,CAAgB,IAAI,CAAC;MAC5D+B,UAAU,CAAC0D,GAAG,CACZtF,cAAc,CAACqF,YAAY,EAC3B,IAAIhG,WAAW,CAACwF,IAAI,CAACU,IAAI,CAAC,CAAC,EAAEJ,QAAQ,CAACK,GAAG,CAACxF,cAAc,CAACqF,YAAY,CAAC,CACxE,CAAC;MAED,MAAMI,iBAAiB,GAAGZ,IAAI,CAACI,UAAU,CAAC,CAAC,EAAES,OAAO,CAAC,CAAC,IAAI,EAAE;MAC5D,IAAID,iBAAiB,EAAE;QACrB,KAAK,MAAM,CAACE,EAAE,EAAEC,MAAM,CAAC,IAAIH,iBAAiB,EAAE;UAC5C7D,UAAU,CAAC0D,GAAG,CACZK,EAAE,EACF,IAAItG,WAAW,CAACuG,MAAM,EAAET,QAAQ,CAACK,GAAG,CAAC/F,uBAAuB,CAACkG,EAAE,CAAC,CAAC,CACnE,CAAC;QACH;MACF;MAEA,IAAI,CAACnF,QAAQ,CAACjB,qBAAqB,CAACsG,mBAAmB,EAAE;QACvDjE;MACF,CAAC,CAAC;MAEF,OAAOA,UAAU;IACnB,CAAC;IAED;AACF;AACA;AACA;AACA;IAJEzB,eAAA,qBAKa,YAA6B;MACxC,IAAI,CAAC,IAAI,CAACE,GAAG,EAAE;QACb,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;MACxE;MAEA,MAAMwF,GAAG,GAAG,MAAM,IAAI,CAACzF,GAAG,CAACqC,YAAY,CAAC,CAAC;MACzC,IAAI,CAACT,OAAO,GAAG6D,GAAG;MAClB,OAAOA,GAAG;IACZ,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE3F,eAAA,2BAKmB,YAA+B;MAChD,IAAI,CAAC,IAAI,CAACE,GAAG,EAAE;QACb,MAAM,IAAIC,KAAK,CACb,4DACF,CAAC;MACH;MAEA,MAAM,CAACmE,IAAI,EAAE;QAAEsB;MAAQ,CAAC,EAAE;QAAEpB;MAAS,CAAC,CAAC,GAAG,MAAMvD,OAAO,CAACC,GAAG,CAAC,CAC1D,IAAI,CAAChB,GAAG,CAACkB,gBAAgB,CAAC,CAAC,EAC3B7B,cAAc,CAAC,CAAC,EAChBC,cAAc,CAAC,CAAC,CACjB,CAAC;MAEF,MAAMkF,IAAI,GAAGJ,IAAI,CAACuB,GAAG,CAAEF,GAAG,IACxBC,OAAO,CAACE,OAAO,CAACC,SAAS,CAACvB,QAAQ,CAACmB,GAAG,CAAC,CAAC,CAACK,QAAQ,CAAC,CACpD,CAAC;MAED,OAAOtB,IAAI;IACb,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE1E,eAAA,6BAKqB,YAA+B;MAClD,IAAI,CAAC,IAAI,CAACE,GAAG,EAAE;QACb,MAAM,IAAIC,KAAK,CACb,8DACF,CAAC;MACH;MAEA,MAAM,CAACmE,IAAI,EAAE;QAAEsB;MAAQ,CAAC,EAAE;QAAEpB;MAAS,CAAC,CAAC,GAAG,MAAMvD,OAAO,CAACC,GAAG,CAAC,CAC1D,IAAI,CAAChB,GAAG,CAACmB,kBAAkB,CAAC,CAAC,EAC7B9B,cAAc,CAAC,CAAC,EAChBC,cAAc,CAAC,CAAC,CACjB,CAAC;MAEF,MAAMkF,IAAI,GAAGJ,IAAI,CAACuB,GAAG,CAAEF,GAAG,IACxBC,OAAO,CAACE,OAAO,CAACC,SAAS,CAACvB,QAAQ,CAACmB,GAAG,CAAC,CAAC,CAACK,QAAQ,CAAC,CACpD,CAAC;MAED,OAAOtB,IAAI;IACb,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE1E,eAAA,mBAKW,YAA6D;MACtE,IAAI,CAAC,IAAI,CAACE,GAAG,EAAE;QACb,MAAM,IAAIC,KAAK,CAAC,mDAAmD,CAAC;MACtE;MAEA,MAAM,CAACmE,IAAI,EAAE;QAAEC;MAAc,CAAC,EAAE;QAAEC;MAAS,CAAC,CAAC,GAAG,MAAMvD,OAAO,CAACC,GAAG,CAAC,CAChE,IAAI,CAAChB,GAAG,CAACoB,QAAQ,CAAC,CAAC,EACnB/B,cAAc,CAAC,CAAC,EAChBC,cAAc,CAAC,CAAC,CACjB,CAAC;MAEF,MAAMkF,IAAI,GAAGJ,IAAI,EAAEuB,GAAG,CAAEF,GAAG,IAAK;QAC9B,IAAIM,QAAQ,GAAG1B,aAAa,CAAC2B,wBAAwB,CAACtB,QAAQ,CAC5DJ,QAAQ,CAACmB,GAAG,CACd,CAAC;;QAED;QACAM,QAAQ,CAACE,KAAK,GAAGF,QAAQ,CAACE,KAAK,CAACC,IAAI,CAACH,QAAQ,CAAC;QAC9CA,QAAQ,CAACI,MAAM,GAAGJ,QAAQ,CAACI,MAAM,CAACD,IAAI,CAACH,QAAQ,CAAC;QAChD,OAAOA,QAAQ;MACjB,CAAC,CAAC;MAEF,OAAOvB,IAAI;IACb,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE1E,eAAA,wBAKgB,YAA6D;MAC3E,IAAI,CAAC,IAAI,CAACE,GAAG,EAAE;QACb,MAAM,IAAIC,KAAK,CAAC,mDAAmD,CAAC;MACtE;MAEA,MAAM,CAACmE,IAAI,EAAE;QAAEC;MAAc,CAAC,EAAE;QAAEC;MAAS,CAAC,CAAC,GAAG,MAAMvD,OAAO,CAACC,GAAG,CAAC,CAChE,IAAI,CAAChB,GAAG,CAACqB,aAAa,CAAC,CAAC,EACxBhC,cAAc,CAAC,CAAC,EAChBC,cAAc,CAAC,CAAC,CACjB,CAAC;MAEF,MAAMkF,IAAI,GAAGJ,IAAI,EAAEuB,GAAG,CAAEF,GAAG,IAAK;QAC9B,IAAIM,QAAQ,GAAG1B,aAAa,CAAC2B,wBAAwB,CAACtB,QAAQ,CAC5DJ,QAAQ,CAACmB,GAAG,CACd,CAAC;;QAED;QACAM,QAAQ,CAACE,KAAK,GAAGF,QAAQ,CAACE,KAAK,CAACC,IAAI,CAACH,QAAQ,CAAC;QAC9CA,QAAQ,CAACI,MAAM,GAAGJ,QAAQ,CAACI,MAAM,CAACD,IAAI,CAACH,QAAQ,CAAC;QAChD,OAAOA,QAAQ;MACjB,CAAC,CAAC;MAEF,OAAOvB,IAAI;IACb,CAAC;IAED;AACF;AACA;AACA;AACA;AACA;AACA;IANE1E,eAAA,sCAOsC,MACpCsG,QAAkB,IACsB;MACxC,IAAI,IAAI,CAACrC,eAAe,EAAE;QACxB,MAAMsC,UAAU,GAAG,IAAIC,GAAG,CAAC,IAAI,CAACvC,eAAe,CAACc,IAAI,CAAC,CAAC,CAAC;QACvD,MAAM0B,SAAS,GAAG,IAAID,GAAG,CAACF,QAAQ,CAAC;QAEnC,IACEC,UAAU,CAACG,IAAI,KAAKD,SAAS,CAACC,IAAI,IAClC,CAAC,GAAGH,UAAU,CAAC,CAACI,KAAK,CAAEC,GAAG,IAAKH,SAAS,CAACI,GAAG,CAACD,GAAG,CAAC,CAAC,EAClD;UACA,OAAO,IAAI,CAAC3C,eAAe;QAC7B;MACF;MAEA,MAAM6C,WAAW,GAAG,MAAM,IAAI,CAACpE,QAAQ,CAACqE,gBAAgB,CACtDT,QAAQ,CAACT,GAAG,CAACvG,uBAAuB,CAAC,EACrCA,uBAAuB,EACvBD,UACF,CAAC;MACD,IAAI,CAAC4E,eAAe,GAAG6C,WAAW;MAClC,OAAOA,WAAW;IACpB,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE9G,eAAA,mCAME,MAAOsG,QAAQ,IAAK;MAClB,MAAMT,GAAG,GAAG,IAAI5F,GAAG,CAAwB,CAAC;MAC5CqG,QAAQ,CAACU,OAAO,CAAExB,EAAE,IAClBK,GAAG,CAACV,GAAG,CAAC7F,uBAAuB,CAACkG,EAAE,CAAC,EAAE;QACnCyB,OAAO,EAAE3H,uBAAuB,CAACkG,EAAE,CAAC;QACpC0B,QAAQ,EAAE;MACZ,CAAkB,CACpB,CAAC;MAED,OAAOrB,GAAG;IACZ,CAAC;IA5fD,IAAI,CAACnD,QAAQ,GAAGvD,KAAK,CACnB;MACE4H,gBAAgB,EAAE,IAAI,CAACI,wBAAwB;MAC/CjE,WAAW,EAAE,KAAK;MAClBD,cAAc,EAAE,KAAK;MACrBU,eAAe,EAAE;QACfE,QAAQ,EAAE;UACRD,IAAI,EAAE,iCAAiC;UACvCwD,GAAG,EAAEhF,MAAM,CAACiF,QAAQ,CAACC;QACvB,CAAC;QACDC,UAAU,EAAEA,CAAC3D,IAAI,EAAE4D,OAAO,KAAK;UAC7BzH,OAAO,EAAE4D,eAAe,EAAE4D,UAAU,GAAG3D,IAAI,EAAE4D,OAAO,CAAC;UACrD,IAAI,CAACC,UAAU,CAAC,CAAC;QACnB,CAAC;QACDC,WAAW,EAAEA,CAAC9D,IAAI,EAAE4D,OAAO,KAAK;UAC9BzH,OAAO,EAAE4D,eAAe,EAAE+D,WAAW,GAAG9D,IAAI,EAAE4D,OAAO,CAAC;UACtD,IAAI,CAACG,aAAa,CAAC/D,IAAkC,CAAC;QACxD,CAAC;QACDgE,gBAAgBA,CAACC,UAAU,EAAEC,QAAQ,EAAE;UACrC,OAAOA,QAAQ,CAAC,IAAI,EAAED,UAAU,CAACE,kBAAkB,IAAI,IAAI,CAAC;QAC9D,CAAC;QACDC,kBAAkB,EAAE,IAAI;QACxBC,QAAQ,EAAE,CACR,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B;MAEnC;IACF,CAAC,EACDlI,OACF,CAAC;IAED,IAAI,CAAC,IAAI,CAAC2C,QAAQ,CAACQ,WAAW,EAAE;MAC9B;IACF;IAEA,MAAMgF,WAAW,GAAG9F,MAAM,CAACgB,YAAY,CAAC+E,OAAO,CAC7CtI,cAAc,CAACyD,qBACjB,CAAC;IAED,IAAI,CAAC4E,WAAW,EAAE;MAChB;IACF;;IAEA;IACA,MAAM/E,KAAyB,GAAGI,IAAI,CAAC6E,KAAK,CAACF,WAAW,CAAC;IACzD,IAAI,CAACP,aAAa,CAACxE,KAAI,CAACpB,YAAY,CAAC;EACvC;EAmEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEsG,SAASA,CAAA,EAAY;IACnB,OAAO,IAAI,CAACjI,eAAe;EAC7B;EAmYA;AACF;AACA;AACA;AACA;EACE,MAAakI,QAAQA,CAAA,EAAiC;IACpD,IAAI,CAAC,IAAI,CAACC,KAAK,EAAE;MACf,IAAI,CAACA,KAAK,GAAG,MAAM3I,mBAAmB,CAAC4I,GAAG,CAAC,IAAI,CAAC1G,OAAO,CAAC;IAC1D;IAEA,OAAO,IAAI,CAACyG,KAAK;EACnB;AACF;AAACvI,eAAA,CA5iBYH,cAAc,2BAGM,gBAAgB;AAAAG,eAAA,CAHpCH,cAAc,kBAIH,cAAc","ignoreList":[]}
|
package/dist/esm/index.js
CHANGED
|
@@ -4,4 +4,6 @@ export { WalletObserver } from "./classes/WalletObserver.class.js";
|
|
|
4
4
|
export * from "./react-components/contexts/observer/types.js";
|
|
5
5
|
export * from "./react-components/hooks/index.js";
|
|
6
6
|
export * from "./react-components/index.js";
|
|
7
|
+
export * from "./utils/assets.js";
|
|
8
|
+
export * from "./utils/getLibs.js";
|
|
7
9
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["WalletBalanceMap","WalletObserver"],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./@types/index.js\";\nexport { WalletBalanceMap } from \"./classes/WalletBalanceMap.class.js\";\nexport { WalletObserver } from \"./classes/WalletObserver.class.js\";\nexport * from \"./react-components/contexts/observer/types.js\";\nexport * from \"./react-components/hooks/index.js\";\nexport * from \"./react-components/index.js\";\n"],"mappings":"AAAA,cAAc,mBAAmB;AACjC,SAASA,gBAAgB,QAAQ,qCAAqC;AACtE,SAASC,cAAc,QAAQ,mCAAmC;AAClE,cAAc,+CAA+C;AAC7D,cAAc,mCAAmC;AACjD,cAAc,6BAA6B","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["WalletBalanceMap","WalletObserver"],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./@types/index.js\";\nexport { WalletBalanceMap } from \"./classes/WalletBalanceMap.class.js\";\nexport { WalletObserver } from \"./classes/WalletObserver.class.js\";\nexport * from \"./react-components/contexts/observer/types.js\";\nexport * from \"./react-components/hooks/index.js\";\nexport * from \"./react-components/index.js\";\nexport * from \"./utils/assets.js\";\nexport * from \"./utils/getLibs.js\";\n"],"mappings":"AAAA,cAAc,mBAAmB;AACjC,SAASA,gBAAgB,QAAQ,qCAAqC;AACtE,SAASC,cAAc,QAAQ,mCAAmC;AAClE,cAAc,+CAA+C;AAC7D,cAAc,mCAAmC;AACjD,cAAc,6BAA6B;AAC3C,cAAc,mBAAmB;AACjC,cAAc,oBAAoB","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AssetAmount } from "@sundaeswap/asset";
|
|
2
2
|
import { useCallback, useRef, useState } from "react";
|
|
3
|
+
import { WalletAssetMap } from "../../../classes/WalletAssetMap.class.js";
|
|
3
4
|
import { WalletBalanceMap } from "../../../classes/WalletBalanceMap.class.js";
|
|
4
5
|
import { WalletObserver } from "../../../classes/WalletObserver.class.js";
|
|
5
6
|
import { areAssetMapsEqual } from "../../../utils/comparisons.js";
|
|
@@ -13,12 +14,13 @@ export const useWalletObserverState = observer => {
|
|
|
13
14
|
const prevActiveWallet = useRef();
|
|
14
15
|
const [activeWallet, setActiveWallet] = useState();
|
|
15
16
|
const [adaBalance, setAdaBalance] = useState(new AssetAmount(0n));
|
|
16
|
-
const [handleMetadata, setHandleMetadata] = useState(new
|
|
17
|
+
const [handleMetadata, setHandleMetadata] = useState(new WalletAssetMap());
|
|
17
18
|
const [balance, setBalance] = useState(new WalletBalanceMap(observer));
|
|
18
19
|
const [network, setNetwork] = useState();
|
|
19
20
|
const [usedAddresses, setUsedAddresses] = useState([]);
|
|
20
21
|
const [unusedAddresses, setUnusedAddresses] = useState([]);
|
|
21
22
|
const [utxos, setUtxos] = useState();
|
|
23
|
+
const [collateral, setCollateral] = useState();
|
|
22
24
|
const [ready, setReady] = useState(false);
|
|
23
25
|
const [isCip45, setIsCip45] = useState(false);
|
|
24
26
|
const syncWallet = useCallback(async () => {
|
|
@@ -34,6 +36,7 @@ export const useWalletObserverState = observer => {
|
|
|
34
36
|
setActiveWallet(undefined);
|
|
35
37
|
setNetwork(undefined);
|
|
36
38
|
setUtxos(undefined);
|
|
39
|
+
setCollateral(undefined);
|
|
37
40
|
return;
|
|
38
41
|
}
|
|
39
42
|
prevActiveWallet.current = newWallet;
|
|
@@ -55,6 +58,14 @@ export const useWalletObserverState = observer => {
|
|
|
55
58
|
}
|
|
56
59
|
return prevValue;
|
|
57
60
|
});
|
|
61
|
+
setCollateral(prevValue => {
|
|
62
|
+
const prevValueRep = prevValue?.map(v => v.toCbor());
|
|
63
|
+
const newValueRep = freshData.utxos?.map(v => v.toCbor());
|
|
64
|
+
if (prevValueRep !== newValueRep) {
|
|
65
|
+
return freshData.utxos;
|
|
66
|
+
}
|
|
67
|
+
return prevValue;
|
|
68
|
+
});
|
|
58
69
|
setReady(true);
|
|
59
70
|
setIsCip45(newWallet.includes("p2p"));
|
|
60
71
|
}, [observer]);
|
|
@@ -77,6 +88,8 @@ export const useWalletObserverState = observer => {
|
|
|
77
88
|
setUsedAddresses,
|
|
78
89
|
utxos,
|
|
79
90
|
setUtxos,
|
|
91
|
+
collateral,
|
|
92
|
+
setCollateral,
|
|
80
93
|
syncWallet,
|
|
81
94
|
ready,
|
|
82
95
|
setReady
|
package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWalletObserverState.js","names":["AssetAmount","useCallback","useRef","useState","WalletBalanceMap","WalletObserver","areAssetMapsEqual","useWalletObserverState","observer","prevActiveWallet","activeWallet","setActiveWallet","adaBalance","setAdaBalance","handleMetadata","setHandleMetadata","
|
|
1
|
+
{"version":3,"file":"useWalletObserverState.js","names":["AssetAmount","useCallback","useRef","useState","WalletAssetMap","WalletBalanceMap","WalletObserver","areAssetMapsEqual","useWalletObserverState","observer","prevActiveWallet","activeWallet","setActiveWallet","adaBalance","setAdaBalance","handleMetadata","setHandleMetadata","balance","setBalance","network","setNetwork","usedAddresses","setUsedAddresses","unusedAddresses","setUnusedAddresses","utxos","setUtxos","collateral","setCollateral","ready","setReady","isCip45","setIsCip45","syncWallet","isSyncing","newWallet","getActiveWallet","undefined","current","prevWallet","freshData","sync","newAdaBalance","balanceMap","get","ADA_ASSET_ID","prevBalance","amount","prevValue","JSON","stringify","prevValueRep","map","v","toCbor","newValueRep","includes","handles","setHandles"],"sources":["../../../../../src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts"],"sourcesContent":["import type { TransactionUnspentOutput } from \"@cardano-sdk/core/dist/cjs/Serialization/index.js\";\nimport { AssetAmount } from \"@sundaeswap/asset\";\nimport { useCallback, useRef, useState } from \"react\";\n\nimport {\n TAssetAmountMap,\n TSupportedWalletExtensions,\n} from \"../../../@types/observer.js\";\nimport { WalletAssetMap } from \"../../../classes/WalletAssetMap.class.js\";\nimport { WalletBalanceMap } from \"../../../classes/WalletBalanceMap.class.js\";\nimport { WalletObserver } from \"../../../classes/WalletObserver.class.js\";\nimport { areAssetMapsEqual } from \"../../../utils/comparisons.js\";\nimport { THandleMetadata } from \"../../contexts/observer/index.js\";\n\n/**\n * Internal use only. The main action that sync WalletObserver api responses with\n * the React context of the WalletObserverProvider.\n *\n * @param {WalletObserver} observer\n */\nexport const useWalletObserverState = (observer: WalletObserver) => {\n const prevActiveWallet = useRef<TSupportedWalletExtensions>();\n const [activeWallet, setActiveWallet] =\n useState<TSupportedWalletExtensions>();\n const [adaBalance, setAdaBalance] = useState<AssetAmount>(\n new AssetAmount(0n)\n );\n const [handleMetadata, setHandleMetadata] = useState<\n TAssetAmountMap<THandleMetadata>\n >(new WalletAssetMap());\n const [balance, setBalance] = useState<WalletBalanceMap>(\n new WalletBalanceMap(observer)\n );\n const [network, setNetwork] = useState<number | undefined>();\n const [usedAddresses, setUsedAddresses] = useState<string[]>([]);\n const [unusedAddresses, setUnusedAddresses] = useState<string[]>([]);\n const [utxos, setUtxos] = useState<TransactionUnspentOutput[]>();\n const [collateral, setCollateral] = useState<TransactionUnspentOutput[]>();\n const [ready, setReady] = useState(false);\n const [isCip45, setIsCip45] = useState(false);\n\n const syncWallet = useCallback(async () => {\n if (observer.isSyncing()) {\n return;\n }\n\n const newWallet = observer.getActiveWallet();\n\n if (!newWallet) {\n setAdaBalance(new AssetAmount(0n));\n setBalance(new WalletBalanceMap(observer));\n setUsedAddresses([]);\n setUnusedAddresses([]);\n setActiveWallet(undefined);\n setNetwork(undefined);\n setUtxos(undefined);\n setCollateral(undefined);\n return;\n }\n\n prevActiveWallet.current = newWallet;\n setActiveWallet((prevWallet) =>\n newWallet === prevWallet ? prevWallet : newWallet\n );\n\n const freshData = await observer.sync();\n\n const newAdaBalance = freshData.balanceMap.get(WalletObserver.ADA_ASSET_ID);\n if (newAdaBalance) {\n setAdaBalance((prevBalance) =>\n prevBalance.amount === newAdaBalance.amount\n ? prevBalance\n : newAdaBalance\n );\n }\n\n setBalance((prevBalance) =>\n areAssetMapsEqual(prevBalance, freshData.balanceMap)\n ? prevBalance\n : freshData.balanceMap\n );\n\n setUsedAddresses((prevValue) =>\n JSON.stringify(prevValue) === JSON.stringify(freshData.usedAddresses)\n ? prevValue\n : freshData.usedAddresses\n );\n\n setUnusedAddresses((prevValue) =>\n JSON.stringify(prevValue) === JSON.stringify(freshData.unusedAddresses)\n ? prevValue\n : freshData.unusedAddresses\n );\n\n setNetwork((prevValue) =>\n prevValue === freshData.network ? prevValue : freshData.network\n );\n\n setUtxos((prevValue) => {\n const prevValueRep = prevValue?.map((v) => v.toCbor());\n const newValueRep = freshData.utxos?.map((v) => v.toCbor());\n if (prevValueRep !== newValueRep) {\n return freshData.utxos;\n }\n\n return prevValue;\n });\n\n setCollateral((prevValue) => {\n const prevValueRep = prevValue?.map((v) => v.toCbor());\n const newValueRep = freshData.utxos?.map((v) => v.toCbor());\n if (prevValueRep !== newValueRep) {\n return freshData.utxos;\n }\n\n return prevValue;\n });\n\n setReady(true);\n setIsCip45(newWallet.includes(\"p2p\"));\n }, [observer]);\n\n return {\n activeWallet,\n setActiveWallet,\n adaBalance,\n setAdaBalance,\n balance,\n setBalance,\n handles: handleMetadata,\n setHandles: setHandleMetadata,\n isCip45,\n setIsCip45,\n network,\n setNetwork,\n unusedAddresses,\n setUnusedAddresses,\n usedAddresses,\n setUsedAddresses,\n utxos,\n setUtxos,\n collateral,\n setCollateral,\n syncWallet,\n ready,\n setReady,\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/react-components/contexts/observer/types.ts"],"sourcesContent":["import type { TransactionUnspentOutput } from \"@cardano-sdk/core/dist/cjs/Serialization/index.js\";\nimport type { IHandle } from \"@koralabs/adahandle-sdk\";\nimport type { AssetAmount, IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport type { Dispatch, MutableRefObject, SetStateAction } from \"react\";\n\nimport type {\n TSupportedWalletExtensions,\n TWalletObserverOptions,\n} from \"../../../@types/observer.js\";\nimport { WalletBalanceMap } from \"../../../classes/WalletBalanceMap.class.js\";\nimport type { WalletObserver } from \"../../../classes/WalletObserver.class.js\";\n\n/**\n * Available hooks to apply at various events.\n */\nexport type TWalletProviderHooks = {\n onSyncWalletStart?: () => void;\n onSyncWalletEnd?: () => void;\n onConnectWalletStart?: () => void;\n onConnectWalletEnd?: () => void;\n};\n\n/**\n * The resolved internal props of the WalletObserverProvider.\n */\nexport interface IWalletObserverProviderState<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n> {\n observerOptions: TWalletObserverOptions<AssetMetadata>;\n hooks: TWalletProviderHooks;\n refreshInterval: number;\n}\n\n/**\n * The main WalletObserverProvider props.\n */\nexport interface IWalletObserverProviderProps<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n> {\n options?: Partial<IWalletObserverProviderState<AssetMetadata>>;\n}\n\n/**\n * The WalletObserverProvider's internal state.\n */\nexport interface IWalletObserverState<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n> {\n observerRef: MutableRefObject<WalletObserver<AssetMetadata>>;\n refreshInterval: number | false;\n state: {\n ready: boolean;\n isCip45: boolean;\n setIsCip45: Dispatch<SetStateAction<boolean>>;\n setReady: Dispatch<SetStateAction<boolean>>;\n activeWallet?: TSupportedWalletExtensions;\n setActiveWallet: Dispatch<\n SetStateAction<TSupportedWalletExtensions | undefined>\n >;\n adaBalance: AssetAmount<AssetMetadata>;\n balance: WalletBalanceMap<AssetMetadata>;\n utxos?: TransactionUnspentOutput[];\n setUtxos: Dispatch<SetStateAction<TransactionUnspentOutput[] | undefined>>;\n setBalance: Dispatch<SetStateAction<WalletBalanceMap<AssetMetadata>>>;\n observer: WalletObserver;\n mainAddress?: string;\n stakeAddress?: string;\n network?: number;\n setNetwork: Dispatch<SetStateAction<number | undefined>>;\n unusedAddresses: string[];\n setUnusedAddresses: Dispatch<SetStateAction<string[]>>;\n usedAddresses: string[];\n setUsedAddresses: Dispatch<SetStateAction<string[]>>;\n syncWallet: () => Promise<void>;\n };\n}\n\n/**\n * A generic to extend the default IHandle type that comes\n * back from the Kora Lab's API, and merged with the metadata\n * returned from the metadataResolver.\n */\nexport type THandleMetadata<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n> = AssetMetadata & IHandle;\n\n/**\n * The exposed state of the WalletObserverProvider.\n */\nexport type TUseWalletObserverState<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n> = Omit<\n IWalletObserverState<AssetMetadata>[\"state\"],\n | \"setActiveWallet\"\n | \"setBalance\"\n | \"setNetwork\"\n | \"setUnusedAddresses\"\n | \"setUsedAddresses\"\n | \"setReady\"\n | \"setIsCip45\"\n | \"setUtxos\"\n>;\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/react-components/contexts/observer/types.ts"],"sourcesContent":["import type { TransactionUnspentOutput } from \"@cardano-sdk/core/dist/cjs/Serialization/index.js\";\nimport type { IHandle } from \"@koralabs/adahandle-sdk\";\nimport type { AssetAmount, IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport type { Dispatch, MutableRefObject, SetStateAction } from \"react\";\n\nimport type {\n TSupportedWalletExtensions,\n TWalletObserverOptions,\n} from \"../../../@types/observer.js\";\nimport { WalletBalanceMap } from \"../../../classes/WalletBalanceMap.class.js\";\nimport type { WalletObserver } from \"../../../classes/WalletObserver.class.js\";\n\n/**\n * Available hooks to apply at various events.\n */\nexport type TWalletProviderHooks = {\n onSyncWalletStart?: () => void;\n onSyncWalletEnd?: () => void;\n onConnectWalletStart?: () => void;\n onConnectWalletEnd?: () => void;\n};\n\n/**\n * The resolved internal props of the WalletObserverProvider.\n */\nexport interface IWalletObserverProviderState<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n> {\n observerOptions: TWalletObserverOptions<AssetMetadata>;\n hooks: TWalletProviderHooks;\n refreshInterval: number;\n}\n\n/**\n * The main WalletObserverProvider props.\n */\nexport interface IWalletObserverProviderProps<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n> {\n options?: Partial<IWalletObserverProviderState<AssetMetadata>>;\n}\n\n/**\n * The WalletObserverProvider's internal state.\n */\nexport interface IWalletObserverState<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n> {\n observerRef: MutableRefObject<WalletObserver<AssetMetadata>>;\n refreshInterval: number | false;\n state: {\n ready: boolean;\n isCip45: boolean;\n setIsCip45: Dispatch<SetStateAction<boolean>>;\n setReady: Dispatch<SetStateAction<boolean>>;\n activeWallet?: TSupportedWalletExtensions;\n setActiveWallet: Dispatch<\n SetStateAction<TSupportedWalletExtensions | undefined>\n >;\n adaBalance: AssetAmount<AssetMetadata>;\n balance: WalletBalanceMap<AssetMetadata>;\n utxos?: TransactionUnspentOutput[];\n setUtxos: Dispatch<SetStateAction<TransactionUnspentOutput[] | undefined>>;\n collateral?: TransactionUnspentOutput[];\n setCollateral: Dispatch<\n SetStateAction<TransactionUnspentOutput[] | undefined>\n >;\n setBalance: Dispatch<SetStateAction<WalletBalanceMap<AssetMetadata>>>;\n observer: WalletObserver;\n mainAddress?: string;\n stakeAddress?: string;\n network?: number;\n setNetwork: Dispatch<SetStateAction<number | undefined>>;\n unusedAddresses: string[];\n setUnusedAddresses: Dispatch<SetStateAction<string[]>>;\n usedAddresses: string[];\n setUsedAddresses: Dispatch<SetStateAction<string[]>>;\n syncWallet: () => Promise<void>;\n };\n}\n\n/**\n * A generic to extend the default IHandle type that comes\n * back from the Kora Lab's API, and merged with the metadata\n * returned from the metadataResolver.\n */\nexport type THandleMetadata<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n> = AssetMetadata & IHandle;\n\n/**\n * The exposed state of the WalletObserverProvider.\n */\nexport type TUseWalletObserverState<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n> = Omit<\n IWalletObserverState<AssetMetadata>[\"state\"],\n | \"setActiveWallet\"\n | \"setBalance\"\n | \"setNetwork\"\n | \"setUnusedAddresses\"\n | \"setUsedAddresses\"\n | \"setReady\"\n | \"setIsCip45\"\n | \"setUtxos\"\n | \"setCollateral\"\n>;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
+
import { WalletAssetMap } from "../../classes/WalletAssetMap.class.js";
|
|
3
|
+
import { normalizeAssetIdWithDot } from "../../utils/assets.js";
|
|
2
4
|
import { useWalletObserver } from "./useWalletObserver.js";
|
|
3
5
|
export const useWalletHandles = () => {
|
|
4
6
|
const state = useWalletObserver();
|
|
5
7
|
const [loadingHandles, setLoadingHandles] = useState(true);
|
|
6
|
-
const [handles, setHandles] = useState(new
|
|
8
|
+
const [handles, setHandles] = useState(new WalletAssetMap());
|
|
7
9
|
const memoizedHandleDep = useMemo(() => [...state.balance.getHandles().keys()], [state.balance]);
|
|
8
10
|
const syncHandles = useCallback(async () => {
|
|
9
11
|
// Make a copy of our wallet map.
|
|
10
|
-
const walletHandles = new
|
|
12
|
+
const walletHandles = new WalletAssetMap([...state.balance.getHandles()]);
|
|
11
13
|
if (walletHandles.size === 0) {
|
|
12
|
-
setLoadingHandles(false);
|
|
13
14
|
return walletHandles;
|
|
14
15
|
}
|
|
15
16
|
try {
|
|
@@ -29,22 +30,21 @@ export const useWalletHandles = () => {
|
|
|
29
30
|
// Restore once SDK updated
|
|
30
31
|
const walletHandlesWithDataArray = [...walletHandles.entries()];
|
|
31
32
|
const walletHandleDataArray = await sdk.provider().getAllDataBatch(walletHandlesWithDataArray.map(([key]) => ({
|
|
32
|
-
value: key.
|
|
33
|
+
value: key.split(".")[1]
|
|
33
34
|
})));
|
|
34
35
|
walletHandlesWithDataArray.forEach(([key, asset]) => {
|
|
35
36
|
const matchingData = walletHandleDataArray.find(({
|
|
36
37
|
hex
|
|
37
|
-
}) => hex === key.
|
|
38
|
-
walletHandles.set(key, asset.withMetadata({
|
|
38
|
+
}) => hex === key.split(".")[1]);
|
|
39
|
+
walletHandles.set(normalizeAssetIdWithDot(key), asset.withMetadata({
|
|
39
40
|
...matchingData,
|
|
40
41
|
...asset.metadata,
|
|
42
|
+
assetId: normalizeAssetIdWithDot(asset.metadata.assetId),
|
|
41
43
|
decimals: 0
|
|
42
44
|
}).withAmount(1n));
|
|
43
45
|
});
|
|
44
|
-
setLoadingHandles(false);
|
|
45
46
|
return walletHandles;
|
|
46
47
|
} catch (e) {
|
|
47
|
-
setLoadingHandles(false);
|
|
48
48
|
console.log(e);
|
|
49
49
|
return walletHandles;
|
|
50
50
|
}
|
|
@@ -68,12 +68,13 @@ export const useWalletHandles = () => {
|
|
|
68
68
|
}
|
|
69
69
|
return newHandles;
|
|
70
70
|
});
|
|
71
|
-
});
|
|
72
|
-
}, [memoizedHandleDep, syncHandles, setHandles]);
|
|
71
|
+
}).then(() => setLoadingHandles(prevValue => !prevValue));
|
|
72
|
+
}, [memoizedHandleDep, syncHandles, setHandles, setLoadingHandles]);
|
|
73
73
|
const data = useMemo(() => ({
|
|
74
74
|
handles,
|
|
75
75
|
loadingHandles
|
|
76
76
|
}), [handles, loadingHandles]);
|
|
77
|
+
console.log(handles, loadingHandles);
|
|
77
78
|
return data;
|
|
78
79
|
};
|
|
79
80
|
//# sourceMappingURL=useWalletHandles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWalletHandles.js","names":["useCallback","useEffect","useMemo","useState","useWalletObserver","useWalletHandles","state","loadingHandles","setLoadingHandles","handles","setHandles","
|
|
1
|
+
{"version":3,"file":"useWalletHandles.js","names":["useCallback","useEffect","useMemo","useState","WalletAssetMap","normalizeAssetIdWithDot","useWalletObserver","useWalletHandles","state","loadingHandles","setLoadingHandles","handles","setHandles","memoizedHandleDep","balance","getHandles","keys","syncHandles","walletHandles","size","default","HandleClient","HandleClientContext","KoraLabsProvider","context","network","MAINNET","PREVIEW","sdk","provider","walletHandlesWithDataArray","entries","walletHandleDataArray","getAllDataBatch","map","key","value","split","forEach","asset","matchingData","find","hex","set","withMetadata","metadata","assetId","decimals","withAmount","e","console","log","then","newHandles","prevHandles","handleMetadataChanged","val","has","get","amount","prevValue","data"],"sources":["../../../../src/react-components/hooks/useWalletHandles.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { IHandle } from \"@koralabs/adahandle-sdk\";\nimport { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { TAssetAmountMap } from \"../../@types/observer.js\";\nimport { WalletAssetMap } from \"../../classes/WalletAssetMap.class.js\";\nimport { normalizeAssetIdWithDot } from \"../../utils/assets.js\";\nimport { THandleMetadata } from \"../contexts/observer/types.js\";\nimport { useWalletObserver } from \"./useWalletObserver.js\";\n\nexport const useWalletHandles = <\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n>() => {\n const state = useWalletObserver<THandleMetadata<AssetMetadata>>();\n const [loadingHandles, setLoadingHandles] = useState(true);\n const [handles, setHandles] = useState<\n TAssetAmountMap<THandleMetadata<AssetMetadata>>\n >(new WalletAssetMap());\n const memoizedHandleDep = useMemo(\n () => [...state.balance.getHandles().keys()],\n [state.balance]\n );\n\n const syncHandles = useCallback<\n () => Promise<TAssetAmountMap<THandleMetadata<AssetMetadata>>>\n >(async () => {\n // Make a copy of our wallet map.\n const walletHandles: TAssetAmountMap<THandleMetadata<AssetMetadata>> =\n new WalletAssetMap([...state.balance.getHandles()]);\n\n if (walletHandles.size === 0) {\n return walletHandles;\n }\n\n try {\n const {\n default: HandleClient,\n HandleClientContext,\n KoraLabsProvider,\n } = await import(\"@koralabs/adahandle-sdk\");\n const context =\n state.network === 1\n ? HandleClientContext.MAINNET\n : HandleClientContext.PREVIEW;\n\n // @ts-ignore Type isn't exported from default.\n const sdk = new HandleClient({\n context,\n provider: new KoraLabsProvider(context),\n });\n\n // Restore once SDK updated\n const walletHandlesWithDataArray = [...walletHandles.entries()];\n const walletHandleDataArray: IHandle[] = await sdk\n .provider()\n .getAllDataBatch(\n walletHandlesWithDataArray.map(([key]) => ({\n value: key.split(\".\")[1],\n }))\n );\n\n walletHandlesWithDataArray.forEach(([key, asset]) => {\n const matchingData = walletHandleDataArray.find(\n ({ hex }) => hex === key.split(\".\")[1]\n ) as IHandle;\n\n walletHandles.set(\n normalizeAssetIdWithDot(key),\n asset\n .withMetadata({\n ...matchingData,\n ...asset.metadata,\n assetId: normalizeAssetIdWithDot(asset.metadata.assetId),\n decimals: 0,\n })\n .withAmount(1n)\n );\n });\n\n return walletHandles;\n } catch (e) {\n console.log(e);\n return walletHandles;\n }\n // We only want to update the callback if the Handle keys change.\n }, [state.balance, setLoadingHandles]);\n\n useEffect(() => {\n syncHandles()\n .then((newHandles) => {\n setHandles((prevHandles) => {\n let handleMetadataChanged = false;\n\n if (newHandles.size !== prevHandles?.size) {\n handleMetadataChanged = true;\n } else {\n for (const [key, val] of newHandles) {\n if (\n !prevHandles.has(key) ||\n prevHandles.get(key)?.amount !== val?.amount\n ) {\n handleMetadataChanged = true;\n }\n }\n }\n\n if (!handleMetadataChanged) {\n return prevHandles;\n }\n\n return newHandles;\n });\n })\n .then(() => setLoadingHandles((prevValue) => !prevValue));\n }, [memoizedHandleDep, syncHandles, setHandles, setLoadingHandles]);\n\n const data = useMemo(\n () => ({\n handles,\n loadingHandles,\n }),\n [handles, loadingHandles]\n );\n\n console.log(handles, loadingHandles);\n\n return data;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -21,13 +21,14 @@ export const useWalletObserver = () => {
|
|
|
21
21
|
stakeAddress: state.stakeAddress,
|
|
22
22
|
network: state.network,
|
|
23
23
|
utxos: state.utxos,
|
|
24
|
+
collateral: state.collateral,
|
|
24
25
|
observer: state.observer,
|
|
25
26
|
syncWallet: state.syncWallet,
|
|
26
27
|
unusedAddresses: state.unusedAddresses,
|
|
27
28
|
usedAddresses: state.usedAddresses
|
|
28
29
|
};
|
|
29
30
|
return result;
|
|
30
|
-
}, [state.activeWallet, state.adaBalance, state.balance, state.mainAddress, state.stakeAddress, state.network, state.observer, state.syncWallet, state.unusedAddresses, state.usedAddresses, state.utxos, state.ready, state.isCip45]);
|
|
31
|
+
}, [state.activeWallet, state.adaBalance, state.balance, state.mainAddress, state.stakeAddress, state.network, state.observer, state.syncWallet, state.unusedAddresses, state.usedAddresses, state.utxos, state.collateral, state.ready, state.isCip45]);
|
|
31
32
|
return memoizedState;
|
|
32
33
|
};
|
|
33
34
|
//# sourceMappingURL=useWalletObserver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWalletObserver.js","names":["useMemo","useWalletObserverContext","useWalletObserver","state","memoizedState","result","ready","Boolean","activeWallet","observer","api","isCip45","adaBalance","balance","mainAddress","stakeAddress","network","utxos","syncWallet","unusedAddresses","usedAddresses"],"sources":["../../../../src/react-components/hooks/useWalletObserver.ts"],"sourcesContent":["import { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { useMemo } from \"react\";\n\nimport {\n TUseWalletObserverState,\n useWalletObserverContext,\n} from \"../contexts/observer/index.js\";\n\n/**\n * Exposes the WalletObserver state.\n *\n * @returns {TUseWalletObserverState<AssetMetadata>}\n */\nexport const useWalletObserver = <\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n>(): TUseWalletObserverState<AssetMetadata> => {\n const { state } = useWalletObserverContext<AssetMetadata>();\n\n const memoizedState = useMemo(() => {\n const result: TUseWalletObserverState<AssetMetadata> = {\n ready: Boolean(state.activeWallet && state.observer.api),\n isCip45: state.isCip45,\n activeWallet: state.activeWallet,\n adaBalance: state.adaBalance,\n balance: state.balance,\n mainAddress: state.mainAddress,\n stakeAddress: state.stakeAddress,\n network: state.network,\n utxos: state.utxos,\n observer: state.observer,\n syncWallet: state.syncWallet,\n unusedAddresses: state.unusedAddresses,\n usedAddresses: state.usedAddresses,\n };\n\n return result;\n }, [\n state.activeWallet,\n state.adaBalance,\n state.balance,\n state.mainAddress,\n state.stakeAddress,\n state.network,\n state.observer,\n state.syncWallet,\n state.unusedAddresses,\n state.usedAddresses,\n state.utxos,\n state.ready,\n state.isCip45,\n ]);\n\n return memoizedState;\n};\n"],"mappings":"AACA,SAASA,OAAO,QAAQ,OAAO;AAE/B,SAEEC,wBAAwB,QACnB,+BAA+B;;AAEtC;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,GAAGA,CAAA,KAEc;EAC7C,MAAM;IAAEC;EAAM,CAAC,GAAGF,wBAAwB,CAAgB,CAAC;EAE3D,MAAMG,aAAa,GAAGJ,OAAO,CAAC,MAAM;IAClC,MAAMK,MAA8C,GAAG;MACrDC,KAAK,EAAEC,OAAO,CAACJ,KAAK,CAACK,YAAY,IAAIL,KAAK,CAACM,QAAQ,CAACC,GAAG,CAAC;MACxDC,OAAO,EAAER,KAAK,CAACQ,OAAO;MACtBH,YAAY,EAAEL,KAAK,CAACK,YAAY;MAChCI,UAAU,EAAET,KAAK,CAACS,UAAU;MAC5BC,OAAO,EAAEV,KAAK,CAACU,OAAO;MACtBC,WAAW,EAAEX,KAAK,CAACW,WAAW;MAC9BC,YAAY,EAAEZ,KAAK,CAACY,YAAY;MAChCC,OAAO,EAAEb,KAAK,CAACa,OAAO;MACtBC,KAAK,EAAEd,KAAK,CAACc,KAAK;
|
|
1
|
+
{"version":3,"file":"useWalletObserver.js","names":["useMemo","useWalletObserverContext","useWalletObserver","state","memoizedState","result","ready","Boolean","activeWallet","observer","api","isCip45","adaBalance","balance","mainAddress","stakeAddress","network","utxos","collateral","syncWallet","unusedAddresses","usedAddresses"],"sources":["../../../../src/react-components/hooks/useWalletObserver.ts"],"sourcesContent":["import { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { useMemo } from \"react\";\n\nimport {\n TUseWalletObserverState,\n useWalletObserverContext,\n} from \"../contexts/observer/index.js\";\n\n/**\n * Exposes the WalletObserver state.\n *\n * @returns {TUseWalletObserverState<AssetMetadata>}\n */\nexport const useWalletObserver = <\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata\n>(): TUseWalletObserverState<AssetMetadata> => {\n const { state } = useWalletObserverContext<AssetMetadata>();\n\n const memoizedState = useMemo(() => {\n const result: TUseWalletObserverState<AssetMetadata> = {\n ready: Boolean(state.activeWallet && state.observer.api),\n isCip45: state.isCip45,\n activeWallet: state.activeWallet,\n adaBalance: state.adaBalance,\n balance: state.balance,\n mainAddress: state.mainAddress,\n stakeAddress: state.stakeAddress,\n network: state.network,\n utxos: state.utxos,\n collateral: state.collateral,\n observer: state.observer,\n syncWallet: state.syncWallet,\n unusedAddresses: state.unusedAddresses,\n usedAddresses: state.usedAddresses,\n };\n\n return result;\n }, [\n state.activeWallet,\n state.adaBalance,\n state.balance,\n state.mainAddress,\n state.stakeAddress,\n state.network,\n state.observer,\n state.syncWallet,\n state.unusedAddresses,\n state.usedAddresses,\n state.utxos,\n state.collateral,\n state.ready,\n state.isCip45,\n ]);\n\n return memoizedState;\n};\n"],"mappings":"AACA,SAASA,OAAO,QAAQ,OAAO;AAE/B,SAEEC,wBAAwB,QACnB,+BAA+B;;AAEtC;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,GAAGA,CAAA,KAEc;EAC7C,MAAM;IAAEC;EAAM,CAAC,GAAGF,wBAAwB,CAAgB,CAAC;EAE3D,MAAMG,aAAa,GAAGJ,OAAO,CAAC,MAAM;IAClC,MAAMK,MAA8C,GAAG;MACrDC,KAAK,EAAEC,OAAO,CAACJ,KAAK,CAACK,YAAY,IAAIL,KAAK,CAACM,QAAQ,CAACC,GAAG,CAAC;MACxDC,OAAO,EAAER,KAAK,CAACQ,OAAO;MACtBH,YAAY,EAAEL,KAAK,CAACK,YAAY;MAChCI,UAAU,EAAET,KAAK,CAACS,UAAU;MAC5BC,OAAO,EAAEV,KAAK,CAACU,OAAO;MACtBC,WAAW,EAAEX,KAAK,CAACW,WAAW;MAC9BC,YAAY,EAAEZ,KAAK,CAACY,YAAY;MAChCC,OAAO,EAAEb,KAAK,CAACa,OAAO;MACtBC,KAAK,EAAEd,KAAK,CAACc,KAAK;MAClBC,UAAU,EAAEf,KAAK,CAACe,UAAU;MAC5BT,QAAQ,EAAEN,KAAK,CAACM,QAAQ;MACxBU,UAAU,EAAEhB,KAAK,CAACgB,UAAU;MAC5BC,eAAe,EAAEjB,KAAK,CAACiB,eAAe;MACtCC,aAAa,EAAElB,KAAK,CAACkB;IACvB,CAAC;IAED,OAAOhB,MAAM;EACf,CAAC,EAAE,CACDF,KAAK,CAACK,YAAY,EAClBL,KAAK,CAACS,UAAU,EAChBT,KAAK,CAACU,OAAO,EACbV,KAAK,CAACW,WAAW,EACjBX,KAAK,CAACY,YAAY,EAClBZ,KAAK,CAACa,OAAO,EACbb,KAAK,CAACM,QAAQ,EACdN,KAAK,CAACgB,UAAU,EAChBhB,KAAK,CAACiB,eAAe,EACrBjB,KAAK,CAACkB,aAAa,EACnBlB,KAAK,CAACc,KAAK,EACXd,KAAK,CAACe,UAAU,EAChBf,KAAK,CAACG,KAAK,EACXH,KAAK,CAACQ,OAAO,CACd,CAAC;EAEF,OAAOP,aAAa;AACtB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { WalletObserver } from "../classes/WalletObserver.class.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Helper function to normalize asset ID notation.
|
|
5
|
+
*
|
|
6
|
+
* @param {string} assetId The asset ID as a HEX string (either with dot or without).
|
|
7
|
+
* @returns {string}
|
|
8
|
+
*/
|
|
9
|
+
export const normalizeAssetIdWithDot = assetId => {
|
|
10
|
+
if (assetId.includes(".") || assetId === WalletObserver.ADA_ASSET_ID) {
|
|
11
|
+
return assetId;
|
|
12
|
+
}
|
|
13
|
+
const policyId = assetId.slice(0, 56);
|
|
14
|
+
const assetName = assetId.slice(56);
|
|
15
|
+
if (assetName) {
|
|
16
|
+
return `${policyId}.${assetName}`;
|
|
17
|
+
}
|
|
18
|
+
return policyId;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Helper function to internally check if an asset is ADA.
|
|
23
|
+
*
|
|
24
|
+
* @param {string} id The asset id.
|
|
25
|
+
* @returns {boolean}
|
|
26
|
+
*/
|
|
27
|
+
export const isAdaAsset = id => id === WalletObserver.ADA_ASSET_ID;
|
|
28
|
+
//# sourceMappingURL=assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.js","names":["WalletObserver","normalizeAssetIdWithDot","assetId","includes","ADA_ASSET_ID","policyId","slice","assetName","isAdaAsset","id"],"sources":["../../../src/utils/assets.ts"],"sourcesContent":["import { WalletObserver } from \"../classes/WalletObserver.class.js\";\n\n/**\n * Helper function to normalize asset ID notation.\n *\n * @param {string} assetId The asset ID as a HEX string (either with dot or without).\n * @returns {string}\n */\nexport const normalizeAssetIdWithDot = (assetId: string): string => {\n if (assetId.includes(\".\") || assetId === WalletObserver.ADA_ASSET_ID) {\n return assetId;\n }\n\n const policyId = assetId.slice(0, 56);\n const assetName = assetId.slice(56);\n\n if (assetName) {\n return `${policyId}.${assetName}`;\n }\n\n return policyId;\n};\n\n/**\n * Helper function to internally check if an asset is ADA.\n *\n * @param {string} id The asset id.\n * @returns {boolean}\n */\nexport const isAdaAsset = (id: string): boolean =>\n id === WalletObserver.ADA_ASSET_ID;\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,oCAAoC;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,uBAAuB,GAAIC,OAAe,IAAa;EAClE,IAAIA,OAAO,CAACC,QAAQ,CAAC,GAAG,CAAC,IAAID,OAAO,KAAKF,cAAc,CAACI,YAAY,EAAE;IACpE,OAAOF,OAAO;EAChB;EAEA,MAAMG,QAAQ,GAAGH,OAAO,CAACI,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;EACrC,MAAMC,SAAS,GAAGL,OAAO,CAACI,KAAK,CAAC,EAAE,CAAC;EAEnC,IAAIC,SAAS,EAAE;IACb,OAAO,GAAGF,QAAQ,IAAIE,SAAS,EAAE;EACnC;EAEA,OAAOF,QAAQ;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMG,UAAU,GAAIC,EAAU,IACnCA,EAAE,KAAKT,cAAc,CAACI,YAAY","ignoreList":[]}
|
|
@@ -2,8 +2,10 @@ import type { TransactionUnspentOutput } from "@cardano-sdk/core/dist/cjs/Serial
|
|
|
2
2
|
import type { Cip30WalletApi } from "@cardano-sdk/dapp-connector";
|
|
3
3
|
import type { DAppPeerConnect } from "@fabianbormann/cardano-peer-connect";
|
|
4
4
|
import type { DAppPeerConnectParameters } from "@fabianbormann/cardano-peer-connect/dist/src/types.js";
|
|
5
|
-
import type {
|
|
5
|
+
import type { IAssetAmountMetadata } from "@sundaeswap/asset";
|
|
6
|
+
import { WalletAssetMap } from "../classes/WalletAssetMap.class.js";
|
|
6
7
|
import { WalletBalanceMap } from "../classes/WalletBalanceMap.class.js";
|
|
8
|
+
import { isAdaAsset, normalizeAssetIdWithDot } from "../utils/assets.js";
|
|
7
9
|
/**
|
|
8
10
|
* A list of support CIP-30 wallet extensions in the browser.
|
|
9
11
|
*/
|
|
@@ -28,7 +30,7 @@ export type TWindowCardano = {
|
|
|
28
30
|
* The metadata resolver should return a map composed of
|
|
29
31
|
* the asset ID as the key, and the metadata as the value.
|
|
30
32
|
*/
|
|
31
|
-
export type TMetadataResolverFunc<T extends IAssetAmountMetadata = IAssetAmountMetadata> = (assetIds: string[]) => Promise<Map<string, T>>;
|
|
33
|
+
export type TMetadataResolverFunc<T extends IAssetAmountMetadata = IAssetAmountMetadata> = (assetIds: string[], normalizeAssetIdFunc: typeof normalizeAssetIdWithDot, isAdaAssetFunc: typeof isAdaAsset) => Promise<Map<string, T>>;
|
|
32
34
|
/**
|
|
33
35
|
* Options that are passed to the WalletObserver instance.
|
|
34
36
|
*/
|
|
@@ -45,7 +47,7 @@ export type TWalletObserverOptions<AssetMetadata extends IAssetAmountMetadata =
|
|
|
45
47
|
/**
|
|
46
48
|
* Interface describing the Map type of an asset.
|
|
47
49
|
*/
|
|
48
|
-
export type TAssetAmountMap<T extends IAssetAmountMetadata = IAssetAmountMetadata> =
|
|
50
|
+
export type TAssetAmountMap<T extends IAssetAmountMetadata = IAssetAmountMetadata> = WalletAssetMap<T>;
|
|
49
51
|
/**
|
|
50
52
|
* Interface describing the structure of the persistent
|
|
51
53
|
* data located in local storage.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../../src/@types/observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AACvG,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../../src/@types/observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AACvG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAClC,MAAM,GACN,QAAQ,GACR,aAAa,GACb,SAAS,GACT,QAAQ,GACR,OAAO,GACP,OAAO,GACP,YAAY,GACZ,YAAY,GACZ,MAAM,GACN,OAAO,GACP,MAAM,GACN,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,EAAE,0BAA0B,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;KAC1B,CAAC,IAAI,0BAA0B,CAAC,CAAC,EAAE,qBAAqB;CAC1D,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,qBAAqB,CAC/B,CAAC,SAAS,oBAAoB,GAAG,oBAAoB,IACnD,CACF,QAAQ,EAAE,MAAM,EAAE,EAClB,oBAAoB,EAAE,OAAO,uBAAuB,EACpD,cAAc,EAAE,OAAO,UAAU,KAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,8BAA8B,CAC7C,aAAa,SAAS,oBAAoB,GAAG,oBAAoB;IAEjE,gBAAgB,EAAE,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACvD,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,yBAAyB,CAAC;IAC3C,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAChC,aAAa,SAAS,oBAAoB,GAAG,oBAAoB,IAC/D,OAAO,CAAC,8BAA8B,CAAC,aAAa,CAAC,CAAC,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,eAAe,CACzB,CAAC,SAAS,oBAAoB,GAAG,oBAAoB,IACnD,cAAc,CAAC,CAAC,CAAC,CAAC;AAEtB;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,0BAA0B,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,mBAAmB,CAClC,aAAa,SAAS,oBAAoB,GAAG,oBAAoB;IAEjE,UAAU,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC5C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AssetAmount, IAssetAmountMetadata } from "@sundaeswap/asset";
|
|
2
|
+
/**
|
|
3
|
+
* Map wrapper to enforce asset id normalization when setting and getting assets.
|
|
4
|
+
*/
|
|
5
|
+
export declare class WalletAssetMap<AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata> extends Map<string, AssetAmount<AssetMetadata>> {
|
|
6
|
+
/**
|
|
7
|
+
* Overlay to enforce asset ID normalization.
|
|
8
|
+
*
|
|
9
|
+
* @param {string} key Retrieve the asset ID as a HEX string (either with dot or without).
|
|
10
|
+
* @returns {AssetAmount<AssetMetadata> | undefined}
|
|
11
|
+
*/
|
|
12
|
+
get(key: string): AssetAmount<AssetMetadata> | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Overlay to enforce asset ID normalization.
|
|
15
|
+
*
|
|
16
|
+
* @param {string} key Retrieve the asset ID as a HEX string (either with dot or without).
|
|
17
|
+
* @param {AssetAmount<AssetMetadata>} key Retrieve the asset ID as a HEX string (either with dot or without).
|
|
18
|
+
* @returns {this}
|
|
19
|
+
*/
|
|
20
|
+
set(key: string, value: AssetAmount<AssetMetadata>): this;
|
|
21
|
+
/**
|
|
22
|
+
* Overlay to enforce asset ID normalization.
|
|
23
|
+
*
|
|
24
|
+
* @param {string} key Retrieve the asset ID as a HEX string (either with dot or without).
|
|
25
|
+
* @returns {AssetAmount<AssetMetadata> | undefined}
|
|
26
|
+
*/
|
|
27
|
+
has(key: string): boolean;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=WalletAssetMap.class.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WalletAssetMap.class.d.ts","sourceRoot":"","sources":["../../../src/classes/WalletAssetMap.class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGtE;;GAEG;AACH,qBAAa,cAAc,CACzB,aAAa,SAAS,oBAAoB,GAAG,oBAAoB,CACjE,SAAQ,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAC/C;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,GAAG,SAAS;IAIxD;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,GAAG,IAAI;IAIzD;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAG1B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IAssetAmountMetadata } from "@sundaeswap/asset";
|
|
2
2
|
import { TAssetAmountMap } from "../@types/observer.js";
|
|
3
|
+
import { WalletAssetMap } from "./WalletAssetMap.class.js";
|
|
3
4
|
import { WalletObserver } from "./WalletObserver.class.js";
|
|
4
5
|
/**
|
|
5
6
|
* A custom Map instance that describes a list of assets and their metadata,
|
|
@@ -9,7 +10,7 @@ import { WalletObserver } from "./WalletObserver.class.js";
|
|
|
9
10
|
* @template AssetMetadata - Type extending IAssetAmountMetadata.
|
|
10
11
|
* @extends {Map<string, AssetAmount<AssetMetadata>>}
|
|
11
12
|
*/
|
|
12
|
-
export declare class WalletBalanceMap<AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata> extends
|
|
13
|
+
export declare class WalletBalanceMap<AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata> extends WalletAssetMap<AssetMetadata> {
|
|
13
14
|
private _observer;
|
|
14
15
|
/**
|
|
15
16
|
* @private
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WalletBalanceMap.class.d.ts","sourceRoot":"","sources":["../../../src/classes/WalletBalanceMap.class.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"WalletBalanceMap.class.d.ts","sourceRoot":"","sources":["../../../src/classes/WalletBalanceMap.class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D;;;;;;;GAOG;AACH,qBAAa,gBAAgB,CAC3B,aAAa,SAAS,oBAAoB,GAAG,oBAAoB,CACjE,SAAQ,cAAc,CAAC,aAAa,CAAC;IAiBzB,OAAO,CAAC,SAAS;IAhB7B;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB,CAGtB;IAEF;;;OAGG;gBACiB,SAAS,EAAE,cAAc;IAI7C;;;;;OAKG;IACH,iBAAiB,QAAO,gBAAgB,aAAa,CAAC,CASpD;IAEF;;;;;OAKG;IACH,UAAU,QAAO,gBAAgB,aAAa,CAAC,CAa7C;IAEF;;;;;;OAMG;IACH,oBAAoB,iBACJ,OAAO,KACpB,gBAAgB,aAAa,CAAC,CAkB/B;IAEF;;;;;OAKG;IACH,OAAO,iBAAkB,OAAO,KAAG,gBAAgB,aAAa,CAAC,CACxB;CAC1C"}
|
|
@@ -140,6 +140,12 @@ export declare class WalletObserver<AssetMetadata extends IAssetAmountMetadata =
|
|
|
140
140
|
* @returns {Promise<TransactionUnspentOutput[]>} The list of TransactionUnspentOutputs.
|
|
141
141
|
*/
|
|
142
142
|
getUtxos: () => Promise<TransactionUnspentOutput[] | undefined>;
|
|
143
|
+
/**
|
|
144
|
+
* Gets a list of wallet UTXOs suitable for collateral.
|
|
145
|
+
*
|
|
146
|
+
* @returns {Promise<TransactionUnspentOutput[]>} The list of TransactionUnspentOutputs.
|
|
147
|
+
*/
|
|
148
|
+
getCollateral: () => Promise<TransactionUnspentOutput[] | undefined>;
|
|
143
149
|
/**
|
|
144
150
|
* Resolves metadata for the given asset IDs, using a cached version if available.
|
|
145
151
|
*
|