src/message-telemetry-types.tsTypeScript
@@ -0,0 +1,46 @@
1+
export interface Message {2+
id: string;3+
type: string;4+
customerEmail: string;5+
tenantId: string;6+
headers: Readonly<Record<string, string>>;7+
payload: unknown;8+
}9+
10+
export interface TraceContext {11+
traceId: string;12+
}13+
14+
export interface Span {15+
recordException(error: unknown): void;16+
setStatus(status: "ok" | "error"): void;17+
end(): void;18+
}19+
20+
export interface Tracer {21+
extract(headers: Readonly<Record<string, string>>): TraceContext | undefined;22+
startSpan(name: string, parent?: TraceContext): Span;23+
runWithSpan<T>(span: Span, work: () => T): T;24+
activeTraceId(): string | undefined;25+
}26+
27+
export interface Logger {28+
info(message: string, fields?: Readonly<Record<string, unknown>>): void;29+
}30+
31+
export interface Counter {32+
add(value: number, labels: Readonly<Record<string, string | boolean>>): void;33+
}34+
35+
export interface MessageTelemetry {36+
tracer: Tracer;37+
logger: Logger;38+
messagesAttempt: Counter;39+
messagesFinal: Counter;40+
}41+
42+
export type MessageProcessor = (message: Message) => Promise<void>;43+
44+
export type AttemptResult =45+
| { kind: "succeeded" }46+
| { kind: "retry"; error: unknown };