@chainlink/external-adapter-framework 0.12.1 → 0.13.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.
Files changed (57) hide show
  1. package/adapter/basic.js +3 -3
  2. package/adapter/basic.js.map +1 -1
  3. package/adapter/endpoint.d.ts +9 -1
  4. package/adapter/endpoint.js +23 -0
  5. package/adapter/endpoint.js.map +1 -1
  6. package/cache/index.d.ts +2 -2
  7. package/cache/index.js +1 -1
  8. package/cache/index.js.map +1 -1
  9. package/cache/local.js +7 -3
  10. package/cache/local.js.map +1 -1
  11. package/cache/metrics.d.ts +1 -1
  12. package/cache/metrics.js +9 -1
  13. package/cache/metrics.js.map +1 -1
  14. package/cache/redis.js +12 -4
  15. package/cache/redis.js.map +1 -1
  16. package/cache/response.d.ts +36 -0
  17. package/cache/response.js +58 -0
  18. package/cache/response.js.map +1 -0
  19. package/config/index.d.ts +6 -6
  20. package/config/index.js +6 -10
  21. package/config/index.js.map +1 -1
  22. package/index.js +4 -1
  23. package/index.js.map +1 -1
  24. package/metrics/util.d.ts +1 -1
  25. package/metrics/util.js +2 -2
  26. package/metrics/util.js.map +1 -1
  27. package/package.json +1 -1
  28. package/rate-limiting/metrics.js +1 -1
  29. package/rate-limiting/metrics.js.map +1 -1
  30. package/transports/abstract/streaming.d.ts +34 -0
  31. package/transports/abstract/streaming.js +44 -0
  32. package/transports/abstract/streaming.js.map +1 -0
  33. package/transports/abstract/subscription.d.ts +38 -0
  34. package/transports/abstract/subscription.js +63 -0
  35. package/transports/abstract/subscription.js.map +1 -0
  36. package/transports/batch-warming.d.ts +7 -12
  37. package/transports/batch-warming.js +42 -28
  38. package/transports/batch-warming.js.map +1 -1
  39. package/transports/index.d.ts +20 -13
  40. package/transports/index.js +0 -35
  41. package/transports/index.js.map +1 -1
  42. package/transports/metrics.d.ts +11 -4
  43. package/transports/metrics.js +30 -20
  44. package/transports/metrics.js.map +1 -1
  45. package/transports/rest.d.ts +10 -7
  46. package/transports/rest.js +22 -12
  47. package/transports/rest.js.map +1 -1
  48. package/transports/routing.d.ts +9 -3
  49. package/transports/routing.js +4 -4
  50. package/transports/routing.js.map +1 -1
  51. package/transports/sse.d.ts +8 -12
  52. package/transports/sse.js +29 -39
  53. package/transports/sse.js.map +1 -1
  54. package/transports/websocket.d.ts +14 -14
  55. package/transports/websocket.js +76 -60
  56. package/transports/websocket.js.map +1 -1
  57. package/util/request.d.ts +90 -11
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/transports/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/transports/metrics.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { AdapterRequest, AdapterResponse } from '../util/request';
2
- import { Transport, TransportGenerics } from './';
3
- import { Cache } from '../cache';
4
1
  import { AxiosRequestConfig, AxiosResponse } from 'axios';
2
+ import { Cache } from '../cache';
3
+ import { ResponseCache } from '../cache/response';
5
4
  import { AdapterConfig } from '../config';
6
5
  import { RequestRateLimiter } from '../rate-limiting';
7
- import { AdapterDependencies } from '../adapter';
6
+ import { AdapterRequest, AdapterResponse, PartialAdapterResponse } from '../util/request';
7
+ import { Transport, TransportDependencies, TransportGenerics } from './';
8
8
  export { AxiosRequestConfig as HttpRequestConfig, AxiosResponse as HttpResponse };
9
9
  /**
10
10
  * Helper struct type that will be used to pass types to the generic parameters of a Transport.
@@ -30,7 +30,7 @@ declare type RestTransportGenerics = TransportGenerics & {
30
30
  */
