import type { Address, Hash } from "viem" import { MAGIC_ADDRESS_SERVER_URL } from "../constants" import { deepHexlify } from "../utils" export type GetMagicAddressStatusParams = { magicAddress: Address page?: number // default to 0 pageSize?: number // default to 50 config?: { baseUrl?: string } } export type DepositInfo = { chainId: number token: Address amount: string blockNumber: string transactionHash: Hash } export type BridgeInfo = { blockNumber: string transactionHash: Hash } export type ExecutionInfo = { blockNumber: string chainId: number | null outputToken: Address transactionHash: Hash outputAmount: string } export type DepositedToken = { deposit: DepositInfo bridge: BridgeInfo | null execution: ExecutionInfo | null } export type GetMagicAddressStatusReturns = { deposits: DepositedToken[] totalCount: number nextPage: number | null totalPages: number } export const getMagicAddressStatus = async ( params: GetMagicAddressStatusParams ): Promise => { const { magicAddress, page = 1, pageSize = 50, config } = params const requestBody = { magicAddress, page, pageSize } 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_getMagicAddressStatus", params: [deepHexlify(requestBody)] }), headers: { "Content-Type": "application/json" } }) if (!res.ok) { throw new Error(`Failed to get magic address status: ${res.statusText}`) } const data = (await res.json()) as { error?: { message: string } result?: GetMagicAddressStatusReturns } if (data.error) { throw new Error(`Error from server: ${data.error.message}`) } const result = data.result as GetMagicAddressStatusReturns return result }