@armoriq/sdk-dev 0.8.5 → 0.8.7

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.
Files changed (55) hide show
  1. package/README.md +2 -30
  2. package/dist/_version.d.ts +1 -1
  3. package/dist/_version.js +1 -1
  4. package/dist/client.d.ts +0 -1
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/client.js +15 -39
  7. package/dist/client.js.map +1 -1
  8. package/dist/index.d.ts +2 -3
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +4 -5
  11. package/dist/index.js.map +1 -1
  12. package/dist/observability/index.d.ts +5 -3
  13. package/dist/observability/index.d.ts.map +1 -1
  14. package/dist/observability/index.js.map +1 -1
  15. package/dist/observability/otel-runtime.d.ts +54 -4
  16. package/dist/observability/otel-runtime.d.ts.map +1 -1
  17. package/dist/observability/otel-runtime.js +244 -52
  18. package/dist/observability/otel-runtime.js.map +1 -1
  19. package/dist/observability/otel-session.d.ts +23 -4
  20. package/dist/observability/otel-session.d.ts.map +1 -1
  21. package/dist/observability/otel-session.js +51 -24
  22. package/dist/observability/otel-session.js.map +1 -1
  23. package/dist/observability/otel-shutdown.d.ts +1 -1
  24. package/dist/observability/otel-shutdown.d.ts.map +1 -1
  25. package/dist/observability/otel-shutdown.js +1 -13
  26. package/dist/observability/otel-shutdown.js.map +1 -1
  27. package/dist/observability/otel-span-spool.d.ts +55 -0
  28. package/dist/observability/otel-span-spool.d.ts.map +1 -0
  29. package/dist/observability/otel-span-spool.js +94 -0
  30. package/dist/observability/otel-span-spool.js.map +1 -0
  31. package/dist/observability/otel-spool-export.d.ts +64 -0
  32. package/dist/observability/otel-spool-export.d.ts.map +1 -0
  33. package/dist/observability/otel-spool-export.js +279 -0
  34. package/dist/observability/otel-spool-export.js.map +1 -0
  35. package/dist/observability/otlp-http-transport.d.ts +20 -0
  36. package/dist/observability/otlp-http-transport.d.ts.map +1 -0
  37. package/dist/observability/otlp-http-transport.js +141 -0
  38. package/dist/observability/otlp-http-transport.js.map +1 -0
  39. package/dist/observability/policy-lease.d.ts +25 -0
  40. package/dist/observability/policy-lease.d.ts.map +1 -1
  41. package/dist/observability/policy-lease.js +49 -0
  42. package/dist/observability/policy-lease.js.map +1 -1
  43. package/dist/session.d.ts +4 -3
  44. package/dist/session.d.ts.map +1 -1
  45. package/dist/session.js +5 -4
  46. package/dist/session.js.map +1 -1
  47. package/dist/token_usage.d.ts +10 -33
  48. package/dist/token_usage.d.ts.map +1 -1
  49. package/dist/token_usage.js +38 -85
  50. package/dist/token_usage.js.map +1 -1
  51. package/package.json +10 -10
  52. package/dist/session_transcripts.d.ts +0 -8
  53. package/dist/session_transcripts.d.ts.map +0 -1
  54. package/dist/session_transcripts.js +0 -72
  55. package/dist/session_transcripts.js.map +0 -1
