iq-option-client 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/LICENSE +16 -0
  2. package/README.md +531 -0
  3. package/dist/bin/IQOption.d.ts +2 -0
  4. package/dist/bin/IQOption.js +100 -0
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.js +26 -0
  7. package/dist/lib/Helper/Logger/ILogger.d.ts +39 -0
  8. package/dist/lib/Helper/Logger/ILogger.js +3 -0
  9. package/dist/lib/Helper/Logger/LogLevel.d.ts +10 -0
  10. package/dist/lib/Helper/Logger/LogLevel.js +23 -0
  11. package/dist/lib/Helper/Logger/LoggerContext.d.ts +59 -0
  12. package/dist/lib/Helper/Logger/LoggerContext.js +49 -0
  13. package/dist/lib/Helper/Logger/LoggerFactory.d.ts +22 -0
  14. package/dist/lib/Helper/Logger/LoggerFactory.js +87 -0
  15. package/dist/lib/Helper/Logger/WinstonLogger.d.ts +21 -0
  16. package/dist/lib/Helper/Logger/WinstonLogger.js +56 -0
  17. package/dist/lib/Helper/Logger/index.d.ts +5 -0
  18. package/dist/lib/Helper/Logger/index.js +30 -0
  19. package/dist/lib/Helper/LoggerHelper.d.ts +11 -0
  20. package/dist/lib/Helper/LoggerHelper.js +48 -0
  21. package/dist/lib/Helper/SleepHelper.d.ts +6 -0
  22. package/dist/lib/Helper/SleepHelper.js +15 -0
  23. package/dist/lib/Helper/index.d.ts +3 -0
  24. package/dist/lib/Helper/index.js +20 -0
  25. package/dist/lib/Service/IQOptionService/Adapter/StreamAdapter.d.ts +16 -0
  26. package/dist/lib/Service/IQOptionService/Adapter/StreamAdapter.js +47 -0
  27. package/dist/lib/Service/IQOptionService/Adapter/index.d.ts +1 -0
  28. package/dist/lib/Service/IQOptionService/Adapter/index.js +26 -0
  29. package/dist/lib/Service/IQOptionService/Builder/OrderBuilder.d.ts +44 -0
  30. package/dist/lib/Service/IQOptionService/Builder/OrderBuilder.js +91 -0
  31. package/dist/lib/Service/IQOptionService/Builder/OrderRequest.d.ts +28 -0
  32. package/dist/lib/Service/IQOptionService/Builder/OrderRequest.js +20 -0
  33. package/dist/lib/Service/IQOptionService/Builder/index.d.ts +2 -0
  34. package/dist/lib/Service/IQOptionService/Builder/index.js +27 -0
  35. package/dist/lib/Service/IQOptionService/Command/CommandInvoker.d.ts +13 -0
  36. package/dist/lib/Service/IQOptionService/Command/CommandInvoker.js +35 -0
  37. package/dist/lib/Service/IQOptionService/Command/GetProfileCommand.d.ts +13 -0
  38. package/dist/lib/Service/IQOptionService/Command/GetProfileCommand.js +20 -0
  39. package/dist/lib/Service/IQOptionService/Command/ICommand.d.ts +13 -0
  40. package/dist/lib/Service/IQOptionService/Command/ICommand.js +11 -0
  41. package/dist/lib/Service/IQOptionService/Command/SendOrderCommand.d.ts +14 -0
  42. package/dist/lib/Service/IQOptionService/Command/SendOrderCommand.js +20 -0
  43. package/dist/lib/Service/IQOptionService/Command/index.d.ts +4 -0
  44. package/dist/lib/Service/IQOptionService/Command/index.js +29 -0
  45. package/dist/lib/Service/IQOptionService/Error/AuthenticationError.d.ts +7 -0
  46. package/dist/lib/Service/IQOptionService/Error/AuthenticationError.js +22 -0
  47. package/dist/lib/Service/IQOptionService/Error/ConnectionError.d.ts +7 -0
  48. package/dist/lib/Service/IQOptionService/Error/ConnectionError.js +22 -0
  49. package/dist/lib/Service/IQOptionService/Error/ErrorHandler.d.ts +17 -0
  50. package/dist/lib/Service/IQOptionService/Error/ErrorHandler.js +58 -0
  51. package/dist/lib/Service/IQOptionService/Error/IQOptionError.d.ts +15 -0
  52. package/dist/lib/Service/IQOptionService/Error/IQOptionError.js +46 -0
  53. package/dist/lib/Service/IQOptionService/Error/OrderError.d.ts +7 -0
  54. package/dist/lib/Service/IQOptionService/Error/OrderError.js +22 -0
  55. package/dist/lib/Service/IQOptionService/Error/RetryStrategy.d.ts +42 -0
  56. package/dist/lib/Service/IQOptionService/Error/RetryStrategy.js +67 -0
  57. package/dist/lib/Service/IQOptionService/Error/Retryable.d.ts +20 -0
  58. package/dist/lib/Service/IQOptionService/Error/Retryable.js +36 -0
  59. package/dist/lib/Service/IQOptionService/Error/TimeoutError.d.ts +7 -0
  60. package/dist/lib/Service/IQOptionService/Error/TimeoutError.js +23 -0
  61. package/dist/lib/Service/IQOptionService/Error/index.d.ts +8 -0
  62. package/dist/lib/Service/IQOptionService/Error/index.js +33 -0
  63. package/dist/lib/Service/IQOptionService/Factory/StreamFactory.d.ts +17 -0
  64. package/dist/lib/Service/IQOptionService/Factory/StreamFactory.js +43 -0
  65. package/dist/lib/Service/IQOptionService/Factory/StreamType.d.ts +9 -0
  66. package/dist/lib/Service/IQOptionService/Factory/StreamType.js +22 -0
  67. package/dist/lib/Service/IQOptionService/Factory/index.d.ts +2 -0
  68. package/dist/lib/Service/IQOptionService/Factory/index.js +27 -0
  69. package/dist/lib/Service/IQOptionService/Helper/InputValidator.d.ts +34 -0
  70. package/dist/lib/Service/IQOptionService/Helper/InputValidator.js +101 -0
  71. package/dist/lib/Service/IQOptionService/Helper/RequestIdGenerator.d.ts +18 -0
  72. package/dist/lib/Service/IQOptionService/Helper/RequestIdGenerator.js +37 -0
  73. package/dist/lib/Service/IQOptionService/Helper/index.d.ts +2 -0
  74. package/dist/lib/Service/IQOptionService/Helper/index.js +27 -0
  75. package/dist/lib/Service/IQOptionService/IQOptionApi.d.ts +96 -0
  76. package/dist/lib/Service/IQOptionService/IQOptionApi.js +343 -0
  77. package/dist/lib/Service/IQOptionService/IQOptionExpired.d.ts +7 -0
  78. package/dist/lib/Service/IQOptionService/IQOptionExpired.js +27 -0
  79. package/dist/lib/Service/IQOptionService/IQOptionStreamCandleGenerated.d.ts +55 -0
  80. package/dist/lib/Service/IQOptionService/IQOptionStreamCandleGenerated.js +88 -0
  81. package/dist/lib/Service/IQOptionService/IQOptionStreamOptionClose.d.ts +33 -0
  82. package/dist/lib/Service/IQOptionService/IQOptionStreamOptionClose.js +59 -0
  83. package/dist/lib/Service/IQOptionService/IQOptionStreamTradersSentiment.d.ts +46 -0
  84. package/dist/lib/Service/IQOptionService/IQOptionStreamTradersSentiment.js +84 -0
  85. package/dist/lib/Service/IQOptionService/IQOptionStreamUserAlerts.d.ts +40 -0
  86. package/dist/lib/Service/IQOptionService/IQOptionStreamUserAlerts.js +79 -0
  87. package/dist/lib/Service/IQOptionService/IQOptionWrapper.d.ts +51 -0
  88. package/dist/lib/Service/IQOptionService/IQOptionWrapper.js +111 -0
  89. package/dist/lib/Service/IQOptionService/IQOptionWs.d.ts +56 -0
  90. package/dist/lib/Service/IQOptionService/IQOptionWs.js +125 -0
  91. package/dist/lib/Service/IQOptionService/Interface/IAuthService.d.ts +12 -0
  92. package/dist/lib/Service/IQOptionService/Interface/IAuthService.js +11 -0
  93. package/dist/lib/Service/IQOptionService/Interface/IIQOptionStream.d.ts +9 -0
  94. package/dist/lib/Service/IQOptionService/Interface/IIQOptionStream.js +11 -0
  95. package/dist/lib/Service/IQOptionService/Interface/IWebSocketClient.d.ts +26 -0
  96. package/dist/lib/Service/IQOptionService/Interface/IWebSocketClient.js +3 -0
  97. package/dist/lib/Service/IQOptionService/Interface/index.d.ts +3 -0
  98. package/dist/lib/Service/IQOptionService/Interface/index.js +28 -0
  99. package/dist/lib/Service/IQOptionService/Model/IQOptionAction.d.ts +23 -0
  100. package/dist/lib/Service/IQOptionService/Model/IQOptionAction.js +36 -0
  101. package/dist/lib/Service/IQOptionService/Model/IQOptionCandle.d.ts +61 -0
  102. package/dist/lib/Service/IQOptionService/Model/IQOptionCandle.js +11 -0
  103. package/dist/lib/Service/IQOptionService/Model/IQOptionCurrency.d.ts +9 -0
  104. package/dist/lib/Service/IQOptionService/Model/IQOptionCurrency.js +22 -0
  105. package/dist/lib/Service/IQOptionService/Model/IQOptionCurrencyType.d.ts +8 -0
  106. package/dist/lib/Service/IQOptionService/Model/IQOptionCurrencyType.js +21 -0
  107. package/dist/lib/Service/IQOptionService/Model/IQOptionInitializationData.d.ts +117 -0
  108. package/dist/lib/Service/IQOptionService/Model/IQOptionInitializationData.js +14 -0
  109. package/dist/lib/Service/IQOptionService/Model/IQOptionInstrumentType.d.ts +4 -0
  110. package/dist/lib/Service/IQOptionService/Model/IQOptionInstrumentType.js +9 -0
  111. package/dist/lib/Service/IQOptionService/Model/IQOptionInstruments.d.ts +22 -0
  112. package/dist/lib/Service/IQOptionService/Model/IQOptionInstruments.js +3 -0
  113. package/dist/lib/Service/IQOptionService/Model/IQOptionMarket.d.ts +100 -0
  114. package/dist/lib/Service/IQOptionService/Model/IQOptionMarket.js +113 -0
  115. package/dist/lib/Service/IQOptionService/Model/IQOptionMarketInvert.d.ts +6 -0
  116. package/dist/lib/Service/IQOptionService/Model/IQOptionMarketInvert.js +108 -0
  117. package/dist/lib/Service/IQOptionService/Model/IQOptionMode.d.ts +7 -0
  118. package/dist/lib/Service/IQOptionService/Model/IQOptionMode.js +20 -0
  119. package/dist/lib/Service/IQOptionService/Model/IQOptionModel.d.ts +13 -0
  120. package/dist/lib/Service/IQOptionService/Model/IQOptionModel.js +26 -0
  121. package/dist/lib/Service/IQOptionService/Model/IQOptionName.d.ts +8 -0
  122. package/dist/lib/Service/IQOptionService/Model/IQOptionName.js +21 -0
  123. package/dist/lib/Service/IQOptionService/Model/IQOptionOptionClosed.d.ts +43 -0
  124. package/dist/lib/Service/IQOptionService/Model/IQOptionOptionClosed.js +11 -0
  125. package/dist/lib/Service/IQOptionService/Model/IQOptionOptionOpened.d.ts +39 -0
  126. package/dist/lib/Service/IQOptionService/Model/IQOptionOptionOpened.js +11 -0
  127. package/dist/lib/Service/IQOptionService/Model/IQOptionProfile.d.ts +152 -0
  128. package/dist/lib/Service/IQOptionService/Model/IQOptionProfile.js +11 -0
  129. package/dist/lib/Service/IQOptionService/Model/IQOptionResult.d.ts +17 -0
  130. package/dist/lib/Service/IQOptionService/Model/IQOptionResult.js +30 -0
  131. package/dist/lib/Service/IQOptionService/Model/IQOptionTime.d.ts +12 -0
  132. package/dist/lib/Service/IQOptionService/Model/IQOptionTime.js +25 -0
  133. package/dist/lib/Service/IQOptionService/Model/index.d.ts +17 -0
  134. package/dist/lib/Service/IQOptionService/Model/index.js +42 -0
  135. package/dist/lib/Service/IQOptionService/Repository/IQOptionRepository.d.ts +26 -0
  136. package/dist/lib/Service/IQOptionService/Repository/IQOptionRepository.js +3 -0
  137. package/dist/lib/Service/IQOptionService/Repository/WebSocketRepository.d.ts +19 -0
  138. package/dist/lib/Service/IQOptionService/Repository/WebSocketRepository.js +99 -0
  139. package/dist/lib/Service/IQOptionService/Repository/index.d.ts +2 -0
  140. package/dist/lib/Service/IQOptionService/Repository/index.js +27 -0
  141. package/dist/lib/Service/IQOptionService/Strategy/BinaryOrderStrategy.d.ts +15 -0
  142. package/dist/lib/Service/IQOptionService/Strategy/BinaryOrderStrategy.js +66 -0
  143. package/dist/lib/Service/IQOptionService/Strategy/DigitalOrderStrategy.d.ts +15 -0
  144. package/dist/lib/Service/IQOptionService/Strategy/DigitalOrderStrategy.js +83 -0
  145. package/dist/lib/Service/IQOptionService/Strategy/IOrderStrategy.d.ts +10 -0
  146. package/dist/lib/Service/IQOptionService/Strategy/IOrderStrategy.js +3 -0
  147. package/dist/lib/Service/IQOptionService/Strategy/index.d.ts +3 -0
  148. package/dist/lib/Service/IQOptionService/Strategy/index.js +28 -0
  149. package/dist/lib/Service/IQOptionService/index.d.ts +16 -0
  150. package/dist/lib/Service/IQOptionService/index.js +41 -0
  151. package/dist/lib/Service/index.d.ts +1 -0
  152. package/dist/lib/Service/index.js +26 -0
  153. package/dist/lib/index.d.ts +2 -0
  154. package/dist/lib/index.js +27 -0
  155. package/package.json +67 -0
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IQOptionStreamOptionClose = void 0;
4
+ /*
5
+ * Copyright (C) 2020 Wellington Rocha
6
+ * All Rights Reserved.
7
+ *
8
+ * Unauthorized copying of this file, via any medium is strictly prohibited.
9
+ *
10
+ * Proprietary and confidential.
11
+ */
12
+ const stream_1 = require("stream");
13
+ const Core = require("../..");
14
+ /**
15
+ * Stream candle generated.
16
+ */
17
+ class IQOptionStreamOptionClose extends stream_1.Readable {
18
+ /**
19
+ * Constructor.
20
+ *
21
+ * @param iqOptionWS
22
+ * @param market
23
+ */
24
+ constructor(iqOptionWS) {
25
+ super({ objectMode: true });
26
+ this.iqOptionWS = iqOptionWS;
27
+ }
28
+ /**
29
+ * Default read
30
+ */
31
+ _read() { }
32
+ /**
33
+ * Start stream.
34
+ */
35
+ async startStream() {
36
+ Core.logger().silly("IQOptionStreamOptionClose::startStream");
37
+ if (!this.iqOptionWS.isConnected()) {
38
+ return Promise.reject("Socket is not connected.");
39
+ }
40
+ this.iqOptionWS
41
+ .socket()
42
+ .on("message", (data) => this.parseMessage(data.toString()));
43
+ return Promise.resolve();
44
+ }
45
+ /**
46
+ * On message.
47
+ *
48
+ * @param message
49
+ */
50
+ parseMessage(message) {
51
+ const messageJSON = JSON.parse(message);
52
+ if (messageJSON.name === Core.IQOptionAction.BINARY_OPTION_CLOSE ||
53
+ messageJSON.name === Core.IQOptionAction.DIGITAL_OPEN_CLOSED) {
54
+ this.emit("data", messageJSON.msg);
55
+ }
56
+ }
57
+ }
58
+ exports.IQOptionStreamOptionClose = IQOptionStreamOptionClose;
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVFPcHRpb25TdHJlYW1PcHRpb25DbG9zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvU2VydmljZS9JUU9wdGlvblNlcnZpY2UvSVFPcHRpb25TdHJlYW1PcHRpb25DbG9zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7OztHQU9HO0FBQ0gsbUNBQWtDO0FBQ2xDLDhCQUE4QjtBQUk5Qjs7R0FFRztBQUNILE1BQWEseUJBQ1QsU0FBUSxpQkFBUTtJQVFoQjs7Ozs7T0FLRztJQUNILFlBQW1CLFVBQXNCO1FBQ3JDLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssS0FBVSxDQUFDO0lBRXZCOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFdBQVc7UUFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDakMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVO2FBQ1YsTUFBTSxFQUFFO2FBQ1IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssWUFBWSxDQUFDLE9BQWU7UUFDaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxJQUNJLFdBQVcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUI7WUFDNUQsV0FBVyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUM5RCxDQUFDO1lBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUFyREQsOERBcURDIn0=
@@ -0,0 +1,46 @@
1
+ import { Readable } from "stream";
2
+ import * as Core from "../..";
3
+ import { IIQOptionStream } from "./Interface/IIQOptionStream";
4
+ import { IQOptionWs } from "./IQOptionWs";
5
+ /**
6
+ * Stream candle generated.
7
+ */
8
+ export declare class IQOptionStreamOptionTradersSentiment extends Readable implements IIQOptionStream {
9
+ /**
10
+ * Socket.
11
+ */
12
+ private readonly iqOptionWS;
13
+ /**
14
+ * Market.
15
+ */
16
+ private readonly market;
17
+ /**
18
+ * Constructor.
19
+ *
20
+ * @param iqOptionWS
21
+ * @param market
22
+ */
23
+ constructor(iqOptionWS: IQOptionWs, market: Core.IQOptionMarket);
24
+ /**
25
+ * Default read
26
+ */
27
+ _read(): void;
28
+ /**
29
+ * Start stream.
30
+ */
31
+ startStream(): Promise<void>;
32
+ /**
33
+ * Listerner event
34
+ */
35
+ listener(): Promise<void>;
36
+ /**
37
+ * Candle subscribe.
38
+ */
39
+ subscribe(market: Core.IQOptionMarket): Promise<void>;
40
+ /**
41
+ * On message.
42
+ *
43
+ * @param message
44
+ */
45
+ private parseMessage;
46
+ }
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IQOptionStreamOptionTradersSentiment = void 0;
4
+ /*
5
+ * Copyright (C) 2020 Wellington Rocha
6
+ * All Rights Reserved.
7
+ *
8
+ * Unauthorized copying of this file, via any medium is strictly prohibited.
9
+ *
10
+ * Proprietary and confidential.
11
+ */
12
+ const stream_1 = require("stream");
13
+ const Core = require("../..");
14
+ /**
15
+ * Stream candle generated.
16
+ */
17
+ class IQOptionStreamOptionTradersSentiment extends stream_1.Readable {
18
+ /**
19
+ * Constructor.
20
+ *
21
+ * @param iqOptionWS
22
+ * @param market
23
+ */
24
+ constructor(iqOptionWS, market) {
25
+ super({ objectMode: true });
26
+ this.iqOptionWS = iqOptionWS;
27
+ this.market = market;
28
+ }
29
+ /**
30
+ * Default read
31
+ */
32
+ _read() { }
33
+ /**
34
+ * Start stream.
35
+ */
36
+ async startStream() {
37
+ Core.logger().silly("IQOptionStreamOptionTradersSentiment::startStream");
38
+ return this.subscribe(this.market)
39
+ .then(() => this.listener())
40
+ .catch((e) => Promise.reject(e));
41
+ }
42
+ /**
43
+ * Listerner event
44
+ */
45
+ async listener() {
46
+ Core.logger().silly("IQOptionStreamOptionTradersSentiment::listener");
47
+ this.iqOptionWS
48
+ .socket()
49
+ .on("message", (data) => this.parseMessage(data.toString()));
50
+ return Promise.resolve();
51
+ }
52
+ /**
53
+ * Candle subscribe.
54
+ */
55
+ subscribe(market) {
56
+ Core.logger().silly("IQOptionStreamOptionTradersSentiment::subscribeTradersSentiments");
57
+ if (!this.iqOptionWS.isConnected()) {
58
+ return Promise.reject("Socket is not connected.");
59
+ }
60
+ const message = {
61
+ name: Core.IQOptionAction.TRADERS_MOOD_CHANGED,
62
+ params: {
63
+ routingFilters: {
64
+ instrument: "turbo-option",
65
+ asset_id: market,
66
+ },
67
+ },
68
+ };
69
+ return Promise.resolve(this.iqOptionWS.send(Core.IQOptionName.SUBSCRIBE_MESSAGE, message));
70
+ }
71
+ /**
72
+ * On message.
73
+ *
74
+ * @param message
75
+ */
76
+ parseMessage(message) {
77
+ const messageJSON = JSON.parse(message);
78
+ if (messageJSON.name === Core.IQOptionAction.TRADERS_MOOD_CHANGED) {
79
+ this.emit("data", messageJSON.msg);
80
+ }
81
+ }
82
+ }
83
+ exports.IQOptionStreamOptionTradersSentiment = IQOptionStreamOptionTradersSentiment;
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVFPcHRpb25TdHJlYW1UcmFkZXJzU2VudGltZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9TZXJ2aWNlL0lRT3B0aW9uU2VydmljZS9JUU9wdGlvblN0cmVhbVRyYWRlcnNTZW50aW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7R0FPRztBQUNILG1DQUFrQztBQUNsQyw4QkFBOEI7QUFJOUI7O0dBRUc7QUFDSCxNQUFhLG9DQUNULFNBQVEsaUJBQVE7SUFhaEI7Ozs7O09BS0c7SUFDSCxZQUFtQixVQUFzQixFQUFFLE1BQTJCO1FBQ2xFLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssS0FBVSxDQUFDO0lBRXZCOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFdBQVc7UUFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FDZixtREFBbUQsQ0FDdEQsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQzdCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDM0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFFBQVE7UUFDakIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxVQUFVO2FBQ1YsTUFBTSxFQUFFO2FBQ1IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxNQUEyQjtRQUN4QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUNmLGtFQUFrRSxDQUNyRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUc7WUFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0I7WUFDOUMsTUFBTSxFQUFFO2dCQUNKLGNBQWMsRUFBRTtvQkFDWixVQUFVLEVBQUUsY0FBYztvQkFDMUIsUUFBUSxFQUFFLE1BQU07aUJBQ25CO2FBQ0o7U0FDSixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUNyRSxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxZQUFZLENBQUMsT0FBZTtRQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUF6RkQsb0ZBeUZDIn0=
@@ -0,0 +1,40 @@
1
+ import { Readable } from "stream";
2
+ import { IIQOptionStream } from "./Interface/IIQOptionStream";
3
+ import { IQOptionWs } from "./IQOptionWs";
4
+ /**
5
+ * Stream user alerts generated.
6
+ */
7
+ export declare class IQOptionStreamUserAlerts extends Readable implements IIQOptionStream {
8
+ /**
9
+ * Socket.
10
+ */
11
+ private readonly iqOptionWS;
12
+ /**
13
+ * Constructor.
14
+ *
15
+ * @param iqOptionWS
16
+ */
17
+ constructor(iqOptionWS: IQOptionWs);
18
+ /**
19
+ * Default read
20
+ */
21
+ _read(): void;
22
+ /**
23
+ * Start stream.
24
+ */
25
+ startStream(): Promise<void>;
26
+ /**
27
+ * Subcribe.
28
+ */
29
+ subscribe(): Promise<void>;
30
+ /**
31
+ * Listerner event
32
+ */
33
+ listener(): Promise<void>;
34
+ /**
35
+ * On message.
36
+ *
37
+ * @param message
38
+ */
39
+ private parseMessage;
40
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IQOptionStreamUserAlerts = void 0;
4
+ /*
5
+ * Copyright (C) 2020 Wellington Rocha
6
+ * All Rights Reserved.
7
+ *
8
+ * Unauthorized copying of this file, via any medium is strictly prohibited.
9
+ *
10
+ * Proprietary and confidential.
11
+ */
12
+ const stream_1 = require("stream");
13
+ const Core = require("../..");
14
+ /**
15
+ * Stream user alerts generated.
16
+ */
17
+ class IQOptionStreamUserAlerts extends stream_1.Readable {
18
+ /**
19
+ * Constructor.
20
+ *
21
+ * @param iqOptionWS
22
+ */
23
+ constructor(iqOptionWS) {
24
+ super({ objectMode: true });
25
+ this.iqOptionWS = iqOptionWS;
26
+ }
27
+ /**
28
+ * Default read
29
+ */
30
+ _read() { }
31
+ /**
32
+ * Start stream.
33
+ */
34
+ startStream() {
35
+ return Promise.resolve();
36
+ }
37
+ /**
38
+ * Subcribe.
39
+ */
40
+ subscribe() {
41
+ Core.logger().silly("IQOptionStreamUserAlerts::subscribe");
42
+ if (!this.iqOptionWS.isConnected()) {
43
+ return Promise.reject("Socket is not connected.");
44
+ }
45
+ const messageAlertChanged = {
46
+ name: Core.IQOptionAction.ALERT_CHANGED,
47
+ };
48
+ const messageAlertTriggered = {
49
+ name: Core.IQOptionAction.ALERT_TRIGGERED,
50
+ };
51
+ return Promise.all([
52
+ this.iqOptionWS.send(Core.IQOptionName.SUBSCRIBE_MESSAGE, messageAlertChanged),
53
+ this.iqOptionWS.send(Core.IQOptionName.SUBSCRIBE_MESSAGE, messageAlertTriggered),
54
+ ]).then();
55
+ }
56
+ /**
57
+ * Listerner event
58
+ */
59
+ async listener() {
60
+ Core.logger().silly("IQOptionStreamUserAlerts::listener");
61
+ this.iqOptionWS
62
+ .socket()
63
+ .on("message", (data) => this.parseMessage(data.toString()));
64
+ return Promise.resolve();
65
+ }
66
+ /**
67
+ * On message.
68
+ *
69
+ * @param message
70
+ */
71
+ parseMessage(message) {
72
+ const messageJSON = JSON.parse(message);
73
+ if (messageJSON.microserviceName === Core.IQOptionAction.USER_ALERTS) {
74
+ this.emit("data", messageJSON.msg);
75
+ }
76
+ }
77
+ }
78
+ exports.IQOptionStreamUserAlerts = IQOptionStreamUserAlerts;
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVFPcHRpb25TdHJlYW1Vc2VyQWxlcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9TZXJ2aWNlL0lRT3B0aW9uU2VydmljZS9JUU9wdGlvblN0cmVhbVVzZXJBbGVydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7R0FPRztBQUNILG1DQUFrQztBQUNsQyw4QkFBOEI7QUFJOUI7O0dBRUc7QUFDSCxNQUFhLHdCQUNULFNBQVEsaUJBQVE7SUFRaEI7Ozs7T0FJRztJQUNILFlBQW1CLFVBQXNCO1FBQ3JDLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssS0FBVSxDQUFDO0lBRXZCOztPQUVHO0lBQ0ksV0FBVztRQUNkLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDWixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsTUFBTSxtQkFBbUIsR0FBRztZQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhO1NBQzFDLENBQUM7UUFDRixNQUFNLHFCQUFxQixHQUFHO1lBQzFCLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWU7U0FDNUMsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUNuQyxtQkFBbUIsQ0FDdEI7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFDbkMscUJBQXFCLENBQ3hCO1NBQ0osQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFFBQVE7UUFDakIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxVQUFVO2FBQ1YsTUFBTSxFQUFFO2FBQ1IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssWUFBWSxDQUFDLE9BQWU7UUFDaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBL0VELDREQStFQyJ9
@@ -0,0 +1,51 @@
1
+ import { IAuthService } from "./Interface/IAuthService";
2
+ import { ILogger } from "../../Helper/Logger";
3
+ /**
4
+ * IQ Option authentication wrapper.
5
+ */
6
+ export declare class IQOptionWrapper implements IAuthService {
7
+ /**
8
+ * Endpoint.
9
+ */
10
+ private readonly endpoint;
11
+ /**
12
+ * E-mail.
13
+ */
14
+ private readonly email;
15
+ /**
16
+ * Password.
17
+ */
18
+ private readonly password;
19
+ /**
20
+ * HTTP client.
21
+ */
22
+ private readonly client;
23
+ /**
24
+ * Logger instance.
25
+ */
26
+ private readonly logger;
27
+ /**
28
+ * Constructor.
29
+ *
30
+ * @param email User email
31
+ * @param password User password
32
+ * @param logger Optional logger instance
33
+ */
34
+ constructor(email: string, password: string, logger?: ILogger);
35
+ /**
36
+ * Authenticate user and get SSID token.
37
+ */
38
+ authenticate(email?: string, password?: string): Promise<string>;
39
+ /**
40
+ * Legacy method for backward compatibility.
41
+ * @deprecated Use authenticate() instead.
42
+ */
43
+ auth(): Promise<string>;
44
+ /**
45
+ * HTTP request.
46
+ *
47
+ * @param path
48
+ * @param data
49
+ */
50
+ private request;
51
+ }
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IQOptionWrapper = void 0;
4
+ /*
5
+ * Copyright (C) 2020 Wellington Rocha
6
+ * All Rights Reserved.
7
+ *
8
+ * Unauthorized copying of this file, via any medium is strictly prohibited.
9
+ *
10
+ * Proprietary and confidential.
11
+ */
12
+ const axios_1 = require("axios");
13
+ const http = require("http");
14
+ const https = require("https");
15
+ const qs = require("querystring");
16
+ const Logger_1 = require("../../Helper/Logger");
17
+ const AuthenticationError_1 = require("./Error/AuthenticationError");
18
+ const InputValidator_1 = require("./Helper/InputValidator");
19
+ /**
20
+ * IQ Option authentication wrapper.
21
+ */
22
+ class IQOptionWrapper {
23
+ /**
24
+ * Constructor.
25
+ *
26
+ * @param email User email
27
+ * @param password User password
28
+ * @param logger Optional logger instance
29
+ */
30
+ constructor(email, password, logger) {
31
+ /**
32
+ * Endpoint.
33
+ */
34
+ this.endpoint = "https://auth.iqoption.com";
35
+ this.logger = logger || Logger_1.LoggerFactory.create({ className: "IQOptionWrapper" });
36
+ this.logger.silly("IQOptionWrapper::constructor");
37
+ this.email = email;
38
+ this.password = password;
39
+ this.client = axios_1.default.create({
40
+ httpAgent: new http.Agent({ keepAlive: true }),
41
+ httpsAgent: new https.Agent({ keepAlive: true }),
42
+ });
43
+ }
44
+ /**
45
+ * Authenticate user and get SSID token.
46
+ */
47
+ async authenticate(email, password) {
48
+ var _a;
49
+ const userEmail = email || this.email;
50
+ const userPassword = password || this.password;
51
+ // Validate inputs
52
+ InputValidator_1.InputValidator.validateEmail(userEmail);
53
+ InputValidator_1.InputValidator.validatePassword(userPassword);
54
+ this.logger.silly("IQOptionWrapper::authenticate", { operation: "authenticate", metadata: { email: userEmail } });
55
+ try {
56
+ const response = await this.request("api/v1.0/login", {
57
+ email: userEmail,
58
+ password: userPassword,
59
+ });
60
+ const ssid = (_a = response.data) === null || _a === void 0 ? void 0 : _a.ssid;
61
+ if (!ssid) {
62
+ throw new AuthenticationError_1.AuthenticationError("No SSID received from authentication response");
63
+ }
64
+ this.logger.info("Authentication successful", { operation: "authenticate", metadata: { email: userEmail } });
65
+ return ssid;
66
+ }
67
+ catch (e) {
68
+ const error = e instanceof Error ? e : new Error(String(e));
69
+ this.logger.error("Authentication failed", { operation: "authenticate", metadata: { email: userEmail } }, error);
70
+ throw new AuthenticationError_1.AuthenticationError("Authentication failed", { email: userEmail }, error);
71
+ }
72
+ }
73
+ /**
74
+ * Legacy method for backward compatibility.
75
+ * @deprecated Use authenticate() instead.
76
+ */
77
+ auth() {
78
+ return this.authenticate();
79
+ }
80
+ /**
81
+ * HTTP request.
82
+ *
83
+ * @param path
84
+ * @param data
85
+ */
86
+ async request(path, data) {
87
+ var _a;
88
+ this.logger.silly("IQOptionWrapper::request", { operation: "request", metadata: { path } });
89
+ const options = {
90
+ method: "POST",
91
+ baseURL: this.endpoint,
92
+ url: path,
93
+ headers: {
94
+ "Content-type": "application/x-www-form-urlencoded",
95
+ Accept: "application/json",
96
+ },
97
+ data: qs.stringify(data),
98
+ };
99
+ try {
100
+ const response = await this.client.request(options);
101
+ return Promise.resolve(response.data);
102
+ }
103
+ catch (e) {
104
+ const error = ((_a = e === null || e === void 0 ? void 0 : e.response) === null || _a === void 0 ? void 0 : _a.data) || e;
105
+ this.logger.error("HTTP request failed", { operation: "request", metadata: { path } }, e);
106
+ return Promise.reject(error);
107
+ }
108
+ }
109
+ }
110
+ exports.IQOptionWrapper = IQOptionWrapper;
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVFPcHRpb25XcmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9TZXJ2aWNlL0lRT3B0aW9uU2VydmljZS9JUU9wdGlvbldyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7R0FPRztBQUNILGlDQUE2QztBQUM3Qyw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLGtDQUFrQztBQUVsQyxnREFBNkQ7QUFDN0QscUVBQWtFO0FBQ2xFLDREQUF5RDtBQUV6RDs7R0FFRztBQUNILE1BQWEsZUFBZTtJQTBCeEI7Ozs7OztPQU1HO0lBQ0gsWUFBbUIsS0FBYSxFQUFFLFFBQWdCLEVBQUUsTUFBZ0I7UUFoQ3BFOztXQUVHO1FBQ2MsYUFBUSxHQUFXLDJCQUEyQixDQUFDO1FBOEI1RCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxzQkFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLGVBQUssQ0FBQyxNQUFNLENBQUM7WUFDdkIsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxVQUFVLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ25ELENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBYyxFQUFFLFFBQWlCOztRQUN2RCxNQUFNLFNBQVMsR0FBRyxLQUFL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
@@ -0,0 +1,56 @@
1
+ import * as WebSocket from "ws";
2
+ import { IWebSocketClient } from "./Interface/IWebSocketClient";
3
+ import { ILogger } from "../../Helper/Logger";
4
+ import * as Core from "../../index";
5
+ /**
6
+ * IQ Option WebSocket client implementation.
7
+ */
8
+ export declare class IQOptionWs implements IWebSocketClient {
9
+ /**
10
+ * Host endpoint.
11
+ */
12
+ private readonly endpoint;
13
+ /**
14
+ * Socket client.
15
+ */
16
+ private _socket;
17
+ /**
18
+ * Wait time to restart socket.
19
+ */
20
+ private readonly waitToRestart;
21
+ /**
22
+ * Logger instance.
23
+ */
24
+ private readonly logger;
25
+ /**
26
+ * Constructor.
27
+ *
28
+ * @param logger Optional logger instance
29
+ */
30
+ constructor(logger?: ILogger);
31
+ /**
32
+ * Start socket connection.
33
+ */
34
+ connect(): Promise<void>;
35
+ /**
36
+ * Send message.
37
+ *
38
+ * @param name
39
+ * @param msg
40
+ * @param requestID
41
+ */
42
+ send(name: Core.IQOptionName | string, msg: any, requestID?: number): Promise<any>;
43
+ /**
44
+ * Get socket.
45
+ */
46
+ socket(): WebSocket;
47
+ /**
48
+ * Is connected.
49
+ * Fixed: logic was inverted
50
+ */
51
+ isConnected(): boolean;
52
+ /**
53
+ * Restart socket.
54
+ */
55
+ private restartSocket;
56
+ }
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IQOptionWs = void 0;
4
+ /*
5
+ * Copyright (C) 2020 Wellington Rocha
6
+ * All Rights Reserved.
7
+ *
8
+ * Unauthorized copying of this file, via any medium is strictly prohibited.
9
+ *
10
+ * Proprietary and confidential.
11
+ */
12
+ const WebSocket = require("ws");
13
+ const Logger_1 = require("../../Helper/Logger");
14
+ /**
15
+ * IQ Option WebSocket client implementation.
16
+ */
17
+ class IQOptionWs {
18
+ /**
19
+ * Constructor.
20
+ *
21
+ * @param logger Optional logger instance
22
+ */
23
+ constructor(logger) {
24
+ /**
25
+ * Host endpoint.
26
+ */
27
+ this.endpoint = "wss://iqoption.com";
28
+ /**
29
+ * Wait time to restart socket.
30
+ */
31
+ this.waitToRestart = 1000;
32
+ this.logger = logger || Logger_1.LoggerFactory.create({ className: "IQOptionWs" });
33
+ this.logger.silly("IQOptionWs::constructor");
34
+ }
35
+ /**
36
+ * Start socket connection.
37
+ */
38
+ connect() {
39
+ try {
40
+ this.logger.silly("IQOptionWs::connect");
41
+ return new Promise((resolve, reject) => {
42
+ // Fixed: removed double slash in URL
43
+ this._socket = new WebSocket(`${this.endpoint}/echo/websocket`);
44
+ this._socket.on("open", () => {
45
+ this.logger.info("WebSocket connected", { operation: "connect" });
46
+ resolve();
47
+ });
48
+ this._socket.on("error", (error) => {
49
+ this.logger.error("WebSocket error", { operation: "connect" }, error);
50
+ reject(error);
51
+ });
52
+ this._socket.on("close", () => {
53
+ this.logger.warn("WebSocket closed", { operation: "close" });
54
+ this.restartSocket();
55
+ });
56
+ });
57
+ }
58
+ catch (e) {
59
+ const error = e instanceof Error ? e : new Error(String(e));
60
+ this.logger.error("Failed to create WebSocket", { operation: "connect" }, error);
61
+ return Promise.reject(error);
62
+ }
63
+ }
64
+ /**
65
+ * Send message.
66
+ *
67
+ * @param name
68
+ * @param msg
69
+ * @param requestID
70
+ */
71
+ send(name, msg, requestID) {
72
+ this.logger.silly("IQOptionWs::send", {
73
+ operation: "send",
74
+ requestId: requestID,
75
+ metadata: { messageName: name },
76
+ });
77
+ if (!this._socket || this._socket.readyState !== WebSocket.OPEN) {
78
+ const error = new Error("Socket is not connected.");
79
+ this.logger.error("Cannot send message - socket not connected", { operation: "send" });
80
+ return Promise.reject(error);
81
+ }
82
+ const message = {
83
+ name,
84
+ msg,
85
+ };
86
+ if (requestID) {
87
+ message.request_id = String(requestID);
88
+ }
89
+ try {
90
+ this._socket.send(JSON.stringify(message));
91
+ return Promise.resolve();
92
+ }
93
+ catch (e) {
94
+ const error = e instanceof Error ? e : new Error(String(e));
95
+ this.logger.error("Failed to send message", { operation: "send" }, error);
96
+ return Promise.reject(error);
97
+ }
98
+ }
99
+ /**
100
+ * Get socket.
101
+ */
102
+ socket() {
103
+ return this._socket;
104
+ }
105
+ /**
106
+ * Is connected.
107
+ * Fixed: logic was inverted
108
+ */
109
+ isConnected() {
110
+ return this._socket !== undefined && this._socket.readyState === WebSocket.OPEN;
111
+ }
112
+ /**
113
+ * Restart socket.
114
+ */
115
+ restartSocket() {
116
+ this.logger.silly("IQOptionWs::restartSocket");
117
+ setTimeout(() => {
118
+ this.connect().catch((error) => {
119
+ this.logger.error("Failed to restart socket", { operation: "restartSocket" }, error);
120
+ });
121
+ }, this.waitToRestart);
122
+ }
123
+ }
124
+ exports.IQOptionWs = IQOptionWs;
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVFPcHRpb25Xcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvU2VydmljZS9JUU9wdGlvblNlcnZpY2UvSVFPcHRpb25Xcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7OztHQU9HO0FBQ0gsZ0NBQWdDO0FBRWhDLGdEQUE2RDtBQUc3RDs7R0FFRztBQUNILE1BQWEsVUFBVTtJQXFCbkI7Ozs7T0FJRztJQUNILFlBQW1CLE1BQWdCO1FBekJuQzs7V0FFRztRQUNjLGFBQVEsR0FBVyxvQkFBb0IsQ0FBQztRQU96RDs7V0FFRztRQUNjLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBYWxDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLHNCQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1YsSUFBSSxDQUFDO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN6QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNuQyxxQ0FBcUM7Z0JBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO29CQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO29CQUNsRSxPQUFPLEVBQUUsQ0FBQztnQkFDZCxDQUFDLENBQUMs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