iqoptionapi-node 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/README.md +219 -0
- package/dist/auth/CredentialAbstraction.d.ts +25 -0
- package/dist/auth/CredentialAbstraction.d.ts.map +1 -0
- package/dist/auth/CredentialAbstraction.js +46 -0
- package/dist/auth/CredentialAbstraction.js.map +1 -0
- package/dist/auth/EmailPasswordAuth.d.ts +11 -0
- package/dist/auth/EmailPasswordAuth.d.ts.map +1 -0
- package/dist/auth/EmailPasswordAuth.js +36 -0
- package/dist/auth/EmailPasswordAuth.js.map +1 -0
- package/dist/auth/SessionManager.d.ts +14 -0
- package/dist/auth/SessionManager.d.ts.map +1 -0
- package/dist/auth/SessionManager.js +51 -0
- package/dist/auth/SessionManager.js.map +1 -0
- package/dist/auth/SsidAuth.d.ts +10 -0
- package/dist/auth/SsidAuth.d.ts.map +1 -0
- package/dist/auth/SsidAuth.js +26 -0
- package/dist/auth/SsidAuth.js.map +1 -0
- package/dist/client/IQOptionClient.d.ts +58 -0
- package/dist/client/IQOptionClient.d.ts.map +1 -0
- package/dist/client/IQOptionClient.js +125 -0
- package/dist/client/IQOptionClient.js.map +1 -0
- package/dist/errors/index.d.ts +22 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +53 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/index.d.ts +6 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +33 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/market-data/AssetCatalog.d.ts +16 -0
- package/dist/market-data/AssetCatalog.d.ts.map +1 -0
- package/dist/market-data/AssetCatalog.js +45 -0
- package/dist/market-data/AssetCatalog.js.map +1 -0
- package/dist/market-data/CandleBuffer.d.ts +12 -0
- package/dist/market-data/CandleBuffer.d.ts.map +1 -0
- package/dist/market-data/CandleBuffer.js +44 -0
- package/dist/market-data/CandleBuffer.js.map +1 -0
- package/dist/market-data/CandleStream.d.ts +19 -0
- package/dist/market-data/CandleStream.d.ts.map +1 -0
- package/dist/market-data/CandleStream.js +73 -0
- package/dist/market-data/CandleStream.js.map +1 -0
- package/dist/market-data/HistoricalCandles.d.ts +11 -0
- package/dist/market-data/HistoricalCandles.d.ts.map +1 -0
- package/dist/market-data/HistoricalCandles.js +32 -0
- package/dist/market-data/HistoricalCandles.js.map +1 -0
- package/dist/market-data/TickAggregator.d.ts +13 -0
- package/dist/market-data/TickAggregator.d.ts.map +1 -0
- package/dist/market-data/TickAggregator.js +40 -0
- package/dist/market-data/TickAggregator.js.map +1 -0
- package/dist/market-data/TickStream.d.ts +18 -0
- package/dist/market-data/TickStream.d.ts.map +1 -0
- package/dist/market-data/TickStream.js +68 -0
- package/dist/market-data/TickStream.js.map +1 -0
- package/dist/protocol/V1Adapter.d.ts +20 -0
- package/dist/protocol/V1Adapter.d.ts.map +1 -0
- package/dist/protocol/V1Adapter.js +21 -0
- package/dist/protocol/V1Adapter.js.map +1 -0
- package/dist/trading/BinaryOptions.d.ts +31 -0
- package/dist/trading/BinaryOptions.d.ts.map +1 -0
- package/dist/trading/BinaryOptions.js +107 -0
- package/dist/trading/BinaryOptions.js.map +1 -0
- package/dist/trading/DigitalOptions.d.ts +31 -0
- package/dist/trading/DigitalOptions.d.ts.map +1 -0
- package/dist/trading/DigitalOptions.js +107 -0
- package/dist/trading/DigitalOptions.js.map +1 -0
- package/dist/trading/OrderCache.d.ts +17 -0
- package/dist/trading/OrderCache.d.ts.map +1 -0
- package/dist/trading/OrderCache.js +39 -0
- package/dist/trading/OrderCache.js.map +1 -0
- package/dist/trading/OrderHistory.d.ts +9 -0
- package/dist/trading/OrderHistory.d.ts.map +1 -0
- package/dist/trading/OrderHistory.js +17 -0
- package/dist/trading/OrderHistory.js.map +1 -0
- package/dist/transformers/entities.d.ts +8 -0
- package/dist/transformers/entities.d.ts.map +1 -0
- package/dist/transformers/entities.js +51 -0
- package/dist/transformers/entities.js.map +1 -0
- package/dist/transformers/toCamelCase.d.ts +2 -0
- package/dist/transformers/toCamelCase.d.ts.map +1 -0
- package/dist/transformers/toCamelCase.js +18 -0
- package/dist/transformers/toCamelCase.js.map +1 -0
- package/dist/transport/MessageRouter.d.ts +17 -0
- package/dist/transport/MessageRouter.d.ts.map +1 -0
- package/dist/transport/MessageRouter.js +87 -0
- package/dist/transport/MessageRouter.js.map +1 -0
- package/dist/transport/ReconnectionManager.d.ts +25 -0
- package/dist/transport/ReconnectionManager.d.ts.map +1 -0
- package/dist/transport/ReconnectionManager.js +63 -0
- package/dist/transport/ReconnectionManager.js.map +1 -0
- package/dist/transport/WebSocketTransport.d.ts +21 -0
- package/dist/transport/WebSocketTransport.d.ts.map +1 -0
- package/dist/transport/WebSocketTransport.js +68 -0
- package/dist/transport/WebSocketTransport.js.map +1 -0
- package/dist/types/logger.d.ts +7 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/logger.js +3 -0
- package/dist/types/logger.js.map +1 -0
- package/dist/types/market-data.d.ts +38 -0
- package/dist/types/market-data.d.ts.map +1 -0
- package/dist/types/market-data.js +3 -0
- package/dist/types/market-data.js.map +1 -0
- package/dist/types/messages.d.ts +8 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +3 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/primitives.d.ts +29 -0
- package/dist/types/primitives.d.ts.map +1 -0
- package/dist/types/primitives.js +29 -0
- package/dist/types/primitives.js.map +1 -0
- package/dist/types/profile.d.ts +24 -0
- package/dist/types/profile.d.ts.map +1 -0
- package/dist/types/profile.js +3 -0
- package/dist/types/profile.js.map +1 -0
- package/dist/types/raw/asset.d.ts +20 -0
- package/dist/types/raw/asset.d.ts.map +1 -0
- package/dist/types/raw/asset.js +3 -0
- package/dist/types/raw/asset.js.map +1 -0
- package/dist/types/raw/candle.d.ts +15 -0
- package/dist/types/raw/candle.d.ts.map +1 -0
- package/dist/types/raw/candle.js +3 -0
- package/dist/types/raw/candle.js.map +1 -0
- package/dist/types/raw/order.d.ts +31 -0
- package/dist/types/raw/order.d.ts.map +1 -0
- package/dist/types/raw/order.js +3 -0
- package/dist/types/raw/order.js.map +1 -0
- package/dist/types/raw/tick.d.ts +9 -0
- package/dist/types/raw/tick.d.ts.map +1 -0
- package/dist/types/raw/tick.js +3 -0
- package/dist/types/raw/tick.js.map +1 -0
- package/dist/types/trading.d.ts +38 -0
- package/dist/types/trading.d.ts.map +1 -0
- package/dist/types/trading.js +3 -0
- package/dist/types/trading.js.map +1 -0
- package/dist/validators/malformedMessage.d.ts +16 -0
- package/dist/validators/malformedMessage.d.ts.map +1 -0
- package/dist/validators/malformedMessage.js +15 -0
- package/dist/validators/malformedMessage.js.map +1 -0
- package/dist/validators/messageSchema.d.ts +7 -0
- package/dist/validators/messageSchema.d.ts.map +1 -0
- package/dist/validators/messageSchema.js +25 -0
- package/dist/validators/messageSchema.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.transformCandle = transformCandle;
|
|
4
|
+
exports.transformAsset = transformAsset;
|
|
5
|
+
exports.transformTick = transformTick;
|
|
6
|
+
function asActiveId(n) {
|
|
7
|
+
return n;
|
|
8
|
+
}
|
|
9
|
+
function transformCandle(raw) {
|
|
10
|
+
return {
|
|
11
|
+
activeId: asActiveId(raw.active_id),
|
|
12
|
+
timeframe: raw.size,
|
|
13
|
+
open: raw.open,
|
|
14
|
+
high: raw.max,
|
|
15
|
+
low: raw.min,
|
|
16
|
+
close: raw.close,
|
|
17
|
+
volume: raw.volume,
|
|
18
|
+
time: raw.at * 1000, // server sends Unix seconds; SDK uses ms
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function transformAsset(raw) {
|
|
22
|
+
// Dual OTC detection: explicit flag OR -OTC name suffix.
|
|
23
|
+
const isOtc = raw.is_otc === true || raw.name.includes('-OTC');
|
|
24
|
+
const schedules = (raw.schedule ?? []).map((s) => ({
|
|
25
|
+
open: s.open,
|
|
26
|
+
close: s.close,
|
|
27
|
+
}));
|
|
28
|
+
return {
|
|
29
|
+
activeId: asActiveId(raw.id),
|
|
30
|
+
name: raw.name,
|
|
31
|
+
symbol: raw.name.replace(/-OTC$/, ''),
|
|
32
|
+
precision: raw.precision,
|
|
33
|
+
isOtc,
|
|
34
|
+
isSuspended: raw.suspended === true,
|
|
35
|
+
profitPercent: {
|
|
36
|
+
binary: raw.option?.profit ?? 0,
|
|
37
|
+
digital: raw.digital_profit ?? 0,
|
|
38
|
+
},
|
|
39
|
+
schedules,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function transformTick(raw) {
|
|
43
|
+
return {
|
|
44
|
+
assetId: asActiveId(raw.active_id),
|
|
45
|
+
price: raw.price,
|
|
46
|
+
ask: raw.ask,
|
|
47
|
+
bid: raw.bid,
|
|
48
|
+
time: raw.time * 1000,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=entities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/transformers/entities.ts"],"names":[],"mappings":";;AAUA,0CAWC;AAED,wCAqBC;AAED,sCAQC;AAhDD,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAwB,CAAC;AAClC,CAAC;AAED,SAAgB,eAAe,CAAC,GAAgB;IAC9C,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;QACnC,SAAS,EAAE,GAAG,CAAC,IAAI;QACnB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,GAAG;QACb,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,yCAAyC;KAC/D,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,GAAe;IAC5C,yDAAyD;IACzD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAe,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACrC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK;QACL,WAAW,EAAE,GAAG,CAAC,SAAS,KAAK,IAAI;QACnC,aAAa,EAAE;YACb,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;YAC/B,OAAO,EAAE,GAAG,CAAC,cAAc,IAAI,CAAC;SACjC;QACD,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,GAAc;IAC1C,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toCamelCase.d.ts","sourceRoot":"","sources":["../../src/transformers/toCamelCase.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CASjD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toCamelCase = toCamelCase;
|
|
4
|
+
function snakeToCamel(key) {
|
|
5
|
+
return key.replace(/_([a-z])/g, (_, ch) => ch.toUpperCase());
|
|
6
|
+
}
|
|
7
|
+
function toCamelCase(obj) {
|
|
8
|
+
if (obj === null || typeof obj !== 'object')
|
|
9
|
+
return obj;
|
|
10
|
+
if (Array.isArray(obj))
|
|
11
|
+
return obj.map(toCamelCase);
|
|
12
|
+
const result = {};
|
|
13
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
14
|
+
result[snakeToCamel(key)] = toCamelCase(value);
|
|
15
|
+
}
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=toCamelCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toCamelCase.js","sourceRoot":"","sources":["../../src/transformers/toCamelCase.ts"],"names":[],"mappings":";;AAIA,kCASC;AAbD,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAU,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAgB,WAAW,CAAC,GAAY;IACtC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEpD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,EAAE,CAAC;QAC1E,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import type { IQRawMessage, MessageName } from '../types/messages';
|
|
3
|
+
import type { WebSocketTransport } from './WebSocketTransport';
|
|
4
|
+
export type MessageHandler = (msg: IQRawMessage) => void;
|
|
5
|
+
export declare class MessageRouter extends EventEmitter {
|
|
6
|
+
private readonly transport;
|
|
7
|
+
private readonly persistentHandlers;
|
|
8
|
+
private readonly pending;
|
|
9
|
+
constructor(transport: WebSocketTransport);
|
|
10
|
+
private dispatch;
|
|
11
|
+
sendRequest<T = unknown>(name: MessageName, msg: unknown, timeoutMs?: number): Promise<IQRawMessage<T>>;
|
|
12
|
+
sendMessage(name: MessageName, msg: unknown): void;
|
|
13
|
+
registerHandler(name: MessageName, handler: MessageHandler): void;
|
|
14
|
+
unregisterHandler(name: MessageName, handler: MessageHandler): void;
|
|
15
|
+
clearPending(): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=MessageRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageRouter.d.ts","sourceRoot":"","sources":["../../src/transport/MessageRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;AAUzD,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA+C;IAClF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;gBAEjD,SAAS,EAAE,kBAAkB;IAQzC,OAAO,CAAC,QAAQ;IA+BhB,WAAW,CAAC,CAAC,GAAG,OAAO,EACrB,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,OAAO,EACZ,SAAS,SAAqB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAsB3B,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI;IAIlD,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IASjE,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAInE,YAAY,IAAI,IAAI;CAOrB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessageRouter = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
const crypto_1 = require("crypto");
|
|
6
|
+
const errors_1 = require("../errors");
|
|
7
|
+
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
8
|
+
class MessageRouter extends events_1.EventEmitter {
|
|
9
|
+
transport;
|
|
10
|
+
persistentHandlers = new Map();
|
|
11
|
+
pending = new Map();
|
|
12
|
+
constructor(transport) {
|
|
13
|
+
super();
|
|
14
|
+
this.transport = transport;
|
|
15
|
+
this.transport.on('message', (raw) => {
|
|
16
|
+
this.dispatch(raw);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
dispatch(raw) {
|
|
20
|
+
let parsed;
|
|
21
|
+
try {
|
|
22
|
+
parsed = JSON.parse(raw);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
this.emit('parseError', raw);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Correlate to a pending request first
|
|
29
|
+
if (parsed.request_id) {
|
|
30
|
+
const req = this.pending.get(parsed.request_id);
|
|
31
|
+
if (req) {
|
|
32
|
+
clearTimeout(req.timer);
|
|
33
|
+
this.pending.delete(parsed.request_id);
|
|
34
|
+
req.resolve(parsed);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Route to persistent handlers
|
|
39
|
+
const handlers = this.persistentHandlers.get(parsed.name);
|
|
40
|
+
if (handlers) {
|
|
41
|
+
for (const handler of handlers) {
|
|
42
|
+
handler(parsed);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
this.emit('message', parsed);
|
|
46
|
+
}
|
|
47
|
+
sendRequest(name, msg, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
48
|
+
const requestId = (0, crypto_1.randomUUID)();
|
|
49
|
+
this.transport.send(JSON.stringify({ name, msg, request_id: requestId }));
|
|
50
|
+
return new Promise((resolve, reject) => {
|
|
51
|
+
const timer = setTimeout(() => {
|
|
52
|
+
this.pending.delete(requestId);
|
|
53
|
+
reject(new errors_1.TimeoutError(`Request '${name}' timed out after ${String(timeoutMs)}ms`));
|
|
54
|
+
}, timeoutMs);
|
|
55
|
+
this.pending.set(requestId, {
|
|
56
|
+
resolve: (m) => {
|
|
57
|
+
resolve(m);
|
|
58
|
+
},
|
|
59
|
+
reject,
|
|
60
|
+
timer,
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
sendMessage(name, msg) {
|
|
65
|
+
this.transport.send(JSON.stringify({ name, msg }));
|
|
66
|
+
}
|
|
67
|
+
registerHandler(name, handler) {
|
|
68
|
+
let set = this.persistentHandlers.get(name);
|
|
69
|
+
if (!set) {
|
|
70
|
+
set = new Set();
|
|
71
|
+
this.persistentHandlers.set(name, set);
|
|
72
|
+
}
|
|
73
|
+
set.add(handler);
|
|
74
|
+
}
|
|
75
|
+
unregisterHandler(name, handler) {
|
|
76
|
+
this.persistentHandlers.get(name)?.delete(handler);
|
|
77
|
+
}
|
|
78
|
+
clearPending() {
|
|
79
|
+
for (const [id, req] of this.pending) {
|
|
80
|
+
clearTimeout(req.timer);
|
|
81
|
+
req.reject(new errors_1.TimeoutError(`Pending request '${id}' cancelled`));
|
|
82
|
+
}
|
|
83
|
+
this.pending.clear();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.MessageRouter = MessageRouter;
|
|
87
|
+
//# sourceMappingURL=MessageRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageRouter.js","sourceRoot":"","sources":["../../src/transport/MessageRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import type { WebSocketTransport } from './WebSocketTransport';
|
|
3
|
+
export declare interface ReconnectionManager {
|
|
4
|
+
on(event: 'reconnecting', listener: (info: {
|
|
5
|
+
attempt: number;
|
|
6
|
+
delayMs: number;
|
|
7
|
+
}) => void): this;
|
|
8
|
+
on(event: 'reconnected' | 'failed', listener: () => void): this;
|
|
9
|
+
emit(event: 'reconnecting', info: {
|
|
10
|
+
attempt: number;
|
|
11
|
+
delayMs: number;
|
|
12
|
+
}): boolean;
|
|
13
|
+
emit(event: 'reconnected' | 'failed'): boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare class ReconnectionManager extends EventEmitter {
|
|
16
|
+
private readonly transport;
|
|
17
|
+
private readonly maxRetries;
|
|
18
|
+
private attempts;
|
|
19
|
+
private active;
|
|
20
|
+
private timer;
|
|
21
|
+
constructor(transport: WebSocketTransport, maxRetries?: number);
|
|
22
|
+
private schedule;
|
|
23
|
+
reset(): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ReconnectionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReconnectionManager.d.ts","sourceRoot":"","sources":["../../src/transport/ReconnectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAa/D,MAAM,CAAC,OAAO,WAAW,mBAAmB;IAC1C,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAChG,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAChE,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;IACjF,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;CAChD;AAGD,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAA8C;gBAE/C,SAAS,EAAE,kBAAkB,EAAE,UAAU,SAAI;IASzD,OAAO,CAAC,QAAQ;IA2BhB,KAAK,IAAI,IAAI;CAQd"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReconnectionManager = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
const BASE_MS = 1_000;
|
|
6
|
+
const MAX_MS = 8_000;
|
|
7
|
+
const JITTER = 0.2;
|
|
8
|
+
function backoffDelay(attempt) {
|
|
9
|
+
const base = Math.min(BASE_MS * Math.pow(2, attempt), MAX_MS);
|
|
10
|
+
const jitter = base * JITTER * (Math.random() * 2 - 1);
|
|
11
|
+
return Math.round(base + jitter);
|
|
12
|
+
}
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
|
|
14
|
+
class ReconnectionManager extends events_1.EventEmitter {
|
|
15
|
+
transport;
|
|
16
|
+
maxRetries;
|
|
17
|
+
attempts = 0;
|
|
18
|
+
active = false;
|
|
19
|
+
timer = null;
|
|
20
|
+
constructor(transport, maxRetries = 5) {
|
|
21
|
+
super();
|
|
22
|
+
this.transport = transport;
|
|
23
|
+
this.maxRetries = maxRetries;
|
|
24
|
+
this.transport.on('disconnected', (code) => {
|
|
25
|
+
if (code !== 1000 && !this.active)
|
|
26
|
+
this.schedule();
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
schedule() {
|
|
30
|
+
if (this.attempts >= this.maxRetries) {
|
|
31
|
+
this.emit('failed');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
this.active = true;
|
|
35
|
+
const delayMs = backoffDelay(this.attempts);
|
|
36
|
+
this.emit('reconnecting', { attempt: this.attempts + 1, delayMs });
|
|
37
|
+
this.timer = setTimeout(() => {
|
|
38
|
+
this.timer = null;
|
|
39
|
+
this.transport
|
|
40
|
+
.connect()
|
|
41
|
+
.then(() => {
|
|
42
|
+
this.attempts = 0;
|
|
43
|
+
this.active = false;
|
|
44
|
+
this.emit('reconnected');
|
|
45
|
+
})
|
|
46
|
+
.catch(() => {
|
|
47
|
+
this.attempts++;
|
|
48
|
+
this.active = false;
|
|
49
|
+
this.schedule();
|
|
50
|
+
});
|
|
51
|
+
}, delayMs);
|
|
52
|
+
}
|
|
53
|
+
reset() {
|
|
54
|
+
if (this.timer) {
|
|
55
|
+
clearTimeout(this.timer);
|
|
56
|
+
this.timer = null;
|
|
57
|
+
}
|
|
58
|
+
this.attempts = 0;
|
|
59
|
+
this.active = false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.ReconnectionManager = ReconnectionManager;
|
|
63
|
+
//# sourceMappingURL=ReconnectionManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReconnectionManager.js","sourceRoot":"","sources":["../../src/transport/ReconnectionManager.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAGtC,MAAM,OAAO,GAAG,KAAK,CAAC;AACtB,MAAM,MAAM,GAAG,KAAK,CAAC;AACrB,MAAM,MAAM,GAAG,GAAG,CAAC;AAEnB,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;AACnC,CAAC;AAUD,4EAA4E;AAC5E,MAAa,mBAAoB,SAAQ,qBAAY;IAClC,SAAS,CAAqB;IAC9B,UAAU,CAAS;IAC5B,QAAQ,GAAG,CAAC,CAAC;IACb,MAAM,GAAG,KAAK,CAAC;IACf,KAAK,GAAyC,IAAI,CAAC;IAE3D,YAAY,SAA6B,EAAE,UAAU,GAAG,CAAC;QACvD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE;YACzC,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAEnE,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,SAAS;iBACX,OAAO,EAAE;iBACT,IAAI,CAAC,GAAG,EAAE;gBACT,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3B,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC;QACP,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;CACF;AAnDD,kDAmDC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
export declare interface WebSocketTransport {
|
|
3
|
+
on(event: 'connected', listener: () => void): this;
|
|
4
|
+
on(event: 'disconnected', listener: (code: number, reason: string) => void): this;
|
|
5
|
+
on(event: 'message', listener: (data: string) => void): this;
|
|
6
|
+
on(event: 'error', listener: (error: Error) => void): this;
|
|
7
|
+
emit(event: 'connected'): boolean;
|
|
8
|
+
emit(event: 'disconnected', code: number, reason: string): boolean;
|
|
9
|
+
emit(event: 'message', data: string): boolean;
|
|
10
|
+
emit(event: 'error', error: Error): boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare class WebSocketTransport extends EventEmitter {
|
|
13
|
+
private ws;
|
|
14
|
+
private readonly url;
|
|
15
|
+
constructor(url: string);
|
|
16
|
+
connect(): Promise<void>;
|
|
17
|
+
send(data: string): void;
|
|
18
|
+
disconnect(code?: number): void;
|
|
19
|
+
get isConnected(): boolean;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=WebSocketTransport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketTransport.d.ts","sourceRoot":"","sources":["../../src/transport/WebSocketTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAetC,MAAM,CAAC,OAAO,WAAW,kBAAkB;IACzC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACnD,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAClF,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC7D,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3D,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;CAC7C;AAGD,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,GAAG,EAAE,MAAM;IAMvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCxB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOxB,UAAU,CAAC,IAAI,SAAO,GAAG,IAAI;IAK7B,IAAI,WAAW,IAAI,OAAO,CAEzB;CACF"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WebSocketTransport = void 0;
|
|
7
|
+
const events_1 = require("events");
|
|
8
|
+
const ws_1 = __importDefault(require("ws"));
|
|
9
|
+
const errors_1 = require("../errors");
|
|
10
|
+
// Allow loopback ws:// for in-process test servers; all other connections require wss://.
|
|
11
|
+
const LOOPBACK_RE = /^ws:\/\/(localhost|127\.0\.0\.1)(:\d+)?(\/|$)/;
|
|
12
|
+
function validateUrl(url) {
|
|
13
|
+
if (url.startsWith('wss://') || LOOPBACK_RE.test(url))
|
|
14
|
+
return;
|
|
15
|
+
throw new errors_1.ValidationError(`Only WSS connections are allowed. Received: ${url.replace(/\?.*/, '')}`);
|
|
16
|
+
}
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
|
|
18
|
+
class WebSocketTransport extends events_1.EventEmitter {
|
|
19
|
+
ws = null;
|
|
20
|
+
url;
|
|
21
|
+
constructor(url) {
|
|
22
|
+
super();
|
|
23
|
+
validateUrl(url);
|
|
24
|
+
this.url = url;
|
|
25
|
+
}
|
|
26
|
+
connect() {
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
const isLoopback = LOOPBACK_RE.test(this.url);
|
|
29
|
+
const ws = new ws_1.default(this.url, {
|
|
30
|
+
rejectUnauthorized: !isLoopback,
|
|
31
|
+
});
|
|
32
|
+
const onOpen = () => {
|
|
33
|
+
ws.removeListener('error', onInitError);
|
|
34
|
+
this.ws = ws;
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
36
|
+
ws.on('message', (data) => this.emit('message', String(data)));
|
|
37
|
+
ws.on('close', (code, reason) => {
|
|
38
|
+
this.ws = null;
|
|
39
|
+
this.emit('disconnected', code, reason.toString());
|
|
40
|
+
});
|
|
41
|
+
ws.on('error', (err) => this.emit('error', new errors_1.ConnectionError(err.message)));
|
|
42
|
+
this.emit('connected');
|
|
43
|
+
resolve();
|
|
44
|
+
};
|
|
45
|
+
const onInitError = (err) => {
|
|
46
|
+
ws.removeListener('open', onOpen);
|
|
47
|
+
reject(new errors_1.ConnectionError(err.message));
|
|
48
|
+
};
|
|
49
|
+
ws.once('open', onOpen);
|
|
50
|
+
ws.once('error', onInitError);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
send(data) {
|
|
54
|
+
if (this.ws?.readyState !== ws_1.default.OPEN) {
|
|
55
|
+
throw new errors_1.ConnectionError('WebSocket is not connected');
|
|
56
|
+
}
|
|
57
|
+
this.ws.send(data);
|
|
58
|
+
}
|
|
59
|
+
disconnect(code = 1000) {
|
|
60
|
+
this.ws?.close(code);
|
|
61
|
+
this.ws = null;
|
|
62
|
+
}
|
|
63
|
+
get isConnected() {
|
|
64
|
+
return this.ws?.readyState === ws_1.default.OPEN;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.WebSocketTransport = WebSocketTransport;
|
|
68
|
+
//# sourceMappingURL=WebSocketTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketTransport.js","sourceRoot":"","sources":["../../src/transport/WebSocketTransport.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAsC;AACtC,4CAA2B;AAC3B,sCAA6D;AAE7D,0FAA0F;AAC1F,MAAM,WAAW,GAAG,+CAA+C,CAAC;AAEpE,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO;IAC9D,MAAM,IAAI,wBAAe,CACvB,+CAA+C,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CACzE,CAAC;AACJ,CAAC;AAcD,4EAA4E;AAC5E,MAAa,kBAAmB,SAAQ,qBAAY;IAC1C,EAAE,GAAqB,IAAI,CAAC;IACnB,GAAG,CAAS;IAE7B,YAAY,GAAW;QACrB,KAAK,EAAE,CAAC;QACR,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,EAAE,GAAG,IAAI,YAAS,CAAC,IAAI,CAAC,GAAG,EAAE;gBACjC,kBAAkB,EAAE,CAAC,UAAU;aAChC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,GAAG,EAAE;gBAClB,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACxC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;gBAEb,gEAAgE;gBAChE,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/D,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;oBAC9B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;oBACf,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrD,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,wBAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAE9E,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YAEF,MAAM,WAAW,GAAG,CAAC,GAAU,EAAE,EAAE;gBACjC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAClC,MAAM,CAAC,IAAI,wBAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC;YAEF,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAY;QACf,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,YAAS,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,IAAI,wBAAe,CAAC,4BAA4B,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,UAAU,CAAC,IAAI,GAAG,IAAI;QACpB,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,YAAS,CAAC,IAAI,CAAC;IAChD,CAAC;CACF;AA1DD,gDA0DC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/types/logger.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/types/logger.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ActiveId, TimeFrame } from './primitives';
|
|
2
|
+
export interface Schedule {
|
|
3
|
+
open: number;
|
|
4
|
+
close: number;
|
|
5
|
+
}
|
|
6
|
+
export interface IQAsset {
|
|
7
|
+
activeId: ActiveId;
|
|
8
|
+
name: string;
|
|
9
|
+
symbol: string;
|
|
10
|
+
precision: number;
|
|
11
|
+
isOtc: boolean;
|
|
12
|
+
isSuspended: boolean;
|
|
13
|
+
profitPercent: {
|
|
14
|
+
binary: number;
|
|
15
|
+
digital: number;
|
|
16
|
+
};
|
|
17
|
+
schedules: Schedule[];
|
|
18
|
+
}
|
|
19
|
+
export interface IQCandle {
|
|
20
|
+
activeId: ActiveId;
|
|
21
|
+
timeframe: TimeFrame;
|
|
22
|
+
open: number;
|
|
23
|
+
high: number;
|
|
24
|
+
low: number;
|
|
25
|
+
close: number;
|
|
26
|
+
volume: number;
|
|
27
|
+
time: number;
|
|
28
|
+
}
|
|
29
|
+
export interface IQTick {
|
|
30
|
+
assetId: ActiveId;
|
|
31
|
+
price: number;
|
|
32
|
+
ask: number;
|
|
33
|
+
bid: number;
|
|
34
|
+
time: number;
|
|
35
|
+
}
|
|
36
|
+
/** Record<ActiveId, IQAsset> */
|
|
37
|
+
export type IQAssetMap = Map<ActiveId, IQAsset>;
|
|
38
|
+
//# sourceMappingURL=market-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market-data.d.ts","sourceRoot":"","sources":["../../src/types/market-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,QAAQ,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,gCAAgC;AAChC,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market-data.js","sourceRoot":"","sources":["../../src/types/market-data.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type MessageName = 'authorization' | 'ssid' | 'profile' | 'get-candles' | 'candles' | 'candle-generated' | 'subscribeMessage' | 'unsubscribeMessage' | 'quote-generated' | 'init_data' | 'buyV2' | 'buy-complete' | 'option' | 'digital-options/place-order-binary' | 'heartbeat';
|
|
2
|
+
export interface IQRawMessage<T = unknown> {
|
|
3
|
+
name: MessageName;
|
|
4
|
+
msg: T;
|
|
5
|
+
request_id?: string;
|
|
6
|
+
}
|
|
7
|
+
export type IQIncomingMessage = IQRawMessage;
|
|
8
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/types/messages.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB,eAAe,GACf,MAAM,GACN,SAAS,GACT,aAAa,GACb,SAAS,GACT,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,iBAAiB,GACjB,WAAW,GACX,OAAO,GACP,cAAc,GACd,QAAQ,GACR,oCAAoC,GACpC,WAAW,CAAC;AAEhB,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,CAAC,CAAC;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/types/messages.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
declare const __brand: unique symbol;
|
|
2
|
+
type Brand<T, B> = T & {
|
|
3
|
+
[__brand]: B;
|
|
4
|
+
};
|
|
5
|
+
export type ActiveId = Brand<number, 'ActiveId'>;
|
|
6
|
+
export declare enum TimeFrame {
|
|
7
|
+
S1 = 1,
|
|
8
|
+
S5 = 5,
|
|
9
|
+
S10 = 10,
|
|
10
|
+
S15 = 15,
|
|
11
|
+
S30 = 30,
|
|
12
|
+
M1 = 60,
|
|
13
|
+
M5 = 300,
|
|
14
|
+
M15 = 900,
|
|
15
|
+
M30 = 1800,
|
|
16
|
+
H1 = 3600,
|
|
17
|
+
H4 = 14400,
|
|
18
|
+
D1 = 86400
|
|
19
|
+
}
|
|
20
|
+
export declare enum Direction {
|
|
21
|
+
Call = "call",
|
|
22
|
+
Put = "put"
|
|
23
|
+
}
|
|
24
|
+
export declare enum AccountType {
|
|
25
|
+
Practice = "PRACTICE",
|
|
26
|
+
Real = "REAL"
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=primitives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/types/primitives.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,OAAO,EAAE,OAAO,MAAM,CAAC;AACrC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEjD,oBAAY,SAAS;IACnB,EAAE,IAAI;IACN,EAAE,IAAI;IACN,GAAG,KAAK;IACR,GAAG,KAAK;IACR,GAAG,KAAK;IACR,EAAE,KAAK;IACP,EAAE,MAAM;IACR,GAAG,MAAM;IACT,GAAG,OAAO;IACV,EAAE,OAAO;IACT,EAAE,QAAQ;IACV,EAAE,QAAQ;CACX;AAED,oBAAY,SAAS;IACnB,IAAI,SAAS;IACb,GAAG,QAAQ;CACZ;AAED,oBAAY,WAAW;IACrB,QAAQ,aAAa;IACrB,IAAI,SAAS;CACd"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AccountType = exports.Direction = exports.TimeFrame = void 0;
|
|
4
|
+
var TimeFrame;
|
|
5
|
+
(function (TimeFrame) {
|
|
6
|
+
TimeFrame[TimeFrame["S1"] = 1] = "S1";
|
|
7
|
+
TimeFrame[TimeFrame["S5"] = 5] = "S5";
|
|
8
|
+
TimeFrame[TimeFrame["S10"] = 10] = "S10";
|
|
9
|
+
TimeFrame[TimeFrame["S15"] = 15] = "S15";
|
|
10
|
+
TimeFrame[TimeFrame["S30"] = 30] = "S30";
|
|
11
|
+
TimeFrame[TimeFrame["M1"] = 60] = "M1";
|
|
12
|
+
TimeFrame[TimeFrame["M5"] = 300] = "M5";
|
|
13
|
+
TimeFrame[TimeFrame["M15"] = 900] = "M15";
|
|
14
|
+
TimeFrame[TimeFrame["M30"] = 1800] = "M30";
|
|
15
|
+
TimeFrame[TimeFrame["H1"] = 3600] = "H1";
|
|
16
|
+
TimeFrame[TimeFrame["H4"] = 14400] = "H4";
|
|
17
|
+
TimeFrame[TimeFrame["D1"] = 86400] = "D1";
|
|
18
|
+
})(TimeFrame || (exports.TimeFrame = TimeFrame = {}));
|
|
19
|
+
var Direction;
|
|
20
|
+
(function (Direction) {
|
|
21
|
+
Direction["Call"] = "call";
|
|
22
|
+
Direction["Put"] = "put";
|
|
23
|
+
})(Direction || (exports.Direction = Direction = {}));
|
|
24
|
+
var AccountType;
|
|
25
|
+
(function (AccountType) {
|
|
26
|
+
AccountType["Practice"] = "PRACTICE";
|
|
27
|
+
AccountType["Real"] = "REAL";
|
|
28
|
+
})(AccountType || (exports.AccountType = AccountType = {}));
|
|
29
|
+
//# sourceMappingURL=primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/types/primitives.ts"],"names":[],"mappings":";;;AAKA,IAAY,SAaX;AAbD,WAAY,SAAS;IACnB,qCAAM,CAAA;IACN,qCAAM,CAAA;IACN,wCAAQ,CAAA;IACR,wCAAQ,CAAA;IACR,wCAAQ,CAAA;IACR,sCAAO,CAAA;IACP,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,0CAAU,CAAA;IACV,wCAAS,CAAA;IACT,yCAAU,CAAA;IACV,yCAAU,CAAA;AACZ,CAAC,EAbW,SAAS,yBAAT,SAAS,QAapB;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,0BAAa,CAAA;IACb,wBAAW,CAAA;AACb,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,oCAAqB,CAAA;IACrB,4BAAa,CAAA;AACf,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AccountType } from './primitives';
|
|
2
|
+
/** Raw wire format received from IQOption server (snake_case). */
|
|
3
|
+
export interface IQRawProfile {
|
|
4
|
+
ssid: string;
|
|
5
|
+
user_id: number;
|
|
6
|
+
email: string;
|
|
7
|
+
first_name: string;
|
|
8
|
+
last_name: string;
|
|
9
|
+
balance: number;
|
|
10
|
+
currency: string;
|
|
11
|
+
currency_char: string;
|
|
12
|
+
}
|
|
13
|
+
/** SDK profile exposed to consumers (camelCase). */
|
|
14
|
+
export interface IQProfile {
|
|
15
|
+
ssid: string;
|
|
16
|
+
userId: number;
|
|
17
|
+
email: string;
|
|
18
|
+
firstName: string;
|
|
19
|
+
lastName: string;
|
|
20
|
+
balance: number;
|
|
21
|
+
currency: string;
|
|
22
|
+
accountType: AccountType;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/types/profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,oDAAoD;AACpD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/types/profile.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface IQRawSchedule {
|
|
2
|
+
open: number;
|
|
3
|
+
close: number;
|
|
4
|
+
}
|
|
5
|
+
export interface IQRawAsset {
|
|
6
|
+
id: number;
|
|
7
|
+
name: string;
|
|
8
|
+
is_otc?: boolean;
|
|
9
|
+
suspended?: boolean;
|
|
10
|
+
precision: number;
|
|
11
|
+
schedule?: IQRawSchedule[];
|
|
12
|
+
option?: {
|
|
13
|
+
profit?: number;
|
|
14
|
+
};
|
|
15
|
+
digital_profit?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface IQRawInitData {
|
|
18
|
+
instruments: IQRawAsset[];
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=asset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/types/raw/asset.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B"}
|