import type { Address, Hex } from "viem" import { MAGIC_ADDRESS_SERVER_URL } from "../constants" import { deepHexlify } from "../utils" export type GetMagicAddressInfoParams = { magicAddress: Address config?: { baseUrl?: string } } export type Call = { target: Address data: Hex value: string actionType: number tokenAddressOffset: string tokenAmountOffset: string } export type Action = { asset: Address isNative: boolean calls: Call[] fallBack: Call[] } export type SrcToken = { token: Address chainId: number minAmount: string } export type GetMagicAddressInfoReturns = { executionChainId: number owner: Address magicAddress: Hex slippage: number srcTokens: SrcToken[] actions: Action[] createdAt: string updatedAt: string } export const getMagicAddressInfo = async ( params: GetMagicAddressInfoParams ): 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_getMagicAddress", params: [deepHexlify(requestBody)] }), headers: { "Content-Type": "application/json" } }) if (!res.ok) { throw new Error(`Failed to get magic address info: ${res.statusText}`) } const data = (await res.json()) as { error?: { message: string } result?: GetMagicAddressInfoReturns } if (data.error) { throw new Error(`Error from server: ${data.error.message}`) } const result = data.result as GetMagicAddressInfoReturns return result }