@superblocksteam/telemetry 2.0.83-next.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/LICENSE.txt +87 -0
- package/README.md +155 -0
- package/dist/browser/index.d.ts +8 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +19 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/init.d.ts +75 -0
- package/dist/browser/init.d.ts.map +1 -0
- package/dist/browser/init.js +169 -0
- package/dist/browser/init.js.map +1 -0
- package/dist/browser/resilient-exporter.d.ts +43 -0
- package/dist/browser/resilient-exporter.d.ts.map +1 -0
- package/dist/browser/resilient-exporter.js +88 -0
- package/dist/browser/resilient-exporter.js.map +1 -0
- package/dist/common/contracts/tier2-traces.d.ts +75 -0
- package/dist/common/contracts/tier2-traces.d.ts.map +1 -0
- package/dist/common/contracts/tier2-traces.js +186 -0
- package/dist/common/contracts/tier2-traces.js.map +1 -0
- package/dist/common/deployment-type.d.ts +18 -0
- package/dist/common/deployment-type.d.ts.map +1 -0
- package/dist/common/deployment-type.js +30 -0
- package/dist/common/deployment-type.js.map +1 -0
- package/dist/common/guardrails.d.ts +116 -0
- package/dist/common/guardrails.d.ts.map +1 -0
- package/dist/common/guardrails.js +189 -0
- package/dist/common/guardrails.js.map +1 -0
- package/dist/common/index.d.ts +16 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +32 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/log-sanitizer.d.ts +78 -0
- package/dist/common/log-sanitizer.d.ts.map +1 -0
- package/dist/common/log-sanitizer.js +340 -0
- package/dist/common/log-sanitizer.js.map +1 -0
- package/dist/common/policy-evaluator.d.ts +103 -0
- package/dist/common/policy-evaluator.d.ts.map +1 -0
- package/dist/common/policy-evaluator.js +200 -0
- package/dist/common/policy-evaluator.js.map +1 -0
- package/dist/common/resource.d.ts +62 -0
- package/dist/common/resource.d.ts.map +1 -0
- package/dist/common/resource.js +106 -0
- package/dist/common/resource.js.map +1 -0
- package/dist/common/tier-hints.d.ts +182 -0
- package/dist/common/tier-hints.d.ts.map +1 -0
- package/dist/common/tier-hints.js +209 -0
- package/dist/common/tier-hints.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/lint/forbidden-attributes.d.ts +149 -0
- package/dist/lint/forbidden-attributes.d.ts.map +1 -0
- package/dist/lint/forbidden-attributes.js +214 -0
- package/dist/lint/forbidden-attributes.js.map +1 -0
- package/dist/lint/index.d.ts +9 -0
- package/dist/lint/index.d.ts.map +1 -0
- package/dist/lint/index.js +16 -0
- package/dist/lint/index.js.map +1 -0
- package/dist/llmobs/index.d.ts +22 -0
- package/dist/llmobs/index.d.ts.map +1 -0
- package/dist/llmobs/index.js +29 -0
- package/dist/llmobs/index.js.map +1 -0
- package/dist/llmobs/tier1-exporter.d.ts +146 -0
- package/dist/llmobs/tier1-exporter.d.ts.map +1 -0
- package/dist/llmobs/tier1-exporter.js +196 -0
- package/dist/llmobs/tier1-exporter.js.map +1 -0
- package/dist/llmobs/tier2-summarizer.d.ts +268 -0
- package/dist/llmobs/tier2-summarizer.d.ts.map +1 -0
- package/dist/llmobs/tier2-summarizer.js +650 -0
- package/dist/llmobs/tier2-summarizer.js.map +1 -0
- package/dist/node/exporters/resilient-exporter.d.ts +77 -0
- package/dist/node/exporters/resilient-exporter.d.ts.map +1 -0
- package/dist/node/exporters/resilient-exporter.js +129 -0
- package/dist/node/exporters/resilient-exporter.js.map +1 -0
- package/dist/node/index.d.ts +11 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +24 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/init.d.ts +75 -0
- package/dist/node/init.d.ts.map +1 -0
- package/dist/node/init.js +245 -0
- package/dist/node/init.js.map +1 -0
- package/dist/node/log-processor.d.ts +83 -0
- package/dist/node/log-processor.d.ts.map +1 -0
- package/dist/node/log-processor.js +266 -0
- package/dist/node/log-processor.js.map +1 -0
- package/dist/node/metrics-client.d.ts +66 -0
- package/dist/node/metrics-client.d.ts.map +1 -0
- package/dist/node/metrics-client.js +193 -0
- package/dist/node/metrics-client.js.map +1 -0
- package/dist/node/traced-socket.d.ts +76 -0
- package/dist/node/traced-socket.d.ts.map +1 -0
- package/dist/node/traced-socket.js +261 -0
- package/dist/node/traced-socket.js.map +1 -0
- package/dist/testing/in-memory-exporter.d.ts +179 -0
- package/dist/testing/in-memory-exporter.d.ts.map +1 -0
- package/dist/testing/in-memory-exporter.js +254 -0
- package/dist/testing/in-memory-exporter.js.map +1 -0
- package/dist/testing/index.d.ts +8 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +19 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/test-init.d.ts +80 -0
- package/dist/testing/test-init.d.ts.map +1 -0
- package/dist/testing/test-init.js +144 -0
- package/dist/testing/test-init.js.map +1 -0
- package/dist/types/index.d.ts +40 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/policy.d.ts +92 -0
- package/dist/types/policy.d.ts.map +1 -0
- package/dist/types/policy.js +125 -0
- package/dist/types/policy.js.map +1 -0
- package/dist-esm/browser/index.d.ts +8 -0
- package/dist-esm/browser/index.d.ts.map +1 -0
- package/dist-esm/browser/index.js +9 -0
- package/dist-esm/browser/index.js.map +1 -0
- package/dist-esm/browser/init.d.ts +75 -0
- package/dist-esm/browser/init.d.ts.map +1 -0
- package/dist-esm/browser/init.js +162 -0
- package/dist-esm/browser/init.js.map +1 -0
- package/dist-esm/browser/resilient-exporter.d.ts +43 -0
- package/dist-esm/browser/resilient-exporter.d.ts.map +1 -0
- package/dist-esm/browser/resilient-exporter.js +84 -0
- package/dist-esm/browser/resilient-exporter.js.map +1 -0
- package/dist-esm/common/contracts/tier2-traces.d.ts +75 -0
- package/dist-esm/common/contracts/tier2-traces.d.ts.map +1 -0
- package/dist-esm/common/contracts/tier2-traces.js +178 -0
- package/dist-esm/common/contracts/tier2-traces.js.map +1 -0
- package/dist-esm/common/deployment-type.d.ts +18 -0
- package/dist-esm/common/deployment-type.d.ts.map +1 -0
- package/dist-esm/common/deployment-type.js +27 -0
- package/dist-esm/common/deployment-type.js.map +1 -0
- package/dist-esm/common/guardrails.d.ts +116 -0
- package/dist-esm/common/guardrails.d.ts.map +1 -0
- package/dist-esm/common/guardrails.js +179 -0
- package/dist-esm/common/guardrails.js.map +1 -0
- package/dist-esm/common/index.d.ts +16 -0
- package/dist-esm/common/index.d.ts.map +1 -0
- package/dist-esm/common/index.js +16 -0
- package/dist-esm/common/index.js.map +1 -0
- package/dist-esm/common/log-sanitizer.d.ts +78 -0
- package/dist-esm/common/log-sanitizer.d.ts.map +1 -0
- package/dist-esm/common/log-sanitizer.js +331 -0
- package/dist-esm/common/log-sanitizer.js.map +1 -0
- package/dist-esm/common/policy-evaluator.d.ts +103 -0
- package/dist-esm/common/policy-evaluator.d.ts.map +1 -0
- package/dist-esm/common/policy-evaluator.js +196 -0
- package/dist-esm/common/policy-evaluator.js.map +1 -0
- package/dist-esm/common/resource.d.ts +62 -0
- package/dist-esm/common/resource.d.ts.map +1 -0
- package/dist-esm/common/resource.js +100 -0
- package/dist-esm/common/resource.js.map +1 -0
- package/dist-esm/common/tier-hints.d.ts +182 -0
- package/dist-esm/common/tier-hints.d.ts.map +1 -0
- package/dist-esm/common/tier-hints.js +199 -0
- package/dist-esm/common/tier-hints.js.map +1 -0
- package/dist-esm/index.d.ts +43 -0
- package/dist-esm/index.d.ts.map +1 -0
- package/dist-esm/index.js +53 -0
- package/dist-esm/index.js.map +1 -0
- package/dist-esm/lint/forbidden-attributes.d.ts +149 -0
- package/dist-esm/lint/forbidden-attributes.d.ts.map +1 -0
- package/dist-esm/lint/forbidden-attributes.js +209 -0
- package/dist-esm/lint/forbidden-attributes.js.map +1 -0
- package/dist-esm/lint/index.d.ts +9 -0
- package/dist-esm/lint/index.d.ts.map +1 -0
- package/dist-esm/lint/index.js +9 -0
- package/dist-esm/lint/index.js.map +1 -0
- package/dist-esm/llmobs/index.d.ts +22 -0
- package/dist-esm/llmobs/index.d.ts.map +1 -0
- package/dist-esm/llmobs/index.js +22 -0
- package/dist-esm/llmobs/index.js.map +1 -0
- package/dist-esm/llmobs/tier1-exporter.d.ts +146 -0
- package/dist-esm/llmobs/tier1-exporter.d.ts.map +1 -0
- package/dist-esm/llmobs/tier1-exporter.js +190 -0
- package/dist-esm/llmobs/tier1-exporter.js.map +1 -0
- package/dist-esm/llmobs/tier2-summarizer.d.ts +268 -0
- package/dist-esm/llmobs/tier2-summarizer.d.ts.map +1 -0
- package/dist-esm/llmobs/tier2-summarizer.js +646 -0
- package/dist-esm/llmobs/tier2-summarizer.js.map +1 -0
- package/dist-esm/node/exporters/resilient-exporter.d.ts +77 -0
- package/dist-esm/node/exporters/resilient-exporter.d.ts.map +1 -0
- package/dist-esm/node/exporters/resilient-exporter.js +125 -0
- package/dist-esm/node/exporters/resilient-exporter.js.map +1 -0
- package/dist-esm/node/index.d.ts +11 -0
- package/dist-esm/node/index.d.ts.map +1 -0
- package/dist-esm/node/index.js +11 -0
- package/dist-esm/node/index.js.map +1 -0
- package/dist-esm/node/init.d.ts +75 -0
- package/dist-esm/node/init.d.ts.map +1 -0
- package/dist-esm/node/init.js +239 -0
- package/dist-esm/node/init.js.map +1 -0
- package/dist-esm/node/log-processor.d.ts +83 -0
- package/dist-esm/node/log-processor.d.ts.map +1 -0
- package/dist-esm/node/log-processor.js +261 -0
- package/dist-esm/node/log-processor.js.map +1 -0
- package/dist-esm/node/metrics-client.d.ts +66 -0
- package/dist-esm/node/metrics-client.d.ts.map +1 -0
- package/dist-esm/node/metrics-client.js +189 -0
- package/dist-esm/node/metrics-client.js.map +1 -0
- package/dist-esm/node/traced-socket.d.ts +76 -0
- package/dist-esm/node/traced-socket.d.ts.map +1 -0
- package/dist-esm/node/traced-socket.js +257 -0
- package/dist-esm/node/traced-socket.js.map +1 -0
- package/dist-esm/testing/in-memory-exporter.d.ts +179 -0
- package/dist-esm/testing/in-memory-exporter.d.ts.map +1 -0
- package/dist-esm/testing/in-memory-exporter.js +248 -0
- package/dist-esm/testing/in-memory-exporter.js.map +1 -0
- package/dist-esm/testing/index.d.ts +8 -0
- package/dist-esm/testing/index.d.ts.map +1 -0
- package/dist-esm/testing/index.js +8 -0
- package/dist-esm/testing/index.js.map +1 -0
- package/dist-esm/testing/test-init.d.ts +80 -0
- package/dist-esm/testing/test-init.d.ts.map +1 -0
- package/dist-esm/testing/test-init.js +137 -0
- package/dist-esm/testing/test-init.js.map +1 -0
- package/dist-esm/types/index.d.ts +40 -0
- package/dist-esm/types/index.d.ts.map +1 -0
- package/dist-esm/types/index.js +7 -0
- package/dist-esm/types/index.js.map +1 -0
- package/dist-esm/types/policy.d.ts +92 -0
- package/dist-esm/types/policy.d.ts.map +1 -0
- package/dist-esm/types/policy.js +122 -0
- package/dist-esm/types/policy.js.map +1 -0
- package/package.json +101 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TracedSocket for WebSocket connections with OpenTelemetry tracing.
|
|
3
|
+
*
|
|
4
|
+
* This is a generic implementation that can be used across services.
|
|
5
|
+
* Server-specific behavior (like error handling) is injected via callbacks.
|
|
6
|
+
*/
|
|
7
|
+
import { IncomingHttpHeaders } from "http";
|
|
8
|
+
import { ISocket, ISocketClient, MethodHandler, RequestContextBase, SocketMessage, SocketError, MethodHandlers, GenericMiddleware, SocketTimeouts } from "@superblocksteam/shared";
|
|
9
|
+
/**
|
|
10
|
+
* PinoLogger interface compatible with pino.
|
|
11
|
+
*/
|
|
12
|
+
interface PinoLogger {
|
|
13
|
+
error: (obj: object, msg?: string) => void;
|
|
14
|
+
info: (obj: object, msg?: string) => void;
|
|
15
|
+
warn: (obj: object, msg?: string) => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* WebSocket interface (subset of isomorphic-ws).
|
|
19
|
+
*/
|
|
20
|
+
interface WebSocketLike {
|
|
21
|
+
readonly readyState: number;
|
|
22
|
+
close(code?: number, reason?: string): void;
|
|
23
|
+
send(data: string | ArrayBuffer): void;
|
|
24
|
+
addEventListener(type: string, listener: (event: unknown) => void): void;
|
|
25
|
+
removeEventListener(type: string, listener: (event: unknown) => void): void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Configuration options for TracedSocket.
|
|
29
|
+
*/
|
|
30
|
+
export interface TracedSocketConfig {
|
|
31
|
+
/** Request headers from the WebSocket upgrade request */
|
|
32
|
+
requestHeaders: IncomingHttpHeaders;
|
|
33
|
+
/** Optional error handler to get HTTP status from errors */
|
|
34
|
+
getResponseMetaByError?: (error: Error, logger: PinoLogger) => {
|
|
35
|
+
status: number;
|
|
36
|
+
message: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Socket options passed to ISocket.
|
|
41
|
+
*/
|
|
42
|
+
export interface TracedSocketOptions {
|
|
43
|
+
onClose: (event: {
|
|
44
|
+
code: number;
|
|
45
|
+
reason: string;
|
|
46
|
+
}) => void;
|
|
47
|
+
timeouts?: SocketTimeouts;
|
|
48
|
+
logger?: {
|
|
49
|
+
error: (message?: string) => void;
|
|
50
|
+
info: (message?: string) => void;
|
|
51
|
+
warn: (message?: string) => void;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* TracedSocket extends ISocket to add OpenTelemetry tracing capabilities.
|
|
56
|
+
*
|
|
57
|
+
* It manages spans for WebSocket handler calls to provide detailed tracing information.
|
|
58
|
+
*/
|
|
59
|
+
export declare class TracedSocket<ImplementedMethods, CallableMethods, RequestContext extends RequestContextBase> extends ISocket<ImplementedMethods, CallableMethods, RequestContext> {
|
|
60
|
+
private activeSpanByRequestId;
|
|
61
|
+
private middlewareSpanByReqId;
|
|
62
|
+
private lastActiveSpan;
|
|
63
|
+
private readonly requestHeaders;
|
|
64
|
+
private readonly tracer;
|
|
65
|
+
private readonly setHttpStatusFromError;
|
|
66
|
+
constructor(ws: WebSocketLike, requestHandlers: MethodHandlers<ImplementedMethods, CallableMethods, RequestContext>, globalMiddlewares: GenericMiddleware<CallableMethods, RequestContext>[], config: TracedSocketConfig, options: TracedSocketOptions);
|
|
67
|
+
protected callHandler<Params, Result, CallableMethodsInner, RequestContextInner extends RequestContextBase>(handler: MethodHandler<Params, Result, CallableMethodsInner, RequestContextInner>, params: Params, ctx: RequestContextInner, client: ISocketClient<CallableMethodsInner>, next: () => Promise<Result>): Promise<Result>;
|
|
68
|
+
protected handleMessage(message: SocketMessage): Promise<void>;
|
|
69
|
+
request<Params, Result>(method: string, params: Params, authorization?: string): Promise<Result>;
|
|
70
|
+
protected respond<Result>(requestId: number, result: Result): void;
|
|
71
|
+
protected respondError(requestId: number, error: SocketError, exception?: Error): void;
|
|
72
|
+
private addEvent;
|
|
73
|
+
close(reason?: string): void;
|
|
74
|
+
}
|
|
75
|
+
export {};
|
|
76
|
+
//# sourceMappingURL=traced-socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traced-socket.d.ts","sourceRoot":"","sources":["../../src/node/traced-socket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TracedSocket for WebSocket connections with OpenTelemetry tracing.
|
|
4
|
+
*
|
|
5
|
+
* This is a generic implementation that can be used across services.
|
|
6
|
+
* Server-specific behavior (like error handling) is injected via callbacks.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TracedSocket = void 0;
|
|
10
|
+
const api_1 = require("@opentelemetry/api");
|
|
11
|
+
const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
|
|
12
|
+
const shared_1 = require("@superblocksteam/shared");
|
|
13
|
+
// Helper to cast ISocket's logger to pino-compatible logger
|
|
14
|
+
const asPinoLogger = (logger) => logger;
|
|
15
|
+
// Helper to check if a value is a Promise
|
|
16
|
+
const isPromise = (value) => {
|
|
17
|
+
return (value !== null &&
|
|
18
|
+
typeof value === "object" &&
|
|
19
|
+
"then" in value &&
|
|
20
|
+
typeof value.then === "function");
|
|
21
|
+
};
|
|
22
|
+
// End span with proper error handling
|
|
23
|
+
const endSpan = (traced, span, logger, setHttpStatusFromError) => {
|
|
24
|
+
try {
|
|
25
|
+
const result = traced();
|
|
26
|
+
if (isPromise(result)) {
|
|
27
|
+
return Promise.resolve(result)
|
|
28
|
+
.catch((err) => {
|
|
29
|
+
setHttpStatusFromError(span, typeof err === "string" ? new Error(err) : err, logger);
|
|
30
|
+
throw err;
|
|
31
|
+
})
|
|
32
|
+
.finally(() => span.end());
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
span.end();
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
setHttpStatusFromError(span, error, logger);
|
|
41
|
+
span.end();
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* TracedSocket extends ISocket to add OpenTelemetry tracing capabilities.
|
|
47
|
+
*
|
|
48
|
+
* It manages spans for WebSocket handler calls to provide detailed tracing information.
|
|
49
|
+
*/
|
|
50
|
+
class TracedSocket extends shared_1.ISocket {
|
|
51
|
+
activeSpanByRequestId = new Map();
|
|
52
|
+
middlewareSpanByReqId = new Map();
|
|
53
|
+
lastActiveSpan;
|
|
54
|
+
requestHeaders;
|
|
55
|
+
tracer;
|
|
56
|
+
setHttpStatusFromError;
|
|
57
|
+
constructor(ws, requestHandlers, globalMiddlewares, config, options) {
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
|
+
super(ws, requestHandlers, globalMiddlewares, options);
|
|
60
|
+
this.requestHeaders = config.requestHeaders;
|
|
61
|
+
this.tracer = api_1.trace.getTracer("superblocks-server");
|
|
62
|
+
// Create error handler function
|
|
63
|
+
this.setHttpStatusFromError = (span, error, logger) => {
|
|
64
|
+
let status = 500;
|
|
65
|
+
if (config.getResponseMetaByError) {
|
|
66
|
+
const respMeta = config.getResponseMetaByError(error, logger);
|
|
67
|
+
status = respMeta.status;
|
|
68
|
+
}
|
|
69
|
+
span.setAttribute(shared_1.OBS_TAG_HTTP_STATUS_CODE, status);
|
|
70
|
+
span.recordException((0, shared_1.sanitizeError)(error));
|
|
71
|
+
span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: error.message });
|
|
72
|
+
};
|
|
73
|
+
// Log WebSocket connection establishment
|
|
74
|
+
asPinoLogger(this.logger).info({
|
|
75
|
+
"ws.event": "connection_established",
|
|
76
|
+
"ws.host": config.requestHeaders["host"] || "unknown",
|
|
77
|
+
}, "WebSocket connection established");
|
|
78
|
+
}
|
|
79
|
+
async callHandler(handler, params, ctx, client, next) {
|
|
80
|
+
let currentContext = api_1.context.active();
|
|
81
|
+
const middleWareSpan = this.middlewareSpanByReqId.get(ctx.requestId);
|
|
82
|
+
const activeSpan = this.activeSpanByRequestId.get(ctx.requestId);
|
|
83
|
+
// End middleware span since callHandler is called recursively
|
|
84
|
+
if (middleWareSpan) {
|
|
85
|
+
middleWareSpan.end();
|
|
86
|
+
if (activeSpan) {
|
|
87
|
+
currentContext = api_1.trace.setSpan(api_1.context.active(), activeSpan);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// After first (authHandler) these values will be set
|
|
91
|
+
const src = ctx;
|
|
92
|
+
const user = src.user;
|
|
93
|
+
const organization = src.organization;
|
|
94
|
+
if (this.lastActiveSpan && (user || organization)) {
|
|
95
|
+
this.lastActiveSpan.setAttribute(shared_1.OBS_TAG_USER_EMAIL, user?.email ?? "");
|
|
96
|
+
this.lastActiveSpan.setAttribute(shared_1.OBS_TAG_USER_TYPE, user?.getUserType?.() ?? "");
|
|
97
|
+
this.lastActiveSpan.setAttribute(shared_1.OBS_TAG_ORG_ID, organization?.id ?? "");
|
|
98
|
+
}
|
|
99
|
+
let result;
|
|
100
|
+
const paramsObj = params;
|
|
101
|
+
await api_1.context.with(currentContext, async () => {
|
|
102
|
+
await this.tracer.startActiveSpan(`WS HANDLER ${handler.name === "" ? ctx.method : handler.name}`, {
|
|
103
|
+
attributes: {
|
|
104
|
+
[semantic_conventions_1.SEMATTRS_MESSAGING_SYSTEM]: "ws",
|
|
105
|
+
[semantic_conventions_1.SEMATTRS_MESSAGING_DESTINATION_KIND]: "websocket",
|
|
106
|
+
[shared_1.OBS_TAG_USER_EMAIL]: src.user?.email ?? "",
|
|
107
|
+
[shared_1.OBS_TAG_ORG_ID]: src.organization?.id ?? "",
|
|
108
|
+
[shared_1.OBS_TAG_APPLICATION_ID]: String(paramsObj?.["applicationId"] ?? src.jwtClaims?.app_id ?? ""),
|
|
109
|
+
[shared_1.OBS_TAG_API_ID]: String(paramsObj?.["apiId"] ?? ""),
|
|
110
|
+
[shared_1.OBS_TAG_BRANCH]: String(paramsObj?.["branch"] ?? paramsObj?.["branchName"] ?? ""),
|
|
111
|
+
[shared_1.OBS_TAG_COMMIT_ID]: String(paramsObj?.["commitId"] ?? ""),
|
|
112
|
+
},
|
|
113
|
+
kind: api_1.SpanKind.SERVER,
|
|
114
|
+
}, async (span) => {
|
|
115
|
+
this.middlewareSpanByReqId.set(ctx.requestId, span);
|
|
116
|
+
result = (await endSpan(() => super.callHandler(handler, params, ctx, client, next), span, asPinoLogger(this.logger), this.setHttpStatusFromError));
|
|
117
|
+
this.middlewareSpanByReqId.delete(ctx.requestId);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
async handleMessage(message) {
|
|
123
|
+
if (message.request) {
|
|
124
|
+
const spanName = message.request.method;
|
|
125
|
+
const requestId = message.request.id;
|
|
126
|
+
const payload = message.request.payload;
|
|
127
|
+
const logData = {
|
|
128
|
+
"ws.event": "request_received",
|
|
129
|
+
"ws.method": spanName,
|
|
130
|
+
"ws.request_id": requestId,
|
|
131
|
+
"ws.host": this.requestHeaders["host"] || "unknown",
|
|
132
|
+
};
|
|
133
|
+
if (payload?.["applicationId"]) {
|
|
134
|
+
logData[shared_1.OBS_TAG_APPLICATION_ID] = String(payload["applicationId"]);
|
|
135
|
+
}
|
|
136
|
+
if (payload?.["apiId"]) {
|
|
137
|
+
logData[shared_1.OBS_TAG_API_ID] = String(payload["apiId"]);
|
|
138
|
+
}
|
|
139
|
+
if (payload?.["branch"] || payload?.["branchName"]) {
|
|
140
|
+
logData[shared_1.OBS_TAG_BRANCH] = String(payload["branch"] ?? payload["branchName"]);
|
|
141
|
+
}
|
|
142
|
+
if (payload?.["commitId"]) {
|
|
143
|
+
logData[shared_1.OBS_TAG_COMMIT_ID] = String(payload["commitId"]);
|
|
144
|
+
}
|
|
145
|
+
asPinoLogger(this.logger).info(logData, `WebSocket request: ${spanName}`);
|
|
146
|
+
await api_1.context.with(api_1.propagation.extract(api_1.ROOT_CONTEXT, message.request), async () => await this.tracer.startActiveSpan(`WS SERVER ${spanName}`, {
|
|
147
|
+
attributes: (() => {
|
|
148
|
+
const attrs = {
|
|
149
|
+
[semantic_conventions_1.SEMATTRS_MESSAGING_SYSTEM]: "ws",
|
|
150
|
+
[semantic_conventions_1.SEMATTRS_MESSAGING_DESTINATION_KIND]: "websocket",
|
|
151
|
+
[shared_1.OBS_TAG_HTTP_ROUTE]: spanName,
|
|
152
|
+
};
|
|
153
|
+
if (payload?.["applicationId"]) {
|
|
154
|
+
attrs[shared_1.OBS_TAG_APPLICATION_ID] = String(payload["applicationId"]);
|
|
155
|
+
}
|
|
156
|
+
if (payload?.["apiId"]) {
|
|
157
|
+
attrs[shared_1.OBS_TAG_API_ID] = String(payload["apiId"]);
|
|
158
|
+
}
|
|
159
|
+
if (payload?.["branch"] || payload?.["branchName"]) {
|
|
160
|
+
attrs[shared_1.OBS_TAG_BRANCH] = String(payload["branch"] ?? payload["branchName"]);
|
|
161
|
+
}
|
|
162
|
+
if (payload?.["commitId"]) {
|
|
163
|
+
attrs[shared_1.OBS_TAG_COMMIT_ID] = String(payload["commitId"]);
|
|
164
|
+
}
|
|
165
|
+
return attrs;
|
|
166
|
+
})(),
|
|
167
|
+
kind: api_1.SpanKind.SERVER,
|
|
168
|
+
}, async (span) => {
|
|
169
|
+
this.lastActiveSpan = span;
|
|
170
|
+
this.activeSpanByRequestId.set(requestId, span);
|
|
171
|
+
const result = await endSpan(() => super.handleMessage(message), span, asPinoLogger(this.logger), this.setHttpStatusFromError);
|
|
172
|
+
this.activeSpanByRequestId.delete(requestId);
|
|
173
|
+
return result;
|
|
174
|
+
}));
|
|
175
|
+
}
|
|
176
|
+
else if (message.response) {
|
|
177
|
+
this.addEvent("ws.received-response", {
|
|
178
|
+
["ws.response.id"]: message.response.id,
|
|
179
|
+
});
|
|
180
|
+
return await super.handleMessage(message);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
request(method, params, authorization) {
|
|
184
|
+
return this.tracer.startActiveSpan(`WS CLIENT ${method}`, (span) => {
|
|
185
|
+
this.addEvent("ws.send-request", {
|
|
186
|
+
["ws.request.method"]: method,
|
|
187
|
+
["ws.request.id"]: this.nxtRequestId,
|
|
188
|
+
});
|
|
189
|
+
const result = super.request(method, params, authorization);
|
|
190
|
+
span.end();
|
|
191
|
+
return result;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
respond(requestId, result) {
|
|
195
|
+
this.addEvent("ws.send-response", { ["ws.response.id"]: requestId });
|
|
196
|
+
// Using http status codes so that our existing monitors can work with minimum change
|
|
197
|
+
const resultObj = result;
|
|
198
|
+
if (this.lastActiveSpan &&
|
|
199
|
+
resultObj["responseMeta"]?.status !== undefined) {
|
|
200
|
+
this.lastActiveSpan.setAttribute(shared_1.OBS_TAG_HTTP_STATUS_CODE, resultObj["responseMeta"].status);
|
|
201
|
+
}
|
|
202
|
+
// Log successful WebSocket response
|
|
203
|
+
asPinoLogger(this.logger).info({
|
|
204
|
+
"ws.event": "response_sent",
|
|
205
|
+
"ws.request_id": requestId,
|
|
206
|
+
"ws.status": resultObj["responseMeta"]?.status || 200,
|
|
207
|
+
"ws.response_size": (() => {
|
|
208
|
+
try {
|
|
209
|
+
return JSON.stringify(result).length;
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
return -1;
|
|
213
|
+
}
|
|
214
|
+
})(),
|
|
215
|
+
"ws.host": this.requestHeaders["host"] || "unknown",
|
|
216
|
+
}, `WebSocket response sent for request ${requestId}`);
|
|
217
|
+
return super.respond(requestId, result);
|
|
218
|
+
}
|
|
219
|
+
respondError(requestId, error, exception) {
|
|
220
|
+
this.addEvent("ws.send-error", { ["ws.response.id"]: requestId });
|
|
221
|
+
if (this.lastActiveSpan) {
|
|
222
|
+
this.setHttpStatusFromError(this.lastActiveSpan, exception ?? new Error(error.message), asPinoLogger(this.logger));
|
|
223
|
+
this.lastActiveSpan.setAttribute(shared_1.OBS_SOCKET_STATUS_CODE, error.code);
|
|
224
|
+
}
|
|
225
|
+
asPinoLogger(this.logger).error({
|
|
226
|
+
"ws.event": "error_response",
|
|
227
|
+
"ws.request_id": requestId,
|
|
228
|
+
"ws.error_code": error.code,
|
|
229
|
+
"ws.error_message": error.message,
|
|
230
|
+
"ws.exception_type": exception?.constructor.name,
|
|
231
|
+
"ws.exception_message": exception?.message,
|
|
232
|
+
"ws.host": this.requestHeaders["host"] || "unknown",
|
|
233
|
+
error: exception || error,
|
|
234
|
+
}, `WebSocket error for request ${requestId}: ${error.message}`);
|
|
235
|
+
return super.respondError(requestId, error, exception);
|
|
236
|
+
}
|
|
237
|
+
addEvent(eventName, attributes) {
|
|
238
|
+
if (this.lastActiveSpan) {
|
|
239
|
+
this.lastActiveSpan.addEvent(eventName, attributes, new Date());
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
close(reason) {
|
|
243
|
+
asPinoLogger(this.logger).info({
|
|
244
|
+
"ws.event": "connection_closed",
|
|
245
|
+
"ws.close_reason": reason || "normal",
|
|
246
|
+
"ws.host": this.requestHeaders["host"] || "unknown",
|
|
247
|
+
}, `WebSocket connection closed: ${reason || "normal"}`);
|
|
248
|
+
for (const span of this.middlewareSpanByReqId.values()) {
|
|
249
|
+
span.end();
|
|
250
|
+
}
|
|
251
|
+
this.middlewareSpanByReqId = new Map();
|
|
252
|
+
for (const span of this.activeSpanByRequestId.values()) {
|
|
253
|
+
span.end();
|
|
254
|
+
}
|
|
255
|
+
this.activeSpanByRequestId = new Map();
|
|
256
|
+
this.lastActiveSpan = undefined;
|
|
257
|
+
super.close(reason);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
exports.TracedSocket = TracedSocket;
|
|
261
|
+
//# sourceMappingURL=traced-socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traced-socket.js","sourceRoot":"","sources":["../../src/node/traced-socket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-Memory Exporters for Testing
|
|
3
|
+
*
|
|
4
|
+
* These exporters capture telemetry data in memory for assertion in tests.
|
|
5
|
+
* No external connections are made.
|
|
6
|
+
*/
|
|
7
|
+
import type { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base';
|
|
8
|
+
import { ExportResult } from '@opentelemetry/core';
|
|
9
|
+
/**
|
|
10
|
+
* In-memory span exporter for testing.
|
|
11
|
+
* Captures all exported spans for assertion.
|
|
12
|
+
*/
|
|
13
|
+
export declare class InMemorySpanExporter implements SpanExporter {
|
|
14
|
+
private spans;
|
|
15
|
+
private stopped;
|
|
16
|
+
/**
|
|
17
|
+
* Export spans to in-memory storage.
|
|
18
|
+
*/
|
|
19
|
+
export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
|
|
20
|
+
/**
|
|
21
|
+
* Shutdown the exporter.
|
|
22
|
+
*/
|
|
23
|
+
shutdown(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Force flush (no-op for in-memory).
|
|
26
|
+
*/
|
|
27
|
+
forceFlush(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Get all captured spans.
|
|
30
|
+
*/
|
|
31
|
+
getSpans(): ReadableSpan[];
|
|
32
|
+
/**
|
|
33
|
+
* Get the number of captured spans.
|
|
34
|
+
*/
|
|
35
|
+
getSpanCount(): number;
|
|
36
|
+
/**
|
|
37
|
+
* Clear captured spans.
|
|
38
|
+
*/
|
|
39
|
+
reset(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Find spans by name.
|
|
42
|
+
*
|
|
43
|
+
* @param name - Span name to search for
|
|
44
|
+
* @returns Matching spans
|
|
45
|
+
*/
|
|
46
|
+
findSpansByName(name: string): ReadableSpan[];
|
|
47
|
+
/**
|
|
48
|
+
* Find spans by name pattern (regex).
|
|
49
|
+
*
|
|
50
|
+
* @param pattern - Regex pattern to match span names
|
|
51
|
+
* @returns Matching spans
|
|
52
|
+
*/
|
|
53
|
+
findSpansByPattern(pattern: RegExp): ReadableSpan[];
|
|
54
|
+
/**
|
|
55
|
+
* Find spans with a specific attribute value.
|
|
56
|
+
*
|
|
57
|
+
* @param key - Attribute key
|
|
58
|
+
* @param value - Attribute value (or regex for pattern matching)
|
|
59
|
+
* @returns Matching spans
|
|
60
|
+
*/
|
|
61
|
+
findSpansByAttribute(key: string, value: string | RegExp): ReadableSpan[];
|
|
62
|
+
/**
|
|
63
|
+
* Assert no spans have a specific attribute value.
|
|
64
|
+
* Useful for ensuring Tier 1 data doesn't leak.
|
|
65
|
+
*
|
|
66
|
+
* @param key - Attribute key
|
|
67
|
+
* @param value - Forbidden attribute value (or regex pattern)
|
|
68
|
+
* @throws Error if forbidden attribute is found
|
|
69
|
+
*/
|
|
70
|
+
assertNoAttribute(key: string, value: string | RegExp): void;
|
|
71
|
+
/**
|
|
72
|
+
* Assert all spans have a required attribute.
|
|
73
|
+
*
|
|
74
|
+
* @param key - Attribute key
|
|
75
|
+
* @throws Error if any span is missing the attribute
|
|
76
|
+
*/
|
|
77
|
+
assertAllHaveAttribute(key: string): void;
|
|
78
|
+
/**
|
|
79
|
+
* Get span names for debugging.
|
|
80
|
+
*/
|
|
81
|
+
getSpanNames(): string[];
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Metric data point captured by in-memory exporter.
|
|
85
|
+
*/
|
|
86
|
+
export interface CapturedMetric {
|
|
87
|
+
name: string;
|
|
88
|
+
description?: string;
|
|
89
|
+
unit?: string;
|
|
90
|
+
type: 'counter' | 'gauge' | 'histogram' | 'observable';
|
|
91
|
+
dataPoints: Array<{
|
|
92
|
+
value: number;
|
|
93
|
+
attributes: Record<string, unknown>;
|
|
94
|
+
timestamp: number;
|
|
95
|
+
}>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* In-memory metric exporter for testing.
|
|
99
|
+
*/
|
|
100
|
+
export declare class InMemoryMetricExporter {
|
|
101
|
+
private metrics;
|
|
102
|
+
/**
|
|
103
|
+
* Export metrics to in-memory storage.
|
|
104
|
+
*/
|
|
105
|
+
export(metrics: CapturedMetric[]): void;
|
|
106
|
+
/**
|
|
107
|
+
* Get all captured metrics.
|
|
108
|
+
*/
|
|
109
|
+
getMetrics(): CapturedMetric[];
|
|
110
|
+
/**
|
|
111
|
+
* Find metrics by name.
|
|
112
|
+
*
|
|
113
|
+
* @param name - Metric name
|
|
114
|
+
* @returns Matching metrics
|
|
115
|
+
*/
|
|
116
|
+
findMetricsByName(name: string): CapturedMetric[];
|
|
117
|
+
/**
|
|
118
|
+
* Clear captured metrics.
|
|
119
|
+
*/
|
|
120
|
+
reset(): void;
|
|
121
|
+
/**
|
|
122
|
+
* Assert no metrics have a specific label value.
|
|
123
|
+
*
|
|
124
|
+
* @param labelKey - Label key
|
|
125
|
+
* @param value - Forbidden value
|
|
126
|
+
* @throws Error if forbidden label is found
|
|
127
|
+
*/
|
|
128
|
+
assertNoLabel(labelKey: string, value: string | RegExp): void;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Log record captured by in-memory exporter.
|
|
132
|
+
*/
|
|
133
|
+
export interface CapturedLogRecord {
|
|
134
|
+
timestamp: number;
|
|
135
|
+
severityNumber: number;
|
|
136
|
+
severityText?: string;
|
|
137
|
+
body?: unknown;
|
|
138
|
+
attributes: Record<string, unknown>;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* In-memory log exporter for testing.
|
|
142
|
+
*/
|
|
143
|
+
export declare class InMemoryLogExporter {
|
|
144
|
+
private logs;
|
|
145
|
+
/**
|
|
146
|
+
* Export logs to in-memory storage.
|
|
147
|
+
*/
|
|
148
|
+
export(logs: CapturedLogRecord[]): void;
|
|
149
|
+
/**
|
|
150
|
+
* Get all captured logs.
|
|
151
|
+
*/
|
|
152
|
+
getLogs(): CapturedLogRecord[];
|
|
153
|
+
/**
|
|
154
|
+
* Find logs by severity.
|
|
155
|
+
*
|
|
156
|
+
* @param severityNumber - Severity level (e.g., 9 for INFO, 13 for WARN, 17 for ERROR)
|
|
157
|
+
* @returns Matching logs
|
|
158
|
+
*/
|
|
159
|
+
findLogsBySeverity(severityNumber: number): CapturedLogRecord[];
|
|
160
|
+
/**
|
|
161
|
+
* Find logs containing text.
|
|
162
|
+
*
|
|
163
|
+
* @param text - Text to search for in log body
|
|
164
|
+
* @returns Matching logs
|
|
165
|
+
*/
|
|
166
|
+
findLogsContaining(text: string | RegExp): CapturedLogRecord[];
|
|
167
|
+
/**
|
|
168
|
+
* Clear captured logs.
|
|
169
|
+
*/
|
|
170
|
+
reset(): void;
|
|
171
|
+
/**
|
|
172
|
+
* Assert no logs contain sensitive data.
|
|
173
|
+
*
|
|
174
|
+
* @param pattern - Pattern to check for (forbidden content)
|
|
175
|
+
* @throws Error if forbidden content is found
|
|
176
|
+
*/
|
|
177
|
+
assertNoLogContains(pattern: RegExp): void;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=in-memory-exporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-exporter.d.ts","sourceRoot":"","sources":["../../src/testing/in-memory-exporter.ts"],"names":[],"mappings":"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"}
|