@chainlink/external-adapter-framework 0.14.4 → 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 -29
- package/config/index.js +37 -64
- 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
|
@@ -12,7 +12,7 @@ exports.BaseSettings = {
|
|
|
12
12
|
description: 'The number of milliseconds a request can be pending before returning a timeout error for data provider request',
|
|
13
13
|
type: 'number',
|
|
14
14
|
default: 30000,
|
|
15
|
-
validate: utils_1.validator.integer({ min: 0, max:
|
|
15
|
+
validate: utils_1.validator.integer({ min: 0, max: 60000 }),
|
|
16
16
|
},
|
|
17
17
|
API_VERBOSE: {
|
|
18
18
|
description: 'Toggle whether the response from the EA should contain just the results or also include the full response body from the queried API.',
|
|
@@ -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',
|
|
@@ -53,7 +46,6 @@ exports.BaseSettings = {
|
|
|
53
46
|
description: 'Hostname for the Redis instance to be used',
|
|
54
47
|
type: 'string',
|
|
55
48
|
default: '127.0.0.1',
|
|
56
|
-
validate: utils_1.validator.host(),
|
|
57
49
|
},
|
|
58
50
|
// CACHE_REDIS_MAX_QUEUED_ITEMS: {
|
|
59
51
|
// description: 'Maximum length of the client internal command queue',
|
|
@@ -85,7 +77,7 @@ exports.BaseSettings = {
|
|
|
85
77
|
description: 'Timeout to fail a Redis server request if no response (ms)',
|
|
86
78
|
type: 'number',
|
|
87
79
|
default: 500,
|
|
88
|
-
validate: utils_1.validator.integer({ min: 500, max:
|
|
80
|
+
validate: utils_1.validator.integer({ min: 500, max: 10000 }),
|
|
89
81
|
},
|
|
90
82
|
CACHE_REDIS_URL: {
|
|
91
83
|
description: 'The URL of the Redis server. Format: [redis[s]:]//[[user][:password@]][host][:port][/db-number][?db=db-number[&password=bar[&option=value]]]',
|
|
@@ -176,33 +168,6 @@ exports.BaseSettings = {
|
|
|
176
168
|
type: 'number',
|
|
177
169
|
validate: utils_1.validator.integer({ min: 0 }),
|
|
178
170
|
},
|
|
179
|
-
REQUEST_COALESCING_ENABLED: {
|
|
180
|
-
description: 'Enable request coalescing',
|
|
181
|
-
type: 'boolean',
|
|
182
|
-
default: false,
|
|
183
|
-
},
|
|
184
|
-
REQUEST_COALESCING_ENTROPY_MAX: {
|
|
185
|
-
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',
|
|
186
|
-
type: 'number',
|
|
187
|
-
default: 0,
|
|
188
|
-
validate: utils_1.validator.integer({ min: 0, max: 10 }),
|
|
189
|
-
},
|
|
190
|
-
// REQUEST_COALESCING_INTERVAL: {
|
|
191
|
-
// type: 'number',
|
|
192
|
-
// default: 100,
|
|
193
|
-
// },
|
|
194
|
-
// REQUEST_COALESCING_INTERVAL_COEFFICIENT: {
|
|
195
|
-
// type: 'number',
|
|
196
|
-
// default: 2,
|
|
197
|
-
// },
|
|
198
|
-
// REQUEST_COALESCING_INTERVAL_MAX: {
|
|
199
|
-
// type: 'number',
|
|
200
|
-
// default: 1000,
|
|
201
|
-
// },
|
|
202
|
-
// REQUEST_COALESCING_MAX_RETRIES: {
|
|
203
|
-
// type: 'number',
|
|
204
|
-
// default: 5,
|
|
205
|
-
// },
|
|
206
171
|
RETRY: {
|
|
207
172
|
type: 'number',
|
|
208
173
|
description: 'Retry count for failed HTTP requests',
|
|
@@ -219,29 +184,25 @@ exports.BaseSettings = {
|
|
|
219
184
|
description: 'Maximum amount of time (in ms) an SSE subscription will be cached before being unsubscribed',
|
|
220
185
|
type: 'number',
|
|
221
186
|
default: 300000,
|
|
222
|
-
validate: utils_1.validator.integer({ min: 0, max:
|
|
187
|
+
validate: utils_1.validator.integer({ min: 0, max: 3600000 }),
|
|
223
188
|
},
|
|
224
189
|
WARMUP_SUBSCRIPTION_TTL: {
|
|
225
190
|
type: 'number',
|
|
226
191
|
description: 'TTL for batch warmer subscriptions',
|
|
227
192
|
default: 300000,
|
|
228
|
-
validate: utils_1.validator.integer({ min: 0, max:
|
|
193
|
+
validate: utils_1.validator.integer({ min: 0, max: 3600000 }),
|
|
229
194
|
},
|
|
230
|
-
// WARMUP_UNHEALTHY_THRESHOLD: {
|
|
231
|
-
// type: 'number',
|
|
232
|
-
// default: 3,
|
|
233
|
-
// },
|
|
234
195
|
WS_SUBSCRIPTION_TTL: {
|
|
235
196
|
description: 'The time in ms a request will live in the subscription set before becoming stale',
|
|
236
197
|
type: 'number',
|
|
237
198
|
default: 120000,
|
|
238
|
-
validate: utils_1.validator.integer({ min: 0, max:
|
|
199
|
+
validate: utils_1.validator.integer({ min: 0, max: 3600000 }),
|
|
239
200
|
},
|
|
240
201
|
WS_SUBSCRIPTION_UNRESPONSIVE_TTL: {
|
|
241
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.',
|
|
242
203
|
type: 'number',
|
|
243
204
|
default: 120000,
|
|
244
|
-
validate: utils_1.validator.integer({ min: 1000, max:
|
|
205
|
+
validate: utils_1.validator.integer({ min: 1000, max: 180000 }),
|
|
245
206
|
},
|
|
246
207
|
// WS_TIME_UNTIL_HANDLE_NEXT_MESSAGE_OVERRIDE: {
|
|
247
208
|
// description: 'Time to wait until adapter should handle next WS message',
|
|
@@ -283,18 +244,6 @@ exports.BaseSettings = {
|
|
|
283
244
|
default: 300,
|
|
284
245
|
validate: utils_1.validator.integer({ min: 150, max: 500 }),
|
|
285
246
|
},
|
|
286
|
-
REST_TRANSPORT_MAX_RATE_LIMIT_RETRIES: {
|
|
287
|
-
description: 'Maximum amount of times the Rest Transport will attempt to set up a request when blocked by the rate limiter',
|
|
288
|
-
type: 'number',
|
|
289
|
-
default: 3,
|
|
290
|
-
validate: utils_1.validator.integer({ min: 1, max: 5 }),
|
|
291
|
-
},
|
|
292
|
-
REST_TRANSPORT_MS_BETWEEN_RATE_LIMIT_RETRIES: {
|
|
293
|
-
description: 'Time that the Rest Transport will wait between retries when blocked by the rate limiter',
|
|
294
|
-
type: 'number',
|
|
295
|
-
default: 400,
|
|
296
|
-
validate: utils_1.validator.integer({ min: 200, max: 3000 }),
|
|
297
|
-
},
|
|
298
247
|
SMOKE_TEST_PAYLOAD_FILE_NAME: {
|
|
299
248
|
description: 'Name of the test payload file used for the smoke endpoint',
|
|
300
249
|
type: 'string',
|
|
@@ -321,6 +270,30 @@ exports.BaseSettings = {
|
|
|
321
270
|
description: 'CA certificate to use for authenticating client certificates',
|
|
322
271
|
type: 'string',
|
|
323
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
|
+
},
|
|
324
297
|
};
|
|
325
298
|
const buildAdapterConfig = ({ overrides = {}, customSettings = {}, envVarsPrefix = '', }) => {
|
|
326
299
|
const vars = {};
|
|
@@ -382,7 +355,7 @@ const getEnv = (name, config, prefix = '') => {
|
|
|
382
355
|
case 'string':
|
|
383
356
|
return value;
|
|
384
357
|
case 'number':
|
|
385
|
-
return
|
|
358
|
+
return Number(value);
|
|
386
359
|
case 'boolean':
|
|
387
360
|
return value === 'true';
|
|
388
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 {};
|