@paraswap/dex-lib 2.14.7 → 2.15.1

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 (69) hide show
  1. package/.idea/aws.xml +17 -0
  2. package/.idea/codeStyles/Project.xml +19 -0
  3. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  4. package/.idea/modules.xml +1 -1
  5. package/.idea/paraswap-dex-lib.iml +9 -0
  6. package/.idea/runConfigurations.xml +10 -0
  7. package/build/dex/aave-v3/tokens/arbitrum.json +20 -20
  8. package/build/dex/aave-v3/tokens/avalanche.json +44 -20
  9. package/build/dex/aave-v3/tokens/fantom.json +30 -30
  10. package/build/dex/aave-v3/tokens/optimism.json +18 -18
  11. package/build/dex/aave-v3/tokens/polygon.json +60 -42
  12. package/build/dex/generic-rfq/fetch-mm-api.js +11 -10
  13. package/build/dex/generic-rfq/fetch-mm-api.js.map +1 -1
  14. package/build/dex/generic-rfq/rate-fetcher.js +12 -11
  15. package/build/dex/generic-rfq/rate-fetcher.js.map +1 -1
  16. package/build/dex/generic-rfq/validators.d.ts +0 -6
  17. package/build/dex/generic-rfq/validators.js +1 -24
  18. package/build/dex/generic-rfq/validators.js.map +1 -1
  19. package/build/dex/hashflow/constants.d.ts +6 -1
  20. package/build/dex/hashflow/constants.js +7 -2
  21. package/build/dex/hashflow/constants.js.map +1 -1
  22. package/build/dex/hashflow/hashflow.d.ts +9 -2
  23. package/build/dex/hashflow/hashflow.js +65 -21
  24. package/build/dex/hashflow/hashflow.js.map +1 -1
  25. package/build/dex/hashflow/rate-fetcher.d.ts +21 -0
  26. package/build/dex/hashflow/rate-fetcher.js +67 -0
  27. package/build/dex/hashflow/rate-fetcher.js.map +1 -0
  28. package/build/dex/hashflow/types.d.ts +36 -0
  29. package/build/dex/hashflow/types.js.map +1 -1
  30. package/build/dex/hashflow/validators.d.ts +4 -0
  31. package/build/dex/hashflow/validators.js +31 -0
  32. package/build/dex/hashflow/validators.js.map +1 -0
  33. package/build/lib/fetcher/fetcher.d.ts +7 -2
  34. package/build/lib/fetcher/fetcher.js +37 -13
  35. package/build/lib/fetcher/fetcher.js.map +1 -1
  36. package/build/lib/validators.d.ts +7 -0
  37. package/build/lib/validators.js +27 -0
  38. package/build/lib/validators.js.map +1 -0
  39. package/package.json +1 -1
  40. package/src/dex/generic-rfq/fetch-mm-api.ts +2 -2
  41. package/src/dex/generic-rfq/generic-rfq-e2e.test.ts +10 -26
  42. package/src/dex/generic-rfq/rate-fetcher.ts +4 -5
  43. package/src/dex/generic-rfq/validators.test.ts +1 -1
  44. package/src/dex/generic-rfq/validators.ts +0 -33
  45. package/src/dex/hashflow/constants.ts +12 -2
  46. package/src/dex/hashflow/hashflow.ts +117 -60
  47. package/src/dex/hashflow/rate-fetcher.ts +120 -0
  48. package/src/dex/hashflow/types.ts +40 -0
  49. package/src/dex/hashflow/validators.ts +27 -0
  50. package/src/lib/fetcher/fetcher.ts +41 -12
  51. package/src/lib/validators.ts +34 -0
  52. package/tests/utils-e2e.ts +13 -13
  53. package/.vscode/launch.json +0 -21
  54. package/build/dex/aave-v3/tokens/mainnet.json +0 -44
  55. package/build/dex/balancer-v2/VirtualBoostedPool.d.ts +0 -79
  56. package/build/dex/balancer-v2/VirtualBoostedPool.js +0 -382
  57. package/build/dex/balancer-v2/VirtualBoostedPool.js.map +0 -1
  58. package/build/dex/test-aave-v3/config.d.ts +0 -4
  59. package/build/dex/test-aave-v3/config.js +0 -15
  60. package/build/dex/test-aave-v3/config.js.map +0 -1
  61. package/build/dex/test-aave-v3/test-aave-v3-pool.d.ts +0 -39
  62. package/build/dex/test-aave-v3/test-aave-v3-pool.js +0 -63
  63. package/build/dex/test-aave-v3/test-aave-v3-pool.js.map +0 -1
  64. package/build/dex/test-aave-v3/test-aave-v3.d.ts +0 -37
  65. package/build/dex/test-aave-v3/test-aave-v3.js +0 -126
  66. package/build/dex/test-aave-v3/test-aave-v3.js.map +0 -1
  67. package/build/dex/test-aave-v3/types.d.ts +0 -6
  68. package/build/dex/test-aave-v3/types.js +0 -3
  69. package/build/dex/test-aave-v3/types.js.map +0 -1
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RateFetcher = void 0;
4
+ const fetcher_1 = require("../../lib/fetcher/fetcher");
5
+ const validators_1 = require("../../lib/validators");
6
+ const validators_2 = require("./validators");
7
+ class RateFetcher {
8
+ constructor(dexHelper, dexKey, network, logger, config) {
9
+ this.dexHelper = dexHelper;
10
+ this.dexKey = dexKey;
11
+ this.network = network;
12
+ this.logger = logger;
13
+ this.pricesCacheKey = config.rateConfig.pricesCacheKey;
14
+ this.pricesCacheTTL = config.rateConfig.pricesCacheTTLSecs;
15
+ this.marketMakersCacheKey = config.rateConfig.marketMakersCacheKey;
16
+ this.marketMakersCacheTTL = config.rateConfig.marketMakersCacheTTLSecs;
17
+ this.marketMakersFetcher = new fetcher_1.Fetcher(dexHelper.httpRequest, {
18
+ info: {
19
+ requestOptions: config.rateConfig.marketMakersReqParams,
20
+ caster: (data) => {
21
+ return (0, validators_1.validateAndCast)(data, validators_2.marketMakersValidator);
22
+ },
23
+ },
24
+ handler: this.handleMarketMakersResponse.bind(this),
25
+ }, config.rateConfig.markerMakersIntervalMs, logger);
26
+ this.rateFetcher = new fetcher_1.Fetcher(dexHelper.httpRequest, {
27
+ info: {
28
+ requestOptions: config.rateConfig.pricesReqParams,
29
+ requestFunc: async (options) => {
30
+ const { filterMarketMakers, getCachedMarketMakers } = config.rateConfig;
31
+ const cachedMarketMakers = (await getCachedMarketMakers()) || [];
32
+ const filteredMarketMakers = await filterMarketMakers(cachedMarketMakers);
33
+ if (filteredMarketMakers.length === 0) {
34
+ return new fetcher_1.SkippingRequest(`${dexKey}-${network}: got ${filteredMarketMakers.length} market makers.`);
35
+ }
36
+ const prices = await dexHelper.httpRequest.request({
37
+ ...options,
38
+ params: { ...options.params, marketMakers: filteredMarketMakers },
39
+ });
40
+ return prices;
41
+ },
42
+ caster: (data) => {
43
+ return (0, validators_1.validateAndCast)(data, validators_2.pricesResponseValidator);
44
+ },
45
+ },
46
+ handler: this.handleRatesResponse.bind(this),
47
+ }, config.rateConfig.pricesIntervalMs, logger);
48
+ }
49
+ start() {
50
+ this.marketMakersFetcher.startPolling();
51
+ this.rateFetcher.startPolling();
52
+ }
53
+ stop() {
54
+ this.marketMakersFetcher.stopPolling();
55
+ this.rateFetcher.stopPolling();
56
+ }
57
+ handleMarketMakersResponse(resp) {
58
+ const { marketMakers } = resp;
59
+ this.dexHelper.cache.rawset(this.marketMakersCacheKey, JSON.stringify(marketMakers), this.marketMakersCacheTTL);
60
+ }
61
+ handleRatesResponse(resp) {
62
+ const { levels } = resp;
63
+ this.dexHelper.cache.rawset(this.pricesCacheKey, JSON.stringify(levels), this.pricesCacheTTL);
64
+ }
65
+ }
66
+ exports.RateFetcher = RateFetcher;
67
+ //# sourceMappingURL=rate-fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-fetcher.js","sourceRoot":"","sources":["../../../src/dex/hashflow/rate-fetcher.ts"],"names":[],"mappings":";;;AACA,uDAAqE;AACrE,qDAAuD;AAOvD,6CAA8E;AAG9E,MAAa,WAAW;IAStB,YACU,SAAqB,EACrB,MAAc,EACd,OAAgB,EAChB,MAAc,EACtB,MAAiC;QAJzB,cAAS,GAAT,SAAS,CAAY;QACrB,WAAM,GAAN,MAAM,CAAQ;QACd,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAQ;QAGtB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC;QACvD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC;QAC3D,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACnE,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC;QAEvE,IAAI,CAAC,mBAAmB,GAAG,IAAI,iBAAO,CACpC,SAAS,CAAC,WAAW,EACrB;YACE,IAAI,EAAE;gBACJ,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,qBAAqB;gBACvD,MAAM,EAAE,CAAC,IAAa,EAAE,EAAE;oBACxB,OAAO,IAAA,4BAAe,EACpB,IAAI,EACJ,kCAAqB,CACtB,CAAC;gBACJ,CAAC;aACF;YACD,OAAO,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;SACpD,EACD,MAAM,CAAC,UAAU,CAAC,sBAAsB,EACxC,MAAM,CACP,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,IAAI,iBAAO,CAC5B,SAAS,CAAC,WAAW,EACrB;YACE,IAAI,EAAE;gBACJ,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,eAAe;gBACjD,WAAW,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;oBAC3B,MAAM,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,GACjD,MAAM,CAAC,UAAU,CAAC;oBAEpB,MAAM,kBAAkB,GAAG,CAAC,MAAM,qBAAqB,EAAE,CAAC,IAAI,EAAE,CAAC;oBACjE,MAAM,oBAAoB,GAAG,MAAM,kBAAkB,CACnD,kBAAkB,CACnB,CAAC;oBAEF,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;wBACrC,OAAO,IAAI,yBAAe,CACxB,GAAG,MAAM,IAAI,OAAO,SAAS,oBAAoB,CAAC,MAAM,iBAAiB,CAC1E,CAAC;qBACH;oBAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC;wBACjD,GAAG,OAAO;wBACV,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,oBAAoB,EAAE;qBAClE,CAAC,CAAC;oBAEH,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,MAAM,EAAE,CAAC,IAAa,EAAE,EAAE;oBACxB,OAAO,IAAA,4BAAe,EACpB,IAAI,EACJ,oCAAuB,CACxB,CAAC;gBACJ,CAAC;aACF;YACD,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC7C,EACD,MAAM,CAAC,UAAU,CAAC,gBAAgB,EAClC,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;IAClC,CAAC;IAED,IAAI;QACF,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAEO,0BAA0B,CAAC,IAAkC;QACnE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CACzB,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAC5B,IAAI,CAAC,oBAAoB,CAC1B,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,IAA2B;QACrD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CACzB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EACtB,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;CACF;AA3GD,kCA2GC"}
@@ -1,4 +1,5 @@
1
1
  import { QuoteData } from '@hashflow/taker-js/dist/types/common';
