ctrader-x 0.1.0 → 0.2.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/README.md CHANGED
@@ -117,6 +117,14 @@ if (symbol) {
117
117
 
118
118
  `marketData.symbols` is a `SpotwareSymbolCatalog` — it can also be used on its own (`new SpotwareSymbolCatalog(client)`) if you only need symbol lookups.
119
119
 
120
+ `findByName`/`getAll` return the light symbol list — enough to resolve a name to a `symbolId` and subscribe. For the trading constraints that list doesn't carry (`lotSize`, `minVolume`/`maxVolume`/`stepVolume`, `digits`, `pipPosition`), fetch the full spec:
121
+
122
+ ```typescript
123
+ const fullSymbol = await marketData.symbols.getFullSymbol(symbol.symbolId);
124
+ ```
125
+
126
+ See [A note on volume](#a-note-on-volume) under Trading for why these matter before placing an order.
127
+
120
128
  ### Trading
121
129
 
122
130
  ```typescript
@@ -137,7 +145,13 @@ const { positions, orders } = await trading.getOpenPositionsAndOrders();
137
145
 
138
146
  `volume` here is in **units** of the symbol's base currency (for EURUSD, 1 unit = 1 EUR), not lots. On the wire, cTrader represents volume as "cents of a unit" — `100000` means `1000.00` units — and `trading` converts to and from that form for you, so you always work in whole units through this API, never the wire's scaled integer.
139
147
 
140
- Units and lots are not the same thing, and the conversion between them is **not a fixed ratio you can hardcode**. How many units make up "1 lot" is defined per symbol, not by the protocol — retail forex conventionally uses 100,000 units per lot, but that's a market convention, not something cTrader's API guarantees for every symbol (it can differ for indices, commodities, crypto, or simply per broker). The authoritative values — `lotSize`, plus the tradable `minVolume`/`maxVolume`/`stepVolume` range — live on the full symbol spec (`ProtoOASymbol`, fetched via `PROTO_OA_SYMBOL_BY_ID_REQ`), not on the lighter `ProtoOALightSymbol` that `SpotwareSymbolCatalog` currently exposes. If your UI works in lots, fetch that full spec yourself and convert before calling `trading`; `ctrader-x` doesn't wrap that request yet.
148
+ Units and lots are not the same thing, and the conversion between them is **not a fixed ratio you can hardcode**. How many units make up "1 lot" is defined per symbol, not by the protocol — retail forex conventionally uses 100,000 units per lot, but that's a market convention, not something cTrader's API guarantees for every symbol (it can differ for indices, commodities, crypto, or simply per broker). The authoritative values — `lotSize`, plus the tradable `minVolume`/`maxVolume`/`stepVolume` range — live on the full symbol spec, not the lighter one `getAll()`/`findByName()` return:
149
+
150
+ ```typescript
151
+ const fullSymbol = await marketData.symbols.getFullSymbol(symbol.symbolId);
152
+ ```
153
+
154
+ If your UI works in lots, or you want to validate a volume before sending it, fetch that spec and convert or check against it before calling `trading`. `ctrader-x` gives you the raw values; it doesn't do that conversion or validation for you.
141
155
 
142
156
  More complete, runnable examples live in [`src/example/`](src/example/):
143
157
 
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const market_data_1 = require("../market-data");
4
+ const spotware_scale_1 = require("../shared/spotware-scale");
4
5
  const create_authenticated_client_1 = require("./shared/create-authenticated-client");
5
6
  const SYMBOL_NAME = process.argv[2] ?? 'EURUSD';
6
7
  const LISTEN_DURATION_MS = 60_000;
@@ -17,6 +18,21 @@ async function main() {
17
18
  if (!symbol) {
18
19
  throw new Error(`Symbol "${SYMBOL_NAME}" was not found for this account`);
19
20
  }
21
+ // getFullSymbol() is the full per-symbol spec — findByName()/getAll() only return the
22
+ // light list, which doesn't carry the fields you need to validate a volume or round a
23
+ // price correctly, since those are defined per symbol by the broker, not a fixed ratio.
24
+ const fullSymbol = await marketData.symbols.getFullSymbol(symbol.symbolId);
25
+ if (fullSymbol) {
26
+ console.log(`\n${symbol.symbolName} trading constraints:`);
27
+ console.table({
28
+ digits: fullSymbol.digits,
29
+ pipPosition: fullSymbol.pipPosition,
30
+ lotSizeUnits: (fullSymbol.lotSize ?? 0) / spotware_scale_1.SPOTWARE_VOLUME_SCALE,
31
+ minVolumeUnits: (fullSymbol.minVolume ?? 0) / spotware_scale_1.SPOTWARE_VOLUME_SCALE,
32
+ maxVolumeUnits: (fullSymbol.maxVolume ?? 0) / spotware_scale_1.SPOTWARE_VOLUME_SCALE,
33
+ stepVolumeUnits: (fullSymbol.stepVolume ?? 0) / spotware_scale_1.SPOTWARE_VOLUME_SCALE
34
+ });
35
+ }
20
36
  console.log(`\nSubscribing to ${symbol.symbolName} (symbolId ${symbol.symbolId})...`);
21
37
  await marketData.subscribe(symbol.symbolId);
22
38
  console.log(`Listening for price updates for ${LISTEN_DURATION_MS / 1000}s (Ctrl+C to stop earlier)...\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"market-data-example.js","sourceRoot":"","sources":["../../src/example/market-data-example.ts"],"names":[],"mappings":";;AAAA,gDAAoD;AACpD,sFAAiF;AAEjF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;AAChD,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,KAAK,UAAU,IAAI;IACf,MAAM,MAAM,GAAG,MAAM,IAAA,uDAAyB,GAAE,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,gCAAkB,CAAC,MAAM,CAAC,CAAC;IAClD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACtF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,SAAS,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,WAAW,WAAW,kCAAkC,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,UAAU,cAAc,MAAM,CAAC,QAAQ,MAAM,CAAC,CAAC;IACtF,MAAM,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,mCAAmC,kBAAkB,GAAG,IAAI,iCAAiC,CAAC,CAAC;IAC3G,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,MAAM,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;IAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"market-data-example.js","sourceRoot":"","sources":["../../src/example/market-data-example.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { SpotwareClient } from '../client';
2
- import { ProtoOALightSymbol } from '../types';
2
+ import { ProtoOALightSymbol, ProtoOASymbol } from '../types';
3
3
  /**
4
4
  * Fetches and caches the account's symbol list, and resolves a ticker name (e.g. "EURUSD")
5
5
  * to the numeric symbolId every other request actually needs. Public on its own — trading
@@ -9,11 +9,20 @@ import { ProtoOALightSymbol } from '../types';
9
9
  export declare class SpotwareSymbolCatalog {
10
10
  private readonly client;
11
11
  private symbolsPromise;
12
+ private readonly fullSymbolPromises;
12
13
  constructor(client: SpotwareClient);
13
14
  getAll(): Promise<ProtoOALightSymbol[]>;
14
15
  findByName(symbolName: string): Promise<ProtoOALightSymbol | undefined>;
15
16
  findById(symbolId: number): Promise<ProtoOALightSymbol | undefined>;
16
17
  refresh(): Promise<ProtoOALightSymbol[]>;
18
+ /**
19
+ * Fetches the full symbol spec — lotSize, minVolume/maxVolume/stepVolume, digits,
20
+ * pipPosition, and everything else `getAll()`'s light list doesn't carry. Needed to
21
+ * validate a volume or round a price correctly before placing an order: those constraints
22
+ * are defined per symbol by the broker, not by a fixed, hardcodable ratio.
23
+ */
24
+ getFullSymbol(symbolId: number): Promise<ProtoOASymbol | undefined>;
17
25
  private fetchSymbols;
26
+ private fetchFullSymbol;
18
27
  }
19
28
  //# sourceMappingURL=spotware-symbol-catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spotware-symbol-catalog.d.ts","sourceRoot":"","sources":["../../src/market-data/spotware-symbol-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAoE,MAAM,UAAU,CAAC;AAEhH;;;;;GAKG;AACH,qBAAa,qBAAqB;IAGlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,cAAc,CAA4C;gBAErC,MAAM,EAAE,cAAc;IAE7C,MAAM,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAQvC,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAOvE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAOzE,OAAO,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAM1B,YAAY;CAgB7B"}
1
+ {"version":3,"file":"spotware-symbol-catalog.d.ts","sourceRoot":"","sources":["../../src/market-data/spotware-symbol-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EACH,kBAAkB,EAElB,aAAa,EAKhB,MAAM,UAAU,CAAC;AAElB;;;;;GAKG;AACH,qBAAa,qBAAqB;IAIlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAyD;gBAE/D,MAAM,EAAE,cAAc;IAE7C,MAAM,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAQvC,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAOvE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAOzE,OAAO,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAMxC;;;;;OAKG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;YAU3D,YAAY;YAiBZ,eAAe;CAWhC"}
@@ -11,6 +11,7 @@ const types_1 = require("../types");
11
11
  class SpotwareSymbolCatalog {
12
12
  client;
13
13
  symbolsPromise;
14
+ fullSymbolPromises = new Map();
14
15
  constructor(client) {
15
16
  this.client = client;
16
17
  }
@@ -34,6 +35,20 @@ class SpotwareSymbolCatalog {
34
35
  this.symbolsPromise = this.fetchSymbols();
35
36
  return this.symbolsPromise;
36
37
  }
38
+ /**
39
+ * Fetches the full symbol spec — lotSize, minVolume/maxVolume/stepVolume, digits,
40
+ * pipPosition, and everything else `getAll()`'s light list doesn't carry. Needed to
41
+ * validate a volume or round a price correctly before placing an order: those constraints
42
+ * are defined per symbol by the broker, not by a fixed, hardcodable ratio.
43
+ */
44
+ async getFullSymbol(symbolId) {
45
+ let promise = this.fullSymbolPromises.get(symbolId);
46
+ if (!promise) {
47
+ promise = this.fetchFullSymbol(symbolId);
48
+ this.fullSymbolPromises.set(symbolId, promise);
49
+ }
50
+ return promise;
51
+ }
37
52
  async fetchSymbols() {
38
53
  try {
39
54
  const request = types_1.ProtoOASymbolsListReq.fromPartial({ ctidTraderAccountId: this.client.ctidTraderAccountId });
@@ -47,6 +62,17 @@ class SpotwareSymbolCatalog {
47
62
  throw error;
48
63
  }
49
64
  }
65
+ async fetchFullSymbol(symbolId) {
66
+ try {
67
+ const request = types_1.ProtoOASymbolByIdReq.fromPartial({ ctidTraderAccountId: this.client.ctidTraderAccountId, symbolId: [symbolId] });
68
+ const response = await this.client.send(types_1.ProtoOAPayloadType.PROTO_OA_SYMBOL_BY_ID_REQ, types_1.ProtoOASymbolByIdReq.encode(request).finish());
69
+ return types_1.ProtoOASymbolByIdRes.decode(response.payload ?? new Uint8Array()).symbol.find((symbol) => symbol.symbolId === symbolId);
70
+ }
71
+ catch (error) {
72
+ this.fullSymbolPromises.delete(symbolId);
73
+ throw error;
74
+ }
75
+ }
50
76
  }
51
77
  exports.SpotwareSymbolCatalog = SpotwareSymbolCatalog;
52
78
  //# sourceMappingURL=spotware-symbol-catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spotware-symbol-catalog.js","sourceRoot":"","sources":["../../src/market-data/spotware-symbol-catalog.ts"],"names":[],"mappings":";;;AACA,oCAAgH;AAEhH;;;;;GAKG;AACH,MAAa,qBAAqB;IAGD;IAFrB,cAAc,CAA4C;IAElE,YAA6B,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAEvD,KAAK,CAAC,MAAM;QACR,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAkB;QAC/B,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAEpC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAEpC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED,iFAAiF;IACjF,OAAO;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1C,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,YAAY;QACtB,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,6BAAqB,CAAC,WAAW,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;YAC5G,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACnC,0BAAkB,CAAC,yBAAyB,EAC5C,6BAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CACjD,CAAC;YAEF,OAAO,6BAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACrF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,4EAA4E;YAC5E,uCAAuC;YACvC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;CACJ;AAjDD,sDAiDC"}
1
+ {"version":3,"file":"spotware-symbol-catalog.js","sourceRoot":"","sources":["../../src/market-data/spotware-symbol-catalog.ts"],"names":[],"mappings":";;;AACA,oCAQkB;AAElB;;;;;GAKG;AACH,MAAa,qBAAqB;IAID;IAHrB,cAAc,CAA4C;IACjD,kBAAkB,GAAG,IAAI,GAAG,EAA8C,CAAC;IAE5F,YAA6B,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAEvD,KAAK,CAAC,MAAM;QACR,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAkB;QAC/B,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAEpC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAEpC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED,iFAAiF;IACjF,OAAO;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1C,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,QAAgB;QAChC,IAAI,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,YAAY;QACtB,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,6BAAqB,CAAC,WAAW,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;YAC5G,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACnC,0BAAkB,CAAC,yBAAyB,EAC5C,6BAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CACjD,CAAC;YAEF,OAAO,6BAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACrF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,4EAA4E;YAC5E,uCAAuC;YACvC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,QAAgB;QAC1C,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,4BAAoB,CAAC,WAAW,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACjI,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAAkB,CAAC,yBAAyB,EAAE,4BAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAErI,OAAO,4BAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACnI,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;CACJ;AA9ED,sDA8EC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ctrader-x",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [