mango-v4-ui/types/index.ts

245 lines
5.0 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-explicit-any */
import { PerpMarket, Serum3Market } from '@blockworks-foundation/mango-v4'
import { Modify } from '@blockworks-foundation/mango-v4'
import { Event } from '@project-serum/serum/lib/queue'
export type EmptyObject = { [K in keyof never]?: never }
export interface OrderbookL2 {
bids: number[][]
asks: number[][]
}
export type SpotBalances = Record<
string,
{ inOrders: number; unsettled: number }
>
export interface SpotTradeHistory {
signature: string
block_datetime: string
market: string
open_orders: string
mango_account: string
bid: boolean
maker: boolean
referrer_rebate: any
order_id: string
client_order_id: string
fee_tier: number
instruction_num: number
size: number
price: number
side: 'buy' | 'sell'
fee_cost: number
open_orders_owner: string
base_symbol: string
quote_symbol: string
}
export interface PerpTradeHistory {
signature: string
slot: number
block_datetime: string
maker: string
maker_order_id: string
maker_fee: number
taker: string
taker_order_id: string
taker_client_order_id: string
taker_fee: number
taker_side: 'bid' | 'ask'
perp_market: string
market_index: number
price: number
quantity: number
seq_num: number
}
export type SerumEvent = Modify<
Event,
{
price: number
size: number
side: string
feeCost: number
}
>
export type GenericMarket = Serum3Market | PerpMarket
export type TradeHistoryApiResponseType = Array<{
trade_type: string
block_datetime: string
activity_details: PerpTradeHistory | SpotTradeHistory
}>
export type AccountPerformanceData = {
[date: string]: {
account_equity: number
pnl: number
spot_value: number
transfer_balance: number
deposit_interest_cumulative_usd: number
borrow_interest_cumulative_usd: number
spot_volume_usd: number
}
}
export interface TotalInterestDataItem {
borrow_interest: number
deposit_interest: number
borrow_interest_usd: number
deposit_interest_usd: number
symbol: string
}
export interface PerformanceDataItem {
account_equity: number
borrow_interest_cumulative_usd: number
deposit_interest_cumulative_usd: number
pnl: number
spot_value: number
time: string
transfer_balance: number
}
export interface DepositWithdrawFeedItem {
block_datetime: string
mango_account: string
quantity: number
signature: string
symbol: string
usd_equivalent: number
wallet_pk: string
}
export interface LiquidationFeedItem {
asset_amount: number
asset_price: number
asset_symbol: string
block_datetime: string
liab_amount: number
liab_price: number
liab_symbol: string
mango_account: string
mango_group: string
side: string
signature: string
}
export interface LiquidationActivity {
activity_details: LiquidationFeedItem
block_datetime: string
activity_type: string
symbol: string
}
export function isLiquidationFeedItem(
item: ActivityFeed
): item is LiquidationActivity {
if (item.activity_type.includes('liquidate')) {
return true
}
return false
}
export interface SwapHistoryItem {
block_datetime: string
mango_account: string
signature: string
swap_in_amount: number
swap_in_loan: number
swap_in_loan_origination_fee: number
swap_in_price_usd: number
swap_in_symbol: string
swap_out_amount: number
loan: number
loan_origination_fee: number
swap_out_price_usd: number
swap_out_symbol: string
}
export interface NFT {
address: string
image: string
}
export interface PerpStatsItem {
date_hour: string
fees_accrued: number
funding_rate_hourly: number
instantaneous_funding_rate: number
mango_group: string
market_index: number
open_interest: number
perp_market: string
price: number
stable_price: number
}
export type ActivityFeed = {
activity_type: string
block_datetime: string
symbol: string
activity_details:
| DepositWithdrawFeedItem
| LiquidationFeedItem
| SwapHistoryItem
| PerpTradeHistory
| SpotTradeHistory
}
export interface ProfileDetails {
profile_image_url?: string
profile_name: string
trader_category: string
wallet_pk: string
}
export interface TourSettings {
account_tour_seen: boolean
swap_tour_seen: boolean
trade_tour_seen: boolean
wallet_pk: string
}
export interface TokenStatsItem {
borrow_apr: number
borrow_rate: number
collected_fees: number
date_hour: string
deposit_apr: number
deposit_rate: number
mango_group: string
price: number
symbol: string
token_index: number
total_borrows: number
total_deposits: number
}
export interface TradeForm {
side: 'buy' | 'sell'
price: string | undefined
baseSize: string
quoteSize: string
tradeType: 'Market' | 'Limit'
postOnly: boolean
ioc: boolean
reduceOnly: boolean
}
export interface MangoError extends Error {
txid: string
}
export function isMangoError(error: unknown): error is MangoError {
return (
typeof error === 'object' &&
error !== null &&
'message' in error &&
'txid' in error &&
typeof (error as Record<string, unknown>).message === 'string'
)
}