@reown/appkit-controllers
Version:
#### 🔗 [Website](https://reown.com/appkit)
84 lines • 3.4 kB
JavaScript
import { AccountController } from '../controllers/AccountController.js';
import { BlockchainApiController } from '../controllers/BlockchainApiController.js';
import { ChainController } from '../controllers/ChainController.js';
import { ConnectionController } from '../controllers/ConnectionController.js';
import { BalanceUtil } from './BalanceUtil.js';
import { getActiveNetworkTokenAddress } from './ChainControllerUtil.js';
// -- Controller ---------------------------------------- //
export const SwapApiUtil = {
async getTokenList() {
const caipNetwork = ChainController.state.activeCaipNetwork;
const response = await BlockchainApiController.fetchSwapTokens({
chainId: caipNetwork?.caipNetworkId
});
const tokens = response?.tokens?.map(token => ({
...token,
eip2612: false,
quantity: {
decimals: '0',
numeric: '0'
},
price: 0,
value: 0
})) || [];
return tokens;
},
async fetchGasPrice() {
const caipNetwork = ChainController.state.activeCaipNetwork;
if (!caipNetwork) {
return null;
}
try {
switch (caipNetwork.chainNamespace) {
case 'solana':
// eslint-disable-next-line no-case-declarations
const lamportsPerSignature = (await ConnectionController?.estimateGas({ chainNamespace: 'solana' }))?.toString();
return {
standard: lamportsPerSignature,
fast: lamportsPerSignature,
instant: lamportsPerSignature
};
case 'eip155':
default:
return await BlockchainApiController.fetchGasPrice({
chainId: caipNetwork.caipNetworkId
});
}
}
catch {
return null;
}
},
async fetchSwapAllowance({ tokenAddress, userAddress, sourceTokenAmount, sourceTokenDecimals }) {
const response = await BlockchainApiController.fetchSwapAllowance({
tokenAddress,
userAddress
});
if (response?.allowance && sourceTokenAmount && sourceTokenDecimals) {
const parsedValue = ConnectionController.parseUnits(sourceTokenAmount, sourceTokenDecimals) || 0;
const hasAllowance = BigInt(response.allowance) >= parsedValue;
return hasAllowance;
}
return false;
},
async getMyTokensWithBalance(forceUpdate) {
const balances = await BalanceUtil.getMyTokensWithBalance(forceUpdate);
AccountController.setTokenBalance(balances, ChainController.state.activeChain);
return this.mapBalancesToSwapTokens(balances);
},
/**
* Maps the balances from Blockchain API to SwapTokenWithBalance array
* @param balances
* @returns SwapTokenWithBalance[]
*/
mapBalancesToSwapTokens(balances) {
return (balances?.map(token => ({
...token,
address: token?.address ? token.address : getActiveNetworkTokenAddress(),
decimals: parseInt(token.quantity.decimals, 10),
logoUri: token.iconUrl,
eip2612: false
})) || []);
}
};
//# sourceMappingURL=SwapApiUtil.js.map