@chainlink/external-adapter-framework 0.26.1 → 0.27.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.
- package/adapter/basic.d.ts +9 -19
- package/adapter/basic.js +43 -63
- package/adapter/basic.js.map +1 -1
- package/adapter/endpoint.d.ts +7 -7
- package/adapter/endpoint.js +17 -25
- package/adapter/endpoint.js.map +1 -1
- package/adapter/price.d.ts +3 -3
- package/adapter/price.js.map +1 -1
- package/adapter/types.d.ts +12 -14
- package/background-executor.js +7 -7
- package/background-executor.js.map +1 -1
- package/cache/index.d.ts +4 -5
- package/cache/index.js +8 -8
- package/cache/index.js.map +1 -1
- package/cache/response.d.ts +4 -4
- package/cache/response.js +7 -6
- package/cache/response.js.map +1 -1
- package/config/index.d.ts +64 -16
- package/config/index.js +88 -26
- package/config/index.js.map +1 -1
- package/index.d.ts +4 -4
- package/index.js +25 -21
- package/index.js.map +1 -1
- package/metrics/index.d.ts +10 -8
- package/metrics/index.js +23 -11
- package/metrics/index.js.map +1 -1
- package/metrics/util.d.ts +1 -2
- package/metrics/util.js.map +1 -1
- package/package.json +2 -2
- package/rate-limiting/index.d.ts +4 -4
- package/rate-limiting/index.js +13 -13
- package/rate-limiting/index.js.map +1 -1
- package/transports/abstract/subscription.d.ts +5 -6
- package/transports/abstract/subscription.js +4 -4
- package/transports/abstract/subscription.js.map +1 -1
- package/transports/http.d.ts +8 -9
- package/transports/http.js +14 -14
- package/transports/http.js.map +1 -1
- package/transports/index.d.ts +15 -8
- package/transports/index.js +28 -0
- package/transports/index.js.map +1 -1
- package/transports/metrics.d.ts +1 -2
- package/transports/metrics.js.map +1 -1
- package/transports/sse.d.ts +3 -4
- package/transports/sse.js +8 -8
- package/transports/sse.js.map +1 -1
- package/transports/websocket.d.ts +3 -4
- package/transports/websocket.js +34 -18
- package/transports/websocket.js.map +1 -1
- package/util/index.d.ts +10 -0
- package/util/index.js +23 -1
- package/util/index.js.map +1 -1
- package/util/logger.js +1 -1
- package/util/logger.js.map +1 -1
- package/util/requester.d.ts +2 -2
- package/util/requester.js +4 -4
- package/util/requester.js.map +1 -1
- package/util/subscription-set/subscription-set.d.ts +2 -2
- package/util/subscription-set/subscription-set.js +3 -3
- package/util/subscription-set/subscription-set.js.map +1 -1
- package/validation/index.js +11 -10
- package/validation/index.js.map +1 -1
package/transports/http.js
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HttpTransport = void 0;
|
|
4
4
|
const axios_1 = require("axios");
|
|
5
|
+
const cache_1 = require("../cache");
|
|
6
|
+
const metrics_1 = require("../metrics");
|
|
5
7
|
const util_1 = require("../util");
|
|
6
8
|
const error_1 = require("../validation/error");
|
|
7
9
|
const subscription_1 = require("./abstract/subscription");
|
|
8
|
-
const metrics_1 = require("../metrics");
|
|
9
|
-
const cache_1 = require("../cache");
|
|
10
10
|
const WARMUP_BATCH_REQUEST_ID = '9002';
|
|
11
11
|
const logger = (0, util_1.makeLogger)('HttpTransport');
|
|
12
12
|
/**
|
|
@@ -27,22 +27,22 @@ class HttpTransport extends subscription_1.SubscriptionTransport {
|
|
|
27
27
|
// Used for recording the cache warmer active metrics accurately
|
|
28
28
|
this.WARMER_ACTIVE = false;
|
|
29
29
|
}
|
|
30
|
-
async initialize(dependencies,
|
|
31
|
-
await super.initialize(dependencies,
|
|
30
|
+
async initialize(dependencies, adapterSettings, endpointName, transportName) {
|
|
31
|
+
await super.initialize(dependencies, adapterSettings, endpointName, transportName);
|
|
32
32
|
this.requester = dependencies.requester;
|
|
33
33
|
}
|
|
34
|
-
getSubscriptionTtlFromConfig(
|
|
35
|
-
return
|
|
34
|
+
getSubscriptionTtlFromConfig(adapterSettings) {
|
|
35
|
+
return adapterSettings.WARMUP_SUBSCRIPTION_TTL;
|
|
36
36
|
}
|
|
37
37
|
async backgroundHandler(context, entries) {
|
|
38
38
|
if (!entries.length) {
|
|
39
|
-
logger.debug(`No entries in subscription set, sleeping for ${context.
|
|
39
|
+
logger.debug(`No entries in subscription set, sleeping for ${context.adapterSettings.BACKGROUND_EXECUTE_MS_HTTP}ms...`);
|
|
40
40
|
if (this.WARMER_ACTIVE) {
|
|
41
41
|
// Decrement count when warmer changed from having entries to having none
|
|
42
42
|
metrics_1.metrics.get('cacheWarmerCount').labels({ isBatched: 'true' }).dec();
|
|
43
43
|
this.WARMER_ACTIVE = false;
|
|
44
44
|
}
|
|
45
|
-
await (0, util_1.sleep)(context.
|
|
45
|
+
await (0, util_1.sleep)(context.adapterSettings.BACKGROUND_EXECUTE_MS_HTTP);
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
48
|
else if (this.WARMER_ACTIVE === false) {
|
|
@@ -51,7 +51,7 @@ class HttpTransport extends subscription_1.SubscriptionTransport {
|
|
|
51
51
|
this.WARMER_ACTIVE = true;
|
|
52
52
|
}
|
|
53
53
|
logger.trace(`Have ${entries.length} entries in batch, preparing requests...`);
|
|
54
|
-
const rawRequests = this.config.prepareRequests(entries, context.
|
|
54
|
+
const rawRequests = this.config.prepareRequests(entries, context.adapterSettings);
|
|
55
55
|
const requests = Array.isArray(rawRequests) ? rawRequests : [rawRequests];
|
|
56
56
|
// We're awaiting these promises because although we have request coalescing, new entries
|
|
57
57
|
// could be added to the subscription set if not blocking this operation, so the next time the
|
|
@@ -64,14 +64,14 @@ class HttpTransport extends subscription_1.SubscriptionTransport {
|
|
|
64
64
|
logger.trace(`All requests in the background execute were completed`);
|
|
65
65
|
// These logs will surface warnings that operators should take action on, in case the execution of all
|
|
66
66
|
// requests is taking too long so that entries could have expired within this timeframe
|
|
67
|
-
if (duration > context.
|
|
67
|
+
if (duration > context.adapterSettings.WARMUP_SUBSCRIPTION_TTL) {
|
|
68
68
|
logger.warn(`Background execution of all HTTP requests in a batch took ${duration},\
|
|
69
|
-
which is longer than the subscription TTL (${context.
|
|
69
|
+
which is longer than the subscription TTL (${context.adapterSettings.WARMUP_SUBSCRIPTION_TTL}).\
|
|
70
70
|
This might be due to insufficient speed on the selected API tier, please check metrics and logs to confirm and consider moving to a faster tier.`);
|
|
71
71
|
}
|
|
72
|
-
if (duration > context.
|
|
72
|
+
if (duration > context.adapterSettings.CACHE_MAX_AGE) {
|
|
73
73
|
logger.warn(`Background execution of all HTTP requests in a batch took ${duration},\
|
|
74
|
-
which is longer than the max cache age (${context.
|
|
74
|
+
which is longer than the max cache age (${context.adapterSettings.CACHE_MAX_AGE}).\
|
|
75
75
|
This might be due to insufficient speed on the selected API tier, please check metrics and logs to confirm and consider moving to a faster tier.`);
|
|
76
76
|
}
|
|
77
77
|
// We're not sleeping here on purpose. We sleep when there are no entries in the subscription set to avoid polling too
|
|
@@ -108,7 +108,7 @@ class HttpTransport extends subscription_1.SubscriptionTransport {
|
|
|
108
108
|
}), requestConfig.request);
|
|
109
109
|
// Parse responses and apply timestamps
|
|
110
110
|
const results = this.config
|
|
111
|
-
.parseResponse(requestConfig.params, requesterResult.response, context.
|
|
111
|
+
.parseResponse(requestConfig.params, requesterResult.response, context.adapterSettings)
|
|
112
112
|
.map((r) => {
|
|
113
113
|
const result = r;
|
|
114
114
|
const partialResponse = r.response;
|
package/transports/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/transports/http.ts"],"names":[],"mappings":";;;AAAA,iCAAqE;AAGrE,kCAA2C;AAG3C,+CAAqF;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/transports/http.ts"],"names":[],"mappings":"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"}
|
package/transports/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AdapterDependencies, EndpointContext } from '../adapter';
|
|
2
2
|
import { ResponseCache } from '../cache/response';
|
|
3
|
-
import {
|
|
3
|
+
import { BaseAdapterSettings } from '../config';
|
|
4
4
|
import { AdapterRequest, AdapterResponse, RequestGenerics, ResponseGenerics } from '../util/types';
|
|
5
5
|
export * from './http';
|
|
6
6
|
export * from './sse';
|
|
@@ -25,7 +25,7 @@ export type TransportGenerics = {
|
|
|
25
25
|
/**
|
|
26
26
|
* Type for any custom settings used for this Transport
|
|
27
27
|
*/
|
|
28
|
-
|
|
28
|
+
Settings: BaseAdapterSettings;
|
|
29
29
|
};
|
|
30
30
|
/**
|
|
31
31
|
* Extended dependencies with necessary tools for a transport
|
|
@@ -59,19 +59,19 @@ export interface Transport<T extends TransportGenerics> {
|
|
|
59
59
|
* Initializes the transport in the Adapter context.
|
|
60
60
|
*
|
|
61
61
|
* @param dependencies - Adapter dependencies (e.g. cache instance)
|
|
62
|
-
* @param
|
|
62
|
+
* @param adapterSettings - Adapter config containing env vars
|
|
63
63
|
* @returns an empty Promise
|
|
64
64
|
*/
|
|
65
|
-
initialize: (dependencies: TransportDependencies<T>,
|
|
65
|
+
initialize: (dependencies: TransportDependencies<T>, adapterSettings: T['Settings'], endpointName: string, transportName: string) => Promise<void>;
|
|
66
66
|
/**
|
|
67
67
|
* Registers a request within the context of the transport.
|
|
68
68
|
* This means things like adding the request to a subscription set.
|
|
69
69
|
*
|
|
70
70
|
* @param req - the incoming AdapterRequest
|
|
71
|
-
* @param
|
|
71
|
+
* @param adapterSettings - common configuration for the Adapter as a whole
|
|
72
72
|
* @returns an empty Promise
|
|
73
73
|
*/
|
|
74
|
-
registerRequest?: (req: AdapterRequest<T['Request']>,
|
|
74
|
+
registerRequest?: (req: AdapterRequest<T['Request']>, adapterSettings: T['Settings']) => Promise<void>;
|
|
75
75
|
/**
|
|
76
76
|
* Performs a synchronous fetch/processing of information within the lifecycle of an incoming request.
|
|
77
77
|
* This is mostly intended to be used as a backwards compatibility mechanism, or for very specific cases where
|
|
@@ -80,11 +80,11 @@ export interface Transport<T extends TransportGenerics> {
|
|
|
80
80
|
* to perform as much of the work as possible (or all of it) in the backgroundExecute method.
|
|
81
81
|
*
|
|
82
82
|
* @param req - the incoming AdapterRequest
|
|
83
|
-
* @param
|
|
83
|
+
* @param adapterSettings - common configuration for the Adapter as a whole
|
|
84
84
|
* @returns a Promise that _optionally_ returns an AdapterResponse, if the Transport has the capability of
|
|
85
85
|
* immediately fetching data and returning it without the background process.
|
|
86
86
|
*/
|
|
87
|
-
foregroundExecute?: (req: AdapterRequest<T['Request']>,
|
|
87
|
+
foregroundExecute?: (req: AdapterRequest<T['Request']>, adapterSettings: T['Settings']) => Promise<AdapterResponse<{
|
|
88
88
|
Data: T['Response']['Data'];
|
|
89
89
|
Result: T['Response']['Result'];
|
|
90
90
|
}> | void>;
|
|
@@ -97,3 +97,10 @@ export interface Transport<T extends TransportGenerics> {
|
|
|
97
97
|
*/
|
|
98
98
|
backgroundExecute?: (context: EndpointContext<T>) => Promise<void>;
|
|
99
99
|
}
|
|
100
|
+
export declare class TransportRoutes<T extends TransportGenerics> {
|
|
101
|
+
private map;
|
|
102
|
+
register<T2 extends T>(name: string, transport: Transport<T2>): this;
|
|
103
|
+
get(name: string): Transport<T>;
|
|
104
|
+
routeNames(): string[];
|
|
105
|
+
entries(): [string, Transport<T>][];
|
|
106
|
+
}
|
package/transports/index.js
CHANGED
|
@@ -14,7 +14,35 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.TransportRoutes = void 0;
|
|
18
|
+
const adapter_1 = require("../adapter");
|
|
17
19
|
__exportStar(require("./http"), exports);
|
|
18
20
|
__exportStar(require("./sse"), exports);
|
|
19
21
|
__exportStar(require("./websocket"), exports);
|
|
22
|
+
class TransportRoutes {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.map = {};
|
|
25
|
+
}
|
|
26
|
+
register(name, transport) {
|
|
27
|
+
// This is intentional, to keep names to one word only
|
|
28
|
+
if (name !== adapter_1.DEFAULT_TRANSPORT_NAME && !/^[a-z]+$/.test(name)) {
|
|
29
|
+
throw new Error(`Transport name "${name}" is invalid. Names in the AdapterEndpoint transports map can only include lowercase letters.`);
|
|
30
|
+
}
|
|
31
|
+
if (this.map[name]) {
|
|
32
|
+
throw new Error(`Transport with name "${name}" is already registered in this map`);
|
|
33
|
+
}
|
|
34
|
+
this.map[name] = transport;
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
get(name) {
|
|
38
|
+
return this.map[name];
|
|
39
|
+
}
|
|
40
|
+
routeNames() {
|
|
41
|
+
return Object.keys(this.map);
|
|
42
|
+
}
|
|
43
|
+
entries() {
|
|
44
|
+
return Object.entries(this.map);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.TransportRoutes = TransportRoutes;
|
|
20
48
|
//# sourceMappingURL=index.js.map
|
package/transports/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transports/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transports/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,wCAAyF;AAKzF,yCAAsB;AACtB,wCAAqB;AACrB,8CAA2B;AAkH3B,MAAa,eAAe;IAA5B;QACU,QAAG,GAAiC,EAAE,CAAA;IA2BhD,CAAC;IAzBC,QAAQ,CAAe,IAAY,EAAE,SAAwB;QAC3D,sDAAsD;QACtD,IAAI,IAAI,KAAK,gCAAsB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC7D,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,+FAA+F,CACvH,CAAA;SACF;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,qCAAqC,CAAC,CAAA;SACnF;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,SAAoC,CAAA;QACrD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAED,UAAU;QACR,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED,OAAO;QACL,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;CACF;AA5BD,0CA4BC"}
|
package/transports/metrics.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { TransportGenerics } from '.';
|
|
2
2
|
import { EndpointContext } from '../adapter';
|
|
3
|
-
import { AdapterConfig } from '../config';
|
|
4
3
|
import { InputParameters } from '../validation';
|
|
5
4
|
export declare const connectionErrorLabels: (message: string) => {
|
|
6
5
|
message: string;
|
|
@@ -9,7 +8,7 @@ export type MessageDirection = 'sent' | 'received';
|
|
|
9
8
|
export declare const messageSubsLabels: <T extends TransportGenerics>(context: {
|
|
10
9
|
inputParameters: InputParameters;
|
|
11
10
|
endpointName: string;
|
|
12
|
-
|
|
11
|
+
adapterSettings: T["Settings"];
|
|
13
12
|
}, params: T["Request"]["Params"]) => {
|
|
14
13
|
feed_id: string;
|
|
15
14
|
subscription_key: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/transports/metrics.ts"],"names":[],"mappings":";;;AAEA,oCAA0C;
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/transports/metrics.ts"],"names":[],"mappings":";;;AAEA,oCAA0C;AAC1C,wCAAoC;AAGpC,oBAAoB;AACb,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,CAAC;IACzD,OAAO;IACP,OAAO;CACR,CAAC,CAAA;AAHW,QAAA,qBAAqB,yBAGhC;AAIK,MAAM,iBAAiB,GAAG,CAC/B,OAIC,EACD,MAA8B,EAC9B,EAAE;IACF,MAAM,MAAM,GAAG,IAAA,uBAAe,EAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAE/C,OAAO;QACL,OAAO,EAAE,MAAM;QACf,gBAAgB,EAAE,GAAG,OAAO,CAAC,YAAY,IAAI,MAAM,EAAE;KACtD,CAAA;AACH,CAAC,CAAA;AAdY,QAAA,iBAAiB,qBAc7B;AAED,6CAA6C;AAC7C,8CAA8C;AAC9C,2DAA2D;AACpD,MAAM,sBAAsB,GAAG,CACpC,OAA2B,EAC3B,UAAoC,EACpC,YAAsC,EAChC,EAAE;IACR,MAAM,aAAa,GAAG,CAAC,MAA8B,EAAE,IAAqB,EAAE,EAAE;QAC9E,MAAM,UAAU,GAAG,IAAA,yBAAiB,EAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAErD,0CAA0C;QAC1C,iBAAO;aACJ,GAAG,CAAC,gBAAgB,CAAC;aACrB,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;aAC5C,GAAG,EAAE,CAAA;QAER,4CAA4C;QAC5C,IAAI,IAAI,KAAK,KAAK,EAAE;YAClB,iBAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAA;YAC3D,iBAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAA;SAC7D;aAAM;YACL,iBAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAA;SAC7D;IACH,CAAC,CAAA;IAED,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC5B,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IACF,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC9B,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AA7BY,QAAA,sBAAsB,0BA6BlC"}
|
package/transports/sse.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { AxiosRequestConfig } from 'axios';
|
|
2
2
|
import EventSource from 'eventsource';
|
|
3
3
|
import { EndpointContext } from '../adapter';
|
|
4
|
-
import {
|
|
4
|
+
import { Requester } from '../util/requester';
|
|
5
5
|
import { ProviderResult } from '../util/types';
|
|
6
6
|
import { TransportDependencies, TransportGenerics } from './';
|
|
7
7
|
import { StreamingTransport, SubscriptionDeltas } from './abstract/streaming';
|
|
8
|
-
import { Requester } from '../util/requester';
|
|
9
8
|
export interface SSEConfig {
|
|
10
9
|
url: string;
|
|
11
10
|
eventSourceInitDict?: EventSource.EventSourceInitDict;
|
|
@@ -52,8 +51,8 @@ export declare class SseTransport<T extends SSETransportGenerics> extends Stream
|
|
|
52
51
|
keepaliveSleepMs?: number;
|
|
53
52
|
pollingSleepMs?: number;
|
|
54
53
|
});
|
|
55
|
-
getSubscriptionTtlFromConfig(
|
|
56
|
-
initialize(dependencies: TransportDependencies<T>,
|
|
54
|
+
getSubscriptionTtlFromConfig(adapterSettings: T['Settings']): number;
|
|
55
|
+
initialize(dependencies: TransportDependencies<T>, adapterSettings: T['Settings'], endpointName: string, transportName: string): Promise<void>;
|
|
57
56
|
streamHandler(context: EndpointContext<T>, subscriptions: SubscriptionDeltas<T['Request']['Params']>): Promise<void>;
|
|
58
57
|
}
|
|
59
58
|
export {};
|
package/transports/sse.js
CHANGED
|
@@ -5,9 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.SseTransport = void 0;
|
|
7
7
|
const eventsource_1 = __importDefault(require("eventsource"));
|
|
8
|
+
const cache_1 = require("../cache");
|
|
8
9
|
const util_1 = require("../util");
|
|
9
10
|
const streaming_1 = require("./abstract/streaming");
|
|
10
|
-
const cache_1 = require("../cache");
|
|
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.
|
|
@@ -21,11 +21,11 @@ class SseTransport extends streaming_1.StreamingTransport {
|
|
|
21
21
|
this.EventSource = eventsource_1.default;
|
|
22
22
|
this.timeOfLastReq = 0;
|
|
23
23
|
}
|
|
24
|
-
getSubscriptionTtlFromConfig(
|
|
25
|
-
return
|
|
24
|
+
getSubscriptionTtlFromConfig(adapterSettings) {
|
|
25
|
+
return adapterSettings.SSE_SUBSCRIPTION_TTL;
|
|
26
26
|
}
|
|
27
|
-
async initialize(dependencies,
|
|
28
|
-
super.initialize(dependencies,
|
|
27
|
+
async initialize(dependencies, adapterSettings, endpointName, transportName) {
|
|
28
|
+
super.initialize(dependencies, adapterSettings, endpointName, transportName);
|
|
29
29
|
this.requester = dependencies.requester;
|
|
30
30
|
if (dependencies.eventSource) {
|
|
31
31
|
this.EventSource = dependencies.eventSource;
|
|
@@ -80,7 +80,7 @@ class SseTransport extends streaming_1.StreamingTransport {
|
|
|
80
80
|
}
|
|
81
81
|
if (this.config.prepareKeepAliveRequest &&
|
|
82
82
|
subscriptions.desired.length &&
|
|
83
|
-
Date.now() - this.timeOfLastReq > context.
|
|
83
|
+
Date.now() - this.timeOfLastReq > context.adapterSettings.SSE_KEEPALIVE_SLEEP) {
|
|
84
84
|
const prepareKeepAliveRequest = this.config.prepareKeepAliveRequest(context);
|
|
85
85
|
makeRequest((0, cache_1.calculateHttpRequestKey)({
|
|
86
86
|
context,
|
|
@@ -89,8 +89,8 @@ class SseTransport extends streaming_1.StreamingTransport {
|
|
|
89
89
|
}), prepareKeepAliveRequest);
|
|
90
90
|
}
|
|
91
91
|
// The background execute loop no longer sleeps between executions, so we have to do it here
|
|
92
|
-
logger.trace(`SSE handler complete, sleeping for ${context.
|
|
93
|
-
await (0, util_1.sleep)(context.
|
|
92
|
+
logger.trace(`SSE handler complete, sleeping for ${context.adapterSettings.BACKGROUND_EXECUTE_MS_SSE}ms...`);
|
|
93
|
+
await (0, util_1.sleep)(context.adapterSettings.BACKGROUND_EXECUTE_MS_SSE);
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
96
|
}
|
package/transports/sse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../../src/transports/sse.ts"],"names":[],"mappings":";;;;;;AACA,8DAAqC;
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../../src/transports/sse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import WebSocket, { ClientOptions, RawData } from 'ws';
|
|
2
2
|
import { EndpointContext } from '../adapter';
|
|
3
|
-
import { AdapterConfig } from '../config';
|
|
4
3
|
import { ProviderResult } from '../util/types';
|
|
5
4
|
import { TransportGenerics } from './';
|
|
6
5
|
import { StreamingTransport, SubscriptionDeltas } from './abstract/streaming';
|
|
@@ -84,17 +83,17 @@ export declare class WebSocketTransport<T extends WebsocketTransportGenerics> ex
|
|
|
84
83
|
lastMessageReceivedAt: number;
|
|
85
84
|
connectionOpenedAt: number;
|
|
86
85
|
constructor(config: WebSocketTransportConfig<T>);
|
|
87
|
-
getSubscriptionTtlFromConfig(
|
|
86
|
+
getSubscriptionTtlFromConfig(adapterSettings: T['Settings']): number;
|
|
88
87
|
connectionClosed(): boolean;
|
|
89
88
|
serializeMessage(payload: unknown): string;
|
|
90
89
|
deserializeMessage(data: WebSocket.Data): T['Provider']['WsMessage'];
|
|
91
|
-
buildConnectionHandlers(context: EndpointContext<T>, connectionReadyResolve: (value:
|
|
90
|
+
buildConnectionHandlers(context: EndpointContext<T>, connectionReadyResolve: (value: WebSocket) => void): {
|
|
92
91
|
open: (event: WebSocket.Event) => Promise<void>;
|
|
93
92
|
message: (event: WebSocket.MessageEvent) => Promise<void>;
|
|
94
93
|
error: (event: WebSocket.ErrorEvent) => Promise<void>;
|
|
95
94
|
close: (event: WebSocket.CloseEvent) => void;
|
|
96
95
|
};
|
|
97
|
-
establishWsConnection(context: EndpointContext<T>, url: string, options?: WebSocket.ClientOptions | undefined): Promise<
|
|
96
|
+
establishWsConnection(context: EndpointContext<T>, url: string, options?: WebSocket.ClientOptions | undefined): Promise<void>;
|
|
98
97
|
sendMessages(context: EndpointContext<T>, subscribes: unknown[], unsubscribes: unknown[]): Promise<void>;
|
|
99
98
|
streamHandler(context: EndpointContext<T>, subscriptions: SubscriptionDeltas<T['Request']['Params']>): Promise<void>;
|
|
100
99
|
private rejectionHandler;
|
package/transports/websocket.js
CHANGED
|
@@ -35,8 +35,8 @@ class WebSocketTransport extends streaming_1.StreamingTransport {
|
|
|
35
35
|
this.lastMessageReceivedAt = 0;
|
|
36
36
|
this.connectionOpenedAt = 0;
|
|
37
37
|
}
|
|
38
|
-
getSubscriptionTtlFromConfig(
|
|
39
|
-
return
|
|
38
|
+
getSubscriptionTtlFromConfig(adapterSettings) {
|
|
39
|
+
return adapterSettings.WS_SUBSCRIPTION_TTL;
|
|
40
40
|
}
|
|
41
41
|
connectionClosed() {
|
|
42
42
|
return !this.wsConnection || this.wsConnection.readyState === ws_1.default.CLOSED;
|
|
@@ -56,9 +56,7 @@ class WebSocketTransport extends streaming_1.StreamingTransport {
|
|
|
56
56
|
await this.config.handlers.open(this.wsConnection, context);
|
|
57
57
|
logger.debug('Successfully executed connection opened handler');
|
|
58
58
|
}
|
|
59
|
-
|
|
60
|
-
metrics_1.metrics.get('wsConnectionActive').inc();
|
|
61
|
-
connectionReadyResolve(true);
|
|
59
|
+
connectionReadyResolve(event.target);
|
|
62
60
|
},
|
|
63
61
|
// Called when any message is received by the open connection
|
|
64
62
|
message: async (event) => {
|
|
@@ -94,23 +92,40 @@ class WebSocketTransport extends streaming_1.StreamingTransport {
|
|
|
94
92
|
},
|
|
95
93
|
// Called when the WS connection closes for any reason
|
|
96
94
|
close: (event) => {
|
|
97
|
-
|
|
95
|
+
// If the connection closed with 1000, it's a usual closure
|
|
96
|
+
const level = event.code === 1000 ? 'debug' : 'info';
|
|
97
|
+
logger[level](`Closed websocket connection. Code: ${event.code} ; reason: ${event.reason?.toString()}`);
|
|
98
98
|
// Record active ws connections by decrementing count on close
|
|
99
99
|
// Using URL in label since connection_key is removed from v3
|
|
100
100
|
metrics_1.metrics.get('wsConnectionActive').dec();
|
|
101
|
+
// Also, register that the connection was closed and the reason why
|
|
102
|
+
metrics_1.metrics.get('wsConnectionClosures').inc({
|
|
103
|
+
code: event.code,
|
|
104
|
+
url: this.currentUrl,
|
|
105
|
+
});
|
|
101
106
|
},
|
|
102
107
|
};
|
|
103
108
|
}
|
|
104
|
-
establishWsConnection(context, url, options) {
|
|
105
|
-
|
|
109
|
+
async establishWsConnection(context, url, options) {
|
|
110
|
+
const connectionBuilder = () => new Promise((resolve, reject) => {
|
|
106
111
|
const ctor = WebSocketClassProvider.get();
|
|
107
112
|
const handlers = this.buildConnectionHandlers(context, resolve);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
+
const connection = new ctor(url, undefined, options);
|
|
114
|
+
connection.addEventListener('open', this.rejectionHandler(reject, handlers.open));
|
|
115
|
+
connection.addEventListener('message', this.rejectionHandler(reject, handlers.message));
|
|
116
|
+
connection.addEventListener('error', handlers.error);
|
|
117
|
+
connection.addEventListener('close', handlers.close);
|
|
113
118
|
});
|
|
119
|
+
// Attempt to establish the connection
|
|
120
|
+
try {
|
|
121
|
+
this.wsConnection = await (0, util_1.timeoutPromise)('WS Open Handler', connectionBuilder(), context.adapterSettings.WS_CONNECTION_OPEN_TIMEOUT);
|
|
122
|
+
// Record active ws connections by incrementing count on open
|
|
123
|
+
metrics_1.metrics.get('wsConnectionActive').inc();
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
logger.error(`There was an error connecting to the provider websocket`);
|
|
127
|
+
throw e;
|
|
128
|
+
}
|
|
114
129
|
}
|
|
115
130
|
async sendMessages(context, subscribes, unsubscribes) {
|
|
116
131
|
const serializedSubscribes = subscribes.map(this.serializeMessage);
|
|
@@ -127,7 +142,7 @@ class WebSocketTransport extends streaming_1.StreamingTransport {
|
|
|
127
142
|
// No new subs && connection -> unsubs only
|
|
128
143
|
if (!subscriptions.new.length && !this.wsConnection) {
|
|
129
144
|
logger.debug('No entries in subscription set and no established connection, skipping');
|
|
130
|
-
await (0, util_1.sleep)(context.
|
|
145
|
+
await (0, util_1.sleep)(context.adapterSettings.BACKGROUND_EXECUTE_MS_WS);
|
|
131
146
|
return;
|
|
132
147
|
}
|
|
133
148
|
// We want to check if the URL we calculate is different from the one currently connected.
|
|
@@ -141,13 +156,13 @@ class WebSocketTransport extends streaming_1.StreamingTransport {
|
|
|
141
156
|
const timeSinceConnectionOpened = Math.max(0, now - this.connectionOpenedAt);
|
|
142
157
|
const timeSinceLastActivity = Math.min(timeSinceLastMessage, timeSinceConnectionOpened);
|
|
143
158
|
const connectionUnresponsive = timeSinceLastActivity > 0 &&
|
|
144
|
-
timeSinceLastActivity > context.
|
|
159
|
+
timeSinceLastActivity > context.adapterSettings.WS_SUBSCRIPTION_UNRESPONSIVE_TTL;
|
|
145
160
|
let connectionClosed = this.connectionClosed();
|
|
146
161
|
// Check if we should close the current connection
|
|
147
162
|
if (!connectionClosed && (urlChanged || connectionUnresponsive)) {
|
|
148
163
|
const reason = urlChanged
|
|
149
164
|
? `Websocket url has changed from ${this.currentUrl} to ${urlFromConfig}, closing connection...`
|
|
150
|
-
: `Last message was received ${timeSinceLastMessage} ago, exceeding the threshold of ${context.
|
|
165
|
+
: `Last message was received ${timeSinceLastMessage} ago, exceeding the threshold of ${context.adapterSettings.WS_SUBSCRIPTION_UNRESPONSIVE_TTL}ms, closing connection...`;
|
|
151
166
|
logger.info(reason);
|
|
152
167
|
// Check if connection was opened very recently; if so, wait a bit before continuing.
|
|
153
168
|
// This is so if we just opened the connection and are waiting to receive some messages,
|
|
@@ -171,6 +186,7 @@ class WebSocketTransport extends streaming_1.StreamingTransport {
|
|
|
171
186
|
this.currentUrl = urlFromConfig;
|
|
172
187
|
// Need to write this now, otherwise there could be messages sent with values before the open handler finishes
|
|
173
188
|
this.providerDataStreamEstablished = Date.now();
|
|
189
|
+
// Connect to the provider
|
|
174
190
|
await this.establishWsConnection(context, urlFromConfig, options);
|
|
175
191
|
// Now that we successfully opened the connection, we can reset the variables
|
|
176
192
|
connectionClosed = false;
|
|
@@ -187,8 +203,8 @@ class WebSocketTransport extends streaming_1.StreamingTransport {
|
|
|
187
203
|
// Record WS message and subscription metrics
|
|
188
204
|
(0, metrics_2.recordWsMessageMetrics)(context, subscriptions.new, subscriptions.stale);
|
|
189
205
|
// The background execute loop no longer sleeps between executions, so we have to do it here
|
|
190
|
-
logger.trace(`Websocket handler complete, sleeping for ${context.
|
|
191
|
-
await (0, util_1.sleep)(context.
|
|
206
|
+
logger.trace(`Websocket handler complete, sleeping for ${context.adapterSettings.BACKGROUND_EXECUTE_MS_WS}ms...`);
|
|
207
|
+
await (0, util_1.sleep)(context.adapterSettings.BACKGROUND_EXECUTE_MS_WS);
|
|
192
208
|
return;
|
|
193
209
|
}
|
|
194
210
|
rejectionHandler(rejectionFn, handler) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/transports/websocket.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAsD;
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/transports/websocket.ts"],"names":[],"mappings":"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"}
|
package/util/index.d.ts
CHANGED
|
@@ -27,3 +27,13 @@ export declare class DoubleLinkedList {
|
|
|
27
27
|
remove(node: LinkedListNode | null): LinkedListNode | undefined;
|
|
28
28
|
removeHead(): LinkedListNode | undefined;
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Waits for the provided promise to finish up to a specified amount of time, at which point
|
|
32
|
+
* an error is thrown if the promise hasn't finished yet. Note that this cannot abort the execution
|
|
33
|
+
* of the provided promise, as the underlying node structure cannot cancel the thread.
|
|
34
|
+
*
|
|
35
|
+
* @param promise - the promise to wait for
|
|
36
|
+
* @param timeout - the maximum amount of time to wait for the promise to finish
|
|
37
|
+
* @returns the result of the promise
|
|
38
|
+
*/
|
|
39
|
+
export declare const timeoutPromise: <T>(label: string, promise: Promise<T>, timeout: number) => Promise<T>;
|
package/util/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.DoubleLinkedList = exports.LinkedListNode = exports.isEmpty = exports.isArray = exports.isObject = exports.sleep = void 0;
|
|
17
|
+
exports.timeoutPromise = exports.DoubleLinkedList = exports.LinkedListNode = exports.isEmpty = exports.isArray = exports.isObject = exports.sleep = void 0;
|
|
18
18
|
__exportStar(require("./types"), exports);
|
|
19
19
|
__exportStar(require("./logger"), exports);
|
|
20
20
|
__exportStar(require("./subscription-set/subscription-set"), exports);
|
|
@@ -89,4 +89,26 @@ class DoubleLinkedList {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
exports.DoubleLinkedList = DoubleLinkedList;
|
|
92
|
+
class PromiseTimeoutError extends Error {
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Waits for the provided promise to finish up to a specified amount of time, at which point
|
|
96
|
+
* an error is thrown if the promise hasn't finished yet. Note that this cannot abort the execution
|
|
97
|
+
* of the provided promise, as the underlying node structure cannot cancel the thread.
|
|
98
|
+
*
|
|
99
|
+
* @param promise - the promise to wait for
|
|
100
|
+
* @param timeout - the maximum amount of time to wait for the promise to finish
|
|
101
|
+
* @returns the result of the promise
|
|
102
|
+
*/
|
|
103
|
+
const timeoutPromise = (label, promise, timeout) => {
|
|
104
|
+
let timer;
|
|
105
|
+
return Promise.race([
|
|
106
|
+
promise,
|
|
107
|
+
new Promise((_, reject) => {
|
|
108
|
+
timer = setTimeout(() => reject(new PromiseTimeoutError(`The promise "${label}" took longer than ${timeout} ms to execute, unblocking execution.
|
|
109
|
+
(NOTE: the original promise is not cancelled from this error, it will continue to execute in the background)`)), timeout);
|
|
110
|
+
}),
|
|
111
|
+
]).finally(() => clearTimeout(timer));
|
|
112
|
+
};
|
|
113
|
+
exports.timeoutPromise = timeoutPromise;
|
|
92
114
|
//# sourceMappingURL=index.js.map
|
package/util/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"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"}
|
package/util/logger.js
CHANGED
|
@@ -22,7 +22,7 @@ const debugTransport = {
|
|
|
22
22
|
};
|
|
23
23
|
// Base logger, shouldn't be used because we want layers to be specified
|
|
24
24
|
const baseLogger = (0, pino_1.default)({
|
|
25
|
-
level: process.env['LOG_LEVEL']?.toLowerCase() || config_1.
|
|
25
|
+
level: process.env['LOG_LEVEL']?.toLowerCase() || config_1.BaseSettingsDefinition.LOG_LEVEL.default,
|
|
26
26
|
formatters: {
|
|
27
27
|
level(label) {
|
|
28
28
|
return { level: label };
|
package/util/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/util/logger.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/util/logger.ts"],"names":[],"mappings":"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"}
|