@himalaya-quant/ctrader-x 0.0.7

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 (308) hide show
  1. package/.env +6 -0
  2. package/.prettierrc +7 -0
  3. package/README.md +96 -0
  4. package/changelog.md +46 -0
  5. package/dist/src/classes/client.d.ts +21 -0
  6. package/dist/src/classes/client.d.ts.map +1 -0
  7. package/dist/src/classes/client.js +83 -0
  8. package/dist/src/classes/client.js.map +1 -0
  9. package/dist/src/classes/client.test.d.ts +2 -0
  10. package/dist/src/classes/client.test.d.ts.map +1 -0
  11. package/dist/src/classes/client.test.js +83 -0
  12. package/dist/src/classes/client.test.js.map +1 -0
  13. package/dist/src/classes/errors/client-not-connected.error.d.ts +5 -0
  14. package/dist/src/classes/errors/client-not-connected.error.d.ts.map +1 -0
  15. package/dist/src/classes/errors/client-not-connected.error.js +11 -0
  16. package/dist/src/classes/errors/client-not-connected.error.js.map +1 -0
  17. package/dist/src/classes/errors/connection.error.d.ts +5 -0
  18. package/dist/src/classes/errors/connection.error.d.ts.map +1 -0
  19. package/dist/src/classes/errors/connection.error.js +11 -0
  20. package/dist/src/classes/errors/connection.error.js.map +1 -0
  21. package/dist/src/classes/logger.d.ts +13 -0
  22. package/dist/src/classes/logger.d.ts.map +1 -0
  23. package/dist/src/classes/logger.js +21 -0
  24. package/dist/src/classes/logger.js.map +1 -0
  25. package/dist/src/classes/managers/authentication/authentication.manager.d.ts +13 -0
  26. package/dist/src/classes/managers/authentication/authentication.manager.d.ts.map +1 -0
  27. package/dist/src/classes/managers/authentication/authentication.manager.js +49 -0
  28. package/dist/src/classes/managers/authentication/authentication.manager.js.map +1 -0
  29. package/dist/src/classes/managers/authentication/authentication.manager.test.d.ts +2 -0
  30. package/dist/src/classes/managers/authentication/authentication.manager.test.d.ts.map +1 -0
  31. package/dist/src/classes/managers/authentication/authentication.manager.test.js +114 -0
  32. package/dist/src/classes/managers/authentication/authentication.manager.test.js.map +1 -0
  33. package/dist/src/classes/managers/authentication/errors/application-auth.error.d.ts +5 -0
  34. package/dist/src/classes/managers/authentication/errors/application-auth.error.d.ts.map +1 -0
  35. package/dist/src/classes/managers/authentication/errors/application-auth.error.js +11 -0
  36. package/dist/src/classes/managers/authentication/errors/application-auth.error.js.map +1 -0
  37. package/dist/src/classes/managers/authentication/errors/user-auth.error.d.ts +5 -0
  38. package/dist/src/classes/managers/authentication/errors/user-auth.error.d.ts.map +1 -0
  39. package/dist/src/classes/managers/authentication/errors/user-auth.error.js +11 -0
  40. package/dist/src/classes/managers/authentication/errors/user-auth.error.js.map +1 -0
  41. package/dist/src/classes/managers/models/base.manager.d.ts +15 -0
  42. package/dist/src/classes/managers/models/base.manager.d.ts.map +1 -0
  43. package/dist/src/classes/managers/models/base.manager.js +35 -0
  44. package/dist/src/classes/managers/models/base.manager.js.map +1 -0
  45. package/dist/src/classes/managers/models/credentials.model.d.ts +8 -0
  46. package/dist/src/classes/managers/models/credentials.model.d.ts.map +1 -0
  47. package/dist/src/classes/managers/models/credentials.model.js +3 -0
  48. package/dist/src/classes/managers/models/credentials.model.js.map +1 -0
  49. package/dist/src/classes/managers/symbols/errors/get-symbols-details.error.d.ts +5 -0
  50. package/dist/src/classes/managers/symbols/errors/get-symbols-details.error.d.ts.map +1 -0
  51. package/dist/src/classes/managers/symbols/errors/get-symbols-details.error.js +11 -0
  52. package/dist/src/classes/managers/symbols/errors/get-symbols-details.error.js.map +1 -0
  53. package/dist/src/classes/managers/symbols/errors/get-symbols-list.error.d.ts +5 -0
  54. package/dist/src/classes/managers/symbols/errors/get-symbols-list.error.d.ts.map +1 -0
  55. package/dist/src/classes/managers/symbols/errors/get-symbols-list.error.js +11 -0
  56. package/dist/src/classes/managers/symbols/errors/get-symbols-list.error.js.map +1 -0
  57. package/dist/src/classes/managers/symbols/errors/get-trend-bars.error.d.ts +6 -0
  58. package/dist/src/classes/managers/symbols/errors/get-trend-bars.error.d.ts.map +1 -0
  59. package/dist/src/classes/managers/symbols/errors/get-trend-bars.error.js +13 -0
  60. package/dist/src/classes/managers/symbols/errors/get-trend-bars.error.js.map +1 -0
  61. package/dist/src/classes/managers/symbols/errors/subscribe-live-trend-bars.error.d.ts +8 -0
  62. package/dist/src/classes/managers/symbols/errors/subscribe-live-trend-bars.error.d.ts.map +1 -0
  63. package/dist/src/classes/managers/symbols/errors/subscribe-live-trend-bars.error.js +17 -0
  64. package/dist/src/classes/managers/symbols/errors/subscribe-live-trend-bars.error.js.map +1 -0
  65. package/dist/src/classes/managers/symbols/errors/subscribe-spot-events.error.d.ts +5 -0
  66. package/dist/src/classes/managers/symbols/errors/subscribe-spot-events.error.d.ts.map +1 -0
  67. package/dist/src/classes/managers/symbols/errors/subscribe-spot-events.error.js +11 -0
  68. package/dist/src/classes/managers/symbols/errors/subscribe-spot-events.error.js.map +1 -0
  69. package/dist/src/classes/managers/symbols/errors/unsubscribe-live-trend-bars.error.d.ts +5 -0
  70. package/dist/src/classes/managers/symbols/errors/unsubscribe-live-trend-bars.error.d.ts.map +1 -0
  71. package/dist/src/classes/managers/symbols/errors/unsubscribe-live-trend-bars.error.js +11 -0
  72. package/dist/src/classes/managers/symbols/errors/unsubscribe-live-trend-bars.error.js.map +1 -0
  73. package/dist/src/classes/managers/symbols/symbols-updates.manager.d.ts +54 -0
  74. package/dist/src/classes/managers/symbols/symbols-updates.manager.d.ts.map +1 -0
  75. package/dist/src/classes/managers/symbols/symbols-updates.manager.js +250 -0
  76. package/dist/src/classes/managers/symbols/symbols-updates.manager.js.map +1 -0
  77. package/dist/src/classes/managers/symbols/symbols.manager.d.ts +30 -0
  78. package/dist/src/classes/managers/symbols/symbols.manager.d.ts.map +1 -0
  79. package/dist/src/classes/managers/symbols/symbols.manager.js +78 -0
  80. package/dist/src/classes/managers/symbols/symbols.manager.js.map +1 -0
  81. package/dist/src/classes/managers/symbols/symbols.manager.test.d.ts +2 -0
  82. package/dist/src/classes/managers/symbols/symbols.manager.test.d.ts.map +1 -0
  83. package/dist/src/classes/managers/symbols/symbols.manager.test.js +364 -0
  84. package/dist/src/classes/managers/symbols/symbols.manager.test.js.map +1 -0
  85. package/dist/src/classes/models/client-configuration.model.d.ts +10 -0
  86. package/dist/src/classes/models/client-configuration.model.d.ts.map +1 -0
  87. package/dist/src/classes/models/client-configuration.model.js +3 -0
  88. package/dist/src/classes/models/client-configuration.model.js.map +1 -0
  89. package/dist/src/classes/models/ctrader-x-error.model.d.ts +6 -0
  90. package/dist/src/classes/models/ctrader-x-error.model.d.ts.map +1 -0
  91. package/dist/src/classes/models/ctrader-x-error.model.js +21 -0
  92. package/dist/src/classes/models/ctrader-x-error.model.js.map +1 -0
  93. package/dist/src/config/config.d.ts +10 -0
  94. package/dist/src/config/config.d.ts.map +1 -0
  95. package/dist/src/config/config.js +40 -0
  96. package/dist/src/config/config.js.map +1 -0
  97. package/dist/src/examples/authentication.example.d.ts +2 -0
  98. package/dist/src/examples/authentication.example.d.ts.map +1 -0
  99. package/dist/src/examples/authentication.example.js +9 -0
  100. package/dist/src/examples/authentication.example.js.map +1 -0
  101. package/dist/src/examples/get-symbols-bars.example.d.ts +2 -0
  102. package/dist/src/examples/get-symbols-bars.example.d.ts.map +1 -0
  103. package/dist/src/examples/get-symbols-bars.example.js +18 -0
  104. package/dist/src/examples/get-symbols-bars.example.js.map +1 -0
  105. package/dist/src/examples/get-symbols-list.example.d.ts +2 -0
  106. package/dist/src/examples/get-symbols-list.example.d.ts.map +1 -0
  107. package/dist/src/examples/get-symbols-list.example.js +13 -0
  108. package/dist/src/examples/get-symbols-list.example.js.map +1 -0
  109. package/dist/src/examples/subscribe-live-bars.example.d.ts +2 -0
  110. package/dist/src/examples/subscribe-live-bars.example.d.ts.map +1 -0
  111. package/dist/src/examples/subscribe-live-bars.example.js +42 -0
  112. package/dist/src/examples/subscribe-live-bars.example.js.map +1 -0
  113. package/dist/src/index.d.ts +4 -0
  114. package/dist/src/index.d.ts.map +1 -0
  115. package/dist/src/index.js +20 -0
  116. package/dist/src/index.js.map +1 -0
  117. package/dist/src/models/common/ohlcv.d.ts +10 -0
  118. package/dist/src/models/common/ohlcv.d.ts.map +1 -0
  119. package/dist/src/models/common/ohlcv.js +13 -0
  120. package/dist/src/models/common/ohlcv.js.map +1 -0
  121. package/dist/src/models/proto/base-proto.d.ts +5 -0
  122. package/dist/src/models/proto/base-proto.d.ts.map +1 -0
  123. package/dist/src/models/proto/base-proto.js +9 -0
  124. package/dist/src/models/proto/base-proto.js.map +1 -0
  125. package/dist/src/models/proto/messages/authentication/ProtoOAAccountAuthReq.d.ts +5 -0
  126. package/dist/src/models/proto/messages/authentication/ProtoOAAccountAuthReq.d.ts.map +1 -0
  127. package/dist/src/models/proto/messages/authentication/ProtoOAAccountAuthReq.js +9 -0
  128. package/dist/src/models/proto/messages/authentication/ProtoOAAccountAuthReq.js.map +1 -0
  129. package/dist/src/models/proto/messages/authentication/ProtoOAAccountAuthRes.d.ts +4 -0
  130. package/dist/src/models/proto/messages/authentication/ProtoOAAccountAuthRes.d.ts.map +1 -0
  131. package/dist/src/models/proto/messages/authentication/ProtoOAAccountAuthRes.js +8 -0
  132. package/dist/src/models/proto/messages/authentication/ProtoOAAccountAuthRes.js.map +1 -0
  133. package/dist/src/models/proto/messages/authentication/ProtoOAApplicationAuthReq.d.ts +6 -0
  134. package/dist/src/models/proto/messages/authentication/ProtoOAApplicationAuthReq.d.ts.map +1 -0
  135. package/dist/src/models/proto/messages/authentication/ProtoOAApplicationAuthReq.js +10 -0
  136. package/dist/src/models/proto/messages/authentication/ProtoOAApplicationAuthReq.js.map +1 -0
  137. package/dist/src/models/proto/messages/authentication/ProtoOAApplicationAuthRes.d.ts +4 -0
  138. package/dist/src/models/proto/messages/authentication/ProtoOAApplicationAuthRes.d.ts.map +1 -0
  139. package/dist/src/models/proto/messages/authentication/ProtoOAApplicationAuthRes.js +8 -0
  140. package/dist/src/models/proto/messages/authentication/ProtoOAApplicationAuthRes.js.map +1 -0
  141. package/dist/src/models/proto/messages/common/ProtoOASubscribeSpotsReq.d.ts +6 -0
  142. package/dist/src/models/proto/messages/common/ProtoOASubscribeSpotsReq.d.ts.map +1 -0
  143. package/dist/src/models/proto/messages/common/ProtoOASubscribeSpotsReq.js +10 -0
  144. package/dist/src/models/proto/messages/common/ProtoOASubscribeSpotsReq.js.map +1 -0
  145. package/dist/src/models/proto/messages/common/ProtoOASubscribeSpotsRes.d.ts +4 -0
  146. package/dist/src/models/proto/messages/common/ProtoOASubscribeSpotsRes.d.ts.map +1 -0
  147. package/dist/src/models/proto/messages/common/ProtoOASubscribeSpotsRes.js +8 -0
  148. package/dist/src/models/proto/messages/common/ProtoOASubscribeSpotsRes.js.map +1 -0
  149. package/dist/src/models/proto/messages/symbols/ProtoOAGetTrendbarsReq.d.ts +10 -0
  150. package/dist/src/models/proto/messages/symbols/ProtoOAGetTrendbarsReq.d.ts.map +1 -0
  151. package/dist/src/models/proto/messages/symbols/ProtoOAGetTrendbarsReq.js +13 -0
  152. package/dist/src/models/proto/messages/symbols/ProtoOAGetTrendbarsReq.js.map +1 -0
  153. package/dist/src/models/proto/messages/symbols/ProtoOAGetTrendbarsRes.d.ts +11 -0
  154. package/dist/src/models/proto/messages/symbols/ProtoOAGetTrendbarsRes.d.ts.map +1 -0
  155. package/dist/src/models/proto/messages/symbols/ProtoOAGetTrendbarsRes.js +13 -0
  156. package/dist/src/models/proto/messages/symbols/ProtoOAGetTrendbarsRes.js.map +1 -0
  157. package/dist/src/models/proto/messages/symbols/ProtoOASubscribeLiveTrendbarReq.d.ts +7 -0
  158. package/dist/src/models/proto/messages/symbols/ProtoOASubscribeLiveTrendbarReq.d.ts.map +1 -0
  159. package/dist/src/models/proto/messages/symbols/ProtoOASubscribeLiveTrendbarReq.js +10 -0
  160. package/dist/src/models/proto/messages/symbols/ProtoOASubscribeLiveTrendbarReq.js.map +1 -0
  161. package/dist/src/models/proto/messages/symbols/ProtoOASubscribeLiveTrendbarRes.d.ts +4 -0
  162. package/dist/src/models/proto/messages/symbols/ProtoOASubscribeLiveTrendbarRes.d.ts.map +1 -0
  163. package/dist/src/models/proto/messages/symbols/ProtoOASubscribeLiveTrendbarRes.js +8 -0
  164. package/dist/src/models/proto/messages/symbols/ProtoOASubscribeLiveTrendbarRes.js.map +1 -0
  165. package/dist/src/models/proto/messages/symbols/ProtoOASymbolByIdReq.d.ts +5 -0
  166. package/dist/src/models/proto/messages/symbols/ProtoOASymbolByIdReq.d.ts.map +1 -0
  167. package/dist/src/models/proto/messages/symbols/ProtoOASymbolByIdReq.js +9 -0
  168. package/dist/src/models/proto/messages/symbols/ProtoOASymbolByIdReq.js.map +1 -0
  169. package/dist/src/models/proto/messages/symbols/ProtoOASymbolByIdRes.d.ts +8 -0
  170. package/dist/src/models/proto/messages/symbols/ProtoOASymbolByIdRes.d.ts.map +1 -0
  171. package/dist/src/models/proto/messages/symbols/ProtoOASymbolByIdRes.js +10 -0
  172. package/dist/src/models/proto/messages/symbols/ProtoOASymbolByIdRes.js.map +1 -0
  173. package/dist/src/models/proto/messages/symbols/ProtoOASymbolsListReq.d.ts +5 -0
  174. package/dist/src/models/proto/messages/symbols/ProtoOASymbolsListReq.d.ts.map +1 -0
  175. package/dist/src/models/proto/messages/symbols/ProtoOASymbolsListReq.js +9 -0
  176. package/dist/src/models/proto/messages/symbols/ProtoOASymbolsListReq.js.map +1 -0
  177. package/dist/src/models/proto/messages/symbols/ProtoOASymbolsListRes.d.ts +7 -0
  178. package/dist/src/models/proto/messages/symbols/ProtoOASymbolsListRes.d.ts.map +1 -0
  179. package/dist/src/models/proto/messages/symbols/ProtoOASymbolsListRes.js +10 -0
  180. package/dist/src/models/proto/messages/symbols/ProtoOASymbolsListRes.js.map +1 -0
  181. package/dist/src/models/proto/messages/symbols/ProtoOAUnsubscribeLiveTrendbarReq.d.ts +7 -0
  182. package/dist/src/models/proto/messages/symbols/ProtoOAUnsubscribeLiveTrendbarReq.d.ts.map +1 -0
  183. package/dist/src/models/proto/messages/symbols/ProtoOAUnsubscribeLiveTrendbarReq.js +10 -0
  184. package/dist/src/models/proto/messages/symbols/ProtoOAUnsubscribeLiveTrendbarReq.js.map +1 -0
  185. package/dist/src/models/proto/messages/symbols/ProtoOAUnsubscribeLiveTrendbarRes.d.ts +4 -0
  186. package/dist/src/models/proto/messages/symbols/ProtoOAUnsubscribeLiveTrendbarRes.d.ts.map +1 -0
  187. package/dist/src/models/proto/messages/symbols/ProtoOAUnsubscribeLiveTrendbarRes.js +8 -0
  188. package/dist/src/models/proto/messages/symbols/ProtoOAUnsubscribeLiveTrendbarRes.js.map +1 -0
  189. package/dist/src/models/proto/models/ProtoOAArchivedSymbol.d.ts +7 -0
  190. package/dist/src/models/proto/models/ProtoOAArchivedSymbol.d.ts.map +1 -0
  191. package/dist/src/models/proto/models/ProtoOAArchivedSymbol.js +11 -0
  192. package/dist/src/models/proto/models/ProtoOAArchivedSymbol.js.map +1 -0
  193. package/dist/src/models/proto/models/ProtoOAErrorRes.d.ts +8 -0
  194. package/dist/src/models/proto/models/ProtoOAErrorRes.d.ts.map +1 -0
  195. package/dist/src/models/proto/models/ProtoOAErrorRes.js +12 -0
  196. package/dist/src/models/proto/models/ProtoOAErrorRes.js.map +1 -0
  197. package/dist/src/models/proto/models/ProtoOAHoliday.d.ts +9 -0
  198. package/dist/src/models/proto/models/ProtoOAHoliday.d.ts.map +1 -0
  199. package/dist/src/models/proto/models/ProtoOAHoliday.js +13 -0
  200. package/dist/src/models/proto/models/ProtoOAHoliday.js.map +1 -0
  201. package/dist/src/models/proto/models/ProtoOAInterval.d.ts +6 -0
  202. package/dist/src/models/proto/models/ProtoOAInterval.d.ts.map +1 -0
  203. package/dist/src/models/proto/models/ProtoOAInterval.js +10 -0
  204. package/dist/src/models/proto/models/ProtoOAInterval.js.map +1 -0
  205. package/dist/src/models/proto/models/ProtoOALightSymbol.d.ts +11 -0
  206. package/dist/src/models/proto/models/ProtoOALightSymbol.d.ts.map +1 -0
  207. package/dist/src/models/proto/models/ProtoOALightSymbol.js +15 -0
  208. package/dist/src/models/proto/models/ProtoOALightSymbol.js.map +1 -0
  209. package/dist/src/models/proto/models/ProtoOASpotEvent.d.ts +11 -0
  210. package/dist/src/models/proto/models/ProtoOASpotEvent.d.ts.map +1 -0
  211. package/dist/src/models/proto/models/ProtoOASpotEvent.js +14 -0
  212. package/dist/src/models/proto/models/ProtoOASpotEvent.js.map +1 -0
  213. package/dist/src/models/proto/models/ProtoOASymbol.d.ts +44 -0
  214. package/dist/src/models/proto/models/ProtoOASymbol.d.ts.map +1 -0
  215. package/dist/src/models/proto/models/ProtoOASymbol.js +46 -0
  216. package/dist/src/models/proto/models/ProtoOASymbol.js.map +1 -0
  217. package/dist/src/models/proto/models/ProtoOATrendbar.d.ts +11 -0
  218. package/dist/src/models/proto/models/ProtoOATrendbar.d.ts.map +1 -0
  219. package/dist/src/models/proto/models/ProtoOATrendbar.js +14 -0
  220. package/dist/src/models/proto/models/ProtoOATrendbar.js.map +1 -0
  221. package/dist/src/models/proto/models/ProtoOATrendbarPeriod.d.ts +17 -0
  222. package/dist/src/models/proto/models/ProtoOATrendbarPeriod.d.ts.map +1 -0
  223. package/dist/src/models/proto/models/ProtoOATrendbarPeriod.js +21 -0
  224. package/dist/src/models/proto/models/ProtoOATrendbarPeriod.js.map +1 -0
  225. package/dist/src/models/proto/payload-types/payload-types.enum.d.ts +78 -0
  226. package/dist/src/models/proto/payload-types/payload-types.enum.d.ts.map +1 -0
  227. package/dist/src/models/proto/payload-types/payload-types.enum.js +82 -0
  228. package/dist/src/models/proto/payload-types/payload-types.enum.js.map +1 -0
  229. package/dist/src/utils/price.utils.d.ts +4 -0
  230. package/dist/src/utils/price.utils.d.ts.map +1 -0
  231. package/dist/src/utils/price.utils.js +36 -0
  232. package/dist/src/utils/price.utils.js.map +1 -0
  233. package/dist/src/utils/sleep.utils.d.ts +5 -0
  234. package/dist/src/utils/sleep.utils.d.ts.map +1 -0
  235. package/dist/src/utils/sleep.utils.js +15 -0
  236. package/dist/src/utils/sleep.utils.js.map +1 -0
  237. package/dist/src/utils/timeframe.utils.d.ts +6 -0
  238. package/dist/src/utils/timeframe.utils.d.ts.map +1 -0
  239. package/dist/src/utils/timeframe.utils.js +47 -0
  240. package/dist/src/utils/timeframe.utils.js.map +1 -0
  241. package/dist/src/utils/trendbar.utils.d.ts +7 -0
  242. package/dist/src/utils/trendbar.utils.d.ts.map +1 -0
  243. package/dist/src/utils/trendbar.utils.js +28 -0
  244. package/dist/src/utils/trendbar.utils.js.map +1 -0
  245. package/dist/tsconfig.tsbuildinfo +1 -0
  246. package/dist/vitest.config.d.ts +3 -0
  247. package/dist/vitest.config.d.ts.map +1 -0
  248. package/dist/vitest.config.js +12 -0
  249. package/dist/vitest.config.js.map +1 -0
  250. package/package.json +48 -0
  251. package/src/classes/client.test.ts +100 -0
  252. package/src/classes/client.ts +102 -0
  253. package/src/classes/errors/client-not-connected.error.ts +7 -0
  254. package/src/classes/errors/connection.error.ts +7 -0
  255. package/src/classes/logger.ts +26 -0
  256. package/src/classes/managers/authentication/authentication.manager.test.ts +187 -0
  257. package/src/classes/managers/authentication/authentication.manager.ts +65 -0
  258. package/src/classes/managers/authentication/errors/application-auth.error.ts +9 -0
  259. package/src/classes/managers/authentication/errors/user-auth.error.ts +9 -0
  260. package/src/classes/managers/models/base.manager.ts +50 -0
  261. package/src/classes/managers/models/credentials.model.ts +15 -0
  262. package/src/classes/managers/symbols/errors/get-symbols-details.error.ts +9 -0
  263. package/src/classes/managers/symbols/errors/get-symbols-list.error.ts +9 -0
  264. package/src/classes/managers/symbols/errors/get-trend-bars.error.ts +7 -0
  265. package/src/classes/managers/symbols/errors/subscribe-live-trend-bars.error.ts +17 -0
  266. package/src/classes/managers/symbols/errors/subscribe-spot-events.error.ts +9 -0
  267. package/src/classes/managers/symbols/errors/unsubscribe-live-trend-bars.error.ts +9 -0
  268. package/src/classes/managers/symbols/symbols-updates.manager.ts +440 -0
  269. package/src/classes/managers/symbols/symbols.manager.test.ts +455 -0
  270. package/src/classes/managers/symbols/symbols.manager.ts +134 -0
  271. package/src/classes/models/client-configuration.model.ts +39 -0
  272. package/src/classes/models/ctrader-x-error.model.ts +16 -0
  273. package/src/config/config.ts +48 -0
  274. package/src/index.ts +4 -0
  275. package/src/models/common/ohlcv.ts +19 -0
  276. package/src/models/proto/base-proto.ts +13 -0
  277. package/src/models/proto/messages/authentication/ProtoOAAccountAuthReq.ts +8 -0
  278. package/src/models/proto/messages/authentication/ProtoOAAccountAuthRes.ts +3 -0
  279. package/src/models/proto/messages/authentication/ProtoOAApplicationAuthReq.ts +13 -0
  280. package/src/models/proto/messages/authentication/ProtoOAApplicationAuthRes.ts +3 -0
  281. package/src/models/proto/messages/common/ProtoOASubscribeSpotsReq.ts +6 -0
  282. package/src/models/proto/messages/common/ProtoOASubscribeSpotsRes.ts +3 -0
  283. package/src/models/proto/messages/symbols/ProtoOAGetTrendbarsReq.ts +29 -0
  284. package/src/models/proto/messages/symbols/ProtoOAGetTrendbarsRes.ts +30 -0
  285. package/src/models/proto/messages/symbols/ProtoOASubscribeLiveTrendbarReq.ts +7 -0
  286. package/src/models/proto/messages/symbols/ProtoOASubscribeLiveTrendbarRes.ts +3 -0
  287. package/src/models/proto/messages/symbols/ProtoOASymbolByIdReq.ts +8 -0
  288. package/src/models/proto/messages/symbols/ProtoOASymbolByIdRes.ts +15 -0
  289. package/src/models/proto/messages/symbols/ProtoOASymbolsListReq.ts +8 -0
  290. package/src/models/proto/messages/symbols/ProtoOASymbolsListRes.ts +14 -0
  291. package/src/models/proto/messages/symbols/ProtoOAUnsubscribeLiveTrendbarReq.ts +11 -0
  292. package/src/models/proto/messages/symbols/ProtoOAUnsubscribeLiveTrendbarRes.ts +3 -0
  293. package/src/models/proto/models/ProtoOAArchivedSymbol.ts +21 -0
  294. package/src/models/proto/models/ProtoOAErrorRes.ts +20 -0
  295. package/src/models/proto/models/ProtoOAHoliday.ts +31 -0
  296. package/src/models/proto/models/ProtoOAInterval.ts +16 -0
  297. package/src/models/proto/models/ProtoOALightSymbol.ts +38 -0
  298. package/src/models/proto/models/ProtoOASpotEvent.ts +31 -0
  299. package/src/models/proto/models/ProtoOASymbol.ts +220 -0
  300. package/src/models/proto/models/ProtoOATrendbar.ts +11 -0
  301. package/src/models/proto/models/ProtoOATrendbarPeriod.ts +16 -0
  302. package/src/models/proto/payload-types/payload-types.enum.ts +77 -0
  303. package/src/utils/price.utils.ts +42 -0
  304. package/src/utils/sleep.utils.ts +13 -0
  305. package/src/utils/timeframe.utils.ts +50 -0
  306. package/src/utils/trendbar.utils.ts +59 -0
  307. package/tsconfig.tsbuildinfo +1 -0
  308. package/vitest.config.ts +11 -0
