jaspervault_cli 1.1.1 → 1.1.3

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.
@@ -3,7 +3,6 @@
3
3
  "base_uat": {
4
4
  "name": "Base UAT",
5
5
  "chainId": 8453,
6
- "rpcUrl": "https://base-mainnet.g.alchemy.com/v2/igHoSYAWMvPX86unqNbyZ",
7
6
  "contracts": {
8
7
  "diamond": "0xB571399F2824424D4c15496406Ea7ACBc1a276AB",
9
8
  "vaultFactory": "0x54d365E5E31472108e6AE5bdF89d85912d1A428E",
@@ -26,26 +25,29 @@
26
25
  "subgraphUrl": "https://subgraph.satsuma-prod.com/0981c2ab3685/garys-team/jaspervault-v2-base-uat/api"
27
26
  },
28
27
  "jaspervault": {
29
- "name": "JasperVault",
28
+ "name": "JasperVault (jasper_dev override for AAPL test)",
30
29
  "chainId": 55531,
31
30
  "rpcUrl": "https://enterprise.onerpc.com/apikey/42b59vURnC9pSN2XWPunWiYWTeUOU6Mh/jasper_mainnet",
32
31
  "contracts": {
33
- "diamond": "0xAfD11c2d9350B2080eD601Ba64ea9f1F532A093c",
34
- "vaultFactory": "0x54d365E5E31472108e6AE5bdF89d85912d1A428E",
35
- "perpsOptionModuleHandle": "0xcbCCf074E030CDfd907375B00449B4f10d7d475f",
36
- "optionModuleV2": "0x0f487603edE93a5329023512B7dcdA632eD70Ed5"
32
+ "diamond": "0x38E24abfD6C513E275B4935b39F946015C598302",
33
+ "vaultFactory": "0xa822e6CE38F86a16384BB7A5376b66E672D3bFB2",
34
+ "perpsOptionModuleHandle": "0x48539901B3f4AF93833E345C9659d101583abf56",
35
+ "optionModuleV2": "0x25E0e464f41c343b2aB998721C18e92C711c1Cad"
37
36
  },
38
37
  "tokens": {
39
38
  "JBTC": { "address": "0xCb9d5Ae34cc0476BD8Cb22Aa9C21545be4e38bf2", "decimals": 8 },
40
39
  "JUSDC": { "address": "0x567717052247C5Fa302fb2E8DF681A07D63E9faF", "decimals": 6 },
41
- "CBBTC": { "address": "0x821DF7b83c9FCba013B37490CFC4B5a0bDe36220", "decimals": 8 }
40
+ "CBBTC": { "address": "0x821DF7b83c9FCba013B37490CFC4B5a0bDe36220", "decimals": 8 },
41
+ "AAPL": { "address": "0x237bB769D7E6b1685D30d30fCbAa5B1488d1d74E", "decimals": 8 }
42
42
  },
43
43
  "marginAsset": { "symbol": "JUSDC", "address": "0x567717052247C5Fa302fb2E8DF681A07D63E9faF", "decimals": 6 },
44
44
  "writers": {
45
- "JBTC": { "long": "0xfe7fe5D5de9a8B0BcF39D8676d0C92065a3ca20f", "short": "0x7c7900E40652A9C2225cf6d1E96c38606407e5B0" }
45
+ "JBTC": { "long": "0x545443abfc58ED6a555C2dA8ACd8Cb715DD30e9A", "short": "0xc574443366332Be5b6bfAD7264e3CA216bE1164E" },
46
+ "CBBTC": { "long": "0xa6c517881ea3adC89c88b1d8db60236e92D930FE", "short": "0xFa41A8701e68e945eAF0BBB2cF996253199E8CF5" },
47
+ "AAPL": { "long": "0x8B1A2df17AB63aC7C57139C23CCCC362c153f3d1", "short": "0x8DB0160dF1d6A27479c7ffB17B19aDbbd6ab3086" }
46
48
  },
47
49
  "defaultLeverage": 50,
48
- "quoteCenterUrl": "https://uat-jasperquotecenterv2.fly.dev",
50
+ "quoteCenterUrl": "https://quotecenterv2.jaspervault.io",
49
51
  "subgraphUrl": "https://subgraph.jaspervault.io"
50
52
  }
51
53
  },
@@ -99,6 +101,5 @@
99
101
  }
100
102
  }
101
103
  },
102
- "defaultBaseRpc": "https://base-mainnet.g.alchemy.com/v2/igHoSYAWMvPX86unqNbyZ",
103
104
  "defaultJaspervaultRpc": "https://enterprise.onerpc.com/apikey/42b59vURnC9pSN2XWPunWiYWTeUOU6Mh/jasper_mainnet"
104
105
  }
