@paraswap/dex-lib 3.8.37 → 3.8.39-bebop

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 (107) hide show
  1. package/build/abi/USDM.json +807 -0
  2. package/build/abi/bebop/BebopSettlement.abi.json +2137 -0
  3. package/build/abi/cables/CablesMainnetRFQ.json +1073 -0
  4. package/build/abi/wUSDM.json +757 -0
  5. package/build/config.js +7 -0
  6. package/build/config.js.map +1 -1
  7. package/build/dex/bebop/bebop.d.ts +55 -0
  8. package/build/dex/bebop/bebop.js +524 -0
  9. package/build/dex/bebop/bebop.js.map +1 -0
  10. package/build/dex/bebop/config.d.ts +3 -0
  11. package/build/dex/bebop/config.js +38 -0
  12. package/build/dex/bebop/config.js.map +1 -0
  13. package/build/dex/bebop/constants.d.ts +9 -0
  14. package/build/dex/bebop/constants.js +13 -0
  15. package/build/dex/bebop/constants.js.map +1 -0
  16. package/build/dex/bebop/rate-fetcher.d.ts +22 -0
  17. package/build/dex/bebop/rate-fetcher.js +80 -0
  18. package/build/dex/bebop/rate-fetcher.js.map +1 -0
  19. package/build/dex/bebop/types.d.ts +76 -0
  20. package/build/dex/bebop/types.js +3 -0
  21. package/build/dex/bebop/types.js.map +1 -0
  22. package/build/dex/bebop/validators.d.ts +4 -0
  23. package/build/dex/bebop/validators.js +42 -0
  24. package/build/dex/bebop/validators.js.map +1 -0
  25. package/build/dex/bebop/websocket-fetcher.d.ts +35 -0
  26. package/build/dex/bebop/websocket-fetcher.js +87 -0
  27. package/build/dex/bebop/websocket-fetcher.js.map +1 -0
  28. package/build/dex/cables/cables.d.ts +64 -0
  29. package/build/dex/cables/cables.js +445 -0
  30. package/build/dex/cables/cables.js.map +1 -0
  31. package/build/dex/cables/config.d.ts +4 -0
  32. package/build/dex/cables/config.js +15 -0
  33. package/build/dex/cables/config.js.map +1 -0
  34. package/build/dex/cables/constants.d.ts +19 -0
  35. package/build/dex/cables/constants.js +26 -0
  36. package/build/dex/cables/constants.js.map +1 -0
  37. package/build/dex/cables/rate-fetcher.d.ts +34 -0
  38. package/build/dex/cables/rate-fetcher.js +117 -0
  39. package/build/dex/cables/rate-fetcher.js.map +1 -0
  40. package/build/dex/cables/types.d.ts +106 -0
  41. package/build/dex/cables/types.js +12 -0
  42. package/build/dex/cables/types.js.map +1 -0
  43. package/build/dex/cables/validators.d.ts +5 -0
  44. package/build/dex/cables/validators.js +49 -0
  45. package/build/dex/cables/validators.js.map +1 -0
  46. package/build/dex/index.js +2 -0
  47. package/build/dex/index.js.map +1 -1
  48. package/build/dex/spark/config.js +25 -0
  49. package/build/dex/spark/config.js.map +1 -1
  50. package/build/dex/spark/scripts/validate-state.js +1 -1
  51. package/build/dex/spark/scripts/validate-state.js.map +1 -1
  52. package/build/dex/spark/spark-sdai-pool.d.ts +7 -3
  53. package/build/dex/spark/spark-sdai-pool.js +24 -28
  54. package/build/dex/spark/spark-sdai-pool.js.map +1 -1
  55. package/build/dex/spark/spark.d.ts +10 -5
  56. package/build/dex/spark/spark.js +46 -31
  57. package/build/dex/spark/spark.js.map +1 -1
  58. package/build/dex/spark/types.d.ts +6 -0
  59. package/build/dex/spark/types.js.map +1 -1
  60. package/build/dex/spark/utils.d.ts +3 -1
  61. package/build/dex/spark/utils.js +43 -7
  62. package/build/dex/spark/utils.js.map +1 -1
  63. package/build/dex/woo-fi-v2/woo-fi-v2-pool.d.ts +2 -2
  64. package/build/dex/woo-fi-v2/woo-fi-v2-pool.js +30 -9
  65. package/build/dex/woo-fi-v2/woo-fi-v2-pool.js.map +1 -1
  66. package/build/dex/woo-fi-v2/woo-fi-v2.js +1 -1
  67. package/build/dex/woo-fi-v2/woo-fi-v2.js.map +1 -1
  68. package/build/dex/wusdm/config.d.ts +3 -0
  69. package/build/dex/wusdm/config.js +29 -0
  70. package/build/dex/wusdm/config.js.map +1 -0
  71. package/build/dex/wusdm/types.d.ts +10 -0
  72. package/build/dex/wusdm/types.js +3 -0
  73. package/build/dex/wusdm/types.js.map +1 -0
  74. package/build/dex/wusdm/wusdm.d.ts +39 -0
  75. package/build/dex/wusdm/wusdm.js +212 -0
  76. package/build/dex/wusdm/wusdm.js.map +1 -0
  77. package/build/lib/fetcher/wsFetcher.d.ts +35 -0
  78. package/build/lib/fetcher/wsFetcher.js +87 -0
  79. package/build/lib/fetcher/wsFetcher.js.map +1 -0
  80. package/build/types.d.ts +1 -0
  81. package/package.json +4 -2
  82. package/src/abi/bebop/BebopSettlement.abi.json +2137 -0
  83. package/src/abi/sdai/SavingsUSDS.abi.json +720 -0
  84. package/src/config.ts +8 -0
  85. package/src/dex/bebop/bebop-e2e.test.ts +195 -0
  86. package/src/dex/bebop/bebop-integration.test.ts +170 -0
  87. package/src/dex/bebop/bebop.ts +732 -0
  88. package/src/dex/bebop/config.ts +37 -0
  89. package/src/dex/bebop/constants.ts +9 -0
  90. package/src/dex/bebop/rate-fetcher.ts +138 -0
  91. package/src/dex/bebop/types.ts +81 -0
  92. package/src/dex/bebop/validators.ts +43 -0
  93. package/src/dex/index.ts +2 -0
  94. package/src/dex/spark/config.ts +24 -0
  95. package/src/dex/spark/scripts/validate-state.ts +1 -0
  96. package/src/dex/spark/spark-e2e.test.ts +25 -21
  97. package/src/dex/spark/spark-events.test.ts +77 -62
  98. package/src/dex/spark/spark-integration.test.ts +290 -7
  99. package/src/dex/spark/spark-sdai-pool.ts +22 -19
  100. package/src/dex/spark/spark.ts +62 -36
  101. package/src/dex/spark/types.ts +6 -0
  102. package/src/dex/spark/utils.ts +83 -19
  103. package/src/dex/woo-fi-v2/woo-fi-v2-pool.ts +58 -27
  104. package/src/dex/woo-fi-v2/woo-fi-v2.ts +1 -2
  105. package/src/lib/fetcher/wsFetcher.ts +126 -0
  106. package/src/types.ts +1 -0
  107. package/tests/constants-e2e.ts +5 -0
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RateFetcher = void 0;
4
+ const constants_1 = require("../../constants");
5
+ const fetcher_1 = require("../../lib/fetcher/fetcher");
6
+ const validators_1 = require("../../lib/validators");
7
+ const validators_2 = require("./validators");
8
+ const wsFetcher_1 = require("../../lib/fetcher/wsFetcher");
9
+ class RateFetcher {
10
+ constructor(dexHelper, dexKey, network, logger, config) {
11
+ this.dexHelper = dexHelper;
12
+ this.dexKey = dexKey;
13
+ this.network = network;
14
+ this.logger = logger;
15
+ this.pricesCacheKey = config.rateConfig.pricesCacheKey;
16
+ this.pricesCacheTTL = config.rateConfig.pricesCacheTTLSecs;
17
+ this.pricesFetcher = new wsFetcher_1.WebSocketFetcher({
18
+ info: {
19
+ requestOptions: config.rateConfig.pricesReqParams,
20
+ caster: (data) => {
21
+ return (0, validators_1.validateAndCast)(data, validators_2.pricesResponseValidator);
22
+ },
23
+ },
24
+ handler: this.handlePricesResponse.bind(this),
25
+ }, logger);
26
+ this.tokensAddrCacheKey = config.rateConfig.tokensAddrCacheKey;
27
+ this.tokensCacheKey = config.rateConfig.tokensCacheKey;
28
+ this.tokensCacheTTL = config.rateConfig.tokensCacheTTLSecs;
29
+ this.tokensFetcher = new fetcher_1.Fetcher(dexHelper.httpRequest, {
30
+ info: {
31
+ requestOptions: config.rateConfig.tokensReqParams,
32
+ caster: (data) => {
33
+ return (0, validators_1.validateAndCast)(data, validators_2.tokensResponseValidator);
34
+ },
35
+ },
36
+ handler: this.handleTokensResponse.bind(this),
37
+ }, config.rateConfig.tokensIntervalMs, logger);
38
+ }
39
+ start() {
40
+ this.pricesFetcher.startPolling();
41
+ this.tokensFetcher.startPolling();
42
+ }
43
+ stop() {
44
+ this.pricesFetcher.stopPolling();
45
+ this.tokensFetcher.stopPolling();
46
+ }
47
+ handleTokensResponse(resp) {
48
+ const tokenMap = {};
49
+ const tokenAddrMap = {};
50
+ Object.keys(resp.tokens).forEach(tokenSymbol => {
51
+ const token = resp.tokens[tokenSymbol];
52
+ const tokenData = {
53
+ address: token.contractAddress.toLowerCase(),
54
+ symbol: token.ticker,
55
+ decimals: token.decimals,
56
+ };
57
+ tokenAddrMap[token.contractAddress.toLowerCase()] = tokenData;
58
+ tokenMap[token.ticker.toLowerCase()] = tokenData;
59
+ });
60
+ this.dexHelper.cache.setex(this.dexKey, this.network, this.tokensCacheKey, this.tokensCacheTTL, JSON.stringify(tokenMap));
61
+ this.dexHelper.cache.setex(this.dexKey, this.network, this.tokensAddrCacheKey, this.tokensCacheTTL, JSON.stringify(tokenAddrMap));
62
+ }
63
+ handlePricesResponse(resp) {
64
+ const wethAddress = this.dexHelper.config.data.wrappedNativeTokenAddress.toLowerCase();
65
+ const normalizedPrices = {};
66
+ for (const [pair, levels] of Object.entries(resp)) {
67
+ normalizedPrices[pair.toLowerCase()] = levels;
68
+ const [base, quote] = pair.split('/');
69
+ // Also enter native token prices. Pricing doesn't come with these
70
+ if (base.toLowerCase() === wethAddress ||
71
+ quote.toLowerCase() === wethAddress) {
72
+ const nativePair = pair.replace(base, constants_1.ETHER_ADDRESS);
73
+ normalizedPrices[nativePair.toLowerCase()] = levels;
74
+ }
75
+ }
76
+ this.dexHelper.cache.setex(this.dexKey, this.network, this.pricesCacheKey, this.pricesCacheTTL, JSON.stringify(normalizedPrices));
77
+ }
78
+ }
79
+ exports.RateFetcher = RateFetcher;
80
+ //# sourceMappingURL=rate-fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-fetcher.js","sourceRoot":"","sources":["../../../src/dex/bebop/rate-fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import { SwapSide } from '../../constants';
2
+ import { RequestHeaders } from '../../dex-helper';
3
+ export declare type BebopRateFetcherConfig = {
4
+ rateConfig: {
5
+ pricesReqParams: {
6
+ url: string;
7
+ headers?: RequestHeaders;
8
+ params?: any;
9
+ };
10
+ tokensReqParams: {
11
+ url: string;
12
+ headers?: RequestHeaders;
13
+ params?: any;
14
+ };
15
+ tokensIntervalMs: number;
16
+ pricesCacheKey: string;
17
+ tokensAddrCacheKey: string;
18
+ tokensCacheKey: string;
19
+ pricesCacheTTLSecs: number;
20
+ tokensCacheTTLSecs: number;
21
+ };
22
+ };
23
+ export declare type TokenDataMap = {
24
+ [index: string]: BebopToken;
25
+ };
26
+ export declare type BebopToken = {
27
+ decimals: number;
28
+ contractAddress: string;
29
+ ticker: string;
30
+ };
31
+ export declare type BebopTokensResponse = {
32
+ tokens: {
33
+ [symbol: string]: BebopToken;
34
+ };
35
+ };
36
+ export declare type BebopLevel = [price: number, size: number];
37
+ export declare type BebopPair = {
38
+ bids: BebopLevel[];
39
+ asks: BebopLevel[];
40
+ last_update_ts: number;
41
+ };
42
+ export declare type BebopPricingResponse = {
43
+ [pair: string]: BebopPair;
44
+ };
45
+ export interface BebopTx {
46
+ to: string;
47
+ value: string;
48
+ data: string;
49
+ from: string;
50
+ gas: number;
51
+ }
52
+ export declare type BebopTokenAmount = {
53
+ amount: string;
54
+ priceUsd: number;
55
+ };
56
+ export declare type BebopData = {
57
+ expiry?: number;
58
+ buyTokens?: {
59
+ [address: string]: BebopTokenAmount;
60
+ };
61
+ sellTokens?: {
62
+ [address: string]: BebopTokenAmount;
63
+ };
64
+ tx?: BebopTx;
65
+ };
66
+ export declare type DexParams = {
67
+ settlementAddress: string;
68
+ chainName: string;
69
+ middleTokens: string[];
70
+ };
71
+ export declare type RoutingInstruction = {
72
+ side: SwapSide;
73
+ book: BebopPair;
74
+ pair: string;
75
+ targetQuote: boolean;
76
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/bebop/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import joi from 'joi';
2
+ export declare const pricesResponseValidator: joi.ObjectSchema<any>;
3
+ export declare const tokensResponseValidator: joi.ObjectSchema<any>;
4
+ export declare const blacklistResponseValidator: joi.ObjectSchema<any>;
@@ -0,0 +1,42 @@
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.blacklistResponseValidator = exports.tokensResponseValidator = exports.pricesResponseValidator = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ // const pairValidator = joi.object({
9
+ // base: joi.string().min(1).required(),
10
+ // quote: joi.string().min(1).required(),
11
+ // liquidityUSD: joi.number().min(0).required(),
12
+ // baseAddress: joi.string().min(1).required(),
13
+ // quoteAddress: joi.string().min(1).required(),
14
+ // baseDecimals: joi.number().min(0).required(),
15
+ // quoteDecimals: joi.number().min(0).required(),
16
+ // });
17
+ // export const pairsResponseValidator = joi
18
+ // .object()
19
+ // .pattern(joi.string(), pairValidator);
20
+ const levelValidator = joi_1.default.array().items(joi_1.default.number()).length(2);
21
+ const pairValidator = joi_1.default.object({
22
+ bids: joi_1.default.array().items(levelValidator).required(),
23
+ asks: joi_1.default.array().items(levelValidator).required(),
24
+ last_update_ts: joi_1.default.number().min(0).required(),
25
+ });
26
+ exports.pricesResponseValidator = joi_1.default
27
+ .object()
28
+ .pattern(joi_1.default.string(), pairValidator);
29
+ const tokenValidator = joi_1.default
30
+ .object({
31
+ ticker: joi_1.default.string().min(1).required(),
32
+ contractAddress: joi_1.default.string().min(1).required(),
33
+ decimals: joi_1.default.number().min(0).required(),
34
+ })
35
+ .unknown(true);
36
+ exports.tokensResponseValidator = joi_1.default.object({
37
+ tokens: joi_1.default.object().pattern(joi_1.default.string(), tokenValidator),
38
+ });
39
+ exports.blacklistResponseValidator = joi_1.default.object({
40
+ blacklist: joi_1.default.array().items(joi_1.default.string().min(1)).required(),
41
+ });
42
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/dex/bebop/validators.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAsB;AAEtB,qCAAqC;AACrC,0CAA0C;AAC1C,2CAA2C;AAC3C,kDAAkD;AAClD,iDAAiD;AACjD,kDAAkD;AAClD,kDAAkD;AAClD,mDAAmD;AACnD,MAAM;AAEN,4CAA4C;AAC5C,cAAc;AACd,2CAA2C;AAE3C,MAAM,cAAc,GAAG,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,aAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEjE,MAAM,aAAa,GAAG,aAAG,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;IAClD,IAAI,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;IAClD,cAAc,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC/C,CAAC,CAAC;AAEU,QAAA,uBAAuB,GAAG,aAAG;KACvC,MAAM,EAAE;KACR,OAAO,CAAC,aAAG,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;AAExC,MAAM,cAAc,GAAG,aAAG;KACvB,MAAM,CAAC;IACN,MAAM,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,eAAe,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC/C,QAAQ,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,OAAO,CAAC,IAAI,CAAC,CAAC;AAEJ,QAAA,uBAAuB,GAAG,aAAG,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAG,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC;CAC3D,CAAC,CAAC;AAEU,QAAA,0BAA0B,GAAG,aAAG,CAAC,MAAM,CAAC;IACnD,SAAS,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7D,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { Logger } from 'log4js';
2
+ import { RequestConfig, Response } from '../../dex-helper/irequest-wrapper';
3
+ export declare class SkippingRequest {
4
+ message: string;
5
+ constructor(message?: string);
6
+ }
7
+ export declare type RequestInfo<T> = {
8
+ requestFunc?: (options: RequestConfig) => Promise<Response<T> | SkippingRequest>;
9
+ requestOptions: RequestConfig;
10
+ caster: (data: unknown) => T;
11
+ authenticate?: (options: RequestConfig) => RequestConfig;
12
+ excludedFieldsCaching?: string[];
13
+ };
14
+ export declare type RequestInfoWithHandler<T> = {
15
+ info: RequestInfo<T>;
16
+ handler: (data: T) => void;
17
+ };
18
+ export declare class WebSocketFetcher<T> {
19
+ private logger;
20
+ private requests;
21
+ lastFetchSucceeded: boolean;
22
+ private stop;
23
+ private ws;
24
+ private connection;
25
+ constructor(requestsInfo: RequestInfoWithHandler<T>, logger: Logger);
26
+ private connected;
27
+ private connectFailed;
28
+ private onClose;
29
+ private onError;
30
+ private onMessage;
31
+ private connect;
32
+ startPolling(): void;
33
+ stopPolling(): void;
34
+ isPolling(): boolean;
35
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebSocketFetcher = exports.SkippingRequest = void 0;
4
+ const websocket_1 = require("websocket");
5
+ class SkippingRequest {
6
+ constructor(message = '') {
7
+ this.message = message;
8
+ }
9
+ }
10
+ exports.SkippingRequest = SkippingRequest;
11
+ class WebSocketFetcher {
12
+ constructor(requestsInfo, logger) {
13
+ this.logger = logger;
14
+ this.lastFetchSucceeded = false;
15
+ this.stop = true;
16
+ this.ws = new websocket_1.client();
17
+ this.connection = null;
18
+ this.requests = requestsInfo;
19
+ this.ws.on('connect', this.connected.bind(this));
20
+ this.ws.on('connectFailed', this.connectFailed.bind(this));
21
+ }
22
+ connected(connection) {
23
+ this.connection = connection;
24
+ this.logger.info(`Connected to ${this.requests.info.requestOptions.url}`);
25
+ this.connection.on('error', this.onError.bind(this));
26
+ this.connection.on('close', this.onClose.bind(this));
27
+ this.connection.on('message', this.onMessage.bind(this));
28
+ }
29
+ connectFailed(error) {
30
+ this.logger.error(`Connect Error: ${error.toString()}`);
31
+ }
32
+ onClose() {
33
+ this.logger.info(`Connection closed`);
34
+ }
35
+ onError(error) {
36
+ this.logger.error(`Connection Error: ${error.toString()}`);
37
+ }
38
+ onMessage(message) {
39
+ if (message.type === 'utf8') {
40
+ const response = JSON.parse(message.utf8Data);
41
+ const reqInfo = this.requests;
42
+ const info = reqInfo.info;
43
+ const options = reqInfo.info.requestOptions;
44
+ this.logger.debug(`(${options.url}) received new data`);
45
+ try {
46
+ const parsedData = info.caster(response);
47
+ reqInfo.handler(parsedData);
48
+ }
49
+ catch (e) {
50
+ this.logger.info(e);
51
+ this.logger.info(`(${options.url}) received incorrect data ${JSON.stringify(response).replace(/(?:\r\n|\r|\n)/g, ' ')}`, e);
52
+ return;
53
+ }
54
+ }
55
+ }
56
+ connect() {
57
+ const authorization = this.requests.info.requestOptions.headers.authorization;
58
+ const name = this.requests.info.requestOptions.headers.name;
59
+ if (typeof authorization !== 'string') {
60
+ throw new Error('Authorization header is not a string');
61
+ }
62
+ if (typeof name !== 'string') {
63
+ throw new Error('Name header is not a string');
64
+ }
65
+ this.ws.connect(this.requests.info.requestOptions.url, undefined, undefined, {
66
+ Authorization: authorization,
67
+ name: name,
68
+ });
69
+ }
70
+ startPolling() {
71
+ this.stop = false;
72
+ this.connect();
73
+ this.logger.info(`Connection started for ${this.requests.info.requestOptions.url}`);
74
+ }
75
+ stopPolling() {
76
+ if (this.connection) {
77
+ this.connection.close();
78
+ }
79
+ this.stop = true;
80
+ this.logger.info(`Connection stopped for ${this.requests.info.requestOptions.url}`);
81
+ }
82
+ isPolling() {
83
+ return !this.stop;
84
+ }
85
+ }
86
+ exports.WebSocketFetcher = WebSocketFetcher;
87
+ //# sourceMappingURL=websocket-fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-fetcher.js","sourceRoot":"","sources":["../../../src/dex/bebop/websocket-fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { Address, NumberAsString, OptimalSwapExchange, SwapSide } from '@paraswap/core';
2
+ import { AsyncOrSync } from 'ts-essentials';
3
+ import { Network } from '../../constants';
4
+ import { IDexHelper } from '../../dex-helper';
5
+ import { AdapterExchangeParam, DexExchangeParam, ExchangePrices, ExchangeTxInfo, Logger, PoolLiquidity, PoolPrices, PreprocessTransactionOptions, Token, TransferFeeParams } from '../../types';
6
+ import { IDex } from '../idex';
7
+ import { SimpleExchange } from '../simple-exchange';
8
+ import { CablesData } from './types';
9
+ import { Interface } from 'ethers/lib/utils';
10
+ export declare class Cables extends SimpleExchange implements IDex<any> {
11
+ readonly network: Network;
12
+ readonly dexKey: string;
13
+ readonly dexHelper: IDexHelper;
14
+ readonly mainnetRFQAddress: string;
15
+ protected rfqInterface: Interface;
16
+ static dexKeysWithNetwork: {
17
+ key: string;
18
+ networks: Network[];
19
+ }[];
20
+ private rateFetcher;
21
+ logger: Logger;
22
+ private tokensMap;
23
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, mainnetRFQAddress?: string, rfqInterface?: Interface);
24
+ hasConstantPriceLargeAmounts: boolean;
25
+ needsSequentialPreprocessing?: boolean | undefined;
26
+ getNetworkFee?(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, data: CablesData, side: SwapSide): NumberAsString;
27
+ preProcessTransaction?(optimalSwapExchange: OptimalSwapExchange<CablesData>, srcToken: Token, destToken: Token, side: SwapSide, options: PreprocessTransactionOptions): Promise<[OptimalSwapExchange<CablesData>, ExchangeTxInfo]>;
28
+ getTokenFromAddress(address: Address): Token;
29
+ getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: CablesData, side: SwapSide): DexExchangeParam;
30
+ getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: CablesData, side: SwapSide): AdapterExchangeParam;
31
+ normalizeToken(token: Token): Token;
32
+ normalizeTokenAddress(address: Address): Address;
33
+ /**
34
+ * POOLS
35
+ */
36
+ getPoolIdentifier(srcAddress: Address, destAddress: Address, mm?: string): string;
37
+ getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
38
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[], transferFees?: TransferFeeParams, isFirstSwap?: boolean): Promise<ExchangePrices<CablesData> | null>;
39
+ getCalldataGasCost(poolPrices: PoolPrices<CablesData>): number | number[];
40
+ initializePricing(blockNumber: number): Promise<void>;
41
+ getAdapters(side: SwapSide): {
42
+ name: string;
43
+ index: number;
44
+ }[] | null;
45
+ releaseResources?(): AsyncOrSync<void>;
46
+ addMasterPool?(poolKey: string, blockNumber: number): AsyncOrSync<boolean>;
47
+ /**
48
+ * Blacklist
49
+ */
50
+ isBlacklisted?(userAddress?: Address): AsyncOrSync<boolean>;
51
+ setBlacklist?(userAddress?: Address): AsyncOrSync<boolean>;
52
+ updatePoolState?(): AsyncOrSync<void>;
53
+ getTopPoolsForToken(tokenAddress: Address, limit: number): AsyncOrSync<PoolLiquidity[]>;
54
+ /**
55
+ * CACHED UTILS
56
+ */
57
+ getCachedTokens(): Promise<any>;
58
+ getCachedPairs(): Promise<any>;
59
+ getCachedPrices(): Promise<any>;
60
+ getCachedTokensAddr(): Promise<any>;
61
+ getPairString(baseToken: Token, quoteToken: Token): string;
62
+ private findKeyByAddress;
63
+ getPairData(srcToken: Token, destToken: Token): Promise<any>;
64
+ }