package/.env ADDED
@@ -0,0 +1,6 @@
1
+ CTRADERX_SPOTWARE_CTID_TRADER_ACCOUNT_ID="46253140"
2
+ CTRADERX_SPOTWARE_ACCESS_TOKEN="i7-nEn2jYKVUQZ2Qf6dO5fqvd2X4tK8DMLH1B4bN_Ys"
3
+ CTRADERX_SPOTWARE_CLIENT_SECRET="NWbCez6cZQvHRd7uLgoDlJLcI8TnVVr3qRiZSaNXfX1quUdiVE"
4
+ CTRADERX_SPOTWARE_CLIENT_ID="14188_z6yZLtlRvy3qNtD090IZvhdEwkjMfH1ICQHn5X6nZ2IQoucaTb"
5
+
6
+ CTRADERX_DEBUG_LOGS="true"
package/.prettierrc ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "singleQuote": true,
3
+ "tabWidth": 4,
4
+ "trailingComma": "all",
5
+ "printWidth": 80,
6
+ "semi": true
7
+ }
package/README.md ADDED
@@ -0,0 +1,96 @@
1
+ # cTraderX
2
+
3
+ A typescript implementation of the cTrader API.
4
+ Strongly typed and easy to use.
5
+
6
+ Strictly follows the documentation provided by Spotware for the messages and
7
+ payloads definition. You can find the full specification at:
8
+ [Spotware Messages specification](help.ctrader.com/open-api/messages)
9
+
10
+ Under the hood the `cTraderX` uses ProtoBuffer messages for communicating with
11
+ the cTrader API. But to the end user the procedure is completely abstracted
12
+ behind an intuitive and easy to use interface.
13
+
14
+ # Features
15
+
16
+ - Basic authentication (still does not support automatic flow)
17
+ - Symbols information fetching
18
+ - Symbols historical bars fetching
19
+ - Symbol live bars updates subscription
20
+
21
+ # Getting started
22
+
23
+ Install the package:
24
+
25
+ ```sh
26
+ npm i @himalaya-quant/ctrader-x
27
+ ```
28
+
29
+ Import the client and instantiate it:
30
+
31
+ ```ts
32
+ import { cTraderX } from '@himalaya-quant/ctrader-x';
33
+
34
+ const client = new cTraderX({
35
+ // by default cTraderX tries to read the credentials from env
36
+ // see Authentication section for more information.
37
+ // optional configuration options:
38
+
39
+ // live?: boolean;
40
+ // clientId?: string;
41
+ // clientSecret?: string;
42
+ // accessToken?: string;
43
+ // ctidTraderAccountId?: number;
44
+ // logger?: ILogger;
45
+ });
46
+
47
+ await client.connect();
48
+ console.log('connected!');
49
+
50
+ const symbolsList = await client.symbols.getSymbolsList();
51
+ console.log(symbolsList);
52
+ ```
53
+
54
+ ### Examples:
55
+
56
+ For more examples, see the `src/examples` folder where you can find examples about:
57
+
58
+ - authentication
59
+ - get symbols list & info
60
+ - get symbol bars
61
+ - subscribe to live bars
62
+
63
+ And other examples that might come in the future.
64
+
65
+
66
+ # Authentication
67
+
68
+ In order to use any of the client methods, you'll need to provide credentials
69
+ to be used for the application and user authentication.
70
+
71
+ These credentials can be provided during the `cTraderX` client instantiation or
72
+ via .env config:
73
+
74
+ ```
75
+ CTRADERX_SPOTWARE_CTID_TRADER_ACCOUNT_ID
76
+ CTRADERX_SPOTWARE_ACCESS_TOKEN
77
+ CTRADERX_SPOTWARE_CLIENT_SECRET
78
+ CTRADERX_SPOTWARE_CLIENT_ID
79
+ ```
80
+
81
+ # Logging
82
+
83
+ cTraderX uses a basic logger implementation, that for simplicity sake relies on
84
+ the console logger.
85
+
86
+ You can toggle debug logs on and off via env variable:
87
+
88
+ ```
89
+ CTRADERX_DEBUG_LOGS
90
+ ```
91
+
92
+ Or you can provide your own logger implementation by implementing the `ILogger`
93
+ interface, and providing it during `cTraderX` client instantiation.
94
+
95
+ <br>
96
+ <center>Developed with ❤️ by Caius Citiriga</center>
package/changelog.md ADDED
@@ -0,0 +1,46 @@
1
+ # 0.0.7
2
+ - Improved the way subscribeLiveTrendBars builds the bars. Now relying mainly on
3
+ the updates found inside the `trendbar` array of the `ProtoOASpotEvent`.
4
+
5
+ # 0.0.6
6
+
7
+ - Fix heartbeat
8
+ - Changed return type of getTrendBars to OHLCV for convenience of consumer's use
9
+ - Changed return type of subscribeLiveTrendBars to OHLCV, symbolId and period for convenience of consumer's use
10
+ - Improved subscribeLiveTrendBars internal workings by tracking subscriptions
11
+ - Adding unsubscribeLiveTrendBars support
12
+
13
+ # 0.0.5
14
+
15
+ Adds subscribeToLiveTrendBars:
16
+ Gives the ability to subscribe to live price data, given a timeframe and a
17
+ symbolId. Returns an RxJs Observable the can be subscribed to and receive
18
+ realtime updates. Still missing unsubscribe feature.
19
+
20
+ # 0.0.4
21
+
22
+ Casting symbolsIds to strings and assigning missing ctidTraderAccountId to
23
+ ProtoOASymbolByIdReq request payload
24
+
25
+ # 0.0.3
26
+
27
+ Now the getSymbolsList will return the full symbols properties lists.
28
+ This is achieved by internally calling the `getSymbolsDetails` method, after we
29
+ receive the `ProtoOALightSymbol` array, and merging the results of the
30
+ `ProtoOALightSymbol` and the `ProtoOASymbol`.
31
+
32
+ # 0.0.2
33
+
34
+ Adds symbols manager, responsible for:
35
+
36
+ - getting symbols list
37
+
38
+ Better code organization.
39
+
40
+ # 0.0.1
41
+
42
+ Basic authentication. Based on:
43
+ CTID_TRADER_ACCOUNT_ID
44
+ ACCESS_TOKEN
45
+ CLIENT_SECRET
46
+ CLIENT_ID
@@ -0,0 +1,21 @@
1
+ import { IConfiguration } from './models/client-configuration.model';
2
+ import { SymbolsManager } from './managers/symbols/symbols.manager';
3
+ import { SymbolsUpdatesManager } from './managers/symbols/symbols-updates.manager';
4
+ export declare class cTraderX {
5
+ private readonly port;
6
+ private readonly host;
7
+ private readonly logger;
8
+ private readonly connection;
9
+ private readonly symbolsManager;
10
+ private readonly authManager;
11
+ private readonly symbolsUpdatesManager;
12
+ private isConnected;
13
+ constructor(config?: IConfiguration);
14
+ get symbols(): SymbolsManager;
15
+ get symbolsUpdates(): SymbolsUpdatesManager;
16
+ disconnect(): void;
17
+ connect(): Promise<void>;
18
+ private sendHeartbeat;
19
+ private ensureConnectedOrThrow;
20
+ }
21
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/classes/client.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAEnF,qBAAa,QAAQ;IACjB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAE/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAwB;IAE9D,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,CAAC,EAAE,cAAc;IAsCnC,IAAI,OAAO,mBAGV;IAED,IAAI,cAAc,0BAGjB;IAED,UAAU;IAIJ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAe9B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,sBAAsB;CAGjC"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cTraderX = void 0;
4
+ const ctrader_layer_1 = require("@reiryoku/ctrader-layer");
5
+ const logger_1 = require("./logger");
6
+ const authentication_manager_1 = require("./managers/authentication/authentication.manager");
7
+ const config_1 = require("../config/config");
8
+ const connection_error_1 = require("./errors/connection.error");
9
+ const ctrader_x_error_model_1 = require("./models/ctrader-x-error.model");
10
+ const symbols_manager_1 = require("./managers/symbols/symbols.manager");
11
+ const client_not_connected_error_1 = require("./errors/client-not-connected.error");
12
+ const symbols_updates_manager_1 = require("./managers/symbols/symbols-updates.manager");
13
+ class cTraderX {
14
+ port = 5035;
15
+ host;
16
+ logger;
17
+ connection;
18
+ symbolsManager;
19
+ authManager;
20
+ symbolsUpdatesManager;
21
+ isConnected = false;
22
+ constructor(config) {
23
+ this.host = config?.live
24
+ ? `live.ctraderapi.com`
25
+ : `demo.ctraderapi.com`;
26
+ this.logger = config?.logger || new logger_1.Logger();
27
+ const credentials = {
28
+ clientId: config?.clientId || config_1.Config.SPOTWARE_CLIENT_ID,
29
+ accessToken: config?.accessToken || config_1.Config.SPOTWARE_ACCESS_TOKEN,
30
+ clientSecret: config?.clientSecret || config_1.Config.SPOTWARE_CLIENT_SECRET,
31
+ ctidTraderAccountId: config?.ctidTraderAccountId ||
32
+ config_1.Config.SPOTWARE_CTID_TRADER_ACCOUNT_ID,
33
+ };
34
+ this.connection = new ctrader_layer_1.CTraderConnection({
35
+ host: this.host,
36
+ port: this.port,
37
+ });
38
+ this.symbolsManager = new symbols_manager_1.SymbolsManager(credentials, this.connection, this.logger);
39
+ this.authManager = new authentication_manager_1.AuthenticationManager(credentials, this.connection, this.logger);
40
+ this.symbolsUpdatesManager = new symbols_updates_manager_1.SymbolsUpdatesManager(credentials, this.connection, this.logger, this.symbolsManager);
41
+ }
42
+ get symbols() {
43
+ this.ensureConnectedOrThrow();
44
+ return this.symbolsManager;
45
+ }
46
+ get symbolsUpdates() {
47
+ this.ensureConnectedOrThrow();
48
+ return this.symbolsUpdatesManager;
49
+ }
50
+ disconnect() {
51
+ this.connection.close();
52
+ }
53
+ async connect() {
54
+ if (this.isConnected)
55
+ return;
56
+ try {
57
+ await this.connection.open();
58
+ await this.authManager.authenticateApp();
59
+ await this.authManager.authenticateUser();
60
+ this.isConnected = true;
61
+ this.sendHeartbeat();
62
+ }
63
+ catch (e) {
64
+ const message = ctrader_x_error_model_1.cTraderXError.getMessageError(e);
65
+ this.logger.error(`Error opening connection: ${message}`);
66
+ throw new connection_error_1.ConnectionError(message);
67
+ }
68
+ }
69
+ sendHeartbeat() {
70
+ if (!this.isConnected)
71
+ return;
72
+ this.connection.sendHeartbeat();
73
+ setTimeout(() => {
74
+ this.sendHeartbeat();
75
+ }, 1000 * 9);
76
+ }
77
+ ensureConnectedOrThrow() {
78
+ if (!this.isConnected)
79
+ throw new client_not_connected_error_1.ClientNotConnectedError();
80
+ }
81
+ }
82
+ exports.cTraderX = cTraderX;
83
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/classes/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../../src/classes/client.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const config_1 = require("../config/config");
5
+ const connection_error_1 = require("./errors/connection.error");
6
+ const client_1 = require("./client");
7
+ (0, vitest_1.describe)('cTraderX Client - Integration Tests', () => {
8
+ let client;
9
+ (0, vitest_1.describe)('Constructor and Configuration', () => {
10
+ (0, vitest_1.afterEach)(async () => {
11
+ client.disconnect();
12
+ });
13
+ (0, vitest_1.it)('should create client with default demo configuration', () => {
14
+ client = new client_1.cTraderX();
15
+ (0, vitest_1.expect)(client).toBeDefined();
16
+ });
17
+ (0, vitest_1.it)('should create client with custom configuration', () => {
18
+ const config = {
19
+ live: false,
20
+ clientId: config_1.Config.SPOTWARE_CLIENT_ID,
21
+ clientSecret: config_1.Config.SPOTWARE_CLIENT_SECRET,
22
+ accessToken: config_1.Config.SPOTWARE_ACCESS_TOKEN,
23
+ ctidTraderAccountId: config_1.Config.SPOTWARE_CTID_TRADER_ACCOUNT_ID,
24
+ };
25
+ client = new client_1.cTraderX(config);
26
+ (0, vitest_1.expect)(client).toBeDefined();
27
+ });
28
+ });
29
+ (0, vitest_1.describe)('Connection - Manual', () => {
30
+ (0, vitest_1.it)('should connect successfully with valid credentials', async () => {
31
+ client = new client_1.cTraderX({
32
+ clientId: config_1.Config.SPOTWARE_CLIENT_ID,
33
+ clientSecret: config_1.Config.SPOTWARE_CLIENT_SECRET,
34
+ accessToken: config_1.Config.SPOTWARE_ACCESS_TOKEN,
35
+ ctidTraderAccountId: config_1.Config.SPOTWARE_CTID_TRADER_ACCOUNT_ID,
36
+ });
37
+ await (0, vitest_1.expect)(client.connect()).resolves.not.toThrow();
38
+ }, 30000);
39
+ (0, vitest_1.it)('should not reconnect if already connected', async () => {
40
+ client = new client_1.cTraderX({
41
+ clientId: config_1.Config.SPOTWARE_CLIENT_ID,
42
+ clientSecret: config_1.Config.SPOTWARE_CLIENT_SECRET,
43
+ accessToken: config_1.Config.SPOTWARE_ACCESS_TOKEN,
44
+ ctidTraderAccountId: config_1.Config.SPOTWARE_CTID_TRADER_ACCOUNT_ID,
45
+ });
46
+ await client.connect();
47
+ await (0, vitest_1.expect)(client.connect()).resolves.not.toThrow();
48
+ }, 30000);
49
+ (0, vitest_1.it)('should throw ConnectionError with invalid credentials', async () => {
50
+ client = new client_1.cTraderX({
51
+ clientId: 'invalid_id',
52
+ clientSecret: 'invalid_secret',
53
+ accessToken: 'invalid_token',
54
+ ctidTraderAccountId: 123456,
55
+ });
56
+ await (0, vitest_1.expect)(client.connect()).rejects.toThrow(connection_error_1.ConnectionError);
57
+ }, 30000);
58
+ });
59
+ (0, vitest_1.describe)('Host Selection', () => {
60
+ (0, vitest_1.it)('should use demo host by default', () => {
61
+ client = new client_1.cTraderX();
62
+ (0, vitest_1.expect)(client).toBeDefined();
63
+ });
64
+ (0, vitest_1.it)('should use live host when live flag is true', () => {
65
+ client = new client_1.cTraderX({
66
+ live: true,
67
+ });
68
+ (0, vitest_1.expect)(client).toBeDefined();
69
+ });
70
+ });
71
+ (0, vitest_1.describe)('Full Integration Flow', () => {
72
+ (0, vitest_1.it)('should complete full connection flow with real credentials', async () => {
73
+ client = new client_1.cTraderX({
74
+ clientId: config_1.Config.SPOTWARE_CLIENT_ID,
75
+ clientSecret: config_1.Config.SPOTWARE_CLIENT_SECRET,
76
+ accessToken: config_1.Config.SPOTWARE_ACCESS_TOKEN,
77
+ ctidTraderAccountId: config_1.Config.SPOTWARE_CTID_TRADER_ACCOUNT_ID,
78
+ });
79
+ await (0, vitest_1.expect)(client.connect()).resolves.not.toThrow();
80
+ }, 30000);
81
+ });
82
+ });
83
+ //# sourceMappingURL=client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../../src/classes/client.test.ts"],"names":[],"mappings":";;AAAA,mCAAqE;AACrE,6CAA0C;AAC1C,gEAA4D;AAC5D,qCAAoC;AAGpC,IAAA,iBAAQ,EAAC,qCAAqC,EAAE,GAAG,EAAE;IACjD,IAAI,MAAgB,CAAC;IAErB,IAAA,iBAAQ,EAAC,+BAA+B,EAAE,GAAG,EAAE;QAC3C,IAAA,kBAAS,EAAC,KAAK,IAAI,EAAE;YACjB,MAAM,CAAC,UAAU,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,sDAAsD,EAAE,GAAG,EAAE;YAC5D,MAAM,GAAG,IAAI,iBAAQ,EAAE,CAAC;YACxB,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,gDAAgD,EAAE,GAAG,EAAE;YACtD,MAAM,MAAM,GAAmB;gBAC3B,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,eAAM,CAAC,kBAAkB;gBACnC,YAAY,EAAE,eAAM,CAAC,sBAAsB;gBAC3C,WAAW,EAAE,eAAM,CAAC,qBAAqB;gBACzC,mBAAmB,EAAE,eAAM,CAAC,+BAA+B;aAC9D,CAAC;YAEF,MAAM,GAAG,IAAI,iBAAQ,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,qBAAqB,EAAE,GAAG,EAAE;QACjC,IAAA,WAAE,EAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,GAAG,IAAI,iBAAQ,CAAC;gBAClB,QAAQ,EAAE,eAAM,CAAC,kBAAkB;gBACnC,YAAY,EAAE,eAAM,CAAC,sBAAsB;gBAC3C,WAAW,EAAE,eAAM,CAAC,qBAAqB;gBACzC,mBAAmB,EAAE,eAAM,CAAC,+BAA+B;aAC9D,CAAC,CAAC;YAEH,MAAM,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC1D,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,IAAA,WAAE,EAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,GAAG,IAAI,iBAAQ,CAAC;gBAClB,QAAQ,EAAE,eAAM,CAAC,kBAAkB;gBACnC,YAAY,EAAE,eAAM,CAAC,sBAAsB;gBAC3C,WAAW,EAAE,eAAM,CAAC,qBAAqB;gBACzC,mBAAmB,EAAE,eAAM,CAAC,+BAA+B;aAC9D,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YAGvB,MAAM,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC1D,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,IAAA,WAAE,EAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,GAAG,IAAI,iBAAQ,CAAC;gBAClB,QAAQ,EAAE,YAAY;gBACtB,YAAY,EAAE,gBAAgB;gBAC9B,WAAW,EAAE,eAAe;gBAC5B,mBAAmB,EAAE,MAAM;aAC9B,CAAC,CAAC;YAEH,MAAM,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kCAAe,CAAC,CAAC;QACpE,CAAC,EAAE,KAAK,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;QAC5B,IAAA,WAAE,EAAC,iCAAiC,EAAE,GAAG,EAAE;YACvC,MAAM,GAAG,IAAI,iBAAQ,EAAE,CAAC;YAGxB,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,6CAA6C,EAAE,GAAG,EAAE;YACnD,MAAM,GAAG,IAAI,iBAAQ,CAAC;gBAClB,IAAI,EAAE,IAAI;aACb,CAAC,CAAC;YACH,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,uBAAuB,EAAE,GAAG,EAAE;QACnC,IAAA,WAAE,EAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,GAAG,IAAI,iBAAQ,CAAC;gBAClB,QAAQ,EAAE,eAAM,CAAC,kBAAkB;gBACnC,YAAY,EAAE,eAAM,CAAC,sBAAsB;gBAC3C,WAAW,EAAE,eAAM,CAAC,qBAAqB;gBACzC,mBAAmB,EAAE,eAAM,CAAC,+BAA+B;aAC9D,CAAC,CAAC;YAEH,MAAM,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC1D,CAAC,EAAE,KAAK,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { cTraderXError } from '../models/ctrader-x-error.model';
2
+ export declare class ClientNotConnectedError extends cTraderXError {
3
+ constructor();
4
+ }
5
+ //# sourceMappingURL=client-not-connected.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-not-connected.error.d.ts","sourceRoot":"","sources":["../../../../src/classes/errors/client-not-connected.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE,qBAAa,uBAAwB,SAAQ,aAAa;;CAIzD"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClientNotConnectedError = void 0;
4
+ const ctrader_x_error_model_1 = require("../models/ctrader-x-error.model");
5
+ class ClientNotConnectedError extends ctrader_x_error_model_1.cTraderXError {
6
+ constructor() {
7
+ super(`Client not connected error`);
8
+ }
9
+ }
10
+ exports.ClientNotConnectedError = ClientNotConnectedError;
11
+ //# sourceMappingURL=client-not-connected.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-not-connected.error.js","sourceRoot":"","sources":["../../../../src/classes/errors/client-not-connected.error.ts"],"names":[],"mappings":";;;AAAA,2EAAgE;AAEhE,MAAa,uBAAwB,SAAQ,qCAAa;IACtD;QACI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACxC,CAAC;CACJ;AAJD,0DAIC"}
@@ -0,0 +1,5 @@
1
+ import { cTraderXError } from '../models/ctrader-x-error.model';
2
+ export declare class ConnectionError extends cTraderXError {
3
+ constructor(message: string);
4
+ }
5
+ //# sourceMappingURL=connection.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.error.d.ts","sourceRoot":"","sources":["../../../../src/classes/errors/connection.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE,qBAAa,eAAgB,SAAQ,aAAa;gBAClC,OAAO,EAAE,MAAM;CAG9B"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConnectionError = void 0;
4
+ const ctrader_x_error_model_1 = require("../models/ctrader-x-error.model");
5
+ class ConnectionError extends ctrader_x_error_model_1.cTraderXError {
6
+ constructor(message) {
7
+ super(`Connection error: ${message}`);
8
+ }
9
+ }
10
+ exports.ConnectionError = ConnectionError;
11
+ //# sourceMappingURL=connection.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.error.js","sourceRoot":"","sources":["../../../../src/classes/errors/connection.error.ts"],"names":[],"mappings":";;;AAAA,2EAAgE;AAEhE,MAAa,eAAgB,SAAQ,qCAAa;IAC9C,YAAY,OAAe;QACvB,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;CACJ;AAJD,0CAIC"}
@@ -0,0 +1,13 @@
1
+ export interface ILogger {
2
+ debug(message: string): void;
3
+ log(message: string): void;
4
+ error(message: string): void;
5
+ warn(message: string): void;
6
+ }
7
+ export declare class Logger implements ILogger {
8
+ debug(message: string): void;
9
+ log(message: string): void;
10
+ error(message: string): void;
11
+ warn(message: string): void;
12
+ }
13
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/classes/logger.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACpB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,qBAAa,MAAO,YAAW,OAAO;IAClC,KAAK,CAAC,OAAO,EAAE,MAAM;IAIrB,GAAG,CAAC,OAAO,EAAE,MAAM;IAInB,KAAK,CAAC,OAAO,EAAE,MAAM;IAIrB,IAAI,CAAC,OAAO,EAAE,MAAM;CAGvB"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Logger = void 0;
4
+ const config_1 = require("../config/config");
5
+ class Logger {
6
+ debug(message) {
7
+ if (config_1.Config.DEBUG_LOGS)
8
+ console.log(`🐛 ${message}`);
9
+ }
10
+ log(message) {
11
+ console.log(`ℹ️ ${message}`);
12
+ }
13
+ error(message) {
14
+ console.log(`❌ ${message}`);
15
+ }
16
+ warn(message) {
17
+ console.log(`⚠️ ${message}`);
18
+ }
19
+ }
20
+ exports.Logger = Logger;
21
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/classes/logger.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAS1C,MAAa,MAAM;IACf,KAAK,CAAC,OAAe;QACjB,IAAI,eAAM,CAAC,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,OAAe;QACf,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,OAAe;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,OAAe;QAChB,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;IACjC,CAAC;CACJ;AAhBD,wBAgBC"}
@@ -0,0 +1,13 @@
1
+ import { CTraderConnection } from '@reiryoku/ctrader-layer';
2
+ import { ILogger } from '../../logger';
3
+ import { BaseManager } from '../models/base.manager';
4
+ import { ICredentials } from '../models/credentials.model';
5
+ export declare class AuthenticationManager extends BaseManager {
6
+ protected readonly credentials: ICredentials;
7
+ protected readonly connection: CTraderConnection;
8
+ protected readonly logger: ILogger;
9
+ constructor(credentials: ICredentials, connection: CTraderConnection, logger: ILogger);
10
+ authenticateApp(): Promise<void>;
11
+ authenticateUser(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=authentication.manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.manager.d.ts","sourceRoot":"","sources":["../../../../../src/classes/managers/authentication/authentication.manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAM3D,qBAAa,qBAAsB,SAAQ,WAAW;IAE9C,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY;IAC5C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,iBAAiB;IAChD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO;gBAFf,WAAW,EAAE,YAAY,EACzB,UAAU,EAAE,iBAAiB,EAC7B,MAAM,EAAE,OAAO;IAKhC,eAAe;IAuBf,gBAAgB;CAsBzB"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthenticationManager = void 0;
4
+ const base_manager_1 = require("../models/base.manager");
5
+ const user_auth_error_1 = require("./errors/user-auth.error");
6
+ const application_auth_error_1 = require("./errors/application-auth.error");
7
+ const ProtoOAAccountAuthReq_1 = require("../../../models/proto/messages/authentication/ProtoOAAccountAuthReq");
8
+ const ProtoOAApplicationAuthReq_1 = require("../../../models/proto/messages/authentication/ProtoOAApplicationAuthReq");
9
+ class AuthenticationManager extends base_manager_1.BaseManager {
10
+ credentials;
11
+ connection;
12
+ logger;
13
+ constructor(credentials, connection, logger) {
14
+ super();
15
+ this.credentials = credentials;
16
+ this.connection = connection;
17
+ this.logger = logger;
18
+ }
19
+ async authenticateApp() {
20
+ try {
21
+ this.logCallAttempt(this.authenticateApp);
22
+ const payload = {
23
+ clientId: this.credentials.clientId,
24
+ clientSecret: this.credentials.clientSecret,
25
+ };
26
+ await this.connection.sendCommand(ProtoOAApplicationAuthReq_1.ProtoOAApplicationAuthReq.name, payload);
27
+ this.logCallAttemptSuccess(this.authenticateApp);
28
+ }
29
+ catch (e) {
30
+ throw this.handleCTraderCallError(e, this.authenticateApp, new application_auth_error_1.ApplicationAuthenticationError(e));
31
+ }
32
+ }
33
+ async authenticateUser() {
34
+ try {
35
+ this.logCallAttempt(this.authenticateUser);
36
+ const payload = {
37
+ accessToken: this.credentials.accessToken,
38
+ ctidTraderAccountId: this.credentials.ctidTraderAccountId,
39
+ };
40
+ await this.connection.sendCommand(ProtoOAAccountAuthReq_1.ProtoOAAccountAuthReq.name, payload);
41
+ this.logCallAttemptSuccess(this.authenticateUser);
42
+ }
43
+ catch (e) {
44
+ throw this.handleCTraderCallError(e, this.authenticateUser, new user_auth_error_1.UserAuthenticationError(e));
45
+ }
46
+ }
47
+ }
48
+ exports.AuthenticationManager = AuthenticationManager;
49
+ //# sourceMappingURL=authentication.manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.manager.js","sourceRoot":"","sources":["../../../../../src/classes/managers/authentication/authentication.manager.ts"],"names":[],"mappings":";;;AAGA,yDAAqD;AAErD,8DAAmE;AACnE,4EAAiF;AACjF,+GAA4G;AAC5G,uHAAoH;AAEpH,MAAa,qBAAsB,SAAQ,0BAAW;IAE3B;IACA;IACA;IAHvB,YACuB,WAAyB,EACzB,UAA6B,EAC7B,MAAe;QAElC,KAAK,EAAE,CAAC;QAJW,gBAAW,GAAX,WAAW,CAAc;QACzB,eAAU,GAAV,UAAU,CAAmB;QAC7B,WAAM,GAAN,MAAM,CAAS;IAGtC,CAAC;IAED,KAAK,CAAC,eAAe;QACjB,IAAI,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAE1C,MAAM,OAAO,GAA8B;gBACvC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;gBACnC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY;aAC9C,CAAC;YACF,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAC7B,qDAAyB,CAAC,IAAI,EAC9B,OAAO,CACV,CAAC;YAEF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,IAAI,CAAC,sBAAsB,CAC7B,CAAC,EACD,IAAI,CAAC,eAAe,EACpB,IAAI,uDAA8B,CAAC,CAAC,CAAC,CACxC,CAAC;QACN,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB;QAClB,IAAI,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAE3C,MAAM,OAAO,GAA0B;gBACnC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW;gBACzC,mBAAmB,EAAE,IAAI,CAAC,WAAW,CAAC,mBAAmB;aAC5D,CAAC;YACF,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAC7B,6CAAqB,CAAC,IAAI,EAC1B,OAAO,CACV,CAAC;YAEF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,IAAI,CAAC,sBAAsB,CAC7B,CAAC,EACD,IAAI,CAAC,gBAAgB,EACrB,IAAI,yCAAuB,CAAC,CAAC,CAAC,CACjC,CAAC;QACN,CAAC;IACL,CAAC;CACJ;AAtDD,sDAsDC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=authentication.manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.manager.test.d.ts","sourceRoot":"","sources":["../../../../../src/classes/managers/authentication/authentication.manager.test.ts"],"names":[],"mappings":""}