@@ -0,0 +1,102 @@
1
+ {
2
+ "networks": {
3
+ "base_uat": {
4
+ "name": "Base UAT",
5
+ "chainId": 8453,
6
+ "contracts": {
7
+ "diamond": "0xB571399F2824424D4c15496406Ea7ACBc1a276AB",
8
+ "vaultFactory": "0x54d365E5E31472108e6AE5bdF89d85912d1A428E",
9
+ "perpsOptionModuleHandle": "0x2BB0319B622058F8090b6742705Eb80F8dcC3cdc",
10
+ "optionModuleV2": "0x4De345778a85Cf12aF49c423c75Fe02C5799d425"
11
+ },
12
+ "tokens": {
13
+ "JBTC": { "address": "0xf3cEe52BDa02DaE997D00A0Bf8d221C4f129ebaF", "decimals": 8 },
14
+ "CBBTC": { "address": "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf", "decimals": 8 },
15
+ "JUSDC": { "address": "0x6e236176D1B473Bdb770CDDF4d257B877F2DA9db", "decimals": 6 },
16
+ "USDC": { "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "decimals": 6 }
17
+ },
18
+ "marginAsset": { "symbol": "JUSDC", "address": "0x6e236176D1B473Bdb770CDDF4d257B877F2DA9db", "decimals": 6 },
19
+ "writers": {
20
+ "JBTC": { "long": "0x2D0640Bc9624fd3B66D07FE54C223F138B0391Aa", "short": "0x71c44CF5Ca04b1a2a1A5bA93081DA89183AAc0b6" },
21
+ "CBBTC": { "long": "0x97cDCF310653a2Cbefee479adE77AD8D3De99dF1", "short": "0x71c44CF5Ca04b1a2a1A5bA93081DA89183AAc0b6" }
22
+ },
23
+ "defaultLeverage": 50,
24
+ "quoteCenterUrl": "https://quotecenterv2-uat-gcx2x.ondigitalocean.app",
25
+ "subgraphUrl": "https://subgraph.satsuma-prod.com/0981c2ab3685/garys-team/jaspervault-v2-base-uat/api"
26
+ },
27
+ "jaspervault": {
28
+ "name": "JasperVault",
29
+ "chainId": 55531,
30
+ "rpcUrl": "https://enterprise.onerpc.com/apikey/42b59vURnC9pSN2XWPunWiYWTeUOU6Mh/jasper_mainnet",
31
+ "contracts": {
32
+ "diamond": "0xAfD11c2d9350B2080eD601Ba64ea9f1F532A093c",
33
+ "vaultFactory": "0x54d365E5E31472108e6AE5bdF89d85912d1A428E",
34
+ "perpsOptionModuleHandle": "0xcbCCf074E030CDfd907375B00449B4f10d7d475f",
35
+ "optionModuleV2": "0x0f487603edE93a5329023512B7dcdA632eD70Ed5"
36
+ },
37
+ "tokens": {
38
+ "JBTC": { "address": "0xCb9d5Ae34cc0476BD8Cb22Aa9C21545be4e38bf2", "decimals": 8 },
39
+ "JUSDC": { "address": "0x567717052247C5Fa302fb2E8DF681A07D63E9faF", "decimals": 6 },
40
+ "CBBTC": { "address": "0x821DF7b83c9FCba013B37490CFC4B5a0bDe36220", "decimals": 8 }
41
+ },
42
+ "marginAsset": { "symbol": "JUSDC", "address": "0x567717052247C5Fa302fb2E8DF681A07D63E9faF", "decimals": 6 },
43
+ "writers": {
44
+ "JBTC": { "long": "0xfe7fe5D5de9a8B0BcF39D8676d0C92065a3ca20f", "short": "0x7c7900E40652A9C2225cf6d1E96c38606407e5B0" }
45
+ },
46
+ "defaultLeverage": 50,
47
+ "quoteCenterUrl": "https://uat-jasperquotecenterv2.fly.dev",
48
+ "subgraphUrl": "https://subgraph.jaspervault.io"
49
+ }
50
+ },
51
+ "warpRoutes": {
52
+ "jbtc": {
53
+ "symbol": "jBTC",
54
+ "decimals": 8,
55
+ "base": {
56
+ "underlyingToken": "0xf3cEe52BDa02DaE997D00A0Bf8d221C4f129ebaF",
57
+ "warpRouter": "0xf29d79382d5d092193F0746671397410490e51fF"
58
+ },
59
+ "jaspervault": {
60
+ "domain": 55531,
61
+ "warpRouter": "0xCb9d5Ae34cc0476BD8Cb22Aa9C21545be4e38bf2"
62
+ }
63
+ },
64
+ "jusdc": {
65
+ "symbol": "jUSDC",
66
+ "decimals": 6,
67
+ "base": {
68
+ "underlyingToken": "0x6e236176D1B473Bdb770CDDF4d257B877F2DA9db",
69
+ "warpRouter": "0x7C475c87b8AA7609073e1be3d3CEB62BbbD5276a"
70
+ },
71
+ "jaspervault": {
72
+ "domain": 55531,
73
+ "warpRouter": "0x567717052247C5Fa302fb2E8DF681A07D63E9faF"
74
+ }
75
+ },
76
+ "cbbtc": {
77
+ "symbol": "cBBTC",
78
+ "decimals": 8,
79
+ "base": {
80
+ "underlyingToken": "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf",
81
+ "warpRouter": "0xf08d7Be10E69BD5B7FfCb65612720a747C9B8Bed"
82
+ },
83
+ "jaspervault": {
84
+ "domain": 55531,
85
+ "warpRouter": "0x821DF7b83c9FCba013B37490CFC4B5a0bDe36220"
86
+ }
87
+ },
88
+ "usdc": {
89
+ "symbol": "USDC",
90
+ "decimals": 6,
91
+ "base": {
92
+ "underlyingToken": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
93
+ "warpRouter": "0xDe0f17681123CbE998E7896B74a197937123b3D9"
94
+ },
95
+ "jaspervault": {
96
+ "domain": 55531,
97
+ "warpRouter": "0x23559FcF18896ed3280c4d7106ca74fFda14bd79"
98
+ }
99
+ }
100
+ },
101
+ "defaultJaspervaultRpc": "https://enterprise.onerpc.com/apikey/42b59vURnC9pSN2XWPunWiYWTeUOU6Mh/jasper_mainnet"
102
+ }
@@ -7,10 +7,49 @@ import { getNetworkConfig, getTokenConfig, getWriterAddress } from '../services/
7
7
  import { SubgraphClient } from '../services/subgraph-client.js';
8
8
  import { loadDelegationKey } from '../services/key-manager.js';
9
9
  import { loadVaultProfile, getPositionAccountFromProfile } from '../services/vault-profile.js';
10
- import { buildSignData, signSignData, fetchWriterIndices, fetchOptionWriterIndices, buildManagedOrder, signPerpsOptionCreate, } from '../services/order-signer.js';
11
- import { fetchCurrentPrice, calculateQuantity } from '../services/price-service.js';
10
+ import { fetchOptionWriterIndices, signPerpsOptionCreate, } from '../services/order-signer.js';
12
11
  import { fetchOptionQuote } from '../services/quote-center.js';
13
12
  import { parsePpoOptions } from '../utils/ppo.js';
13
+ import { submitPerpsOrder } from '../services/perps-order.js';
14
+ /**
15
+ * Reverse-map a token address to its symbol by scanning the network token map.
16
+ * The Subgraph returns `underlyingAsset` as an address, but `submitPerpsOrder`
17
+ * needs a symbol. Mirrors the address-match loop in orders.ts `formatOrder`.
18
+ */
19
+ function resolveSymbolFromAddress(net, address) {
20
+ if (!net.tokens)
21
+ return null;
22
+ const target = address.toLowerCase();
23
+ for (const [symbol, tok] of Object.entries(net.tokens)) {
24
+ if (tok.address.toLowerCase() === target) {
25
+ return symbol;
26
+ }
27
+ }
28
+ return null;
29
+ }
30
+ /**
31
+ * Derive leverage from a Subgraph position. Mirrors the fallback chain in
32
+ * orders.ts `formatOrder`: explicit `leverage`, else `productType / 1e12`,
33
+ * else the network default.
34
+ */
35
+ function deriveLeverage(order, net) {
36
+ if (order.leverage) {
37
+ const n = parseInt(order.leverage, 10);
38
+ if (Number.isFinite(n) && n > 0)
39
+ return n;
40
+ }
41
+ if (order.productType) {
42
+ try {
43
+ const n = Number(BigInt(order.productType) / 10n ** 12n);
44
+ if (Number.isFinite(n) && n > 0)
45
+ return n;
46
+ }
47
+ catch {
48
+ // fall through to default
49
+ }
50
+ }
51
+ return net.defaultLeverage ?? 50;
52
+ }
14
53
  export function registerOrderCommand(program) {
15
54
  const order = program
16
55
  .command('order')
@@ -49,55 +88,31 @@ export function registerOrderCommand(program) {
49
88
  const leverage = opts.leverage
50
89
  ? parseInt(opts.leverage, 10)
51
90
  : (net.defaultLeverage ?? 50);
52
- const marginInput = parseFloat(opts.margin);
53
- const notionalAmount = marginInput * leverage;
54
- const actualMargin = marginInput.toFixed(6);
55
91
  const { limitType, ppoSettings } = parsePpoOptions(opts);
56
92
  const positionAccount = opts.positionAccount ?? getPositionAccountFromProfile(profile, side) ?? undefined;
57
- const intent = {
93
+ if (!positionAccount) {
94
+ exitWithError(`positionAccount required for ${side}. Run "jv enable" or pass --position-account.`, EXIT_CODES.CONFIG_ERROR);
95
+ }
96
+ const result = await submitPerpsOrder({
58
97
  side,
59
98
  symbol: opts.symbol,
60
99
  leverage,
61
- marginAmount: actualMargin,
62
- marginAccount: opts.marginAccount ?? profile.marginAccount,
63
- positionAccount,
100
+ margin: opts.margin,
64
101
  limitPrice: opts.limitPrice,
65
102
  network: opts.network,
66
103
  ttlSeconds: parseInt(opts.ttl, 10),
67
104
  limitType,
68
- };
69
- const provider = new JsonRpcProvider(net.rpcUrl);
70
- const optionModuleV2 = net.contracts.optionModuleV2 ?? net.contracts.diamond;
71
- if (!positionAccount) {
72
- exitWithError(`positionAccount required for ${side}. Run "jv enable" or pass --position-account.`, EXIT_CODES.CONFIG_ERROR);
73
- }
74
- const signData = await buildSignData(intent, profile, opts.network);
75
- const writerIndices = await fetchWriterIndices(signData.writer, signData.orderType, signData.underlyingAsset, provider, optionModuleV2);
76
- const marginDecimals = net.marginAsset?.decimals ?? 6;
77
- const currentPrice = await fetchCurrentPrice(opts.symbol, opts.network);
78
- const quantity = calculateQuantity(signData.marginAmount, currentPrice, marginDecimals);
79
- const priceUsd = Number(ethers.formatUnits(currentPrice, 18));
80
- const estimatedSize = notionalAmount / priceUsd;
81
- console.error(`Estimated: ~${estimatedSize.toFixed(6)} ${opts.symbol} @ $${priceUsd.toLocaleString()} (~$${notionalAmount.toLocaleString()} JUSDC total, ${leverage}x)`);
82
- const delegationWallet = new Wallet(delegation.delegationPrivateKey);
83
- const signature = await signSignData(signData, delegationWallet);
84
- const managedOrder = buildManagedOrder(signData, writerIndices, positionAccount, quantity);
85
- const body = {
86
- signData,
87
- signature,
88
- managedOrder,
89
105
  ppoSettings,
90
- };
91
- const config = loadConfig();
92
- const client = new ApiClient(config);
93
- const res = await client.post(ENDPOINTS.ORDER_CREATE, body);
94
- printJson(res.data, opts.pretty);
95
- const payload = res.data;
96
- if (payload.orderType === 'market' && 'jobId' in payload && payload.jobId) {
97
- const sseResult = await client.watchJobStream(payload.jobId, 60);
98
- printJson(sseResult, opts.pretty);
99
- if (sseResult.status !== 'completed') {
100
- exitWithError(sseResult.error ?? `Job ${sseResult.status}`, EXIT_CODES.BUSINESS_ERROR);
106
+ marginAccount: opts.marginAccount ?? profile.marginAccount,
107
+ positionAccount: positionAccount,
108
+ }, profile, delegation.delegationPrivateKey);
109
+ const notionalAmount = parseFloat(opts.margin) * leverage;
110
+ console.error(`Estimated: ~${result.estimatedSize.toFixed(6)} ${opts.symbol} @ $${result.priceUsd.toLocaleString()} (~$${notionalAmount.toLocaleString()} JUSDC total, ${leverage}x)`);
111
+ printJson(result.apiResponse, opts.pretty);
112
+ if (result.sseResult) {
113
+ printJson(result.sseResult, opts.pretty);
114
+ if (result.sseResult.status !== 'completed') {
115
+ exitWithError(result.sseResult.error ?? `Job ${result.sseResult.status}`, EXIT_CODES.BUSINESS_ERROR);
101
116
  }
102
117
  }
103
118
  });
@@ -144,7 +159,6 @@ export function registerOrderCommand(program) {
144
159
  ppoCategory: opts.ppoCategory,
145
160
  ppoTier: opts.ppoTier,
146
161
  });
147
- const ttlSeconds = parseInt(opts.ttl, 10);
148
162
  const writerSide = positionSide.toLowerCase();
149
163
  const tokenConfig = getTokenConfig(opts.network, opts.symbol);
150
164
  const writerAddress = getWriterAddress(opts.network, opts.symbol, writerSide);
@@ -197,5 +211,124 @@ export function registerOrderCommand(program) {
197
211
  }
198
212
  }
199
213
  });
