@kortyx/telemetry 0.15.1 → 0.16.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/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.16.0](https://github.com/kortyx-io/kortyx/compare/telemetry-v0.15.1...telemetry-v0.16.0) (2026-10-13)
4
+
5
+
6
+ ### Features
7
+
8
+ * **studio:** enable OSS capabilities by default ([#336](https://github.com/kortyx-io/kortyx/issues/336)) ([7e55ba5](https://github.com/kortyx-io/kortyx/commit/7e55ba55c5a5a488b4284ae79b57b23ca6b6b494))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @kortyx/hooks bumped to 0.34.2
16
+ * @kortyx/telemetry-contracts bumped to 0.17.2
17
+ * @kortyx/core bumped to 0.14.0
18
+ * @kortyx/usage-telemetry bumped to 0.3.0
19
+
3
20
  ## [0.15.1](https://github.com/kortyx-io/kortyx/compare/telemetry-v0.15.0...telemetry-v0.15.1) (2026-10-13)
4
21
 
5
22
 
package/README.md CHANGED
@@ -71,8 +71,11 @@ values and resume capability tokens are never included in interrupt telemetry.
71
71
 
72
72
  ## Complete error diagnostics
73
73
 
74
- Set `diagnostics: { enabled: true }` on `createKortyxTelemetryAdapter` after
75
- upgrading the API/Studio and granting `diagnostics:read` to the Studio reader.
74
+ `createKortyxTelemetryAdapter` captures complete diagnostics by default. Upgrade
75
+ the API/Studio and run migrations before upgrading the SDK; rerun OSS bootstrap
76
+ with the stored keys to grant diagnostic access to the Studio reader.
77
+ Set `diagnostics: { enabled: false }` to retain bounded error events without
78
+ capturing or uploading complete diagnostic artifacts.
76
79
  Native capture retains large messages/stacks, causes, aggregate members, custom
77
80
  fields, and private provider response evidence with credential redaction. Run
78
81
  errors link to one diagnostic; native upload parts do not become timeline events.
package/dist/index.d.ts CHANGED
@@ -10,9 +10,10 @@ type CreateKortyxTelemetryAdapterOptions = {
10
10
  service: KortyxTelemetryService;
11
11
  /** Optional replacement or suppression of captured error diagnostics. */
12
12
  error?: _kortyx_hooks.KortyxTraceErrorProjection;
13
- /** Opt in to complete redacted diagnostics stored by Studio's diagnostic API. */
13
+ /** Complete redacted diagnostics stored by Studio's diagnostic API; enabled by default. */
14
14
  diagnostics?: {
15
- enabled: boolean;
15
+ /** Set false to disable complete diagnostic capture and uploads. */
16
+ enabled?: boolean;
16
17
  /** Optional secure persistent queue for Node process-restart recovery. */
17
18
  spoolDirectory?: string;
18
19
  maxQueueBytes?: number;
package/dist/index.js CHANGED
@@ -32,7 +32,7 @@ var import_node = require("@kortyx/usage-telemetry/node");
32
32
  // package.json
33
33
  var package_default = {
34
34
  name: "@kortyx/telemetry",
35
- version: "0.15.1",
35
+ version: "0.16.0",
36
36
  private: false,
37
37
  description: "Kortyx Studio telemetry HTTP adapter.",
38
38
  license: "Apache-2.0",
@@ -203,7 +203,7 @@ var import_errors = require("@kortyx/core/errors");
203
203
  var import_internal = require("@kortyx/hooks/internal");
204
204
  var import_telemetry_contracts = require("@kortyx/telemetry-contracts");
205
205
  function createDiagnosticDelivery(options) {
206
- const enabled = options.diagnostics?.enabled === true;
206
+ const enabled = options.diagnostics?.enabled !== false;
207
207
  const queue = /* @__PURE__ */ new Map();
208
208
  const states = /* @__PURE__ */ new Map();
209
209
  const captured = /* @__PURE__ */ new WeakMap();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/adapter.ts","../src/usage.ts","../package.json","../src/delivery.ts","../src/diagnostics.ts","../src/event-mapper.ts","../src/topology.ts","../src/trace.ts"],"sourcesContent":["export { createKortyxTelemetryAdapter } from \"./adapter\";\nexport type {\n CreateKortyxTelemetryAdapterOptions,\n KortyxTelemetryAdapter,\n} from \"./types\";\n","import { randomUUID } from \"node:crypto\";\nimport type {\n EnsureWorkflowTopologyResponse,\n KortyxTelemetryEvent,\n} from \"@kortyx/hooks\";\nimport { createDelivery, TelemetryHttpError } from \"./delivery\";\nimport { createDiagnosticDelivery } from \"./diagnostics\";\nimport { createEventMapper } from \"./event-mapper\";\nimport { createTopologyResolver } from \"./topology\";\nimport { createTraceAdapter } from \"./trace\";\nimport type {\n CreateKortyxTelemetryAdapterOptions,\n KortyxTelemetryAdapter,\n} from \"./types\";\n\nexport type {\n CreateKortyxTelemetryAdapterOptions,\n KortyxTelemetryAdapter,\n} from \"./types\";\n\nconst DEFAULT_FLUSH_INTERVAL_MS = 250;\nconst DEFAULT_MAX_QUEUE_SIZE = 1_000;\n\nconst createId = (): string => {\n try {\n return randomUUID();\n } catch {\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n};\n\nconst endpointFor = (endpoint: string, path: string): string =>\n `${endpoint.replace(/\\/$/, \"\")}${path}`;\n\n/**\n * Creates the optional Kortyx Studio HTTP adapter. Execution paths only enqueue\n * telemetry; delivery remains best-effort and cannot fail a workflow.\n */\nexport function createKortyxTelemetryAdapter(\n options: CreateKortyxTelemetryAdapterOptions,\n): KortyxTelemetryAdapter {\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (!fetchImpl) {\n throw new Error(\n \"createKortyxTelemetryAdapter requires a fetch implementation.\",\n );\n }\n\n const send = async (path: string, body: unknown): Promise<Response> => {\n const response = await fetchImpl(endpointFor(options.endpoint, path), {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${options.apiKey}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n if (!response.ok) throw new TelemetryHttpError(response.status);\n return response;\n };\n\n const delivery = createDelivery({\n maxQueueSize: options.maxQueueSize ?? DEFAULT_MAX_QUEUE_SIZE,\n flushIntervalMs: options.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS,\n send: async (events) => {\n await send(\"/v1/telemetry/events:batch\", { events });\n },\n });\n const diagnostics = createDiagnosticDelivery(options);\n const eventMapper = createEventMapper({\n environment: options.environment,\n service: options.service,\n ...(options.metadata ? { metadata: options.metadata } : {}),\n ...(options.tags ? { tags: options.tags } : {}),\n createId,\n captureDiagnostic: diagnostics.capture,\n ...(options.error ? { error: options.error } : {}),\n });\n const topology = createTopologyResolver({\n ensure: async (snapshot) => {\n const response = await send(\n \"/v1/telemetry/workflow-revisions:ensure\",\n snapshot,\n );\n return (await response.json()) as EnsureWorkflowTopologyResponse;\n },\n });\n const trace = createTraceAdapter({\n ...(options.captureContent\n ? { captureContent: options.captureContent }\n : {}),\n createId,\n enqueue: delivery.enqueue,\n eventMapper,\n });\n const emit = async (events: KortyxTelemetryEvent[]): Promise<void> => {\n for (const event of events) delivery.enqueue(event);\n };\n\n return {\n trace,\n reporter: {\n ensureWorkflowTopology: topology.ensureWorkflowTopology,\n emit,\n getWorkflowRevisionId: topology.getWorkflowRevisionId,\n },\n environment: options.environment,\n service: options.service,\n ...(options.captureContent\n ? { captureContent: options.captureContent }\n : {}),\n ...(options.metadata ? { metadata: options.metadata } : {}),\n ...(options.tags ? { tags: options.tags } : {}),\n flush: async () => {\n await delivery.flush();\n await diagnostics.flush();\n },\n flushDiagnostics: diagnostics.flushWithDeadline,\n getDiagnosticDeliveryState: diagnostics.getState,\n getDroppedDiagnosticCount: diagnostics.getDroppedCount,\n getDroppedEventCount: delivery.getDroppedEventCount,\n getPermanentDeliveryFailureCount: delivery.getPermanentDeliveryFailureCount,\n };\n}\n","import type { UsageTelemetry } from \"@kortyx/usage-telemetry\";\nimport { getUsageTelemetry } from \"@kortyx/usage-telemetry/node\";\nimport packageJson from \"../package.json\";\n\nconst client = () => getUsageTelemetry(\"exporter\", packageJson.version);\nexport const usage: Pick<\n UsageTelemetry,\n \"start\" | \"feature\" | \"measure\" | \"flush\"\n> = {\n start: (...args) => client().start(...args),\n feature: (...args) => client().feature(...args),\n measure: (...args) => client().measure(...args),\n flush: () => client().flush(),\n};\n","{\n \"name\": \"@kortyx/telemetry\",\n \"version\": \"0.15.1\",\n \"private\": false,\n \"description\": \"Kortyx Studio telemetry HTTP adapter.\",\n \"license\": \"Apache-2.0\",\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n },\n \"files\": [\n \"dist/**\",\n \"README.md\",\n \"CHANGELOG.md\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsc --watch\",\n \"lint\": \"biome check src test\",\n \"test\": \"vitest run && pnpm -s type-check\",\n \"type-check\": \"tsc --noEmit -p tsconfig.test.json\"\n },\n \"dependencies\": {\n \"@kortyx/hooks\": \"workspace:*\",\n \"@kortyx/telemetry-contracts\": \"workspace:*\",\n \"@kortyx/core\": \"workspace:*\",\n \"@kortyx/usage-telemetry\": \"workspace:*\"\n },\n \"devDependencies\": {\n \"tsup\": \"catalog:\",\n \"turbo\": \"catalog:\",\n \"typescript\": \"catalog:\",\n \"vitest\": \"catalog:\"\n },\n \"sideEffects\": false,\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/kortyx-io/kortyx.git\",\n \"directory\": \"packages/telemetry\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import type { KortyxTelemetryEvent } from \"@kortyx/hooks\";\nimport { usage } from \"./usage\";\n\nexport class TelemetryHttpError extends Error {\n constructor(readonly status: number) {\n super(`Kortyx telemetry request failed (${status}).`);\n }\n}\n\nexport const createDelivery = (args: {\n maxQueueSize: number;\n flushIntervalMs: number;\n send: (events: KortyxTelemetryEvent[]) => Promise<void>;\n}) => {\n const queue: KortyxTelemetryEvent[] = [];\n let dropped = 0;\n let permanentFailures = 0;\n let retryAttempt = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let inFlight: Promise<{ retryDelay: number | null }> | undefined;\n const sendBatch = async (events: KortyxTelemetryEvent[]): Promise<void> => {\n try {\n await usage.measure(\"sdk.export\", () => args.send(events), {\n phase: \"delivery\",\n });\n } catch (error) {\n const status =\n error instanceof TelemetryHttpError ? error.status : undefined;\n // One invalid event (or an oversized request) must not discard the other\n // lifecycle facts in the same flush. Event IDs make a later retry safe.\n if (\n events.length > 1 &&\n (status === 400 || status === 413 || status === 422)\n ) {\n const middle = Math.floor(events.length / 2);\n await sendBatch(events.slice(0, middle));\n await sendBatch(events.slice(middle));\n return;\n }\n if (\n events.length === 1 &&\n status !== undefined &&\n status !== 429 &&\n status < 500\n ) {\n permanentFailures += 1;\n return;\n }\n throw error;\n }\n };\n const schedule = (delay = args.flushIntervalMs) => {\n if (timer || inFlight || queue.length === 0) return;\n timer = setTimeout(() => {\n timer = undefined;\n void flush();\n }, delay);\n if (typeof timer === \"object\" && \"unref\" in timer) timer.unref?.();\n };\n const flush = async (): Promise<void> => {\n while (true) {\n if (inFlight) {\n const result = await inFlight;\n if (result.retryDelay !== null) return;\n continue;\n }\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n if (queue.length === 0) return;\n const events = queue.splice(0);\n const current = (async (): Promise<{ retryDelay: number | null }> => {\n try {\n await sendBatch(events);\n retryAttempt = 0;\n return { retryDelay: null };\n } catch (error) {\n const status =\n error instanceof TelemetryHttpError ? error.status : undefined;\n if (status !== undefined && status !== 429 && status < 500) {\n permanentFailures += events.length;\n return { retryDelay: null };\n }\n const overflow = Math.max(\n 0,\n queue.length + events.length - args.maxQueueSize,\n );\n if (overflow) {\n dropped += overflow;\n events.splice(0, overflow);\n }\n queue.unshift(...events);\n retryAttempt += 1;\n const backoff = Math.min(30_000, 250 * 2 ** (retryAttempt - 1));\n return {\n retryDelay: Math.floor(backoff * (0.5 + Math.random() * 0.5)),\n };\n }\n })();\n inFlight = current;\n const result = await current;\n if (inFlight === current) inFlight = undefined;\n if (result.retryDelay !== null) {\n schedule(result.retryDelay);\n return;\n }\n }\n };\n return {\n enqueue: (event: KortyxTelemetryEvent) => {\n if (queue.length >= args.maxQueueSize) {\n queue.shift();\n dropped += 1;\n }\n queue.push(event);\n schedule();\n },\n flush,\n getDroppedEventCount: () => dropped,\n getPermanentDeliveryFailureCount: () => permanentFailures,\n };\n};\n","import { createHash, randomUUID, scryptSync } from \"node:crypto\";\nimport {\n mkdir,\n readdir,\n readFile,\n rename,\n stat,\n unlink,\n writeFile,\n} from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { isControlFlowError } from \"@kortyx/core/errors\";\nimport type { KortyxTraceErrorProjection } from \"@kortyx/hooks\";\nimport { captureDiagnosticContent } from \"@kortyx/hooks/internal\";\nimport {\n DIAGNOSTIC_LIMITS,\n DiagnosticContentSchema,\n DiagnosticCorrelationSchema,\n type DiagnosticManifest,\n DiagnosticManifestSchema,\n summarizeDiagnostic,\n} from \"@kortyx/telemetry-contracts\";\nimport type { CreateKortyxTelemetryAdapterOptions } from \"./types\";\n\nexport type DiagnosticDeliveryState =\n | \"pending\"\n | \"available\"\n | \"rejected\"\n | \"dropped\"\n | \"spool_failed\";\nexport type DiagnosticCaptureContext = {\n correlation?: DiagnosticManifest[\"correlation\"] | undefined;\n handled: boolean;\n severity: \"warning\" | \"error\";\n mechanism: DiagnosticManifest[\"mechanism\"];\n project?: KortyxTraceErrorProjection | undefined;\n};\ntype Entry = { manifest: DiagnosticManifest; content: string };\n\n/** Independent diagnostic transport. It never changes application execution. */\nexport function createDiagnosticDelivery(\n options: CreateKortyxTelemetryAdapterOptions,\n) {\n const enabled = options.diagnostics?.enabled === true;\n const queue = new Map<string, Entry>();\n const states = new Map<string, DiagnosticDeliveryState>();\n type CaptureResult = {\n diagnosticId?: string;\n diagnosticCapture: string;\n diagnosticDelivery?: DiagnosticDeliveryState | undefined;\n details: Record<string, unknown> | null;\n };\n const captured = new WeakMap<object, Map<string, CaptureResult>>();\n let queuedBytes = 0;\n let dropped = 0;\n let retryAt = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let inFlight: Promise<void> | undefined;\n const writes = new Set<Promise<void>>();\n const spool = options.diagnostics?.spoolDirectory\n ? join(\n options.diagnostics.spoolDirectory,\n // A stable credential-scoped namespace without storing the API key or\n // a fast credential hash on disk. Only derived when spooling is enabled.\n scryptSync(\n options.apiKey,\n JSON.stringify([options.endpoint, options.environment]),\n 24,\n ).toString(\"hex\"),\n )\n : undefined;\n const state = (id: string, value: DiagnosticDeliveryState) => {\n states.set(id, value);\n if (states.size > 1000) states.delete(states.keys().next().value as string);\n };\n const maxBytes = options.diagnostics?.maxQueueBytes ?? 16 * 1024 * 1024;\n const persist = async (entry: Entry) => {\n if (!spool) return;\n await mkdir(spool, { recursive: true, mode: 0o700 });\n const target = join(spool, `${entry.manifest.diagnosticId}.json`);\n const temporary = `${target}.${randomUUID()}.tmp`;\n await writeFile(temporary, JSON.stringify(entry), { mode: 0o600 });\n await rename(temporary, target);\n };\n const schedule = () => {\n if (!enabled || timer || inFlight || !queue.size) return;\n timer = setTimeout(() => {\n timer = undefined;\n void flush();\n }, options.flushIntervalMs ?? 250);\n timer.unref?.();\n };\n const restored = (async () => {\n if (!enabled || !spool) return;\n try {\n await mkdir(spool, { recursive: true, mode: 0o700 });\n for (const filename of (await readdir(spool)).filter((name) =>\n /^[a-f0-9-]{36}\\.json$/.test(name),\n )) {\n try {\n if (\n (await stat(join(spool, filename))).size >\n DIAGNOSTIC_LIMITS.bytes + 64 * 1024\n )\n throw new Error(\"Spool file exceeds budget\");\n const value = JSON.parse(\n await readFile(join(spool, filename), \"utf8\"),\n ) as Entry;\n const manifest = DiagnosticManifestSchema.parse(value.manifest);\n const bytes = Buffer.byteLength(value.content);\n if (\n bytes !== manifest.byteLength ||\n createHash(\"sha256\").update(value.content).digest(\"hex\") !==\n manifest.checksum\n )\n throw new Error(\"Invalid spool content\");\n DiagnosticContentSchema.parse(JSON.parse(value.content));\n if (queuedBytes + bytes > maxBytes) {\n state(manifest.diagnosticId, \"dropped\");\n dropped++;\n await unlink(join(spool, filename));\n continue;\n }\n if (!queue.has(manifest.diagnosticId)) {\n queue.set(manifest.diagnosticId, {\n manifest,\n content: value.content,\n });\n queuedBytes += bytes;\n state(manifest.diagnosticId, \"pending\");\n }\n } catch {\n dropped++;\n await unlink(join(spool, filename)).catch(() => undefined);\n }\n }\n schedule();\n } catch {\n dropped++;\n }\n })();\n const send = async (path: string, body: unknown) => {\n const response = await (options.fetch ?? globalThis.fetch)(\n `${options.endpoint.replace(/\\/$/, \"\")}/v1/telemetry/diagnostics${path}?env=${encodeURIComponent(options.environment)}`,\n {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${options.apiKey}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(15_000),\n },\n );\n if (!response.ok) {\n const error = new Error(\"Diagnostic delivery failed.\") as Error & {\n status: number;\n };\n error.status = response.status;\n if (response.status === 429) {\n const hint = response.headers.get(\"retry-after\");\n const seconds = Number(hint);\n const delay =\n hint && Number.isFinite(seconds)\n ? seconds * 1000\n : hint\n ? Date.parse(hint) - Date.now()\n : 5000;\n retryAt =\n Date.now() +\n Math.min(\n 60_000,\n Math.max(5000, Number.isFinite(delay) ? delay : 5000),\n );\n }\n throw error;\n }\n return response;\n };\n const flush = async () => {\n await restored;\n await Promise.all([...writes]);\n if (inFlight) {\n await inFlight;\n return;\n }\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n const work = async () => {\n if (Date.now() < retryAt) return;\n for (const [id, entry] of [...queue]) {\n try {\n await send(\"\", entry.manifest);\n const bytes = Buffer.from(entry.content);\n for (let index = 0; index < entry.manifest.partCount; index++)\n await send(`/${id}/parts`, {\n index,\n data: bytes\n .subarray(\n index * DIAGNOSTIC_LIMITS.partBytes,\n (index + 1) * DIAGNOSTIC_LIMITS.partBytes,\n )\n .toString(\"base64\"),\n });\n const completed = await send(`/${id}/complete`, {});\n const acknowledgement = (await completed.json()) as {\n state?: string;\n };\n if (acknowledgement.state !== \"available\") {\n const error = new Error(\n \"Diagnostic integrity verification failed.\",\n ) as Error & { status: number };\n error.status = 422;\n throw error;\n }\n state(id, \"available\");\n queue.delete(id);\n queuedBytes -= entry.manifest.byteLength;\n if (spool)\n await unlink(join(spool, `${id}.json`)).catch(() => undefined);\n } catch (error) {\n const status = (error as { status?: number }).status;\n if (status && status < 500 && status !== 429) {\n state(id, \"rejected\");\n queue.delete(id);\n queuedBytes -= entry.manifest.byteLength;\n dropped++;\n if (spool)\n await unlink(join(spool, `${id}.json`)).catch(() => undefined);\n }\n // Transient failures retain redacted bytes for a later flush or restart.\n if (status === 429) break;\n }\n }\n };\n inFlight = work();\n try {\n await inFlight;\n } finally {\n inFlight = undefined;\n }\n if (queue.size) {\n timer = setTimeout(\n () => {\n timer = undefined;\n void flush();\n },\n Math.max(5000, retryAt - Date.now()),\n );\n timer.unref?.();\n }\n };\n const capture = (error: unknown, context: DiagnosticCaptureContext) => {\n if (!enabled || isControlFlowError(error)) return undefined;\n const scope = JSON.stringify([\n context.correlation?.runId,\n context.correlation?.invocationId,\n context.correlation?.branchId,\n context.correlation?.attemptId,\n ]);\n const object =\n error && typeof error === \"object\" ? (error as object) : undefined;\n const existing = object ? captured.get(object)?.get(scope) : undefined;\n if (existing)\n return {\n ...existing,\n diagnosticDelivery: existing.diagnosticId\n ? (states.get(existing.diagnosticId) ?? \"pending\")\n : undefined,\n };\n const content = captureDiagnosticContent(\n error,\n context.project ?? options.error,\n );\n if (!content) return { diagnosticCapture: \"suppressed\", details: null };\n const serialized = JSON.stringify(content);\n const diagnosticId = randomUUID();\n const manifest = DiagnosticManifestSchema.parse({\n schemaVersion: 1,\n diagnosticId,\n occurrenceId: randomUUID(),\n occurredAt: new Date().toISOString(),\n environment: options.environment,\n service: options.service,\n correlation: DiagnosticCorrelationSchema.parse(\n Object.fromEntries(\n Object.entries(context.correlation ?? {}).filter(\n ([key]) => key !== \"topologyHash\",\n ),\n ),\n ),\n handled: context.handled,\n severity: context.severity,\n mechanism: context.mechanism,\n summary: {\n type: String(content.data.type ?? \"Error\").slice(0, 256),\n message: summarizeDiagnostic(content.data).message,\n },\n captureStatus: content.capture.status,\n byteLength: Buffer.byteLength(serialized),\n checksum: createHash(\"sha256\").update(serialized).digest(\"hex\"),\n partCount: Math.ceil(\n Buffer.byteLength(serialized) / DIAGNOSTIC_LIMITS.partBytes,\n ),\n });\n if (queuedBytes + manifest.byteLength > maxBytes) {\n state(diagnosticId, \"dropped\");\n dropped++;\n } else {\n const entry = { manifest, content: serialized };\n queue.set(diagnosticId, entry);\n queuedBytes += manifest.byteLength;\n state(diagnosticId, \"pending\");\n const writing = persist(entry)\n .catch(() => {\n state(diagnosticId, \"spool_failed\");\n })\n .finally(() => {\n writes.delete(writing);\n });\n writes.add(writing);\n schedule();\n }\n const result = {\n diagnosticId,\n diagnosticCapture: content.capture.status,\n diagnosticDelivery: states.get(diagnosticId),\n details: summarizeDiagnostic(content.data),\n };\n if (object) {\n const byScope = captured.get(object) ?? new Map<string, CaptureResult>();\n byScope.set(scope, result);\n captured.set(object, byScope);\n }\n return result;\n };\n const flushWithDeadline = async (timeoutMs = 5000) => {\n let deadline: ReturnType<typeof setTimeout> | undefined;\n let timedOut = false;\n await Promise.race([\n flush(),\n new Promise<void>((resolve) => {\n deadline = setTimeout(\n () => {\n timedOut = true;\n resolve();\n },\n Math.max(0, timeoutMs),\n );\n }),\n ]);\n if (deadline) clearTimeout(deadline);\n return {\n timedOut,\n pending: queue.size,\n pendingBytes: queuedBytes,\n dropped,\n states: Object.fromEntries(states),\n };\n };\n return {\n capture,\n flush,\n flushWithDeadline,\n getState: (id: string) => states.get(id),\n getDroppedCount: () => dropped,\n };\n}\n","import {\n errorProperty,\n isControlFlowError,\n serializeFailure,\n} from \"@kortyx/core/errors\";\nimport type {\n KortyxTelemetryConfig,\n KortyxTelemetryEvent,\n KortyxTelemetryEventType,\n ReasonTraceAttributes,\n ReasonTraceSpanStartArgs,\n} from \"@kortyx/hooks\";\nimport {\n exceptionDiagnostics,\n safeTelemetryMetadata,\n} from \"@kortyx/hooks/internal\";\nimport { summarizeDiagnostic } from \"@kortyx/telemetry-contracts\";\nimport type {\n createDiagnosticDelivery,\n DiagnosticCaptureContext,\n} from \"./diagnostics\";\nimport type { ActiveSpan, SpanContext } from \"./types\";\n\nconst stringValue = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.length > 0 ? value : undefined;\n\nconst shouldCapture = (\n value: KortyxTelemetryConfig[\"captureContent\"] | undefined,\n side: \"input\" | \"output\",\n): boolean => {\n if (value === true) return true;\n return Boolean(value && typeof value === \"object\" && value[side]);\n};\n\nconst asErrorPayload = (\n error: unknown,\n project?: import(\"@kortyx/hooks\").KortyxTraceErrorProjection,\n captured?: ReturnType<ReturnType<typeof createDiagnosticDelivery>[\"capture\"]>,\n): Record<string, unknown> => {\n if (isControlFlowError(error))\n return {\n name: errorProperty(error, \"name\"),\n code: errorProperty(error, \"code\"),\n message: \"Execution paused or cancelled.\",\n controlFlow: true,\n };\n const failure = serializeFailure(error);\n const diagnostic = captured\n ? captured.details\n : exceptionDiagnostics(error, project);\n const summary = diagnostic ? summarizeDiagnostic(diagnostic) : null;\n const reference = captured\n ? Object.fromEntries(\n Object.entries(captured).filter(([key]) => key !== \"details\"),\n )\n : {};\n return {\n ...failure,\n name: summary?.type ?? \"Error\",\n message: summary?.message ?? failure.message,\n ...(summary?.stack ? { stack: summary.stack } : {}),\n ...(summary?.cause ? { cause: summary.cause } : {}),\n ...reference,\n };\n};\n\nconst correlationFrom = (\n attributes: ReasonTraceAttributes | undefined,\n active: ActiveSpan | undefined,\n): KortyxTelemetryEvent[\"correlation\"] | undefined => {\n const source = attributes ?? {};\n const runId = stringValue(source.runId) ?? active?.correlation.runId;\n const workflowId =\n stringValue(source.workflowId) ?? active?.correlation.workflowId;\n if (!runId || !workflowId) return undefined;\n\n const sameWorkflow = workflowId === active?.correlation.workflowId;\n const sessionId =\n stringValue(source.sessionId) ?? active?.correlation.sessionId;\n const workflowRevisionId =\n stringValue(source.workflowRevisionId) ??\n (sameWorkflow ? active?.correlation.workflowRevisionId : undefined);\n const topologyHash =\n stringValue(source.topologyHash) ??\n (sameWorkflow ? active?.correlation.topologyHash : undefined);\n const nodeId =\n stringValue(source.nodeId) ??\n (sameWorkflow ? active?.correlation.nodeId : undefined);\n return {\n runId,\n workflowId,\n ...Object.fromEntries(\n [\"invocationId\", \"parentInvocationId\", \"branchId\"].flatMap((key) => {\n const value =\n stringValue(source[key]) ??\n active?.correlation[key as \"invocationId\"];\n return value ? [[key, value]] : [];\n }),\n ),\n ...(sessionId ? { sessionId } : {}),\n ...(workflowRevisionId ? { workflowRevisionId } : {}),\n ...(topologyHash ? { topologyHash } : {}),\n ...(nodeId ? { nodeId } : {}),\n };\n};\n\nexport const createEventMapper = (args: {\n environment: string;\n service: KortyxTelemetryEvent[\"service\"];\n metadata?: Record<string, unknown> | undefined;\n tags?: string[] | undefined;\n createId: () => string;\n error?: import(\"@kortyx/hooks\").KortyxTraceErrorProjection;\n captureDiagnostic?: ReturnType<typeof createDiagnosticDelivery>[\"capture\"];\n}) => {\n const createEvent = (input: {\n type: KortyxTelemetryEventType;\n correlation: KortyxTelemetryEvent[\"correlation\"];\n span?: SpanContext | undefined;\n parentSpanId?: string | undefined;\n payload: Record<string, unknown>;\n context?: KortyxTelemetryEvent[\"context\"] | undefined;\n }): KortyxTelemetryEvent => ({\n schemaVersion: 1,\n eventId: args.createId(),\n occurredAt: new Date().toISOString(),\n environment: args.environment,\n service: args.service,\n correlation: {\n ...input.correlation,\n ...(input.span\n ? { traceId: input.span.traceId, spanId: input.span.spanId }\n : {}),\n ...(input.parentSpanId ? { parentSpanId: input.parentSpanId } : {}),\n },\n ...(input.context || args.metadata || args.tags\n ? {\n context: {\n ...(args.tags ? { tags: args.tags } : {}),\n ...(args.metadata\n ? { metadata: safeTelemetryMetadata(args.metadata) }\n : {}),\n ...(input.context ?? {}),\n },\n }\n : {}),\n type: input.type,\n payload: {\n ...input.payload,\n ...(input.correlation.invocationId\n ? { invocationId: input.correlation.invocationId }\n : {}),\n ...(input.correlation.parentInvocationId\n ? { parentInvocationId: input.correlation.parentInvocationId }\n : {}),\n ...(input.correlation.branchId\n ? { branchId: input.correlation.branchId }\n : {}),\n },\n });\n\n const spanContext = (\n telemetry: ReasonTraceSpanStartArgs[\"telemetry\"] | undefined,\n attributes: ReasonTraceAttributes,\n ): KortyxTelemetryEvent[\"context\"] | undefined => {\n const tags = [...(args.tags ?? []), ...(telemetry?.tags ?? [])];\n const metadata = safeTelemetryMetadata({\n ...(args.metadata ?? {}),\n ...(telemetry?.metadata ?? {}),\n });\n const userId = stringValue(attributes.userId);\n const tenantId = stringValue(attributes.tenantId);\n return userId || tenantId || tags.length || Object.keys(metadata).length\n ? {\n ...(userId ? { userId } : {}),\n ...(tenantId ? { tenantId } : {}),\n ...(tags.length ? { tags } : {}),\n ...(Object.keys(metadata).length ? { metadata } : {}),\n }\n : undefined;\n };\n\n const telemetryPayload = (\n telemetry: ReasonTraceSpanStartArgs[\"telemetry\"] | undefined,\n ): Record<string, unknown> => ({\n ...(telemetry?.operation ? { operation: telemetry.operation } : {}),\n ...(telemetry?.tags?.length ? { tags: telemetry.tags } : {}),\n ...(telemetry?.metadata\n ? { metadata: safeTelemetryMetadata(telemetry.metadata) }\n : {}),\n ...(telemetry?.prompt\n ? {\n prompt: {\n ...(telemetry.prompt.name ? { name: telemetry.prompt.name } : {}),\n ...(telemetry.prompt.version !== undefined\n ? { version: telemetry.prompt.version }\n : {}),\n ...(telemetry.prompt.type ? { type: telemetry.prompt.type } : {}),\n ...(telemetry.prompt.metadata &&\n typeof telemetry.prompt.metadata === \"object\" &&\n !Array.isArray(telemetry.prompt.metadata)\n ? {\n metadata: safeTelemetryMetadata(\n telemetry.prompt.metadata as Record<string, unknown>,\n ),\n }\n : {}),\n ...(telemetry.prompt.source\n ? { source: telemetry.prompt.source }\n : {}),\n },\n }\n : {}),\n });\n\n return {\n asErrorPayload: (error: unknown, context?: DiagnosticCaptureContext) =>\n asErrorPayload(\n error,\n context?.project ?? args.error,\n context ? args.captureDiagnostic?.(error, context) : undefined,\n ),\n correlationFrom,\n createEvent,\n shouldCapture,\n spanContext,\n stringValue,\n telemetryPayload,\n };\n};\n","import type {\n EnsureWorkflowTopologyRequest,\n EnsureWorkflowTopologyResponse,\n} from \"@kortyx/hooks\";\n\ntype TopologyKey = {\n environment: string;\n workflowId: string;\n topologyHash: string;\n};\n\nconst keyFor = ({ environment, workflowId, topologyHash }: TopologyKey) =>\n `${environment}:${workflowId}:${topologyHash}`;\n\n/** Caches successful topology ensures and coalesces concurrent requests. */\nexport const createTopologyResolver = (args: {\n ensure: (\n snapshot: EnsureWorkflowTopologyRequest,\n ) => Promise<EnsureWorkflowTopologyResponse>;\n}) => {\n const revisions = new Map<string, string>();\n const pending = new Map<string, Promise<EnsureWorkflowTopologyResponse>>();\n\n const ensureWorkflowTopology = (\n snapshot: EnsureWorkflowTopologyRequest,\n ): Promise<EnsureWorkflowTopologyResponse> => {\n const key = keyFor({\n environment: snapshot.environment,\n workflowId: snapshot.workflow.id,\n topologyHash: snapshot.workflow.topologyHash,\n });\n const revision = revisions.get(key);\n if (revision) {\n return Promise.resolve({ workflowRevisionId: revision, created: false });\n }\n\n const existing = pending.get(key);\n if (existing) return existing;\n\n const request = args\n .ensure(snapshot)\n .then((result) => {\n if (!result.workflowRevisionId) {\n throw new Error(\n \"Telemetry API returned an invalid workflow revision.\",\n );\n }\n revisions.set(key, result.workflowRevisionId);\n return result;\n })\n .finally(() => {\n pending.delete(key);\n });\n pending.set(key, request);\n return request;\n };\n\n return {\n ensureWorkflowTopology,\n getWorkflowRevisionId: (args: TopologyKey) => revisions.get(keyFor(args)),\n };\n};\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { isSuspensionControlFlowError } from \"@kortyx/core/errors\";\nimport { getEvalAttemptId } from \"@kortyx/core/eval-attribution\";\nimport type {\n KortyxTelemetryConfig,\n KortyxTelemetryEvent,\n ReasonTraceAdapter,\n ReasonTraceSpan,\n ReasonTraceSpanEndArgs,\n ReasonTraceSpanStartArgs,\n} from \"@kortyx/hooks\";\nimport { ToolObservationSchema } from \"@kortyx/telemetry-contracts\";\nimport type { createEventMapper } from \"./event-mapper\";\nimport type { ActiveSpan, SpanContext } from \"./types\";\n\nconst providerPricing = (\n metadata: ReasonTraceSpanEndArgs[\"providerMetadata\"],\n): Record<string, unknown> | undefined => {\n if (metadata?.providerId !== \"openrouter\") return undefined;\n const details = metadata.costDetails;\n const upstreamCost =\n details && typeof details === \"object\" && !Array.isArray(details)\n ? (details as Record<string, unknown>).upstreamInferenceCost\n : undefined;\n const cost = metadata.isByok === true ? upstreamCost : metadata.cost;\n if (typeof cost !== \"number\" || !Number.isFinite(cost) || cost < 0)\n return undefined;\n return {\n source: \"provider\",\n currency: \"USD\",\n actualCostMicros: Math.round(cost * 1_000_000),\n };\n};\n\n/** Maps generic SDK trace calls to Kortyx Studio's span and generation facts. */\nexport const createTraceAdapter = (args: {\n captureContent?: KortyxTelemetryConfig[\"captureContent\"] | undefined;\n createId: () => string;\n enqueue: (event: KortyxTelemetryEvent) => void;\n eventMapper: ReturnType<typeof createEventMapper>;\n}): ReasonTraceAdapter => {\n const activeSpans = new AsyncLocalStorage<ActiveSpan>();\n\n const createSpan = (\n startArgs: ReasonTraceSpanStartArgs,\n ): { span: ReasonTraceSpan; active?: ActiveSpan | undefined } => {\n const evalAttemptId = getEvalAttemptId();\n const parent = activeSpans.getStore();\n const span: SpanContext = {\n traceId: parent?.traceId ?? args.createId(),\n spanId: args.createId(),\n };\n const attributes = { ...(startArgs.attributes ?? {}) };\n const currentAttributes = { ...attributes };\n const correlation = args.eventMapper.correlationFrom(attributes, parent);\n const startedAt = Date.now();\n\n const isTool = startArgs.name === \"kortyx.tool\";\n if (correlation && (!isTool || attributes.executed === true)) {\n args.enqueue(\n args.eventMapper.createEvent({\n type: isTool ? \"tool.started\" : \"span.started\",\n correlation,\n span,\n ...(parent ? { parentSpanId: parent.spanId } : {}),\n payload: isTool\n ? ToolObservationSchema.parse(attributes)\n : {\n name: startArgs.name,\n attributes: currentAttributes,\n telemetry: args.eventMapper.telemetryPayload(\n startArgs.telemetry,\n ),\n ...(args.eventMapper.shouldCapture(\n startArgs.telemetry?.captureContent ?? args.captureContent,\n \"input\",\n )\n ? { input: startArgs.telemetry?.input }\n : {}),\n },\n context: args.eventMapper.spanContext(\n startArgs.telemetry,\n currentAttributes,\n ),\n }),\n );\n }\n\n let ended = false;\n let failed = false;\n let suspended = false;\n const end = (endArgs?: ReasonTraceSpanEndArgs): void => {\n if (ended) return;\n ended = true;\n if (!correlation) return;\n\n const endAttributes = {\n ...currentAttributes,\n ...(endArgs?.attributes ?? {}),\n };\n const telemetry = { ...startArgs.telemetry, ...endArgs?.telemetry };\n const durationMs = Date.now() - startedAt;\n if (isTool) {\n const payload = ToolObservationSchema.parse(endAttributes);\n const type =\n payload.observationKind === \"reused\"\n ? \"tool.reused\"\n : payload.observationKind === \"waiting\"\n ? \"tool.waiting\"\n : payload.suspended\n ? \"tool.suspended\"\n : payload.outcome === \"denied\"\n ? \"tool.denied\"\n : payload.outcome === \"fault\"\n ? \"tool.failed\"\n : payload.outcome === \"cancelled\"\n ? \"tool.cancelled\"\n : \"tool.completed\";\n args.enqueue(\n args.eventMapper.createEvent({\n type,\n correlation,\n span,\n ...(parent ? { parentSpanId: parent.spanId } : {}),\n payload,\n }),\n );\n return;\n }\n\n args.enqueue(\n args.eventMapper.createEvent({\n type: \"span.ended\",\n correlation,\n span,\n ...(parent ? { parentSpanId: parent.spanId } : {}),\n payload: {\n name: startArgs.name,\n attributes: endAttributes,\n durationMs,\n telemetry: args.eventMapper.telemetryPayload(telemetry),\n ...(args.eventMapper.shouldCapture(\n endArgs?.telemetry?.captureContent ??\n startArgs.telemetry?.captureContent ??\n args.captureContent,\n \"output\",\n )\n ? { output: endArgs?.telemetry?.output }\n : {}),\n },\n context: args.eventMapper.spanContext(telemetry, endAttributes),\n }),\n );\n\n if (startArgs.name !== \"runReasonEngine\" || suspended) return;\n const ttftMs = nonnegativeNumber(endAttributes.ttftMs);\n const streamDurationMs = nonnegativeNumber(\n endAttributes.streamDurationMs,\n );\n const timeToLastTokenMs = nonnegativeNumber(\n endAttributes.timeToLastTokenMs,\n );\n const pricing = providerPricing(endArgs?.providerMetadata);\n args.enqueue(\n args.eventMapper.createEvent({\n type: \"generation.completed\",\n correlation,\n span,\n ...(parent ? { parentSpanId: parent.spanId } : {}),\n payload: {\n ...args.eventMapper.telemetryPayload(telemetry),\n captured:\n args.eventMapper.shouldCapture(\n startArgs.telemetry?.captureContent ?? args.captureContent,\n \"input\",\n ) ||\n args.eventMapper.shouldCapture(\n endArgs?.telemetry?.captureContent ??\n startArgs.telemetry?.captureContent ??\n args.captureContent,\n \"output\",\n ),\n ...(evalAttemptId ? { evalAttemptId } : {}),\n outcome: failed ? \"failed\" : \"completed\",\n provider:\n args.eventMapper.stringValue(attributes.providerId) ?? \"unknown\",\n model:\n args.eventMapper.stringValue(attributes.modelId) ?? \"unknown\",\n durationMs,\n ...(ttftMs !== undefined ? { ttftMs } : {}),\n ...(streamDurationMs !== undefined ? { streamDurationMs } : {}),\n ...(timeToLastTokenMs !== undefined\n ? {\n postStreamDurationMs: Math.max(\n 0,\n durationMs - timeToLastTokenMs,\n ),\n }\n : {}),\n ...(endArgs?.usage\n ? {\n usage: failed\n ? Object.fromEntries(\n Object.entries(endArgs.usage).filter(\n ([key, value]) =>\n ([\n \"input\",\n \"output\",\n \"total\",\n \"reasoning\",\n \"cacheRead\",\n \"cacheWrite\",\n \"cacheWrite1h\",\n ].includes(key) &&\n typeof value === \"number\" &&\n Number.isFinite(value)) ||\n ([\n \"outputIncludesReasoning\",\n \"inputIncludesCacheRead\",\n \"inputIncludesCacheWrite\",\n ].includes(key) &&\n typeof value === \"boolean\"),\n ),\n )\n : endArgs.usage,\n }\n : {}),\n ...(endArgs?.finishReason\n ? { finishReason: endArgs.finishReason }\n : {}),\n ...(endArgs?.warnings ? { warnings: endArgs.warnings } : {}),\n ...(pricing ? { pricing } : {}),\n ...(endArgs?.providerMetadata && !failed\n ? { providerMetadata: endArgs.providerMetadata }\n : {}),\n },\n context: args.eventMapper.spanContext(telemetry, currentAttributes),\n }),\n );\n };\n\n const traceSpan: ReasonTraceSpan = {\n setAttributes: (nextAttributes) => {\n Object.assign(currentAttributes, nextAttributes);\n },\n addEvent: (name, eventAttributes = {}) => {\n if (\n !correlation ||\n activeSpans.getStore()?.name === \"kortyx.tool\" ||\n startArgs.name === \"kortyx.tool\"\n )\n return;\n const type =\n name === \"useReason.tool-call.start\"\n ? \"tool.started\"\n : name === \"useReason.tool-call.complete\"\n ? \"tool.completed\"\n : name === \"useReason.tool-call.error\"\n ? \"tool.failed\"\n : name === \"useReason.output.emitted\"\n ? \"output.emitted\"\n : name === \"useReason.output.invalidated\"\n ? \"output.invalidated\"\n : undefined;\n if (!type) return;\n const payload =\n type === \"output.emitted\"\n ? {\n ...Object.fromEntries(\n Object.entries(eventAttributes).filter(\n ([key]) => key !== \"data\",\n ),\n ),\n ...(args.eventMapper.shouldCapture(\n startArgs.telemetry?.captureContent ?? args.captureContent,\n \"output\",\n ) && \"data\" in eventAttributes\n ? { data: eventAttributes.data }\n : {}),\n }\n : eventAttributes;\n args.enqueue(\n args.eventMapper.createEvent({\n type,\n correlation,\n span,\n ...(parent ? { parentSpanId: parent.spanId } : {}),\n payload,\n }),\n );\n },\n end,\n fail: (error, endArgs) => {\n if (ended) return;\n if (isSuspensionControlFlowError(error)) {\n suspended = true;\n Object.assign(currentAttributes, {\n \"kortyx.control_flow\": true,\n \"kortyx.suspended\": true,\n });\n end(endArgs);\n return;\n }\n failed = true;\n const errorPayload = args.eventMapper.asErrorPayload(error, {\n correlation: { ...correlation, ...span },\n handled: false,\n severity: \"error\",\n mechanism: \"span\",\n });\n if (correlation) {\n args.enqueue(\n args.eventMapper.createEvent({\n type: \"span.failed\",\n correlation,\n span,\n ...(parent ? { parentSpanId: parent.spanId } : {}),\n payload: {\n name: startArgs.name,\n error: errorPayload,\n handled: false,\n severity: \"error\",\n durationMs: Date.now() - startedAt,\n },\n }),\n );\n }\n end(endArgs);\n },\n };\n\n return {\n span: traceSpan,\n ...(correlation\n ? { active: { ...span, name: startArgs.name, correlation } }\n : {}),\n };\n };\n\n return {\n startSpan: (startArgs) => createSpan(startArgs).span,\n withSpan: async (startArgs, fn) => {\n const created = createSpan(startArgs);\n const run = async (): Promise<Awaited<ReturnType<typeof fn>>> => {\n try {\n const result = await fn(created.span);\n created.span.end?.();\n return result;\n } catch (error) {\n try {\n created.span.fail?.(error);\n } catch {\n /* Preserve the callback failure. */\n }\n throw error;\n }\n };\n return created.active ? activeSpans.run(created.active, run) : run();\n },\n getActiveContext: () => {\n const active = activeSpans.getStore();\n return active\n ? { traceId: active.traceId, spanId: active.spanId }\n : undefined;\n },\n reportError: (error, options = {}) => {\n try {\n const active = activeSpans.getStore();\n const payload = args.eventMapper.asErrorPayload(error, {\n correlation: {\n ...active?.correlation,\n ...(active\n ? { traceId: active.traceId, spanId: active.spanId }\n : {}),\n ...options.correlation,\n },\n handled: true,\n severity: options.severity === \"warning\" ? \"warning\" : \"error\",\n mechanism: options.mechanism ?? \"report\",\n project: options.error,\n });\n if (!active)\n return typeof payload.diagnosticId === \"string\"\n ? payload.diagnosticId\n : undefined;\n args.enqueue(\n args.eventMapper.createEvent({\n type: \"error.reported\",\n correlation: active.correlation,\n span: active,\n payload: {\n handled: true,\n severity: options.severity === \"warning\" ? \"warning\" : \"error\",\n error: payload,\n },\n context: args.eventMapper.spanContext(\n {\n ...(options.metadata ? { metadata: options.metadata } : {}),\n ...(options.tags ? { tags: options.tags } : {}),\n },\n {},\n ),\n }),\n );\n return typeof payload.diagnosticId === \"string\"\n ? payload.diagnosticId\n : undefined;\n } catch {\n // Error reporting is an observer and cannot change execution.\n return undefined;\n }\n },\n };\n};\n\nconst nonnegativeNumber = (value: unknown): number | undefined =>\n typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? value\n : undefined;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,sBAA2B;;;ACC3B,kBAAkC;;;ACDlC;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,SAAW;AAAA,EACX,aAAe;AAAA,EACf,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,OAAS;AAAA,EACT,SAAW;AAAA,IACT,KAAK;AAAA,MACH,OAAS;AAAA,MACT,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,OAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,IACT,KAAO;AAAA,IACP,MAAQ;AAAA,IACR,MAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA,cAAgB;AAAA,IACd,iBAAiB;AAAA,IACjB,+BAA+B;AAAA,IAC/B,gBAAgB;AAAA,IAChB,2BAA2B;AAAA,EAC7B;AAAA,EACA,iBAAmB;AAAA,IACjB,MAAQ;AAAA,IACR,OAAS;AAAA,IACT,YAAc;AAAA,IACd,QAAU;AAAA,EACZ;AAAA,EACA,aAAe;AAAA,EACf,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,IACP,WAAa;AAAA,EACf;AAAA,EACA,eAAiB;AAAA,IACf,QAAU;AAAA,EACZ;AACF;;;AD3CA,IAAM,SAAS,UAAM,+BAAkB,YAAY,gBAAY,OAAO;AAC/D,IAAM,QAGT;AAAA,EACF,OAAO,IAAI,SAAS,OAAO,EAAE,MAAM,GAAG,IAAI;AAAA,EAC1C,SAAS,IAAI,SAAS,OAAO,EAAE,QAAQ,GAAG,IAAI;AAAA,EAC9C,SAAS,IAAI,SAAS,OAAO,EAAE,QAAQ,GAAG,IAAI;AAAA,EAC9C,OAAO,MAAM,OAAO,EAAE,MAAM;AAC9B;;;AEVO,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC5C,YAAqB,QAAgB;AACnC,UAAM,oCAAoC,MAAM,IAAI;AADjC;AAAA,EAErB;AAAA,EAFqB;AAGvB;AAEO,IAAM,iBAAiB,CAAC,SAIzB;AACJ,QAAM,QAAgC,CAAC;AACvC,MAAI,UAAU;AACd,MAAI,oBAAoB;AACxB,MAAI,eAAe;AACnB,MAAI;AACJ,MAAI;AACJ,QAAM,YAAY,OAAO,WAAkD;AACzE,QAAI;AACF,YAAM,MAAM,QAAQ,cAAc,MAAM,KAAK,KAAK,MAAM,GAAG;AAAA,QACzD,OAAO;AAAA,MACT,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,SACJ,iBAAiB,qBAAqB,MAAM,SAAS;AAGvD,UACE,OAAO,SAAS,MACf,WAAW,OAAO,WAAW,OAAO,WAAW,MAChD;AACA,cAAM,SAAS,KAAK,MAAM,OAAO,SAAS,CAAC;AAC3C,cAAM,UAAU,OAAO,MAAM,GAAG,MAAM,CAAC;AACvC,cAAM,UAAU,OAAO,MAAM,MAAM,CAAC;AACpC;AAAA,MACF;AACA,UACE,OAAO,WAAW,KAClB,WAAW,UACX,WAAW,OACX,SAAS,KACT;AACA,6BAAqB;AACrB;AAAA,MACF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACA,QAAM,WAAW,CAAC,QAAQ,KAAK,oBAAoB;AACjD,QAAI,SAAS,YAAY,MAAM,WAAW,EAAG;AAC7C,YAAQ,WAAW,MAAM;AACvB,cAAQ;AACR,WAAK,MAAM;AAAA,IACb,GAAG,KAAK;AACR,QAAI,OAAO,UAAU,YAAY,WAAW,MAAO,OAAM,QAAQ;AAAA,EACnE;AACA,QAAM,QAAQ,YAA2B;AACvC,WAAO,MAAM;AACX,UAAI,UAAU;AACZ,cAAMC,UAAS,MAAM;AACrB,YAAIA,QAAO,eAAe,KAAM;AAChC;AAAA,MACF;AACA,UAAI,OAAO;AACT,qBAAa,KAAK;AAClB,gBAAQ;AAAA,MACV;AACA,UAAI,MAAM,WAAW,EAAG;AACxB,YAAM,SAAS,MAAM,OAAO,CAAC;AAC7B,YAAM,WAAW,YAAoD;AACnE,YAAI;AACF,gBAAM,UAAU,MAAM;AACtB,yBAAe;AACf,iBAAO,EAAE,YAAY,KAAK;AAAA,QAC5B,SAAS,OAAO;AACd,gBAAM,SACJ,iBAAiB,qBAAqB,MAAM,SAAS;AACvD,cAAI,WAAW,UAAa,WAAW,OAAO,SAAS,KAAK;AAC1D,iCAAqB,OAAO;AAC5B,mBAAO,EAAE,YAAY,KAAK;AAAA,UAC5B;AACA,gBAAM,WAAW,KAAK;AAAA,YACpB;AAAA,YACA,MAAM,SAAS,OAAO,SAAS,KAAK;AAAA,UACtC;AACA,cAAI,UAAU;AACZ,uBAAW;AACX,mBAAO,OAAO,GAAG,QAAQ;AAAA,UAC3B;AACA,gBAAM,QAAQ,GAAG,MAAM;AACvB,0BAAgB;AAChB,gBAAM,UAAU,KAAK,IAAI,KAAQ,MAAM,MAAM,eAAe,EAAE;AAC9D,iBAAO;AAAA,YACL,YAAY,KAAK,MAAM,WAAW,MAAM,KAAK,OAAO,IAAI,IAAI;AAAA,UAC9D;AAAA,QACF;AAAA,MACF,GAAG;AACH,iBAAW;AACX,YAAM,SAAS,MAAM;AACrB,UAAI,aAAa,QAAS,YAAW;AACrC,UAAI,OAAO,eAAe,MAAM;AAC9B,iBAAS,OAAO,UAAU;AAC1B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,SAAS,CAAC,UAAgC;AACxC,UAAI,MAAM,UAAU,KAAK,cAAc;AACrC,cAAM,MAAM;AACZ,mBAAW;AAAA,MACb;AACA,YAAM,KAAK,KAAK;AAChB,eAAS;AAAA,IACX;AAAA,IACA;AAAA,IACA,sBAAsB,MAAM;AAAA,IAC5B,kCAAkC,MAAM;AAAA,EAC1C;AACF;;;AC1HA,yBAAmD;AACnD,sBAQO;AACP,uBAAqB;AACrB,oBAAmC;AAEnC,sBAAyC;AACzC,iCAOO;AAmBA,SAAS,yBACd,SACA;AACA,QAAM,UAAU,QAAQ,aAAa,YAAY;AACjD,QAAM,QAAQ,oBAAI,IAAmB;AACrC,QAAM,SAAS,oBAAI,IAAqC;AAOxD,QAAM,WAAW,oBAAI,QAA4C;AACjE,MAAI,cAAc;AAClB,MAAI,UAAU;AACd,MAAI,UAAU;AACd,MAAI;AACJ,MAAI;AACJ,QAAM,SAAS,oBAAI,IAAmB;AACtC,QAAM,QAAQ,QAAQ,aAAa,qBAC/B;AAAA,IACE,QAAQ,YAAY;AAAA;AAAA;AAAA,QAGpB;AAAA,MACE,QAAQ;AAAA,MACR,KAAK,UAAU,CAAC,QAAQ,UAAU,QAAQ,WAAW,CAAC;AAAA,MACtD;AAAA,IACF,EAAE,SAAS,KAAK;AAAA,EAClB,IACA;AACJ,QAAM,QAAQ,CAAC,IAAY,UAAmC;AAC5D,WAAO,IAAI,IAAI,KAAK;AACpB,QAAI,OAAO,OAAO,IAAM,QAAO,OAAO,OAAO,KAAK,EAAE,KAAK,EAAE,KAAe;AAAA,EAC5E;AACA,QAAM,WAAW,QAAQ,aAAa,iBAAiB,KAAK,OAAO;AACnE,QAAM,UAAU,OAAO,UAAiB;AACtC,QAAI,CAAC,MAAO;AACZ,cAAM,uBAAM,OAAO,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AACnD,UAAM,aAAS,uBAAK,OAAO,GAAG,MAAM,SAAS,YAAY,OAAO;AAChE,UAAM,YAAY,GAAG,MAAM,QAAI,+BAAW,CAAC;AAC3C,cAAM,2BAAU,WAAW,KAAK,UAAU,KAAK,GAAG,EAAE,MAAM,IAAM,CAAC;AACjE,cAAM,wBAAO,WAAW,MAAM;AAAA,EAChC;AACA,QAAM,WAAW,MAAM;AACrB,QAAI,CAAC,WAAW,SAAS,YAAY,CAAC,MAAM,KAAM;AAClD,YAAQ,WAAW,MAAM;AACvB,cAAQ;AACR,WAAK,MAAM;AAAA,IACb,GAAG,QAAQ,mBAAmB,GAAG;AACjC,UAAM,QAAQ;AAAA,EAChB;AACA,QAAM,YAAY,YAAY;AAC5B,QAAI,CAAC,WAAW,CAAC,MAAO;AACxB,QAAI;AACF,gBAAM,uBAAM,OAAO,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AACnD,iBAAW,aAAa,UAAM,yBAAQ,KAAK,GAAG;AAAA,QAAO,CAAC,SACpD,wBAAwB,KAAK,IAAI;AAAA,MACnC,GAAG;AACD,YAAI;AACF,eACG,UAAM,0BAAK,uBAAK,OAAO,QAAQ,CAAC,GAAG,OACpC,6CAAkB,QAAQ,KAAK;AAE/B,kBAAM,IAAI,MAAM,2BAA2B;AAC7C,gBAAM,QAAQ,KAAK;AAAA,YACjB,UAAM,8BAAS,uBAAK,OAAO,QAAQ,GAAG,MAAM;AAAA,UAC9C;AACA,gBAAM,WAAW,oDAAyB,MAAM,MAAM,QAAQ;AAC9D,gBAAM,QAAQ,OAAO,WAAW,MAAM,OAAO;AAC7C,cACE,UAAU,SAAS,kBACnB,+BAAW,QAAQ,EAAE,OAAO,MAAM,OAAO,EAAE,OAAO,KAAK,MACrD,SAAS;AAEX,kBAAM,IAAI,MAAM,uBAAuB;AACzC,6DAAwB,MAAM,KAAK,MAAM,MAAM,OAAO,CAAC;AACvD,cAAI,cAAc,QAAQ,UAAU;AAClC,kBAAM,SAAS,cAAc,SAAS;AACtC;AACA,sBAAM,4BAAO,uBAAK,OAAO,QAAQ,CAAC;AAClC;AAAA,UACF;AACA,cAAI,CAAC,MAAM,IAAI,SAAS,YAAY,GAAG;AACrC,kBAAM,IAAI,SAAS,cAAc;AAAA,cAC/B;AAAA,cACA,SAAS,MAAM;AAAA,YACjB,CAAC;AACD,2BAAe;AACf,kBAAM,SAAS,cAAc,SAAS;AAAA,UACxC;AAAA,QACF,QAAQ;AACN;AACA,oBAAM,4BAAO,uBAAK,OAAO,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAS;AAAA,QAC3D;AAAA,MACF;AACA,eAAS;AAAA,IACX,QAAQ;AACN;AAAA,IACF;AAAA,EACF,GAAG;AACH,QAAM,OAAO,OAAO,MAAc,SAAkB;AAClD,UAAM,WAAW,OAAO,QAAQ,SAAS,WAAW;AAAA,MAClD,GAAG,QAAQ,SAAS,QAAQ,OAAO,EAAE,CAAC,4BAA4B,IAAI,QAAQ,mBAAmB,QAAQ,WAAW,CAAC;AAAA,MACrH;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,eAAe,UAAU,QAAQ,MAAM;AAAA,UACvC,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,IAAI;AAAA,QACzB,QAAQ,YAAY,QAAQ,IAAM;AAAA,MACpC;AAAA,IACF;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,IAAI,MAAM,6BAA6B;AAGrD,YAAM,SAAS,SAAS;AACxB,UAAI,SAAS,WAAW,KAAK;AAC3B,cAAM,OAAO,SAAS,QAAQ,IAAI,aAAa;AAC/C,cAAM,UAAU,OAAO,IAAI;AAC3B,cAAM,QACJ,QAAQ,OAAO,SAAS,OAAO,IAC3B,UAAU,MACV,OACE,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,IAC5B;AACR,kBACE,KAAK,IAAI,IACT,KAAK;AAAA,UACH;AAAA,UACA,KAAK,IAAI,KAAM,OAAO,SAAS,KAAK,IAAI,QAAQ,GAAI;AAAA,QACtD;AAAA,MACJ;AACA,YAAM;AAAA,IACR;AACA,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,YAAY;AACxB,UAAM;AACN,UAAM,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC;AAC7B,QAAI,UAAU;AACZ,YAAM;AACN;AAAA,IACF;AACA,QAAI,OAAO;AACT,mBAAa,KAAK;AAClB,cAAQ;AAAA,IACV;AACA,UAAM,OAAO,YAAY;AACvB,UAAI,KAAK,IAAI,IAAI,QAAS;AAC1B,iBAAW,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG;AACpC,YAAI;AACF,gBAAM,KAAK,IAAI,MAAM,QAAQ;AAC7B,gBAAM,QAAQ,OAAO,KAAK,MAAM,OAAO;AACvC,mBAAS,QAAQ,GAAG,QAAQ,MAAM,SAAS,WAAW;AACpD,kBAAM,KAAK,IAAI,EAAE,UAAU;AAAA,cACzB;AAAA,cACA,MAAM,MACH;AAAA,gBACC,QAAQ,6CAAkB;AAAA,iBACzB,QAAQ,KAAK,6CAAkB;AAAA,cAClC,EACC,SAAS,QAAQ;AAAA,YACtB,CAAC;AACH,gBAAM,YAAY,MAAM,KAAK,IAAI,EAAE,aAAa,CAAC,CAAC;AAClD,gBAAM,kBAAmB,MAAM,UAAU,KAAK;AAG9C,cAAI,gBAAgB,UAAU,aAAa;AACzC,kBAAM,QAAQ,IAAI;AAAA,cAChB;AAAA,YACF;AACA,kBAAM,SAAS;AACf,kBAAM;AAAA,UACR;AACA,gBAAM,IAAI,WAAW;AACrB,gBAAM,OAAO,EAAE;AACf,yBAAe,MAAM,SAAS;AAC9B,cAAI;AACF,sBAAM,4BAAO,uBAAK,OAAO,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,MAAM,MAAS;AAAA,QACjE,SAAS,OAAO;AACd,gBAAM,SAAU,MAA8B;AAC9C,cAAI,UAAU,SAAS,OAAO,WAAW,KAAK;AAC5C,kBAAM,IAAI,UAAU;AACpB,kBAAM,OAAO,EAAE;AACf,2BAAe,MAAM,SAAS;AAC9B;AACA,gBAAI;AACF,wBAAM,4BAAO,uBAAK,OAAO,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,MAAM,MAAS;AAAA,UACjE;AAEA,cAAI,WAAW,IAAK;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AACA,eAAW,KAAK;AAChB,QAAI;AACF,YAAM;AAAA,IACR,UAAE;AACA,iBAAW;AAAA,IACb;AACA,QAAI,MAAM,MAAM;AACd,cAAQ;AAAA,QACN,MAAM;AACJ,kBAAQ;AACR,eAAK,MAAM;AAAA,QACb;AAAA,QACA,KAAK,IAAI,KAAM,UAAU,KAAK,IAAI,CAAC;AAAA,MACrC;AACA,YAAM,QAAQ;AAAA,IAChB;AAAA,EACF;AACA,QAAM,UAAU,CAAC,OAAgB,YAAsC;AACrE,QAAI,CAAC,eAAW,kCAAmB,KAAK,EAAG,QAAO;AAClD,UAAM,QAAQ,KAAK,UAAU;AAAA,MAC3B,QAAQ,aAAa;AAAA,MACrB,QAAQ,aAAa;AAAA,MACrB,QAAQ,aAAa;AAAA,MACrB,QAAQ,aAAa;AAAA,IACvB,CAAC;AACD,UAAM,SACJ,SAAS,OAAO,UAAU,WAAY,QAAmB;AAC3D,UAAM,WAAW,SAAS,SAAS,IAAI,MAAM,GAAG,IAAI,KAAK,IAAI;AAC7D,QAAI;AACF,aAAO;AAAA,QACL,GAAG;AAAA,QACH,oBAAoB,SAAS,eACxB,OAAO,IAAI,SAAS,YAAY,KAAK,YACtC;AAAA,MACN;AACF,UAAM,cAAU;AAAA,MACd;AAAA,MACA,QAAQ,WAAW,QAAQ;AAAA,IAC7B;AACA,QAAI,CAAC,QAAS,QAAO,EAAE,mBAAmB,cAAc,SAAS,KAAK;AACtE,UAAM,aAAa,KAAK,UAAU,OAAO;AACzC,UAAM,mBAAe,+BAAW;AAChC,UAAM,WAAW,oDAAyB,MAAM;AAAA,MAC9C,eAAe;AAAA,MACf;AAAA,MACA,kBAAc,+BAAW;AAAA,MACzB,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,MACnC,aAAa,QAAQ;AAAA,MACrB,SAAS,QAAQ;AAAA,MACjB,aAAa,uDAA4B;AAAA,QACvC,OAAO;AAAA,UACL,OAAO,QAAQ,QAAQ,eAAe,CAAC,CAAC,EAAE;AAAA,YACxC,CAAC,CAAC,GAAG,MAAM,QAAQ;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,WAAW,QAAQ;AAAA,MACnB,SAAS;AAAA,QACP,MAAM,OAAO,QAAQ,KAAK,QAAQ,OAAO,EAAE,MAAM,GAAG,GAAG;AAAA,QACvD,aAAS,gDAAoB,QAAQ,IAAI,EAAE;AAAA,MAC7C;AAAA,MACA,eAAe,QAAQ,QAAQ;AAAA,MAC/B,YAAY,OAAO,WAAW,UAAU;AAAA,MACxC,cAAU,+BAAW,QAAQ,EAAE,OAAO,UAAU,EAAE,OAAO,KAAK;AAAA,MAC9D,WAAW,KAAK;AAAA,QACd,OAAO,WAAW,UAAU,IAAI,6CAAkB;AAAA,MACpD;AAAA,IACF,CAAC;AACD,QAAI,cAAc,SAAS,aAAa,UAAU;AAChD,YAAM,cAAc,SAAS;AAC7B;AAAA,IACF,OAAO;AACL,YAAM,QAAQ,EAAE,UAAU,SAAS,WAAW;AAC9C,YAAM,IAAI,cAAc,KAAK;AAC7B,qBAAe,SAAS;AACxB,YAAM,cAAc,SAAS;AAC7B,YAAM,UAAU,QAAQ,KAAK,EAC1B,MAAM,MAAM;AACX,cAAM,cAAc,cAAc;AAAA,MACpC,CAAC,EACA,QAAQ,MAAM;AACb,eAAO,OAAO,OAAO;AAAA,MACvB,CAAC;AACH,aAAO,IAAI,OAAO;AAClB,eAAS;AAAA,IACX;AACA,UAAM,SAAS;AAAA,MACb;AAAA,MACA,mBAAmB,QAAQ,QAAQ;AAAA,MACnC,oBAAoB,OAAO,IAAI,YAAY;AAAA,MAC3C,aAAS,gDAAoB,QAAQ,IAAI;AAAA,IAC3C;AACA,QAAI,QAAQ;AACV,YAAM,UAAU,SAAS,IAAI,MAAM,KAAK,oBAAI,IAA2B;AACvE,cAAQ,IAAI,OAAO,MAAM;AACzB,eAAS,IAAI,QAAQ,OAAO;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AACA,QAAM,oBAAoB,OAAO,YAAY,QAAS;AACpD,QAAI;AACJ,QAAI,WAAW;AACf,UAAM,QAAQ,KAAK;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,QAAc,CAAC,YAAY;AAC7B,mBAAW;AAAA,UACT,MAAM;AACJ,uBAAW;AACX,oBAAQ;AAAA,UACV;AAAA,UACA,KAAK,IAAI,GAAG,SAAS;AAAA,QACvB;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AACD,QAAI,SAAU,cAAa,QAAQ;AACnC,WAAO;AAAA,MACL;AAAA,MACA,SAAS,MAAM;AAAA,MACf,cAAc;AAAA,MACd;AAAA,MACA,QAAQ,OAAO,YAAY,MAAM;AAAA,IACnC;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC,OAAe,OAAO,IAAI,EAAE;AAAA,IACvC,iBAAiB,MAAM;AAAA,EACzB;AACF;;;ACjXA,IAAAC,iBAIO;AAQP,IAAAC,mBAGO;AACP,IAAAC,8BAAoC;AAOpC,IAAM,cAAc,CAAC,UACnB,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AAE1D,IAAM,gBAAgB,CACpB,OACA,SACY;AACZ,MAAI,UAAU,KAAM,QAAO;AAC3B,SAAO,QAAQ,SAAS,OAAO,UAAU,YAAY,MAAM,IAAI,CAAC;AAClE;AAEA,IAAM,iBAAiB,CACrB,OACA,SACA,aAC4B;AAC5B,UAAI,mCAAmB,KAAK;AAC1B,WAAO;AAAA,MACL,UAAM,8BAAc,OAAO,MAAM;AAAA,MACjC,UAAM,8BAAc,OAAO,MAAM;AAAA,MACjC,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AACF,QAAM,cAAU,iCAAiB,KAAK;AACtC,QAAM,aAAa,WACf,SAAS,cACT,uCAAqB,OAAO,OAAO;AACvC,QAAM,UAAU,iBAAa,iDAAoB,UAAU,IAAI;AAC/D,QAAM,YAAY,WACd,OAAO;AAAA,IACL,OAAO,QAAQ,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,QAAQ,SAAS;AAAA,EAC9D,IACA,CAAC;AACL,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM,SAAS,QAAQ;AAAA,IACvB,SAAS,SAAS,WAAW,QAAQ;AAAA,IACrC,GAAI,SAAS,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,IACjD,GAAI,SAAS,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,IACjD,GAAG;AAAA,EACL;AACF;AAEA,IAAM,kBAAkB,CACtB,YACA,WACoD;AACpD,QAAM,SAAS,cAAc,CAAC;AAC9B,QAAM,QAAQ,YAAY,OAAO,KAAK,KAAK,QAAQ,YAAY;AAC/D,QAAM,aACJ,YAAY,OAAO,UAAU,KAAK,QAAQ,YAAY;AACxD,MAAI,CAAC,SAAS,CAAC,WAAY,QAAO;AAElC,QAAM,eAAe,eAAe,QAAQ,YAAY;AACxD,QAAM,YACJ,YAAY,OAAO,SAAS,KAAK,QAAQ,YAAY;AACvD,QAAM,qBACJ,YAAY,OAAO,kBAAkB,MACpC,eAAe,QAAQ,YAAY,qBAAqB;AAC3D,QAAM,eACJ,YAAY,OAAO,YAAY,MAC9B,eAAe,QAAQ,YAAY,eAAe;AACrD,QAAM,SACJ,YAAY,OAAO,MAAM,MACxB,eAAe,QAAQ,YAAY,SAAS;AAC/C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,GAAG,OAAO;AAAA,MACR,CAAC,gBAAgB,sBAAsB,UAAU,EAAE,QAAQ,CAAC,QAAQ;AAClE,cAAM,QACJ,YAAY,OAAO,GAAG,CAAC,KACvB,QAAQ,YAAY,GAAqB;AAC3C,eAAO,QAAQ,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC;AAAA,MACnC,CAAC;AAAA,IACH;AAAA,IACA,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,IACjC,GAAI,qBAAqB,EAAE,mBAAmB,IAAI,CAAC;AAAA,IACnD,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,IACvC,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,EAC7B;AACF;AAEO,IAAM,oBAAoB,CAAC,SAQ5B;AACJ,QAAM,cAAc,CAAC,WAOQ;AAAA,IAC3B,eAAe;AAAA,IACf,SAAS,KAAK,SAAS;AAAA,IACvB,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,IACnC,aAAa,KAAK;AAAA,IAClB,SAAS,KAAK;AAAA,IACd,aAAa;AAAA,MACX,GAAG,MAAM;AAAA,MACT,GAAI,MAAM,OACN,EAAE,SAAS,MAAM,KAAK,SAAS,QAAQ,MAAM,KAAK,OAAO,IACzD,CAAC;AAAA,MACL,GAAI,MAAM,eAAe,EAAE,cAAc,MAAM,aAAa,IAAI,CAAC;AAAA,IACnE;AAAA,IACA,GAAI,MAAM,WAAW,KAAK,YAAY,KAAK,OACvC;AAAA,MACE,SAAS;AAAA,QACP,GAAI,KAAK,OAAO,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC;AAAA,QACvC,GAAI,KAAK,WACL,EAAE,cAAU,wCAAsB,KAAK,QAAQ,EAAE,IACjD,CAAC;AAAA,QACL,GAAI,MAAM,WAAW,CAAC;AAAA,MACxB;AAAA,IACF,IACA,CAAC;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,SAAS;AAAA,MACP,GAAG,MAAM;AAAA,MACT,GAAI,MAAM,YAAY,eAClB,EAAE,cAAc,MAAM,YAAY,aAAa,IAC/C,CAAC;AAAA,MACL,GAAI,MAAM,YAAY,qBAClB,EAAE,oBAAoB,MAAM,YAAY,mBAAmB,IAC3D,CAAC;AAAA,MACL,GAAI,MAAM,YAAY,WAClB,EAAE,UAAU,MAAM,YAAY,SAAS,IACvC,CAAC;AAAA,IACP;AAAA,EACF;AAEA,QAAM,cAAc,CAClB,WACA,eACgD;AAChD,UAAM,OAAO,CAAC,GAAI,KAAK,QAAQ,CAAC,GAAI,GAAI,WAAW,QAAQ,CAAC,CAAE;AAC9D,UAAM,eAAW,wCAAsB;AAAA,MACrC,GAAI,KAAK,YAAY,CAAC;AAAA,MACtB,GAAI,WAAW,YAAY,CAAC;AAAA,IAC9B,CAAC;AACD,UAAM,SAAS,YAAY,WAAW,MAAM;AAC5C,UAAM,WAAW,YAAY,WAAW,QAAQ;AAChD,WAAO,UAAU,YAAY,KAAK,UAAU,OAAO,KAAK,QAAQ,EAAE,SAC9D;AAAA,MACE,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAC3B,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,MAC/B,GAAI,KAAK,SAAS,EAAE,KAAK,IAAI,CAAC;AAAA,MAC9B,GAAI,OAAO,KAAK,QAAQ,EAAE,SAAS,EAAE,SAAS,IAAI,CAAC;AAAA,IACrD,IACA;AAAA,EACN;AAEA,QAAM,mBAAmB,CACvB,eAC6B;AAAA,IAC7B,GAAI,WAAW,YAAY,EAAE,WAAW,UAAU,UAAU,IAAI,CAAC;AAAA,IACjE,GAAI,WAAW,MAAM,SAAS,EAAE,MAAM,UAAU,KAAK,IAAI,CAAC;AAAA,IAC1D,GAAI,WAAW,WACX,EAAE,cAAU,wCAAsB,UAAU,QAAQ,EAAE,IACtD,CAAC;AAAA,IACL,GAAI,WAAW,SACX;AAAA,MACE,QAAQ;AAAA,QACN,GAAI,UAAU,OAAO,OAAO,EAAE,MAAM,UAAU,OAAO,KAAK,IAAI,CAAC;AAAA,QAC/D,GAAI,UAAU,OAAO,YAAY,SAC7B,EAAE,SAAS,UAAU,OAAO,QAAQ,IACpC,CAAC;AAAA,QACL,GAAI,UAAU,OAAO,OAAO,EAAE,MAAM,UAAU,OAAO,KAAK,IAAI,CAAC;AAAA,QAC/D,GAAI,UAAU,OAAO,YACrB,OAAO,UAAU,OAAO,aAAa,YACrC,CAAC,MAAM,QAAQ,UAAU,OAAO,QAAQ,IACpC;AAAA,UACE,cAAU;AAAA,YACR,UAAU,OAAO;AAAA,UACnB;AAAA,QACF,IACA,CAAC;AAAA,QACL,GAAI,UAAU,OAAO,SACjB,EAAE,QAAQ,UAAU,OAAO,OAAO,IAClC,CAAC;AAAA,MACP;AAAA,IACF,IACA,CAAC;AAAA,EACP;AAEA,SAAO;AAAA,IACL,gBAAgB,CAAC,OAAgB,YAC/B;AAAA,MACE;AAAA,MACA,SAAS,WAAW,KAAK;AAAA,MACzB,UAAU,KAAK,oBAAoB,OAAO,OAAO,IAAI;AAAA,IACvD;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC1NA,IAAM,SAAS,CAAC,EAAE,aAAa,YAAY,aAAa,MACtD,GAAG,WAAW,IAAI,UAAU,IAAI,YAAY;AAGvC,IAAM,yBAAyB,CAAC,SAIjC;AACJ,QAAM,YAAY,oBAAI,IAAoB;AAC1C,QAAM,UAAU,oBAAI,IAAqD;AAEzE,QAAM,yBAAyB,CAC7B,aAC4C;AAC5C,UAAM,MAAM,OAAO;AAAA,MACjB,aAAa,SAAS;AAAA,MACtB,YAAY,SAAS,SAAS;AAAA,MAC9B,cAAc,SAAS,SAAS;AAAA,IAClC,CAAC;AACD,UAAM,WAAW,UAAU,IAAI,GAAG;AAClC,QAAI,UAAU;AACZ,aAAO,QAAQ,QAAQ,EAAE,oBAAoB,UAAU,SAAS,MAAM,CAAC;AAAA,IACzE;AAEA,UAAM,WAAW,QAAQ,IAAI,GAAG;AAChC,QAAI,SAAU,QAAO;AAErB,UAAM,UAAU,KACb,OAAO,QAAQ,EACf,KAAK,CAAC,WAAW;AAChB,UAAI,CAAC,OAAO,oBAAoB;AAC9B,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,gBAAU,IAAI,KAAK,OAAO,kBAAkB;AAC5C,aAAO;AAAA,IACT,CAAC,EACA,QAAQ,MAAM;AACb,cAAQ,OAAO,GAAG;AAAA,IACpB,CAAC;AACH,YAAQ,IAAI,KAAK,OAAO;AACxB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA,uBAAuB,CAACC,UAAsB,UAAU,IAAI,OAAOA,KAAI,CAAC;AAAA,EAC1E;AACF;;;AC7DA,8BAAkC;AAClC,IAAAC,iBAA6C;AAC7C,8BAAiC;AASjC,IAAAC,8BAAsC;AAItC,IAAM,kBAAkB,CACtB,aACwC;AACxC,MAAI,UAAU,eAAe,aAAc,QAAO;AAClD,QAAM,UAAU,SAAS;AACzB,QAAM,eACJ,WAAW,OAAO,YAAY,YAAY,CAAC,MAAM,QAAQ,OAAO,IAC3D,QAAoC,wBACrC;AACN,QAAM,OAAO,SAAS,WAAW,OAAO,eAAe,SAAS;AAChE,MAAI,OAAO,SAAS,YAAY,CAAC,OAAO,SAAS,IAAI,KAAK,OAAO;AAC/D,WAAO;AACT,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB,KAAK,MAAM,OAAO,GAAS;AAAA,EAC/C;AACF;AAGO,IAAM,qBAAqB,CAAC,SAKT;AACxB,QAAM,cAAc,IAAI,0CAA8B;AAEtD,QAAM,aAAa,CACjB,cAC+D;AAC/D,UAAM,oBAAgB,0CAAiB;AACvC,UAAM,SAAS,YAAY,SAAS;AACpC,UAAM,OAAoB;AAAA,MACxB,SAAS,QAAQ,WAAW,KAAK,SAAS;AAAA,MAC1C,QAAQ,KAAK,SAAS;AAAA,IACxB;AACA,UAAM,aAAa,EAAE,GAAI,UAAU,cAAc,CAAC,EAAG;AACrD,UAAM,oBAAoB,EAAE,GAAG,WAAW;AAC1C,UAAM,cAAc,KAAK,YAAY,gBAAgB,YAAY,MAAM;AACvE,UAAM,YAAY,KAAK,IAAI;AAE3B,UAAM,SAAS,UAAU,SAAS;AAClC,QAAI,gBAAgB,CAAC,UAAU,WAAW,aAAa,OAAO;AAC5D,WAAK;AAAA,QACH,KAAK,YAAY,YAAY;AAAA,UAC3B,MAAM,SAAS,iBAAiB;AAAA,UAChC;AAAA,UACA;AAAA,UACA,GAAI,SAAS,EAAE,cAAc,OAAO,OAAO,IAAI,CAAC;AAAA,UAChD,SAAS,SACL,kDAAsB,MAAM,UAAU,IACtC;AAAA,YACE,MAAM,UAAU;AAAA,YAChB,YAAY;AAAA,YACZ,WAAW,KAAK,YAAY;AAAA,cAC1B,UAAU;AAAA,YACZ;AAAA,YACA,GAAI,KAAK,YAAY;AAAA,cACnB,UAAU,WAAW,kBAAkB,KAAK;AAAA,cAC5C;AAAA,YACF,IACI,EAAE,OAAO,UAAU,WAAW,MAAM,IACpC,CAAC;AAAA,UACP;AAAA,UACJ,SAAS,KAAK,YAAY;AAAA,YACxB,UAAU;AAAA,YACV;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,QAAQ;AACZ,QAAI,SAAS;AACb,QAAI,YAAY;AAChB,UAAM,MAAM,CAAC,YAA2C;AACtD,UAAI,MAAO;AACX,cAAQ;AACR,UAAI,CAAC,YAAa;AAElB,YAAM,gBAAgB;AAAA,QACpB,GAAG;AAAA,QACH,GAAI,SAAS,cAAc,CAAC;AAAA,MAC9B;AACA,YAAM,YAAY,EAAE,GAAG,UAAU,WAAW,GAAG,SAAS,UAAU;AAClE,YAAM,aAAa,KAAK,IAAI,IAAI;AAChC,UAAI,QAAQ;AACV,cAAM,UAAU,kDAAsB,MAAM,aAAa;AACzD,cAAM,OACJ,QAAQ,oBAAoB,WACxB,gBACA,QAAQ,oBAAoB,YAC1B,iBACA,QAAQ,YACN,mBACA,QAAQ,YAAY,WAClB,gBACA,QAAQ,YAAY,UAClB,gBACA,QAAQ,YAAY,cAClB,mBACA;AAChB,aAAK;AAAA,UACH,KAAK,YAAY,YAAY;AAAA,YAC3B;AAAA,YACA;AAAA,YACA;AAAA,YACA,GAAI,SAAS,EAAE,cAAc,OAAO,OAAO,IAAI,CAAC;AAAA,YAChD;AAAA,UACF,CAAC;AAAA,QACH;AACA;AAAA,MACF;AAEA,WAAK;AAAA,QACH,KAAK,YAAY,YAAY;AAAA,UAC3B,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,GAAI,SAAS,EAAE,cAAc,OAAO,OAAO,IAAI,CAAC;AAAA,UAChD,SAAS;AAAA,YACP,MAAM,UAAU;AAAA,YAChB,YAAY;AAAA,YACZ;AAAA,YACA,WAAW,KAAK,YAAY,iBAAiB,SAAS;AAAA,YACtD,GAAI,KAAK,YAAY;AAAA,cACnB,SAAS,WAAW,kBAClB,UAAU,WAAW,kBACrB,KAAK;AAAA,cACP;AAAA,YACF,IACI,EAAE,QAAQ,SAAS,WAAW,OAAO,IACrC,CAAC;AAAA,UACP;AAAA,UACA,SAAS,KAAK,YAAY,YAAY,WAAW,aAAa;AAAA,QAChE,CAAC;AAAA,MACH;AAEA,UAAI,UAAU,SAAS,qBAAqB,UAAW;AACvD,YAAM,SAAS,kBAAkB,cAAc,MAAM;AACrD,YAAM,mBAAmB;AAAA,QACvB,cAAc;AAAA,MAChB;AACA,YAAM,oBAAoB;AAAA,QACxB,cAAc;AAAA,MAChB;AACA,YAAM,UAAU,gBAAgB,SAAS,gBAAgB;AACzD,WAAK;AAAA,QACH,KAAK,YAAY,YAAY;AAAA,UAC3B,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,GAAI,SAAS,EAAE,cAAc,OAAO,OAAO,IAAI,CAAC;AAAA,UAChD,SAAS;AAAA,YACP,GAAG,KAAK,YAAY,iBAAiB,SAAS;AAAA,YAC9C,UACE,KAAK,YAAY;AAAA,cACf,UAAU,WAAW,kBAAkB,KAAK;AAAA,cAC5C;AAAA,YACF,KACA,KAAK,YAAY;AAAA,cACf,SAAS,WAAW,kBAClB,UAAU,WAAW,kBACrB,KAAK;AAAA,cACP;AAAA,YACF;AAAA,YACF,GAAI,gBAAgB,EAAE,cAAc,IAAI,CAAC;AAAA,YACzC,SAAS,SAAS,WAAW;AAAA,YAC7B,UACE,KAAK,YAAY,YAAY,WAAW,UAAU,KAAK;AAAA,YACzD,OACE,KAAK,YAAY,YAAY,WAAW,OAAO,KAAK;AAAA,YACtD;AAAA,YACA,GAAI,WAAW,SAAY,EAAE,OAAO,IAAI,CAAC;AAAA,YACzC,GAAI,qBAAqB,SAAY,EAAE,iBAAiB,IAAI,CAAC;AAAA,YAC7D,GAAI,sBAAsB,SACtB;AAAA,cACE,sBAAsB,KAAK;AAAA,gBACzB;AAAA,gBACA,aAAa;AAAA,cACf;AAAA,YACF,IACA,CAAC;AAAA,YACL,GAAI,SAAS,QACT;AAAA,cACE,OAAO,SACH,OAAO;AAAA,gBACL,OAAO,QAAQ,QAAQ,KAAK,EAAE;AAAA,kBAC5B,CAAC,CAAC,KAAK,KAAK,MACT;AAAA,oBACC;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF,EAAE,SAAS,GAAG,KACZ,OAAO,UAAU,YACjB,OAAO,SAAS,KAAK,KACtB;AAAA,oBACC;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF,EAAE,SAAS,GAAG,KACZ,OAAO,UAAU;AAAA,gBACvB;AAAA,cACF,IACA,QAAQ;AAAA,YACd,IACA,CAAC;AAAA,YACL,GAAI,SAAS,eACT,EAAE,cAAc,QAAQ,aAAa,IACrC,CAAC;AAAA,YACL,GAAI,SAAS,WAAW,EAAE,UAAU,QAAQ,SAAS,IAAI,CAAC;AAAA,YAC1D,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,YAC7B,GAAI,SAAS,oBAAoB,CAAC,SAC9B,EAAE,kBAAkB,QAAQ,iBAAiB,IAC7C,CAAC;AAAA,UACP;AAAA,UACA,SAAS,KAAK,YAAY,YAAY,WAAW,iBAAiB;AAAA,QACpE,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,YAA6B;AAAA,MACjC,eAAe,CAAC,mBAAmB;AACjC,eAAO,OAAO,mBAAmB,cAAc;AAAA,MACjD;AAAA,MACA,UAAU,CAAC,MAAM,kBAAkB,CAAC,MAAM;AACxC,YACE,CAAC,eACD,YAAY,SAAS,GAAG,SAAS,iBACjC,UAAU,SAAS;AAEnB;AACF,cAAM,OACJ,SAAS,8BACL,iBACA,SAAS,iCACP,mBACA,SAAS,8BACP,gBACA,SAAS,6BACP,mBACA,SAAS,iCACP,uBACA;AACd,YAAI,CAAC,KAAM;AACX,cAAM,UACJ,SAAS,mBACL;AAAA,UACE,GAAG,OAAO;AAAA,YACR,OAAO,QAAQ,eAAe,EAAE;AAAA,cAC9B,CAAC,CAAC,GAAG,MAAM,QAAQ;AAAA,YACrB;AAAA,UACF;AAAA,UACA,GAAI,KAAK,YAAY;AAAA,YACnB,UAAU,WAAW,kBAAkB,KAAK;AAAA,YAC5C;AAAA,UACF,KAAK,UAAU,kBACX,EAAE,MAAM,gBAAgB,KAAK,IAC7B,CAAC;AAAA,QACP,IACA;AACN,aAAK;AAAA,UACH,KAAK,YAAY,YAAY;AAAA,YAC3B;AAAA,YACA;AAAA,YACA;AAAA,YACA,GAAI,SAAS,EAAE,cAAc,OAAO,OAAO,IAAI,CAAC;AAAA,YAChD;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA;AAAA,MACA,MAAM,CAAC,OAAO,YAAY;AACxB,YAAI,MAAO;AACX,gBAAI,6CAA6B,KAAK,GAAG;AACvC,sBAAY;AACZ,iBAAO,OAAO,mBAAmB;AAAA,YAC/B,uBAAuB;AAAA,YACvB,oBAAoB;AAAA,UACtB,CAAC;AACD,cAAI,OAAO;AACX;AAAA,QACF;AACA,iBAAS;AACT,cAAM,eAAe,KAAK,YAAY,eAAe,OAAO;AAAA,UAC1D,aAAa,EAAE,GAAG,aAAa,GAAG,KAAK;AAAA,UACvC,SAAS;AAAA,UACT,UAAU;AAAA,UACV,WAAW;AAAA,QACb,CAAC;AACD,YAAI,aAAa;AACf,eAAK;AAAA,YACH,KAAK,YAAY,YAAY;AAAA,cAC3B,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA,GAAI,SAAS,EAAE,cAAc,OAAO,OAAO,IAAI,CAAC;AAAA,cAChD,SAAS;AAAA,gBACP,MAAM,UAAU;AAAA,gBAChB,OAAO;AAAA,gBACP,SAAS;AAAA,gBACT,UAAU;AAAA,gBACV,YAAY,KAAK,IAAI,IAAI;AAAA,cAC3B;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AACA,YAAI,OAAO;AAAA,MACb;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,GAAI,cACA,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,UAAU,MAAM,YAAY,EAAE,IACzD,CAAC;AAAA,IACP;AAAA,EACF;AAEA,SAAO;AAAA,IACL,WAAW,CAAC,cAAc,WAAW,SAAS,EAAE;AAAA,IAChD,UAAU,OAAO,WAAW,OAAO;AACjC,YAAM,UAAU,WAAW,SAAS;AACpC,YAAM,MAAM,YAAqD;AAC/D,YAAI;AACF,gBAAM,SAAS,MAAM,GAAG,QAAQ,IAAI;AACpC,kBAAQ,KAAK,MAAM;AACnB,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,cAAI;AACF,oBAAQ,KAAK,OAAO,KAAK;AAAA,UAC3B,QAAQ;AAAA,UAER;AACA,gBAAM;AAAA,QACR;AAAA,MACF;AACA,aAAO,QAAQ,SAAS,YAAY,IAAI,QAAQ,QAAQ,GAAG,IAAI,IAAI;AAAA,IACrE;AAAA,IACA,kBAAkB,MAAM;AACtB,YAAM,SAAS,YAAY,SAAS;AACpC,aAAO,SACH,EAAE,SAAS,OAAO,SAAS,QAAQ,OAAO,OAAO,IACjD;AAAA,IACN;AAAA,IACA,aAAa,CAAC,OAAO,UAAU,CAAC,MAAM;AACpC,UAAI;AACF,cAAM,SAAS,YAAY,SAAS;AACpC,cAAM,UAAU,KAAK,YAAY,eAAe,OAAO;AAAA,UACrD,aAAa;AAAA,YACX,GAAG,QAAQ;AAAA,YACX,GAAI,SACA,EAAE,SAAS,OAAO,SAAS,QAAQ,OAAO,OAAO,IACjD,CAAC;AAAA,YACL,GAAG,QAAQ;AAAA,UACb;AAAA,UACA,SAAS;AAAA,UACT,UAAU,QAAQ,aAAa,YAAY,YAAY;AAAA,UACvD,WAAW,QAAQ,aAAa;AAAA,UAChC,SAAS,QAAQ;AAAA,QACnB,CAAC;AACD,YAAI,CAAC;AACH,iBAAO,OAAO,QAAQ,iBAAiB,WACnC,QAAQ,eACR;AACN,aAAK;AAAA,UACH,KAAK,YAAY,YAAY;AAAA,YAC3B,MAAM;AAAA,YACN,aAAa,OAAO;AAAA,YACpB,MAAM;AAAA,YACN,SAAS;AAAA,cACP,SAAS;AAAA,cACT,UAAU,QAAQ,aAAa,YAAY,YAAY;AAAA,cACvD,OAAO;AAAA,YACT;AAAA,YACA,SAAS,KAAK,YAAY;AAAA,cACxB;AAAA,gBACE,GAAI,QAAQ,WAAW,EAAE,UAAU,QAAQ,SAAS,IAAI,CAAC;AAAA,gBACzD,GAAI,QAAQ,OAAO,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,cAC/C;AAAA,cACA,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACH;AACA,eAAO,OAAO,QAAQ,iBAAiB,WACnC,QAAQ,eACR;AAAA,MACN,QAAQ;AAEN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,oBAAoB,CAAC,UACzB,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,KAAK,SAAS,IAC5D,QACA;;;AP9YN,IAAM,4BAA4B;AAClC,IAAM,yBAAyB;AAE/B,IAAM,WAAW,MAAc;AAC7B,MAAI;AACF,eAAO,gCAAW;AAAA,EACpB,QAAQ;AACN,WAAO,GAAG,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA,EAC7D;AACF;AAEA,IAAM,cAAc,CAAC,UAAkB,SACrC,GAAG,SAAS,QAAQ,OAAO,EAAE,CAAC,GAAG,IAAI;AAMhC,SAAS,6BACd,SACwB;AACxB,QAAM,YAAY,QAAQ,SAAS,WAAW;AAC9C,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,OAAO,OAAO,MAAc,SAAqC;AACrE,UAAM,WAAW,MAAM,UAAU,YAAY,QAAQ,UAAU,IAAI,GAAG;AAAA,MACpE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,eAAe,UAAU,QAAQ,MAAM;AAAA,QACvC,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AACD,QAAI,CAAC,SAAS,GAAI,OAAM,IAAI,mBAAmB,SAAS,MAAM;AAC9D,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,eAAe;AAAA,IAC9B,cAAc,QAAQ,gBAAgB;AAAA,IACtC,iBAAiB,QAAQ,mBAAmB;AAAA,IAC5C,MAAM,OAAO,WAAW;AACtB,YAAM,KAAK,8BAA8B,EAAE,OAAO,CAAC;AAAA,IACrD;AAAA,EACF,CAAC;AACD,QAAM,cAAc,yBAAyB,OAAO;AACpD,QAAM,cAAc,kBAAkB;AAAA,IACpC,aAAa,QAAQ;AAAA,IACrB,SAAS,QAAQ;AAAA,IACjB,GAAI,QAAQ,WAAW,EAAE,UAAU,QAAQ,SAAS,IAAI,CAAC;AAAA,IACzD,GAAI,QAAQ,OAAO,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,IAC7C;AAAA,IACA,mBAAmB,YAAY;AAAA,IAC/B,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,EAClD,CAAC;AACD,QAAM,WAAW,uBAAuB;AAAA,IACtC,QAAQ,OAAO,aAAa;AAC1B,YAAM,WAAW,MAAM;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AACA,aAAQ,MAAM,SAAS,KAAK;AAAA,IAC9B;AAAA,EACF,CAAC;AACD,QAAM,QAAQ,mBAAmB;AAAA,IAC/B,GAAI,QAAQ,iBACR,EAAE,gBAAgB,QAAQ,eAAe,IACzC,CAAC;AAAA,IACL;AAAA,IACA,SAAS,SAAS;AAAA,IAClB;AAAA,EACF,CAAC;AACD,QAAM,OAAO,OAAO,WAAkD;AACpE,eAAW,SAAS,OAAQ,UAAS,QAAQ,KAAK;AAAA,EACpD;AAEA,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,MACR,wBAAwB,SAAS;AAAA,MACjC;AAAA,MACA,uBAAuB,SAAS;AAAA,IAClC;AAAA,IACA,aAAa,QAAQ;AAAA,IACrB,SAAS,QAAQ;AAAA,IACjB,GAAI,QAAQ,iBACR,EAAE,gBAAgB,QAAQ,eAAe,IACzC,CAAC;AAAA,IACL,GAAI,QAAQ,WAAW,EAAE,UAAU,QAAQ,SAAS,IAAI,CAAC;AAAA,IACzD,GAAI,QAAQ,OAAO,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,IAC7C,OAAO,YAAY;AACjB,YAAM,SAAS,MAAM;AACrB,YAAM,YAAY,MAAM;AAAA,IAC1B;AAAA,IACA,kBAAkB,YAAY;AAAA,IAC9B,4BAA4B,YAAY;AAAA,IACxC,2BAA2B,YAAY;AAAA,IACvC,sBAAsB,SAAS;AAAA,IAC/B,kCAAkC,SAAS;AAAA,EAC7C;AACF;","names":["import_node_crypto","result","import_errors","import_internal","import_telemetry_contracts","args","import_errors","import_telemetry_contracts"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/adapter.ts","../src/usage.ts","../package.json","../src/delivery.ts","../src/diagnostics.ts","../src/event-mapper.ts","../src/topology.ts","../src/trace.ts"],"sourcesContent":["export { createKortyxTelemetryAdapter } from \"./adapter\";\nexport type {\n CreateKortyxTelemetryAdapterOptions,\n KortyxTelemetryAdapter,\n} from \"./types\";\n","import { randomUUID } from \"node:crypto\";\nimport type {\n EnsureWorkflowTopologyResponse,\n KortyxTelemetryEvent,\n} from \"@kortyx/hooks\";\nimport { createDelivery, TelemetryHttpError } from \"./delivery\";\nimport { createDiagnosticDelivery } from \"./diagnostics\";\nimport { createEventMapper } from \"./event-mapper\";\nimport { createTopologyResolver } from \"./topology\";\nimport { createTraceAdapter } from \"./trace\";\nimport type {\n CreateKortyxTelemetryAdapterOptions,\n KortyxTelemetryAdapter,\n} from \"./types\";\n\nexport type {\n CreateKortyxTelemetryAdapterOptions,\n KortyxTelemetryAdapter,\n} from \"./types\";\n\nconst DEFAULT_FLUSH_INTERVAL_MS = 250;\nconst DEFAULT_MAX_QUEUE_SIZE = 1_000;\n\nconst createId = (): string => {\n try {\n return randomUUID();\n } catch {\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n};\n\nconst endpointFor = (endpoint: string, path: string): string =>\n `${endpoint.replace(/\\/$/, \"\")}${path}`;\n\n/**\n * Creates the optional Kortyx Studio HTTP adapter. Execution paths only enqueue\n * telemetry; delivery remains best-effort and cannot fail a workflow.\n */\nexport function createKortyxTelemetryAdapter(\n options: CreateKortyxTelemetryAdapterOptions,\n): KortyxTelemetryAdapter {\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (!fetchImpl) {\n throw new Error(\n \"createKortyxTelemetryAdapter requires a fetch implementation.\",\n );\n }\n\n const send = async (path: string, body: unknown): Promise<Response> => {\n const response = await fetchImpl(endpointFor(options.endpoint, path), {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${options.apiKey}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n if (!response.ok) throw new TelemetryHttpError(response.status);\n return response;\n };\n\n const delivery = createDelivery({\n maxQueueSize: options.maxQueueSize ?? DEFAULT_MAX_QUEUE_SIZE,\n flushIntervalMs: options.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS,\n send: async (events) => {\n await send(\"/v1/telemetry/events:batch\", { events });\n },\n });\n const diagnostics = createDiagnosticDelivery(options);\n const eventMapper = createEventMapper({\n environment: options.environment,\n service: options.service,\n ...(options.metadata ? { metadata: options.metadata } : {}),\n ...(options.tags ? { tags: options.tags } : {}),\n createId,\n captureDiagnostic: diagnostics.capture,\n ...(options.error ? { error: options.error } : {}),\n });\n const topology = createTopologyResolver({\n ensure: async (snapshot) => {\n const response = await send(\n \"/v1/telemetry/workflow-revisions:ensure\",\n snapshot,\n );\n return (await response.json()) as EnsureWorkflowTopologyResponse;\n },\n });\n const trace = createTraceAdapter({\n ...(options.captureContent\n ? { captureContent: options.captureContent }\n : {}),\n createId,\n enqueue: delivery.enqueue,\n eventMapper,\n });\n const emit = async (events: KortyxTelemetryEvent[]): Promise<void> => {\n for (const event of events) delivery.enqueue(event);\n };\n\n return {\n trace,\n reporter: {\n ensureWorkflowTopology: topology.ensureWorkflowTopology,\n emit,\n getWorkflowRevisionId: topology.getWorkflowRevisionId,\n },\n environment: options.environment,\n service: options.service,\n ...(options.captureContent\n ? { captureContent: options.captureContent }\n : {}),\n ...(options.metadata ? { metadata: options.metadata } : {}),\n ...(options.tags ? { tags: options.tags } : {}),\n flush: async () => {\n await delivery.flush();\n await diagnostics.flush();\n },\n flushDiagnostics: diagnostics.flushWithDeadline,\n getDiagnosticDeliveryState: diagnostics.getState,\n getDroppedDiagnosticCount: diagnostics.getDroppedCount,\n getDroppedEventCount: delivery.getDroppedEventCount,\n getPermanentDeliveryFailureCount: delivery.getPermanentDeliveryFailureCount,\n };\n}\n","import type { UsageTelemetry } from \"@kortyx/usage-telemetry\";\nimport { getUsageTelemetry } from \"@kortyx/usage-telemetry/node\";\nimport packageJson from \"../package.json\";\n\nconst client = () => getUsageTelemetry(\"exporter\", packageJson.version);\nexport const usage: Pick<\n UsageTelemetry,\n \"start\" | \"feature\" | \"measure\" | \"flush\"\n> = {\n start: (...args) => client().start(...args),\n feature: (...args) => client().feature(...args),\n measure: (...args) => client().measure(...args),\n flush: () => client().flush(),\n};\n","{\n \"name\": \"@kortyx/telemetry\",\n \"version\": \"0.16.0\",\n \"private\": false,\n \"description\": \"Kortyx Studio telemetry HTTP adapter.\",\n \"license\": \"Apache-2.0\",\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n },\n \"files\": [\n \"dist/**\",\n \"README.md\",\n \"CHANGELOG.md\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsc --watch\",\n \"lint\": \"biome check src test\",\n \"test\": \"vitest run && pnpm -s type-check\",\n \"type-check\": \"tsc --noEmit -p tsconfig.test.json\"\n },\n \"dependencies\": {\n \"@kortyx/hooks\": \"workspace:*\",\n \"@kortyx/telemetry-contracts\": \"workspace:*\",\n \"@kortyx/core\": \"workspace:*\",\n \"@kortyx/usage-telemetry\": \"workspace:*\"\n },\n \"devDependencies\": {\n \"tsup\": \"catalog:\",\n \"turbo\": \"catalog:\",\n \"typescript\": \"catalog:\",\n \"vitest\": \"catalog:\"\n },\n \"sideEffects\": false,\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/kortyx-io/kortyx.git\",\n \"directory\": \"packages/telemetry\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import type { KortyxTelemetryEvent } from \"@kortyx/hooks\";\nimport { usage } from \"./usage\";\n\nexport class TelemetryHttpError extends Error {\n constructor(readonly status: number) {\n super(`Kortyx telemetry request failed (${status}).`);\n }\n}\n\nexport const createDelivery = (args: {\n maxQueueSize: number;\n flushIntervalMs: number;\n send: (events: KortyxTelemetryEvent[]) => Promise<void>;\n}) => {\n const queue: KortyxTelemetryEvent[] = [];\n let dropped = 0;\n let permanentFailures = 0;\n let retryAttempt = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let inFlight: Promise<{ retryDelay: number | null }> | undefined;\n const sendBatch = async (events: KortyxTelemetryEvent[]): Promise<void> => {\n try {\n await usage.measure(\"sdk.export\", () => args.send(events), {\n phase: \"delivery\",\n });\n } catch (error) {\n const status =\n error instanceof TelemetryHttpError ? error.status : undefined;\n // One invalid event (or an oversized request) must not discard the other\n // lifecycle facts in the same flush. Event IDs make a later retry safe.\n if (\n events.length > 1 &&\n (status === 400 || status === 413 || status === 422)\n ) {\n const middle = Math.floor(events.length / 2);\n await sendBatch(events.slice(0, middle));\n await sendBatch(events.slice(middle));\n return;\n }\n if (\n events.length === 1 &&\n status !== undefined &&\n status !== 429 &&\n status < 500\n ) {\n permanentFailures += 1;\n return;\n }\n throw error;\n }\n };\n const schedule = (delay = args.flushIntervalMs) => {\n if (timer || inFlight || queue.length === 0) return;\n timer = setTimeout(() => {\n timer = undefined;\n void flush();\n }, delay);\n if (typeof timer === \"object\" && \"unref\" in timer) timer.unref?.();\n };\n const flush = async (): Promise<void> => {\n while (true) {\n if (inFlight) {\n const result = await inFlight;\n if (result.retryDelay !== null) return;\n continue;\n }\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n if (queue.length === 0) return;\n const events = queue.splice(0);\n const current = (async (): Promise<{ retryDelay: number | null }> => {\n try {\n await sendBatch(events);\n retryAttempt = 0;\n return { retryDelay: null };\n } catch (error) {\n const status =\n error instanceof TelemetryHttpError ? error.status : undefined;\n if (status !== undefined && status !== 429 && status < 500) {\n permanentFailures += events.length;\n return { retryDelay: null };\n }\n const overflow = Math.max(\n 0,\n queue.length + events.length - args.maxQueueSize,\n );\n if (overflow) {\n dropped += overflow;\n events.splice(0, overflow);\n }\n queue.unshift(...events);\n retryAttempt += 1;\n const backoff = Math.min(30_000, 250 * 2 ** (retryAttempt - 1));\n return {\n retryDelay: Math.floor(backoff * (0.5 + Math.random() * 0.5)),\n };\n }\n })();\n inFlight = current;\n const result = await current;\n if (inFlight === current) inFlight = undefined;\n if (result.retryDelay !== null) {\n schedule(result.retryDelay);\n return;\n }\n }\n };\n return {\n enqueue: (event: KortyxTelemetryEvent) => {\n if (queue.length >= args.maxQueueSize) {\n queue.shift();\n dropped += 1;\n }\n queue.push(event);\n schedule();\n },\n flush,\n getDroppedEventCount: () => dropped,\n getPermanentDeliveryFailureCount: () => permanentFailures,\n };\n};\n","import { createHash, randomUUID, scryptSync } from \"node:crypto\";\nimport {\n mkdir,\n readdir,\n readFile,\n rename,\n stat,\n unlink,\n writeFile,\n} from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { isControlFlowError } from \"@kortyx/core/errors\";\nimport type { KortyxTraceErrorProjection } from \"@kortyx/hooks\";\nimport { captureDiagnosticContent } from \"@kortyx/hooks/internal\";\nimport {\n DIAGNOSTIC_LIMITS,\n DiagnosticContentSchema,\n DiagnosticCorrelationSchema,\n type DiagnosticManifest,\n DiagnosticManifestSchema,\n summarizeDiagnostic,\n} from \"@kortyx/telemetry-contracts\";\nimport type { CreateKortyxTelemetryAdapterOptions } from \"./types\";\n\nexport type DiagnosticDeliveryState =\n | \"pending\"\n | \"available\"\n | \"rejected\"\n | \"dropped\"\n | \"spool_failed\";\nexport type DiagnosticCaptureContext = {\n correlation?: DiagnosticManifest[\"correlation\"] | undefined;\n handled: boolean;\n severity: \"warning\" | \"error\";\n mechanism: DiagnosticManifest[\"mechanism\"];\n project?: KortyxTraceErrorProjection | undefined;\n};\ntype Entry = { manifest: DiagnosticManifest; content: string };\n\n/** Independent diagnostic transport. It never changes application execution. */\nexport function createDiagnosticDelivery(\n options: CreateKortyxTelemetryAdapterOptions,\n) {\n const enabled = options.diagnostics?.enabled !== false;\n const queue = new Map<string, Entry>();\n const states = new Map<string, DiagnosticDeliveryState>();\n type CaptureResult = {\n diagnosticId?: string;\n diagnosticCapture: string;\n diagnosticDelivery?: DiagnosticDeliveryState | undefined;\n details: Record<string, unknown> | null;\n };\n const captured = new WeakMap<object, Map<string, CaptureResult>>();\n let queuedBytes = 0;\n let dropped = 0;\n let retryAt = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let inFlight: Promise<void> | undefined;\n const writes = new Set<Promise<void>>();\n const spool = options.diagnostics?.spoolDirectory\n ? join(\n options.diagnostics.spoolDirectory,\n // A stable credential-scoped namespace without storing the API key or\n // a fast credential hash on disk. Only derived when spooling is enabled.\n scryptSync(\n options.apiKey,\n JSON.stringify([options.endpoint, options.environment]),\n 24,\n ).toString(\"hex\"),\n )\n : undefined;\n const state = (id: string, value: DiagnosticDeliveryState) => {\n states.set(id, value);\n if (states.size > 1000) states.delete(states.keys().next().value as string);\n };\n const maxBytes = options.diagnostics?.maxQueueBytes ?? 16 * 1024 * 1024;\n const persist = async (entry: Entry) => {\n if (!spool) return;\n await mkdir(spool, { recursive: true, mode: 0o700 });\n const target = join(spool, `${entry.manifest.diagnosticId}.json`);\n const temporary = `${target}.${randomUUID()}.tmp`;\n await writeFile(temporary, JSON.stringify(entry), { mode: 0o600 });\n await rename(temporary, target);\n };\n const schedule = () => {\n if (!enabled || timer || inFlight || !queue.size) return;\n timer = setTimeout(() => {\n timer = undefined;\n void flush();\n }, options.flushIntervalMs ?? 250);\n timer.unref?.();\n };\n const restored = (async () => {\n if (!enabled || !spool) return;\n try {\n await mkdir(spool, { recursive: true, mode: 0o700 });\n for (const filename of (await readdir(spool)).filter((name) =>\n /^[a-f0-9-]{36}\\.json$/.test(name),\n )) {\n try {\n if (\n (await stat(join(spool, filename))).size >\n DIAGNOSTIC_LIMITS.bytes + 64 * 1024\n )\n throw new Error(\"Spool file exceeds budget\");\n const value = JSON.parse(\n await readFile(join(spool, filename), \"utf8\"),\n ) as Entry;\n const manifest = DiagnosticManifestSchema.parse(value.manifest);\n const bytes = Buffer.byteLength(value.content);\n if (\n bytes !== manifest.byteLength ||\n createHash(\"sha256\").update(value.content).digest(\"hex\") !==\n manifest.checksum\n )\n throw new Error(\"Invalid spool content\");\n DiagnosticContentSchema.parse(JSON.parse(value.content));\n if (queuedBytes + bytes > maxBytes) {\n state(manifest.diagnosticId, \"dropped\");\n dropped++;\n await unlink(join(spool, filename));\n continue;\n }\n if (!queue.has(manifest.diagnosticId)) {\n queue.set(manifest.diagnosticId, {\n manifest,\n content: value.content,\n });\n queuedBytes += bytes;\n state(manifest.diagnosticId, \"pending\");\n }\n } catch {\n dropped++;\n await unlink(join(spool, filename)).catch(() => undefined);\n }\n }\n schedule();\n } catch {\n dropped++;\n }\n })();\n const send = async (path: string, body: unknown) => {\n const response = await (options.fetch ?? globalThis.fetch)(\n `${options.endpoint.replace(/\\/$/, \"\")}/v1/telemetry/diagnostics${path}?env=${encodeURIComponent(options.environment)}`,\n {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${options.apiKey}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(15_000),\n },\n );\n if (!response.ok) {\n const error = new Error(\"Diagnostic delivery failed.\") as Error & {\n status: number;\n };\n error.status = response.status;\n if (response.status === 429) {\n const hint = response.headers.get(\"retry-after\");\n const seconds = Number(hint);\n const delay =\n hint && Number.isFinite(seconds)\n ? seconds * 1000\n : hint\n ? Date.parse(hint) - Date.now()\n : 5000;\n retryAt =\n Date.now() +\n Math.min(\n 60_000,\n Math.max(5000, Number.isFinite(delay) ? delay : 5000),\n );\n }\n throw error;\n }\n return response;\n };\n const flush = async () => {\n await restored;\n await Promise.all([...writes]);\n if (inFlight) {\n await inFlight;\n return;\n }\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n const work = async () => {\n if (Date.now() < retryAt) return;\n for (const [id, entry] of [...queue]) {\n try {\n await send(\"\", entry.manifest);\n const bytes = Buffer.from(entry.content);\n for (let index = 0; index < entry.manifest.partCount; index++)\n await send(`/${id}/parts`, {\n index,\n data: bytes\n .subarray(\n index * DIAGNOSTIC_LIMITS.partBytes,\n (index + 1) * DIAGNOSTIC_LIMITS.partBytes,\n )\n .toString(\"base64\"),\n });\n const completed = await send(`/${id}/complete`, {});\n const acknowledgement = (await completed.json()) as {\n state?: string;\n };\n if (acknowledgement.state !== \"available\") {\n const error = new Error(\n \"Diagnostic integrity verification failed.\",\n ) as Error & { status: number };\n error.status = 422;\n throw error;\n }\n state(id, \"available\");\n queue.delete(id);\n queuedBytes -= entry.manifest.byteLength;\n if (spool)\n await unlink(join(spool, `${id}.json`)).catch(() => undefined);\n } catch (error) {\n const status = (error as { status?: number }).status;\n if (status && status < 500 && status !== 429) {\n state(id, \"rejected\");\n queue.delete(id);\n queuedBytes -= entry.manifest.byteLength;\n dropped++;\n if (spool)\n await unlink(join(spool, `${id}.json`)).catch(() => undefined);\n }\n // Transient failures retain redacted bytes for a later flush or restart.\n if (status === 429) break;\n }\n }\n };\n inFlight = work();\n try {\n await inFlight;\n } finally {\n inFlight = undefined;\n }\n if (queue.size) {\n timer = setTimeout(\n () => {\n timer = undefined;\n void flush();\n },\n Math.max(5000, retryAt - Date.now()),\n );\n timer.unref?.();\n }\n };\n const capture = (error: unknown, context: DiagnosticCaptureContext) => {\n if (!enabled || isControlFlowError(error)) return undefined;\n const scope = JSON.stringify([\n context.correlation?.runId,\n context.correlation?.invocationId,\n context.correlation?.branchId,\n context.correlation?.attemptId,\n ]);\n const object =\n error && typeof error === \"object\" ? (error as object) : undefined;\n const existing = object ? captured.get(object)?.get(scope) : undefined;\n if (existing)\n return {\n ...existing,\n diagnosticDelivery: existing.diagnosticId\n ? (states.get(existing.diagnosticId) ?? \"pending\")\n : undefined,\n };\n const content = captureDiagnosticContent(\n error,\n context.project ?? options.error,\n );\n if (!content) return { diagnosticCapture: \"suppressed\", details: null };\n const serialized = JSON.stringify(content);\n const diagnosticId = randomUUID();\n const manifest = DiagnosticManifestSchema.parse({\n schemaVersion: 1,\n diagnosticId,\n occurrenceId: randomUUID(),\n occurredAt: new Date().toISOString(),\n environment: options.environment,\n service: options.service,\n correlation: DiagnosticCorrelationSchema.parse(\n Object.fromEntries(\n Object.entries(context.correlation ?? {}).filter(\n ([key]) => key !== \"topologyHash\",\n ),\n ),\n ),\n handled: context.handled,\n severity: context.severity,\n mechanism: context.mechanism,\n summary: {\n type: String(content.data.type ?? \"Error\").slice(0, 256),\n message: summarizeDiagnostic(content.data).message,\n },\n captureStatus: content.capture.status,\n byteLength: Buffer.byteLength(serialized),\n checksum: createHash(\"sha256\").update(serialized).digest(\"hex\"),\n partCount: Math.ceil(\n Buffer.byteLength(serialized) / DIAGNOSTIC_LIMITS.partBytes,\n ),\n });\n if (queuedBytes + manifest.byteLength > maxBytes) {\n state(diagnosticId, \"dropped\");\n dropped++;\n } else {\n const entry = { manifest, content: serialized };\n queue.set(diagnosticId, entry);\n queuedBytes += manifest.byteLength;\n state(diagnosticId, \"pending\");\n const writing = persist(entry)\n .catch(() => {\n state(diagnosticId, \"spool_failed\");\n })\n .finally(() => {\n writes.delete(writing);\n });\n writes.add(writing);\n schedule();\n }\n const result = {\n diagnosticId,\n diagnosticCapture: content.capture.status,\n diagnosticDelivery: states.get(diagnosticId),\n details: summarizeDiagnostic(content.data),\n };\n if (object) {\n const byScope = captured.get(object) ?? new Map<string, CaptureResult>();\n byScope.set(scope, result);\n captured.set(object, byScope);\n }\n return result;\n };\n const flushWithDeadline = async (timeoutMs = 5000) => {\n let deadline: ReturnType<typeof setTimeout> | undefined;\n let timedOut = false;\n await Promise.race([\n flush(),\n new Promise<void>((resolve) => {\n deadline = setTimeout(\n () => {\n timedOut = true;\n resolve();\n },\n Math.max(0, timeoutMs),\n );\n }),\n ]);\n if (deadline) clearTimeout(deadline);\n return {\n timedOut,\n pending: queue.size,\n pendingBytes: queuedBytes,\n dropped,\n states: Object.fromEntries(states),\n };\n };\n return {\n capture,\n flush,\n flushWithDeadline,\n getState: (id: string) => states.get(id),\n getDroppedCount: () => dropped,\n };\n}\n","import {\n errorProperty,\n isControlFlowError,\n serializeFailure,\n} from \"@kortyx/core/errors\";\nimport type {\n KortyxTelemetryConfig,\n KortyxTelemetryEvent,\n KortyxTelemetryEventType,\n ReasonTraceAttributes,\n ReasonTraceSpanStartArgs,\n} from \"@kortyx/hooks\";\nimport {\n exceptionDiagnostics,\n safeTelemetryMetadata,\n} from \"@kortyx/hooks/internal\";\nimport { summarizeDiagnostic } from \"@kortyx/telemetry-contracts\";\nimport type {\n createDiagnosticDelivery,\n DiagnosticCaptureContext,\n} from \"./diagnostics\";\nimport type { ActiveSpan, SpanContext } from \"./types\";\n\nconst stringValue = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.length > 0 ? value : undefined;\n\nconst shouldCapture = (\n value: KortyxTelemetryConfig[\"captureContent\"] | undefined,\n side: \"input\" | \"output\",\n): boolean => {\n if (value === true) return true;\n return Boolean(value && typeof value === \"object\" && value[side]);\n};\n\nconst asErrorPayload = (\n error: unknown,\n project?: import(\"@kortyx/hooks\").KortyxTraceErrorProjection,\n captured?: ReturnType<ReturnType<typeof createDiagnosticDelivery>[\"capture\"]>,\n): Record<string, unknown> => {\n if (isControlFlowError(error))\n return {\n name: errorProperty(error, \"name\"),\n code: errorProperty(error, \"code\"),\n message: \"Execution paused or cancelled.\",\n controlFlow: true,\n };\n const failure = serializeFailure(error);\n const diagnostic = captured\n ? captured.details\n : exceptionDiagnostics(error, project);\n const summary = diagnostic ? summarizeDiagnostic(diagnostic) : null;\n const reference = captured\n ? Object.fromEntries(\n Object.entries(captured).filter(([key]) => key !== \"details\"),\n )\n : {};\n return {\n ...failure,\n name: summary?.type ?? \"Error\",\n message: summary?.message ?? failure.message,\n ...(summary?.stack ? { stack: summary.stack } : {}),\n ...(summary?.cause ? { cause: summary.cause } : {}),\n ...reference,\n };\n};\n\nconst correlationFrom = (\n attributes: ReasonTraceAttributes | undefined,\n active: ActiveSpan | undefined,\n): KortyxTelemetryEvent[\"correlation\"] | undefined => {\n const source = attributes ?? {};\n const runId = stringValue(source.runId) ?? active?.correlation.runId;\n const workflowId =\n stringValue(source.workflowId) ?? active?.correlation.workflowId;\n if (!runId || !workflowId) return undefined;\n\n const sameWorkflow = workflowId === active?.correlation.workflowId;\n const sessionId =\n stringValue(source.sessionId) ?? active?.correlation.sessionId;\n const workflowRevisionId =\n stringValue(source.workflowRevisionId) ??\n (sameWorkflow ? active?.correlation.workflowRevisionId : undefined);\n const topologyHash =\n stringValue(source.topologyHash) ??\n (sameWorkflow ? active?.correlation.topologyHash : undefined);\n const nodeId =\n stringValue(source.nodeId) ??\n (sameWorkflow ? active?.correlation.nodeId : undefined);\n return {\n runId,\n workflowId,\n ...Object.fromEntries(\n [\"invocationId\", \"parentInvocationId\", \"branchId\"].flatMap((key) => {\n const value =\n stringValue(source[key]) ??\n active?.correlation[key as \"invocationId\"];\n return value ? [[key, value]] : [];\n }),\n ),\n ...(sessionId ? { sessionId } : {}),\n ...(workflowRevisionId ? { workflowRevisionId } : {}),\n ...(topologyHash ? { topologyHash } : {}),\n ...(nodeId ? { nodeId } : {}),\n };\n};\n\nexport const createEventMapper = (args: {\n environment: string;\n service: KortyxTelemetryEvent[\"service\"];\n metadata?: Record<string, unknown> | undefined;\n tags?: string[] | undefined;\n createId: () => string;\n error?: import(\"@kortyx/hooks\").KortyxTraceErrorProjection;\n captureDiagnostic?: ReturnType<typeof createDiagnosticDelivery>[\"capture\"];\n}) => {\n const createEvent = (input: {\n type: KortyxTelemetryEventType;\n correlation: KortyxTelemetryEvent[\"correlation\"];\n span?: SpanContext | undefined;\n parentSpanId?: string | undefined;\n payload: Record<string, unknown>;\n context?: KortyxTelemetryEvent[\"context\"] | undefined;\n }): KortyxTelemetryEvent => ({\n schemaVersion: 1,\n eventId: args.createId(),\n occurredAt: new Date().toISOString(),\n environment: args.environment,\n service: args.service,\n correlation: {\n ...input.correlation,\n ...(input.span\n ? { traceId: input.span.traceId, spanId: input.span.spanId }\n : {}),\n ...(input.parentSpanId ? { parentSpanId: input.parentSpanId } : {}),\n },\n ...(input.context || args.metadata || args.tags\n ? {\n context: {\n ...(args.tags ? { tags: args.tags } : {}),\n ...(args.metadata\n ? { metadata: safeTelemetryMetadata(args.metadata) }\n : {}),\n ...(input.context ?? {}),\n },\n }\n : {}),\n type: input.type,\n payload: {\n ...input.payload,\n ...(input.correlation.invocationId\n ? { invocationId: input.correlation.invocationId }\n : {}),\n ...(input.correlation.parentInvocationId\n ? { parentInvocationId: input.correlation.parentInvocationId }\n : {}),\n ...(input.correlation.branchId\n ? { branchId: input.correlation.branchId }\n : {}),\n },\n });\n\n const spanContext = (\n telemetry: ReasonTraceSpanStartArgs[\"telemetry\"] | undefined,\n attributes: ReasonTraceAttributes,\n ): KortyxTelemetryEvent[\"context\"] | undefined => {\n const tags = [...(args.tags ?? []), ...(telemetry?.tags ?? [])];\n const metadata = safeTelemetryMetadata({\n ...(args.metadata ?? {}),\n ...(telemetry?.metadata ?? {}),\n });\n const userId = stringValue(attributes.userId);\n const tenantId = stringValue(attributes.tenantId);\n return userId || tenantId || tags.length || Object.keys(metadata).length\n ? {\n ...(userId ? { userId } : {}),\n ...(tenantId ? { tenantId } : {}),\n ...(tags.length ? { tags } : {}),\n ...(Object.keys(metadata).length ? { metadata } : {}),\n }\n : undefined;\n };\n\n const telemetryPayload = (\n telemetry: ReasonTraceSpanStartArgs[\"telemetry\"] | undefined,\n ): Record<string, unknown> => ({\n ...(telemetry?.operation ? { operation: telemetry.operation } : {}),\n ...(telemetry?.tags?.length ? { tags: telemetry.tags } : {}),\n ...(telemetry?.metadata\n ? { metadata: safeTelemetryMetadata(telemetry.metadata) }\n : {}),\n ...(telemetry?.prompt\n ? {\n prompt: {\n ...(telemetry.prompt.name ? { name: telemetry.prompt.name } : {}),\n ...(telemetry.prompt.version !== undefined\n ? { version: telemetry.prompt.version }\n : {}),\n ...(telemetry.prompt.type ? { type: telemetry.prompt.type } : {}),\n ...(telemetry.prompt.metadata &&\n typeof telemetry.prompt.metadata === \"object\" &&\n !Array.isArray(telemetry.prompt.metadata)\n ? {\n metadata: safeTelemetryMetadata(\n telemetry.prompt.metadata as Record<string, unknown>,\n ),\n }\n : {}),\n ...(telemetry.prompt.source\n ? { source: telemetry.prompt.source }\n : {}),\n },\n }\n : {}),\n });\n\n return {\n asErrorPayload: (error: unknown, context?: DiagnosticCaptureContext) =>\n asErrorPayload(\n error,\n context?.project ?? args.error,\n context ? args.captureDiagnostic?.(error, context) : undefined,\n ),\n correlationFrom,\n createEvent,\n shouldCapture,\n spanContext,\n stringValue,\n telemetryPayload,\n };\n};\n","import type {\n EnsureWorkflowTopologyRequest,\n EnsureWorkflowTopologyResponse,\n} from \"@kortyx/hooks\";\n\ntype TopologyKey = {\n environment: string;\n workflowId: string;\n topologyHash: string;\n};\n\nconst keyFor = ({ environment, workflowId, topologyHash }: TopologyKey) =>\n `${environment}:${workflowId}:${topologyHash}`;\n\n/** Caches successful topology ensures and coalesces concurrent requests. */\nexport const createTopologyResolver = (args: {\n ensure: (\n snapshot: EnsureWorkflowTopologyRequest,\n ) => Promise<EnsureWorkflowTopologyResponse>;\n}) => {\n const revisions = new Map<string, string>();\n const pending = new Map<string, Promise<EnsureWorkflowTopologyResponse>>();\n\n const ensureWorkflowTopology = (\n snapshot: EnsureWorkflowTopologyRequest,\n ): Promise<EnsureWorkflowTopologyResponse> => {\n const key = keyFor({\n environment: snapshot.environment,\n workflowId: snapshot.workflow.id,\n topologyHash: snapshot.workflow.topologyHash,\n });\n const revision = revisions.get(key);\n if (revision) {\n return Promise.resolve({ workflowRevisionId: revision, created: false });\n }\n\n const existing = pending.get(key);\n if (existing) return existing;\n\n const request = args\n .ensure(snapshot)\n .then((result) => {\n if (!result.workflowRevisionId) {\n throw new Error(\n \"Telemetry API returned an invalid workflow revision.\",\n );\n }\n revisions.set(key, result.workflowRevisionId);\n return result;\n })\n .finally(() => {\n pending.delete(key);\n });\n pending.set(key, request);\n return request;\n };\n\n return {\n ensureWorkflowTopology,\n getWorkflowRevisionId: (args: TopologyKey) => revisions.get(keyFor(args)),\n };\n};\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { isSuspensionControlFlowError } from \"@kortyx/core/errors\";\nimport { getEvalAttemptId } from \"@kortyx/core/eval-attribution\";\nimport type {\n KortyxTelemetryConfig,\n KortyxTelemetryEvent,\n ReasonTraceAdapter,\n ReasonTraceSpan,\n ReasonTraceSpanEndArgs,\n ReasonTraceSpanStartArgs,\n} from \"@kortyx/hooks\";\nimport { ToolObservationSchema } from \"@kortyx/telemetry-contracts\";\nimport type { createEventMapper } from \"./event-mapper\";\nimport type { ActiveSpan, SpanContext } from \"./types\";\n\nconst providerPricing = (\n metadata: ReasonTraceSpanEndArgs[\"providerMetadata\"],\n): Record<string, unknown> | undefined => {\n if (metadata?.providerId !== \"openrouter\") return undefined;\n const details = metadata.costDetails;\n const upstreamCost =\n details && typeof details === \"object\" && !Array.isArray(details)\n ? (details as Record<string, unknown>).upstreamInferenceCost\n : undefined;\n const cost = metadata.isByok === true ? upstreamCost : metadata.cost;\n if (typeof cost !== \"number\" || !Number.isFinite(cost) || cost < 0)\n return undefined;\n return {\n source: \"provider\",\n currency: \"USD\",\n actualCostMicros: Math.round(cost * 1_000_000),\n };\n};\n\n/** Maps generic SDK trace calls to Kortyx Studio's span and generation facts. */\nexport const createTraceAdapter = (args: {\n captureContent?: KortyxTelemetryConfig[\"captureContent\"] | undefined;\n createId: () => string;\n enqueue: (event: KortyxTelemetryEvent) => void;\n eventMapper: ReturnType<typeof createEventMapper>;\n}): ReasonTraceAdapter => {\n const activeSpans = new AsyncLocalStorage<ActiveSpan>();\n\n const createSpan = (\n startArgs: ReasonTraceSpanStartArgs,\n ): { span: ReasonTraceSpan; active?: ActiveSpan | undefined } => {\n const evalAttemptId = getEvalAttemptId();\n const parent = activeSpans.getStore();\n const span: SpanContext = {\n traceId: parent?.traceId ?? args.createId(),\n spanId: args.createId(),\n };\n const attributes = { ...(startArgs.attributes ?? {}) };\n const currentAttributes = { ...attributes };\n const correlation = args.eventMapper.correlationFrom(attributes, parent);\n const startedAt = Date.now();\n\n const isTool = startArgs.name === \"kortyx.tool\";\n if (correlation && (!isTool || attributes.executed === true)) {\n args.enqueue(\n args.eventMapper.createEvent({\n type: isTool ? \"tool.started\" : \"span.started\",\n correlation,\n span,\n ...(parent ? { parentSpanId: parent.spanId } : {}),\n payload: isTool\n ? ToolObservationSchema.parse(attributes)\n : {\n name: startArgs.name,\n attributes: currentAttributes,\n telemetry: args.eventMapper.telemetryPayload(\n startArgs.telemetry,\n ),\n ...(args.eventMapper.shouldCapture(\n startArgs.telemetry?.captureContent ?? args.captureContent,\n \"input\",\n )\n ? { input: startArgs.telemetry?.input }\n : {}),\n },\n context: args.eventMapper.spanContext(\n startArgs.telemetry,\n currentAttributes,\n ),\n }),\n );\n }\n\n let ended = false;\n let failed = false;\n let suspended = false;\n const end = (endArgs?: ReasonTraceSpanEndArgs): void => {\n if (ended) return;\n ended = true;\n if (!correlation) return;\n\n const endAttributes = {\n ...currentAttributes,\n ...(endArgs?.attributes ?? {}),\n };\n const telemetry = { ...startArgs.telemetry, ...endArgs?.telemetry };\n const durationMs = Date.now() - startedAt;\n if (isTool) {\n const payload = ToolObservationSchema.parse(endAttributes);\n const type =\n payload.observationKind === \"reused\"\n ? \"tool.reused\"\n : payload.observationKind === \"waiting\"\n ? \"tool.waiting\"\n : payload.suspended\n ? \"tool.suspended\"\n : payload.outcome === \"denied\"\n ? \"tool.denied\"\n : payload.outcome === \"fault\"\n ? \"tool.failed\"\n : payload.outcome === \"cancelled\"\n ? \"tool.cancelled\"\n : \"tool.completed\";\n args.enqueue(\n args.eventMapper.createEvent({\n type,\n correlation,\n span,\n ...(parent ? { parentSpanId: parent.spanId } : {}),\n payload,\n }),\n );\n return;\n }\n\n args.enqueue(\n args.eventMapper.createEvent({\n type: \"span.ended\",\n correlation,\n span,\n ...(parent ? { parentSpanId: parent.spanId } : {}),\n payload: {\n name: startArgs.name,\n attributes: endAttributes,\n durationMs,\n telemetry: args.eventMapper.telemetryPayload(telemetry),\n ...(args.eventMapper.shouldCapture(\n endArgs?.telemetry?.captureContent ??\n startArgs.telemetry?.captureContent ??\n args.captureContent,\n \"output\",\n )\n ? { output: endArgs?.telemetry?.output }\n : {}),\n },\n context: args.eventMapper.spanContext(telemetry, endAttributes),\n }),\n );\n\n if (startArgs.name !== \"runReasonEngine\" || suspended) return;\n const ttftMs = nonnegativeNumber(endAttributes.ttftMs);\n const streamDurationMs = nonnegativeNumber(\n endAttributes.streamDurationMs,\n );\n const timeToLastTokenMs = nonnegativeNumber(\n endAttributes.timeToLastTokenMs,\n );\n const pricing = providerPricing(endArgs?.providerMetadata);\n args.enqueue(\n args.eventMapper.createEvent({\n type: \"generation.completed\",\n correlation,\n span,\n ...(parent ? { parentSpanId: parent.spanId } : {}),\n payload: {\n ...args.eventMapper.telemetryPayload(telemetry),\n captured:\n args.eventMapper.shouldCapture(\n startArgs.telemetry?.captureContent ?? args.captureContent,\n \"input\",\n ) ||\n args.eventMapper.shouldCapture(\n endArgs?.telemetry?.captureContent ??\n startArgs.telemetry?.captureContent ??\n args.captureContent,\n \"output\",\n ),\n ...(evalAttemptId ? { evalAttemptId } : {}),\n outcome: failed ? \"failed\" : \"completed\",\n provider:\n args.eventMapper.stringValue(attributes.providerId) ?? \"unknown\",\n model:\n args.eventMapper.stringValue(attributes.modelId) ?? \"unknown\",\n durationMs,\n ...(ttftMs !== undefined ? { ttftMs } : {}),\n ...(streamDurationMs !== undefined ? { streamDurationMs } : {}),\n ...(timeToLastTokenMs !== undefined\n ? {\n postStreamDurationMs: Math.max(\n 0,\n durationMs - timeToLastTokenMs,\n ),\n }\n : {}),\n ...(endArgs?.usage\n ? {\n usage: failed\n ? Object.fromEntries(\n Object.entries(endArgs.usage).filter(\n ([key, value]) =>\n ([\n \"input\",\n \"output\",\n \"total\",\n \"reasoning\",\n \"cacheRead\",\n \"cacheWrite\",\n \"cacheWrite1h\",\n ].includes(key) &&\n typeof value === \"number\" &&\n Number.isFinite(value)) ||\n ([\n \"outputIncludesReasoning\",\n \"inputIncludesCacheRead\",\n \"inputIncludesCacheWrite\",\n ].includes(key) &&\n typeof value === \"boolean\"),\n ),\n )\n : endArgs.usage,\n }\n : {}),\n ...(endArgs?.finishReason\n ? { finishReason: endArgs.finishReason }\n : {}),\n ...(endArgs?.warnings ? { warnings: endArgs.warnings } : {}),\n ...(pricing ? { pricing } : {}),\n ...(endArgs?.providerMetadata && !failed\n ? { providerMetadata: endArgs.providerMetadata }\n : {}),\n },\n context: args.eventMapper.spanContext(telemetry, currentAttributes),\n }),\n );\n };\n\n const traceSpan: ReasonTraceSpan = {\n setAttributes: (nextAttributes) => {\n Object.assign(currentAttributes, nextAttributes);\n },\n addEvent: (name, eventAttributes = {}) => {\n if (\n !correlation ||\n activeSpans.getStore()?.name === \"kortyx.tool\" ||\n startArgs.name === \"kortyx.tool\"\n )\n return;\n const type =\n name === \"useReason.tool-call.start\"\n ? \"tool.started\"\n : name === \"useReason.tool-call.complete\"\n ? \"tool.completed\"\n : name === \"useReason.tool-call.error\"\n ? \"tool.failed\"\n : name === \"useReason.output.emitted\"\n ? \"output.emitted\"\n : name === \"useReason.output.invalidated\"\n ? \"output.invalidated\"\n : undefined;\n if (!type) return;\n const payload =\n type === \"output.emitted\"\n ? {\n ...Object.fromEntries(\n Object.entries(eventAttributes).filter(\n ([key]) => key !== \"data\",\n ),\n ),\n ...(args.eventMapper.shouldCapture(\n startArgs.telemetry?.captureContent ?? args.captureContent,\n \"output\",\n ) && \"data\" in eventAttributes\n ? { data: eventAttributes.data }\n : {}),\n }\n : eventAttributes;\n args.enqueue(\n args.eventMapper.createEvent({\n type,\n correlation,\n span,\n ...(parent ? { parentSpanId: parent.spanId } : {}),\n payload,\n }),\n );\n },\n end,\n fail: (error, endArgs) => {\n if (ended) return;\n if (isSuspensionControlFlowError(error)) {\n suspended = true;\n Object.assign(currentAttributes, {\n \"kortyx.control_flow\": true,\n \"kortyx.suspended\": true,\n });\n end(endArgs);\n return;\n }\n failed = true;\n const errorPayload = args.eventMapper.asErrorPayload(error, {\n correlation: { ...correlation, ...span },\n handled: false,\n severity: \"error\",\n mechanism: \"span\",\n });\n if (correlation) {\n args.enqueue(\n args.eventMapper.createEvent({\n type: \"span.failed\",\n correlation,\n span,\n ...(parent ? { parentSpanId: parent.spanId } : {}),\n payload: {\n name: startArgs.name,\n error: errorPayload,\n handled: false,\n severity: \"error\",\n durationMs: Date.now() - startedAt,\n },\n }),\n );\n }\n end(endArgs);\n },\n };\n\n return {\n span: traceSpan,\n ...(correlation\n ? { active: { ...span, name: startArgs.name, correlation } }\n : {}),\n };\n };\n\n return {\n startSpan: (startArgs) => createSpan(startArgs).span,\n withSpan: async (startArgs, fn) => {\n const created = createSpan(startArgs);\n const run = async (): Promise<Awaited<ReturnType<typeof fn>>> => {\n try {\n const result = await fn(created.span);\n created.span.end?.();\n return result;\n } catch (error) {\n try {\n created.span.fail?.(error);\n } catch {\n /* Preserve the callback failure. */\n }\n throw error;\n }\n };\n return created.active ? activeSpans.run(created.active, run) : run();\n },\n getActiveContext: () => {\n const active = activeSpans.getStore();\n return active\n ? { traceId: active.traceId, spanId: active.spanId }\n : undefined;\n },\n reportError: (error, options = {}) => {\n try {\n const active = activeSpans.getStore();\n const payload = args.eventMapper.asErrorPayload(error, {\n correlation: {\n ...active?.correlation,\n ...(active\n ? { traceId: active.traceId, spanId: active.spanId }\n : {}),\n ...options.correlation,\n },\n handled: true,\n severity: options.severity === \"warning\" ? \"warning\" : \"error\",\n mechanism: options.mechanism ?? \"report\",\n project: options.error,\n });\n if (!active)\n return typeof payload.diagnosticId === \"string\"\n ? payload.diagnosticId\n : undefined;\n args.enqueue(\n args.eventMapper.createEvent({\n type: \"error.reported\",\n correlation: active.correlation,\n span: active,\n payload: {\n handled: true,\n severity: options.severity === \"warning\" ? \"warning\" : \"error\",\n error: payload,\n },\n context: args.eventMapper.spanContext(\n {\n ...(options.metadata ? { metadata: options.metadata } : {}),\n ...(options.tags ? { tags: options.tags } : {}),\n },\n {},\n ),\n }),\n );\n return typeof payload.diagnosticId === \"string\"\n ? payload.diagnosticId\n : undefined;\n } catch {\n // Error reporting is an observer and cannot change execution.\n return undefined;\n }\n },\n };\n};\n\nconst nonnegativeNumber = (value: unknown): number | undefined =>\n typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? value\n : undefined;\n"],"mappings":"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","names":["import_node_crypto","result","import_errors","import_internal","import_telemetry_contracts","args","import_errors","import_telemetry_contracts"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kortyx/telemetry",
3
- "version": "0.15.1",
3
+ "version": "0.16.0",
4
4
  "private": false,
5
5
  "description": "Kortyx Studio telemetry HTTP adapter.",
6
6
  "license": "Apache-2.0",
@@ -18,10 +18,10 @@
18
18
  "CHANGELOG.md"
19
19
  ],
20
20
  "dependencies": {
21
- "@kortyx/hooks": "0.34.1",
22
- "@kortyx/telemetry-contracts": "0.17.1",
23
- "@kortyx/usage-telemetry": "0.2.0",
24
- "@kortyx/core": "0.13.1"
21
+ "@kortyx/hooks": "0.34.2",
22
+ "@kortyx/usage-telemetry": "0.3.0",
23
+ "@kortyx/core": "0.14.0",
24
+ "@kortyx/telemetry-contracts": "0.17.2"
25
25
  },
26
26
  "devDependencies": {
27
27
  "tsup": "^8.5.1",