UNPKG

posthog-node

Version:

PostHog Node.js integration

53 lines (48 loc) 1.78 kB
/** A single event the server explicitly rejected (`drop`). */ export interface V1DroppedEvent { uuid: string details?: string } export interface CaptureV1ErrorParams { requestId: string /** Events the server rejected outright (billing/validation). */ drops: V1DroppedEvent[] /** UUIDs of events still pending `retry` after the attempt budget was exhausted, or lost to a batch-level failure. */ retryExhausted: string[] /** The underlying transport/HTTP/parse failure, when the whole batch failed. */ cause?: unknown } /** * Surfaced on the client error channel whenever a Capture V1 batch did not * fully deliver: some events were `drop`ped, some `retry` events outlived the * attempt budget, or the batch hit a terminal transport/HTTP/parse failure. * * A 2xx with drops is still a partial failure and is reported here — a * successful HTTP status does not mean every event was accepted. */ export class CaptureV1Error extends Error { name = 'CaptureV1Error' readonly requestId: string readonly drops: V1DroppedEvent[] readonly retryExhausted: string[] cause?: unknown constructor({ requestId, drops, retryExhausted, cause }: CaptureV1ErrorParams) { super(CaptureV1Error.buildMessage(requestId, drops, retryExhausted, cause)) this.requestId = requestId this.drops = drops this.retryExhausted = retryExhausted this.cause = cause } private static buildMessage( requestId: string, drops: V1DroppedEvent[], retryExhausted: string[], cause: unknown ): string { let message = `Capture V1 batch ${requestId} did not fully deliver: ${drops.length} dropped, ${retryExhausted.length} undelivered` if (cause instanceof Error) { message += ` (${cause.message})` } return message } }