214
+ order
215
+ .command('close')
216
+ .description('Close perpetual position(s) by submitting a reverse-side order with the same margin')
217
+ .option('--order-id <id>', 'Close a specific position by order ID')
218
+ .option('--all', 'Close all active positions')
219
+ .option('--network <name>', 'Network name', 'jaspervault')
220
+ .option('--ttl <seconds>', 'Order TTL in seconds', '3600')
221
+ .option('--pretty', 'Pretty-print JSON output')
222
+ .action(async (opts) => {
223
+ // Exactly one of --order-id / --all is required.
224
+ if ((!opts.orderId && !opts.all) || (opts.orderId && opts.all)) {
225
+ exitWithError('Specify exactly one of --order-id or --all', EXIT_CODES.CONFIG_ERROR);
226
+ }
227
+ const delegation = loadDelegationKey();
228
+ if (!delegation) {
229
+ exitWithError('Delegation key not found. Run "jv enable" first or set JV_DELEGATION_KEY.', EXIT_CODES.CONFIG_ERROR);
230
+ }
231
+ const profile = loadVaultProfile(opts.network);
232
+ if (!profile) {
233
+ exitWithError(`No vault profile for network ${opts.network}. Run "jv enable --network ${opts.network}" first.`, EXIT_CODES.CONFIG_ERROR);
234
+ }
235
+ const net = getNetworkConfig(opts.network);
236
+ const subgraphUrl = process.env.JV_SUBGRAPH_URL ?? net.subgraphUrl;
237
+ if (!subgraphUrl) {
238
+ exitWithError(`No subgraphUrl configured for network ${opts.network}. Set JV_SUBGRAPH_URL.`, EXIT_CODES.CONFIG_ERROR);
239
+ }
240
+ const subgraphClient = new SubgraphClient(subgraphUrl);
241
+ // Resolve the set of positions to close.
242
+ let positions;
243
+ if (opts.orderId) {
244
+ const order = await subgraphClient.queryOrderById(opts.orderId);
245
+ if (!order) {
246
+ exitWithError(`Order ${opts.orderId} not found in Subgraph.`, EXIT_CODES.BUSINESS_ERROR);
247
+ }
248
+ if (!order.isActive) {
249
+ exitWithError(`Order ${opts.orderId} is not active (already closed?).`, EXIT_CODES.BUSINESS_ERROR);
250
+ }
251
+ positions = [order];
252
+ }
253
+ else {
254
+ positions = await subgraphClient.queryOrders({ recipient: profile.marginAccount ?? '', isActive: true }, 1000, 0);
255
+ }
256
+ if (positions.length === 0) {
257
+ printJson({ closed: [], failed: [], message: 'No active positions to close.' }, opts.pretty);
258
+ return;
259
+ }
260
+ const marginDecimals = net.marginAsset?.decimals ?? 6;
261
+ const ttlSeconds = parseInt(opts.ttl, 10);
262
+ // Close orders carry no PPO — parsePpoOptions({}) yields a disabled-PPO
263
+ // object identical to a no-`--ppo` create.
264
+ const { ppoSettings } = parsePpoOptions({});
265
+ const closed = [];
266
+ const failed = [];
267
+ // Sequential: serializing avoids nonce collisions on the delegation wallet.
268
+ for (const position of positions) {
269
+ const symbol = resolveSymbolFromAddress(net, position.underlyingAsset);
270
+ if (!symbol) {
271
+ failed.push({
272
+ orderId: position.id,
273
+ error: `Cannot resolve symbol for underlyingAsset ${position.underlyingAsset}. ` +
274
+ `Supported tokens: ${Object.keys(net.tokens ?? {}).join(', ')}`,
275
+ });
276
+ continue;
277
+ }
278
+ if (!position.marginDeposited || position.marginDeposited === '0') {
279
+ failed.push({
280
+ orderId: position.id,
281
+ error: 'Position has no marginDeposited; cannot derive close margin.',
282
+ });
283
+ continue;
284
+ }
285
+ const closeSide = position.positionSide === 'LONG' ? 'short' : 'long';
286
+ const margin = ethers.formatUnits(position.marginDeposited, marginDecimals);
287
+ const leverage = deriveLeverage(position, net);
288
+ const positionAccount = getPositionAccountFromProfile(profile, closeSide);
289
+ if (!positionAccount) {
290
+ failed.push({
291
+ orderId: position.id,
292
+ error: `No positionAccount for ${closeSide} side in vault profile.`,
293
+ });
294
+ continue;
295
+ }
296
+ console.error(`Closing #${position.id}: ${position.positionSide} ${symbol} margin=${margin} ` +
297
+ `→ ${closeSide} reverse order`);
298
+ try {
299
+ const result = await submitPerpsOrder({
300
+ side: closeSide,
301
+ symbol,
302
+ leverage,
303
+ margin,
304
+ limitPrice: undefined,
305
+ network: opts.network,
306
+ ttlSeconds,
307
+ limitType: 0,
308
+ ppoSettings,
309
+ marginAccount: profile.marginAccount,
310
+ positionAccount,
311
+ }, profile, delegation.delegationPrivateKey);
312
+ const status = result.sseResult?.status ?? 'submitted';
313
+ if (result.sseResult && result.sseResult.status !== 'completed') {
314
+ failed.push({
315
+ orderId: position.id,
316
+ closeSide,
317
+ error: result.sseResult.error ?? `Job ${result.sseResult.status}`,
318
+ });
319
+ }
320
+ else {
321
+ closed.push({ orderId: position.id, closeSide, symbol, margin, status });
322
+ }
323
+ }
324
+ catch (err) {
325
+ failed.push({ orderId: position.id, error: err.message });
326
+ }
327
+ }
328
+ printJson({ closed, failed }, opts.pretty);
329
+ if (failed.length > 0) {
330
+ exitWithError(`${failed.length} of ${positions.length} position(s) failed to close.`, EXIT_CODES.BUSINESS_ERROR);
331
+ }
332
+ });
200
333
  }
