ctrader-ts 0.1.10 → 1.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.
Files changed (95) hide show
  1. package/README.md +259 -91
  2. package/dist/bin/auth.js +8 -8
  3. package/dist/bin/auth.js.map +1 -1
  4. package/dist/cli/index.js +169 -26
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/src/{client.d.ts → core/client.d.ts} +57 -15
  7. package/dist/src/core/client.d.ts.map +1 -0
  8. package/dist/src/{client.js → core/client.js} +306 -49
  9. package/dist/src/core/client.js.map +1 -0
  10. package/dist/src/core/config.d.ts.map +1 -0
  11. package/dist/src/{config.js → core/config.js} +13 -13
  12. package/dist/src/core/config.js.map +1 -0
  13. package/dist/src/{connect.d.ts → core/connect.d.ts} +3 -3
  14. package/dist/src/core/connect.d.ts.map +1 -0
  15. package/dist/src/{connect.js → core/connect.js} +4 -6
  16. package/dist/src/core/connect.js.map +1 -0
  17. package/dist/src/{connection.d.ts → core/connection.d.ts} +53 -4
  18. package/dist/src/core/connection.d.ts.map +1 -0
  19. package/dist/src/{connection.js → core/connection.js} +152 -18
  20. package/dist/src/core/connection.js.map +1 -0
  21. package/dist/src/{errors.d.ts → core/errors.d.ts} +5 -0
  22. package/dist/src/core/errors.d.ts.map +1 -0
  23. package/dist/src/core/errors.js +85 -0
  24. package/dist/src/core/errors.js.map +1 -0
  25. package/dist/src/{helpers.d.ts → core/helpers.d.ts} +3 -3
  26. package/dist/src/core/helpers.d.ts.map +1 -0
  27. package/dist/src/{helpers.js → core/helpers.js} +9 -7
  28. package/dist/src/core/helpers.js.map +1 -0
  29. package/dist/src/{symbol-cache.d.ts → core/symbol-cache.d.ts} +2 -2
  30. package/dist/src/core/symbol-cache.d.ts.map +1 -0
  31. package/dist/src/core/symbol-cache.js.map +1 -0
  32. package/dist/src/index.d.ts +26 -11
  33. package/dist/src/index.d.ts.map +1 -1
  34. package/dist/src/index.js +24 -9
  35. package/dist/src/index.js.map +1 -1
  36. package/dist/src/modules/account.d.ts +68 -2
  37. package/dist/src/modules/account.d.ts.map +1 -1
  38. package/dist/src/modules/account.js +91 -34
  39. package/dist/src/modules/account.js.map +1 -1
  40. package/dist/src/modules/auth.d.ts +29 -2
  41. package/dist/src/modules/auth.d.ts.map +1 -1
  42. package/dist/src/modules/auth.js +42 -10
  43. package/dist/src/modules/auth.js.map +1 -1
  44. package/dist/src/modules/market.d.ts +51 -3
  45. package/dist/src/modules/market.d.ts.map +1 -1
  46. package/dist/src/modules/market.js +57 -16
  47. package/dist/src/modules/market.js.map +1 -1
  48. package/dist/src/modules/trading.d.ts +69 -3
  49. package/dist/src/modules/trading.d.ts.map +1 -1
  50. package/dist/src/modules/trading.js +74 -35
  51. package/dist/src/modules/trading.js.map +1 -1
  52. package/dist/src/protocol/codec.d.ts.map +1 -0
  53. package/dist/src/{codec.js → protocol/codec.js} +2 -2
  54. package/dist/src/protocol/codec.js.map +1 -0
  55. package/dist/src/{enums.d.ts → protocol/enums.d.ts} +177 -0
  56. package/dist/src/protocol/enums.d.ts.map +1 -0
  57. package/dist/src/{enums.js → protocol/enums.js} +177 -0
  58. package/dist/src/protocol/enums.js.map +1 -0
  59. package/dist/src/protocol/proto/messages.d.ts +7496 -0
  60. package/dist/src/protocol/proto/messages.js +21525 -0
  61. package/dist/src/protocol/proto/proto/messages.d.ts +7496 -0
  62. package/dist/src/protocol/proto/proto/messages.js +21525 -0
  63. package/dist/src/{types.d.ts → protocol/types.d.ts} +151 -3
  64. package/dist/src/protocol/types.d.ts.map +1 -0
  65. package/dist/src/{types.js.map → protocol/types.js.map} +1 -1
  66. package/llms.txt +280 -0
  67. package/package.json +89 -61
  68. package/dist/src/client.d.ts.map +0 -1
  69. package/dist/src/client.js.map +0 -1
  70. package/dist/src/codec.d.ts.map +0 -1
  71. package/dist/src/codec.js.map +0 -1
  72. package/dist/src/config.d.ts.map +0 -1
  73. package/dist/src/config.js.map +0 -1
  74. package/dist/src/connect.d.ts.map +0 -1
  75. package/dist/src/connect.js.map +0 -1
  76. package/dist/src/connection.d.ts.map +0 -1
  77. package/dist/src/connection.js.map +0 -1
  78. package/dist/src/enums.d.ts.map +0 -1
  79. package/dist/src/enums.js.map +0 -1
  80. package/dist/src/errors.d.ts.map +0 -1
  81. package/dist/src/errors.js +0 -47
  82. package/dist/src/errors.js.map +0 -1
  83. package/dist/src/helpers.d.ts.map +0 -1
  84. package/dist/src/helpers.js.map +0 -1
  85. package/dist/src/proto/messages.d.ts +0 -7076
  86. package/dist/src/proto/messages.js +0 -23289
  87. package/dist/src/proto/proto/messages.d.ts +0 -7076
  88. package/dist/src/proto/proto/messages.js +0 -23289
  89. package/dist/src/symbol-cache.d.ts.map +0 -1
  90. package/dist/src/symbol-cache.js.map +0 -1
  91. package/dist/src/types.d.ts.map +0 -1
  92. /package/dist/src/{config.d.ts → core/config.d.ts} +0 -0
  93. /package/dist/src/{symbol-cache.js → core/symbol-cache.js} +0 -0
  94. /package/dist/src/{codec.d.ts → protocol/codec.d.ts} +0 -0
  95. /package/dist/src/{types.js → protocol/types.js} +0 -0