2
+ import { RequestHeaders } from '../../dex-helper';
2
3
  export declare type HashflowData = {
3
4
  mm: string;
4
5
  quoteData?: QuoteData;
@@ -20,3 +21,38 @@ export declare enum RFQType {
20
21
  }
21
22
  export declare class SlippageCheckError extends Error {
22
23
  }
24
+ export declare type HashflowRatesLevel = {
25
+ pair: Record<string, string>;
26
+ levels: Array<Record<string, string>>;
27
+ includesFees: boolean;
28
+ };
29
+ export declare type HashflowMarketMakersResponse = {
30
+ marketMakers: string[];
31
+ };
32
+ export declare type HashflowRatesResponse = {
33
+ status: string;
34
+ networkId: string;
35
+ levels: Record<string, Array<HashflowRatesLevel>>;
36
+ };
37
+ export declare type HashflowRateFetcherConfig = {
38
+ rateConfig: {
39
+ marketMakersReqParams: {
40
+ url: string;
41
+ headers?: RequestHeaders;
42
+ params?: any;
43
+ };
44
+ pricesReqParams: {
45
+ url: string;
46
+ headers?: RequestHeaders;
47
+ params?: any;
48
+ };
49
+ pricesIntervalMs: number;
50
+ markerMakersIntervalMs: number;
51
+ getCachedMarketMakers: () => Promise<string[] | null>;
52
+ filterMarketMakers: (makers: string[]) => Promise<string[]>;
53
+ pricesCacheKey: string;
54
+ marketMakersCacheKey: string;
55
+ pricesCacheTTLSecs: number;
56
+ marketMakersCacheTTLSecs: number;
57
+ };
58
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/hashflow/types.ts"],"names":[],"mappings":";;;AAkBA,MAAa,QAAS,SAAQ,KAAK;CAAG;AAAtC,4BAAsC;AAEtC,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,qCAAQ,CAAA;IACR,qCAAQ,CAAA;AACV,CAAC,EAHW,OAAO,GAAP,eAAO,KAAP,eAAO,QAGlB;AAED,MAAa,kBAAmB,SAAQ,KAAK;CAAG;AAAhD,gDAAgD"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/hashflow/types.ts"],"names":[],"mappings":";;;AAmBA,MAAa,QAAS,SAAQ,KAAK;CAAG;AAAtC,4BAAsC;AAEtC,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,qCAAQ,CAAA;IACR,qCAAQ,CAAA;AACV,CAAC,EAHW,OAAO,GAAP,eAAO,KAAP,eAAO,QAGlB;AAED,MAAa,kBAAmB,SAAQ,KAAK;CAAG;AAAhD,gDAAgD"}
@@ -0,0 +1,4 @@
1
+ import joi from 'joi';
2
+ export declare const levelValidator: joi.ArraySchema<any[]>;
3
+ export declare const pricesResponseValidator: joi.ObjectSchema<any>;
4
+ export declare const marketMakersValidator: joi.ObjectSchema<any>;
@@ -0,0 +1,31 @@
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.marketMakersValidator = exports.pricesResponseValidator = exports.levelValidator = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ exports.levelValidator = joi_1.default.array().items(joi_1.default.object({
9
+ pair: joi_1.default.object({
10
+ baseTokenName: joi_1.default.string().min(1).required(),
11
+ quoteTokenName: joi_1.default.string().min(1).required(),
12
+ baseToken: joi_1.default.string().min(1).required(),
13
+ quoteToken: joi_1.default.string().min(1).required(),
14
+ baseTokenDecimals: joi_1.default.number().min(1).required(),
15
+ quoteTokenDecimals: joi_1.default.number().min(1).required(),
16
+ }),
17
+ levels: joi_1.default.array().items(joi_1.default.object({
18
+ level: joi_1.default.string().min(1).required(),
19
+ price: joi_1.default.string().min(1).required(),
20
+ })),
21
+ includesFees: joi_1.default.boolean().required(),
22
+ }));
23
+ exports.pricesResponseValidator = joi_1.default.object({
24
+ status: joi_1.default.string().required(),
25
+ networkId: joi_1.default.number().required(),
26
+ levels: joi_1.default.object().pattern(joi_1.default.string().min(1), exports.levelValidator),
27
+ });
28
+ exports.marketMakersValidator = joi_1.default.object({
29
+ marketMakers: joi_1.default.array().items(joi_1.default.string().min(1).required()),
30
+ });
31
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/dex/hashflow/validators.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAsB;AAET,QAAA,cAAc,GAAG,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,aAAG,CAAC,MAAM,CAAC;IACzD,IAAI,EAAE,aAAG,CAAC,MAAM,CAAC;QACf,aAAa,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC7C,cAAc,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC9C,SAAS,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACzC,UAAU,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC1C,iBAAiB,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACjD,kBAAkB,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KACnD,CAAC;IACF,MAAM,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,aAAG,CAAC,MAAM,CAAC;QACnC,KAAK,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACrC,KAAK,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KACtC,CAAC,CAAC;IACH,YAAY,EAAE,aAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAC,CAAC;AAES,QAAA,uBAAuB,GAAG,aAAG,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,SAAS,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,sBAAc,CAAC;CAClE,CAAC,CAAC;AAEU,QAAA,qBAAqB,GAAG,aAAG,CAAC,MAAM,CAAC;IAC9C,YAAY,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,aAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;CAChE,CAAC,CAAC"}
@@ -1,7 +1,12 @@
1
1
  import { IRequestWrapper } from '../../dex-helper';
