@zeroexcore/trader 1.1.4 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/dca/cancel.d.ts +3 -0
- package/dist/commands/dca/cancel.d.ts.map +1 -0
- package/dist/commands/dca/cancel.js +44 -0
- package/dist/commands/dca/cancel.js.map +1 -0
- package/dist/commands/dca/create.d.ts +3 -0
- package/dist/commands/dca/create.d.ts.map +1 -0
- package/dist/commands/dca/create.js +88 -0
- package/dist/commands/dca/create.js.map +1 -0
- package/dist/commands/dca/index.d.ts +3 -0
- package/dist/commands/dca/index.d.ts.map +1 -0
- package/dist/commands/dca/index.js +10 -0
- package/dist/commands/dca/index.js.map +1 -0
- package/dist/commands/dca/list.d.ts +3 -0
- package/dist/commands/dca/list.d.ts.map +1 -0
- package/dist/commands/dca/list.js +48 -0
- package/dist/commands/dca/list.js.map +1 -0
- package/dist/commands/limit/cancel.d.ts +3 -0
- package/dist/commands/limit/cancel.d.ts.map +1 -0
- package/dist/commands/limit/cancel.js +45 -0
- package/dist/commands/limit/cancel.js.map +1 -0
- package/dist/commands/limit/create.d.ts +3 -0
- package/dist/commands/limit/create.d.ts.map +1 -0
- package/dist/commands/limit/create.js +68 -0
- package/dist/commands/limit/create.js.map +1 -0
- package/dist/commands/limit/index.d.ts +3 -0
- package/dist/commands/limit/index.d.ts.map +1 -0
- package/dist/commands/limit/index.js +10 -0
- package/dist/commands/limit/index.js.map +1 -0
- package/dist/commands/limit/list.d.ts +3 -0
- package/dist/commands/limit/list.d.ts.map +1 -0
- package/dist/commands/limit/list.js +40 -0
- package/dist/commands/limit/list.js.map +1 -0
- package/dist/commands/perps/close.d.ts +3 -0
- package/dist/commands/perps/close.d.ts.map +1 -0
- package/dist/commands/perps/close.js +48 -0
- package/dist/commands/perps/close.js.map +1 -0
- package/dist/commands/perps/decrease.d.ts +3 -0
- package/dist/commands/perps/decrease.d.ts.map +1 -0
- package/dist/commands/perps/decrease.js +55 -0
- package/dist/commands/perps/decrease.js.map +1 -0
- package/dist/commands/perps/increase.d.ts +3 -0
- package/dist/commands/perps/increase.d.ts.map +1 -0
- package/dist/commands/perps/increase.js +60 -0
- package/dist/commands/perps/increase.js.map +1 -0
- package/dist/commands/perps/index.d.ts.map +1 -1
- package/dist/commands/perps/index.js +8 -0
- package/dist/commands/perps/index.js.map +1 -1
- package/dist/commands/perps/open.d.ts +3 -0
- package/dist/commands/perps/open.d.ts.map +1 -0
- package/dist/commands/perps/open.js +60 -0
- package/dist/commands/perps/open.js.map +1 -0
- package/dist/commands/perps/pool.d.ts.map +1 -1
- package/dist/commands/perps/pool.js +37 -29
- package/dist/commands/perps/pool.js.map +1 -1
- package/dist/commands/perps/positions.d.ts.map +1 -1
- package/dist/commands/perps/positions.js +56 -61
- package/dist/commands/perps/positions.js.map +1 -1
- package/dist/commands/perps/show.d.ts.map +1 -1
- package/dist/commands/perps/show.js +45 -25
- package/dist/commands/perps/show.js.map +1 -1
- package/dist/commands/portfolio.d.ts.map +1 -1
- package/dist/commands/portfolio.js +65 -18
- package/dist/commands/portfolio.js.map +1 -1
- package/dist/commands/predict/buy.d.ts.map +1 -1
- package/dist/commands/predict/buy.js +3 -0
- package/dist/commands/predict/buy.js.map +1 -1
- package/dist/commands/predict/sell.d.ts.map +1 -1
- package/dist/commands/predict/sell.js +3 -0
- package/dist/commands/predict/sell.js.map +1 -1
- package/dist/commands/tokens/quote.d.ts.map +1 -1
- package/dist/commands/tokens/quote.js +4 -1
- package/dist/commands/tokens/quote.js.map +1 -1
- package/dist/commands/tokens/swap.d.ts.map +1 -1
- package/dist/commands/tokens/swap.js +6 -3
- package/dist/commands/tokens/swap.js.map +1 -1
- package/dist/config.d.ts +4 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/utils/amounts.d.ts +0 -16
- package/dist/utils/amounts.d.ts.map +1 -1
- package/dist/utils/amounts.js +4 -36
- package/dist/utils/amounts.js.map +1 -1
- package/dist/utils/helius.d.ts +3 -23
- package/dist/utils/helius.d.ts.map +1 -1
- package/dist/utils/helius.js +0 -123
- package/dist/utils/helius.js.map +1 -1
- package/dist/utils/jupiter.d.ts +4 -8
- package/dist/utils/jupiter.d.ts.map +1 -1
- package/dist/utils/jupiter.js +1 -7
- package/dist/utils/jupiter.js.map +1 -1
- package/dist/utils/nft.d.ts +3 -37
- package/dist/utils/nft.d.ts.map +1 -1
- package/dist/utils/nft.js +0 -71
- package/dist/utils/nft.js.map +1 -1
- package/dist/utils/perps/index.d.ts +51 -10
- package/dist/utils/perps/index.d.ts.map +1 -1
- package/dist/utils/perps/index.js +249 -34
- package/dist/utils/perps/index.js.map +1 -1
- package/dist/utils/perps-api.d.ts +110 -0
- package/dist/utils/perps-api.d.ts.map +1 -0
- package/dist/utils/perps-api.js +260 -0
- package/dist/utils/perps-api.js.map +1 -0
- package/dist/utils/positions.d.ts +3 -77
- package/dist/utils/positions.d.ts.map +1 -1
- package/dist/utils/positions.js +3 -330
- package/dist/utils/positions.js.map +1 -1
- package/dist/utils/prediction.d.ts +6 -28
- package/dist/utils/prediction.d.ts.map +1 -1
- package/dist/utils/prediction.js +0 -37
- package/dist/utils/prediction.js.map +1 -1
- package/dist/utils/recurring.d.ts +79 -0
- package/dist/utils/recurring.d.ts.map +1 -0
- package/dist/utils/recurring.js +73 -0
- package/dist/utils/recurring.js.map +1 -0
- package/dist/utils/token-book.d.ts.map +1 -1
- package/dist/utils/token-book.js +10 -1
- package/dist/utils/token-book.js.map +1 -1
- package/dist/utils/token-info.d.ts +2 -1
- package/dist/utils/token-info.d.ts.map +1 -1
- package/dist/utils/token-info.js +5 -2
- package/dist/utils/token-info.js.map +1 -1
- package/dist/utils/trigger.d.ts +88 -0
- package/dist/utils/trigger.d.ts.map +1 -0
- package/dist/utils/trigger.js +114 -0
- package/dist/utils/trigger.js.map +1 -0
- package/dist/utils/wallet.d.ts +0 -9
- package/dist/utils/wallet.d.ts.map +1 -1
- package/dist/utils/wallet.js +14 -4
- package/dist/utils/wallet.js.map +1 -1
- package/package.json +8 -2
- package/dist/utils/perps/doves-idl.d.ts +0 -380
- package/dist/utils/perps/doves-idl.d.ts.map +0 -1
- package/dist/utils/perps/doves-idl.js +0 -379
- package/dist/utils/perps/doves-idl.js.map +0 -1
- package/dist/utils/perps/jupiter-perpetuals-idl.d.ts +0 -7243
- package/dist/utils/perps/jupiter-perpetuals-idl.d.ts.map +0 -1
- package/dist/utils/perps/jupiter-perpetuals-idl.js +0 -7242
- package/dist/utils/perps/jupiter-perpetuals-idl.js.map +0 -1
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import BN from 'bn.js';
|
|
2
|
+
import { PublicKey, VersionedTransaction } from '@solana/web3.js';
|
|
3
|
+
import { apis, requireJupiterKey } from '../config.js';
|
|
4
|
+
import { sendAndConfirmTransaction } from './solana.js';
|
|
5
|
+
import { buildIncreasePositionTx, buildDecreasePositionTx, getOpenPositions as getOnChainPositions, resolveCustodies, derivePositionPda, } from './perps/index.js';
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Perps token mints
|
|
8
|
+
// ============================================================================
|
|
9
|
+
export const PERPS_MINTS = {
|
|
10
|
+
SOL: 'So11111111111111111111111111111111111111112',
|
|
11
|
+
ETH: '7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs',
|
|
12
|
+
BTC: '3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh',
|
|
13
|
+
};
|
|
14
|
+
export const PERPS_ASSETS = ['SOL', 'ETH', 'BTC'];
|
|
15
|
+
export const DEFAULT_SLIPPAGE_BPS = 30; // 0.3% — covers normal 45s keeper execution window
|
|
16
|
+
/**
|
|
17
|
+
* Compute priceSlippage from oracle price.
|
|
18
|
+
*
|
|
19
|
+
* priceSlippage is NOT a percentage — it's an absolute USD price (6 decimals).
|
|
20
|
+
* It acts as a guard rail; the keeper always fills at oracle price.
|
|
21
|
+
* Wider slippage does NOT give worse fills, it only reduces rejection risk.
|
|
22
|
+
*
|
|
23
|
+
* - increase long / decrease short: ceiling (current price + buffer)
|
|
24
|
+
* - decrease long / increase short: floor (current price - buffer)
|
|
25
|
+
*/
|
|
26
|
+
export function computePriceSlippage(oraclePrice, slippageBps, side, action) {
|
|
27
|
+
const needCeiling = (action === 'increase' && side === 'long') ||
|
|
28
|
+
(action === 'decrease' && side === 'short');
|
|
29
|
+
const pct = slippageBps / 10000;
|
|
30
|
+
const multiplier = needCeiling ? (1 + pct) : (1 - pct);
|
|
31
|
+
return new BN(Math.round(oraclePrice * multiplier * 1_000_000));
|
|
32
|
+
}
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// REST API fetch helper (for read-only endpoints that still work)
|
|
35
|
+
// ============================================================================
|
|
36
|
+
async function perpsFetch(path, options) {
|
|
37
|
+
const headers = {
|
|
38
|
+
'Content-Type': 'application/json',
|
|
39
|
+
...options?.headers,
|
|
40
|
+
};
|
|
41
|
+
// API key is optional for perps endpoints
|
|
42
|
+
try {
|
|
43
|
+
headers['x-api-key'] = requireJupiterKey();
|
|
44
|
+
}
|
|
45
|
+
catch { }
|
|
46
|
+
const response = await fetch(`${apis.jupiterPerps}${path}`, {
|
|
47
|
+
...options,
|
|
48
|
+
headers,
|
|
49
|
+
});
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
const errorText = await response.text();
|
|
52
|
+
throw new Error(`Perps API error (${response.status}): ${errorText}`);
|
|
53
|
+
}
|
|
54
|
+
return response.json();
|
|
55
|
+
}
|
|
56
|
+
// ============================================================================
|
|
57
|
+
// Read-only API functions (REST — these still work)
|
|
58
|
+
// ============================================================================
|
|
59
|
+
export async function getMarketStats(mint) {
|
|
60
|
+
const params = new URLSearchParams({ mint });
|
|
61
|
+
return perpsFetch(`/market-stats?${params}`);
|
|
62
|
+
}
|
|
63
|
+
export async function getPoolInfo(mint) {
|
|
64
|
+
return perpsFetch(`/pool-info?${mkParams(mint)}`);
|
|
65
|
+
}
|
|
66
|
+
function mkParams(mint) {
|
|
67
|
+
return new URLSearchParams({ mint }).toString();
|
|
68
|
+
}
|
|
69
|
+
// Mint -> asset name mapping
|
|
70
|
+
const MINT_TO_ASSET = {
|
|
71
|
+
'So11111111111111111111111111111111111111112': 'SOL',
|
|
72
|
+
'7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs': 'ETH',
|
|
73
|
+
'3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh': 'BTC',
|
|
74
|
+
};
|
|
75
|
+
/** Normalize REST API position response to our PerpsPosition shape */
|
|
76
|
+
function normalizeApiPosition(raw) {
|
|
77
|
+
return {
|
|
78
|
+
asset: MINT_TO_ASSET[raw.marketMint] || raw.marketMint || raw.asset || 'UNKNOWN',
|
|
79
|
+
side: raw.side,
|
|
80
|
+
leverage: raw.leverage,
|
|
81
|
+
sizeUsd: raw.sizeUsdDelta || raw.sizeUsd || '0',
|
|
82
|
+
collateralUsd: raw.collateralUsd || '0',
|
|
83
|
+
entryPriceUsd: String(Math.floor(Number(raw.entryPrice || 0) * 1_000_000)),
|
|
84
|
+
markPriceUsd: String(Math.floor(Number(raw.markPrice || 0) * 1_000_000)),
|
|
85
|
+
liquidationPriceUsd: String(Math.floor(Number(raw.liquidationPrice || 0) * 1_000_000)),
|
|
86
|
+
pnlAfterFeesUsd: raw.pnlAfterFees || raw.pnlAfterFeesUsd || '0',
|
|
87
|
+
pnlAfterFeesPct: raw.pnlChangePctAfterFees || raw.pnlAfterFeesPct || '0',
|
|
88
|
+
positionPubkey: raw.positionPubkey,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/** Fetch positions from on-chain (reliable, always has asset field) */
|
|
92
|
+
export async function getPerpsPositions(walletAddress, connection) {
|
|
93
|
+
const positions = await getOnChainPositions(connection, walletAddress);
|
|
94
|
+
return {
|
|
95
|
+
count: positions.length,
|
|
96
|
+
dataList: positions.map(p => ({
|
|
97
|
+
asset: p.custody,
|
|
98
|
+
side: p.side,
|
|
99
|
+
leverage: p.leverage.toFixed(1),
|
|
100
|
+
sizeUsd: p.sizeUsd.mul(1_000_000).toFixed(0),
|
|
101
|
+
collateralUsd: p.collateralUsd.mul(1_000_000).toFixed(0),
|
|
102
|
+
entryPriceUsd: p.entryPrice.mul(1_000_000).toFixed(0),
|
|
103
|
+
markPriceUsd: '0',
|
|
104
|
+
liquidationPriceUsd: '0',
|
|
105
|
+
pnlAfterFeesUsd: '0',
|
|
106
|
+
pnlAfterFeesPct: '0',
|
|
107
|
+
positionPubkey: p.publicKey,
|
|
108
|
+
})),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// ============================================================================
|
|
112
|
+
// Trading functions (on-chain via Anchor — replaces broken REST endpoints)
|
|
113
|
+
// ============================================================================
|
|
114
|
+
/**
|
|
115
|
+
* Build an increase-position (open) transaction on-chain.
|
|
116
|
+
* Returns a VersionedTransaction ready for signing.
|
|
117
|
+
*/
|
|
118
|
+
export async function buildIncreasePositionTransaction(connection, params) {
|
|
119
|
+
const owner = new PublicKey(params.walletAddress);
|
|
120
|
+
const collateralAmount = new BN(params.inputTokenAmount);
|
|
121
|
+
// Compute sizeUsdDelta from leverage if not provided directly
|
|
122
|
+
let sizeUsdDelta;
|
|
123
|
+
if (params.sizeUsdDelta) {
|
|
124
|
+
sizeUsdDelta = new BN(params.sizeUsdDelta);
|
|
125
|
+
}
|
|
126
|
+
else if (params.leverage) {
|
|
127
|
+
// Estimate: sizeUsd = collateral_in_usd * leverage
|
|
128
|
+
const decimals = perpsTokenDecimals(params.inputToken);
|
|
129
|
+
const tokenAmount = Number(params.inputTokenAmount) / Math.pow(10, decimals);
|
|
130
|
+
let collateralUsd;
|
|
131
|
+
if (params.inputToken === 'USDC') {
|
|
132
|
+
collateralUsd = tokenAmount; // USDC is 1:1 USD
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
const mint = assetToMint(params.inputToken);
|
|
136
|
+
const tokenStats = await getMarketStats(mint);
|
|
137
|
+
collateralUsd = tokenAmount * Number(tokenStats.price);
|
|
138
|
+
}
|
|
139
|
+
sizeUsdDelta = new BN(Math.floor(collateralUsd * Number(params.leverage) * 1_000_000));
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
throw new Error('Either sizeUsdDelta or leverage must be provided');
|
|
143
|
+
}
|
|
144
|
+
// Fetch oracle price and compute slippage guard
|
|
145
|
+
const assetMint = assetToMint(params.asset);
|
|
146
|
+
const stats = await getMarketStats(assetMint);
|
|
147
|
+
const slippageBps = params.slippageBps ?? DEFAULT_SLIPPAGE_BPS;
|
|
148
|
+
const oraclePrice = Number(stats.price);
|
|
149
|
+
const priceSlippage = computePriceSlippage(oraclePrice, slippageBps, params.side, 'increase');
|
|
150
|
+
// Derive position pubkey
|
|
151
|
+
const { custody, collateralCustody } = resolveCustodies(params.asset, params.side);
|
|
152
|
+
const positionPubkey = derivePositionPda(owner, custody, collateralCustody, params.side);
|
|
153
|
+
// jupiterMinimumOut is needed when inputToken differs from the collateral token,
|
|
154
|
+
// requiring the program to swap internally.
|
|
155
|
+
// - Longs: collateral = asset (SOL/ETH/BTC). Cross-token if inputToken != asset
|
|
156
|
+
// - Shorts: collateral = USDC. Cross-token if inputToken != USDC
|
|
157
|
+
let jupiterMinimumOut;
|
|
158
|
+
const collateralToken = params.side === 'long' ? params.asset : 'USDC';
|
|
159
|
+
const isCrossToken = params.inputToken.toUpperCase() !== collateralToken.toUpperCase();
|
|
160
|
+
if (isCrossToken) {
|
|
161
|
+
const decimals = perpsTokenDecimals(params.inputToken);
|
|
162
|
+
const inputAmount = Number(params.inputTokenAmount) / Math.pow(10, decimals);
|
|
163
|
+
const collateralDecimals = perpsTokenDecimals(collateralToken);
|
|
164
|
+
// Estimate output amount with 2% slippage buffer
|
|
165
|
+
let outAmount;
|
|
166
|
+
if (collateralToken === 'USDC') {
|
|
167
|
+
// Selling asset for USDC: inputAmount * assetPrice
|
|
168
|
+
outAmount = inputAmount * oraclePrice;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
// Buying asset with USDC (or other): inputAmount / assetPrice
|
|
172
|
+
outAmount = inputAmount / oraclePrice;
|
|
173
|
+
}
|
|
174
|
+
const minOut = Math.floor(outAmount * 0.98 * Math.pow(10, collateralDecimals));
|
|
175
|
+
jupiterMinimumOut = new BN(minOut);
|
|
176
|
+
}
|
|
177
|
+
const tx = await buildIncreasePositionTx(connection, {
|
|
178
|
+
owner,
|
|
179
|
+
market: params.asset,
|
|
180
|
+
side: params.side,
|
|
181
|
+
collateralToken: params.inputToken,
|
|
182
|
+
collateralAmount,
|
|
183
|
+
sizeUsdDelta,
|
|
184
|
+
priceSlippage,
|
|
185
|
+
jupiterMinimumOut,
|
|
186
|
+
});
|
|
187
|
+
return { tx, positionPubkey: positionPubkey.toBase58() };
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Build a decrease-position (close/reduce) transaction on-chain.
|
|
191
|
+
* Fetches position data to determine side + asset for proper slippage.
|
|
192
|
+
*/
|
|
193
|
+
export async function buildDecreasePositionTransaction(connection, params,
|
|
194
|
+
/** Pass side + asset if already known (avoids extra on-chain fetch for slippage calc) */
|
|
195
|
+
positionInfo) {
|
|
196
|
+
const positionPubkey = new PublicKey(params.positionPubkey);
|
|
197
|
+
const slippageBps = params.slippageBps ?? DEFAULT_SLIPPAGE_BPS;
|
|
198
|
+
if (!positionInfo)
|
|
199
|
+
throw new Error('positionInfo (side + asset) required for slippage calculation');
|
|
200
|
+
const { side, asset } = positionInfo;
|
|
201
|
+
// Fetch oracle price and compute slippage guard
|
|
202
|
+
const assetMint = assetToMint(asset);
|
|
203
|
+
const stats = await getMarketStats(assetMint);
|
|
204
|
+
const oraclePrice = Number(stats.price);
|
|
205
|
+
const priceSlippage = computePriceSlippage(oraclePrice, slippageBps, side, 'decrease');
|
|
206
|
+
const tx = await buildDecreasePositionTx(connection, {
|
|
207
|
+
owner: positionPubkey, // unused — fetched from position account
|
|
208
|
+
positionPubkey,
|
|
209
|
+
desiredToken: params.receiveToken,
|
|
210
|
+
sizeUsdDelta: params.sizeUsdDelta ? new BN(params.sizeUsdDelta) : undefined,
|
|
211
|
+
collateralUsdDelta: params.collateralUsdDelta ? new BN(params.collateralUsdDelta) : undefined,
|
|
212
|
+
priceSlippage,
|
|
213
|
+
entirePosition: params.entirePosition,
|
|
214
|
+
});
|
|
215
|
+
return { tx, positionPubkey: params.positionPubkey };
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Sign a transaction and submit it on-chain.
|
|
219
|
+
* The keeper will automatically pick up the PositionRequest and execute the trade.
|
|
220
|
+
*/
|
|
221
|
+
export async function signAndSendPerps(connection, keypair, tx) {
|
|
222
|
+
tx.sign([keypair]);
|
|
223
|
+
return sendAndConfirmTransaction(connection, tx);
|
|
224
|
+
}
|
|
225
|
+
// Legacy compat — kept for any code still using the old flow
|
|
226
|
+
export async function signAndExecutePerps(connection, keypair, txBase64, _action) {
|
|
227
|
+
const transaction = VersionedTransaction.deserialize(Buffer.from(txBase64, 'base64'));
|
|
228
|
+
transaction.sign([keypair]);
|
|
229
|
+
return sendAndConfirmTransaction(connection, transaction);
|
|
230
|
+
}
|
|
231
|
+
// ============================================================================
|
|
232
|
+
// Helpers
|
|
233
|
+
// ============================================================================
|
|
234
|
+
/** Convert raw 6-decimal USD string to human-readable number */
|
|
235
|
+
export function rawToUsd(raw) {
|
|
236
|
+
return Number(raw) / 1_000_000;
|
|
237
|
+
}
|
|
238
|
+
/** Convert raw 6-decimal USD string to formatted dollar string */
|
|
239
|
+
export function formatUsd(raw) {
|
|
240
|
+
const usd = rawToUsd(raw);
|
|
241
|
+
return `$${usd.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
|
|
242
|
+
}
|
|
243
|
+
/** Resolve asset name to mint */
|
|
244
|
+
export function assetToMint(asset) {
|
|
245
|
+
const upper = asset.toUpperCase();
|
|
246
|
+
const mint = PERPS_MINTS[upper];
|
|
247
|
+
if (!mint)
|
|
248
|
+
throw new Error(`Unknown perps asset: ${asset}. Available: ${PERPS_ASSETS.join(', ')}`);
|
|
249
|
+
return mint;
|
|
250
|
+
}
|
|
251
|
+
/** Token decimals for perps input tokens */
|
|
252
|
+
export function perpsTokenDecimals(token) {
|
|
253
|
+
switch (token) {
|
|
254
|
+
case 'SOL': return 9;
|
|
255
|
+
case 'ETH': return 8;
|
|
256
|
+
case 'BTC': return 8;
|
|
257
|
+
case 'USDC': return 6;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=perps-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perps-api.js","sourceRoot":"","sources":["../../src/utils/perps-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AACvB,OAAO,EAAuB,SAAS,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,IAAI,mBAAmB,EACvC,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,kBAAkB,CAAC;AAE1B,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,GAAG,EAAE,6CAA6C;IAClD,GAAG,EAAE,8CAA8C;IACnD,GAAG,EAAE,8CAA8C;CACpD,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AA8C3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC,CAAC,mDAAmD;AAsB3F;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,WAAmB,EACnB,IAAe,EACf,MAA+B;IAE/B,MAAM,WAAW,GACf,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,KAAK,MAAM,CAAC;QAC1C,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,WAAW,GAAG,KAAK,CAAC;IAChC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACvD,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,+EAA+E;AAC/E,kEAAkE;AAClE,+EAA+E;AAE/E,KAAK,UAAU,UAAU,CAAI,IAAY,EAAE,OAAqB;IAC9D,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,GAAG,OAAO,EAAE,OAAiC;KAC9C,CAAC;IACF,0CAA0C;IAC1C,IAAI,CAAC;QAAC,OAAO,CAAC,WAAW,CAAC,GAAG,iBAAiB,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAE5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,EAAE,EAAE;QAC1D,GAAG,OAAO;QACV,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;AACvC,CAAC;AAED,+EAA+E;AAC/E,oDAAoD;AACpD,+EAA+E;AAE/E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAc,iBAAiB,MAAM,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,OAAO,UAAU,CAAW,cAAc,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAClD,CAAC;AAED,6BAA6B;AAC7B,MAAM,aAAa,GAA2B;IAC5C,6CAA6C,EAAE,KAAK;IACpD,8CAA8C,EAAE,KAAK;IACrD,8CAA8C,EAAE,KAAK;CACtD,CAAC;AAEF,sEAAsE;AACtE,SAAS,oBAAoB,CAAC,GAAQ;IACpC,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,IAAI,SAAS;QAChF,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,OAAO,EAAE,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG;QAC/C,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,GAAG;QACvC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAC1E,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QACxE,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QACtF,eAAe,EAAE,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG;QAC/D,eAAe,EAAE,GAAG,CAAC,qBAAqB,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG;QACxE,cAAc,EAAE,GAAG,CAAC,cAAc;KACnC,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,aAAqB,EACrB,UAAsB;IAEtB,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACvE,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,MAAM;QACvB,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,KAAK,EAAE,CAAC,CAAC,OAAO;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/B,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5C,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACxD,aAAa,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACrD,YAAY,EAAE,GAAG;YACjB,mBAAmB,EAAE,GAAG;YACxB,eAAe,EAAE,GAAG;YACpB,eAAe,EAAE,GAAG;YACpB,cAAc,EAAE,CAAC,CAAC,SAAS;SAC5B,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,2EAA2E;AAC3E,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,UAAsB,EACtB,MAA8B;IAE9B,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEzD,8DAA8D;IAC9D,IAAI,YAAgB,CAAC;IACrB,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,YAAY,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3B,mDAAmD;QACnD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC7E,IAAI,aAAqB,CAAC;QAC1B,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;YACjC,aAAa,GAAG,WAAW,CAAC,CAAC,kBAAkB;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC9C,aAAa,GAAG,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzD,CAAC;QACD,YAAY,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IACzF,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,gDAAgD;IAChD,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,oBAAoB,CAAC;IAC/D,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAE9F,yBAAyB;IACzB,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACnF,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAEzF,iFAAiF;IACjF,4CAA4C;IAC5C,gFAAgF;IAChF,iEAAiE;IACjE,IAAI,iBAAiC,CAAC;IACtC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACvE,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,CAAC;IACvF,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC7E,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,eAA6B,CAAC,CAAC;QAC7E,iDAAiD;QACjD,IAAI,SAAiB,CAAC;QACtB,IAAI,eAAe,KAAK,MAAM,EAAE,CAAC;YAC/B,mDAAmD;YACnD,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,8DAA8D;YAC9D,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;QACxC,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAC/E,iBAAiB,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,UAAU,EAAE;QACnD,KAAK;QACL,MAAM,EAAE,MAAM,CAAC,KAAY;QAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,eAAe,EAAE,MAAM,CAAC,UAAU;QAClC,gBAAgB;QAChB,YAAY;QACZ,aAAa;QACb,iBAAiB;KAClB,CAAC,CAAC;IAEH,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,UAAsB,EACtB,MAA8B;AAC9B,yFAAyF;AACzF,YAAqD;IAErD,MAAM,cAAc,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,oBAAoB,CAAC;IAE/D,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACpG,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC;IAErC,gDAAgD;IAChD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAEvF,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,UAAU,EAAE;QACnD,KAAK,EAAE,cAAc,EAAE,yCAAyC;QAChE,cAAc;QACd,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3E,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7F,aAAa;QACb,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC,CAAC;IAEH,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAsB,EACtB,OAAgB,EAChB,EAAwB;IAExB,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACnB,OAAO,yBAAyB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAsB,EACtB,OAAgB,EAChB,QAAgB,EAChB,OAAe;IAEf,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtF,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5B,OAAO,yBAAyB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAC5D,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,gEAAgE;AAChE,MAAM,UAAU,QAAQ,CAAC,GAAoB;IAC3C,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AACjC,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,SAAS,CAAC,GAAoB;IAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,IAAI,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACnG,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,gBAAgB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAClD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QACrB,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QACrB,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QACrB,KAAK,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
interface Position {
|
|
2
2
|
id: string;
|
|
3
3
|
type: 'long' | 'short' | 'prediction';
|
|
4
4
|
token: string;
|
|
@@ -34,22 +34,6 @@ export interface Position {
|
|
|
34
34
|
txSignature: string;
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
|
-
export interface PositionsData {
|
|
38
|
-
positions: Position[];
|
|
39
|
-
lastUpdated: string;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Load positions from file
|
|
43
|
-
*/
|
|
44
|
-
export declare function loadPositions(): PositionsData;
|
|
45
|
-
/**
|
|
46
|
-
* Get the positions file path (for documentation/debugging)
|
|
47
|
-
*/
|
|
48
|
-
export declare function getPositionsFilePath(): string;
|
|
49
|
-
/**
|
|
50
|
-
* Save positions to file with secure permissions
|
|
51
|
-
*/
|
|
52
|
-
export declare function savePositions(data: PositionsData): void;
|
|
53
37
|
/**
|
|
54
38
|
* Open a new position
|
|
55
39
|
*/
|
|
@@ -65,62 +49,7 @@ export declare function openPosition(params: {
|
|
|
65
49
|
tags?: string[];
|
|
66
50
|
entryTxSignature?: string;
|
|
67
51
|
}): Position;
|
|
68
|
-
|
|
69
|
-
* Close a position
|
|
70
|
-
*/
|
|
71
|
-
export declare function closePosition(positionId: string, exitPrice: number, exitAmount: number, options?: {
|
|
72
|
-
exitTxSignature?: string;
|
|
73
|
-
notes?: string;
|
|
74
|
-
}): Position | null;
|
|
75
|
-
/**
|
|
76
|
-
* Get open positions
|
|
77
|
-
*/
|
|
78
|
-
export declare function getOpenPositions(): Position[];
|
|
79
|
-
/**
|
|
80
|
-
* Get all positions
|
|
81
|
-
*/
|
|
82
|
-
export declare function getAllPositions(): Position[];
|
|
83
|
-
/**
|
|
84
|
-
* Get position by ID
|
|
85
|
-
*/
|
|
86
|
-
export declare function getPosition(positionId: string): Position | null;
|
|
87
|
-
/**
|
|
88
|
-
* Update position notes
|
|
89
|
-
*/
|
|
90
|
-
export declare function updatePositionNotes(positionId: string, notes: string, append?: boolean): void;
|
|
91
|
-
/**
|
|
92
|
-
* Add tags to a position
|
|
93
|
-
*/
|
|
94
|
-
export declare function addPositionTags(positionId: string, tags: string[]): void;
|
|
95
|
-
/**
|
|
96
|
-
* Get positions by tag
|
|
97
|
-
*/
|
|
98
|
-
export declare function getPositionsByTag(tag: string): Position[];
|
|
99
|
-
export interface PriceUpdateResult {
|
|
100
|
-
positionId: string;
|
|
101
|
-
tokenSymbol: string;
|
|
102
|
-
previousPrice?: number;
|
|
103
|
-
currentPrice: number;
|
|
104
|
-
entryPrice: number;
|
|
105
|
-
unrealizedPnl: number;
|
|
106
|
-
unrealizedPnlPercent: number;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Update current prices for all open positions
|
|
110
|
-
*/
|
|
111
|
-
export declare function updatePositionPrices(): Promise<PriceUpdateResult[]>;
|
|
112
|
-
/**
|
|
113
|
-
* Display positions in a readable format
|
|
114
|
-
*/
|
|
115
|
-
export declare function displayPositions(positions: Position[]): void;
|
|
116
|
-
/**
|
|
117
|
-
* Calculate total PnL from closed positions
|
|
118
|
-
*/
|
|
119
|
-
export declare function calculateTotalPnL(): {
|
|
120
|
-
realized: number;
|
|
121
|
-
count: number;
|
|
122
|
-
};
|
|
123
|
-
export interface PositionStats {
|
|
52
|
+
interface PositionStats {
|
|
124
53
|
totalPositions: number;
|
|
125
54
|
openPositions: number;
|
|
126
55
|
closedPositions: number;
|
|
@@ -191,8 +120,5 @@ export declare function findPredictionByMarket(marketId: string, side?: 'yes' |
|
|
|
191
120
|
* Find prediction position by on-chain position pubkey
|
|
192
121
|
*/
|
|
193
122
|
export declare function findPredictionByPubkey(positionPubkey: string): Position | null;
|
|
194
|
-
|
|
195
|
-
* Get all prediction positions
|
|
196
|
-
*/
|
|
197
|
-
export declare function getPredictionPositions(status?: 'open' | 'won' | 'lost' | 'all'): Position[];
|
|
123
|
+
export {};
|
|
198
124
|
//# sourceMappingURL=positions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"positions.d.ts","sourceRoot":"","sources":["../../src/utils/positions.ts"],"names":[],"mappings":"AA+CA,
|
|
1
|
+
{"version":3,"file":"positions.d.ts","sourceRoot":"","sources":["../../src/utils/positions.ts"],"names":[],"mappings":"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"}
|