@posthog/types
Version:
Type definitions for the PostHog JavaScript SDK
121 lines (107 loc) • 4.17 kB
text/typescript
/**
* Log capture types
*/
export type LogSeverityLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'
export type OtlpSeverityText = 'TRACE' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'FATAL'
export interface OtlpSeverityEntry {
text: OtlpSeverityText
number: number
}
export type LogAttributeValue = string | number | boolean | null | undefined | unknown[] | Record<string, unknown>
export type LogAttributes = Record<string, LogAttributeValue>
export interface CaptureLogOptions {
/** The log message body (required) */
body: string
/** Log severity level (default: 'info') */
level?: LogSeverityLevel
/** Trace ID for correlation — 32 hex chars */
trace_id?: string
/** Span ID for correlation — 16 hex chars */
span_id?: string
/** W3C trace flags (default: 0) */
trace_flags?: number
/** Per-log attributes (request-specific context like order_id, duration_ms) */
attributes?: LogAttributes
}
/**
* Pre-send filter. Inspect, mutate, or drop a captured log record before it
* enters the rate cap or the buffer. Return the (possibly transformed) record
* to keep it; return `null` to drop it.
*
* Configure as a single function or an array. Arrays form a left-to-right
* chain: each function receives the previous function's return value, and a
* `null` from any link short-circuits the chain and drops the record. A
* function that throws also drops the record (the error is logged).
*
* @example Redact secrets from log bodies
* ```ts
* logs: { beforeSend: (record) => ({ ...record, body: record.body.replace(/token=\S+/g, 'token=[REDACTED]') }) }
* ```
*/
export type BeforeSendLogFn = (record: CaptureLogOptions) => CaptureLogOptions | null
/**
* Per-level convenience logger. Each method captures a structured log record
* at the corresponding severity, equivalent to
* `posthog.captureLog({ body, level, attributes })`.
*
* @example
* ```ts
* posthog.logger.info('checkout completed', { order_id: 'ord_789' })
* posthog.logger.error('payment failed', { code: 'E001' })
* ```
*/
export interface Logger {
/** Lowest severity. Trace-level diagnostic detail. */
trace(body: string, attributes?: LogAttributes): void
/** Debug-level detail. Verbose, only useful while diagnosing. */
debug(body: string, attributes?: LogAttributes): void
/** Informational. Normal app events worth recording. */
info(body: string, attributes?: LogAttributes): void
/** Warning. Something unexpected but non-fatal. */
warn(body: string, attributes?: LogAttributes): void
/** Error. Operation failed; the app may continue. */
error(body: string, attributes?: LogAttributes): void
/** Fatal. Operation failed; the app likely cannot continue. */
fatal(body: string, attributes?: LogAttributes): void
}
// ============================================================================
// OTLP wire format types
// ============================================================================
export interface OtlpAnyValue {
stringValue?: string
/**
* proto3 JSON maps int64 to a string, which is the form the SDK emits.
* `number` stays valid because encoded records persist in the logs queue:
* one written by an earlier version rehydrates in the numeric form and is
* re-sent unchanged. The wire format accepts both.
*/
intValue?: string | number
doubleValue?: number
boolValue?: boolean
arrayValue?: { values: OtlpAnyValue[] }
kvlistValue?: { values: OtlpKeyValue[] }
}
export interface OtlpKeyValue {
key: string
value: OtlpAnyValue
}
export interface OtlpLogRecord {
timeUnixNano: string
observedTimeUnixNano: string
severityNumber: number
severityText: OtlpSeverityText
body: { stringValue: string }
attributes: OtlpKeyValue[]
traceId?: string
spanId?: string
flags?: number
}
export interface OtlpLogsPayload {
resourceLogs: Array<{
resource: { attributes: OtlpKeyValue[] }
scopeLogs: Array<{
scope: { name: string; version?: string }
logRecords: OtlpLogRecord[]
}>
}>
}