31
31
  export interface RestTransportConfig<T extends RestTransportGenerics> {
32
32
  prepareRequest: (req: AdapterRequest<T['Request']>, config: AdapterConfig<T['CustomSettings']>) => AxiosRequestConfig<T['Provider']['RequestBody']> | Promise<AxiosRequestConfig<T['Provider']['RequestBody']>>;
33
- parseResponse: (req: AdapterRequest<T['Request']>, res: AxiosResponse<T['Provider']['ResponseBody']>, config: AdapterConfig<T['CustomSettings']>) => AdapterResponse<T['Response']> | Promise<AdapterResponse<T['Response']>>;
33
+ parseResponse: (req: AdapterRequest<T['Request']>, res: AxiosResponse<T['Provider']['ResponseBody']>, config: AdapterConfig<T['CustomSettings']>) => PartialAdapterResponse<T['Response']> | Promise<PartialAdapterResponse<T['Response']>>;
34
34
  options: {
35
35
  requestCoalescing: {
36
36
  enabled: boolean;
@@ -50,11 +50,14 @@ export interface RestTransportConfig<T extends RestTransportGenerics> {
50
50
  export declare class RestTransport<T extends RestTransportGenerics> implements Transport<T> {
51
51
  protected config: RestTransportConfig<T>;
52
52
  inFlightPrefix: string;
53
- cache: Cache<AdapterResponse<T['Response']>>;
53
+ responseCache: ResponseCache<{
54
+ Request: T['Request'];
55
+ Response: T['Response'];
56
+ }>;
54
57
  inFlightCache: Cache<boolean>;
55
58
  rateLimiter: RequestRateLimiter;
56
59
  constructor(config: RestTransportConfig<T>);
57
- initialize(dependencies: AdapterDependencies, config: AdapterConfig<T['CustomSettings']>): Promise<void>;
60
+ initialize(dependencies: TransportDependencies<T>, config: AdapterConfig<T['CustomSettings']>): Promise<void>;
58
61
  protected waitUntilUnderRateLimit(options: {
59
62
  maxRetries: number;
60
63
  msBetweenRetries: number;
@@ -24,10 +24,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.RestTransport = void 0;
27
+ const rateLimitMetrics = __importStar(require("../rate-limiting/metrics"));
27
28
  const util_1 = require("../util");
28
29
  const error_1 = require("../validation/error");
29
30
  const util_2 = require("./util");
30
- const rateLimitMetrics = __importStar(require("../rate-limiting/metrics"));
31
31
  const IN_FLIGHT_PREFIX = 'InFlight';
32
32
  const logger = (0, util_1.makeLogger)('RestTransport');
33
33
  /**
@@ -44,8 +44,8 @@ class RestTransport {
44
44
  this.config = config;
45
45
  }
46
46
  async initialize(dependencies, config) {
47
+ this.responseCache = dependencies.responseCache;
47
48
  this.inFlightPrefix = `${IN_FLIGHT_PREFIX}-`;
48
- this.cache = dependencies.cache;
49
49
  this.inFlightCache = dependencies.cache;
50
50
  this.rateLimiter = dependencies.requestRateLimiter;
51
51
  // Allow enabling/disabling request coalescing through env var
@@ -73,8 +73,8 @@ class RestTransport {
73
73
  const randomMs = Math.random() * (this.config.options.requestCoalescing.entropyMax || 0);
74
74
  await (0, util_1.sleep)(randomMs);
75
75
  // Check if request is in flight if coalescing is enabled
76
- const inFlight = this.config.options.requestCoalescing.enabled &&
77
- (await this.cache.get(this.inFlightPrefix + req.requestContext.cacheKey));
76
+ const inFlightKey = this.inFlightPrefix + req.requestContext.cacheKey;
77
+ const inFlight = this.config.options.requestCoalescing.enabled && (await this.inFlightCache.get(inFlightKey));
78
78
  if (inFlight) {
79
79
  logger.debug('Request is in flight, transport has been set up');
80
80
  return;
@@ -84,7 +84,7 @@ class RestTransport {
84
84
  const ttl = config.REST_TRANSPORT_MAX_RATE_LIMIT_RETRIES *
85
85
  config.REST_TRANSPORT_MS_BETWEEN_RATE_LIMIT_RETRIES;
86
86
  logger.debug('Setting up rest transport, setting request in flight in cache');
87
- await this.inFlightCache.set(this.inFlightPrefix + req.requestContext.cacheKey, true, ttl + 100); // Can't use Infinity for things like Redis
87
+ await this.inFlightCache.set(inFlightKey, true, ttl + 100); // Can't use Infinity for things like Redis
88
88
  }
89
89
  const request = await this.config.prepareRequest(req, config);
90
90
  logger.trace('Check if we are under rate limits to perform request');
@@ -96,20 +96,30 @@ class RestTransport {
96
96
  };
97
97
  await checkForRateLimit();
98
98
  logger.trace('Sending request to data provider...');
99
+ const providerDataRequested = Date.now();
99
100
  const providerResponse = await (0, util_2.axiosRequest)(request, config, checkForRateLimit);
101
+ const providerDataReceived = Date.now();
100
102
  logger.debug(`Got response from provider, parsing (raw body: ${providerResponse.data})`);
101
- const parsedResponse = await this.config.parseResponse(req, providerResponse, config);
103
+ const response = (await this.config.parseResponse(req, providerResponse, config));
104
+ response.timestamps = {
105
+ providerDataRequested,
106
+ providerDataReceived,
107
+ providerIndicatedTime: response.timestamps?.providerIndicatedTime,
108
+ };
102
109
  if (config.API_VERBOSE) {
103
- parsedResponse.data = providerResponse.data;
110
+ response.data = providerResponse.data;
104
111
  }
105
112
  if (config.METRICS_ENABLED && config.EXPERIMENTAL_METRICS_ENABLED) {
106
- parsedResponse.maxAge = Date.now() + config.CACHE_MAX_AGE;
107
- parsedResponse.meta = {
113
+ response.meta = {
108
114
  metrics: { feedId: req.requestContext.meta?.metrics?.feedId || 'N/A' },
109
115
  };
110
116
  }
117
+ const result = {
118
+ params: req.requestContext.data,
119
+ response,
120
+ };
111
121
  logger.debug('Setting provider response in cache');
112
- await this.cache.set(req.requestContext.cacheKey, parsedResponse, config.CACHE_MAX_AGE);
122
+ await this.responseCache.write([result]);
113
123
  // Record cost of data provider call
114
124
  const cost = rateLimitMetrics.retrieveCost(providerResponse.data);
115
125
  rateLimitMetrics.rateLimitCreditsSpentTotal
@@ -125,9 +135,9 @@ class RestTransport {
125
135
  };
126
136
  if (this.config.options.requestCoalescing.enabled) {
127
137
  logger.debug('Set provider response in cache, removing in flight from cache');
128
- await this.cache.delete(this.inFlightPrefix);
138
+ await this.inFlightCache.delete(inFlightKey);
129
139
  }
130
- return parsedResponse;
140
+ return response;
131
141
  }
132
142
  }
133
143
  exports.RestTransport = RestTransport;
@@ -1 +1 @@
1
- {"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../src/transports/rest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../src/transports/rest.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import { AdapterDependencies } from '../adapter';
1
+ import { EndpointContext } from '../adapter';
2
+ import { ResponseCache } from '../cache/response';
2
3
  import { AdapterConfig } from '../config';
3
4
  import { AdapterRequest, AdapterResponse } from '../util';
4
- import { MetaTransport, Transport, TransportGenerics } from './';
5
+ import { MetaTransport, Transport, TransportDependencies, TransportGenerics } from './';
5
6
  /**
6
7
  * Transport implementation that takes 2 or more transports and a function that determines with transport to use.
7
8
  *
@@ -15,7 +16,12 @@ export declare class RoutingTransport<T extends TransportGenerics> implements Me
15
16
  constructor(transports: {
16
17
  [key: string]: Transport<T>;
17
18
  }, route: (req: AdapterRequest<T['Request']>, adapterConfig?: AdapterConfig<T['CustomSettings']>) => string);
18
- initialize(dependencies: AdapterDependencies, adapterConfig: AdapterConfig<T['CustomSettings']>, endpointName: string): Promise<void>;
19
+ responseCache: ResponseCache<{
20
+ Request: T['Request'];
21
+ Response: T['Response'];
22
+ }>;
23
+ backgroundExecute?: ((context: EndpointContext<T>) => Promise<number>) | undefined;
24
+ initialize(dependencies: TransportDependencies<T>, adapterConfig: AdapterConfig<T['CustomSettings']>, endpointName: string): Promise<void>;
19
25
  registerRequest(req: AdapterRequest<T['Request']>, adapterConfig: AdapterConfig<T['CustomSettings']>): Promise<void>;
20
26
  private resolveTransport;
21
27
  foregroundExecute(req: AdapterRequest<T['Request']>, adapterConfig: AdapterConfig<T['CustomSettings']>): Promise<AdapterResponse<any> | void>;
@@ -20,10 +20,10 @@ class RoutingTransport {
20
20
  }
21
21
  async initialize(dependencies, adapterConfig, endpointName) {
22
22
  logger.debug(`Initializing ${Object.keys(this.transports).length} transports`);
23
- Object.entries(this.transports).forEach(([k, v]) => {
24
- logger.debug(`Initializing transport ${k} (${v.constructor.name})`);
25
- v.initialize(dependencies, adapterConfig, endpointName);
26
- });
23
+ await Promise.all(Object.entries(this.transports).map(([name, transport]) => {
24
+ logger.debug(`Initializing transport ${name} (${transport.constructor.name})`);
25
+ return transport.initialize(dependencies, adapterConfig, endpointName);
26
+ }));
27
27
  }
28
28
  async registerRequest(req, adapterConfig) {
29
29
  logger.debug(`registering request using `, req.requestContext.data);
@@ -1 +1 @@
1
- {"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../src/transports/routing.ts"],"names":[],"mappings":";;;AAEA,kCAAqE;AACrE,+CAAkD;AAGlD,MAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,kBAAkB,CAAC,CAAA;AAE7C;;;;GAIG;AACH,MAAa,gBAAgB;IAI3B;IACE,6GAA6G;IACtG,UAA2C;IAClD,+FAA+F;IACvF,KAGG;QALJ,eAAU,GAAV,UAAU,CAAiC;QAE1C,UAAK,GAAL,KAAK,CAGF;IACV,CAAC;IAEJ,KAAK,CAAC,UAAU,CACd,YAAiC,EACjC,aAAiD,EACjD,YAAoB;QAEpB,MAAM,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,aAAa,CAAC,CAAA;QAC9E,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YACjD,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,CAAA;YACnE,CAAC,CAAC,UAAU,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,GAAiC,EACjC,aAAiD;QAEjD,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAEnE,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;QAC3D,IAAI,SAAS,CAAC,eAAe,EAAE;YAC7B,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAA;YAC9D,OAAO,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;SACrD;QACD,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAA;IACvE,CAAC;IAEO,gBAAgB,CACtB,GAAiC,EACjC,aAAkD;QAElD,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,IAAI,SAAS,CAAC,CAAA;QACvD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACzB,MAAM,CAAC,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAA;YACjD,MAAM,IAAI,oBAAY,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,0BAA0B,GAAG,EAAE,EAAE,CAAC,CAAA;SACtF;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACtC,MAAM,CAAC,KAAK,CAAC,SAAS,SAAS,CAAC,WAAW,CAAC,IAAI,qBAAqB,GAAG,EAAE,CAAC,CAAA;QAC3E,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,oFAAoF;IACpF,wDAAwD;IACxD,KAAK,CAAC,iBAAiB,CACrB,GAAiC,EACjC,aAAiD;QAEjD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;QAC3D,IAAI,SAAS,CAAC,iBAAiB,EAAE;YAC/B,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAA;YAChE,OAAO,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;SACvD;QACD,MAAM,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAA;IACzE,CAAC;CACF;AApED,4CAoEC"}
1
+ {"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../src/transports/routing.ts"],"names":[],"mappings":";;;AAGA,kCAAqE;AACrE,+CAAkD;AAGlD,MAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,kBAAkB,CAAC,CAAA;AAE7C;;;;GAIG;AACH,MAAa,gBAAgB;IAI3B;IACE,6GAA6G;IACtG,UAA2C;IAClD,+FAA+F;IACvF,KAGG;QALJ,eAAU,GAAV,UAAU,CAAiC;QAE1C,UAAK,GAAL,KAAK,CAGF;IACV,CAAC;IAOJ,KAAK,CAAC,UAAU,CACd,YAAsC,EACtC,aAAiD,EACjD,YAAoB;QAEpB,MAAM,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,aAAa,CAAC,CAAA;QAC9E,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE;YACxD,MAAM,CAAC,KAAK,CAAC,0BAA0B,IAAI,KAAK,SAAS,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,CAAA;YAC9E,OAAO,SAAS,CAAC,UAAU,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC,CAAA;QACxE,CAAC,CAAC,CACH,CAAA;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,GAAiC,EACjC,aAAiD;QAEjD,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAEnE,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;QAC3D,IAAI,SAAS,CAAC,eAAe,EAAE;YAC7B,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAA;YAC9D,OAAO,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;SACrD;QACD,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAA;IACvE,CAAC;IAEO,gBAAgB,CACtB,GAAiC,EACjC,aAAkD;QAElD,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,IAAI,SAAS,CAAC,CAAA;QACvD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACzB,MAAM,CAAC,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAA;YACjD,MAAM,IAAI,oBAAY,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,0BAA0B,GAAG,EAAE,EAAE,CAAC,CAAA;SACtF;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACtC,MAAM,CAAC,KAAK,CAAC,SAAS,SAAS,CAAC,WAAW,CAAC,IAAI,qBAAqB,GAAG,EAAE,CAAC,CAAA;QAC3E,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,oFAAoF;IACpF,wDAAwD;IACxD,KAAK,CAAC,iBAAiB,CACrB,GAAiC,EACjC,aAAiD;QAEjD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;QAC3D,IAAI,SAAS,CAAC,iBAAiB,EAAE;YAC/B,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAA;YAChE,OAAO,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;SACvD;QACD,MAAM,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAA;IACzE,CAAC;CACF;AA3ED,4CA2EC"}
@@ -1,11 +1,10 @@
1
1
  import { AxiosRequestConfig } from 'axios';
2
2
  import EventSource from 'eventsource';
3
- import { EndpointContext, AdapterDependencies } from '../adapter';
4
- import { Cache } from '../cache';
3
+ import { EndpointContext } from '../adapter';
5
4
  import { AdapterConfig } from '../config';
6
- import { SubscriptionSet } from '../util';
7
- import { AdapterRequest, AdapterResponse, ProviderResult } from '../util/request';
8
- import { Transport, TransportGenerics } from './';
5
+ import { ProviderResult } from '../util/request';
6
+ import { TransportDependencies, TransportGenerics } from './';
7
+ import { StreamingTransport, SubscriptionDeltas } from './abstract/streaming';
9
8
  export interface SSEConfig {
10
9
  url: string;
11
10
  eventSourceInitDict?: EventSource.EventSourceInitDict;
@@ -30,18 +29,15 @@ declare type SSETransportGenerics = TransportGenerics & {
30
29
  *
31
30
  * @typeParam T - Helper struct type that will be used to pass types to the generic parameters (check [[SSETransportGenerics]])
32
31
  */
33
- export declare class SSETransport<T extends SSETransportGenerics> implements Transport<T> {
32
+ export declare class SSETransport<T extends SSETransportGenerics> extends StreamingTransport<T> {
34
33
  private config;
35
34
  EventSource: typeof EventSource;
36
- cache: Cache<AdapterResponse<T['Response']>>;
37
35
  eventListeners: {
38
36
  type: string;
39
37
  parseResponse: (evt: MessageEvent) => ProviderResult<T>;
40
38
  }[];
41
39
  sseConnection?: EventSource;
42
- subscriptionSet: SubscriptionSet<T['Request']['Params']>;
43
40
  timeOfLastReq: number;
44
- localSubscriptions: T['Request']['Params'][];
45
41
  constructor(config: {
46
42
  prepareSSEConnectionConfig: (params: T['Request']['Params'][], context: EndpointContext<T>) => SSEConfig;
47
43
  prepareKeepAliveRequest?: (context: EndpointContext<T>) => AxiosRequestConfig<T['Provider']['RequestBody']>;
@@ -54,8 +50,8 @@ export declare class SSETransport<T extends SSETransportGenerics> implements Tra
54
50
  keepaliveSleepMs?: number;
55
51
  pollingSleepMs?: number;
56
52
  });
57
- initialize(dependencies: AdapterDependencies, config: AdapterConfig<T['CustomSettings']>, endpointName: string): Promise<void>;
58
- registerRequest(req: AdapterRequest<T['Request']>, config: AdapterConfig<T['CustomSettings']>): Promise<void>;
59
- backgroundExecute(context: EndpointContext<T>): Promise<number>;
53
+ getSubscriptionTtlFromConfig(config: AdapterConfig<T['CustomSettings']>): number;
54
+ initialize(dependencies: TransportDependencies<T>, config: AdapterConfig<T['CustomSettings']>, endpointName: string): Promise<void>;
55
+ streamHandler(context: EndpointContext<T>, subscriptions: SubscriptionDeltas<T['Request']['Params']>): Promise<void>;
60
56
  }
61
57
  export {};
package/transports/sse.js CHANGED
@@ -7,57 +7,50 @@ exports.SSETransport = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
8
  const eventsource_1 = __importDefault(require("eventsource"));
9
9
  const util_1 = require("../util");
10
- const _1 = require("./");
10
+ const streaming_1 = require("./abstract/streaming");
11
11
  const logger = (0, util_1.makeLogger)('SSETransport');
12
12
  /**
13
13
  * Transport implementation that establishes a long lived connection to a server using the SSE protocol and subcribes to updates.
14
14
  *
15
15
  * @typeParam T - Helper struct type that will be used to pass types to the generic parameters (check [[SSETransportGenerics]])
16
16
  */
17
- class SSETransport {
17
+ class SSETransport extends streaming_1.StreamingTransport {
18
18
  constructor(config) {
19
+ super();
19
20
  this.config = config;
20
21
  this.EventSource = eventsource_1.default;
21
22
  this.timeOfLastReq = 0;
22
- // The double sets serve to create a simple polling mechanism instead of needing a subscription
23
- // This one would not; this is always local state
24
- this.localSubscriptions = [];
23
+ }
24
+ getSubscriptionTtlFromConfig(config) {
25
+ return config.SSE_SUBSCRIPTION_TTL;
25
26
  }
26
27
  async initialize(dependencies, config, endpointName) {
27
- this.cache = dependencies.cache;
28
- this.subscriptionSet = dependencies.subscriptionSetFactory.buildSet(endpointName);
28
+ super.initialize(dependencies, config, endpointName);
29
29
  if (dependencies.eventSource) {
30
30
  this.EventSource = dependencies.eventSource;
31
31
  }
32
32
  }
33
- async registerRequest(req, config) {
34
- logger.debug(`Adding entry to subscription set (ttl: ${config.SSE_SUBSCRIPTION_TTL}): [${req.requestContext.cacheKey}] = ${req.requestContext.data}`);
35
- await this.subscriptionSet.add(req.requestContext.cacheKey, req.requestContext.data, config.SSE_SUBSCRIPTION_TTL);
36
- }
37
- // Unlike cache warming, this execute will manage subscriptions
38
- async backgroundExecute(context) {
39
- logger.debug('Starting background execute, getting subscriptions from sorted set');
40
- const desiredSubs = await this.subscriptionSet.getAll();
41
- logger.debug('Generating delta (subscribes & unsubscribes)');
42
- const subscribeParams = desiredSubs.filter((s) => !this.localSubscriptions.includes(s));
43
- const unsubscribeParams = this.localSubscriptions.filter((s) => !desiredSubs.includes(s));
44
- logger.debug(`${subscribeParams.length} new subscriptions; ${unsubscribeParams.length} to unsubscribe`);
45
- if (subscribeParams.length) {
46
- logger.trace(`Will subscribe to: ${subscribeParams}`);
47
- }
48
- if (unsubscribeParams.length) {
49
- logger.trace(`Will unsubscribe to: ${unsubscribeParams}`);
50
- }
51
- if ((subscribeParams.length || unsubscribeParams.length) &&
33
+ async streamHandler(context, subscriptions) {
34
+ if ((subscriptions.new.length || subscriptions.stale.length) &&
52
35
  (!this.sseConnection || this.sseConnection.readyState !== this.sseConnection.OPEN)) {
53
36
  logger.debug('No established connection and new subscriptions available, connecting to SSE');
54
- const sseConfig = this.config.prepareSSEConnectionConfig(subscribeParams, context);
37
+ const sseConfig = this.config.prepareSSEConnectionConfig(subscriptions.new, context);
38
+ this.providerDataStreamEstablished = Date.now();
55
39
  this.sseConnection = new this.EventSource(sseConfig.url, sseConfig.eventSourceInitDict);
56
40
  const eventHandlerGenerator = (listener) => {
57
41
  return (e) => {
58
- const providerResponses = listener.parseResponse(e);
59
- const cacheEntries = (0, _1.buildCacheEntriesFromResults)(providerResponses, context);
60
- this.cache.setMany(cacheEntries, context.adapterConfig.CACHE_MAX_AGE);
42
+ const providerDataReceived = Date.now();
43
+ const results = listener.parseResponse(e).map((r) => {
44
+ const partialResponse = r.response;
45
+ const result = r;
46
+ result.response.timestamps = {
47
+ providerDataStreamEstablished: this.providerDataStreamEstablished,
48
+ providerDataReceived,
49
+ providerIndicatedTime: partialResponse.timestamps?.providerIndicatedTime,
50
+ };
51
+ return result;
52
+ });
53
+ this.responseCache.write(results);
61
54
  };
62
55
  };
63
56
  this.config.eventListeners.forEach((listener) => {
@@ -74,24 +67,21 @@ class SSETransport {
74
67
  }
75
68
  this.timeOfLastReq = Date.now();
76
69
  };
77
- if (subscribeParams.length) {
78
- const subscribeRequest = this.config.prepareSubscriptionRequest(subscribeParams, context);
70
+ if (subscriptions.new.length) {
71
+ const subscribeRequest = this.config.prepareSubscriptionRequest(subscriptions.new, context);
79
72
  makeRequest(subscribeRequest);
80
73
  }
81
- if (unsubscribeParams.length) {
82
- const unsubscribeRequest = this.config.prepareUnsubscriptionRequest(unsubscribeParams, context);
74
+ if (subscriptions.stale.length) {
75
+ const unsubscribeRequest = this.config.prepareUnsubscriptionRequest(subscriptions.stale, context);
83
76
  makeRequest(unsubscribeRequest);
84
77
  }
85
78
  if (this.config.prepareKeepAliveRequest &&
86
- desiredSubs.length &&
79
+ subscriptions.desired.length &&
87
80
  Date.now() - this.timeOfLastReq > context.adapterConfig.SSE_KEEPALIVE_SLEEP) {
88
81
  const prepareKeepAliveRequest = this.config.prepareKeepAliveRequest(context);
89
82
  makeRequest(prepareKeepAliveRequest);
90
83
  }
91
- logger.debug('Setting local state to cache value');
92
- this.localSubscriptions = desiredSubs;
93
- logger.debug('Background execute complete');
94
- return context.adapterConfig.SSE_SUBSCRIPTION_UPDATE_SLEEP;
84
+ return;
95
85
  }
96
86
  }
97
87
  exports.SSETransport = SSETransport;
@@ -1 +1 @@
1
- {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../../src/transports/sse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../../src/transports/sse.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,9 @@
1
1
  import WebSocket, { ClientOptions, RawData } from 'ws';
2
- import { AdapterDependencies, EndpointContext } from '../adapter';
3
- import { Cache } from '../cache';
2
+ import { EndpointContext } from '../adapter';
4
3
  import { AdapterConfig } from '../config';
5
- import { BackgroundExecuteRateLimiter } from '../rate-limiting';
6
- import { SubscriptionSet } from '../util';
7
- import { AdapterRequest, AdapterResponse, ProviderResult } from '../util/request';
8
- import { Transport, TransportGenerics } from './';
4
+ import { ProviderResult } from '../util/request';
5
+ import { TransportGenerics } from './';
6
+ import { StreamingTransport, SubscriptionDeltas } from './abstract/streaming';
9
7
  export { WebSocket, RawData as WebSocketRawData };
10
8
  declare type WebSocketClass = new (url: string, protocols?: string | string[] | undefined, options?: ClientOptions) => WebSocket;
11
9
  export declare class WebSocketClassProvider {
@@ -79,21 +77,23 @@ declare type WebsocketTransportGenerics = TransportGenerics & {
79
77
  *
80
78
  * @typeParam T - Helper struct type that will be used to pass types to the generic parameters (check [[WebsocketTransportGenerics]])
81
79
  */
82
- export declare class WebSocketTransport<T extends WebsocketTransportGenerics> implements Transport<T> {
80
+ export declare class WebSocketTransport<T extends WebsocketTransportGenerics> extends StreamingTransport<T> {
83
81
  private config;
84
- cache: Cache<AdapterResponse<T['Response']>>;
85
- rateLimiter: BackgroundExecuteRateLimiter;
86
- subscriptionSet: SubscriptionSet<T['Request']['Params']>;
87
- localSubscriptions: T['Request']['Params'][];
88
82
  wsConnection: WebSocket;
89
83
  currentUrl: string;
84
+ lastMessageReceivedAt: number;
90
85
  constructor(config: WebSocketTransportConfig<T>);
91
- initialize(dependencies: AdapterDependencies, config: AdapterConfig<T['CustomSettings']>, endpointName: string): Promise<void>;
92
- registerRequest(req: AdapterRequest<T['Request']>, config: AdapterConfig<T['CustomSettings']>): Promise<void>;
86
+ getSubscriptionTtlFromConfig(config: AdapterConfig<T['CustomSettings']>): number;
93
87
  connectionClosed(): boolean;
94
88
  serializeMessage(payload: unknown): string;
95
89
  deserializeMessage(data: WebSocket.Data): T['Provider']['WsMessage'];
90
+ buildConnectionHandlers(context: EndpointContext<T>, connectionReadyResolve: (value: unknown) => void): {
91
+ open: (event: WebSocket.Event) => Promise<void>;
92
+ message: (event: WebSocket.MessageEvent) => Promise<void>;
93
+ error: (event: WebSocket.ErrorEvent) => Promise<void>;
94
+ close: (event: WebSocket.CloseEvent) => void;
95
+ };
96
96
  establishWsConnection(context: EndpointContext<T>, url: string, options?: WebSocket.ClientOptions | undefined): Promise<unknown>;
97
97
  sendMessages(context: EndpointContext<T>, subscribes: unknown[], unsubscribes: unknown[]): Promise<void>;
98
- backgroundExecute(context: EndpointContext<T>): Promise<number>;
98
+ streamHandler(context: EndpointContext<T>, subscriptions: SubscriptionDeltas<T['Request']['Params']>): Promise<void>;
99
99
  }