2
2
  import { Logger } from 'log4js';
3
- import { RequestConfig } from '../../dex-helper/irequest-wrapper';
3
+ import { RequestConfig, Response } from '../../dex-helper/irequest-wrapper';
4
+ export declare class SkippingRequest {
5
+ message: string;
6
+ constructor(message?: string);
7
+ }
4
8
  export declare type RequestInfo<T> = {
9
+ requestFunc?: (options: RequestConfig) => Promise<Response<T> | SkippingRequest>;
5
10
  requestOptions: RequestConfig;
6
11
  caster: (data: unknown) => T;
7
12
  authenticate?: (options: RequestConfig) => RequestConfig;
@@ -11,7 +16,7 @@ export declare type RequestInfoWithHandler<T> = {
11
16
  info: RequestInfo<T>;
12
17
  handler: (data: T) => void;
13
18
  };
14
- export default class Fetcher<T> {
19
+ export declare class Fetcher<T> {
15
20
  private requestWrapper;
16
21
  private pollIntervalMs;
17
22
  private logger;
@@ -1,8 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Fetcher = exports.SkippingRequest = void 0;
4
+ const lodash_1 = require("lodash");
3
5
  const FETCH_TIMEOUT_MS = 10 * 1000;
4
6
  const FETCH_FAIL_MAX_ATTEMPT = 5;
5
7
  const FETCH_FAIL_RETRY_TIMEOUT_MS = 60 * 1000;
8
+ class SkippingRequest {
9
+ constructor(message = '') {
10
+ this.message = message;
11
+ }
12
+ }
13
+ exports.SkippingRequest = SkippingRequest;
14
+ ;
6
15
  class Fetcher {
7
16
  constructor(requestWrapper, requestsInfo, pollIntervalMs, logger) {
8
17
  this.requestWrapper = requestWrapper;
@@ -37,10 +46,19 @@ class Fetcher {
37
46
  info.authenticate(options);
38
47
  }
39
48
  try {
40
- const result = await this.requestWrapper.request({
41
- timeout: FETCH_TIMEOUT_MS,
42
- ...options,
43
- });
49
+ let result;
50
+ if ((0, lodash_1.isFunction)(info.requestFunc)) {
51
+ result = await info.requestFunc({
52
+ timeout: FETCH_TIMEOUT_MS,
53
+ ...options,
54
+ });
55
+ }
56
+ else {
57
+ result = await this.requestWrapper.request({
58
+ timeout: FETCH_TIMEOUT_MS,
59
+ ...options,
60
+ });
61
+ }
44
62
  return result;
45
63
  }
46
64
  catch (e) {
@@ -51,13 +69,19 @@ class Fetcher {
51
69
  const failures = results
52
70
  .map((_, i) => i)
53
71
  .filter(i => results[i] instanceof Error);
54
- results
55
- .filter(result => !(result instanceof Error))
56
- .map(result => {
57
- debugger;
58
- this.logger.info('Results Data:', JSON.stringify(result.data)
59
- .replace(/(?:\r\n|\r|\n)/g, ' ')
60
- .substring(0, 1000));
72
+ const skipped = results
73
+ .map((_, i) => i)
74
+ .filter(i => results[i] instanceof SkippingRequest);
75
+ results.map(result => {
76
+ if (!(result instanceof Error || result instanceof SkippingRequest)) {
77
+ this.logger.info('Results Data:', JSON.stringify(result.data)
78
+ .replace(/(?:\r\n|\r|\n)/g, ' ')
79
+ .substring(0, 1000));
80
+ }
81
+ });
82
+ skipped.forEach(i => {
83
+ const skippedRes = results[i];
84
+ this.logger.warn(`skipped request ${this.requests[i].info.requestOptions.url} ${skippedRes.message}`);
61
85
  });
62
86
  failures.forEach(i => {
63
87
  this.logger.warn(`failed polling ${this.requests[i].info.requestOptions.url} ${results[i]}`);
@@ -71,7 +95,7 @@ class Fetcher {
71
95
  }
72
96
  results
73
97
  .map((_, i) => i)
74
- .filter(i => !(results[i] instanceof Error))
98
+ .filter(i => !(results[i] instanceof Error || results[i] instanceof SkippingRequest))
75
99
  .forEach(i => {
76
100
  const response = results[i];
77
101
  const reqInfo = this.requests[i];
@@ -106,5 +130,5 @@ class Fetcher {
106
130
  return !this.stop;
107
131
  }
108
132
  }
109
- exports.default = Fetcher;
133
+ exports.Fetcher = Fetcher;
110
134
  //# sourceMappingURL=fetcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../../src/lib/fetcher/fetcher.ts"],"names":[],"mappings":";;AAIA,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,CAAC;AAc9C,MAAqB,OAAO;IAM1B,YACU,cAA+B,EACvC,YAAqE,EAC7D,cAAsB,EACtB,MAAc;QAHd,mBAAc,GAAd,cAAc,CAAiB;QAE/B,mBAAc,GAAd,cAAc,CAAQ;QACtB,WAAM,GAAN,MAAM,CAAQ;QARjB,uBAAkB,GAAY,KAAK,CAAC;QACnC,gBAAW,GAAG,CAAC,CAAC;QAChB,SAAI,GAAY,IAAI,CAAC;QAQ3B,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YAC/B,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;SAC9B;aAAM;YACL,IAAI,CAAC,QAAQ,GAAG,CAAC,YAAY,CAAC,CAAC;SAChC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAAiB,KAAK;QAChC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;YAChC,OAAO;SACR;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,sBAAsB,EAAE;YAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;YAEnB,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACvB,CAAC,EAAE,2BAA2B,CAAC,CAAC;YAChC,OAAO;SACR;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAChC,KAAK,EAAE,OAAkC,EAAE,EAAE;YAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;YAClC,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;aAC5B;YAED,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;oBAC/C,OAAO,EAAE,gBAAgB;oBACzB,GAAG,OAAO;iBACX,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC;aACf;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAU,CAAC;aACnB;QACH,CAAC,CACF,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,OAAO;aACrB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aAChB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC;QAE5C,OAAO;aACJ,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC;aAC5C,GAAG,CAAC,MAAM,CAAC,EAAE;YACZ,QAAQ,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,eAAe,EACf,IAAI,CAAC,SAAS,CAAE,MAAc,CAAC,IAAI,CAAC;iBACjC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;iBAC/B,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CACtB,CAAC;QACJ,CAAC,CAAC,CAAC;QACL,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,kBAAkB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAC3E,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;YACtC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;SACvB;aAAM;YACL,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAChC;QAED,OAAO;aACJ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aAChB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC;aAC3C,OAAO,CAAC,CAAC,CAAC,EAAE;YACX,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAgB,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,qBAAqB,CAAC,CAAC;YAExD,IAAI;gBACF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9C,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;aAC7B;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,IAAI,OAAO,CAAC,GAAG,6BAA6B,IAAI,CAAC,SAAS,CACxD,QAAQ,CAAC,IAAI,CACd,EAAE,EACH,CAAC,CACF,CAAC;gBACF,OAAO;aACR;QACH,CAAC,CAAC,CAAC;QACL,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAEvD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,OAAO;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAI,CAAC,CAAC;IAC9D,CAAC;IAED,YAAY;QACV,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,WAAW;QACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,SAAS;QACP,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IACpB,CAAC;CACF;AAhID,0BAgIC"}
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../../src/lib/fetcher/fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import joi from 'joi';
2
+ export declare class ValidationError extends Error {
3
+ readonly rawMessage: string;
4
+ readonly key?: string;
5
+ constructor(message: string, key?: string);
6
+ }
7
+ export declare const validateAndCast: <T>(value: unknown, schema: joi.Schema, name?: string | undefined) => T;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateAndCast = exports.ValidationError = void 0;
4
+ class ValidationError extends Error {
5
+ constructor(message, key) {
6
+ super(key !== undefined ? `'${key}': ${message}` : message);
7
+ this.rawMessage = message;
8
+ this.key = key;
9
+ }
10
+ }
11
+ exports.ValidationError = ValidationError;
12
+ const validateAndCast = (value, schema, name) => {
13
+ const { error, value: parsed } = schema.validate(value);
14
+ if (error !== undefined) {
15
+ let message;
16
+ if (name) {
17
+ message = `"${name}" ${error.message.slice(error.message.indexOf('must'))}`;
18
+ }
19
+ else {
20
+ message = error.message;
21
+ }
22
+ throw new ValidationError(message);
23
+ }
24
+ return parsed;
25
+ };
26
+ exports.validateAndCast = validateAndCast;
27
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/lib/validators.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAgB,SAAQ,KAAK;IAKxC,YAAY,OAAe,EAAE,GAAY;QACvC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;CACF;AAVD,0CAUC;AAEM,MAAM,eAAe,GAAG,CAC7B,KAAc,EACd,MAAkB,EAClB,IAAa,EACV,EAAE;IACL,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,IAAI,OAAO,CAAC;QACZ,IAAI,IAAI,EAAE;YACR,OAAO,GAAG,IAAI,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CACxC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAC9B,EAAE,CAAC;SACL;aAAM;YACL,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;SACzB;QACD,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;KACpC;IACD,OAAO,MAAW,CAAC;AACrB,CAAC,CAAC;AAnBW,QAAA,eAAe,mBAmB1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paraswap/dex-lib",
3
- "version": "2.14.7",
3
+ "version": "2.15.1",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "repository": "https://github.com/paraswap/paraswap-dex-lib",
@@ -5,7 +5,7 @@ import Web3 from 'web3';
5
5
  import { generateConfig } from '../../config';
6
6
  import { DummyRequestWrapper } from '../../dex-helper/dummy-dex-helper';
7
7
  import { RequestConfig } from '../../dex-helper/irequest-wrapper';
8
- import Fetcher from '../../lib/fetcher/fetcher';
8
+ import { Fetcher } from '../../lib/fetcher/fetcher';
9
9
  import { getLogger } from '../../lib/log4js';
10
10
  import { MultiWrapper } from '../../lib/multi-wrapper';
11
11
  import { genericRFQAuthHttp } from './security';
@@ -23,11 +23,11 @@ import {
23
23
  pairsResponseValidator,
24
24
  pricesResponse,
25
25
  tokensResponseValidator,
26
- validateAndCast,
27
26
  } from './validators';
28
27
  import MultiV2Abi from '../../abi/multi-v2.json';
29
28
  import { AbiItem } from 'web3-utils';
30
29
  import { checkOrder } from './utils';
30
+ import { validateAndCast } from '../../lib/validators';
31
31
 
32
32
  const network = 1;
33
33
 
@@ -5,15 +5,9 @@ import { ethers } from 'ethers';
5
5
  import { Network, ContractMethod, SwapSide, MAX_UINT } from '../../constants';
6
6
  import { generateConfig } from '../../config';
7
7
  import { newTestE2E, getEnv } from '../../../tests/utils-e2e';
8
- import {
9
- SmartTokens,
10
- GENERIC_ADDR1,
11
- Tokens,
12
- } from '../../../tests/constants-e2e';
8
+ import { SmartTokens, GENERIC_ADDR1 } from '../../../tests/constants-e2e';
13
9
  import { RFQConfig } from './types';
14
10
  import { testConfig } from './e2e-test-config';
15
- import { SmartToken } from '../../../tests/smart-tokens';
16
- import { Token } from '../../types';
17
11
 
18
12
  const PK_KEY = process.env.TEST_PK_KEY;
19
13
 
@@ -91,32 +85,22 @@ const dexKey = 'YOUR_NAME';
91
85
  describe(`GenericRFQ ${dexKey} E2E`, () => {
92
86
  for (const [_network, testCases] of Object.entries(testConfig)) {
93
87
  const network = parseInt(_network, 10);
94
- const tokens = Tokens[network];
95
88
  const smartTokens = SmartTokens[network];
96
89
  const config = generateConfig(network);
97
90
 
98
91
  config.rfqConfigs[dexKey] = buildConfigForGenericRFQ();
99
92
  describe(`${Network[network]}`, () => {
100
93
  for (const testCase of testCases) {
101
- let srcToken: Token | SmartToken, destToken: Token | SmartToken;
102
-
103
- if (SKIP_TENDERLY) {
104
- srcToken = tokens[testCase.srcToken];
105
- destToken = tokens[testCase.destToken];
106
- } else {
107
- if (!smartTokens.hasOwnProperty(testCase.srcToken)) {
108
- throw new Error(
109
- `Please add "addBalance" and "addAllowance" functions for ${testCase.srcToken} on ${Network[network]} (in constants-e2e.ts).`,
110
- );
111
- }
112
- if (!smartTokens.hasOwnProperty(testCase.destToken)) {
113
- throw new Error(
114
- `Please add "addBalance" and "addAllowance" functions for ${testCase.destToken} on ${Network[network]} (in constants-e2e.ts).`,
115
- );
116
- }
117
- srcToken = smartTokens[testCase.srcToken];
118
- destToken = smartTokens[testCase.destToken];
94
+ if (!smartTokens.hasOwnProperty(testCase.srcToken)) {
95
+ throw new Error(`Please add "addBalance" and "addAllowance" functions for ${testCase.srcToken} on ${Network[network]} (in constants-e2e.ts).`);
96
+ }
97
+ if (!smartTokens.hasOwnProperty(testCase.destToken)){
98
+ throw new Error(`Please add "addBalance" and "addAllowance" functions for ${testCase.destToken} on ${Network[network]} (in constants-e2e.ts).`);
99
+ }
100
+ const srcToken = smartTokens[testCase.srcToken];
101
+ const destToken = smartTokens[testCase.destToken];
119
102
 
103
+ if (!SKIP_TENDERLY) {
120
104
  srcToken.addBalance(testAccount.address, MAX_UINT);
121
105
  srcToken.addAllowance(
122
106
  testAccount.address,
@@ -3,7 +3,7 @@ import { SwapSide } from '@paraswap/core';
3
3
  import { BN_1 } from '../../bignumber-constants';
4
4
  import { IDexHelper } from '../../dex-helper';
5
5
  import { RequestConfig } from '../../dex-helper/irequest-wrapper';
6
- import Fetcher from '../../lib/fetcher/fetcher';
6
+ import { Fetcher } from '../../lib/fetcher/fetcher';
7
7
 
8
8
  import { Logger, Address, Token } from '../../types';
9
9
  import { OrderInfo } from '../paraswap-limit-orders/types';
@@ -28,17 +28,16 @@ import {
28
28
  pairsResponseValidator,
29
29
  pricesResponse,
30
30
  tokensResponseValidator,
31
- validateAndCast,
32
31
  } from './validators';
33
32
  import { genericRFQAuthHttp } from './security';
34
-
35
- const GET_FIRM_RATE_TIMEOUT_MS = 2000;
33
+ import { validateAndCast } from '../../lib/validators';
36
34
  import {
37
35
  createERC1271Contract,
38
36
  ERC1271Contract,
39
37
  } from '../../lib/erc1271-utils';
40
38
  import { isContractAddress } from '../../utils';
41
39
 
40
+ const GET_FIRM_RATE_TIMEOUT_MS = 2000;
42
41
  export const reversePrice = (price: PriceAndAmountBigNumber) =>
43
42
  [
44
43
  BN_1.dividedBy(price[0]),
@@ -60,7 +59,7 @@ export class RateFetcher {
60
59
  public blackListCacheKey: string;
61
60
 
62
61
  private authHttp: (
63
- secet: RFQSecret,
62
+ secret: RFQSecret,
64
63
  ) => (options: RequestConfig) => RequestConfig;
65
64
 
66
65
  private verifierContract?: ERC1271Contract;
@@ -1,11 +1,11 @@
1
1
  import {
2
- validateAndCast,
3
2
  tokensResponseValidator,
4
3
  pairsResponseValidator,
5
4
  pricesResponse,
6
5
  blacklistResponseValidator,
7
6
  firmRateResponseValidator,
8
7
  } from './validators';
8
+ import { validateAndCast } from '../../lib/validators';
9
9
 
10
10
  describe('GenericRFQ Validator test', () => {
11
11
  describe('GenericRFQ Tokens Test', () => {
@@ -4,18 +4,6 @@ import * as ethers from 'ethers';
4
4
 
5
5
  const tokensType = ['ERC20'];
6
6
 
7
- export class ValidationError extends Error {
8
- readonly rawMessage: string;
9
-
10
- readonly key?: string;
11
-
12
- constructor(message: string, key?: string) {
13
- super(key !== undefined ? `'${key}': ${message}` : message);
14
- this.rawMessage = message;
15
- this.key = key;
16
- }
17
- }
18
-
19
7
  export const tokenValidator = joi.object({
20
8
  symbol: joi.string().min(1).required(),
21
9
  name: joi.string().min(1).required(),
@@ -120,27 +108,6 @@ export const pricesResponse = joi.object({
120
108
  ),
121
109
  });
122
110
 
123
- export const validateAndCast = <T>(
124
- value: unknown,
125
- schema: joi.Schema,
126
- name?: string,
127
- ): T => {
128
- const { error, value: parsed } = schema.validate(value);
129
-
130
- if (error !== undefined) {
131
- let message;
132
- if (name) {
133
- message = `"${name}" ${error.message.slice(
134
- error.message.indexOf('must'),
135
- )}`;
136
- } else {
137
- message = error.message;
138
- }
139
- throw new ValidationError(message);
140
- }
141
- return parsed as T;
142
- };
143
-
144
111
  export const addressSchema = joi.string().custom((value, helpers) => {
145
112
  if (ethers.utils.isAddress(value)) {
146
113
  return value.toLowerCase();
@@ -1,6 +1,16 @@
1
- export const PRICE_LEVELS_TTL_SECONDS = 1;
2
-
3
1
  // 7 days
4
2
  export const HASHFLOW_BLACKLIST_TTL_S = 60 * 60 * 24 * 7;
5
3
 
6
4
  export const HASHFLOW_MM_RESTRICT_TTL_S = 60 * 60;
5
+
6
+ export const HASHFLOW_PRICES_CACHES_TTL_S = 3;
7
+
8
+ export const HASHFLOW_MARKET_MAKERS_CACHES_TTL_S = 30;
9
+
10
+ export const HASHFLOW_API_PRICES_POLLING_INTERVAL_MS = 0;
11
+
12
+ export const HASHFLOW_API_MARKET_MAKERS_POLLING_INTERVAL_MS = 28 * 1000; // 28 secs
13
+
14
+ export const HASHFLOW_API_URL = 'https://api.hashflow.com';
15
+
16
+ export const HASHFLOW_API_CLIENT_NAME = 'paraswap';