@@ -0,0 +1,55 @@
1
+ import { type ExportResult } from '@opentelemetry/core';
2
+ import type { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
3
+ export declare const SPOOLED_SPAN_BATCH_VERSION = 1;
4
+ export type SpooledAttributes = Record<string, string | number | boolean | Array<string | number | boolean | null>>;
5
+ export type SpooledHrTime = [seconds: number, nanoseconds: number];
6
+ /** A runtime's own spans carry no events, links or trace state, so a record holds none. */
7
+ export interface SpooledSpan {
8
+ name: string;
9
+ kind: number;
10
+ traceId: string;
11
+ spanId: string;
12
+ traceFlags: number;
13
+ parentSpanId?: string;
14
+ startTime: SpooledHrTime;
15
+ endTime: SpooledHrTime;
16
+ status: {
17
+ code: number;
18
+ message?: string;
19
+ };
20
+ attributes: SpooledAttributes;
21
+ droppedAttributesCount: number;
22
+ }
23
+ /**
24
+ * One export batch after the first-party projection and the export-time
25
+ * ceiling. `binding` is `runtime.spoolBinding` of the writer: the hex SHA-256
26
+ * of its backend endpoint and API key joined by a newline. `seal` is the hex
27
+ * HMAC-SHA256, keyed with the writer's API key, of the version, `binding` and
28
+ * the JSON of `spans`, each followed by a newline.
29
+ */
30
+ export interface SpooledSpanBatch {
31
+ version: typeof SPOOLED_SPAN_BATCH_VERSION;
32
+ binding: string;
33
+ spans: SpooledSpan[];
34
+ seal: string;
35
+ }
36
+ export interface SpoolKey {
37
+ readonly apiKey: string;
38
+ readonly binding: string;
39
+ }
40
+ export interface SpanSink {
41
+ write(batch: SpooledSpanBatch): Promise<void>;
42
+ }
43
+ export declare function spoolSeal(key: SpoolKey, spansJson: string): string;
44
+ export declare class SpanSinkExporter implements SpanExporter {
45
+ private readonly sink;
46
+ private readonly key;
47
+ private readonly writes;
48
+ private retired;
49
+ constructor(sink: SpanSink, key: SpoolKey);
50
+ export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
51
+ abandon(retire: boolean): void;
52
+ forceFlush(): Promise<void>;
53
+ shutdown(): Promise<void>;
54
+ }
55
+ //# sourceMappingURL=otel-span-spool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-span-spool.d.ts","sourceRoot":"","sources":["../../src/observability/otel-span-spool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEhF,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAG5C,MAAM,MAAM,iBAAiB,GAAG,MAAM,CACpC,MAAM,EACN,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CACpE,CAAC;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAEnE,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,UAAU,EAAE,iBAAiB,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,0BAA0B,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAiCD,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAIlE;AAQD,qBAAa,gBAAiB,YAAW,YAAY;IAKjD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,OAAO,CAAS;gBAGL,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,QAAQ;IAGhC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IA4BnF,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAK9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAG1B"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SpanSinkExporter = exports.SPOOLED_SPAN_BATCH_VERSION = void 0;
4
+ exports.spoolSeal = spoolSeal;
5
+ const node_crypto_1 = require("node:crypto");
6
+ const core_1 = require("@opentelemetry/core");
7
+ exports.SPOOLED_SPAN_BATCH_VERSION = 1;
8
+ const SINK_WRITE_DEADLINE_MS = 1_000;
9
+ function spooledAttributes(attributes) {
10
+ const result = {};
11
+ for (const [key, value] of Object.entries(attributes)) {
12
+ if (value === undefined)
13
+ continue;
14
+ result[key] = Array.isArray(value) ? value.map((entry) => entry ?? null) : value;
15
+ }
16
+ return result;
17
+ }
18
+ function spooledTime(time) {
19
+ return [time[0], time[1]];
20
+ }
21
+ function spooledSpan(span) {
22
+ const context = span.spanContext();
23
+ const parent = span.parentSpanContext;
24
+ return {
25
+ name: span.name,
26
+ kind: span.kind,
27
+ traceId: context.traceId,
28
+ spanId: context.spanId,
29
+ traceFlags: context.traceFlags,
30
+ ...(parent ? { parentSpanId: parent.spanId } : {}),
31
+ startTime: spooledTime(span.startTime),
32
+ endTime: spooledTime(span.endTime),
33
+ status: { code: span.status.code, message: span.status.message },
34
+ attributes: spooledAttributes(span.attributes),
35
+ droppedAttributesCount: span.droppedAttributesCount,
36
+ };
37
+ }
38
+ function spoolSeal(key, spansJson) {
39
+ return (0, node_crypto_1.createHmac)('sha256', key.apiKey)
40
+ .update(`${exports.SPOOLED_SPAN_BATCH_VERSION}\n${key.binding}\n${spansJson}`)
41
+ .digest('hex');
42
+ }
43
+ function spooledSpanBatch(spans, key) {
44
+ const spooled = spans.map(spooledSpan);
45
+ const seal = spoolSeal(key, JSON.stringify(spooled));
46
+ return { version: exports.SPOOLED_SPAN_BATCH_VERSION, binding: key.binding, spans: spooled, seal };
47
+ }
48
+ class SpanSinkExporter {
49
+ sink;
50
+ key;
51
+ writes = new Map();
52
+ retired = false;
53
+ constructor(sink, key) {
54
+ this.sink = sink;
55
+ this.key = key;
56
+ }
57
+ export(spans, resultCallback) {
58
+ let abandon = () => undefined;
59
+ const write = new Promise((resolve) => {
60
+ const timer = setTimeout(() => fail('timed out'), SINK_WRITE_DEADLINE_MS).unref();
61
+ const settle = (result) => {
62
+ clearTimeout(timer);
63
+ resolve(result);
64
+ };
65
+ const fail = (why) => settle({
66
+ code: core_1.ExportResultCode.FAILED,
67
+ error: new Error(`ArmorIQ span sink write ${why}`),
68
+ });
69
+ abandon = () => fail('abandoned');
70
+ if (this.retired)
71
+ return abandon();
72
+ Promise.resolve()
73
+ .then(() => this.sink.write(spooledSpanBatch(spans, this.key)))
74
+ .then(() => settle({ code: core_1.ExportResultCode.SUCCESS }), (error) => settle({ code: core_1.ExportResultCode.FAILED, error }));
75
+ }).then((result) => {
76
+ this.writes.delete(write);
77
+ resultCallback(result);
78
+ });
79
+ this.writes.set(write, abandon);
80
+ }
81
+ abandon(retire) {
82
+ this.retired ||= retire;
83
+ for (const abandon of [...this.writes.values()])
84
+ abandon();
85
+ }
86
+ forceFlush() {
87
+ return Promise.all(this.writes.keys()).then(() => undefined);
88
+ }
89
+ shutdown() {
90
+ return this.forceFlush();
91
+ }
92
+ }
93
+ exports.SpanSinkExporter = SpanSinkExporter;
94
+ //# sourceMappingURL=otel-span-spool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-span-spool.js","sourceRoot":"","sources":["../../src/observability/otel-span-spool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { type InstrumentationScope } from '@opentelemetry/core';
2
+ import type { Resource } from '@opentelemetry/resources';
3
+ import type { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
4
+ import { type SpoolKey } from './otel-span-spool';
5
+ /**
6
+ * Delete the batch on `acknowledged`, `discarded` and `rejected`; keep it on
7
+ * `unsupported` (a newer SDK wrote it) and `failed` (retry later).
8
+ */
9
+ export type SpooledExportResult = {
10
+ readonly status: 'acknowledged';
11
+ } | {
12
+ readonly status: 'discarded';
13
+ readonly reason: 'capture_off';
14
+ } | {
15
+ readonly status: 'rejected';
16
+ readonly reason: 'malformed' | 'oversized' | 'identity_mismatch' | 'tampered';
17
+ } | {
18
+ readonly status: 'rejected';
19
+ readonly reason: 'backend_rejected';
20
+ readonly httpStatus: number;
21
+ } | {
22
+ readonly status: 'unsupported';
23
+ readonly reason: 'newer_version';
24
+ } | {
25
+ readonly status: 'failed';
26
+ readonly reason: 'unavailable' | 'policy_unavailable' | 'export_failed' | 'not_attempted';
27
+ };
28
+ interface SpoolIdentity {
29
+ readonly key: SpoolKey;
30
+ readonly resource: Resource;
31
+ readonly scope: InstrumentationScope;
32
+ }
33
+ type ParsedSpooledBatch = {
34
+ readonly spans: ReadableSpan[];
35
+ } | SpooledExportResult;
36
+ export declare const SPOOL_DISCARDED: SpooledExportResult;
37
+ export declare const SPOOL_UNAVAILABLE: SpooledExportResult;
38
+ export declare const SPOOL_POLICY_UNAVAILABLE: SpooledExportResult;
39
+ export declare function parseSpooledSpanBatches(values: unknown, identity: SpoolIdentity): Promise<ParsedSpooledBatch[]>;
40
+ export declare function settleShippable(entries: readonly ParsedSpooledBatch[], result: SpooledExportResult): SpooledExportResult[];
41
+ export declare function untilAborted(work: Promise<unknown>, signal: AbortSignal): Promise<void>;
42
+ export declare class ExportSlots {
43
+ private free;
44
+ private readonly waiting;
45
+ constructor(free: number);
46
+ acquire(signal: AbortSignal): Promise<boolean>;
47
+ release(): void;
48
+ }
49
+ export declare class SpoolExportCall {
50
+ private readonly transport;
51
+ private readonly exporter;
52
+ private readonly controller;
53
+ readonly signal: AbortSignal;
54
+ constructor(transport: {
55
+ abandon(retire: boolean): void;
56
+ }, exporter: SpanExporter);
57
+ abort(result: SpooledExportResult): void;
58
+ end(): void;
59
+ send(spans: ReadableSpan[]): Promise<SpooledExportResult>;
60
+ private outcome;
61
+ }
62
+ export declare function exportSpooledBatches(entries: readonly ParsedSpooledBatch[], ship: (spans: ReadableSpan[]) => Promise<SpooledExportResult>, slots: ExportSlots, signal: AbortSignal): Promise<SpooledExportResult[]>;
63
+ export {};
64
+ //# sourceMappingURL=otel-spool-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-spool-export.d.ts","sourceRoot":"","sources":["../../src/observability/otel-spool-export.ts"],"names":[],"mappings":"AAUA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAyC,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AASzF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACnC;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAChE;IACE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,mBAAmB,GAAG,UAAU,CAAC;CAC/E,GACD;IACE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,GACD;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GACpE;IACE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,oBAAoB,GAAG,eAAe,GAAG,eAAe,CAAC;CAC3F,CAAC;AAEN,UAAU,aAAa;IACrB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;CACtC;AAED,KAAK,kBAAkB,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAA;CAAE,GAAG,mBAAmB,CAAC;AAOnF,eAAO,MAAM,eAAe,qBAA0D,CAAC;AACvF,eAAO,MAAM,iBAAiB,qBAAuD,CAAC;AACtF,eAAO,MAAM,wBAAwB,qBAA8D,CAAC;AA+JpG,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAa/B;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,MAAM,EAAE,mBAAmB,GAC1B,mBAAmB,EAAE,CAEvB;AASD,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAUvF;AAED,qBAAa,WAAW;IAGV,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAE7B,IAAI,EAAE,MAAM;IAEhC,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB9C,OAAO,IAAI,IAAI;CAKhB;AAED,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IACpD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAA0B;gBAGnC,SAAS,EAAE;QAAE,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,EAC7C,QAAQ,EAAE,YAAY;IAGzC,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAKxC,GAAG,IAAI,IAAI;IAIX,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMzD,OAAO,CAAC,OAAO;CAKhB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,OAAO,CAAC,mBAAmB,CAAC,EAC7D,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAahC"}
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SpoolExportCall = exports.ExportSlots = exports.SPOOL_POLICY_UNAVAILABLE = exports.SPOOL_UNAVAILABLE = exports.SPOOL_DISCARDED = void 0;
4
+ exports.parseSpooledSpanBatches = parseSpooledSpanBatches;
5
+ exports.settleShippable = settleShippable;
6
+ exports.untilAborted = untilAborted;
7
+ exports.exportSpooledBatches = exportSpooledBatches;
8
+ const node_crypto_1 = require("node:crypto");
9
+ const api_1 = require("@opentelemetry/api");
10
+ const core_1 = require("@opentelemetry/core");
11
+ const otel_span_spool_1 = require("./otel-span-spool");
12
+ const MAX_BATCHES_PER_CALL = 64;
13
+ const MAX_SPANS_JSON_PER_CALL = 8 * 1024 * 1024;
14
+ const MAX_SPANS_PER_BATCH = 512;
15
+ const MAX_ATTRIBUTES_PER_SPAN = 128;
16
+ const MAX_VALUE_LENGTH = 8 * 1024;
17
+ const RETRYABLE_CLIENT_STATUS = new Set([408, 429]);
18
+ function outcome(result) {
19
+ return Object.freeze(result);
20
+ }
21
+ const ACKNOWLEDGED = outcome({ status: 'acknowledged' });
22
+ exports.SPOOL_DISCARDED = outcome({ status: 'discarded', reason: 'capture_off' });
23
+ exports.SPOOL_UNAVAILABLE = outcome({ status: 'failed', reason: 'unavailable' });
24
+ exports.SPOOL_POLICY_UNAVAILABLE = outcome({ status: 'failed', reason: 'policy_unavailable' });
25
+ const EXPORT_FAILED = outcome({ status: 'failed', reason: 'export_failed' });
26
+ const NOT_ATTEMPTED = outcome({ status: 'failed', reason: 'not_attempted' });
27
+ const MALFORMED = outcome({ status: 'rejected', reason: 'malformed' });
28
+ const OVERSIZED = outcome({ status: 'rejected', reason: 'oversized' });
29
+ const IDENTITY_MISMATCH = outcome({ status: 'rejected', reason: 'identity_mismatch' });
30
+ const TAMPERED = outcome({ status: 'rejected', reason: 'tampered' });
31
+ const NEWER_VERSION = outcome({ status: 'unsupported', reason: 'newer_version' });
32
+ class MalformedRecord extends Error {
33
+ }
34
+ function nextTurn() {
35
+ return new Promise((resolve) => setImmediate(resolve));
36
+ }
37
+ class OversizedRecord extends Error {
38
+ }
39
+ function check(value, valid) {
40
+ if (!valid)
41
+ throw new MalformedRecord();
42
+ return value;
43
+ }
44
+ function within(value, max) {
45
+ if (value.length > max)
46
+ throw new OversizedRecord();
47
+ return value;
48
+ }
49
+ function object(value) {
50
+ return check(value, typeof value === 'object' && value !== null && !Array.isArray(value));
51
+ }
52
+ function list(value) {
53
+ return check(value, Array.isArray(value));
54
+ }
55
+ function text(value) {
56
+ return within(check(value, typeof value === 'string'), MAX_VALUE_LENGTH);
57
+ }
58
+ function integer(value, max = Number.MAX_SAFE_INTEGER) {
59
+ return check(value, Number.isSafeInteger(value) && value >= 0 && value <= max);
60
+ }
61
+ function traceId(value) {
62
+ return check(value, typeof value === 'string' && (0, api_1.isValidTraceId)(value));
63
+ }
64
+ function spanId(value) {
65
+ return check(value, typeof value === 'string' && (0, api_1.isValidSpanId)(value));
66
+ }
67
+ function time(value) {
68
+ const [seconds, nanoseconds] = check(list(value), value.length === 2);
69
+ return [integer(seconds), integer(nanoseconds, 999_999_999)];
70
+ }
71
+ function scalar(value) {
72
+ if (typeof value === 'string')
73
+ return text(value) === value;
74
+ return typeof value === 'boolean' || (typeof value === 'number' && Number.isFinite(value));
75
+ }
76
+ function attributeValue(value) {
77
+ const valid = Array.isArray(value)
78
+ ? within(value, MAX_ATTRIBUTES_PER_SPAN).every((entry) => entry === null || scalar(entry))
79
+ : scalar(value);
80
+ return check(value, valid);
81
+ }
82
+ function attributes(value) {
83
+ const result = {};
84
+ const entries = within(Object.entries(object(value)), MAX_ATTRIBUTES_PER_SPAN);
85
+ for (const [key, entry] of entries)
86
+ result[text(key)] = attributeValue(entry);
87
+ return result;
88
+ }
89
+ function spanStatus(value) {
90
+ const status = object(value);
91
+ const message = status.message === undefined ? undefined : text(status.message);
92
+ return { code: integer(status.code, 2), message };
93
+ }
94
+ function parentContext(value, context) {
95
+ return value === undefined ? undefined : { ...context, spanId: spanId(value), isRemote: false };
96
+ }
97
+ function readableSpan(value, identity) {
98
+ const record = object(value);
99
+ const context = {
100
+ traceId: traceId(record.traceId),
101
+ spanId: spanId(record.spanId),
102
+ traceFlags: integer(record.traceFlags, 255),
103
+ };
104
+ const startTime = time(record.startTime);
105
+ const endTime = time(record.endTime);
106
+ const duration = (0, core_1.hrTimeDuration)(startTime, endTime);
107
+ return {
108
+ name: text(record.name),
109
+ kind: integer(record.kind, 4),
110
+ spanContext: () => context,
111
+ parentSpanContext: parentContext(record.parentSpanId, context),
112
+ startTime,
113
+ endTime,
114
+ duration: check(duration, duration[0] >= 0),
115
+ status: spanStatus(record.status),
116
+ attributes: attributes(record.attributes),
117
+ events: [],
118
+ links: [],
119
+ ended: true,
120
+ resource: identity.resource,
121
+ instrumentationScope: identity.scope,
122
+ droppedAttributesCount: integer(record.droppedAttributesCount),
123
+ droppedEventsCount: 0,
124
+ droppedLinksCount: 0,
125
+ };
126
+ }
127
+ function readableSpans(value, identity) {
128
+ const spans = within(list(value), MAX_SPANS_PER_BATCH);
129
+ return check(spans, spans.length > 0).map((span) => readableSpan(span, identity));
130
+ }
131
+ function unknownVersion(version) {
132
+ return Number.isSafeInteger(version) && version > otel_span_spool_1.SPOOLED_SPAN_BATCH_VERSION
133
+ ? NEWER_VERSION
134
+ : MALFORMED;
135
+ }
136
+ function sealed(seal, key, spansJson) {
137
+ const expected = Buffer.from((0, otel_span_spool_1.spoolSeal)(key, spansJson), 'hex');
138
+ const actual = Buffer.from(typeof seal === 'string' ? seal : '', 'hex');
139
+ return actual.length === expected.length && (0, node_crypto_1.timingSafeEqual)(actual, expected);
140
+ }
141
+ function parseSpooledSpanBatch(values, index, identity, budget) {
142
+ try {
143
+ const batch = object(values[index]);
144
+ if (batch.version !== otel_span_spool_1.SPOOLED_SPAN_BATCH_VERSION)
145
+ return unknownVersion(batch.version);
146
+ if (batch.binding !== identity.key.binding)
147
+ return IDENTITY_MISMATCH;
148
+ const json = check(JSON.stringify(batch.spans) ?? '', Array.isArray(batch.spans));
149
+ budget.json -= within(json, MAX_SPANS_JSON_PER_CALL).length;
150
+ if (budget.json < 0)
151
+ return NOT_ATTEMPTED;
152
+ if (!sealed(batch.seal, identity.key, json))
153
+ return TAMPERED;
154
+ return { spans: readableSpans(JSON.parse(json), identity) };
155
+ }
156
+ catch (error) {
157
+ return error instanceof OversizedRecord ? OVERSIZED : MALFORMED;
158
+ }
159
+ }
160
+ async function parseSpooledSpanBatches(values, identity) {
161
+ if (!Array.isArray(values))
162
+ return [];
163
+ const budget = { json: MAX_SPANS_JSON_PER_CALL };
164
+ const parsed = [];
165
+ for (let index = 0; index < values.length; index += 1) {
166
+ if (index >= MAX_BATCHES_PER_CALL || budget.json < 0) {
167
+ parsed.push(NOT_ATTEMPTED);
168
+ continue;
169
+ }
170
+ parsed.push(parseSpooledSpanBatch(values, index, identity, budget));
171
+ await nextTurn();
172
+ }
173
+ return parsed;
174
+ }
175
+ function settleShippable(entries, result) {
176
+ return entries.map((entry) => ('spans' in entry ? result : entry));
177
+ }
178
+ function backendOutcome(error) {
179
+ const status = error?.code;
180
+ if (typeof status !== 'number' || status < 400 || status > 499)
181
+ return EXPORT_FAILED;
182
+ if (RETRYABLE_CLIENT_STATUS.has(status))
183
+ return EXPORT_FAILED;
184
+ return outcome({ status: 'rejected', reason: 'backend_rejected', httpStatus: status });
185
+ }
186
+ function untilAborted(work, signal) {
187
+ return new Promise((resolve) => {
188
+ const done = () => {
189
+ signal.removeEventListener('abort', done);
190
+ resolve();
191
+ };
192
+ if (signal.aborted)
193
+ return resolve();
194
+ signal.addEventListener('abort', done, { once: true });
195
+ work.then(done, done);
196
+ });
197
+ }
198
+ class ExportSlots {
199
+ free;
200
+ waiting = [];
201
+ constructor(free) {
202
+ this.free = free;
203
+ }
204
+ acquire(signal) {
205
+ if (signal.aborted)
206
+ return Promise.resolve(false);
207
+ if (this.free > 0) {
208
+ this.free -= 1;
209
+ return Promise.resolve(true);
210
+ }
211
+ return new Promise((resolve) => {
212
+ const cancel = () => {
213
+ this.waiting.splice(this.waiting.indexOf(grant), 1);
214
+ resolve(false);
215
+ };
216
+ const grant = () => {
217
+ signal.removeEventListener('abort', cancel);
218
+ resolve(true);
219
+ };
220
+ this.waiting.push(grant);
221
+ signal.addEventListener('abort', cancel, { once: true });
222
+ });
223
+ }
224
+ release() {
225
+ const next = this.waiting.shift();
226
+ if (next)
227
+ next();
228
+ else
229
+ this.free += 1;
230
+ }
231
+ }
232
+ exports.ExportSlots = ExportSlots;
233
+ class SpoolExportCall {
234
+ transport;
235
+ exporter;
236
+ controller = new AbortController();
237
+ signal = this.controller.signal;
238
+ constructor(transport, exporter) {
239
+ this.transport = transport;
240
+ this.exporter = exporter;
241
+ }
242
+ abort(result) {
243
+ if (!this.controller.signal.aborted)
244
+ this.controller.abort(result);
245
+ this.transport.abandon(true);
246
+ }
247
+ end() {
248
+ this.transport.abandon(true);
249
+ }
250
+ send(spans) {
251
+ return new Promise((resolve) => {
252
+ this.exporter.export(spans, (result) => resolve(this.outcome(result)));
253
+ }).catch(() => this.outcome({ code: core_1.ExportResultCode.FAILED }));
254
+ }
255
+ outcome(result) {
256
+ if (result.code === core_1.ExportResultCode.SUCCESS)
257
+ return ACKNOWLEDGED;
258
+ if (this.signal.aborted)
259
+ return this.signal.reason;
260
+ return backendOutcome(result.error);
261
+ }
262
+ }
263
+ exports.SpoolExportCall = SpoolExportCall;
264
+ function exportSpooledBatches(entries, ship, slots, signal) {
265
+ return Promise.all(entries.map(async (entry) => {
266
+ if (!('spans' in entry))
267
+ return entry;
268
+ if (!(await slots.acquire(signal)))
269
+ return signal.reason;
270
+ try {
271
+ await nextTurn();
272
+ return signal.aborted ? signal.reason : await ship(entry.spans);
273
+ }
274
+ finally {
275
+ slots.release();
276
+ }
277
+ }));
278
+ }
279
+ //# sourceMappingURL=otel-spool-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-spool-export.js","sourceRoot":"","sources":["../../src/observability/otel-spool-export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type ExportResponse, type IExporterTransport } from '@opentelemetry/otlp-exporter-base';
2
+ /**
3
+ * OTLP/HTTP transport with OpenTelemetry's retry rules whose requests and
4
+ * retry waits the owning runtime can end, so none outlives `close()`.
5
+ */
6
+ export declare class OwnedOtlpHttpTransport implements IExporterTransport {
7
+ private readonly url;
8
+ private readonly headers;
9
+ private readonly requests;
10
+ private readonly waits;
11
+ private retired;
12
+ constructor(url: URL, headers: Readonly<Record<string, string>>);
13
+ send(data: Uint8Array, timeoutMillis: number): Promise<ExportResponse>;
14
+ /** Fails every open request and retry wait now; `retire` also fails every later one. */
15
+ abandon(retire: boolean): void;
16
+ shutdown(): void;
17
+ private wait;
18
+ private post;
19
+ }
20
+ //# sourceMappingURL=otlp-http-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otlp-http-transport.d.ts","sourceRoot":"","sources":["../../src/observability/otlp-http-transport.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AA+D3C;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;IAM7D,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,OAAO,CAAS;gBAGL,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGtD,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAc5E,wFAAwF;IACxF,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAM9B,QAAQ,IAAI,IAAI;IAIhB,OAAO,CAAC,IAAI;IAcZ,OAAO,CAAC,IAAI;CAsBb"}