autotel 6.5.0 → 7.0.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 +30 -23
- package/dist/{attribute-redacting-processor-Pk7lAzWd.d.cts → attribute-redacting-processor-CvBE0z1p.d.cts} +33 -1
- package/dist/{attribute-redacting-processor-Pk7lAzWd.d.ts → attribute-redacting-processor-CvBE0z1p.d.ts} +33 -1
- package/dist/attribute-redacting-processor.cjs +34 -32
- package/dist/attribute-redacting-processor.d.cts +1 -1
- package/dist/attribute-redacting-processor.d.ts +1 -1
- package/dist/attribute-redacting-processor.js +35 -32
- package/dist/{attributes-aDmJYral.cjs → attributes-Cxys8tgr.cjs} +34 -35
- package/dist/{attributes-B7wix2VG.js → attributes-Dt4YUYbP.js} +34 -35
- package/dist/attributes.cjs +1 -1
- package/dist/attributes.d.cts +1 -1
- package/dist/attributes.d.ts +1 -1
- package/dist/attributes.js +1 -1
- package/dist/auto.cjs +1 -1
- package/dist/auto.js +1 -1
- package/dist/business-baggage.cjs +19 -12
- package/dist/business-baggage.d.cts +8 -3
- package/dist/business-baggage.d.ts +8 -3
- package/dist/business-baggage.js +19 -12
- package/dist/{canonical-log-line-processor-DxtBGZIi.cjs → canonical-log-line-processor-DolzdawH.cjs} +43 -32
- package/dist/{canonical-log-line-processor-B4WgG-VS.d.cts → canonical-log-line-processor-cPB4Axk-.d.ts} +4 -3
- package/dist/{canonical-log-line-processor-B0vq_QR6.js → canonical-log-line-processor-hFUmS__K.js} +43 -32
- package/dist/{canonical-log-line-processor-CL_J7gb5.d.ts → canonical-log-line-processor-l0Aqe6yp.d.cts} +4 -3
- package/dist/config.d.cts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/{correlated-events-kSwLo3mi.cjs → correlated-events-CcuknWnU.cjs} +2 -1
- package/dist/{correlated-events-Bzh5y-UB.js → correlated-events-DwMMbItg.js} +3 -1
- package/dist/correlation-id.cjs +1 -1
- package/dist/correlation-id.js +1 -1
- package/dist/db.cjs +34 -19
- package/dist/db.js +34 -19
- package/dist/decorators.cjs +4 -2
- package/dist/decorators.d.cts +16 -11
- package/dist/decorators.d.ts +16 -11
- package/dist/decorators.js +4 -2
- package/dist/{define-event-CGG048HE.d.cts → define-event-BNeuKUPv.d.cts} +1 -1
- package/dist/{define-event-B2z1SBe7.d.ts → define-event-Bd8f8mST.d.ts} +1 -1
- package/dist/diagnostics.cjs +18 -16
- package/dist/diagnostics.d.cts +14 -10
- package/dist/diagnostics.d.ts +14 -10
- package/dist/diagnostics.js +18 -16
- package/dist/{event-subscriber-CWh8sTGh.d.cts → event-subscriber-DMACQA-1.d.cts} +19 -9
- package/dist/{event-subscriber-CWh8sTGh.d.ts → event-subscriber-DMACQA-1.d.ts} +19 -9
- package/dist/event-subscriber.d.cts +2 -2
- package/dist/event-subscriber.d.ts +2 -2
- package/dist/{event-testing-D0qWfqAy.d.cts → event-testing-CBtnJXE5.d.cts} +1 -1
- package/dist/{event-testing-CA2mIx1E.d.ts → event-testing-CkPgV3Ii.d.ts} +1 -1
- package/dist/event-testing.d.cts +1 -1
- package/dist/event-testing.d.ts +1 -1
- package/dist/event.cjs +1 -1
- package/dist/event.d.cts +5 -5
- package/dist/event.d.ts +5 -5
- package/dist/event.js +1 -1
- package/dist/exception-fingerprint.cjs +133 -0
- package/dist/exception-fingerprint.d.cts +51 -0
- package/dist/exception-fingerprint.d.ts +51 -0
- package/dist/exception-fingerprint.js +126 -0
- package/dist/{functional-e6jw5zQj.d.cts → functional-CJn2zY4o.d.cts} +96 -39
- package/dist/{functional-AT22vCw6.d.ts → functional-DXy1cHFF.d.ts} +96 -39
- package/dist/{functional-C0uAZq2X.cjs → functional-Da6Yv64r.cjs} +27 -15
- package/dist/{functional-DX7Zvag0.js → functional-uSbNnnxK.js} +27 -15
- package/dist/functional.cjs +1 -1
- package/dist/functional.d.cts +2 -2
- package/dist/functional.d.ts +2 -2
- package/dist/functional.js +1 -1
- package/dist/http.cjs +11 -8
- package/dist/http.js +11 -8
- package/dist/{index-DolOVX6F.d.ts → index-CwrNAsgk.d.ts} +22 -26
- package/dist/{index-BPcxVucm.d.cts → index-DQHf4cNl.d.cts} +22 -26
- package/dist/index.cjs +41 -35
- package/dist/index.d.cts +45 -30
- package/dist/index.d.ts +45 -30
- package/dist/index.js +41 -35
- package/dist/{init-pPI3JRRf.d.ts → init-BgnYi2sm.d.ts} +6 -6
- package/dist/{init-CTtHITlX.cjs → init-D4m5rCmD.cjs} +110 -84
- package/dist/{init-ncTMKZ-s.d.cts → init-DrlL1eis.d.cts} +6 -6
- package/dist/{init-WHYwyItd.js → init-JtX-KKz_.js} +105 -85
- package/dist/instrumentation.cjs +2 -2
- package/dist/instrumentation.js +2 -2
- package/dist/{logger-D3Ej3DII.js → logger-DdPp__xW.js} +63 -54
- package/dist/{logger-CN4xpzMd.d.cts → logger-S1Fgl0g3.d.cts} +0 -20
- package/dist/{logger-CN4xpzMd.d.ts → logger-S1Fgl0g3.d.ts} +0 -20
- package/dist/{logger-thMPLpOG.cjs → logger-Sm66cjKl.cjs} +63 -54
- package/dist/logger.cjs +1 -1
- package/dist/logger.d.cts +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/logger.js +1 -1
- package/dist/messaging-adapters.cjs +26 -12
- package/dist/messaging-adapters.d.cts +0 -30
- package/dist/messaging-adapters.d.ts +0 -30
- package/dist/messaging-adapters.js +26 -12
- package/dist/messaging.cjs +37 -34
- package/dist/messaging.d.cts +21 -62
- package/dist/messaging.d.ts +21 -62
- package/dist/messaging.js +37 -34
- package/dist/{metric-testing-CpvP3ZIa.d.cts → metric-testing-86WO1wan.d.cts} +1 -1
- package/dist/{metric-testing-CWm6UhaR.d.ts → metric-testing-CbCxdPBp.d.ts} +1 -1
- package/dist/metric-testing.d.cts +1 -1
- package/dist/metric-testing.d.ts +1 -1
- package/dist/metric.d.cts +3 -3
- package/dist/metric.d.ts +3 -3
- package/dist/{node-require-vROmTeJ8.js → node-require-DSPjaw_l.js} +3 -2
- package/dist/{node-require-PFqDihze.cjs → node-require-EifOMikz.cjs} +3 -2
- package/dist/parse-error.cjs +18 -12
- package/dist/parse-error.d.cts +2 -1
- package/dist/parse-error.d.ts +2 -1
- package/dist/parse-error.js +19 -12
- package/dist/policy.cjs +0 -0
- package/dist/policy.js +0 -0
- package/dist/processors.cjs +1 -1
- package/dist/processors.d.cts +1 -1
- package/dist/processors.d.ts +1 -1
- package/dist/processors.js +1 -1
- package/dist/{sampling-BR9fkSwx.d.cts → sampling-CM5S2Lp3.d.ts} +5 -6
- package/dist/{sampling-CP3e7-Yr.d.ts → sampling-CmRdnXUi.d.cts} +5 -6
- package/dist/sampling.cjs +3 -2
- package/dist/sampling.d.cts +1 -1
- package/dist/sampling.d.ts +1 -1
- package/dist/sampling.js +3 -2
- package/dist/semantic-helpers.cjs +9 -9
- package/dist/semantic-helpers.d.cts +1 -1
- package/dist/semantic-helpers.d.ts +1 -1
- package/dist/semantic-helpers.js +9 -9
- package/dist/{stable-hash-ChFBIhNt.js → stable-hash-BkoAYVks.js} +4 -3
- package/dist/{stable-hash-CS9BxvVQ.cjs → stable-hash-C0pOegH_.cjs} +4 -3
- package/dist/{structured-error-CHg7DoIQ.cjs → structured-error--_wXpd_C.cjs} +34 -25
- package/dist/{structured-error-9--cxBay.js → structured-error-YIuka-FE.js} +34 -25
- package/dist/test-span-collector.cjs +15 -8
- package/dist/test-span-collector.js +15 -8
- package/dist/testing.cjs +16 -18
- package/dist/testing.d.cts +7 -6
- package/dist/testing.d.ts +7 -6
- package/dist/testing.js +16 -18
- package/dist/{trace-context-IuyoPyNq.d.cts → trace-context-C1Cn1q0y.d.cts} +8 -7
- package/dist/{trace-context-IuyoPyNq.d.ts → trace-context-f89xPJbK.d.ts} +8 -7
- package/dist/trace-helpers.cjs +16 -13
- package/dist/trace-helpers.d.cts +9 -4
- package/dist/trace-helpers.d.ts +9 -4
- package/dist/trace-helpers.js +16 -13
- package/dist/tracer-provider.cjs +8 -12
- package/dist/tracer-provider.js +8 -12
- package/dist/validate.cjs +22 -20
- package/dist/validate.d.cts +3 -2
- package/dist/validate.d.ts +3 -2
- package/dist/validate.js +22 -20
- package/dist/values-BenyvWKz.js +141 -0
- package/dist/values-CeMH-mYG.d.cts +8 -0
- package/dist/values-CeMH-mYG.d.ts +8 -0
- package/dist/values-DApyq53y.cjs +267 -0
- package/dist/webhook.cjs +3 -3
- package/dist/webhook.d.cts +1 -1
- package/dist/webhook.d.ts +1 -1
- package/dist/webhook.js +3 -3
- package/dist/workflow-distributed.cjs +9 -7
- package/dist/workflow-distributed.d.cts +9 -8
- package/dist/workflow-distributed.d.ts +9 -8
- package/dist/workflow-distributed.js +9 -7
- package/dist/workflow.cjs +26 -17
- package/dist/workflow.d.cts +1 -28
- package/dist/workflow.d.ts +1 -28
- package/dist/workflow.js +26 -17
- package/dist/yaml-config.cjs +26 -11
- package/dist/yaml-config.d.cts +9 -3
- package/dist/yaml-config.d.ts +9 -3
- package/dist/yaml-config.js +26 -11
- package/package.json +6 -1
|
@@ -49,26 +49,6 @@ interface BuiltinLoggerOptions {
|
|
|
49
49
|
/** Pretty print for development. Default: false (JSON output) */
|
|
50
50
|
pretty?: boolean;
|
|
51
51
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Create a lightweight structured logger
|
|
54
|
-
*
|
|
55
|
-
* @param service - Service name for logging
|
|
56
|
-
* @param options - Optional configuration
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* ```typescript
|
|
60
|
-
* const log = createBuiltinLogger('user-service');
|
|
61
|
-
*
|
|
62
|
-
* log.info('Creating user', { email: 'test@example.com' });
|
|
63
|
-
* // Output: {"level":"info","service":"user-service","msg":"Creating user",
|
|
64
|
-
* // "email":"test@example.com","traceId":"...","spanId":"..."}
|
|
65
|
-
*
|
|
66
|
-
* // Dynamic log level control per-request
|
|
67
|
-
* runWithLogLevel('debug', () => {
|
|
68
|
-
* log.debug('This will be logged even if logger was created with level: "info"');
|
|
69
|
-
* });
|
|
70
|
-
* ```
|
|
71
|
-
*/
|
|
72
52
|
declare function createBuiltinLogger(service: string, options?: BuiltinLoggerOptions): Logger;
|
|
73
53
|
/**
|
|
74
54
|
* Pino-like factory function for creating an autotel logger
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const require_values = require('./values-DApyq53y.cjs');
|
|
1
2
|
const require_config = require('./config.cjs');
|
|
2
3
|
let _opentelemetry_api = require("@opentelemetry/api");
|
|
3
4
|
|
|
@@ -121,20 +122,47 @@ function getTraceContext() {
|
|
|
121
122
|
* });
|
|
122
123
|
* ```
|
|
123
124
|
*/
|
|
125
|
+
/**
|
|
126
|
+
* The fields a log line carries for its error, following Pino's `err`
|
|
127
|
+
* convention: an Error is spread into message/stack/name, anything else is
|
|
128
|
+
* kept as it was given.
|
|
129
|
+
*/
|
|
130
|
+
function errorFields(extra) {
|
|
131
|
+
if (!extra) return {};
|
|
132
|
+
const { err, ...rest } = extra;
|
|
133
|
+
if (err instanceof Error) return {
|
|
134
|
+
error: err.message,
|
|
135
|
+
stack: err.stack,
|
|
136
|
+
name: err.name,
|
|
137
|
+
...rest
|
|
138
|
+
};
|
|
139
|
+
return err === void 0 ? rest : {
|
|
140
|
+
err,
|
|
141
|
+
...rest
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Warn once per call about a Winston-style invocation, in development only -
|
|
146
|
+
* the arguments are swapped either way, so this is guidance, not an error.
|
|
147
|
+
*/
|
|
148
|
+
function warnLegacyPattern(level, secondArg, recommended) {
|
|
149
|
+
if (process.env.NODE_ENV === "production") return;
|
|
150
|
+
console.warn(`[autotel] Legacy logger pattern detected: logger.${level}('message', ${secondArg}). Autotel recommends Pino signature: logger.${level}(${recommended}, 'message'). Auto-swapping arguments for compatibility.`);
|
|
151
|
+
}
|
|
124
152
|
function createBuiltinLogger(service, options) {
|
|
125
153
|
const defaultLevel = options?.level || "info";
|
|
126
154
|
const pretty = options?.pretty || false;
|
|
127
|
-
const levelPriority =
|
|
128
|
-
none
|
|
129
|
-
debug
|
|
130
|
-
info
|
|
131
|
-
warn
|
|
132
|
-
error
|
|
133
|
-
|
|
155
|
+
const levelPriority = /* @__PURE__ */ new Map([
|
|
156
|
+
["none", -1],
|
|
157
|
+
["debug", 0],
|
|
158
|
+
["info", 1],
|
|
159
|
+
["warn", 2],
|
|
160
|
+
["error", 3]
|
|
161
|
+
]);
|
|
134
162
|
const shouldLog = (level) => {
|
|
135
163
|
const activeLevel = getActiveLogLevel() ?? defaultLevel;
|
|
136
164
|
if (activeLevel === "none") return false;
|
|
137
|
-
return levelPriority
|
|
165
|
+
return (levelPriority.get(level) ?? 0) >= (levelPriority.get(activeLevel) ?? 0);
|
|
138
166
|
};
|
|
139
167
|
const log = (level, msg, attrs) => {
|
|
140
168
|
if (!shouldLog(level)) return;
|
|
@@ -154,11 +182,18 @@ function createBuiltinLogger(service, options) {
|
|
|
154
182
|
};
|
|
155
183
|
const createLogMethod = (level) => {
|
|
156
184
|
return (extraOrMessage, message) => {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
log(level,
|
|
160
|
-
|
|
161
|
-
|
|
185
|
+
const firstAsMessage = require_values.asString(extraOrMessage);
|
|
186
|
+
if (firstAsMessage === void 0) {
|
|
187
|
+
log(level, require_values.asString(message) ?? "", require_values.asRecord(extraOrMessage));
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const legacyExtra = require_values.asRecord(message);
|
|
191
|
+
if (!legacyExtra) {
|
|
192
|
+
log(level, firstAsMessage);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
warnLegacyPattern(level, "metadata", "{ ...metadata }");
|
|
196
|
+
log(level, firstAsMessage, legacyExtra);
|
|
162
197
|
};
|
|
163
198
|
};
|
|
164
199
|
return {
|
|
@@ -166,49 +201,23 @@ function createBuiltinLogger(service, options) {
|
|
|
166
201
|
warn: createLogMethod("warn"),
|
|
167
202
|
debug: createLogMethod("debug"),
|
|
168
203
|
error: (extraOrMessage, message) => {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if (err instanceof Error) errorAttrs = {
|
|
184
|
-
error: err.message,
|
|
185
|
-
stack: err.stack,
|
|
186
|
-
name: err.name,
|
|
187
|
-
...rest
|
|
188
|
-
};
|
|
189
|
-
else if (err !== void 0) errorAttrs = {
|
|
190
|
-
err,
|
|
191
|
-
...rest
|
|
192
|
-
};
|
|
193
|
-
log("error", extraOrMessage, errorAttrs);
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
log("error", extraOrMessage);
|
|
204
|
+
const firstAsMessage = require_values.asString(extraOrMessage);
|
|
205
|
+
if (firstAsMessage === void 0) {
|
|
206
|
+
log("error", require_values.asString(message) ?? "", errorFields(require_values.asRecord(extraOrMessage)));
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
if (message instanceof Error) {
|
|
210
|
+
warnLegacyPattern("error", "error", "{ err: error }");
|
|
211
|
+
log("error", firstAsMessage, errorFields({ err: message }));
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const legacyExtra = require_values.asRecord(message);
|
|
215
|
+
if (legacyExtra) {
|
|
216
|
+
warnLegacyPattern("error", "metadata", "{ ...metadata }");
|
|
217
|
+
log("error", firstAsMessage, errorFields(legacyExtra));
|
|
197
218
|
return;
|
|
198
219
|
}
|
|
199
|
-
|
|
200
|
-
let errorAttrs = rest;
|
|
201
|
-
if (err instanceof Error) errorAttrs = {
|
|
202
|
-
error: err.message,
|
|
203
|
-
stack: err.stack,
|
|
204
|
-
name: err.name,
|
|
205
|
-
...rest
|
|
206
|
-
};
|
|
207
|
-
else if (err !== void 0) errorAttrs = {
|
|
208
|
-
err,
|
|
209
|
-
...rest
|
|
210
|
-
};
|
|
211
|
-
log("error", message || "", errorAttrs);
|
|
220
|
+
log("error", firstAsMessage);
|
|
212
221
|
}
|
|
213
222
|
};
|
|
214
223
|
}
|
package/dist/logger.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_logger = require('./logger-
|
|
2
|
+
const require_logger = require('./logger-Sm66cjKl.cjs');
|
|
3
3
|
|
|
4
4
|
exports.LOG_LEVEL = require_logger.LOG_LEVEL;
|
|
5
5
|
exports.LoggedOperation = require_logger.LoggedOperation;
|
package/dist/logger.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as LoggedOperation, c as LoggerConfig, d as BuiltinLoggerOptions, f as autotelLogger, g as runWithLogLevel, h as getTraceContext, i as LogLevel, l as PinoLogger, m as getActiveLogLevel, n as LOG_LEVEL, o as LoggedOperationOptions, p as createBuiltinLogger, r as LogFn, s as Logger, t as ILogger, u as BuiltinLogLevel } from "./logger-
|
|
1
|
+
import { a as LoggedOperation, c as LoggerConfig, d as BuiltinLoggerOptions, f as autotelLogger, g as runWithLogLevel, h as getTraceContext, i as LogLevel, l as PinoLogger, m as getActiveLogLevel, n as LOG_LEVEL, o as LoggedOperationOptions, p as createBuiltinLogger, r as LogFn, s as Logger, t as ILogger, u as BuiltinLogLevel } from "./logger-S1Fgl0g3.cjs";
|
|
2
2
|
export { type BuiltinLogLevel, type BuiltinLoggerOptions, ILogger, LOG_LEVEL, LogFn, LogLevel, LoggedOperation, LoggedOperationOptions, Logger, LoggerConfig, type PinoLogger, autotelLogger, createBuiltinLogger, getActiveLogLevel, getTraceContext, runWithLogLevel };
|
package/dist/logger.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as LoggedOperation, c as LoggerConfig, d as BuiltinLoggerOptions, f as autotelLogger, g as runWithLogLevel, h as getTraceContext, i as LogLevel, l as PinoLogger, m as getActiveLogLevel, n as LOG_LEVEL, o as LoggedOperationOptions, p as createBuiltinLogger, r as LogFn, s as Logger, t as ILogger, u as BuiltinLogLevel } from "./logger-
|
|
1
|
+
import { a as LoggedOperation, c as LoggerConfig, d as BuiltinLoggerOptions, f as autotelLogger, g as runWithLogLevel, h as getTraceContext, i as LogLevel, l as PinoLogger, m as getActiveLogLevel, n as LOG_LEVEL, o as LoggedOperationOptions, p as createBuiltinLogger, r as LogFn, s as Logger, t as ILogger, u as BuiltinLogLevel } from "./logger-S1Fgl0g3.js";
|
|
2
2
|
export { type BuiltinLogLevel, type BuiltinLoggerOptions, ILogger, LOG_LEVEL, LogFn, LogLevel, LoggedOperation, LoggedOperationOptions, Logger, LoggerConfig, type PinoLogger, autotelLogger, createBuiltinLogger, getActiveLogLevel, getTraceContext, runWithLogLevel };
|
package/dist/logger.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as getActiveLogLevel, i as createBuiltinLogger, n as LoggedOperation, o as getTraceContext, r as autotelLogger, s as runWithLogLevel, t as LOG_LEVEL } from "./logger-
|
|
1
|
+
import { a as getActiveLogLevel, i as createBuiltinLogger, n as LoggedOperation, o as getTraceContext, r as autotelLogger, s as runWithLogLevel, t as LOG_LEVEL } from "./logger-DdPp__xW.js";
|
|
2
2
|
|
|
3
3
|
export { LOG_LEVEL, LoggedOperation, autotelLogger, createBuiltinLogger, getActiveLogLevel, getTraceContext, runWithLogLevel };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_values = require('./values-DApyq53y.cjs');
|
|
2
3
|
let _opentelemetry_api = require("@opentelemetry/api");
|
|
3
4
|
|
|
4
5
|
//#region src/messaging-adapters.ts
|
|
@@ -32,24 +33,31 @@ let _opentelemetry_api = require("@opentelemetry/api");
|
|
|
32
33
|
* });
|
|
33
34
|
* ```
|
|
34
35
|
*/
|
|
36
|
+
/** Set an attribute when the value is a string worth recording. */
|
|
37
|
+
function setIfString(attrs, key, value) {
|
|
38
|
+
const text = require_values.asString(value);
|
|
39
|
+
if (text) attrs[key] = text;
|
|
40
|
+
}
|
|
35
41
|
const natsAdapter = {
|
|
36
42
|
producer: { customAttributes: (_ctx, args) => {
|
|
37
|
-
const msg = args[0];
|
|
43
|
+
const msg = require_values.asRecord(args[0]);
|
|
38
44
|
const attrs = {};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
45
|
+
setIfString(attrs, "nats.subject", msg?.subject);
|
|
46
|
+
setIfString(attrs, "nats.reply_to", msg?.replyTo);
|
|
47
|
+
setIfString(attrs, "nats.stream", msg?.stream);
|
|
42
48
|
return attrs;
|
|
43
49
|
} },
|
|
44
50
|
consumer: {
|
|
45
51
|
headersFrom: (msg) => {
|
|
46
|
-
const headers = msg
|
|
52
|
+
const headers = require_values.asRecord(require_values.readProperty(msg, "headers"));
|
|
47
53
|
if (!headers) return;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
54
|
+
const toJSON = require_values.asFunction(headers.toJSON);
|
|
55
|
+
if (toJSON) {
|
|
56
|
+
const json = require_values.asRecord(toJSON.call(headers));
|
|
57
|
+
if (json) return json;
|
|
51
58
|
}
|
|
52
|
-
|
|
59
|
+
const get = require_values.asFunction(headers.get);
|
|
60
|
+
if (get) {
|
|
53
61
|
const result = {};
|
|
54
62
|
for (const key of [
|
|
55
63
|
"traceparent",
|
|
@@ -60,14 +68,20 @@ const natsAdapter = {
|
|
|
60
68
|
"x-b3-sampled",
|
|
61
69
|
"b3"
|
|
62
70
|
]) {
|
|
63
|
-
const value =
|
|
71
|
+
const value = require_values.asString(get.call(headers, key));
|
|
64
72
|
if (value) result[key] = value;
|
|
65
73
|
}
|
|
66
74
|
if (Object.keys(result).length > 0) return result;
|
|
67
75
|
}
|
|
68
|
-
|
|
76
|
+
const entries = require_values.asFunction(headers.entries);
|
|
77
|
+
if (entries) {
|
|
69
78
|
const result = {};
|
|
70
|
-
|
|
79
|
+
const pairs = entries.call(headers);
|
|
80
|
+
for (const [key, value] of pairs) {
|
|
81
|
+
const name = require_values.asString(key);
|
|
82
|
+
const text = require_values.asString(value);
|
|
83
|
+
if (name !== void 0 && text !== void 0) result[name] = text;
|
|
84
|
+
}
|
|
71
85
|
if (Object.keys(result).length > 0) return result;
|
|
72
86
|
}
|
|
73
87
|
},
|
|
@@ -38,36 +38,6 @@ interface MessagingAdapter {
|
|
|
38
38
|
producer?: ProducerAdapter;
|
|
39
39
|
consumer?: ConsumerAdapter;
|
|
40
40
|
}
|
|
41
|
-
/**
|
|
42
|
-
* NATS JetStream adapter
|
|
43
|
-
*
|
|
44
|
-
* Captures NATS-specific attributes following NATS observability conventions.
|
|
45
|
-
*
|
|
46
|
-
* @example Producer
|
|
47
|
-
* ```typescript
|
|
48
|
-
* const publishOrder = traceProducer({
|
|
49
|
-
* system: 'nats',
|
|
50
|
-
* destination: 'orders.created',
|
|
51
|
-
* ...natsAdapter.producer,
|
|
52
|
-
* })(ctx => async (subject, payload, opts) => {
|
|
53
|
-
* const headers = ctx.getTraceHeaders();
|
|
54
|
-
* await nc.publish(subject, payload, { headers });
|
|
55
|
-
* });
|
|
56
|
-
* ```
|
|
57
|
-
*
|
|
58
|
-
* @example Consumer
|
|
59
|
-
* ```typescript
|
|
60
|
-
* const processOrder = traceConsumer({
|
|
61
|
-
* system: 'nats',
|
|
62
|
-
* destination: 'orders.created',
|
|
63
|
-
* consumerGroup: 'order-processor',
|
|
64
|
-
* ...natsAdapter.consumer,
|
|
65
|
-
* })(ctx => async (msg: JsMsg) => {
|
|
66
|
-
* await handleOrder(msg.data);
|
|
67
|
-
* msg.ack();
|
|
68
|
-
* });
|
|
69
|
-
* ```
|
|
70
|
-
*/
|
|
71
41
|
declare const natsAdapter: MessagingAdapter;
|
|
72
42
|
/**
|
|
73
43
|
* Temporal adapter
|
|
@@ -38,36 +38,6 @@ interface MessagingAdapter {
|
|
|
38
38
|
producer?: ProducerAdapter;
|
|
39
39
|
consumer?: ConsumerAdapter;
|
|
40
40
|
}
|
|
41
|
-
/**
|
|
42
|
-
* NATS JetStream adapter
|
|
43
|
-
*
|
|
44
|
-
* Captures NATS-specific attributes following NATS observability conventions.
|
|
45
|
-
*
|
|
46
|
-
* @example Producer
|
|
47
|
-
* ```typescript
|
|
48
|
-
* const publishOrder = traceProducer({
|
|
49
|
-
* system: 'nats',
|
|
50
|
-
* destination: 'orders.created',
|
|
51
|
-
* ...natsAdapter.producer,
|
|
52
|
-
* })(ctx => async (subject, payload, opts) => {
|
|
53
|
-
* const headers = ctx.getTraceHeaders();
|
|
54
|
-
* await nc.publish(subject, payload, { headers });
|
|
55
|
-
* });
|
|
56
|
-
* ```
|
|
57
|
-
*
|
|
58
|
-
* @example Consumer
|
|
59
|
-
* ```typescript
|
|
60
|
-
* const processOrder = traceConsumer({
|
|
61
|
-
* system: 'nats',
|
|
62
|
-
* destination: 'orders.created',
|
|
63
|
-
* consumerGroup: 'order-processor',
|
|
64
|
-
* ...natsAdapter.consumer,
|
|
65
|
-
* })(ctx => async (msg: JsMsg) => {
|
|
66
|
-
* await handleOrder(msg.data);
|
|
67
|
-
* msg.ack();
|
|
68
|
-
* });
|
|
69
|
-
* ```
|
|
70
|
-
*/
|
|
71
41
|
declare const natsAdapter: MessagingAdapter;
|
|
72
42
|
/**
|
|
73
43
|
* Temporal adapter
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { _ as readProperty, l as asString, r as asFunction, s as asRecord } from "./values-BenyvWKz.js";
|
|
1
2
|
import { TraceFlags } from "@opentelemetry/api";
|
|
2
3
|
|
|
3
4
|
//#region src/messaging-adapters.ts
|
|
@@ -31,24 +32,31 @@ import { TraceFlags } from "@opentelemetry/api";
|
|
|
31
32
|
* });
|
|
32
33
|
* ```
|
|
33
34
|
*/
|
|
35
|
+
/** Set an attribute when the value is a string worth recording. */
|
|
36
|
+
function setIfString(attrs, key, value) {
|
|
37
|
+
const text = asString(value);
|
|
38
|
+
if (text) attrs[key] = text;
|
|
39
|
+
}
|
|
34
40
|
const natsAdapter = {
|
|
35
41
|
producer: { customAttributes: (_ctx, args) => {
|
|
36
|
-
const msg = args[0];
|
|
42
|
+
const msg = asRecord(args[0]);
|
|
37
43
|
const attrs = {};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
setIfString(attrs, "nats.subject", msg?.subject);
|
|
45
|
+
setIfString(attrs, "nats.reply_to", msg?.replyTo);
|
|
46
|
+
setIfString(attrs, "nats.stream", msg?.stream);
|
|
41
47
|
return attrs;
|
|
42
48
|
} },
|
|
43
49
|
consumer: {
|
|
44
50
|
headersFrom: (msg) => {
|
|
45
|
-
const headers = msg
|
|
51
|
+
const headers = asRecord(readProperty(msg, "headers"));
|
|
46
52
|
if (!headers) return;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
53
|
+
const toJSON = asFunction(headers.toJSON);
|
|
54
|
+
if (toJSON) {
|
|
55
|
+
const json = asRecord(toJSON.call(headers));
|
|
56
|
+
if (json) return json;
|
|
50
57
|
}
|
|
51
|
-
|
|
58
|
+
const get = asFunction(headers.get);
|
|
59
|
+
if (get) {
|
|
52
60
|
const result = {};
|
|
53
61
|
for (const key of [
|
|
54
62
|
"traceparent",
|
|
@@ -59,14 +67,20 @@ const natsAdapter = {
|
|
|
59
67
|
"x-b3-sampled",
|
|
60
68
|
"b3"
|
|
61
69
|
]) {
|
|
62
|
-
const value =
|
|
70
|
+
const value = asString(get.call(headers, key));
|
|
63
71
|
if (value) result[key] = value;
|
|
64
72
|
}
|
|
65
73
|
if (Object.keys(result).length > 0) return result;
|
|
66
74
|
}
|
|
67
|
-
|
|
75
|
+
const entries = asFunction(headers.entries);
|
|
76
|
+
if (entries) {
|
|
68
77
|
const result = {};
|
|
69
|
-
|
|
78
|
+
const pairs = entries.call(headers);
|
|
79
|
+
for (const [key, value] of pairs) {
|
|
80
|
+
const name = asString(key);
|
|
81
|
+
const text = asString(value);
|
|
82
|
+
if (name !== void 0 && text !== void 0) result[name] = text;
|
|
83
|
+
}
|
|
70
84
|
if (Object.keys(result).length > 0) return result;
|
|
71
85
|
}
|
|
72
86
|
},
|
package/dist/messaging.cjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_values = require('./values-DApyq53y.cjs');
|
|
2
3
|
const require_sampling = require('./sampling.cjs');
|
|
3
|
-
const require_functional = require('./functional-
|
|
4
|
-
const require_correlated_events = require('./correlated-events-
|
|
4
|
+
const require_functional = require('./functional-Da6Yv64r.cjs');
|
|
5
|
+
const require_correlated_events = require('./correlated-events-CcuknWnU.cjs');
|
|
5
6
|
const require_trace_factory_validation = require('./trace-factory-validation-Dc8epn87.cjs');
|
|
6
7
|
let _opentelemetry_api = require("@opentelemetry/api");
|
|
7
8
|
|
|
@@ -91,10 +92,22 @@ let _opentelemetry_api = require("@opentelemetry/api");
|
|
|
91
92
|
* });
|
|
92
93
|
* ```
|
|
93
94
|
*/
|
|
95
|
+
/** The Error an onError callback expects, wrapping a non-Error rejection. */
|
|
96
|
+
function toError(cause) {
|
|
97
|
+
return cause instanceof Error ? cause : new Error(String(cause));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check a config a JavaScript caller may have built by hand. TypeScript has
|
|
101
|
+
* already checked it for everyone else, so this only has to catch the shapes
|
|
102
|
+
* that reach here untyped.
|
|
103
|
+
*/
|
|
104
|
+
function assertMessagingConfig(fn, config) {
|
|
105
|
+
const record = require_values.asRecord(config);
|
|
106
|
+
if (!record) throw new TypeError(`${fn}: config must be an object`);
|
|
107
|
+
for (const field of ["system", "destination"]) if (require_values.nonEmptyString(record[field]) === void 0) throw new TypeError(`${fn}: config.${field} must be a non-empty string`);
|
|
108
|
+
}
|
|
94
109
|
function traceProducer(config) {
|
|
95
|
-
|
|
96
|
-
if (typeof config.system !== "string" || config.system.trim() === "") throw new TypeError("traceProducer: config.system must be a non-empty string");
|
|
97
|
-
if (typeof config.destination !== "string" || config.destination.trim() === "") throw new TypeError("traceProducer: config.destination must be a non-empty string");
|
|
110
|
+
assertMessagingConfig("traceProducer", config);
|
|
98
111
|
const spanName = `publish ${config.destination}`;
|
|
99
112
|
return (fnFactory) => {
|
|
100
113
|
require_trace_factory_validation.assertTraceFactory("traceProducer", fnFactory);
|
|
@@ -114,7 +127,7 @@ function traceProducer(config) {
|
|
|
114
127
|
const userFn = fnFactory(ctx);
|
|
115
128
|
require_trace_factory_validation.assertTraceFactory("traceProducer", userFn, "result");
|
|
116
129
|
return Promise.resolve(userFn(...args)).catch((error) => {
|
|
117
|
-
if (config.onError) config.onError(error, ctx);
|
|
130
|
+
if (config.onError) config.onError(toError(error), ctx);
|
|
118
131
|
throw error;
|
|
119
132
|
});
|
|
120
133
|
};
|
|
@@ -189,10 +202,9 @@ function traceProducer(config) {
|
|
|
189
202
|
* });
|
|
190
203
|
* ```
|
|
191
204
|
*/
|
|
192
|
-
function traceConsumer(
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
if (typeof config.destination !== "string" || config.destination.trim() === "") throw new TypeError("traceConsumer: config.destination must be a non-empty string");
|
|
205
|
+
function traceConsumer(typedConfig) {
|
|
206
|
+
const config = typedConfig;
|
|
207
|
+
assertMessagingConfig("traceConsumer", config);
|
|
196
208
|
const spanName = `${config.batchMode ? "receive" : "process"} ${config.destination}`;
|
|
197
209
|
return (fnFactory) => {
|
|
198
210
|
require_trace_factory_validation.assertTraceFactory("traceConsumer", fnFactory);
|
|
@@ -209,15 +221,16 @@ function traceConsumer(config) {
|
|
|
209
221
|
outOfOrderInfo: null
|
|
210
222
|
};
|
|
211
223
|
const groupTracking = config.consumerGroupTracking;
|
|
212
|
-
const
|
|
213
|
-
memberId:
|
|
214
|
-
groupInstanceId:
|
|
224
|
+
const groupState = {
|
|
225
|
+
memberId: require_values.resolveValue(groupTracking?.memberId) ?? null,
|
|
226
|
+
groupInstanceId: require_values.resolveValue(groupTracking?.groupInstanceId) ?? null,
|
|
215
227
|
assignedPartitions: [],
|
|
216
228
|
generation: null,
|
|
217
229
|
isActive: true,
|
|
218
230
|
lastHeartbeat: null,
|
|
219
231
|
state: null
|
|
220
|
-
}
|
|
232
|
+
};
|
|
233
|
+
const ctx = extendContextForConsumer(baseCtx, config, linkStorage, orderingState, groupState);
|
|
221
234
|
setConsumerAttributes(ctx, config);
|
|
222
235
|
return async (...args) => {
|
|
223
236
|
await extractAndAddLinks(ctx, config, args, linkStorage);
|
|
@@ -234,7 +247,7 @@ function traceConsumer(config) {
|
|
|
234
247
|
const userFn = fnFactory(ctx);
|
|
235
248
|
require_trace_factory_validation.assertTraceFactory("traceConsumer", userFn, "result");
|
|
236
249
|
return Promise.resolve(userFn(...args)).catch((error) => {
|
|
237
|
-
if (config.onError) config.onError(error, ctx);
|
|
250
|
+
if (config.onError) config.onError(toError(error), ctx);
|
|
238
251
|
throw error;
|
|
239
252
|
});
|
|
240
253
|
};
|
|
@@ -307,12 +320,8 @@ function extendContextForConsumer(baseCtx, config, linkStorage, orderingState, g
|
|
|
307
320
|
const consumerCtx = {
|
|
308
321
|
...baseCtx,
|
|
309
322
|
recordDLQ(reason, dlqNameOrOptions, optionsParam) {
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
if (typeof dlqNameOrOptions === "string") {
|
|
313
|
-
dlqName = dlqNameOrOptions;
|
|
314
|
-
options = optionsParam;
|
|
315
|
-
} else if (typeof dlqNameOrOptions === "object") options = dlqNameOrOptions;
|
|
323
|
+
const { name: dlqName, options: inlineOptions } = require_values.splitNameOrOptions(dlqNameOrOptions);
|
|
324
|
+
const options = dlqName === void 0 ? inlineOptions : optionsParam;
|
|
316
325
|
const linkToProducer = options?.linkToProducer ?? true;
|
|
317
326
|
baseCtx.setAttribute("messaging.dlq.reason", reason);
|
|
318
327
|
if (dlqName) baseCtx.setAttribute("messaging.dlq.name", dlqName);
|
|
@@ -605,29 +614,23 @@ async function extractLagMetrics(ctx, lagConfig, args) {
|
|
|
605
614
|
* Extract headers from message using config
|
|
606
615
|
*/
|
|
607
616
|
function extractHeaders(headersFrom, msg) {
|
|
608
|
-
if (
|
|
609
|
-
|
|
610
|
-
const value = msg[headersFrom];
|
|
611
|
-
if (typeof value === "object" && value !== null) return value;
|
|
612
|
-
}
|
|
617
|
+
if (require_values.isFunction(headersFrom)) return headersFrom(msg);
|
|
618
|
+
return require_values.asRecord(require_values.readProperty(msg, headersFrom));
|
|
613
619
|
}
|
|
614
620
|
/**
|
|
615
621
|
* Extract value from arguments using config
|
|
616
622
|
*/
|
|
617
623
|
function extractValue(extractor, args) {
|
|
618
|
-
|
|
619
|
-
const firstArg = args[0];
|
|
620
|
-
if (typeof firstArg === "object" && firstArg !== null) return firstArg[extractor];
|
|
624
|
+
return require_values.isFunction(extractor) ? extractor(args) : require_values.asScalar(require_values.readProperty(args[0], extractor));
|
|
621
625
|
}
|
|
622
626
|
/**
|
|
623
627
|
* Set custom attributes on context, handling non-primitive values
|
|
624
628
|
*/
|
|
625
629
|
function setCustomAttributes(ctx, attributes) {
|
|
626
|
-
for (const [key, value] of Object.entries(attributes))
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
} else ctx.setAttribute(key, JSON.stringify(value));
|
|
630
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
631
|
+
const attribute = require_values.toAttributeValue(value);
|
|
632
|
+
if (attribute !== void 0) ctx.setAttribute(key, attribute);
|
|
633
|
+
}
|
|
631
634
|
}
|
|
632
635
|
/**
|
|
633
636
|
* Extract and process ordering information from message
|