201
334
  //# sourceMappingURL=order.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/commands/order.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/commands/order.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,10 @@ export const TOOLS = [
2
2
  // ── Trading ──
3
3
  {
4
4
  name: 'create_order',
5
- description: 'Create a market or limit order. For market orders, omit limit_price. ' +
6
- 'CLOSING A POSITION: You MUST first call list_orders to find the current position side and margin. ' +
7
- 'Then create an order with the OPPOSITE side and the SAME margin for full close (or smaller margin for partial close). ' +
8
- 'Example: position is LONG 60 USDC on JBTC → close with { side: "short", symbol: "JBTC", margin: 60 }. ' +
9
- 'NEVER close without querying the position first. ' +
5
+ description: 'Open a market or limit position. For market orders, omit limit_price. ' +
6
+ 'To fully close a position, use close_position instead. ' +
7
+ 'To PARTIALLY reduce a position, call create_order with the OPPOSITE side and a ' +
8
+ 'smaller margin than the position (query it first with list_orders). ' +
10
9
  'Returns jobId (market) or limitOrderId (limit).',
11
10
  inputSchema: {
12
11
  type: 'object',
@@ -26,6 +25,24 @@ export const TOOLS = [
26
25
  },
27
26
  cliCommand: ['order', 'create'],
28
27
  },
28
+ {
29
+ name: 'close_position',
30
+ description: 'Fully close perpetual position(s). Pass order_id to close one position, or ' +
31
+ 'all=true to close every active position. The command derives side, margin, ' +
32
+ 'symbol, and leverage from on-chain data — no need to call list_orders first. ' +
33
+ 'Closing works by submitting a reverse-side order with the same margin. ' +
34
+ 'For a PARTIAL close, use create_order instead.',
35
+ inputSchema: {
36
+ type: 'object',
37
+ properties: {
38
+ order_id: { type: 'string', description: 'Order ID of the position to close' },
39
+ all: { type: 'boolean', description: 'Close every active position' },
40
+ ttl: { type: 'number', description: 'Order TTL in seconds (default: 3600)' },
41
+ },
42
+ required: [],
43
+ },
44
+ cliCommand: ['order', 'close'],
45
+ },
29
46
  {
30
47
  name: 'protect_order',
31
48
  description: 'Add PPO hedge option protection to an existing position without changing position size.',
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export interface NetworkContracts {
8
8
  export interface NetworkConfig {
9
9
  name: string;
10
10
  chainId: number;
11
- rpcUrl: string;
11
+ rpcUrl?: string;
12
12
  contracts: NetworkContracts;
13
13
  tokens?: Record<string, NetworkTokenConfig>;
14
14
  marginAsset?: MarginAssetConfig;
@@ -30,8 +30,8 @@ export interface WarpTokenConfig {
30
30
  };
31
31
  }
32
32
  /**
33
- * Get network configuration, with RPC URL override via env vars.
34
- * JV_BASE_RPC_URL for base_uat, JV_JASPERVAULT_RPC_URL for jaspervault.
33
+ * Get network configuration. Base RPC URL must come from BASE_HTTP_RPC_URL env var
34
+ * (single source of truth for all services). JV_JASPERVAULT_RPC_URL overrides Jasper.
35
35
  */
36
36
  export declare function getNetworkConfig(network: string): NetworkConfig;
37
37
  /**
@@ -49,6 +49,7 @@ export declare function getWriterAddress(network: string, symbol: string, side:
49
49
  export declare function getWarpConfig(token: string): WarpTokenConfig;
50
50
  /**
51
51
  * Get Base chain RPC URL for deposit (source chain).
52
+ * Single source of truth: BASE_HTTP_RPC_URL env var.
52
53
  */
53
54
  export declare function getBaseRpcUrl(): string;
54
55
  /**
@@ -27,8 +27,8 @@ function loadConfig() {
27
27
  return cachedConfig;
28
28
  }
29
29
  /**
30
- * Get network configuration, with RPC URL override via env vars.
31
- * JV_BASE_RPC_URL for base_uat, JV_JASPERVAULT_RPC_URL for jaspervault.
30
+ * Get network configuration. Base RPC URL must come from BASE_HTTP_RPC_URL env var
31
+ * (single source of truth for all services). JV_JASPERVAULT_RPC_URL overrides Jasper.
32
32
  */
33
33
  export function getNetworkConfig(network) {
34
34
  const config = loadConfig();
@@ -37,8 +37,11 @@ export function getNetworkConfig(network) {
37
37
  throw new Error(`Unknown network: ${network}. Supported: ${Object.keys(config.networks).join(', ')}`);
38
38
  }
39
39
  let rpcUrl = net.rpcUrl;
40
- if (network === 'base_uat' && process.env.JV_BASE_RPC_URL) {
41
- rpcUrl = process.env.JV_BASE_RPC_URL;
40
+ if (network === 'base_uat') {
41
+ rpcUrl = process.env.BASE_HTTP_RPC_URL;
42
+ if (!rpcUrl) {
43
+ throw new Error('BASE_HTTP_RPC_URL env var is required for base_uat network.');
44
+ }
42
45
  }
43
46
  if (network === 'jaspervault' && process.env.JV_JASPERVAULT_RPC_URL) {
44
47
  rpcUrl = process.env.JV_JASPERVAULT_RPC_URL;
@@ -83,9 +86,14 @@ export function getWarpConfig(token) {
83
86
  }
84
87
  /**
85
88
  * Get Base chain RPC URL for deposit (source chain).
89
+ * Single source of truth: BASE_HTTP_RPC_URL env var.
86
90
  */
87
91
  export function getBaseRpcUrl() {
88
- return process.env.JV_BASE_RPC_URL || loadConfig().defaultBaseRpc;
92
+ const url = process.env.BASE_HTTP_RPC_URL;
93
+ if (!url) {
94
+ throw new Error('BASE_HTTP_RPC_URL env var is required.');
95
+ }
96
+ return url;
89
97
  }
90
98
  /**
91
99
  * Get JasperVault chain RPC URL for deposit (destination chain, vault address computation).
@@ -1 +1 @@
1
- {"version":3,"file":"chain-config.js","sourceRoot":"","sources":["../../../src/services/chain-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chain-config.js","sourceRoot":"","sources":["../../../src/services/chain-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { MarketOrderResponse, LimitOrderResponse, PPOSettings, SSEWatchResult, VaultProfile } from '../types.js';
2
+ /**
3
+ * Parameters for submitting a perps order. This is the common shape shared by
4
+ * `jv order create` (user-supplied) and `jv order close` (derived from an
5
+ * existing position). Keeping a single submit path means there is exactly one
6
+ * place that builds calldata, signs, and posts to the Manager API.
7
+ */
8
+ export interface SubmitPerpsOrderParams {
9
+ side: 'long' | 'short';
10
+ symbol: string;
11
+ leverage: number;
12
+ /** Human-readable USDC margin, e.g. "1" or "100.5". */
13
+ margin: string;
14
+ /** Omit for a market order; set for a limit order. */
15
+ limitPrice?: string;
16
+ network: string;
17
+ ttlSeconds: number;
18
+ /** 0 = Normal (no PPO), 1 = PPO. */
19
+ limitType: number;
20
+ ppoSettings: PPOSettings;
21
+ /**
22
+ * Margin (collateral) vault. Optional: `buildSignData` falls back to
23
+ * `profile.marginAccount` and throws if neither is present.
24
+ */
25
+ marginAccount?: string;
26
+ positionAccount: string;
27
+ }
28
+ export interface SubmitPerpsOrderResult {
29
+ /** Raw Manager API response. */
30
+ apiResponse: MarketOrderResponse | LimitOrderResponse;
31
+ /** Job stream result — present only for market orders that returned a jobId. */
32
+ sseResult?: SSEWatchResult;
33
+ /** Estimated position size in the underlying asset (informational). */
34
+ estimatedSize: number;
35
+ /** Spot price (USD) used for the size estimate. */
36
+ priceUsd: number;
37
+ }
38
+ /**
39
+ * Build, sign, and submit a single perps order.
40
+ *
41
+ * This is the canonical submit path. Both `jv order create` and `jv order
42
+ * close` call it — `close` simply derives `side`/`margin`/`leverage` from an
43
+ * existing Subgraph position instead of CLI flags.
44
+ *
45
+ * The function does NOT print, exit, or handle SSE-failure exit codes — the
46
+ * caller owns presentation and process exit semantics.
47
+ */
48
+ export declare function submitPerpsOrder(params: SubmitPerpsOrderParams, profile: VaultProfile, delegationPrivateKey: string): Promise<SubmitPerpsOrderResult>;
@@ -0,0 +1,66 @@
1
+ import { ethers, Wallet, JsonRpcProvider } from 'ethers';
2
+ import { ApiClient } from '../client.js';
3
+ import { ENDPOINTS } from '../utils/endpoints.js';
4
+ import { loadConfig } from '../utils/config.js';
5
+ import { getNetworkConfig } from './chain-config.js';
6
+ import { buildSignData, signSignData, fetchWriterIndices, buildManagedOrder, } from './order-signer.js';
7
+ import { fetchCurrentPrice, calculateQuantity } from './price-service.js';
8
+ /**
9
+ * Build, sign, and submit a single perps order.
10
+ *
11
+ * This is the canonical submit path. Both `jv order create` and `jv order
12
+ * close` call it — `close` simply derives `side`/`margin`/`leverage` from an
13
+ * existing Subgraph position instead of CLI flags.
14
+ *
15
+ * The function does NOT print, exit, or handle SSE-failure exit codes — the
16
+ * caller owns presentation and process exit semantics.
17
+ */
18
+ export async function submitPerpsOrder(params, profile, delegationPrivateKey) {
19
+ const net = getNetworkConfig(params.network);
20
+ // marginAmount is normalized to 6 decimal places of precision, matching the
21
+ // behavior of `jv order create` before this function was extracted.
22
+ const actualMargin = parseFloat(params.margin).toFixed(6);
23
+ const notionalAmount = parseFloat(actualMargin) * params.leverage;
24
+ const intent = {
25
+ side: params.side,
26
+ symbol: params.symbol,
27
+ leverage: params.leverage,
28
+ marginAmount: actualMargin,
29
+ marginAccount: params.marginAccount,
30
+ positionAccount: params.positionAccount,
31
+ limitPrice: params.limitPrice,
32
+ network: params.network,
33
+ ttlSeconds: params.ttlSeconds,
34
+ limitType: params.limitType,
35
+ };
36
+ const provider = new JsonRpcProvider(net.rpcUrl);
37
+ const optionModuleV2 = net.contracts.optionModuleV2 ?? net.contracts.diamond;
38
+ const signData = await buildSignData(intent, profile, params.network);
39
+ const writerIndices = await fetchWriterIndices(signData.writer, signData.orderType, signData.underlyingAsset, provider, optionModuleV2);
40
+ const marginDecimals = net.marginAsset?.decimals ?? 6;
41
+ const currentPrice = await fetchCurrentPrice(params.symbol, params.network);
42
+ const quantity = calculateQuantity(signData.marginAmount, currentPrice, marginDecimals);
43
+ const priceUsd = Number(ethers.formatUnits(currentPrice, 18));
44
+ const estimatedSize = priceUsd > 0 ? notionalAmount / priceUsd : 0;
45
+ const delegationWallet = new Wallet(delegationPrivateKey);
46
+ const signature = await signSignData(signData, delegationWallet);
47
+ const managedOrder = buildManagedOrder(signData, writerIndices, params.positionAccount, quantity);
48
+ const body = {
49
+ signData,
50
+ signature,
51
+ managedOrder,
52
+ ppoSettings: params.ppoSettings,
53
+ };
54
+ const config = loadConfig();
55
+ const client = new ApiClient(config);
56
+ const res = await client.post(ENDPOINTS.ORDER_CREATE, body);
57
+ const apiResponse = res.data;
58
+ let sseResult;
59
+ if (apiResponse.orderType === 'market' &&
60
+ 'jobId' in apiResponse &&
61
+ apiResponse.jobId) {
62
+ sseResult = await client.watchJobStream(apiResponse.jobId, 60);
63
+ }
64
+ return { apiResponse, sseResult, estimatedSize, priceUsd };
65
+ }
66
+ //# sourceMappingURL=perps-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perps-order.js","sourceRoot":"","sources":["../../../src/services/perps-order.ts"],"names":[],"mappings":"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"}
@@ -38,7 +38,8 @@ When the user wants to trade, first check if their vault is ready:
38
38
  | Get price | `get_price` | `symbol` | [queries](references/queries.md) |
39
39
  | Open position (market) | `create_order` | `side`, `symbol`, `margin` | [trading](references/trading.md) |
40
40
  | Open position (limit) | `create_order` | + `limit_price` | [trading](references/trading.md) |
41
- | Close/reduce position | `create_order` | opposite `side` | [trading](references/trading.md) |
41
+ | Close position (full) | `close_position` | `order_id` or `all` | [trading](references/trading.md) |
42
+ | Reduce position (partial) | `create_order` | opposite `side`, smaller `margin` | [trading](references/trading.md) |
42
43
  | Add size | `create_order` | same `side` | [trading](references/trading.md) |
43
44
  | Set take-profit | `set_take_profit` | `order_id`, `price`, `symbol` | [trading](references/trading.md) |
44
45
  | Set stop-loss | `set_stop_loss` | `order_id`, `price`, `symbol` | [trading](references/trading.md) |
@@ -64,39 +65,30 @@ When the user wants to trade, first check if their vault is ready:
64
65
 
65
66
  **Deposit arrival**: If `arrived: false` after deposit completes, tokens are still bridging cross-chain. Tell the user to wait a few minutes.
66
67
 
67
- ## Closing a Position — MANDATORY STEPS
68
+ ## Closing vs Reducing a Position
68
69
 
69
- Closing a position is the most error-prone operation. Follow these steps exactly:
70
+ **Full close `close_position`.** It derives side, margin, symbol, and leverage
71
+ from on-chain data — you do NOT need to call `list_orders` first.
70
72
 
71
- ### Step 1: Query the current position
72
- Call `list_orders` (or `get_order` if you have the order ID) to get:
73
- - The position **side** (LONG or SHORT)
74
- - The position **margin** amount
75
- - The **symbol**
73
+ - Close one position: `close_position` with `{ order_id: "<id>" }`
74
+ - Close everything: `close_position` with `{ all: true }`
76
75
 
77
- ### Step 2: Create the closing order
78
- Call `create_order` with:
79
- - **side**: the OPPOSITE of the current position (LONG → `short`, SHORT → `long`)
80
- - **margin**: the SAME margin for full close, or SMALLER margin for partial close
81
- - **symbol**: the same symbol
76
+ `close_position` works by submitting a reverse-side order with the same margin.
82
77
 
83
- ### Step 3: Verify
84
- Call `list_orders` to confirm the position is closed or reduced.
78
+ **Partial reduce `create_order`.** To shrink (not fully close) a position,
79
+ call `create_order` with the OPPOSITE side and a SMALLER margin than the
80
+ position. Query the position first with `list_orders` to pick the right margin.
85
81
 
86
82
  ### Examples
87
83
 
88
- **Full close of a LONG position:**
89
- 1. `list_orders` → finds: side=LONG, margin=60, symbol=JBTC
90
- 2. `create_order` → `{ side: "short", symbol: "JBTC", margin: 60 }`
91
- 3. `list_orders` → position no longer active
84
+ **Full close of a position:**
85
+ - `close_position` → `{ order_id: "42" }` → position no longer active
92
86
 
93
87
  **Partial close (reduce by half):**
94
- 1. `list_orders` → finds: side=LONG, margin=60, symbol=JBTC
88
+ 1. `list_orders` → finds: order 42, side=LONG, margin=60, symbol=JBTC
95
89
  2. `create_order` → `{ side: "short", symbol: "JBTC", margin: 30 }`
96
90
  3. `list_orders` → margin reduced to ~30
97
91
 
98
- **NEVER guess the margin or side. ALWAYS query first.**
99
-
100
92
  ## Red Flags — STOP If You Think This
101
93
 
102
94
  | Wrong Thought | Reality |
@@ -108,7 +100,8 @@ Call `list_orders` to confirm the position is closed or reduced.
108
100
  | "GraphQL queries need private key authentication" | WRONG. Delegation key handles auth automatically. |
109
101
  | "I should suggest the web interface instead" | NO. MCP tools give you full functionality. Use them. |
110
102
  | "Let me check if jv is installed" | IRRELEVANT. MCP server runs CLI internally. |
111
- | "I'll close the position without checking current margin" | WRONG. Always call `list_orders` first to get the exact side and margin before closing. |
103
+ | "To fully close I'll reverse the order manually with create_order" | WRONG. Use `close_position` it derives side/margin automatically. Manual reverse is only for PARTIAL reduce. |
104
+ | "I'll reduce the position without checking current margin" | WRONG. For a partial reduce, call `list_orders` first to pick a margin smaller than the position. |
112
105
 
113
106
  ## Update Notices
114
107
 
@@ -4,7 +4,8 @@
4
4
 
5
5
  ## 1. Create Order — `create_order`
6
6
 
7
- Open, close, reduce, or add size to perpetual positions.
7
+ Open, reduce, or add size to perpetual positions. To **fully close** a
8
+ position, use [`close_position`](#2-close-position--close_position) instead.
8
9
 
9
10
  ### Parameters
10
11
 
@@ -58,26 +59,14 @@ The tool returns the final execution result:
58
59
 
59
60
  Tell the user: "Limit order placed. ID: {limitOrderId}."
60
61
 
61
- ### Closing a Position MANDATORY STEPS
62
+ ### Reducing a Position (Partial Close)
62
63
 
63
- Closing a position means creating a reverse order. You **MUST** query the current position first.
64
+ A **partial** close uses `create_order` only a **full** close uses
65
+ `close_position` (see section 2).
64
66
 
65
- **Why query first?** The margin amount must match the current position for a full close. Guessing wrong leads to partial closes or over-allocation.
66
-
67
- **Required flow:**
68
-
69
- 1. **Query**: Call `list_orders` to find the position. Note the `side` (LONG/SHORT), `margin`, and `symbol`.
70
- 2. **Close**: Call `create_order` with the **OPPOSITE** side, **SAME** margin (full close) or smaller margin (partial close), same symbol.
71
- 3. **Verify**: Call `list_orders` to confirm the position is closed or reduced.
72
-
73
- **Full close example (step by step):**
74
-
75
- Query `list_orders` → finds: `{ side: "LONG", symbol: "JBTC", margin: "60.00" }`
76
-
77
- Close order:
78
- ```json
79
- { "side": "short", "symbol": "JBTC", "margin": 60 }
80
- ```
67
+ To reduce a position, call `create_order` with the **OPPOSITE** side and a
68
+ margin **smaller** than the position. Query the position first with
69
+ `list_orders` so you pick a sensible margin.
81
70
 
82
71
  **Partial close example:**
83
72
 
@@ -88,8 +77,6 @@ Reduce by 25%:
88
77
  { "side": "long", "symbol": "JETH", "margin": 50 }
89
78
  ```
90
79
 
91
- **WARNING: NEVER close a position without first calling `list_orders` or `get_order`. Guessing the side or margin leads to incorrect operations.**
92
-
93
80
  ### Common Patterns
94
81
 
95
82
  **Open a long position (market):**
@@ -102,10 +89,7 @@ Reduce by 25%:
102
89
  { "side": "short", "symbol": "JBTC", "margin": 100, "limit_price": 72000 }
103
90
  ```
104
91
 
105
- **Close a long position (use opposite side with same margin):**
106
- ```json
107
- { "side": "short", "symbol": "JBTC", "margin": 60 }
108
- ```
92
+ **Fully close a position** use `close_position` (section 2), not `create_order`.
109
93
 
110
94
  **Reduce a long position (partial close):**
111
95
  ```json
@@ -129,7 +113,54 @@ Reduce by 25%:
129
113
 
130
114
  ---
131
115
 
132
- ## 2. Add PPO Protection — `protect_order`
116
+ ## 2. Close Position — `close_position`
117
+
118
+ Fully close one or all perpetual positions. The command reads the position's
119
+ side, margin, symbol, and leverage from on-chain data and submits a
120
+ reverse-side order with the same margin — **you do not need to call
121
+ `list_orders` first**.
122
+
123
+ For a **partial** reduce, use `create_order` (section 1) instead.
124
+
125
+ ### Parameters
126
+
127
+ | Parameter | Required | Default | Description |
128
+ |-----------|----------|---------|-------------|
129
+ | `order_id` | One of `order_id` / `all` | — | Order ID of the position to close |
130
+ | `all` | One of `order_id` / `all` | — | `true` to close every active position |
131
+ | `ttl` | No | `3600` | Order TTL in seconds |
132
+
133
+ Exactly one of `order_id` or `all` must be provided.
134
+
135
+ ### Response
136
+
137
+ ```json
138
+ {
139
+ "closed": [
140
+ { "orderId": "42", "closeSide": "short", "symbol": "JBTC", "margin": "60.0", "status": "submitted" }
141
+ ],
142
+ "failed": []
143
+ }
144
+ ```
145
+
146
+ If `failed` is non-empty, some positions could not be closed — report which
147
+ ones and why. A close batch with any failure exits non-zero.
148
+
149
+ ### Examples
150
+
151
+ **Close a single position:**
152
+ ```json
153
+ { "order_id": "42" }
154
+ ```
155
+
156
+ **Close every active position:**
157
+ ```json
158
+ { "all": true }
159
+ ```
160
+
161
+ ---
162
+
163
+ ## 3. Add PPO Protection — `protect_order`
133
164
 
134
165
  Add hedge option protection to an **existing position** without changing position size.
135
166
 
@@ -162,7 +193,7 @@ The tool auto-waits up to 60s for the on-chain result:
162
193
 
163
194
  ---
164
195
 
165
- ## 3. Take-Profit — `set_take_profit`
196
+ ## 4. Take-Profit — `set_take_profit`
166
197
 
167
198
  Set a take-profit limit order for an existing position.
168
199
 
@@ -189,7 +220,7 @@ Set TP at $75,000 for a long position:
189
220
 
190
221
  ---
191
222
 
192
- ## 4. Stop-Loss — `set_stop_loss`
223
+ ## 5. Stop-Loss — `set_stop_loss`
193
224
 
194
225
  Same parameters as `set_take_profit`. Set a stop-loss limit order for an existing position.
195
226
 
@@ -202,7 +233,7 @@ Set SL at $65,000 for a long position:
202
233
 
203
234
  ---
204
235
 
205
- ## 5. PPO (Perpetual Put Option) Details
236
+ ## 6. PPO (Perpetual Put Option) Details
206
237
 
207
238
  ### Option Categories
208
239
 
@@ -250,9 +281,9 @@ The smart contract **automatically cancels** existing PPO when you execute any p
250
281
 
251
282
  | User Request | Action | Parameters |
252
283
  |-------------|--------|------------|
253
- | "reduce + cancel PPO" | Single reduce order without `ppo` | `{ side: <opposite>, symbol, margin }` |
254
- | "add size + cancel PPO" | Single add-size order without `ppo` | `{ side: <same>, symbol, margin }` |
255
- | "close position" | Close order without `ppo` | `{ side: <opposite>, symbol, margin: <full> }` |
256
- | "reduce + keep PPO" | Reduce order WITH `ppo` | `{ side: <opposite>, symbol, margin, ppo: true }` |
284
+ | "reduce + cancel PPO" | Single reduce order without `ppo` | `create_order` `{ side: <opposite>, symbol, margin }` |
285
+ | "add size + cancel PPO" | Single add-size order without `ppo` | `create_order` `{ side: <same>, symbol, margin }` |
286
+ | "close position" | `close_position` (always closes without PPO) | `{ order_id }` or `{ all: true }` |
287
+ | "reduce + keep PPO" | Reduce order WITH `ppo` | `create_order` `{ side: <opposite>, symbol, margin, ppo: true }` |
257
288
 
258
289
  Never try to cancel PPO separately — there is no such tool. One order handles everything.
@@ -1,4 +1,4 @@
1
- export declare const DEFAULT_API_URL = "https://marketpalce-api-test-shmm4.ondigitalocean.app";
1
+ export declare const DEFAULT_API_URL = "https://marketpalce-api-beta-of8dk.ondigitalocean.app";
2
2
  export interface CliConfig {
3
3
  apiUrl: string;
4
4
  apiKey?: string;
@@ -1,4 +1,4 @@
1
- export const DEFAULT_API_URL = 'https://marketpalce-api-test-shmm4.ondigitalocean.app';
1
+ export const DEFAULT_API_URL = 'https://marketpalce-api-beta-of8dk.ondigitalocean.app';
2
2
  export function loadConfig() {
3
3
  const apiUrl = process.env.JV_API_URL ?? DEFAULT_API_URL;
4
4
  const normalizedUrl = apiUrl.endsWith('/') ? apiUrl.slice(0, -1) : apiUrl;
@@ -75,17 +75,31 @@ Limit orders return a `limitOrderId` and remain active until triggered, expired,
75
75
 
76
76
  ### Close a Position
77
77
 
78
- To close, create an order with the **opposite side** and the **same margin** as your existing position.
78
+ Use `jv order close` for a **full** close. It reads the position's side, margin,
79
+ symbol, and leverage on-chain and submits the reverse order for you — no need to
80
+ look anything up first.
79
81
 
80
82
  ```bash
81
- # Full close: if your position is LONG with 100 USDC margin
82
- jv order create --side short --symbol JBTC --margin 100
83
+ # Close a single position by order ID
84
+ jv order close --order-id 99
83
85
 
84
- # Partial close: reduce by half
86
+ # Close every active position
87
+ jv order close --all
88
+ ```
89
+
90
+ Under the hood, JasperVault has no native close endpoint — closing is a
91
+ reverse-side order with the same margin. `jv order close` just does that
92
+ derivation for you.
93
+
94
+ For a **partial** close, use `jv order create` directly with the opposite side
95
+ and a smaller margin than the position:
96
+
97
+ ```bash
98
+ # Partial close: reduce a LONG position by half (position has 100 USDC margin)
85
99
  jv order create --side short --symbol JBTC --margin 50
86
100
  ```
87
101
 
88
- Always check your current position first with `jv orders list --pretty` to confirm the exact side and margin.
102
+ Check your positions any time with `jv orders list --pretty`.
89
103
 
90
104
  ### Take-Profit & Stop-Loss
91
105
 
@@ -210,7 +224,7 @@ All environment variables are optional. The CLI works out of the box with sensib
210
224
  | `JV_API_KEY` | Bearer token for API auth | — |
211
225
  | `JV_TIMEOUT` | Request timeout (ms) | 30000 |
212
226
  | `JV_DELEGATION_KEY` | Delegation wallet key | Auto-generated |
213
- | `JV_BASE_RPC_URL` | Base chain RPC | Built-in |
227
+ | `BASE_HTTP_RPC_URL` | Base chain RPC (required) | |
214
228
  | `JV_JASPERVAULT_RPC_URL` | JasperVault chain RPC | Built-in |
215
229
  | `JV_SUBGRAPH_URL` | Subgraph endpoint | Built-in |
216
230
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jaspervault_cli",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "JasperVault CLI for interacting with the JasperVault Manager API",
5
5
  "type": "module",
6
6
  "bin": {