@chainlink/external-adapter-framework 0.29.8 → 0.29.10
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/README.md +19 -12
- package/adapter/basic.js +5 -1
- package/adapter/basic.js.map +1 -1
- package/background-executor.js +1 -1
- package/background-executor.js.map +1 -1
- package/cache/index.d.ts +5 -8
- package/cache/index.js +8 -10
- package/cache/index.js.map +1 -1
- package/cache/local.js +6 -6
- package/cache/local.js.map +1 -1
- package/cache/redis.js +4 -4
- package/cache/redis.js.map +1 -1
- package/cache/response.js +3 -5
- package/cache/response.js.map +1 -1
- package/config/index.d.ts +53 -42
- package/config/index.js +11 -1
- package/config/index.js.map +1 -1
- package/index.d.ts +6 -6
- package/index.js +26 -22
- package/index.js.map +1 -1
- package/metrics/index.d.ts +1 -0
- package/metrics/index.js +5 -2
- package/metrics/index.js.map +1 -1
- package/package.json +2 -1
- package/transports/abstract/streaming.js +2 -2
- package/transports/abstract/streaming.js.map +1 -1
- package/transports/abstract/subscription.js +1 -1
- package/transports/abstract/subscription.js.map +1 -1
- package/transports/http.js +3 -3
- package/transports/http.js.map +1 -1
- package/transports/websocket.js +5 -5
- package/transports/websocket.js.map +1 -1
- package/util/index.d.ts +16 -0
- package/util/index.js +30 -1
- package/util/index.js.map +1 -1
- package/util/logger.d.ts +1 -0
- package/util/logger.js +8 -1
- package/util/logger.js.map +1 -1
- package/util/requester.js +8 -8
- package/util/requester.js.map +1 -1
- package/util/testing-utils.d.ts +119 -0
- package/util/testing-utils.js +342 -0
- package/util/testing-utils.js.map +1 -0
- package/validation/error.d.ts +1 -1
- package/validation/error.js +1 -1
- package/validation/error.js.map +1 -1
- package/validation/index.js +10 -7
- package/validation/index.js.map +1 -1
- package/validation/utils.d.ts +14 -6
- package/validation/utils.js +78 -38
- package/validation/utils.js.map +1 -1
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.setEnvVariables = exports.mockWebSocketProvider = exports.waitUntilResolved = exports.TestAdapter = exports.assertEqualResponses = exports.RedisMock = exports.runAllUntilTime = exports.runAllUntil = exports.runPeriodicAsyncBackgroundExecution = exports.MockCache = exports.NopTransport = void 0;
|
|
27
|
+
const mock_socket_1 = require("mock-socket");
|
|
28
|
+
const client = __importStar(require("prom-client"));
|
|
29
|
+
const index_1 = require("../index");
|
|
30
|
+
const cache_1 = require("../cache");
|
|
31
|
+
const index_2 = require("./index");
|
|
32
|
+
/* c8 ignore start */ // eslint-disable-line
|
|
33
|
+
class NopTransport {
|
|
34
|
+
async initialize(dependencies, adapterSettings, endpointName, transportName) {
|
|
35
|
+
this.responseCache = dependencies.responseCache;
|
|
36
|
+
this.name = transportName;
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
async foregroundExecute(_) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.NopTransport = NopTransport;
|
|
44
|
+
class MockCache extends cache_1.LocalCache {
|
|
45
|
+
constructor(maxItems) {
|
|
46
|
+
super(maxItems);
|
|
47
|
+
}
|
|
48
|
+
waitForNextSet() {
|
|
49
|
+
// eslint-disable-next-line no-promise-executor-return
|
|
50
|
+
return new Promise((resolve) => (this.awaitingPromiseResolve = resolve));
|
|
51
|
+
}
|
|
52
|
+
async set(key, value, ttl) {
|
|
53
|
+
super.set(key, value, ttl);
|
|
54
|
+
if (this.awaitingPromiseResolve) {
|
|
55
|
+
this.awaitingPromiseResolve(value);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.MockCache = MockCache;
|
|
60
|
+
async function runPeriodicAsyncBackgroundExecution(clock, { interval, times, stepValidation, }) {
|
|
61
|
+
for (let i = 0; i < times; i++) {
|
|
62
|
+
// Tick once for the interval
|
|
63
|
+
await clock.tickAsync(interval);
|
|
64
|
+
// Then use auxiliary method to ensure that the background process, if it
|
|
65
|
+
// spawns new timers, gets executed to completion
|
|
66
|
+
await runAllUntil(clock, () => stepValidation(i));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.runPeriodicAsyncBackgroundExecution = runPeriodicAsyncBackgroundExecution;
|
|
70
|
+
async function runAllUntil(clock, isComplete) {
|
|
71
|
+
while (!isComplete()) {
|
|
72
|
+
await clock.nextAsync();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.runAllUntil = runAllUntil;
|
|
76
|
+
async function runAllUntilTime(clock, time) {
|
|
77
|
+
const targetTime = clock.now + time;
|
|
78
|
+
// Fire a promise that will resolve at the requested time, so we have a precise place where we'll stop
|
|
79
|
+
(0, index_2.sleep)(time);
|
|
80
|
+
while (clock.now < targetTime) {
|
|
81
|
+
await clock.nextAsync();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.runAllUntilTime = runAllUntilTime;
|
|
85
|
+
class RedisMock {
|
|
86
|
+
constructor() {
|
|
87
|
+
this.store = new cache_1.LocalCache(10000);
|
|
88
|
+
}
|
|
89
|
+
get(key) {
|
|
90
|
+
return this.store.get(key);
|
|
91
|
+
}
|
|
92
|
+
del(key) {
|
|
93
|
+
return this.store.delete(key);
|
|
94
|
+
}
|
|
95
|
+
set(key, value, px, ttl) {
|
|
96
|
+
if (key.includes('force-error')) {
|
|
97
|
+
throw { message: 'anything' };
|
|
98
|
+
}
|
|
99
|
+
return this.store.set(key, value, ttl);
|
|
100
|
+
}
|
|
101
|
+
multi() {
|
|
102
|
+
return new CommandChainMock(this);
|
|
103
|
+
}
|
|
104
|
+
defineCommand(_name, _options) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
setExternalAdapterResponse(key, value, ttl) {
|
|
108
|
+
return this.set(key, value, 'PX', ttl);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.RedisMock = RedisMock;
|
|
112
|
+
class CommandChainMock {
|
|
113
|
+
constructor(redisMock) {
|
|
114
|
+
this.redisMock = redisMock;
|
|
115
|
+
this.promises = [];
|
|
116
|
+
}
|
|
117
|
+
set(key, value, px, ttl) {
|
|
118
|
+
this.promises.push(this.redisMock.set(key, value, px, ttl));
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
// eslint-disable-next-line max-params
|
|
122
|
+
setExternalAdapterResponse(key, value, ttl) {
|
|
123
|
+
this.promises.push(this.redisMock.setExternalAdapterResponse(key, value, ttl));
|
|
124
|
+
return this;
|
|
125
|
+
}
|
|
126
|
+
exec() {
|
|
127
|
+
return Promise.all(this.promises);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function assertEqualResponses(t, actual, expected) {
|
|
131
|
+
t.is(typeof actual?.timestamps?.providerDataReceivedUnixMs, 'number');
|
|
132
|
+
t.is(typeof (actual?.timestamps?.providerDataReceivedUnixMs ??
|
|
133
|
+
actual?.timestamps?.providerDataStreamEstablishedUnixMs), 'number');
|
|
134
|
+
delete actual?.meta;
|
|
135
|
+
delete actual['timestamps'];
|
|
136
|
+
t.deepEqual(expected, actual);
|
|
137
|
+
}
|
|
138
|
+
exports.assertEqualResponses = assertEqualResponses;
|
|
139
|
+
class TestMetrics {
|
|
140
|
+
replaceQuotes(s) {
|
|
141
|
+
return s.replace(/\\"/g, "'");
|
|
142
|
+
}
|
|
143
|
+
constructor(data) {
|
|
144
|
+
this.map = new Map();
|
|
145
|
+
const lines = data.split('\n');
|
|
146
|
+
for (const line of lines) {
|
|
147
|
+
if (line.startsWith('#') ||
|
|
148
|
+
line.startsWith('nodejs_') ||
|
|
149
|
+
line.startsWith('process_') ||
|
|
150
|
+
!line) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
const [nameAndLabels, stringValue] = line.split(' ');
|
|
154
|
+
const [, name, rawLabels] = nameAndLabels.match(/^([a-z_]+){(.*)}$/);
|
|
155
|
+
const sortedLabels = this.replaceQuotes(rawLabels)
|
|
156
|
+
.split('",')
|
|
157
|
+
.filter((label) => label !== '' && !label.startsWith('app_'))
|
|
158
|
+
.sort((a, b) => a.localeCompare(b))
|
|
159
|
+
.map((s) => `${s}"`)
|
|
160
|
+
.join(',');
|
|
161
|
+
const fullName = `${name}|${sortedLabels}`;
|
|
162
|
+
this.map.set(fullName, Number(stringValue));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
get(t, { name, labels }) {
|
|
166
|
+
const sortedLabels = labels
|
|
167
|
+
? Object.entries(labels)
|
|
168
|
+
.map(([labelName, value]) => `${labelName}="${this.replaceQuotes(value)}"`)
|
|
169
|
+
.sort((a, b) => a.localeCompare(b))
|
|
170
|
+
.join(',')
|
|
171
|
+
: '';
|
|
172
|
+
const metric = this.map.get(`${name}|${sortedLabels}`);
|
|
173
|
+
if (metric === undefined) {
|
|
174
|
+
const sameNameMetrics = [...this.map.keys()]
|
|
175
|
+
.filter((k) => k.startsWith(name))
|
|
176
|
+
.map((m) => `\n\t${m}`);
|
|
177
|
+
const possibleSolutionMessage = sameNameMetrics.length
|
|
178
|
+
? `Perhaps you meant one of these: ${sameNameMetrics}`
|
|
179
|
+
: 'Check the metric name and labels (no other metrics with the same name were found)';
|
|
180
|
+
t.fail(`Metric not found:\n\t${name}|${sortedLabels}\n${possibleSolutionMessage}`);
|
|
181
|
+
}
|
|
182
|
+
return metric;
|
|
183
|
+
}
|
|
184
|
+
assert(t, params) {
|
|
185
|
+
const metric = this.get(t, params);
|
|
186
|
+
t.is(metric, params.expectedValue);
|
|
187
|
+
}
|
|
188
|
+
assertPositiveNumber(t, params) {
|
|
189
|
+
const value = this.get(t, params);
|
|
190
|
+
if (value !== undefined) {
|
|
191
|
+
t.is(typeof value === 'number', true);
|
|
192
|
+
t.is(value > 0, true);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
t.fail(`${params.name} did not record`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
class TestAdapter {
|
|
200
|
+
// eslint-disable-next-line max-params
|
|
201
|
+
constructor(api, adapter, metricsApi, clock, cache) {
|
|
202
|
+
this.api = api;
|
|
203
|
+
this.adapter = adapter;
|
|
204
|
+
this.metricsApi = metricsApi;
|
|
205
|
+
this.clock = clock;
|
|
206
|
+
if (cache instanceof MockCache) {
|
|
207
|
+
this.mockCache = cache;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
static async startWithMockedCache(adapter, context, dependencies) {
|
|
211
|
+
// Create mocked cache so we can listen when values are set
|
|
212
|
+
// This is a more reliable method than expecting precise clock timings
|
|
213
|
+
const mockCache = new MockCache(adapter.config.settings.CACHE_MAX_ITEMS);
|
|
214
|
+
return TestAdapter.start(adapter, context, {
|
|
215
|
+
cache: mockCache,
|
|
216
|
+
...dependencies,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
static async start(adapter, context, dependencies) {
|
|
220
|
+
const { api, metricsApi } = await (0, index_1.start)(adapter, dependencies);
|
|
221
|
+
if (!api) {
|
|
222
|
+
throw new Error('EA was not able to start properly');
|
|
223
|
+
}
|
|
224
|
+
context.testAdapter = new TestAdapter(api, adapter, metricsApi, context.clock, dependencies?.cache);
|
|
225
|
+
return context.testAdapter;
|
|
226
|
+
}
|
|
227
|
+
async request(data, headers) {
|
|
228
|
+
const makeRequest = async () => this.api.inject({
|
|
229
|
+
method: 'post',
|
|
230
|
+
url: '/',
|
|
231
|
+
headers: {
|
|
232
|
+
'content-type': 'application/json',
|
|
233
|
+
...headers,
|
|
234
|
+
},
|
|
235
|
+
payload: {
|
|
236
|
+
data,
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
// If there's no installed clock, just return the normal response promise
|
|
240
|
+
if (!this.clock) {
|
|
241
|
+
return makeRequest();
|
|
242
|
+
}
|
|
243
|
+
return waitUntilResolved(this.clock, makeRequest);
|
|
244
|
+
}
|
|
245
|
+
async startBackgroundExecuteThenGetResponse(t, params) {
|
|
246
|
+
if (!this.clock) {
|
|
247
|
+
throw new Error('The "startBackgroundExecuteThenGetResponse" method should only be called if a fake clock is installed');
|
|
248
|
+
}
|
|
249
|
+
if (!this.mockCache) {
|
|
250
|
+
throw new Error('The "startBackgroundExecuteThenGetResponse" method should only be called if a mock cache was provided');
|
|
251
|
+
}
|
|
252
|
+
// Expect the first response to time out
|
|
253
|
+
// The polling behavior is tested in the cache tests, so this is easier here.
|
|
254
|
+
// Start the request:
|
|
255
|
+
const error = await this.request(params.requestData);
|
|
256
|
+
t.is(error.statusCode, 504);
|
|
257
|
+
await this.waitForCache(params.expectedCacheSize);
|
|
258
|
+
// Second request should find the response in the cache
|
|
259
|
+
const response = await this.request(params.requestData);
|
|
260
|
+
if (params.expectedResponse) {
|
|
261
|
+
assertEqualResponses(t, response.json(), params.expectedResponse);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
t.is(response.statusCode, 200);
|
|
265
|
+
}
|
|
266
|
+
return response;
|
|
267
|
+
}
|
|
268
|
+
async waitForCache(expectedSize) {
|
|
269
|
+
if (!this.clock) {
|
|
270
|
+
throw new Error('The "startBackgroundExecuteThenGetResponse" method should only be called if a fake clock is installed');
|
|
271
|
+
}
|
|
272
|
+
// Advance clock so that the batch warmer executes once again and wait for the cache to be set
|
|
273
|
+
// We disable the non-null assertion because we've already checked for existence in the line above
|
|
274
|
+
await runAllUntil(this.clock, () => {
|
|
275
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
276
|
+
const cacheSize = this.mockCache.cache.size;
|
|
277
|
+
return cacheSize >= (expectedSize || 1);
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
async getMetrics() {
|
|
281
|
+
if (!this.metricsApi) {
|
|
282
|
+
throw new Error('An attempt was made to fetch metrics, but the adapter was started without metrics enabled');
|
|
283
|
+
}
|
|
284
|
+
const response = await client.register.metrics();
|
|
285
|
+
return new TestMetrics(response);
|
|
286
|
+
}
|
|
287
|
+
async getHealth() {
|
|
288
|
+
return this.api.inject('/health');
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
exports.TestAdapter = TestAdapter;
|
|
292
|
+
// This is the janky workaround to synchronously running async flows with fixed timers that block threads
|
|
293
|
+
async function waitUntilResolved(clock, fn) {
|
|
294
|
+
let result;
|
|
295
|
+
const execute = async () => {
|
|
296
|
+
result = await fn();
|
|
297
|
+
};
|
|
298
|
+
execute();
|
|
299
|
+
// eslint-disable-next-line no-unmodified-loop-condition
|
|
300
|
+
while (result === undefined) {
|
|
301
|
+
await clock.nextAsync();
|
|
302
|
+
}
|
|
303
|
+
return result;
|
|
304
|
+
}
|
|
305
|
+
exports.waitUntilResolved = waitUntilResolved;
|
|
306
|
+
/**
|
|
307
|
+
* Sets the mocked websocket instance in the provided provider class.
|
|
308
|
+
* We need this here, because the tests will connect using their instance of WebSocketClassProvider;
|
|
309
|
+
* fetching from this library to the \@chainlink/ea-bootstrap package would access _another_ instance
|
|
310
|
+
* of the same constructor. Although it should be a singleton, dependencies are different so that
|
|
311
|
+
* means that the static classes themselves are also different.
|
|
312
|
+
*
|
|
313
|
+
* @param provider - singleton WebSocketClassProvider
|
|
314
|
+
*/
|
|
315
|
+
const mockWebSocketProvider = (provider) => {
|
|
316
|
+
// Extend mock WebSocket class to bypass protocol headers error
|
|
317
|
+
class MockWebSocket extends mock_socket_1.WebSocket {
|
|
318
|
+
constructor(url, protocol) {
|
|
319
|
+
super(url, protocol instanceof Object ? undefined : protocol);
|
|
320
|
+
}
|
|
321
|
+
// This is part of the 'ws' node library but not the common interface, but it's used in our WS transport
|
|
322
|
+
removeAllListeners() {
|
|
323
|
+
for (const eventType in this.listeners) {
|
|
324
|
+
// We have to manually check because the mock-socket library shares this instance, and adds the server listeners to the same obj
|
|
325
|
+
if (!eventType.startsWith('server')) {
|
|
326
|
+
delete this.listeners[eventType];
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
// Need to disable typing, the mock-socket impl does not implement the ws interface fully
|
|
332
|
+
provider.set(MockWebSocket); // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
333
|
+
};
|
|
334
|
+
exports.mockWebSocketProvider = mockWebSocketProvider;
|
|
335
|
+
function setEnvVariables(envVariables) {
|
|
336
|
+
for (const key in envVariables) {
|
|
337
|
+
process.env[key] = envVariables[key];
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
exports.setEnvVariables = setEnvVariables;
|
|
341
|
+
/* c8 ignore stop */ // eslint-disable-line
|
|
342
|
+
//# sourceMappingURL=testing-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing-utils.js","sourceRoot":"","sources":["../../../src/util/testing-utils.ts"],"names":[],"mappings":"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"}
|
package/validation/error.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export declare class AdapterError extends Error {
|
|
|
25
25
|
metricsLabel?: HttpRequestType;
|
|
26
26
|
name: string;
|
|
27
27
|
message: string;
|
|
28
|
-
constructor({ status, statusCode, name, message, cause, url,
|
|
28
|
+
constructor({ status, statusCode, name, message, cause, url, feedID, errorResponse, providerStatusCode, metricsLabel, }: Partial<AdapterError>);
|
|
29
29
|
toJSONResponse(): AdapterErrorResponse;
|
|
30
30
|
}
|
|
31
31
|
export declare class AdapterInputError extends AdapterError {
|
package/validation/error.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AdapterCustomError = exports.AdapterConnectionError = exports.AdapterDataProviderError = exports.AdapterTimeoutError = exports.AdapterRateLimitError = exports.AdapterInputError = exports.AdapterError = void 0;
|
|
4
4
|
const constants_1 = require("../metrics/constants");
|
|
5
5
|
class AdapterError extends Error {
|
|
6
|
-
constructor({ status = 'errored', statusCode = 500, name = 'AdapterError', message = 'There was an unexpected error in the adapter.', cause, url,
|
|
6
|
+
constructor({ status = 'errored', statusCode = 500, name = 'AdapterError', message = 'There was an unexpected error in the adapter.', cause, url, feedID, errorResponse, providerStatusCode, metricsLabel = constants_1.HttpRequestType.ADAPTER_ERROR, }) {
|
|
7
7
|
super(message);
|
|
8
8
|
this.status = status;
|
|
9
9
|
this.statusCode = statusCode;
|
package/validation/error.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../../src/validation/error.ts"],"names":[],"mappings":";;;AAAA,oDAAsD;AAmBtD,MAAa,YAAa,SAAQ,KAAK;IAarC,YAAY,EACV,MAAM,GAAG,SAAS,EAClB,UAAU,GAAG,GAAG,EAChB,IAAI,GAAG,cAAc,EACrB,OAAO,GAAG,+CAA+C,EACzD,KAAK,EACL,GAAG,EACH,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../../src/validation/error.ts"],"names":[],"mappings":"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"}
|
package/validation/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.errorCatchingMiddleware = exports.validatorMiddleware = exports.InputParameters = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
4
5
|
const ioredis_1 = require("ioredis");
|
|
5
6
|
const cache_1 = require("../cache");
|
|
6
7
|
const metrics_1 = require("../metrics");
|
|
@@ -75,7 +76,9 @@ const validatorMiddleware = (adapter) => (rawRequest, reply, done) => {
|
|
|
75
76
|
cacheKey = endpoint.cacheKeyGenerator(req.requestContext.data);
|
|
76
77
|
if (cacheKey.length > adapter.config.settings.MAX_COMMON_KEY_SIZE) {
|
|
77
78
|
errorCatcherLogger.warn(`Generated custom cache key for adapter request is bigger than the MAX_COMMON_KEY_SIZE and will be truncated`);
|
|
78
|
-
|
|
79
|
+
const shasum = (0, crypto_1.createHash)('sha1');
|
|
80
|
+
shasum.update(cacheKey);
|
|
81
|
+
cacheKey = shasum.digest('base64');
|
|
79
82
|
}
|
|
80
83
|
req.requestContext.cacheKey = cacheKey;
|
|
81
84
|
}
|
|
@@ -86,7 +89,6 @@ const validatorMiddleware = (adapter) => (rawRequest, reply, done) => {
|
|
|
86
89
|
adapterName: adapter.name,
|
|
87
90
|
endpointName: endpoint.name,
|
|
88
91
|
transportName,
|
|
89
|
-
inputParameters: endpoint.inputParameters,
|
|
90
92
|
adapterSettings: adapter.config.settings,
|
|
91
93
|
});
|
|
92
94
|
}
|
|
@@ -107,22 +109,23 @@ const errorCatchingMiddleware = (err, req, res) => {
|
|
|
107
109
|
stack: err.stack,
|
|
108
110
|
message: err.message,
|
|
109
111
|
},
|
|
112
|
+
reqBody: req.body,
|
|
110
113
|
};
|
|
111
114
|
if (err instanceof error_1.AdapterTimeoutError) {
|
|
112
115
|
// AdapterTimeoutError are somewhat expected when the adapter doesn't find a response in the cache within the specified polling interval
|
|
113
116
|
// This is common on startup so logging these errors as debug to help alleviate logs getting flooded in the beginning
|
|
114
|
-
errorCatcherLogger.debug(errorWithContext);
|
|
117
|
+
(0, util_2.censorLogs)(() => errorCatcherLogger.debug(errorWithContext));
|
|
115
118
|
res.status(err.statusCode).send(err.toJSONResponse());
|
|
116
119
|
}
|
|
117
120
|
else if (err instanceof error_1.AdapterError) {
|
|
118
121
|
// We want to log these as warn, because although they are to be expected, NOPs should
|
|
119
122
|
// Only use "correct" job specs and therefore not hit adapters with invalid requests.
|
|
120
|
-
errorCatcherLogger.warn(errorWithContext);
|
|
123
|
+
(0, util_2.censorLogs)(() => errorCatcherLogger.warn(errorWithContext));
|
|
121
124
|
res.status(err.statusCode).send(err.toJSONResponse());
|
|
122
125
|
}
|
|
123
126
|
else if (err instanceof ioredis_1.ReplyError) {
|
|
124
127
|
// Native ioredis error
|
|
125
|
-
errorCatcherLogger.warn(errorWithContext);
|
|
128
|
+
(0, util_2.censorLogs)(() => errorCatcherLogger.warn(errorWithContext));
|
|
126
129
|
const replyError = err;
|
|
127
130
|
if (process.env['METRICS_ENABLED']) {
|
|
128
131
|
(0, metrics_1.recordRedisCommandMetric)(metrics_1.CMD_SENT_STATUS.FAIL, replyError.command?.name);
|
|
@@ -130,11 +133,11 @@ const errorCatchingMiddleware = (err, req, res) => {
|
|
|
130
133
|
res.status(500).send(replyError.message || 'There was an unexpected error with the Redis cache');
|
|
131
134
|
}
|
|
132
135
|
else if (err.name === 'FastifyError') {
|
|
133
|
-
errorCatcherLogger.error(errorWithContext);
|
|
136
|
+
(0, util_2.censorLogs)(() => errorCatcherLogger.error(errorWithContext));
|
|
134
137
|
res.status(err.statusCode).send(err.message);
|
|
135
138
|
}
|
|
136
139
|
else {
|
|
137
|
-
errorCatcherLogger.error(errorWithContext);
|
|
140
|
+
(0, util_2.censorLogs)(() => errorCatcherLogger.error(errorWithContext));
|
|
138
141
|
res.status(500).send(err.message || 'There was an unexpected error in the adapter.');
|
|
139
142
|
}
|
|
140
143
|
};
|
package/validation/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":"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"}
|
package/validation/utils.d.ts
CHANGED
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
import { ValidationErrorMessage } from '../config';
|
|
2
|
-
export type
|
|
2
|
+
export type ValidatorMeta = {
|
|
3
|
+
min?: number;
|
|
4
|
+
max?: number;
|
|
5
|
+
details?: string;
|
|
6
|
+
};
|
|
7
|
+
export type Validator<V> = {
|
|
8
|
+
meta: ValidatorMeta;
|
|
9
|
+
fn: (value?: V) => ValidationErrorMessage;
|
|
10
|
+
};
|
|
3
11
|
export type ValidatorWithParams<P, V> = (param: P, customError?: string) => Validator<V>;
|
|
4
12
|
export declare const validator: {
|
|
5
13
|
integer: (params?: {
|
|
6
14
|
min?: number;
|
|
7
15
|
max?: number;
|
|
8
|
-
}) => Validator<number>;
|
|
9
|
-
positiveInteger: () => Validator<number>;
|
|
10
|
-
port: () => Validator<number>;
|
|
16
|
+
}) => Validator<string | number>;
|
|
17
|
+
positiveInteger: () => Validator<string | number>;
|
|
18
|
+
port: () => Validator<string | number>;
|
|
11
19
|
url: () => Validator<string>;
|
|
12
20
|
host: () => Validator<string>;
|
|
13
|
-
responseTimestamp: () => Validator<number>;
|
|
21
|
+
responseTimestamp: () => Validator<string | number>;
|
|
14
22
|
base64: () => Validator<string>;
|
|
15
|
-
compose:
|
|
23
|
+
compose: (f: Validator<string | number>[]) => Validator<number | string>;
|
|
16
24
|
};
|