@@ -1,11 +1,11 @@
1
- import { CTraderConnection, } from "./connection.js";
2
- import { CTraderAuth } from "./modules/auth.js";
3
- import { CTraderTrading, } from "./modules/trading.js";
4
- import { CTraderAccount } from "./modules/account.js";
5
- import { CTraderMarket, } from "./modules/market.js";
6
- import { SymbolCache } from "./symbol-cache.js";
7
- import { PayloadType, TradeSide } from "./enums.js";
1
+ import { CTraderAccount } from "../modules/account.js";
2
+ import { CTraderAuth } from "../modules/auth.js";
3
+ import { CTraderMarket, } from "../modules/market.js";
4
+ import { CTraderTrading, } from "../modules/trading.js";
5
+ import { PayloadType, TradeSide } from "../protocol/enums.js";
6
+ import { CTraderConnection } from "./connection.js";
8
7
  import { resolveSlTp } from "./helpers.js";
8
+ import { SymbolCache } from "./symbol-cache.js";
9
9
  export class CTrader {
10
10
  /** Low-level WebSocket connection — use for raw events and advanced control */
11
11
  connection;
@@ -69,14 +69,29 @@ export class CTrader {
69
69
  const ids = await Promise.all(symbolsOrIds.map((s) => this.symbols.resolveId(s)));
70
70
  return this.raw.market.getSymbolsById(ids);
71
71
  }
72
+ /**
73
+ * Full details for a single symbol: spread, commission, swap, lot size, schedule.
74
+ * Convenience wrapper around getSymbolDetails() for when you only need one.
75
+ * @param symbol - Symbol name ("EURUSD") or numeric ID
76
+ */
77
+ async getSymbolInfo(symbol) {
78
+ const [info] = await this.getSymbolDetails([symbol]);
79
+ if (info === undefined)
80
+ throw new Error(`Symbol ${String(symbol)} not found`);
81
+ return info;
82
+ }
72
83
  /** Force-refresh the symbol name→ID cache. Call if the broker adds new symbols. */
73
84
  async refreshSymbols() {
74
85
  await this.symbols.refresh();
75
86
  }
76
87
  // ─── Account ─────────────────────────────────────────────────────────────
77
- /** Trader profile: balance, equity, margin, account type, access rights */
88
+ /** Trader profile with computed `leverage` field (e.g. 100, 200, 500) */
78
89
  async getTrader() {
79
- return this.raw.account.getTrader();
90
+ const trader = await this.raw.account.getTrader();
91
+ return {
92
+ ...trader,
93
+ leverage: trader.leverageInCents !== undefined ? trader.leverageInCents / 100 : undefined,
94
+ };
80
95
  }
81
96
  /**
82
97
  * All open positions and pending orders.
@@ -96,20 +111,24 @@ export class CTrader {
96
111
  this.raw.account.getPositionUnrealizedPnl(),
97
112
  ]);
98
113
  const moneyDigits = trader.moneyDigits ?? 2;
99
- const divisor = Math.pow(10, moneyDigits);
114
+ const divisor = 10 ** moneyDigits;
100
115
  const unrealizedPnl = pnlData.pnls.reduce((sum, p) => sum + p.netUnrealizedPnL, 0) / divisor;
101
116
  const balance = trader.balance / divisor;
102
117
  const equity = balance + unrealizedPnl;
103
- const usedMargin = reconciled.positions.reduce((sum, p) => sum + (p.usedMargin ?? 0), 0) /
104
- divisor;
118
+ const usedMargin = reconciled.positions.reduce((sum, p) => sum + (p.usedMargin ?? 0), 0) / divisor;
105
119
  const freeMargin = equity - usedMargin;
120
+ const enrichedPositions = reconciled.positions.map((p) => ({
121
+ ...p,
122
+ volumeInLots: unitsToLots(p.tradeData.volume),
123
+ entryPrice: p.price,
124
+ }));
106
125
  const result = {
107
126
  balance,
108
127
  equity,
109
128
  usedMargin,
110
129
  freeMargin,
111
130
  unrealizedPnl,
112
- positions: reconciled.positions,
131
+ positions: enrichedPositions,
113
132
  orders: reconciled.orders,
114
133
  moneyDigits,
115
134
  };
@@ -119,19 +138,17 @@ export class CTrader {
119
138
  return result;
120
139
  }
121
140
  /**
122
- * Deal (execution) history.
123
- * @param from - Start Unix timestamp in ms
124
- * @param to - End Unix timestamp in ms
125
- * @param maxRows - Limit results (API max ~5000)
141
+ * Deal (execution) history. Defaults to last 24 hours if no time range specified.
142
+ * @param opts - Optional time range and row limit
126
143
  */
127
- async getDeals(from, to, maxRows) {
128
- const params = {};
129
- if (from !== undefined)
130
- params.fromTimestamp = from;
131
- if (to !== undefined)
132
- params.toTimestamp = to;
133
- if (maxRows !== undefined)
134
- params.maxRows = maxRows;
144
+ async getDeals(opts = {}) {
145
+ const now = Date.now();
146
+ const params = {
147
+ fromTimestamp: opts.from ?? now - 24 * 60 * 60 * 1000,
148
+ toTimestamp: opts.to ?? now,
149
+ };
150
+ if (opts.maxRows !== undefined)
151
+ params.maxRows = opts.maxRows;
135
152
  return this.raw.account.getDeals(params);
136
153
  }
137
154
  /** Deal history for a specific position */
@@ -148,14 +165,16 @@ export class CTrader {
148
165
  async getDealOffsets(dealId) {
149
166
  return this.raw.account.getDealOffsets(dealId);
150
167
  }
151
- /** Order history */
152
- async getOrders(from, to) {
153
- const params = {};
154
- if (from !== undefined)
155
- params.fromTimestamp = from;
156
- if (to !== undefined)
157
- params.toTimestamp = to;
158
- return this.raw.account.getOrders(params);
168
+ /**
169
+ * Order history. Defaults to last 24 hours if no time range specified.
170
+ * @param opts - Optional time range
171
+ */
172
+ async getOrders(opts = {}) {
173
+ const now = Date.now();
174
+ return this.raw.account.getOrders({
175
+ fromTimestamp: opts.from ?? now - 24 * 60 * 60 * 1000,
176
+ toTimestamp: opts.to ?? now,
177
+ });
159
178
  }
160
179
  /** Deposit/withdrawal history. Max range: 7 days */
161
180
  async getCashFlow(from, to) {
@@ -288,23 +307,109 @@ export class CTrader {
288
307
  volumeInUnits: volume,
289
308
  }, opts.sl, opts.tp);
290
309
  // Convert relative SL/TP to absolute prices: entry ± distance
310
+ // If pos.price is unavailable (just-opened position), fetch current spot as fallback
311
+ let entryPrice = pos.price;
312
+ const needPrice = (sltp.relativeStopLoss !== undefined || sltp.relativeTakeProfit !== undefined) &&
313
+ entryPrice === undefined;
314
+ if (needPrice) {
315
+ // Fetch a live spot price as fallback when position price isn't available yet
316
+ const spot = await new Promise((resolve, reject) => {
317
+ const timer = setTimeout(() => {
318
+ off();
319
+ void this.raw.market.unsubscribeSpots([symbolId]).catch(() => { });
320
+ reject(new Error(`Timed out fetching spot price for symbol ${symbolId}`));
321
+ }, 10_000);
322
+ const off = this.raw.market.onSpot((evt) => {
323
+ if (evt.symbolId === symbolId) {
324
+ clearTimeout(timer);
325
+ off();
326
+ void this.raw.market.unsubscribeSpots([symbolId]).catch(() => { });
327
+ resolve(evt);
328
+ }
329
+ });
330
+ this.raw.market.subscribeSpots([symbolId]).catch((err) => {
331
+ clearTimeout(timer);
332
+ off();
333
+ reject(err);
334
+ });
335
+ });
336
+ // Convert raw protocol price to decimal (same as watchSpots)
337
+ const bidDecimal = spot.bid !== undefined ? spot.bid / 100_000 : undefined;
338
+ const askDecimal = spot.ask !== undefined ? spot.ask / 100_000 : undefined;
339
+ entryPrice =
340
+ pos.tradeData.tradeSide === TradeSide.BUY
341
+ ? (bidDecimal ?? askDecimal)
342
+ : (askDecimal ?? bidDecimal);
343
+ }
344
+ // Build amend params, always preserving existing SL/TP when not being changed.
345
+ // The cTrader API clears SL/TP if they are omitted from the amend request.
291
346
  const amendParams = {};
292
- if (sltp.relativeStopLoss !== undefined && pos.price !== undefined) {
347
+ // --- Stop Loss ---
348
+ if (sltp.relativeStopLoss !== undefined) {
349
+ if (entryPrice === undefined) {
350
+ throw new Error(`Cannot set stop loss: position ${positionId} has no entry price and spot price could not be resolved.`);
351
+ }
293
352
  const distance = sltp.relativeStopLoss / 100_000;
294
353
  amendParams.stopLoss =
295
- pos.tradeData.tradeSide === TradeSide.BUY
296
- ? pos.price - distance
297
- : pos.price + distance;
354
+ pos.tradeData.tradeSide === TradeSide.BUY ? entryPrice - distance : entryPrice + distance;
298
355
  }
299
- if (sltp.relativeTakeProfit !== undefined && pos.price !== undefined) {
356
+ else if (pos.stopLoss !== undefined) {
357
+ // Preserve existing SL when not being modified — omitting it
358
+ // from the amend request would cause cTrader to clear it.
359
+ amendParams.stopLoss = pos.stopLoss;
360
+ }
361
+ // --- Take Profit ---
362
+ if (sltp.relativeTakeProfit !== undefined) {
363
+ if (entryPrice === undefined) {
364
+ throw new Error(`Cannot set take profit: position ${positionId} has no entry price and spot price could not be resolved.`);
365
+ }
300
366
  const distance = sltp.relativeTakeProfit / 100_000;
301
367
  amendParams.takeProfit =
302
- pos.tradeData.tradeSide === TradeSide.BUY
303
- ? pos.price + distance
304
- : pos.price - distance;
368
+ pos.tradeData.tradeSide === TradeSide.BUY ? entryPrice + distance : entryPrice - distance;
369
+ }
370
+ else if (pos.takeProfit !== undefined) {
371
+ // Preserve existing TP when not being modified — omitting it
372
+ // from the amend request would cause cTrader to clear it.
373
+ amendParams.takeProfit = pos.takeProfit;
305
374
  }
306
375
  await this.raw.trading.amendPositionSltp(positionId, amendParams);
307
376
  }
377
+ /**
378
+ * Resize a position — change its volume to a new target in lots.
379
+ * If newLots > current: adds volume via a market order on the same position.
380
+ * If newLots < current: partially closes the difference.
381
+ * If equal: no-op.
382
+ * @param positionId - The cTrader position ID
383
+ * @param newLots - Desired total position size in lots (e.g. 0.05, 0.1, 1.0)
384
+ * @returns The execution event from the increase/decrease, or undefined if no-op
385
+ */
386
+ async resize(positionId, newLots) {
387
+ if (newLots < 0)
388
+ throw new Error("newLots must be >= 0. Use close() to fully close a position.");
389
+ if (newLots === 0)
390
+ throw new Error("newLots must be > 0. Use close() to fully close a position.");
391
+ const { positions } = await this.raw.account.reconcile();
392
+ const pos = positions.find((p) => p.positionId === positionId);
393
+ if (pos === undefined)
394
+ throw new Error(`Position ${positionId} not found`);
395
+ const currentUnits = pos.tradeData.volume;
396
+ const newUnits = lotsToUnits(newLots);
397
+ if (newUnits === currentUnits)
398
+ return undefined;
399
+ if (newUnits > currentUnits) {
400
+ // Increase: send a market order with positionId to add volume
401
+ const deltaUnits = newUnits - currentUnits;
402
+ return this.raw.trading.marketOrder({
403
+ symbolId: pos.tradeData.symbolId,
404
+ tradeSide: pos.tradeData.tradeSide,
405
+ volume: deltaUnits,
406
+ positionId,
407
+ });
408
+ }
409
+ // Decrease: partial close for the difference
410
+ const deltaUnits = currentUnits - newUnits;
411
+ return this.raw.trading.closePosition(positionId, deltaUnits);
412
+ }
308
413
  /**
309
414
  * Close a position by ID. Full close by default, or partial if lots is specified.
310
415
  * @param positionId - The cTrader position ID
@@ -357,9 +462,7 @@ export class CTrader {
357
462
  const ids = await Promise.all(symbolsOrIds.map((s) => this.symbols.resolveId(s)));
358
463
  const idToName = new Map(ids.map((id, i) => [
359
464
  id,
360
- typeof symbolsOrIds[i] === "string"
361
- ? symbolsOrIds[i]
362
- : String(symbolsOrIds[i]),
465
+ typeof symbolsOrIds[i] === "string" ? symbolsOrIds[i] : String(symbolsOrIds[i]),
363
466
  ]));
364
467
  await this.raw.market.subscribeSpots(ids);
365
468
  const unsub = this.raw.market.onSpot((event) => {
@@ -456,6 +559,14 @@ export class CTrader {
456
559
  });
457
560
  }
458
561
  // ─── Convenience ────────────────────────────────────────────────────────
562
+ /**
563
+ * Stream live depth-of-market (order book) data. Returns an async unsubscribe function.
564
+ * @param symbolsOrIds - Symbol names or IDs to watch
565
+ * @param handler - Called on every depth update for subscribed symbols
566
+ * @example
567
+ * const stop = await client.watchDepth(["EURUSD"], (e) => console.log(e));
568
+ * // later: await stop();
569
+ */
459
570
  async watchDepth(symbolsOrIds, handler) {
460
571
  const ids = await Promise.all(symbolsOrIds.map((s) => this.symbols.resolveId(s)));
461
572
  await this.raw.market.subscribeDepth(ids);
@@ -468,6 +579,152 @@ export class CTrader {
468
579
  await this.raw.market.unsubscribeDepth(ids);
469
580
  };
470
581
  }
582
+ /**
583
+ * Stream live account state — balance, equity, margin, positions, and orders update in real-time.
584
+ * Listens to execution events, balance changes, margin updates, and spot prices to
585
+ * recompute a full AccountState snapshot on every change. No polling — pure push.
586
+ *
587
+ * Returns an async unsubscribe function that cleans up all listeners and spot subscriptions.
588
+ *
589
+ * @param handler - Called with the latest LiveAccountState on every state change
590
+ * @param options - Optional: throttleMs to limit spot-triggered updates (default 500ms)
591
+ *
592
+ * @example
593
+ * const stop = await ct.watchState((state) => {
594
+ * console.log(`Equity: $${state.equity}, Positions: ${state.positions.length}`);
595
+ * });
596
+ * // later: await stop();
597
+ */
598
+ async watchState(handler, options = {}) {
599
+ const throttleMs = options.throttleMs ?? 500;
600
+ // --- Mutable state ---
601
+ let currentState = await this.getState();
602
+ const spotPrices = new Map();
603
+ let subscribedSymbolIds = [];
604
+ let destroyed = false;
605
+ // Emit initial state
606
+ handler({ ...currentState, reason: "init", timestamp: Date.now() });
607
+ // --- Helper: recompute equity from spot prices ---
608
+ const recomputeFromSpots = () => {
609
+ const positions = currentState.positions;
610
+ let unrealizedPnl = 0;
611
+ for (const pos of positions) {
612
+ const spot = spotPrices.get(pos.tradeData.symbolId);
613
+ if (spot === undefined || pos.entryPrice === undefined)
614
+ continue;
615
+ const isBuy = pos.tradeData.tradeSide === TradeSide.BUY;
616
+ const currentPrice = isBuy ? (spot.bid ?? spot.ask) : (spot.ask ?? spot.bid);
617
+ if (currentPrice === undefined)
618
+ continue;
619
+ const priceDiff = isBuy ? currentPrice - pos.entryPrice : pos.entryPrice - currentPrice;
620
+ // Volume is in protocol units (100000 = 1 lot), price diff is in decimal
621
+ unrealizedPnl += priceDiff * pos.tradeData.volume;
622
+ }
623
+ const balance = currentState.balance;
624
+ const equity = balance + unrealizedPnl;
625
+ const usedMargin = currentState.usedMargin;
626
+ const freeMargin = equity - usedMargin;
627
+ const result = {
628
+ ...currentState,
629
+ unrealizedPnl,
630
+ equity,
631
+ freeMargin,
632
+ };
633
+ if (usedMargin > 0) {
634
+ result.marginLevel = (equity / usedMargin) * 100;
635
+ }
636
+ return result;
637
+ };
638
+ // --- Helper: refresh full state from server ---
639
+ const refreshState = async (reason) => {
640
+ if (destroyed)
641
+ return;
642
+ currentState = await this.getState();
643
+ await syncSpotSubscriptions();
644
+ handler({ ...currentState, reason, timestamp: Date.now() });
645
+ };
646
+ // --- Helper: subscribe to spots for all position symbols ---
647
+ const syncSpotSubscriptions = async () => {
648
+ const neededIds = [...new Set(currentState.positions.map((p) => p.tradeData.symbolId))];
649
+ const toSubscribe = neededIds.filter((id) => !subscribedSymbolIds.includes(id));
650
+ const toUnsubscribe = subscribedSymbolIds.filter((id) => !neededIds.includes(id));
651
+ if (toUnsubscribe.length > 0) {
652
+ await this.raw.market.unsubscribeSpots(toUnsubscribe).catch(() => { });
653
+ for (const id of toUnsubscribe)
654
+ spotPrices.delete(id);
655
+ }
656
+ if (toSubscribe.length > 0) {
657
+ await this.raw.market.subscribeSpots(toSubscribe);
658
+ }
659
+ subscribedSymbolIds = neededIds;
660
+ };
661
+ // Subscribe to spots for current positions
662
+ await syncSpotSubscriptions();
663
+ // --- Spot price handler (throttled) ---
664
+ let spotThrottleTimer;
665
+ const offSpot = this.raw.market.onSpot((event) => {
666
+ if (destroyed)
667
+ return;
668
+ if (!subscribedSymbolIds.includes(event.symbolId))
669
+ return;
670
+ const current = spotPrices.get(event.symbolId) ?? {};
671
+ if (event.bid !== undefined)
672
+ current.bid = event.bid / 100_000;
673
+ if (event.ask !== undefined)
674
+ current.ask = event.ask / 100_000;
675
+ spotPrices.set(event.symbolId, current);
676
+ if (throttleMs === 0) {
677
+ const updated = recomputeFromSpots();
678
+ handler({ ...updated, reason: "spot", timestamp: Date.now() });
679
+ return;
680
+ }
681
+ if (spotThrottleTimer === undefined) {
682
+ spotThrottleTimer = setTimeout(() => {
683
+ spotThrottleTimer = undefined;
684
+ if (destroyed)
685
+ return;
686
+ const updated = recomputeFromSpots();
687
+ handler({ ...updated, reason: "spot", timestamp: Date.now() });
688
+ }, throttleMs);
689
+ }
690
+ });
691
+ // --- Execution events (position open/close/modify) ---
692
+ const offExecution = this.onExecution(() => {
693
+ void refreshState("execution");
694
+ });
695
+ // --- Balance/account changes ---
696
+ const offTrader = this.onTraderUpdated(() => {
697
+ void refreshState("trader_updated");
698
+ });
699
+ // --- Margin changes ---
700
+ const offMargin = this.onMarginChanged((event) => {
701
+ if (destroyed)
702
+ return;
703
+ // Update margin in-place for the affected position
704
+ const pos = currentState.positions.find((p) => p.positionId === event.positionId);
705
+ if (pos !== undefined) {
706
+ pos.usedMargin = event.usedMargin;
707
+ const usedMargin = currentState.positions.reduce((sum, p) => sum + (p.usedMargin ?? 0), 0) /
708
+ 10 ** currentState.moneyDigits;
709
+ currentState = { ...currentState, usedMargin };
710
+ }
711
+ const updated = recomputeFromSpots();
712
+ handler({ ...updated, reason: "margin_changed", timestamp: Date.now() });
713
+ });
714
+ // --- Cleanup function ---
715
+ return async () => {
716
+ destroyed = true;
717
+ if (spotThrottleTimer !== undefined)
718
+ clearTimeout(spotThrottleTimer);
719
+ offSpot();
720
+ offExecution();
721
+ offTrader();
722
+ offMargin();
723
+ if (subscribedSymbolIds.length > 0) {
724
+ await this.raw.market.unsubscribeSpots(subscribedSymbolIds).catch(() => { });
725
+ }
726
+ };
727
+ }
471
728
  // ─── Private helpers ────────────────────────────────────────────────────
472
729
  async executeMarketOrder(symbol, tradeSide, opts) {
473
730
  const id = await this.symbols.resolveId(symbol);
@@ -550,15 +807,15 @@ export { pipsToRelative } from "./helpers.js";
550
807
  function buildMarketOrderFields(opts) {
551
808
  const f = {};
552
809
  if (opts.trailingStopLoss !== undefined)
553
- f["trailingStopLoss"] = opts.trailingStopLoss;
810
+ f.trailingStopLoss = opts.trailingStopLoss;
554
811
  if (opts.guaranteedStopLoss !== undefined)
555
- f["guaranteedStopLoss"] = opts.guaranteedStopLoss;
812
+ f.guaranteedStopLoss = opts.guaranteedStopLoss;
556
813
  if (opts.label !== undefined)
557
- f["label"] = opts.label;
814
+ f.label = opts.label;
558
815
  if (opts.comment !== undefined)
559
- f["comment"] = opts.comment;
816
+ f.comment = opts.comment;
560
817
  if (opts.clientOrderId !== undefined)
561
- f["clientOrderId"] = opts.clientOrderId;
818
+ f.clientOrderId = opts.clientOrderId;
562
819
  return f;
563
820
  }
564
821
  //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAKnD,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAC/C,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAC/C,eAAO,MAAM,QAAQ,OAAO,CAAC;AAE7B,wCAAwC;AACxC,eAAO,MAAM,aAAa,wBAAY,CAAC;AACvC,wCAAwC;AACxC,eAAO,MAAM,aAAa,wBAAY,CAAC;AAEvC,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAEnE;AAED,iDAAiD;AACjD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAEvE;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAQhD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAGtD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAgBD,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,aAAa,CAuBtE"}
@@ -24,6 +24,7 @@ export function loadStoredConfig() {
24
24
  return JSON.parse(readFileSync(CONFIG_PATH, "utf-8"));
25
25
  }
26
26
  catch {
27
+ // Corrupted or unreadable config file — treat as empty
27
28
  return {};
28
29
  }
29
30
  }
@@ -38,19 +39,18 @@ export function getConfigPath() {
38
39
  function fromEnv() {
39
40
  const env = process.env;
40
41
  const result = {};
41
- if (env["CTRADER_CLIENT_ID"])
42
- result.clientId = env["CTRADER_CLIENT_ID"];
43
- if (env["CTRADER_CLIENT_SECRET"])
44
- result.clientSecret = env["CTRADER_CLIENT_SECRET"];
45
- if (env["CTRADER_ACCESS_TOKEN"])
46
- result.accessToken = env["CTRADER_ACCESS_TOKEN"];
47
- if (env["CTRADER_REFRESH_TOKEN"])
48
- result.refreshToken = env["CTRADER_REFRESH_TOKEN"];
49
- if (env["CTRADER_ACCOUNT_ID"])
50
- result.accountId = Number(env["CTRADER_ACCOUNT_ID"]);
51
- if (env["CTRADER_ENVIRONMENT"] === "live" ||
52
- env["CTRADER_ENVIRONMENT"] === "demo") {
53
- result.environment = env["CTRADER_ENVIRONMENT"];
42
+ if (env.CTRADER_CLIENT_ID)
43
+ result.clientId = env.CTRADER_CLIENT_ID;
44
+ if (env.CTRADER_CLIENT_SECRET)
45
+ result.clientSecret = env.CTRADER_CLIENT_SECRET;
46
+ if (env.CTRADER_ACCESS_TOKEN)
47
+ result.accessToken = env.CTRADER_ACCESS_TOKEN;
48
+ if (env.CTRADER_REFRESH_TOKEN)
49
+ result.refreshToken = env.CTRADER_REFRESH_TOKEN;
50
+ if (env.CTRADER_ACCOUNT_ID)
51
+ result.accountId = Number(env.CTRADER_ACCOUNT_ID);
52
+ if (env.CTRADER_ENVIRONMENT === "live" || env.CTRADER_ENVIRONMENT === "demo") {
53
+ result.environment = env.CTRADER_ENVIRONMENT;
54
54
  }
55
55
  return result;
56
56
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { API_PORT, type PartialConfig, DEMO_HOST, LIVE_HOST } from "./config.js";
2
1
  import { CTrader } from "./client.js";
2
+ import { API_PORT, DEMO_HOST, LIVE_HOST, type PartialConfig } from "./config.js";
3
3
  export { DEMO_HOST, LIVE_HOST, API_PORT };
4
4
  /** @deprecated Use DEMO_HOST */
5
5
  export declare const DEMO_ENDPOINT = "demo.ctraderapi.com";
@@ -35,8 +35,8 @@ export interface ConnectOptions extends PartialConfig {
35
35
  *
36
36
  * @example
37
37
  * const ct = await connect();
38
- * const pos = await ct.buy("EURUSD", { volume: 0.01 });
39
- * await ct.close(pos.position!);
38
+ * const pos = await ct.buy("EURUSD", { lots: 0.01 });
39
+ * await ct.close(pos.positionId);
40
40
  *
41
41
  * @example
42
42
  * const ct = await connect({ environment: "live" });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/core/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACN,QAAQ,EACR,SAAS,EAET,SAAS,EACT,KAAK,aAAa,EAElB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC1C,gCAAgC;AAChC,eAAO,MAAM,aAAa,wBAAY,CAAC;AACvC,gCAAgC;AAChC,eAAO,MAAM,aAAa,wBAAY,CAAC;AAEvC,MAAM,WAAW,cAAe,SAAQ,aAAa;IACpD;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACtD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,OAAO,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAqD1E"}
@@ -1,5 +1,5 @@
1
- import { resolveConfig, hostForEnvironment, API_PORT, DEMO_HOST, LIVE_HOST, } from "./config.js";
2
1
  import { CTrader } from "./client.js";
2
+ import { API_PORT, DEMO_HOST, hostForEnvironment, LIVE_HOST, resolveConfig, } from "./config.js";
3
3
  import { CTraderError } from "./errors.js";
4
4
  export { DEMO_HOST, LIVE_HOST, API_PORT };
5
5
  /** @deprecated Use DEMO_HOST */
@@ -15,8 +15,8 @@ export const LIVE_ENDPOINT = LIVE_HOST;
15
15
  *
16
16
  * @example
17
17
  * const ct = await connect();
18
- * const pos = await ct.buy("EURUSD", { volume: 0.01 });
19
- * await ct.close(pos.position!);
18
+ * const pos = await ct.buy("EURUSD", { lots: 0.01 });
19
+ * await ct.close(pos.positionId);
20
20
  *
21
21
  * @example
22
22
  * const ct = await connect({ environment: "live" });
@@ -61,9 +61,7 @@ export async function connect(overrides) {
61
61
  }
62
62
  catch (err) {
63
63
  // If auth fails and we have a refresh token, attempt one automatic refresh
64
- if (err instanceof CTraderError &&
65
- err.isAuthError &&
66
- config.refreshToken) {
64
+ if (err instanceof CTraderError && err.isAuthError && config.refreshToken) {
67
65
  const refreshed = await client.raw.auth.refreshToken(config.refreshToken);
68
66
  currentAccessToken = refreshed.accessToken;
69
67
  if (refreshed.refreshToken) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/core/connect.ts"],"names":[],"mappings":"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"}