@xeonr/upload-pool-sdk 1.3.0 → 1.4.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.
@@ -0,0 +1,299 @@
1
+ /**
2
+ * OpenTelemetry tracing setup for the worker SDK.
3
+ *
4
+ * Spans are exported via OTLP/HTTP-JSON to pipeline-api's `/v1/traces`
5
+ * receiver, authenticated with the pool's queue token. The pipeline-api
6
+ * receiver decodes the OTLP envelope and writes spans to its MySQL trace
7
+ * store, which backs the `/admin/workflow-run` admin UI — so worker
8
+ * callbacks nest naturally under the dispatching parseUpload trace.
9
+ *
10
+ * Design notes (see also: discussion in epic plan):
11
+ * - The TracerProvider is private to the SDK. It does *not* register
12
+ * globally — calling `trace.getTracer(...)` outside the SDK won't pick
13
+ * it up. This avoids interfering with any OTel setup the host
14
+ * application already has (e.g. its own collector → Grafana
15
+ * pipeline). The exporter ships SDK-emitted spans only.
16
+ * - `wf.run_id` is stamped on every emitted span as an attribute,
17
+ * mirrored from the job envelope's `wf_run_id` field. The pipeline-api
18
+ * receiver uses this attribute to associate the span with the right
19
+ * workflow run in `workflow_run_spans`.
20
+ * - The W3C traceparent propagator runs on outbound RPC calls *only when
21
+ * targeting the pipeline endpoint*. The uploads-api side has its own
22
+ * OTel pipeline and we don't want to inject our trace_id into its
23
+ * trees. See the interceptor in rpc-clients.ts.
24
+ *
25
+ * Body sanitization for `rpc.request` / `rpc.response` span events lives
26
+ * in the interceptor — keys matching /(token|secret|password|authorization
27
+ * |api[_-]?key|signature|sig|cookie)/i are redacted; payloads truncated
28
+ * to MAX_BODY_EVENT_BYTES.
29
+ */
30
+ import { context, createContextKey, trace, SpanKind, SpanStatusCode, } from "@opentelemetry/api";
31
+ import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
32
+ import { Resource } from "@opentelemetry/resources";
33
+ import { BatchSpanProcessor, BasicTracerProvider, } from "@opentelemetry/sdk-trace-base";
34
+ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION, } from "@opentelemetry/semantic-conventions";
35
+ const TRACER_NAME = "@xeonr/upload-pool-sdk";
36
+ /**
37
+ * OTel context key carrying per-job attributes. Set once at the top of
38
+ * Pool.handleDispatch via `withJobContext()` and read by helpers that
39
+ * create child spans (interceptors, ctx.* spans) so every emitted span
40
+ * carries `pipeline.run_id` + identifiers — without it the trace-store
41
+ * receiver drops the span as orphan.
42
+ *
43
+ * The OTel `Span` API surface deliberately doesn't expose attributes
44
+ * back to read sites (only set/record/event), so we can't inherit them
45
+ * from a parent span at child-creation time. Carrying them in the
46
+ * Context object is the canonical OTel pattern.
47
+ */
48
+ export const JOB_ATTRS_KEY = createContextKey("uplim.job_attrs");
49
+ export function getJobAttrs() {
50
+ return context.active().getValue(JOB_ATTRS_KEY);
51
+ }
52
+ export function withJobContext(attrs, fn) {
53
+ return context.with(context.active().setValue(JOB_ATTRS_KEY, attrs), fn);
54
+ }
55
+ export const SPAN_ATTR = {
56
+ JOB_ID: "iq.job_id",
57
+ UPLOAD_ID: "iq.upload_id",
58
+ URN: "iq.content_type_urn",
59
+ WORKER_ID: "iq.worker_id",
60
+ POOL_TOKEN_PREFIX: "iq.pool_token_prefix",
61
+ // Matches pipeline-api's TRACE_ATTRIBUTE.RUN_ID. The trace-store
62
+ // exporter reads this attribute to associate each span with the
63
+ // right workflow_run in MySQL (workflow_run_spans.run_id). Worker
64
+ // spans MUST carry it or they're dropped on the floor by the
65
+ // pipeline-api receiver.
66
+ RUN_ID: "pipeline.run_id",
67
+ RPC_METHOD: "rpc.method",
68
+ RPC_SERVICE: "rpc.service",
69
+ RPC_TARGET: "rpc.target",
70
+ RPC_CODE: "rpc.code",
71
+ RPC_DURATION_MS: "rpc.duration_ms",
72
+ S3_BYTES: "s3.bytes",
73
+ S3_URL_ORIGIN: "s3.url_origin",
74
+ S3_OUTCOME: "s3.outcome",
75
+ };
76
+ let activeHandle = null;
77
+ export function initTracing(cfg) {
78
+ if (activeHandle) {
79
+ return activeHandle;
80
+ }
81
+ const enabled = cfg.enabled !== false;
82
+ if (!enabled) {
83
+ const tracer = trace.getTracer(TRACER_NAME, cfg.sdkVersion);
84
+ activeHandle = {
85
+ tracer,
86
+ shutdown: async () => { },
87
+ contextFromEnvelope: () => context.active(),
88
+ };
89
+ return activeHandle;
90
+ }
91
+ const resource = new Resource({
92
+ [ATTR_SERVICE_NAME]: TRACER_NAME,
93
+ [ATTR_SERVICE_VERSION]: cfg.sdkVersion,
94
+ [SPAN_ATTR.WORKER_ID]: cfg.workerId,
95
+ });
96
+ // OTLP/HTTP-JSON to pipeline-api's receiver. JSON over protobuf because
97
+ // it lets the receiver decode without pulling in @opentelemetry/
98
+ // otlp-transformer's protobuf runtime — the wire size penalty is fine
99
+ // for the volume the SDK emits (≈10 spans per job, ≈40 KB per job).
100
+ const exporter = new OTLPTraceExporter({
101
+ url: `${cfg.pipelineEndpoint.replace(/\/+$/, "")}/v1/traces`,
102
+ headers: {
103
+ authorization: `Bearer ${cfg.poolToken}`,
104
+ },
105
+ // Generous timeout — pipeline-api's receiver writes through to MySQL
106
+ // synchronously and we'd rather hold the export than drop a span on
107
+ // a slow ack.
108
+ timeoutMillis: 10_000,
109
+ });
110
+ const processor = new BatchSpanProcessor(exporter, {
111
+ // Default batch settings keep us flushing every 5s or 512 spans.
112
+ // We prefer faster flushes for the per-job RPC use case so the
113
+ // admin UI sees the latest activity within a couple seconds.
114
+ scheduledDelayMillis: 1_000,
115
+ maxQueueSize: 1024,
116
+ maxExportBatchSize: 128,
117
+ });
118
+ const provider = new BasicTracerProvider({
119
+ resource,
120
+ spanProcessors: [processor],
121
+ });
122
+ const tracer = provider.getTracer(TRACER_NAME, cfg.sdkVersion);
123
+ const handle = {
124
+ tracer,
125
+ shutdown: async () => {
126
+ try {
127
+ await provider.shutdown();
128
+ }
129
+ catch {
130
+ // Worker exit is best-effort — never block on export.
131
+ }
132
+ },
133
+ contextFromEnvelope: (traceparent, runId) => {
134
+ let ctx = context.active();
135
+ // Ensure every span produced under this context carries the
136
+ // runId attribute via baggage-like behaviour. We stamp it on
137
+ // each span at creation site instead of relying on baggage
138
+ // because the trace store reads it from span attributes.
139
+ if (!traceparent) {
140
+ return ctx;
141
+ }
142
+ const parsed = parseTraceparent(traceparent);
143
+ if (!parsed) {
144
+ return ctx;
145
+ }
146
+ ctx = trace.setSpanContext(ctx, parsed);
147
+ // runId is consumed by the caller and stamped explicitly on
148
+ // each span via stampJobAttributes(); we don't store it in
149
+ // the OTel context because there's no cross-span attribute
150
+ // mechanism in OTel without using a custom propagator.
151
+ void runId;
152
+ return ctx;
153
+ },
154
+ };
155
+ activeHandle = handle;
156
+ return handle;
157
+ }
158
+ export function getTracingHandle() {
159
+ return activeHandle;
160
+ }
161
+ export async function shutdownTracing() {
162
+ if (activeHandle) {
163
+ await activeHandle.shutdown();
164
+ activeHandle = null;
165
+ }
166
+ }
167
+ // --- traceparent helpers --------------------------------------------------
168
+ /**
169
+ * Parse a W3C `traceparent` header into an OTel SpanContext.
170
+ *
171
+ * Format: `00-<32 hex trace id>-<16 hex span id>-<2 hex flags>`. Returns
172
+ * null on malformed input. Used by the SDK to root iq.job spans under
173
+ * whatever pipeline activity dispatched the job.
174
+ */
175
+ export function parseTraceparent(value) {
176
+ if (!value)
177
+ return null;
178
+ const parts = value.trim().split("-");
179
+ if (parts.length !== 4)
180
+ return null;
181
+ const [version, traceId, spanId, flagsHex] = parts;
182
+ if (version !== "00")
183
+ return null;
184
+ if (!/^[0-9a-f]{32}$/.test(traceId))
185
+ return null;
186
+ if (!/^[0-9a-f]{16}$/.test(spanId))
187
+ return null;
188
+ if (!/^[0-9a-f]{2}$/.test(flagsHex))
189
+ return null;
190
+ const flags = Number.parseInt(flagsHex, 16);
191
+ return {
192
+ traceId,
193
+ spanId,
194
+ traceFlags: flags,
195
+ isRemote: true,
196
+ };
197
+ }
198
+ /**
199
+ * Serialise a SpanContext as a W3C traceparent header value.
200
+ */
201
+ export function spanContextToTraceparent(sc) {
202
+ const flags = sc.traceFlags.toString(16).padStart(2, "0");
203
+ return `00-${sc.traceId}-${sc.spanId}-${flags}`;
204
+ }
205
+ // --- body sanitization (req/resp on RPC span events) ----------------------
206
+ const MAX_BODY_EVENT_BYTES = 4 * 1024;
207
+ const REDACTED_KEY_PATTERN = /(token|secret|password|authorization|api[_-]?key|signature|^sig$|cookie)/i;
208
+ const REDACTED_VALUE = "<redacted>";
209
+ /**
210
+ * Sanitize an arbitrary RPC request/response object for inclusion as a
211
+ * span event attribute. Same shape as the pipeline-api's tracing/sanitize
212
+ * (4 KB cap, key-pattern redaction) so the two ends produce consistent
213
+ * payloads in the admin UI.
214
+ */
215
+ export function sanitizeRpcBody(value) {
216
+ try {
217
+ const cloned = redactDeep(value, 0);
218
+ const serialised = JSON.stringify(cloned);
219
+ if (serialised.length <= MAX_BODY_EVENT_BYTES) {
220
+ return serialised;
221
+ }
222
+ return `${serialised.slice(0, MAX_BODY_EVENT_BYTES)}...<truncated>`;
223
+ }
224
+ catch {
225
+ return "<unserialisable>";
226
+ }
227
+ }
228
+ function redactDeep(value, depth) {
229
+ if (depth > 6)
230
+ return "<max-depth>";
231
+ if (value === null || value === undefined)
232
+ return value;
233
+ if (value instanceof Uint8Array) {
234
+ return `<bytes:${value.byteLength}>`;
235
+ }
236
+ if (Array.isArray(value)) {
237
+ return value.slice(0, 50).map((v) => redactDeep(v, depth + 1));
238
+ }
239
+ if (typeof value === "object") {
240
+ const out = {};
241
+ const obj = value;
242
+ const keys = Object.keys(obj).slice(0, 50);
243
+ for (const k of keys) {
244
+ if (REDACTED_KEY_PATTERN.test(k)) {
245
+ out[k] = REDACTED_VALUE;
246
+ }
247
+ else {
248
+ out[k] = redactDeep(obj[k], depth + 1);
249
+ }
250
+ }
251
+ return out;
252
+ }
253
+ if (typeof value === "string") {
254
+ // Heuristic: very long strings are likely embedded payloads; clamp.
255
+ return value.length > 1024 ? `${value.slice(0, 1024)}...` : value;
256
+ }
257
+ return value;
258
+ }
259
+ // --- span helpers --------------------------------------------------------
260
+ /**
261
+ * Set common job-scoped attributes on a span. Called by every site that
262
+ * creates a per-job span so RUN_ID / JOB_ID / UPLOAD_ID / URN are
263
+ * consistently present (the trace-store receiver requires
264
+ * `pipeline.run_id` to route the span into the right workflow run).
265
+ *
266
+ * Pulls the attribute values from the active OTel context if not
267
+ * passed explicitly, so RPC / ctx.* spans created mid-handler inherit
268
+ * them without needing to know about the envelope. The Pool root sets
269
+ * the context via `withJobContext` at the start of handleDispatch.
270
+ */
271
+ export function stampJobAttributes(span, attrs) {
272
+ const fromCtx = getJobAttrs();
273
+ const runId = attrs?.runId ?? fromCtx?.runId ?? "";
274
+ const jobId = attrs?.jobId ?? fromCtx?.jobId ?? "";
275
+ const uploadId = attrs?.uploadId ?? fromCtx?.uploadId;
276
+ const urn = attrs?.urn ?? fromCtx?.urn;
277
+ const workerId = attrs?.workerId ?? fromCtx?.workerId;
278
+ if (runId)
279
+ span.setAttribute(SPAN_ATTR.RUN_ID, runId);
280
+ if (jobId)
281
+ span.setAttribute(SPAN_ATTR.JOB_ID, jobId);
282
+ if (uploadId)
283
+ span.setAttribute(SPAN_ATTR.UPLOAD_ID, uploadId);
284
+ if (urn)
285
+ span.setAttribute(SPAN_ATTR.URN, urn);
286
+ if (workerId)
287
+ span.setAttribute(SPAN_ATTR.WORKER_ID, workerId);
288
+ }
289
+ export function recordSpanError(span, err) {
290
+ if (err instanceof Error) {
291
+ span.recordException(err);
292
+ span.setStatus({ code: SpanStatusCode.ERROR, message: err.message });
293
+ }
294
+ else {
295
+ span.setStatus({ code: SpanStatusCode.ERROR, message: String(err) });
296
+ }
297
+ }
298
+ export { SpanKind, SpanStatusCode };
299
+ //# sourceMappingURL=tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.js","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -59,6 +59,14 @@ export interface PoolConfig {
59
59
  logger?: import("./logger.js").Logger;
