@chainlink/external-adapter-framework 0.14.5 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapter/basic.js +7 -6
- package/adapter/basic.js.map +1 -1
- package/adapter/types.d.ts +5 -4
- package/background-executor.js +4 -4
- package/background-executor.js.map +1 -1
- package/cache/factory.d.ts +4 -1
- package/cache/factory.js +2 -2
- package/cache/factory.js.map +1 -1
- package/cache/local.d.ts +26 -4
- package/cache/local.js +113 -22
- package/cache/local.js.map +1 -1
- package/config/index.d.ts +30 -28
- package/config/index.js +35 -61
- package/config/index.js.map +1 -1
- package/package.json +4 -4
- package/rate-limiting/index.d.ts +2 -15
- package/rate-limiting/index.js +1 -2
- package/rate-limiting/index.js.map +1 -1
- package/rate-limiting/request/simple-counting.d.ts +1 -1
- package/rate-limiting/request/simple-counting.js +12 -8
- package/rate-limiting/request/simple-counting.js.map +1 -1
- package/rate-limiting/simple-counting.d.ts +20 -0
- package/rate-limiting/simple-counting.js +67 -0
- package/rate-limiting/simple-counting.js.map +1 -0
- package/transports/abstract/subscription.d.ts +1 -3
- package/transports/abstract/subscription.js +0 -1
- package/transports/abstract/subscription.js.map +1 -1
- package/transports/batch-warming.d.ts +20 -8
- package/transports/batch-warming.js +55 -68
- package/transports/batch-warming.js.map +1 -1
- package/transports/http.d.ts +90 -0
- package/transports/http.js +172 -0
- package/transports/http.js.map +1 -0
- package/transports/index.d.ts +2 -3
- package/transports/index.js +1 -2
- package/transports/index.js.map +1 -1
- package/transports/metrics.d.ts +0 -6
- package/transports/metrics.js +1 -18
- package/transports/metrics.js.map +1 -1
- package/transports/sse.d.ts +3 -3
- package/transports/sse.js +6 -3
- package/transports/sse.js.map +1 -1
- package/transports/websocket.d.ts +2 -2
- package/transports/websocket.js +3 -0
- package/transports/websocket.js.map +1 -1
- package/util/index.d.ts +1 -1
- package/util/index.js +1 -1
- package/util/index.js.map +1 -1
- package/util/logger.d.ts +1 -1
- package/util/metrics.d.ts +9 -0
- package/util/metrics.js +53 -0
- package/util/metrics.js.map +1 -0
- package/util/request.d.ts +25 -25
- package/util/requester.d.ts +42 -0
- package/util/requester.js +233 -0
- package/util/requester.js.map +1 -0
- package/util/test-payload-loader.d.ts +1 -1
- package/util/types.d.ts +217 -0
- package/util/types.js +3 -0
- package/util/types.js.map +1 -0
- package/validation/error.d.ts +5 -2
- package/validation/error.js +4 -2
- package/validation/error.js.map +1 -1
- package/validation/index.d.ts +1 -1
- package/validation/index.js.map +1 -1
- package/validation/input-validator.d.ts +3 -0
- package/validation/input-validator.js +31 -1
- package/validation/input-validator.js.map +1 -1
- package/validation/utils.d.ts +1 -0
- package/validation/utils.js +10 -0
- package/validation/utils.js.map +1 -1
package/config/index.js
CHANGED
|
@@ -24,25 +24,18 @@ exports.BaseSettings = {
|
|
|
24
24
|
type: 'string',
|
|
25
25
|
default: '/',
|
|
26
26
|
},
|
|
27
|
-
BATCH_TRANSPORT_SETUP_VALIDATION: {
|
|
28
|
-
description: 'Flag to toggle batch transport setup validation',
|
|
29
|
-
type: 'boolean',
|
|
30
|
-
default: false,
|
|
31
|
-
},
|
|
32
27
|
CACHE_MAX_AGE: {
|
|
33
28
|
description: 'Maximum amount of time (in ms) that a response will stay cached',
|
|
34
29
|
type: 'number',
|
|
35
30
|
default: 90000,
|
|
36
31
|
validate: utils_1.validator.integer({ min: 1000, max: 180000 }),
|
|
37
32
|
},
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
// default: 30000,
|
|
45
|
-
// },
|
|
33
|
+
CACHE_MAX_ITEMS: {
|
|
34
|
+
type: 'number',
|
|
35
|
+
description: 'The maximum number of items that remain in the cache',
|
|
36
|
+
default: 10000,
|
|
37
|
+
validate: utils_1.validator.integer({ min: 1000, max: 10000 }),
|
|
38
|
+
},
|
|
46
39
|
CACHE_REDIS_CONNECTION_TIMEOUT: {
|
|
47
40
|
description: 'Connection timeout for redis client',
|
|
48
41
|
type: 'number',
|
|
@@ -175,33 +168,6 @@ exports.BaseSettings = {
|
|
|
175
168
|
type: 'number',
|
|
176
169
|
validate: utils_1.validator.integer({ min: 0 }),
|
|
177
170
|
},
|
|
178
|
-
REQUEST_COALESCING_ENABLED: {
|
|
179
|
-
description: 'Enable request coalescing',
|
|
180
|
-
type: 'boolean',
|
|
181
|
-
default: false,
|
|
182
|
-
},
|
|
183
|
-
REQUEST_COALESCING_ENTROPY_MAX: {
|
|
184
|
-
description: 'Amount of random delay (entropy) in milliseconds that will be added to requests. Avoids issue where the request coalescing key will not be set before multiple other instances in a burst try to access the same key',
|
|
185
|
-
type: 'number',
|
|
186
|
-
default: 0,
|
|
187
|
-
validate: utils_1.validator.integer({ min: 0, max: 10 }),
|
|
188
|
-
},
|
|
189
|
-
// REQUEST_COALESCING_INTERVAL: {
|
|
190
|
-
// type: 'number',
|
|
191
|
-
// default: 100,
|
|
192
|
-
// },
|
|
193
|
-
// REQUEST_COALESCING_INTERVAL_COEFFICIENT: {
|
|
194
|
-
// type: 'number',
|
|
195
|
-
// default: 2,
|
|
196
|
-
// },
|
|
197
|
-
// REQUEST_COALESCING_INTERVAL_MAX: {
|
|
198
|
-
// type: 'number',
|
|
199
|
-
// default: 1000,
|
|
200
|
-
// },
|
|
201
|
-
// REQUEST_COALESCING_MAX_RETRIES: {
|
|
202
|
-
// type: 'number',
|
|
203
|
-
// default: 5,
|
|
204
|
-
// },
|
|
205
171
|
RETRY: {
|
|
206
172
|
type: 'number',
|
|
207
173
|
description: 'Retry count for failed HTTP requests',
|
|
@@ -218,29 +184,25 @@ exports.BaseSettings = {
|
|
|
218
184
|
description: 'Maximum amount of time (in ms) an SSE subscription will be cached before being unsubscribed',
|
|
219
185
|
type: 'number',
|
|
220
186
|
default: 300000,
|
|
221
|
-
validate: utils_1.validator.integer({ min: 0, max:
|
|
187
|
+
validate: utils_1.validator.integer({ min: 0, max: 3600000 }),
|
|
222
188
|
},
|
|
223
189
|
WARMUP_SUBSCRIPTION_TTL: {
|
|
224
190
|
type: 'number',
|
|
225
191
|
description: 'TTL for batch warmer subscriptions',
|
|
226
192
|
default: 300000,
|
|
227
|
-
validate: utils_1.validator.integer({ min: 0, max:
|
|
193
|
+
validate: utils_1.validator.integer({ min: 0, max: 3600000 }),
|
|
228
194
|
},
|
|
229
|
-
// WARMUP_UNHEALTHY_THRESHOLD: {
|
|
230
|
-
// type: 'number',
|
|
231
|
-
// default: 3,
|
|
232
|
-
// },
|
|
233
195
|
WS_SUBSCRIPTION_TTL: {
|
|
234
196
|
description: 'The time in ms a request will live in the subscription set before becoming stale',
|
|
235
197
|
type: 'number',
|
|
236
198
|
default: 120000,
|
|
237
|
-
validate: utils_1.validator.integer({ min: 0, max:
|
|
199
|
+
validate: utils_1.validator.integer({ min: 0, max: 3600000 }),
|
|
238
200
|
},
|
|
239
201
|
WS_SUBSCRIPTION_UNRESPONSIVE_TTL: {
|
|
240
202
|
description: 'The maximum acceptable time (in milliseconds) since the last message received on a WebSocket connection before it is considered unresponsive, causing the adapter to close and attempt to reopen it.',
|
|
241
203
|
type: 'number',
|
|
242
204
|
default: 120000,
|
|
243
|
-
validate: utils_1.validator.integer({ min: 1000, max:
|
|
205
|
+
validate: utils_1.validator.integer({ min: 1000, max: 180000 }),
|
|
244
206
|
},
|
|
245
207
|
// WS_TIME_UNTIL_HANDLE_NEXT_MESSAGE_OVERRIDE: {
|
|
246
208
|
// description: 'Time to wait until adapter should handle next WS message',
|
|
@@ -282,18 +244,6 @@ exports.BaseSettings = {
|
|
|
282
244
|
default: 300,
|
|
283
245
|
validate: utils_1.validator.integer({ min: 150, max: 500 }),
|
|
284
246
|
},
|
|
285
|
-
REST_TRANSPORT_MAX_RATE_LIMIT_RETRIES: {
|
|
286
|
-
description: 'Maximum amount of times the Rest Transport will attempt to set up a request when blocked by the rate limiter',
|
|
287
|
-
type: 'number',
|
|
288
|
-
default: 3,
|
|
289
|
-
validate: utils_1.validator.integer({ min: 1, max: 5 }),
|
|
290
|
-
},
|
|
291
|
-
REST_TRANSPORT_MS_BETWEEN_RATE_LIMIT_RETRIES: {
|
|
292
|
-
description: 'Time that the Rest Transport will wait between retries when blocked by the rate limiter',
|
|
293
|
-
type: 'number',
|
|
294
|
-
default: 400,
|
|
295
|
-
validate: utils_1.validator.integer({ min: 200, max: 3000 }),
|
|
296
|
-
},
|
|
297
247
|
SMOKE_TEST_PAYLOAD_FILE_NAME: {
|
|
298
248
|
description: 'Name of the test payload file used for the smoke endpoint',
|
|
299
249
|
type: 'string',
|
|
@@ -320,6 +270,30 @@ exports.BaseSettings = {
|
|
|
320
270
|
description: 'CA certificate to use for authenticating client certificates',
|
|
321
271
|
type: 'string',
|
|
322
272
|
},
|
|
273
|
+
MAX_HTTP_REQUEST_QUEUE_LENGTH: {
|
|
274
|
+
description: 'The maximum amount of queued requests for Http transports before new ones push oldest ones out of the queue',
|
|
275
|
+
type: 'number',
|
|
276
|
+
default: 200,
|
|
277
|
+
validate: utils_1.validator.integer({ min: 1, max: 2000 }),
|
|
278
|
+
},
|
|
279
|
+
BACKGROUND_EXECUTE_MS_SSE: {
|
|
280
|
+
description: "Time in milliseconds to sleep between SSE transports' background execute calls",
|
|
281
|
+
type: 'number',
|
|
282
|
+
default: 1000,
|
|
283
|
+
validate: utils_1.validator.integer({ min: 1, max: 10000 }),
|
|
284
|
+
},
|
|
285
|
+
BACKGROUND_EXECUTE_MS_WS: {
|
|
286
|
+
description: "Time in milliseconds to sleep between WS transports' background execute calls",
|
|
287
|
+
type: 'number',
|
|
288
|
+
default: 1000,
|
|
289
|
+
validate: utils_1.validator.integer({ min: 1, max: 10000 }),
|
|
290
|
+
},
|
|
291
|
+
BACKGROUND_EXECUTE_MS_HTTP: {
|
|
292
|
+
description: "Time in milliseconds to sleep between HTTP transports' background execute calls, when there are no requests to send",
|
|
293
|
+
type: 'number',
|
|
294
|
+
default: 1000,
|
|
295
|
+
validate: utils_1.validator.integer({ min: 1, max: 10000 }),
|
|
296
|
+
},
|
|
323
297
|
};
|
|
324
298
|
const buildAdapterConfig = ({ overrides = {}, customSettings = {}, envVarsPrefix = '', }) => {
|
|
325
299
|
const vars = {};
|
|
@@ -381,7 +355,7 @@ const getEnv = (name, config, prefix = '') => {
|
|
|
381
355
|
case 'string':
|
|
382
356
|
return value;
|
|
383
357
|
case 'number':
|
|
384
|
-
return
|
|
358
|
+
return Number(value);
|
|
385
359
|
case 'boolean':
|
|
386
360
|
return value === 'true';
|
|
387
361
|
case 'enum':
|
package/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":";;;AAAA,+CAA+C;AAElC,QAAA,YAAY,GAAG;IAC1B,YAAY;IACZ,iBAAiB;IACjB,qFAAqF;IACrF,oBAAoB;IACpB,KAAK;IACL,WAAW,EAAE;QACX,WAAW,EACT,gHAAgH;QAClH,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,iBAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;KACpD;IACD,WAAW,EAAE;QACX,WAAW,EACT,sIAAsI;QACxI,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACf;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,2CAA2C;QACxD,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,GAAG;KACb;IACD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chainlink/external-adapter-framework",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"dependencies": {
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
"@types/node": "18.11.11",
|
|
33
33
|
"@types/sinonjs__fake-timers": "8.1.2",
|
|
34
34
|
"@types/ws": "8.5.3",
|
|
35
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
36
|
-
"@typescript-eslint/parser": "5.
|
|
35
|
+
"@typescript-eslint/eslint-plugin": "5.46.0",
|
|
36
|
+
"@typescript-eslint/parser": "5.46.0",
|
|
37
37
|
"ava": "4.3.3",
|
|
38
38
|
"c8": "7.12.0",
|
|
39
|
-
"eslint": "8.
|
|
39
|
+
"eslint": "8.29.0",
|
|
40
40
|
"eslint-config-prettier": "8.5.0",
|
|
41
41
|
"eslint-plugin-tsdoc": "0.2.17",
|
|
42
42
|
"mock-socket": "9.1.5",
|
package/rate-limiting/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { AdapterEndpoint, EndpointGenerics } from '../adapter';
|
|
2
2
|
import { AdapterConfig } from '../config';
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './request/simple-counting';
|
|
3
|
+
export * from './simple-counting';
|
|
5
4
|
export interface AdapterRateLimitTier {
|
|
6
5
|
rateLimit1s?: number;
|
|
7
6
|
rateLimit1m?: number;
|
|
@@ -19,23 +18,11 @@ export interface RateLimiter {
|
|
|
19
18
|
* @param endpoints - list of adapter endpoints
|
|
20
19
|
*/
|
|
21
20
|
initialize<T extends EndpointGenerics>(endpoints: AdapterEndpoint<T>[], limits: AdapterRateLimitTier): this;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* RequestRateLimiters perform checks agains imminent outbound requests for any transport.
|
|
25
|
-
*/
|
|
26
|
-
export interface RequestRateLimiter extends RateLimiter {
|
|
27
21
|
/**
|
|
28
22
|
* This method will check using whatever strategy is implemented to determine if
|
|
29
23
|
* this request can be processed. If so, it returns true; if not, returns false.
|
|
30
24
|
*/
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* BackgroundExecuteFrequencyRateLimiters will implement custom logic to calculate
|
|
35
|
-
* the period of time to wait between background executions for a transport.
|
|
36
|
-
*/
|
|
37
|
-
export interface BackgroundExecuteRateLimiter extends RateLimiter {
|
|
38
|
-
msUntilNextExecution(endpointName: string): number;
|
|
25
|
+
msUntilNextExecution(): number;
|
|
39
26
|
}
|
|
40
27
|
/**
|
|
41
28
|
* This method will convert all possible settings for a rate limit tier and
|
package/rate-limiting/index.js
CHANGED
|
@@ -15,8 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.highestRateLimitTiers = exports.buildRateLimitTiersFromConfig = exports.getRateLimitingTier = exports.lowestTierLimit = exports.highestTierLimit = exports.consolidateTierLimits = void 0;
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
__exportStar(require("./request/simple-counting"), exports);
|
|
18
|
+
__exportStar(require("./simple-counting"), exports);
|
|
20
19
|
/**
|
|
21
20
|
* This method will convert all possible settings for a rate limit tier and
|
|
22
21
|
* convert them all to requests per second
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rate-limiting/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAGA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rate-limiting/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,5 +16,5 @@ export declare class SimpleCountingRateLimiter implements RateLimiter {
|
|
|
16
16
|
perSecondLimit: number;
|
|
17
17
|
perMinuteLimit: number;
|
|
18
18
|
initialize<T extends EndpointGenerics>(endpoints: AdapterEndpoint<T>[], limits?: AdapterRateLimitTier): this;
|
|
19
|
-
|
|
19
|
+
msUntilNextExecution(): number;
|
|
20
20
|
}
|
|
@@ -26,14 +26,16 @@ class SimpleCountingRateLimiter {
|
|
|
26
26
|
logger.debug(`Using rate limiting settings: perMinute = ${this.perMinuteLimit} | perSecond: = ${this.perSecondLimit}`);
|
|
27
27
|
return this;
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
msUntilNextExecution() {
|
|
30
30
|
// If the limit is set to infinity, there was no tier limit specified
|
|
31
31
|
if (this.perSecondLimit === Infinity && this.perMinuteLimit === Infinity) {
|
|
32
|
-
return
|
|
32
|
+
return 0;
|
|
33
33
|
}
|
|
34
34
|
const now = Date.now();
|
|
35
35
|
const nearestSecondInterval = Math.floor(now / 1000);
|
|
36
36
|
const nearestMinuteInterval = Math.floor(now / (1000 * 60));
|
|
37
|
+
const nextSecondInterval = (nearestSecondInterval + 1) * 1000;
|
|
38
|
+
const nextMinuteInterval = (nearestMinuteInterval + 1) * 1000 * 60;
|
|
37
39
|
// This should always run to completion, even if it doesn't look atomic; therefore the
|
|
38
40
|
// Ops should be "thread safe". Thank JS and its infinite single threaded dumbness.
|
|
39
41
|
if (nearestSecondInterval !== this.latestSecondInterval) {
|
|
@@ -46,16 +48,18 @@ class SimpleCountingRateLimiter {
|
|
|
46
48
|
this.latestMinuteInterval = nearestMinuteInterval;
|
|
47
49
|
this.requestsThisMinute = 0;
|
|
48
50
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
const timeToWaitForNextSecond = this.requestsThisSecond < this.perSecondLimit ? 0 : nextSecondInterval - now;
|
|
52
|
+
const timeToWaitForNextMinute = this.requestsThisMinute < this.perMinuteLimit ? 0 : nextMinuteInterval - now;
|
|
53
|
+
const timeToWait = Math.max(timeToWaitForNextSecond, timeToWaitForNextMinute);
|
|
54
|
+
if (timeToWait === 0) {
|
|
52
55
|
this.requestsThisSecond++;
|
|
53
56
|
this.requestsThisMinute++;
|
|
54
|
-
|
|
57
|
+
logger.trace(`Request under limits, counted +1 (S = ${this.requestsThisSecond} | M = ${this.requestsThisMinute})`);
|
|
58
|
+
return 0;
|
|
55
59
|
}
|
|
56
60
|
else {
|
|
57
|
-
logger.trace(
|
|
58
|
-
return
|
|
61
|
+
logger.trace(`Capacity for provider requests has been reached this interval (S = ${this.requestsThisSecond} | M = ${this.requestsThisMinute}), need to wait ${timeToWait}ms`);
|
|
62
|
+
return timeToWait;
|
|
59
63
|
}
|
|
60
64
|
}
|
|
61
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-counting.js","sourceRoot":"","sources":["../../../../src/rate-limiting/request/simple-counting.ts"],"names":[],"mappings":";;;AAEA,qCAAuC;AAEvC,MAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,2BAA2B,CAAC,CAAA;AAEtD;;;;;;;GAOG;AACH,MAAa,yBAAyB;IAAtC;QACE,yBAAoB,GAAG,CAAC,CAAA;QACxB,uBAAkB,GAAG,CAAC,CAAA;QACtB,yBAAoB,GAAG,CAAC,CAAA;QACxB,uBAAkB,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"simple-counting.js","sourceRoot":"","sources":["../../../../src/rate-limiting/request/simple-counting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AdapterRateLimitTier, RateLimiter } from '.';
|
|
2
|
+
import { AdapterEndpoint, EndpointGenerics } from './../adapter';
|
|
3
|
+
/**
|
|
4
|
+
* This rate limiter is the simplest stateful option.
|
|
5
|
+
* On startup, it'll compare the different thresholds for each tier, calculate them all
|
|
6
|
+
* in the finest window we'll use (seconds), and use the most restrictive one.
|
|
7
|
+
* This is so if the EA were to restart, we don't need to worry about persisting state
|
|
8
|
+
* for things like daily quotas. The downside is that this does not work well for bursty
|
|
9
|
+
* loads or spikes, in cases where e.g. the per second limit is high but daily quotas low.
|
|
10
|
+
*/
|
|
11
|
+
export declare class SimpleCountingRateLimiter implements RateLimiter {
|
|
12
|
+
latestSecondInterval: number;
|
|
13
|
+
requestsThisSecond: number;
|
|
14
|
+
latestMinuteInterval: number;
|
|
15
|
+
requestsThisMinute: number;
|
|
16
|
+
perSecondLimit: number;
|
|
17
|
+
perMinuteLimit: number;
|
|
18
|
+
initialize<T extends EndpointGenerics>(endpoints: AdapterEndpoint<T>[], limits?: AdapterRateLimitTier): this;
|
|
19
|
+
msUntilNextExecution(): number;
|
|
20
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SimpleCountingRateLimiter = void 0;
|
|
4
|
+
const util_1 = require("./../util");
|
|
5
|
+
const logger = (0, util_1.makeLogger)('SimpleCountingRateLimiter');
|
|
6
|
+
/**
|
|
7
|
+
* This rate limiter is the simplest stateful option.
|
|
8
|
+
* On startup, it'll compare the different thresholds for each tier, calculate them all
|
|
9
|
+
* in the finest window we'll use (seconds), and use the most restrictive one.
|
|
10
|
+
* This is so if the EA were to restart, we don't need to worry about persisting state
|
|
11
|
+
* for things like daily quotas. The downside is that this does not work well for bursty
|
|
12
|
+
* loads or spikes, in cases where e.g. the per second limit is high but daily quotas low.
|
|
13
|
+
*/
|
|
14
|
+
class SimpleCountingRateLimiter {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.latestSecondInterval = 0;
|
|
17
|
+
this.requestsThisSecond = 0;
|
|
18
|
+
this.latestMinuteInterval = 0;
|
|
19
|
+
this.requestsThisMinute = 0;
|
|
20
|
+
}
|
|
21
|
+
initialize(endpoints, limits) {
|
|
22
|
+
// Translate the hourly limit into reqs per minute
|
|
23
|
+
const perHourLimit = (limits?.rateLimit1h || Infinity) / 60;
|
|
24
|
+
this.perMinuteLimit = Math.min(limits?.rateLimit1m || Infinity, perHourLimit);
|
|
25
|
+
this.perSecondLimit = limits?.rateLimit1s || Infinity;
|
|
26
|
+
logger.debug(`Using rate limiting settings: perMinute = ${this.perMinuteLimit} | perSecond: = ${this.perSecondLimit}`);
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
msUntilNextExecution() {
|
|
30
|
+
// If the limit is set to infinity, there was no tier limit specified
|
|
31
|
+
if (this.perSecondLimit === Infinity && this.perMinuteLimit === Infinity) {
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
const now = Date.now();
|
|
35
|
+
const nearestSecondInterval = Math.floor(now / 1000);
|
|
36
|
+
const nearestMinuteInterval = Math.floor(now / (1000 * 60));
|
|
37
|
+
const nextSecondInterval = (nearestSecondInterval + 1) * 1000;
|
|
38
|
+
const nextMinuteInterval = (nearestMinuteInterval + 1) * 1000 * 60;
|
|
39
|
+
// This should always run to completion, even if it doesn't look atomic; therefore the
|
|
40
|
+
// Ops should be "thread safe". Thank JS and its infinite single threaded dumbness.
|
|
41
|
+
if (nearestSecondInterval !== this.latestSecondInterval) {
|
|
42
|
+
logger.trace(`Clearing latest second interval, # of requests logged was: ${this.requestsThisSecond} `);
|
|
43
|
+
this.latestSecondInterval = nearestSecondInterval;
|
|
44
|
+
this.requestsThisSecond = 0;
|
|
45
|
+
}
|
|
46
|
+
if (nearestMinuteInterval !== this.latestMinuteInterval) {
|
|
47
|
+
logger.trace(`Clearing latest second minute, # of requests logged was: ${this.requestsThisMinute} `);
|
|
48
|
+
this.latestMinuteInterval = nearestMinuteInterval;
|
|
49
|
+
this.requestsThisMinute = 0;
|
|
50
|
+
}
|
|
51
|
+
const timeToWaitForNextSecond = this.requestsThisSecond + 1 < this.perSecondLimit ? 0 : nextSecondInterval - now;
|
|
52
|
+
const timeToWaitForNextMinute = this.requestsThisMinute + 1 < this.perMinuteLimit ? 0 : nextMinuteInterval - now;
|
|
53
|
+
const timeToWait = Math.max(timeToWaitForNextSecond, timeToWaitForNextMinute);
|
|
54
|
+
if (timeToWait === 0) {
|
|
55
|
+
this.requestsThisSecond++;
|
|
56
|
+
this.requestsThisMinute++;
|
|
57
|
+
logger.trace(`Request under limits, counted +1 (S = ${this.requestsThisSecond} | M = ${this.requestsThisMinute})`);
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
logger.trace(`Capacity for provider requests has been reached this interval (S = ${this.requestsThisSecond} | M = ${this.requestsThisMinute}), need to wait ${timeToWait}ms`);
|
|
62
|
+
return timeToWait;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.SimpleCountingRateLimiter = SimpleCountingRateLimiter;
|
|
67
|
+
//# sourceMappingURL=simple-counting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-counting.js","sourceRoot":"","sources":["../../../src/rate-limiting/simple-counting.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { EndpointContext } from '../../adapter';
|
|
2
2
|
import { ResponseCache } from '../../cache/response';
|
|
3
3
|
import { AdapterConfig } from '../../config';
|
|
4
|
-
import { BackgroundExecuteRateLimiter } from '../../rate-limiting';
|
|
5
4
|
import { SubscriptionSet } from '../../util';
|
|
6
|
-
import { AdapterRequest } from '../../util/
|
|
5
|
+
import { AdapterRequest } from '../../util/types';
|
|
7
6
|
import { Transport, TransportDependencies, TransportGenerics } from '..';
|
|
8
7
|
/**
|
|
9
8
|
* Abstract Transport that will take incoming requests and add them to a subscription set as part
|
|
@@ -16,7 +15,6 @@ export declare abstract class SubscriptionTransport<T extends TransportGenerics>
|
|
|
16
15
|
Request: T['Request'];
|
|
17
16
|
Response: T['Response'];
|
|
18
17
|
}>;
|
|
19
|
-
rateLimiter: BackgroundExecuteRateLimiter;
|
|
20
18
|
subscriptionSet: SubscriptionSet<T['Request']['Params']>;
|
|
21
19
|
subscriptionTtl: number;
|
|
22
20
|
initialize(dependencies: TransportDependencies<T>, config: AdapterConfig<T['CustomSettings']>, endpointName: string): Promise<void>;
|
|
@@ -36,7 +36,6 @@ const logger = (0, util_1.makeLogger)('SubscriptionTransport');
|
|
|
36
36
|
class SubscriptionTransport {
|
|
37
37
|
async initialize(dependencies, config, endpointName) {
|
|
38
38
|
this.responseCache = dependencies.responseCache;
|
|
39
|
-
this.rateLimiter = dependencies.backgroundExecuteRateLimiter;
|
|
40
39
|
this.subscriptionSet = dependencies.subscriptionSetFactory.buildSet(endpointName);
|
|
41
40
|
this.subscriptionTtl = this.getSubscriptionTtlFromConfig(config); // Will be implemented by subclasses
|
|
42
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../../../src/transports/abstract/subscription.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../../../src/transports/abstract/subscription.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,qCAAwD;AAGxD,6DAA8C;AAE9C,MAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,uBAAuB,CAAC,CAAA;AAElD;;;;;GAKG;AACH,MAAsB,qBAAqB;IAQzC,KAAK,CAAC,UAAU,CACd,YAAsC,EACtC,MAA0C,EAC1C,YAAoB;QAEpB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAA;QAC/C,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,sBAAsB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QACjF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAA,CAAC,oCAAoC;IACvG,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,GAAiC,EACjC,CAAqC;QAErC,MAAM,CAAC,KAAK,CACV,yCAAyC,IAAI,CAAC,eAAe,OAAO,GAAG,CAAC,cAAc,CAAC,QAAQ,OAAO,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAChI,CAAA;QAED,+DAA+D;QAC/D,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAC5B,GAAG,CAAC,cAAc,CAAC,QAAQ,EAC3B,GAAG,CAAC,cAAc,CAAC,IAAI,EACvB,IAAI,CAAC,eAAe,CACrB,CAAA;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAA2B;QACjD,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAA;QAEnD,4DAA4D;QAC5D,gFAAgF;QAChF,2HAA2H;QAC3H,gBAAgB,CAAC,6BAA6B;aAC3C,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,YAAY,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;aACjF,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAEtB,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;CAmBF;AAjED,sDAiEC"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
2
2
|
import { EndpointContext } from '../adapter';
|
|
3
3
|
import { AdapterConfig } from '../config';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { ProviderResult } from '../util/request';
|
|
5
|
+
import { Requester } from '../util/requester';
|
|
6
|
+
import { TransportDependencies, TransportGenerics } from './';
|
|
6
7
|
import { SubscriptionTransport } from './abstract/subscription';
|
|
7
8
|
/**
|
|
8
9
|
* Helper struct type that will be used to pass types to the generic parameters of a Transport.
|
|
9
10
|
* Extends the common TransportGenerics, adding Provider specific types for this Batch endpoint.
|
|
10
11
|
*/
|
|
11
|
-
type
|
|
12
|
+
declare type HttpTransportGenerics = TransportGenerics & {
|
|
12
13
|
/**
|
|
13
14
|
* Type details for any provider specific interfaces.
|
|
14
15
|
*/
|
|
@@ -23,11 +24,20 @@ type BatchWarmingTransportGenerics = TransportGenerics & {
|
|
|
23
24
|
ResponseBody: unknown;
|
|
24
25
|
};
|
|
25
26
|
};
|
|
27
|
+
/**
|
|
28
|
+
* Structure containing the association between EA params and a provider request.
|
|
29
|
+
*/
|
|
30
|
+
declare type ProviderRequestConfig<T extends HttpTransportGenerics> = {
|
|
31
|
+
/** The input paramters for requests that will get responses from the request in this struct */
|
|
32
|
+
params: T['Request']['Params'][];
|
|
33
|
+
/** The request that will be sent to the data provider to fetch values for the params in this struct */
|
|
34
|
+
request: AxiosRequestConfig<T['Provider']['RequestBody']>;
|
|
35
|
+
};
|
|
26
36
|
/**
|
|
27
37
|
* Config object that is provided to the BatchWarmingTransport constructor.
|
|
28
38
|
*/
|
|
29
|
-
export interface
|
|
30
|
-
|
|
39
|
+
export interface HttpTransportConfig<T extends HttpTransportGenerics> {
|
|
40
|
+
prepareRequests: (params: T['Request']['Params'][], config: AdapterConfig<T['CustomSettings']>) => ProviderRequestConfig<T> | ProviderRequestConfig<T>[];
|
|
31
41
|
parseResponse: (params: T['Request']['Params'][], res: AxiosResponse<T['Provider']['ResponseBody']>, config: AdapterConfig<T['CustomSettings']>) => ProviderResult<T>[];
|
|
32
42
|
}
|
|
33
43
|
/**
|
|
@@ -40,13 +50,15 @@ export interface BatchWarmingTransportConfig<T extends BatchWarmingTransportGene
|
|
|
40
50
|
*
|
|
41
51
|
* @typeParam T - all types related to the [[Transport]]
|
|
42
52
|
*/
|
|
43
|
-
export declare class
|
|
53
|
+
export declare class HttpTransport<T extends HttpTransportGenerics> extends SubscriptionTransport<T> {
|
|
44
54
|
private config;
|
|
45
55
|
WARMER_ACTIVE: boolean;
|
|
46
|
-
|
|
56
|
+
requester: Requester;
|
|
57
|
+
constructor(config: HttpTransportConfig<T>);
|
|
58
|
+
initialize(dependencies: TransportDependencies<T>, config: AdapterConfig<T['CustomSettings']>, endpointName: string): Promise<void>;
|
|
47
59
|
getSubscriptionTtlFromConfig(config: AdapterConfig<T['CustomSettings']>): number;
|
|
48
|
-
registerRequest(req: AdapterRequest<T['Request']>, config: AdapterConfig<T['CustomSettings']>): Promise<void>;
|
|
49
60
|
backgroundHandler(context: EndpointContext<T>, entries: T['Request']['Params'][]): Promise<void>;
|
|
61
|
+
private handleRequest;
|
|
50
62
|
private makeRequest;
|
|
51
63
|
}
|
|
52
64
|
export {};
|