@lokalise/fastify-extras 30.6.0 → 30.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/README.md CHANGED
@@ -15,6 +15,7 @@ Reusable plugins for Fastify.
15
15
  - [Bull MQ Metrics Plugin](#bullmq-metrics-plugin)
16
16
  - [NewRelic Transaction Manager Plugin](#newrelic-transaction-manager-plugin)
17
17
  - [OpenTelemetry Transaction Manager Plugin](#opentelemetry-transaction-manager-plugin)
18
+ - [Datadog Transaction Manager Plugin](#datadog-transaction-manager-plugin)
18
19
  - [UnhandledException Plugin](#unhandledexception-plugin)
19
20
 
20
21
  ## Dependency Management
@@ -36,6 +37,7 @@ The following needs to be taken into consideration when adding new runtime depen
36
37
 
37
38
  - `@fastify/jwt`;
38
39
  - `@opentelemetry/api`;
40
+ - `dd-trace`;
39
41
  - `fastify`;
40
42
  - `newrelic`;
41
43
  - `pino`;
@@ -382,6 +384,60 @@ manager.stop('job-123', true) // true = successful
382
384
 
383
385
  > **Note:** This plugin requires `@opentelemetry/api` as a peer dependency. Make sure your application has OpenTelemetry configured with appropriate exporters (e.g., OTLP exporter) to send traces to your observability backend.
384
386
 
387
+ ### Datadog Transaction Manager Plugin
388
+
389
+ Plugin to create custom Datadog APM spans for background jobs using `dd-trace`. This is an alternative to the NewRelic and OpenTelemetry Transaction Manager plugins for applications using Datadog for observability.
390
+
391
+ **Important:** The Datadog tracer must be pre-initialized before your application starts. Use the `--import` flag to load the tracer:
392
+
393
+ ```bash
394
+ node --import dd-trace/initialize.mjs app.js
395
+ ```
396
+
397
+ The plugin does **not** call `tracer.init()` — it expects the tracer to already be running when the plugin loads.
398
+
399
+ Add the plugin to your Fastify instance by registering it with the following options:
400
+
401
+ - `isEnabled`, if `true` the plugin will create spans using the Datadog tracer.
402
+
403
+ The plugin decorates your Fastify instance with a `DatadogTransactionManager`, which implements the `TransactionObservabilityManager` interface from `@lokalise/node-core`. You can inject and use the following methods:
404
+
405
+ - `start(transactionName, uniqueTransactionKey)`, starts a background span with the provided name and stores it by the unique key;
406
+ - `startWithGroup(transactionName, uniqueTransactionKey, transactionGroup)`, starts a background span with an additional `transaction.group` tag;
407
+ - `stop(uniqueTransactionKey)`, ends the span referenced by the unique key;
408
+ - `addCustomAttribute(attrName, attrValue)`, adds a custom tag to the currently active span. `attrValue` can be a string, number, or boolean;
409
+ - `addCustomAttributes(uniqueTransactionKey, atts)`, adds multiple tags to the span identified by the unique key;
410
+ - `setUserID(userId)`, sets the `usr.id` tag on the active span (Datadog convention);
411
+ - `setControllerName(name, action)`, sets `code.namespace` and `code.function` tags on the active span.
412
+
413
+ Example usage:
414
+
415
+ ```typescript
416
+ import { datadogTransactionManagerPlugin } from '@lokalise/fastify-extras'
417
+
418
+ // Register the plugin
419
+ await app.register(datadogTransactionManagerPlugin, {
420
+ isEnabled: true,
421
+ })
422
+
423
+ // Use in your application
424
+ const manager = app.datadogTransactionManager
425
+
426
+ // Start a transaction
427
+ manager.start('process-email-job', 'job-123')
428
+
429
+ // Add custom attributes
430
+ manager.addCustomAttributes('job-123', {
431
+ jobType: 'email',
432
+ recipient: 'user@example.com',
433
+ })
434
+
435
+ // End the transaction
436
+ manager.stop('job-123')
437
+ ```
438
+
439
+ > **Note:** This plugin requires `dd-trace` as a peer dependency (`>=5.0.0`). The tracer must be initialized externally via `node --import dd-trace/initialize.mjs app.js` — the plugin only obtains the already-running tracer singleton.
440
+
385
441
  ### Amplitude Plugin
386
442
 
387
443
  This plugin facilitates the transmission of events to Amplitude.
package/dist/index.d.ts CHANGED
@@ -6,6 +6,8 @@ export { newrelicTransactionManagerPlugin, NewRelicTransactionManager, } from '.
6
6
  export type { NewRelicTransactionManagerOptions } from './plugins/newrelicTransactionManagerPlugin.js';
7
7
  export { openTelemetryTransactionManagerPlugin, OpenTelemetryTransactionManager, } from './plugins/openTelemetryTransactionManagerPlugin.js';
8
8
  export type { OpenTelemetryTransactionManagerOptions } from './plugins/openTelemetryTransactionManagerPlugin.js';
9
+ export { datadogTransactionManagerPlugin, DatadogTransactionManager, } from './plugins/datadogTransactionManagerPlugin.js';
10
+ export type { DatadogTransactionManagerOptions } from './plugins/datadogTransactionManagerPlugin.js';
9
11
  export { splitIOFeatureManagerPlugin, SplitIOFeatureManager, } from './plugins/splitIOFeatureManagerPlugin.js';
10
12
  export type { SplitIOOptions } from './plugins/splitIOFeatureManagerPlugin.js';
11
13
  export { healthcheckMetricsPlugin, wrapHealthCheckForPrometheus, } from './plugins/healthcheck/healthcheckMetricsPlugin.js';
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ export { bugsnagPlugin, reportErrorToBugsnag, bugsnagErrorReporter, addFeatureFl
2
2
  export { requestContextProviderPlugin, getRequestIdFastifyAppConfig, } from './plugins/requestContextProviderPlugin.js';
3
3
  export { newrelicTransactionManagerPlugin, NewRelicTransactionManager, } from './plugins/newrelicTransactionManagerPlugin.js';
4
4
  export { openTelemetryTransactionManagerPlugin, OpenTelemetryTransactionManager, } from './plugins/openTelemetryTransactionManagerPlugin.js';
5
+ export { datadogTransactionManagerPlugin, DatadogTransactionManager, } from './plugins/datadogTransactionManagerPlugin.js';
5
6
  export { splitIOFeatureManagerPlugin, SplitIOFeatureManager, } from './plugins/splitIOFeatureManagerPlugin.js';
6
7
  export { healthcheckMetricsPlugin, wrapHealthCheckForPrometheus, } from './plugins/healthcheck/healthcheckMetricsPlugin.js';
7
8
  export { PrometheusCounterTransactionManager } from './plugins/prometheus/PrometheusCounterTransactionManager.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,GACf,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,2CAA2C,CAAA;AAGlD,OAAO,EACL,gCAAgC,EAChC,0BAA0B,GAC3B,MAAM,+CAA+C,CAAA;AAGtD,OAAO,EACL,qCAAqC,EACrC,+BAA+B,GAChC,MAAM,oDAAoD,CAAA;AAG3D,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,0CAA0C,CAAA;AAGjD,OAAO,EACL,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,mDAAmD,CAAA;AAO1D,OAAO,EAAE,mCAAmC,EAAE,MAAM,6DAA6D,CAAA;AAEjH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAEtE,OAAO,EACL,yBAAyB,EACzB,kCAAkC,GACnC,MAAM,+CAA+C,CAAA;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAM1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAA;AAO1F,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAA;AAG7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAA;AAG1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAA;AAG5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAA;AAGlG,OAAO,EACL,eAAe,GAGhB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAA;AACpE,OAAO,EACL,gBAAgB,EAChB,6BAA6B,GAG9B,MAAM,yCAAyC,CAAA;AAIhD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAA;AAEhF,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,uCAAuC,CAAA;AAG9C,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAA4B,MAAM,0BAA0B,CAAA;AAGnG,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AAClF,OAAO,EACL,0BAA0B,GAG3B,MAAM,4BAA4B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,GACf,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,2CAA2C,CAAA;AAGlD,OAAO,EACL,gCAAgC,EAChC,0BAA0B,GAC3B,MAAM,+CAA+C,CAAA;AAGtD,OAAO,EACL,qCAAqC,EACrC,+BAA+B,GAChC,MAAM,oDAAoD,CAAA;AAG3D,OAAO,EACL,+BAA+B,EAC/B,yBAAyB,GAC1B,MAAM,8CAA8C,CAAA;AAGrD,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,0CAA0C,CAAA;AAGjD,OAAO,EACL,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,mDAAmD,CAAA;AAO1D,OAAO,EAAE,mCAAmC,EAAE,MAAM,6DAA6D,CAAA;AAEjH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAEtE,OAAO,EACL,yBAAyB,EACzB,kCAAkC,GACnC,MAAM,+CAA+C,CAAA;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAM1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAA;AAO1F,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAA;AAG7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAA;AAG1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAA;AAG5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAA;AAGlG,OAAO,EACL,eAAe,GAGhB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAA;AACpE,OAAO,EACL,gBAAgB,EAChB,6BAA6B,GAG9B,MAAM,yCAAyC,CAAA;AAIhD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAA;AAEhF,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,uCAAuC,CAAA;AAG9C,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAA4B,MAAM,0BAA0B,CAAA;AAGnG,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AAClF,OAAO,EACL,0BAA0B,GAG3B,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,35 @@
1
+ import type { TransactionObservabilityManager } from '@lokalise/node-core';
2
+ import type { FastifyPluginCallback } from 'fastify';
3
+ declare module 'fastify' {
4
+ interface FastifyInstance {
5
+ datadogTransactionManager: DatadogTransactionManager;
6
+ }
7
+ }
8
+ export interface DatadogTransactionManagerOptions {
9
+ isEnabled: boolean;
10
+ }
11
+ export declare class DatadogTransactionManager implements TransactionObservabilityManager {
12
+ private readonly isEnabled;
13
+ private readonly spanMap;
14
+ constructor(isEnabled: boolean);
15
+ static createDisabled(): DatadogTransactionManager;
16
+ /**
17
+ * @param transactionName - used for grouping similar transactions together
18
+ * @param uniqueTransactionKey - used for identifying specific ongoing transaction. Must be reasonably unique to reduce possibility of collisions
19
+ */
20
+ start(transactionName: string, uniqueTransactionKey: string): void;
21
+ /**
22
+ * @param transactionName - used for grouping similar transactions together
23
+ * @param uniqueTransactionKey - used for identifying specific ongoing transaction. Must be reasonably unique to reduce possibility of collisions
24
+ * @param transactionGroup - group is used for grouping related transactions with different names
25
+ */
26
+ startWithGroup(transactionName: string, uniqueTransactionKey: string, transactionGroup: string): void;
27
+ stop(uniqueTransactionKey: string): void;
28
+ addCustomAttribute(attrName: string, attrValue: string | number | boolean): void;
29
+ addCustomAttributes(uniqueTransactionKey: string, atts: {
30
+ [p: string]: string | number | boolean;
31
+ }): void;
32
+ setUserID(userId: string): void;
33
+ setControllerName(name: string, action: string): void;
34
+ }
35
+ export declare const datadogTransactionManagerPlugin: FastifyPluginCallback<DatadogTransactionManagerOptions>;
@@ -0,0 +1,95 @@
1
+ import tracer, {} from 'dd-trace';
2
+ import fp from 'fastify-plugin';
3
+ import { FifoMap } from 'toad-cache';
4
+ export class DatadogTransactionManager {
5
+ isEnabled;
6
+ spanMap;
7
+ constructor(isEnabled) {
8
+ this.isEnabled = isEnabled;
9
+ this.spanMap = new FifoMap(2000);
10
+ }
11
+ static createDisabled() {
12
+ return new DatadogTransactionManager(false);
13
+ }
14
+ /**
15
+ * @param transactionName - used for grouping similar transactions together
16
+ * @param uniqueTransactionKey - used for identifying specific ongoing transaction. Must be reasonably unique to reduce possibility of collisions
17
+ */
18
+ start(transactionName, uniqueTransactionKey) {
19
+ if (!this.isEnabled)
20
+ return;
21
+ const span = tracer.startSpan(transactionName, {
22
+ tags: {
23
+ 'transaction.type': 'background',
24
+ },
25
+ });
26
+ this.spanMap.set(uniqueTransactionKey, span);
27
+ }
28
+ /**
29
+ * @param transactionName - used for grouping similar transactions together
30
+ * @param uniqueTransactionKey - used for identifying specific ongoing transaction. Must be reasonably unique to reduce possibility of collisions
31
+ * @param transactionGroup - group is used for grouping related transactions with different names
32
+ */
33
+ startWithGroup(transactionName, uniqueTransactionKey, transactionGroup) {
34
+ if (!this.isEnabled)
35
+ return;
36
+ const span = tracer.startSpan(transactionName, {
37
+ tags: {
38
+ 'transaction.type': 'background',
39
+ 'transaction.group': transactionGroup,
40
+ },
41
+ });
42
+ this.spanMap.set(uniqueTransactionKey, span);
43
+ }
44
+ stop(uniqueTransactionKey) {
45
+ if (!this.isEnabled)
46
+ return;
47
+ const span = this.spanMap.get(uniqueTransactionKey) ?? null;
48
+ if (!span)
49
+ return;
50
+ span.finish();
51
+ this.spanMap.delete(uniqueTransactionKey);
52
+ }
53
+ addCustomAttribute(attrName, attrValue) {
54
+ if (!this.isEnabled)
55
+ return;
56
+ const activeSpan = tracer.scope().active();
57
+ if (activeSpan) {
58
+ activeSpan.setTag(attrName, attrValue);
59
+ }
60
+ }
61
+ addCustomAttributes(uniqueTransactionKey, atts) {
62
+ if (!this.isEnabled)
63
+ return;
64
+ const span = this.spanMap.get(uniqueTransactionKey);
65
+ if (!span)
66
+ return;
67
+ span.addTags(atts);
68
+ }
69
+ setUserID(userId) {
70
+ if (!this.isEnabled)
71
+ return;
72
+ const activeSpan = tracer.scope().active();
73
+ if (activeSpan) {
74
+ activeSpan.setTag('usr.id', userId);
75
+ }
76
+ }
77
+ setControllerName(name, action) {
78
+ if (!this.isEnabled)
79
+ return;
80
+ const activeSpan = tracer.scope().active();
81
+ if (activeSpan) {
82
+ activeSpan.setTag('code.namespace', name);
83
+ activeSpan.setTag('code.function', action);
84
+ }
85
+ }
86
+ }
87
+ function plugin(fastify, opts) {
88
+ const manager = new DatadogTransactionManager(opts.isEnabled);
89
+ fastify.decorate('datadogTransactionManager', manager);
90
+ }
91
+ export const datadogTransactionManagerPlugin = fp(plugin, {
92
+ fastify: '5.x',
93
+ name: 'datadog-transaction-manager-plugin',
94
+ });
95
+ //# sourceMappingURL=datadogTransactionManagerPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datadogTransactionManagerPlugin.js","sourceRoot":"","sources":["../../lib/plugins/datadogTransactionManagerPlugin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lokalise/fastify-extras",
3
- "version": "30.6.0",
3
+ "version": "30.7.0",
4
4
  "description": "Opinionated set of fastify plugins, commonly used in Lokalise",
5
5
  "author": {
6
6
  "name": "Lokalise",
@@ -55,6 +55,7 @@
55
55
  "fastify": "^5.7.1",
56
56
  "fastify-type-provider-zod": ">=6.0.0",
57
57
  "ioredis": "^5.7.0",
58
+ "dd-trace": ">=5.0.0",
58
59
  "newrelic": ">=11.13.0",
59
60
  "pino": ">=9.9.0",
60
61
  "zod": ">=4.1.5"
@@ -73,10 +74,11 @@
73
74
  "@vitest/coverage-v8": "^3.2.4",
74
75
  "auto-changelog": "^2.4.0",
75
76
  "bullmq": "^5.67.1",
77
+ "dd-trace": "^5.85.0",
76
78
  "fastify": "^5.7.2",
77
79
  "fastify-type-provider-zod": "^6.0.0",
78
80
  "ioredis": "^5.6.1",
79
- "newrelic": "13.10.0",
81
+ "newrelic": "13.12.0",
80
82
  "pino": "^10.0.0",
81
83
  "pino-pretty": "^13.1.1",
82
84
  "rimraf": "^6.0.1",