60
60
  /** Max concurrent in-flight jobs. Defaults to 1. */
61
61
  concurrency?: number;
62
+ /**
63
+ * Tracing config. The SDK ships spans to pipeline-api's /v1/traces
64
+ * receiver for the admin UI. Disable with `{ enabled: false }` to
65
+ * skip the OTel SDK setup entirely (e.g. in tests).
66
+ */
67
+ tracing?: {
68
+ enabled?: boolean;
69
+ };
62
70
  }
63
71
  export type JobHandler = (ctx: JobContext) => Promise<void>;
64
72
  export interface JobContext {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xeonr/upload-pool-sdk",
3
- "version": "1.3.0",
3
+ "version": "1.4.1",
4
4
  "description": "Self-hosted worker SDK for the upl.im content type pipeline. Implement a handler per content type URN; the SDK handles SSE connection, job acceptance, presigned thumbnail upload, and metadata callbacks.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -20,6 +20,13 @@
20
20
  "@bufbuild/protobuf": "^2.10.1",
21
21
  "@connectrpc/connect": "^2.0.0",
22
22
  "@connectrpc/connect-node": "^2.0.0",
23
+ "@opentelemetry/api": "^1.9.0",
24
+ "@opentelemetry/core": "^1.30.0",
25
+ "@opentelemetry/exporter-trace-otlp-http": "^0.57.0",
26
+ "@opentelemetry/resources": "^1.30.0",
27
+ "@opentelemetry/sdk-trace-base": "^1.30.0",
28
+ "@opentelemetry/sdk-trace-node": "^1.30.0",
29
+ "@opentelemetry/semantic-conventions": "^1.28.0",
23
30
  "eventsource": "^3.0.0"
24
31
  },
25
32
  "devDependencies": {