@launchdarkly/node-server-sdk-otel 1.2.2 → 1.3.1
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/CHANGELOG.md +27 -0
- package/dist/TracingHook.d.ts +10 -0
- package/dist/TracingHook.d.ts.map +1 -1
- package/dist/TracingHook.js +29 -11
- package/dist/TracingHook.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.3.1](https://github.com/launchdarkly/js-core/compare/node-server-sdk-otel-v1.3.0...node-server-sdk-otel-v1.3.1) (2025-07-23)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Dependencies
|
|
7
|
+
|
|
8
|
+
* The following workspace dependencies were updated
|
|
9
|
+
* devDependencies
|
|
10
|
+
* @launchdarkly/node-server-sdk bumped from 9.10.0 to 9.10.1
|
|
11
|
+
* peerDependencies
|
|
12
|
+
* @launchdarkly/node-server-sdk bumped from >=9.4.3 to >=9.10.1
|
|
13
|
+
|
|
14
|
+
## [1.3.0](https://github.com/launchdarkly/js-core/compare/node-server-sdk-otel-v1.2.2...node-server-sdk-otel-v1.3.0) (2025-06-17)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* Update OTEL tracing hook with latest conventions. ([#887](https://github.com/launchdarkly/js-core/issues/887)) ([245f1a3](https://github.com/launchdarkly/js-core/commit/245f1a3a6ca670cf45c7b034c79733c98defdd77))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Dependencies
|
|
23
|
+
|
|
24
|
+
* The following workspace dependencies were updated
|
|
25
|
+
* devDependencies
|
|
26
|
+
* @launchdarkly/node-server-sdk bumped from 9.9.2 to 9.10.0
|
|
27
|
+
* peerDependencies
|
|
28
|
+
* @launchdarkly/node-server-sdk bumped from >=9.4.3 to >=9.10.0
|
|
29
|
+
|
|
3
30
|
## [1.2.2](https://github.com/launchdarkly/js-core/compare/node-server-sdk-otel-v1.2.1...node-server-sdk-otel-v1.2.2) (2025-05-21)
|
|
4
31
|
|
|
5
32
|
|
package/dist/TracingHook.d.ts
CHANGED
|
@@ -19,8 +19,18 @@ export interface TracingHookOptions {
|
|
|
19
19
|
* to span events and spans.
|
|
20
20
|
*
|
|
21
21
|
* The default is false.
|
|
22
|
+
*
|
|
23
|
+
* @deprecated This option is deprecated and will be removed in a future version.
|
|
24
|
+
* This has been replaced by `includeValue`. If both are set, `includeValue` will take precedence.
|
|
22
25
|
*/
|
|
23
26
|
includeVariant?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* If set to true, then the tracing hook will add the evaluated flag value
|
|
29
|
+
* to span events and spans.
|
|
30
|
+
*
|
|
31
|
+
* The default is false.
|
|
32
|
+
*/
|
|
33
|
+
includeValue?: boolean;
|
|
24
34
|
/**
|
|
25
35
|
* Set to use a custom logging configuration, otherwise the logging will be done
|
|
26
36
|
* using `console`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TracingHook.d.ts","sourceRoot":"","sources":["../src/TracingHook.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EAIT,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"TracingHook.d.ts","sourceRoot":"","sources":["../src/TracingHook.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EAIT,MAAM,+BAA+B,CAAC;AAevC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;IAElB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAoED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,YAAW,YAAY,CAAC,IAAI;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;IAElE;;;;OAIG;gBACS,OAAO,CAAC,EAAE,kBAAkB;IAIxC;;OAEG;IACH,WAAW,IAAI,YAAY,CAAC,YAAY;IAMxC;;OAEG;IACH,gBAAgB,CAAC,CACf,WAAW,EAAE,YAAY,CAAC,uBAAuB,EACjD,IAAI,EAAE,YAAY,CAAC,oBAAoB,GACtC,YAAY,CAAC,oBAAoB;IAapC;;OAEG;IACH,eAAe,CAAC,CACd,WAAW,EAAE,YAAY,CAAC,uBAAuB,EACjD,IAAI,EAAE,YAAY,CAAC,oBAAoB,EACvC,MAAM,EAAE,kBAAkB,GACzB,YAAY,CAAC,oBAAoB;CA6BrC"}
|
package/dist/TracingHook.js
CHANGED
|
@@ -5,14 +5,18 @@ const api_1 = require("@opentelemetry/api");
|
|
|
5
5
|
const node_server_sdk_1 = require("@launchdarkly/node-server-sdk");
|
|
6
6
|
const FEATURE_FLAG_SCOPE = 'feature_flag';
|
|
7
7
|
const FEATURE_FLAG_KEY_ATTR = `${FEATURE_FLAG_SCOPE}.key`;
|
|
8
|
-
const FEATURE_FLAG_PROVIDER_ATTR = `${FEATURE_FLAG_SCOPE}.
|
|
9
|
-
const
|
|
10
|
-
const
|
|
8
|
+
const FEATURE_FLAG_PROVIDER_ATTR = `${FEATURE_FLAG_SCOPE}.provider.name`;
|
|
9
|
+
const FEATURE_FLAG_CONTEXT_ID_ATTR = `${FEATURE_FLAG_SCOPE}.context.id`;
|
|
10
|
+
const FEATURE_FLAG_RESULT_ATTR = `${FEATURE_FLAG_SCOPE}.result`;
|
|
11
|
+
const FEATURE_FLAG_VALUE_ATTR = `${FEATURE_FLAG_RESULT_ATTR}.value`;
|
|
12
|
+
const FEATURE_FLAG_VARIATION_INDEX_ATTR = `${FEATURE_FLAG_RESULT_ATTR}.variationIndex`;
|
|
13
|
+
const FEATURE_FLAG_REASON_ATTR = `${FEATURE_FLAG_RESULT_ATTR}.reason`;
|
|
14
|
+
const FEATURE_FLAG_IN_EXPERIMENT_ATTR = `${FEATURE_FLAG_REASON_ATTR}.inExperiment`;
|
|
11
15
|
const FEATURE_FLAG_SET_ID = `${FEATURE_FLAG_SCOPE}.set.id`;
|
|
12
16
|
const TRACING_HOOK_NAME = 'LaunchDarkly Tracing Hook';
|
|
13
17
|
const defaultOptions = {
|
|
14
18
|
spans: false,
|
|
15
|
-
|
|
19
|
+
includeValue: false,
|
|
16
20
|
logger: (0, node_server_sdk_1.basicLogger)({ name: TRACING_HOOK_NAME }),
|
|
17
21
|
environmentId: undefined,
|
|
18
22
|
};
|
|
@@ -21,9 +25,17 @@ function validateOptions(options) {
|
|
|
21
25
|
if ((options === null || options === void 0 ? void 0 : options.logger) !== undefined) {
|
|
22
26
|
validatedOptions.logger = new node_server_sdk_1.SafeLogger(options.logger, defaultOptions.logger);
|
|
23
27
|
}
|
|
24
|
-
if ((options === null || options === void 0 ? void 0 : options.
|
|
28
|
+
if ((options === null || options === void 0 ? void 0 : options.includeValue) !== undefined) {
|
|
29
|
+
if (node_server_sdk_1.TypeValidators.Boolean.is(options.includeValue)) {
|
|
30
|
+
validatedOptions.includeValue = options.includeValue;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
validatedOptions.logger.error(node_server_sdk_1.OptionMessages.wrongOptionType('includeValue', 'boolean', typeof (options === null || options === void 0 ? void 0 : options.includeValue)));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else if ((options === null || options === void 0 ? void 0 : options.includeVariant) !== undefined) {
|
|
25
37
|
if (node_server_sdk_1.TypeValidators.Boolean.is(options.includeVariant)) {
|
|
26
|
-
validatedOptions.
|
|
38
|
+
validatedOptions.includeValue = options.includeVariant;
|
|
27
39
|
}
|
|
28
40
|
else {
|
|
29
41
|
validatedOptions.logger.error(node_server_sdk_1.OptionMessages.wrongOptionType('includeVariant', 'boolean', typeof (options === null || options === void 0 ? void 0 : options.includeVariant)));
|
|
@@ -80,8 +92,8 @@ class TracingHook {
|
|
|
80
92
|
if (this._options.spans) {
|
|
81
93
|
const { canonicalKey } = node_server_sdk_1.Context.fromLDContext(hookContext.context);
|
|
82
94
|
const span = this._tracer.startSpan(hookContext.method, undefined, api_1.context.active());
|
|
83
|
-
span.setAttribute(
|
|
84
|
-
span.setAttribute(
|
|
95
|
+
span.setAttribute(FEATURE_FLAG_CONTEXT_ID_ATTR, canonicalKey);
|
|
96
|
+
span.setAttribute(FEATURE_FLAG_KEY_ATTR, hookContext.flagKey);
|
|
85
97
|
return Object.assign(Object.assign({}, data), { span });
|
|
86
98
|
}
|
|
87
99
|
return data;
|
|
@@ -97,16 +109,22 @@ class TracingHook {
|
|
|
97
109
|
const eventAttributes = {
|
|
98
110
|
[FEATURE_FLAG_KEY_ATTR]: hookContext.flagKey,
|
|
99
111
|
[FEATURE_FLAG_PROVIDER_ATTR]: 'LaunchDarkly',
|
|
100
|
-
[
|
|
112
|
+
[FEATURE_FLAG_CONTEXT_ID_ATTR]: node_server_sdk_1.Context.fromLDContext(hookContext.context).canonicalKey,
|
|
101
113
|
};
|
|
114
|
+
if (typeof detail.variationIndex === 'number') {
|
|
115
|
+
eventAttributes[FEATURE_FLAG_VARIATION_INDEX_ATTR] = detail.variationIndex;
|
|
116
|
+
}
|
|
117
|
+
if (detail.reason.inExperiment) {
|
|
118
|
+
eventAttributes[FEATURE_FLAG_IN_EXPERIMENT_ATTR] = detail.reason.inExperiment;
|
|
119
|
+
}
|
|
102
120
|
if (this._options.environmentId) {
|
|
103
121
|
eventAttributes[FEATURE_FLAG_SET_ID] = this._options.environmentId;
|
|
104
122
|
}
|
|
105
123
|
else if (hookContext.environmentId) {
|
|
106
124
|
eventAttributes[FEATURE_FLAG_SET_ID] = hookContext.environmentId;
|
|
107
125
|
}
|
|
108
|
-
if (this._options.
|
|
109
|
-
eventAttributes[
|
|
126
|
+
if (this._options.includeValue) {
|
|
127
|
+
eventAttributes[FEATURE_FLAG_VALUE_ATTR] = JSON.stringify(detail.value);
|
|
110
128
|
}
|
|
111
129
|
currentTrace.addEvent(FEATURE_FLAG_SCOPE, eventAttributes);
|
|
112
130
|
}
|
package/dist/TracingHook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TracingHook.js","sourceRoot":"","sources":["../src/TracingHook.ts"],"names":[],"mappings":";;AAAA,gDAAgD;AAChD,4CAAsE;AAEtE,mEASuC;AAEvC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAC1C,MAAM,qBAAqB,GAAG,GAAG,kBAAkB,MAAM,CAAC;AAC1D,MAAM,0BAA0B,GAAG,GAAG,kBAAkB,gBAAgB,CAAC;AACzE,MAAM,
|
|
1
|
+
{"version":3,"file":"TracingHook.js","sourceRoot":"","sources":["../src/TracingHook.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@launchdarkly/node-server-sdk-otel",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"@opentelemetry/api": ">=1.3.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@launchdarkly/node-server-sdk": "9.
|
|
36
|
+
"@launchdarkly/node-server-sdk": "9.10.1",
|
|
37
37
|
"@opentelemetry/api": ">=1.3.0",
|
|
38
38
|
"@opentelemetry/sdk-node": "0.49.1",
|
|
39
39
|
"@opentelemetry/sdk-trace-node": "1.22.0",
|