import type { Address, Hex } from "viem" import { MAGIC_ADDRESS_SERVER_URL } from "../constants" import { deepHexlify } from "../utils" export type GetMagicAddressFeeEstimatesParams = { magicAddress: Address config?: { baseUrl?: string } } export type EstimatedFeeData = { token: Address name: string decimal: number fee: Hex minDeposit: Hex } export type EstimatedFee = { chainId: number data: EstimatedFeeData[] } export type GetMagicAddressFeeEstimatesReturns = { estimatedFees: EstimatedFee[] } export const getMagicAddressFeeEstimates = async ( params: GetMagicAddressFeeEstimatesParams ): Promise => { const { magicAddress, config } = params const requestBody = magicAddress const baseUrl = config?.baseUrl || MAGIC_ADDRESS_SERVER_URL const res = await fetch(`${baseUrl}/v1`, { method: "POST", body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "ma_getEstimatedFeesByMagicAddress", params: [deepHexlify(requestBody)] }), headers: { "Content-Type": "application/json" } }) if (!res.ok) { throw new Error(`Failed to get magic address fees: ${res.statusText}`) } const data = (await res.json()) as { error?: { message: string } result?: { estimatedFees: EstimatedFee[] } } if (data.error) { throw new Error(`Error from server: ${data.error.message}`) } const result = data.result as GetMagicAddressFeeEstimatesReturns return result }