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