@lokalise/fastify-extras 21.5.0 → 21.7.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/dist/plugins/bull-mq-metrics/MetricsCollector.d.ts +3 -7
- package/dist/plugins/bull-mq-metrics/MetricsCollector.js +11 -31
- package/dist/plugins/bull-mq-metrics/MetricsCollector.js.map +1 -1
- package/dist/plugins/bull-mq-metrics/ObservableQueue.d.ts +1 -0
- package/dist/plugins/bull-mq-metrics/ObservableQueue.js +29 -28
- package/dist/plugins/bull-mq-metrics/ObservableQueue.js.map +1 -1
- package/dist/plugins/bull-mq-metrics/queueDiscoverers.js +1 -1
- package/dist/plugins/bull-mq-metrics/queueDiscoverers.js.map +1 -1
- package/package.json +88 -88
|
@@ -3,13 +3,9 @@ import type { Redis } from 'ioredis';
|
|
|
3
3
|
import * as prometheus from 'prom-client';
|
|
4
4
|
import type { QueueDiscoverer } from './queueDiscoverers';
|
|
5
5
|
export type Metrics = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
failedGauge: prometheus.Gauge<never>;
|
|
10
|
-
waitingGauge: prometheus.Gauge<never>;
|
|
11
|
-
completedDuration: prometheus.Histogram<never>;
|
|
12
|
-
processedDuration: prometheus.Histogram<never>;
|
|
6
|
+
countGauge: prometheus.Gauge<'status' | 'queue'>;
|
|
7
|
+
processedDuration: prometheus.Histogram<'status' | 'queue'>;
|
|
8
|
+
finishedDuration: prometheus.Histogram<'status' | 'queue'>;
|
|
13
9
|
};
|
|
14
10
|
export type MetricCollectorOptions = {
|
|
15
11
|
redisClient: Redis;
|
|
@@ -6,42 +6,22 @@ const promise_pool_1 = require("@supercharge/promise-pool");
|
|
|
6
6
|
const prometheus = tslib_1.__importStar(require("prom-client"));
|
|
7
7
|
const ObservableQueue_1 = require("./ObservableQueue");
|
|
8
8
|
const getMetrics = (prefix, histogramBuckets) => ({
|
|
9
|
-
|
|
10
|
-
name: `${prefix}
|
|
11
|
-
help: 'Total number of
|
|
12
|
-
labelNames: ['queue'],
|
|
13
|
-
}),
|
|
14
|
-
activeGauge: new prometheus.Gauge({
|
|
15
|
-
name: `${prefix}_jobs_active`,
|
|
16
|
-
help: 'Total number of active jobs (currently being processed)',
|
|
17
|
-
labelNames: ['queue'],
|
|
18
|
-
}),
|
|
19
|
-
failedGauge: new prometheus.Gauge({
|
|
20
|
-
name: `${prefix}_jobs_failed`,
|
|
21
|
-
help: 'Total number of failed jobs',
|
|
22
|
-
labelNames: ['queue'],
|
|
23
|
-
}),
|
|
24
|
-
delayedGauge: new prometheus.Gauge({
|
|
25
|
-
name: `${prefix}_jobs_delayed`,
|
|
26
|
-
help: 'Total number of jobs that will run in the future',
|
|
27
|
-
labelNames: ['queue'],
|
|
28
|
-
}),
|
|
29
|
-
waitingGauge: new prometheus.Gauge({
|
|
30
|
-
name: `${prefix}_jobs_waiting`,
|
|
31
|
-
help: 'Total number of jobs waiting to be processed',
|
|
32
|
-
labelNames: ['queue'],
|
|
9
|
+
countGauge: new prometheus.Gauge({
|
|
10
|
+
name: `${prefix}_jobs_count`,
|
|
11
|
+
help: 'Total number of jobs',
|
|
12
|
+
labelNames: ['status', 'queue'],
|
|
33
13
|
}),
|
|
34
14
|
processedDuration: new prometheus.Histogram({
|
|
35
15
|
name: `${prefix}_jobs_processed_duration`,
|
|
36
|
-
help: 'Processing time
|
|
16
|
+
help: 'Processing time of a jobs (processing until finished)',
|
|
37
17
|
buckets: histogramBuckets,
|
|
38
|
-
labelNames: ['queue'],
|
|
18
|
+
labelNames: ['status', 'queue'],
|
|
39
19
|
}),
|
|
40
|
-
|
|
41
|
-
name: `${prefix}
|
|
42
|
-
help: '
|
|
20
|
+
finishedDuration: new prometheus.Histogram({
|
|
21
|
+
name: `${prefix}_jobs_finished_duration`,
|
|
22
|
+
help: 'Finish time for jobs (created until finished)',
|
|
43
23
|
buckets: histogramBuckets,
|
|
44
|
-
labelNames: ['queue'],
|
|
24
|
+
labelNames: ['status', 'queue'],
|
|
45
25
|
}),
|
|
46
26
|
});
|
|
47
27
|
class MetricsCollector {
|
|
@@ -68,7 +48,7 @@ class MetricsCollector {
|
|
|
68
48
|
.map((name) => new ObservableQueue_1.ObservableQueue(name, this.redis, this.metrics, this.logger));
|
|
69
49
|
}
|
|
70
50
|
await promise_pool_1.PromisePool.for(this.observedQueues).process((queue) => {
|
|
71
|
-
|
|
51
|
+
queue.collect();
|
|
72
52
|
});
|
|
73
53
|
}
|
|
74
54
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsCollector.js","sourceRoot":"","sources":["../../../lib/plugins/bull-mq-metrics/MetricsCollector.ts"],"names":[],"mappings":";;;;AAAA,4DAAuD;AAGvD,gEAAyC;AAEzC,uDAAmD;
|
|
1
|
+
{"version":3,"file":"MetricsCollector.js","sourceRoot":"","sources":["../../../lib/plugins/bull-mq-metrics/MetricsCollector.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export declare class ObservableQueue {
|
|
|
8
8
|
private readonly logger;
|
|
9
9
|
private readonly queue;
|
|
10
10
|
private readonly events;
|
|
11
|
+
private collectDurationMetric;
|
|
11
12
|
constructor(name: string, redis: Redis, metrics: Metrics, logger: FastifyBaseLogger);
|
|
12
13
|
collect(): Promise<void>;
|
|
13
14
|
dispose(): Promise<void>;
|
|
@@ -9,43 +9,44 @@ class ObservableQueue {
|
|
|
9
9
|
logger;
|
|
10
10
|
queue;
|
|
11
11
|
events;
|
|
12
|
+
async collectDurationMetric(jobId, status) {
|
|
13
|
+
try {
|
|
14
|
+
const job = await this.queue.getJob(jobId);
|
|
15
|
+
if (!job || !job.finishedOn) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
this.metrics.finishedDuration
|
|
19
|
+
.labels({ status, queue: this.name })
|
|
20
|
+
.observe(job.finishedOn - job.timestamp);
|
|
21
|
+
if (job.processedOn) {
|
|
22
|
+
this.metrics.processedDuration
|
|
23
|
+
.labels({ status, queue: this.name })
|
|
24
|
+
.observe(job.finishedOn - job.processedOn);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
this.logger.warn(err);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
12
31
|
constructor(name, redis, metrics, logger) {
|
|
13
32
|
this.name = name;
|
|
14
33
|
this.redis = redis;
|
|
15
34
|
this.metrics = metrics;
|
|
16
35
|
this.logger = logger;
|
|
17
36
|
this.queue = new bullmq_1.Queue(name, { connection: redis });
|
|
18
|
-
this.events = new bullmq_1.QueueEvents(name, { connection: redis });
|
|
19
|
-
this.events.on('
|
|
20
|
-
this.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
if (job.finishedOn) {
|
|
27
|
-
metrics.completedDuration
|
|
28
|
-
.labels({ queue: name })
|
|
29
|
-
.observe(job.finishedOn - job.timestamp);
|
|
30
|
-
if (job.processedOn) {
|
|
31
|
-
metrics.processedDuration
|
|
32
|
-
.labels({ queue: name })
|
|
33
|
-
.observe(job.finishedOn - job.processedOn);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
})
|
|
37
|
-
.catch((err) => {
|
|
38
|
-
this.logger.warn(err);
|
|
39
|
-
});
|
|
37
|
+
this.events = new bullmq_1.QueueEvents(name, { connection: redis, autorun: true });
|
|
38
|
+
this.events.on('failed', async ({ jobId }) => {
|
|
39
|
+
await this.collectDurationMetric(jobId, 'failed');
|
|
40
|
+
});
|
|
41
|
+
this.events.on('completed', async ({ jobId }) => {
|
|
42
|
+
await this.collectDurationMetric(jobId, 'completed');
|
|
40
43
|
});
|
|
41
44
|
}
|
|
42
45
|
async collect() {
|
|
43
|
-
const {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
this.metrics.failedGauge.labels({ queue: this.name }).set(failed);
|
|
48
|
-
this.metrics.waitingGauge.labels({ queue: this.name }).set(waiting);
|
|
46
|
+
const { active, delayed, waiting } = await this.queue.getJobCounts('active', 'delayed', 'waiting');
|
|
47
|
+
for (const [status, count] of Object.entries({ active, delayed, waiting })) {
|
|
48
|
+
this.metrics.countGauge.set({ status, queue: this.name }, count);
|
|
49
|
+
}
|
|
49
50
|
}
|
|
50
51
|
async dispose() {
|
|
51
52
|
await this.events.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservableQueue.js","sourceRoot":"","sources":["../../../lib/plugins/bull-mq-metrics/ObservableQueue.ts"],"names":[],"mappings":";;;AAAA,mCAA2C;
|
|
1
|
+
{"version":3,"file":"ObservableQueue.js","sourceRoot":"","sources":["../../../lib/plugins/bull-mq-metrics/ObservableQueue.ts"],"names":[],"mappings":";;;AAAA,mCAA2C;AAO3C,MAAa,eAAe;IA2Bf;IACQ;IACA;IACA;IA7BF,KAAK,CAAO;IACZ,MAAM,CAAa;IAE5B,KAAK,CAAC,qBAAqB,CAAC,KAAa,EAAE,MAAsB;QACvE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAE1C,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC5B,OAAM;YACR,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,gBAAgB;iBAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;iBACpC,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,CAAA;YAE1C,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,iBAAiB;qBAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;qBACpC,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IAED,YACW,IAAY,EACJ,KAAY,EACZ,OAAgB,EAChB,MAAyB;QAHjC,SAAI,GAAJ,IAAI,CAAQ;QACJ,UAAK,GAAL,KAAK,CAAO;QACZ,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAmB;QAE1C,IAAI,CAAC,KAAK,GAAG,IAAI,cAAK,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;QACnD,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAW,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAEzE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9C,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAChE,QAAQ,EACR,SAAS,EACT,SAAS,CACV,CAAA;QAED,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3E,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;QAClE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QACzB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAC1B,CAAC;CACF;AA5DD,0CA4DC"}
|
|
@@ -32,7 +32,7 @@ class BackgroundJobsBasedQueueDiscoverer {
|
|
|
32
32
|
this.redis = redis;
|
|
33
33
|
}
|
|
34
34
|
async discoverQueues() {
|
|
35
|
-
return await background_jobs_common_1.
|
|
35
|
+
return await (0, background_jobs_common_1.backgroundJobProcessorGetActiveQueueIds)(this.redis);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
exports.BackgroundJobsBasedQueueDiscoverer = BackgroundJobsBasedQueueDiscoverer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queueDiscoverers.js","sourceRoot":"","sources":["../../../lib/plugins/bull-mq-metrics/queueDiscoverers.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"queueDiscoverers.js","sourceRoot":"","sources":["../../../lib/plugins/bull-mq-metrics/queueDiscoverers.ts"],"names":[],"mappings":";;;AAAA,6EAA0F;AAO1F,MAAa,yBAAyB;IAEjB;IACA;IAFnB,YACmB,KAAY,EACZ,YAAoB;QADpB,UAAK,GAAL,KAAK,CAAO;QACZ,iBAAY,GAAZ,YAAY,CAAQ;IACpC,CAAC;IAEJ,KAAK,CAAC,cAAc;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACvC,KAAK,EAAE,GAAG,IAAI,CAAC,YAAY,SAAS;SACrC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAA;QAChC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YACrC,wDAAwD;YACxD,CAAC;YAAC,KAAkB;iBACjB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;iBAC1B,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;QAC1C,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IAClC,CAAC;CACF;AAtBD,8DAsBC;AAED,MAAa,kCAAkC;IAChB;IAA7B,YAA6B,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IAE7C,KAAK,CAAC,cAAc;QAClB,OAAO,MAAM,IAAA,gEAAuC,EAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClE,CAAC;CACF;AAND,gFAMC"}
|
package/package.json
CHANGED
|
@@ -1,90 +1,90 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
2
|
+
"name": "@lokalise/fastify-extras",
|
|
3
|
+
"version": "21.7.0",
|
|
4
|
+
"description": "Opinionated set of fastify plugins, commonly used in Lokalise",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Lokalise",
|
|
7
|
+
"url": "https://lokalise.com/"
|
|
8
|
+
},
|
|
9
|
+
"license": "Apache-2.0",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git://github.com/lokalise/fastify-extras.git"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"fastify",
|
|
16
|
+
"newrelic",
|
|
17
|
+
"bugsnag",
|
|
18
|
+
"request-context",
|
|
19
|
+
"request-id",
|
|
20
|
+
"split-io"
|
|
21
|
+
],
|
|
22
|
+
"homepage": "https://github.com/lokalise/fastify-extras",
|
|
23
|
+
"files": [
|
|
24
|
+
"dist/**",
|
|
25
|
+
"LICENSE",
|
|
26
|
+
"README.md"
|
|
27
|
+
],
|
|
28
|
+
"main": "dist/index.js",
|
|
29
|
+
"types": "dist/index.d.ts",
|
|
30
|
+
"type": "commonjs",
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "shx rm -rf ./dist && tsc",
|
|
36
|
+
"test": "vitest",
|
|
37
|
+
"test:coverage": "vitest --coverage",
|
|
38
|
+
"test:ci": "npm run lint && npm run test:coverage",
|
|
39
|
+
"lint": "biome check . && tsc --project tsconfig.lint.json --noEmit",
|
|
40
|
+
"lint:fix": "biome check --write",
|
|
41
|
+
"docker:start": "docker compose -f docker-compose.yml up --build -d redis && docker compose -f docker-compose.yml up --build -d wait_for_redis",
|
|
42
|
+
"docker:stop": "docker compose -f docker-compose.yml down",
|
|
43
|
+
"version": "auto-changelog -p && git add CHANGELOG.md"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@bugsnag/js": "^7.25.0",
|
|
47
|
+
"@supercharge/promise-pool": "^3.2.0",
|
|
48
|
+
"@lokalise/error-utils": "^2.0.0",
|
|
49
|
+
"@lokalise/background-jobs-common": "^7.0.0",
|
|
50
|
+
"@splitsoftware/splitio": "^10.27.0",
|
|
51
|
+
"@amplitude/analytics-node": "^1.3.5",
|
|
52
|
+
"fastify-metrics": "^11.0.0",
|
|
53
|
+
"fastify-plugin": "^4.5.1",
|
|
54
|
+
"toad-cache": "^3.7.0",
|
|
55
|
+
"tslib": "^2.6.3"
|
|
56
|
+
},
|
|
57
|
+
"peerDependencies": {
|
|
58
|
+
"fastify": "^4.24.3",
|
|
59
|
+
"@fastify/jwt": "^8.0.1",
|
|
60
|
+
"newrelic": ">=11.13.0",
|
|
61
|
+
"pino": "^9.0.0",
|
|
62
|
+
"zod": "^3.22.4",
|
|
63
|
+
"bullmq": "^5.8.4",
|
|
64
|
+
"ioredis": "^5.4.1"
|
|
65
|
+
},
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@lokalise/backend-http-client": "^2.0.1",
|
|
68
|
+
"@biomejs/biome": "^1.8.3",
|
|
69
|
+
"@lokalise/biome-config": "^1.4.0",
|
|
70
|
+
"@lokalise/node-core": "^11.2.0",
|
|
71
|
+
"@types/newrelic": "^9.14.4",
|
|
72
|
+
"@types/node": "^22.1.0",
|
|
73
|
+
"@amplitude/analytics-types": "^2.5.0",
|
|
74
|
+
"@vitest/coverage-v8": "^2.0.5",
|
|
75
|
+
"auto-changelog": "^2.4.0",
|
|
76
|
+
"bullmq": "^5.12.0",
|
|
77
|
+
"ioredis": "^5.4.1",
|
|
78
|
+
"fastify": "^4.28.1",
|
|
79
|
+
"newrelic": "12.0.0",
|
|
80
|
+
"pino": "^9.1.0",
|
|
81
|
+
"pino-pretty": "^11.2.1",
|
|
82
|
+
"shx": "^0.3.4",
|
|
83
|
+
"typescript": "^5.5.4",
|
|
84
|
+
"vitest": "^2.0.5",
|
|
85
|
+
"zod": "^3.23.8"
|
|
86
|
+
},
|
|
87
|
+
"engines": {
|
|
88
|
+
"node": ">=18"
|
|
89
|
+
}
|
|
90
90
|
}
|