@hyperfoundation/sdk
Version:
SDK for Hyperliquid API
1,156 lines (1,023 loc) • 21.2 kB
text/typescript
export type Tif = 'Alo' | 'Ioc' | 'Gtc';
export type TriggerType = 'tp' | 'sl';
export type LimitOrder = { tif: Tif };
export type TriggerOrder = { triggerPx: string | number; isMarket: boolean; tpsl: TriggerType };
export type Grouping = 'na' | 'normalTpsl' | 'positionTpsl';
export type OrderType = { limit?: LimitOrder; trigger?: TriggerOrder };
export type Cloid = string;
export type OidOrCloid = number | Cloid;
export interface OrderRequest {
coin: string;
is_buy: boolean;
sz: number | string;
limit_px: number | string;
order_type: OrderType;
reduce_only: boolean;
cloid?: string;
grouping?: Grouping;
builder?: Builder;
}
interface BaseOrder {
vaultAddress?: string;
grouping?: Grouping;
builder?: Builder;
}
export interface Order extends BaseOrder {
coin: string;
is_buy: boolean;
sz: number | string;
limit_px: number | string;
order_type: OrderType;
reduce_only: boolean;
cloid?: Cloid;
orders?: undefined;
}
export interface MultiOrder extends BaseOrder {
orders: OrderRequest[];
}
export type BulkOrderRequest = MultiOrder;
export interface Builder {
address: string;
fee: number;
}
export interface AllMids {
[coin: string]: string;
}
export type Meta = {
universe: {
name: string;
szDecimals: number;
maxLeverage: number;
onlyIsolated?: boolean;
}[];
};
export interface ClearinghouseState {
assetPositions: {
position: {
coin: string;
cumFunding: {
allTime: string;
sinceChange: string;
sinceOpen: string;
};
entryPx: string;
leverage: {
rawUsd: string;
type: string;
value: number;
};
liquidationPx: string;
marginUsed: string;
maxLeverage: number;
positionValue: string;
returnOnEquity: string;
szi: string;
unrealizedPnl: string;
};
type: string;
}[];
crossMaintenanceMarginUsed: string;
crossMarginSummary: {
accountValue: string;
totalMarginUsed: string;
totalNtlPos: string;
totalRawUsd: string;
};
marginSummary: {
accountValue: string;
totalMarginUsed: string;
totalNtlPos: string;
totalRawUsd: string;
};
time: number;
withdrawable: string;
}
export type UserFills = {
closedPnl: string;
coin: string;
crossed: boolean;
dir: string;
hash: string;
oid: number;
px: string;
side: string;
startPosition: string;
sz: string;
time: number;
}[];
export interface OrderResponse {
status: string;
response: {
type: string;
data: {
statuses: Array<{
resting?: { oid: number };
filled?: {
oid: number;
totalSz: string;
avgPx: string;
};
}>;
};
};
}
export interface Leverage {
type: 'cross' | 'isolated';
value: number;
rawUsd?: string;
}
export interface WsTrade {
coin: string;
side: string;
px: string;
sz: string;
hash: string;
time: number;
tid: number;
}
export interface WsBook {
coin: string;
levels: [Array<WsLevel>, Array<WsLevel>];
time: number;
}
export interface WsBbo {
coin: string;
time: number;
bbo: [WsLevel | null, WsLevel | null];
}
export interface WsLevel {
px: string;
sz: string;
n: number;
}
export interface WsOrder {
order: {
coin: string;
side: string;
limitPx: string;
sz: string;
oid: number;
timestamp: number;
origSz: string;
};
status: string;
statusTimestamp: number;
user: string;
}
export type WsUserEvent = (WsFill[] | WsUserFunding | WsLiquidation | WsNonUserCancel[]) & {
user: string;
};
export interface WsFill {
coin: string;
px: string;
sz: string;
side: string;
time: number;
startPosition: string;
dir: string;
closedPnl: string;
hash: string;
oid: number;
crossed: boolean;
fee: string;
tid: number;
}
export interface WsUserFunding {
time: number;
coin: string;
usdc: string;
szi: string;
fundingRate: string;
}
export interface WsLiquidation {
lid: number;
liquidator: string;
liquidated_user: string;
liquidated_ntl_pos: string;
liquidated_account_value: string;
}
export interface WsNonUserCancel {
coin: string;
oid: number;
}
export interface SpotClearinghouseState {
balances: {
coin: string;
hold: string;
total: string;
}[];
}
export type FrontendOpenOrders = {
coin: string;
isPositionTpsl: boolean;
isTrigger: boolean;
limitPx: string;
oid: number;
orderType: string;
origSz: string;
reduceOnly: boolean;
side: string;
sz: string;
timestamp: number;
triggerCondition: string;
triggerPx: string;
}[];
export interface UserRateLimit {
[key: string]: any;
}
export interface OrderStatus {
[key: string]: any;
}
export interface L2Book {
levels: [
{
px: string;
sz: string;
n: number;
}[],
{
px: string;
sz: string;
n: number;
}[],
];
}
export type CandleSnapshot = Candle[];
export type AssetCtx = {
dayBaseVlm: string;
dayNtlVlm: string;
funding: string;
impactPxs: [string, string];
markPx: string;
midPx: string;
openInterest: string;
oraclePx: string;
premium: string;
prevDayPx: string;
};
export type MetaAndAssetCtxs = [Meta, AssetCtx[]];
export interface UserFundingDelta {
coin: string;
fundingRate: string;
szi: string;
type: 'funding';
usdc: string;
}
export interface UserFundingEntry {
delta: UserFundingDelta;
hash: string;
time: number;
}
export type UserFunding = UserFundingEntry[];
export interface UserNonFundingLedgerDelta {
coin: string;
type: 'deposit' | 'withdraw' | 'transfer' | 'liquidation';
usdc: string;
}
export interface UserNonFundingLedgerEntry {
delta: UserNonFundingLedgerDelta;
hash: string;
time: number;
}
export type UserNonFundingLedgerUpdates = UserNonFundingLedgerEntry[];
export interface FundingHistoryEntry {
coin: string;
fundingRate: string;
premium: string;
time: number;
}
export type FundingHistory = FundingHistoryEntry[];
export interface SpotToken {
name: string;
szDecimals: number;
weiDecimals: number;
index: number;
tokenId: string;
isCanonical: boolean;
}
export interface SpotMarket {
name: string;
tokens: [number, number]; // Indices of base and quote tokens
index: number;
isCanonical: boolean;
}
export type SpotMeta = {
tokens: SpotToken[];
universe: SpotMarket[];
};
export type SpotAssetCtx = {
circulatingSupply: string;
coin: string;
dayBaseVlm: string;
dayNtlVlm: string;
markPx: string;
midPx: string;
prevDayPx: string;
totalSupply: string;
};
export type SpotMetaAndAssetCtxs = [SpotMeta, SpotAssetCtx[]];
export interface UserOpenOrder {
coin: string;
limitPx: string;
oid: number;
side: string;
sz: string;
timestamp: number;
}
export type UserOpenOrders = UserOpenOrder[];
export interface OrderWire {
a: number;
b: boolean;
p: string;
s: string;
r: boolean;
t: OrderType;
c?: string;
}
export interface CancelOrderRequest {
coin: string;
o: number;
}
export type CancelOrderRequests = {
a: number;
o: number;
}[];
export interface CancelByCloidRequest {
coin: string;
cloid: Cloid;
}
export interface ModifyRequest {
oid: OidOrCloid;
order: OrderRequest;
}
export interface ModifyWire {
oid: number;
order: OrderWire;
}
export interface ScheduleCancelAction {
type: 'scheduleCancel';
time?: number | null;
}
export interface Signature {
r: string;
s: string;
v: number;
}
export interface Notification {
notification: string;
user: string;
}
// As flexible as possible
export interface WebData2 {
[key: string]: any;
}
export interface Candle {
t: number; // open time
T: number; // close time
s: string; // symbol
i: string; // interval
o: number; // open
c: number; // close
h: number; // high
l: number; // low
v: number; // volume
n: number; // number of trades
}
export interface WsUserFill {
coin: string;
px: string;
sz: string;
side: string;
time: number;
startPosition: string;
dir: string;
closedPnl: string;
hash: string;
oid: number;
crossed: boolean;
fee: string;
tid: number;
}
export type WsUserFills = {
isSnapshot: boolean;
fills: WsUserFill[];
user: string;
};
export interface WsUserFunding {
time: number;
coin: string;
usdc: string;
szi: string;
fundingRate: string;
}
export type WsUserFundings = {
isSnapshot: boolean;
fundings: WsUserFunding[];
user: string;
};
export interface WsUserNonFundingLedgerUpdate {
time: number;
coin: string;
usdc: string;
type: 'deposit' | 'withdraw' | 'transfer' | 'liquidation';
}
export type WsUserNonFundingLedgerUpdates = {
isSnapshot: boolean;
updates: WsUserNonFundingLedgerUpdate[];
user: string;
};
export type WsUserActiveAssetData = {
isSnapshot: boolean;
user: string;
coin: string;
leverage: Leverage;
maxTradeSzs: [number, number];
availableToTrade: [number, number];
};
export interface TwapOrder {
coin: string;
is_buy: boolean;
sz: number;
reduce_only: boolean;
minutes: number;
randomize: boolean;
}
export interface TwapCancelRequest {
coin: string;
twap_id: number;
}
export interface TwapOrderResponse {
status: string;
response: {
type: string;
data: {
status: {
running: {
twapId: number;
};
};
};
};
}
export interface TwapCancelResponse {
status: string;
response: {
type: string;
data: {
status: string;
};
};
}
export interface PredictedFunding {
fundingRate: string;
nextFundingTime: number;
}
export interface VenueFunding {
[venue: string]: PredictedFunding;
}
export interface PredictedFundings {
[coin: string]: VenueFunding[];
}
export interface TokenDetails {
name: string;
maxSupply: string;
totalSupply: string;
circulatingSupply: string;
szDecimals: number;
weiDecimals: number;
midPx: string;
markPx: string;
prevDayPx: string;
genesis: {
userBalances: [string, string][];
existingTokenBalances: [number, string][];
};
deployer: string;
deployGas: string;
deployTime: string;
seededUsdc: string;
nonCirculatingUserBalances: string[];
futureEmissions: string;
}
export interface SpotDeployState {
states: {
token: number;
spec: {
name: string;
szDecimals: number;
weiDecimals: number;
};
fullName: string;
spots: number[];
maxSupply: number;
hyperliquidityGenesisBalance: string;
totalGenesisBalanceWei: string;
userGenesisBalances: [string, string][];
existingTokenGenesisBalances: [number, string][];
}[];
gasAuction: {
startTimeSeconds: number;
durationSeconds: number;
startGas: string;
currentGas: string | null;
endGas: string;
};
}
export interface SubAccount {
name: string;
subAccountUser: string;
master: string;
clearinghouseState: ClearinghouseState;
spotState: {
balances: {
coin: string;
token: number;
total: string;
hold: string;
entryNtl: string;
}[];
};
}
export interface PortfolioPeriodData {
accountValueHistory: [number, string][];
pnlHistory: [number, string][];
vlm: string;
}
export interface VaultFollower {
user: string;
vaultEquity: string;
pnl: string;
allTimePnl: string;
daysFollowing: number;
vaultEntryTime: number;
lockupUntil: number;
}
export interface VaultDetails {
name: string;
vaultAddress: string;
leader: string;
description: string;
portfolio: [string, PortfolioPeriodData][];
apr: number;
followerState: any;
leaderFraction: number;
leaderCommission: number;
followers: VaultFollower[];
maxDistributable: number;
maxWithdrawable: number;
isClosed: boolean;
relationship: {
type: string;
data: {
childAddresses: string[];
};
};
allowDeposits: boolean;
alwaysCloseOnWithdraw: boolean;
}
export interface VaultEquity {
vaultAddress: string;
equity: string;
}
export interface HistoricalOrder {
order: {
coin: string;
side: string;
limitPx: string;
sz: string;
oid: number;
timestamp: number;
triggerCondition: string;
isTrigger: boolean;
triggerPx: string;
children: any[];
isPositionTpsl: boolean;
reduceOnly: boolean;
orderType: string;
origSz: string;
tif: string;
cloid: string | null;
};
status: 'filled' | 'open' | 'canceled' | 'triggered' | 'rejected' | 'marginCanceled';
statusTimestamp: number;
}
export interface TwapSliceFill {
fill: {
closedPnl: string;
coin: string;
crossed: boolean;
dir: string;
hash: string;
oid: number;
px: string;
side: string;
startPosition: string;
sz: string;
time: number;
fee: string;
feeToken: string;
tid: number;
};
twapId: number;
}
export interface ApproveAgentRequest {
agentAddress: string;
agentName?: string;
}
export interface ApproveBuilderFeeRequest {
maxFeeRate: string;
builder: string;
}
export interface Delegation {
validator: string;
amount: string;
lockedUntilTimestamp: number;
}
export interface DelegatorSummary {
delegated: string;
undelegated: string;
totalPendingWithdrawal: string;
nPendingWithdrawals: number;
}
export interface DelegatorHistoryEntry {
time: number;
hash: string;
delta: {
delegate: {
validator: string;
amount: string;
isUndelegate: boolean;
};
};
}
export interface DelegatorReward {
time: number;
source: string;
totalAmount: string;
}
export type PerpsAtOpenInterestCap = string[];
export type UserRole = 'missing' | 'user' | 'agent' | 'vault' | 'subAccount';
export interface WsActiveAssetCtx {
coin: string;
ctx: {
dayNtlVlm: string;
prevDayPx: string;
markPx: string;
midPx?: string;
funding?: number;
openInterest?: number;
oraclePx?: number;
circulatingSupply?: number;
};
}
export interface WsActiveSpotAssetCtx {
coin: string;
ctx: {
dayNtlVlm: string;
prevDayPx: string;
markPx: string;
midPx?: string;
circulatingSupply: string;
};
}
export interface WsTwapState {
coin: string;
user: string;
side: string;
sz: number;
executedSz: number;
executedNtl: number;
minutes: number;
reduceOnly: boolean;
randomize: boolean;
timestamp: number;
}
export type WsTwapStatus = 'activated' | 'terminated' | 'finished' | 'error';
export interface WsTwapHistory {
state: WsTwapState;
status: {
status: WsTwapStatus;
description: string;
};
time: number;
}
export interface WsTwapHistoryResponse {
isSnapshot: boolean;
user: string;
history: WsTwapHistory[];
}
export interface WsTwapSliceFill {
isSnapshot?: boolean;
user: string;
twapSliceFills: Array<{
fill: {
closedPnl: string;
coin: string;
crossed: boolean;
dir: string;
hash: string;
oid: number;
px: string;
side: string;
startPosition: string;
sz: string;
time: number;
fee: string;
feeToken: string;
tid: number;
};
twapId: number;
}>;
}
export interface ValidatorStats {
uptimeFraction: string;
predictedApr: string;
nSamples: number;
}
export interface ValidatorSummary {
validator: string;
signer: string;
name: string;
description: string;
nRecentBlocks: number;
stake: number;
isJailed: boolean;
unjailableAfter: number | null;
isActive: boolean;
commission: string;
stats: [['day', ValidatorStats], ['week', ValidatorStats], ['month', ValidatorStats]];
}
export interface VaultRelationship {
type: 'normal' | 'child' | 'parent';
data?: {
childAddresses: string[];
};
}
export interface VaultSummary {
name: string;
vaultAddress: string;
leader: string;
tvl: string;
isClosed: boolean;
relationship: VaultRelationship;
createTimeMillis: number;
}
export interface TxDetails {
action: {
type: string;
[key: string]: unknown;
};
block: number;
error: string | null;
hash: string;
time: number;
user: string;
}
export interface BlockDetails {
blockTime: number;
hash: string;
height: number;
numTxs: number;
proposer: string;
txs: TxDetails[];
}
export interface BlockDetailsResponse {
type: 'blockDetails';
blockDetails: BlockDetails;
}
export interface TxDetailsResponse {
type: 'txDetails';
tx: TxDetails;
}
export interface UserDetailsResponse {
type: 'userDetails';
txs: TxDetails[];
}
export interface UserFees {
dailyUserVlm: {
date: string;
userCross: string;
userAdd: string;
exchange: string;
}[];
feeSchedule: {
cross: string;
add: string;
tiers: {
vip: {
ntlCutoff: string;
cross: string;
add: string;
}[];
mm: {
makerFractionCutoff: string;
add: string;
}[];
};
referralDiscount: string;
};
userCrossRate: string;
userAddRate: string;
activeReferralDiscount: string;
trial: unknown | null;
feeTrialReward: string;
nextTrialAvailableTimestamp: unknown | null;
}
export interface Portfolio {
accountValueHistory: [number, string][];
pnlHistory: [number, string][];
vlm: string;
}
export type PortfolioPeriods = [
['day', Portfolio],
['week', Portfolio],
['month', Portfolio],
['allTime', Portfolio],
['perpDay', Portfolio],
['perpWeek', Portfolio],
['perpMonth', Portfolio],
['perpAllTime', Portfolio],
];
export interface PreTransferCheck {
fee: string;
isSanctioned: boolean;
userExists: boolean;
}
export interface Referral {
referredBy: {
referrer: string;
code: string;
} | null;
cumVlm: string;
unclaimedRewards: string;
claimedRewards: string;
builderRewards: string;
referrerState: {
stage: 'ready' | 'needToCreateCode' | 'needToTrade';
data?: {
code?: string;
referralStates?: {
cumVlm: string;
cumRewardedFeesSinceReferred: string;
cumFeesRewardedToReferrer: string;
timeJoined: number;
user: string;
}[];
required?: string;
};
};
rewardHistory: {
earned: string;
vlm: string;
referralVlm: string;
time: number;
}[];
}
export interface ExtraAgent {
address: string;
name: string;
validUntil: number;
}
export interface LegalCheck {
ipAllowed: boolean;
acceptedTerms: boolean;
userAllowed: boolean;
}
export interface TwapState {
coin: string;
executedNtl: string;
executedSz: string;
minutes: number;
randomize: boolean;
reduceOnly: boolean;
side: 'B' | 'A';
sz: string;
timestamp: number;
user: string;
}
export interface TwapStatus {
status: 'finished' | 'activated' | 'terminated' | 'error';
description?: string;
}
export interface TwapHistory {
time: number;
state: TwapState;
status: TwapStatus;
}
export interface MultiSigSigners {
authorizedUsers: string[];
threshold: number;
}
// Vault-related types
export interface CreateVaultRequest {
name: string;
description: string;
initialUsd: number;
}
export interface CreateVaultResponse {
status: string;
response: {
type: string;
data: string; // Vault address
};
}
export interface VaultDistributeRequest {
vaultAddress: string;
usd: number;
}
export interface VaultModifyRequest {
vaultAddress: string;
allowDeposits: boolean | null;
alwaysCloseOnWithdraw: boolean | null;
}
// Response types
export interface ClaimRewardsResponse {
status: string;
response: {
type: string;
};
}
export interface CreateSubAccountResponse {
status: string;
response: {
type: string;
data: string; // Sub-account address
};
}
export interface SetDisplayNameResponse {
status: string;
response: {
type: string;
};
}
export interface SpotUserResponse {
status: string;
response: {
type: string;
};
}
export interface CDepositResponse {
status: string;
response: {
type: string;
};
}
export interface CWithdrawResponse {
status: string;
response: {
type: string;
};
}
export interface TokenDelegateResponse {
status: string;
response: {
type: string;
};
}
export interface SubAccountSpotTransferResponse {
status: string;
response: {
type: string;
};
}
export interface SubAccountTransferResponse {
status: string;
response: {
type: string;
};
}
export interface ReserveRequestWeightRequest {
weight: number;
}
export interface ReserveRequestWeightResponse {
status: string;
response: {
type: string;
};
}
export interface BuilderFeeApproval {
maxFeeRate: string;
}
export interface UserOrderHistoryEntry {
order: {
coin: string;
side: string;
limitPx: string;
sz: string;
oid: number;
timestamp: number;
triggerCondition: string;
isTrigger: boolean;
triggerPx: string;
children: any[];
isPositionTpsl: boolean;
reduceOnly: boolean;
orderType: string;
origSz: string;
tif: string;
cloid: string | null;
};
status: 'filled' | 'open' | 'canceled' | 'triggered' | 'rejected' | 'marginCanceled';
statusTimestamp: number;
}
export type UserOrderHistory = UserOrderHistoryEntry[];