import type { RumEvent, RumEventDomainContext, RumInitConfiguration, RumResourceEventDomainContext, } from '@datadog/browser-rum'; import { enrichEvent } from './enrich-event'; import { handleResource } from './handle-resource'; /** * Used for `application.beforeSend`. Returning `false` drops the event app-wide; * `void` / `true` passes it through. */ export type ApplicationBeforeSendHandler = ( event: RumEvent, context: RumEventDomainContext ) => boolean | void; /** * Used for per-service `beforeSend`. Transform-only: the return value is * ignored. Only `application.beforeSend` may drop events. */ export type ServiceBeforeSendHandler = (event: RumEvent, context: RumEventDomainContext) => void; export function beforeSend( handler?: RumInitConfiguration['beforeSend'] ): NonNullable { return function (event: RumEvent, context: RumEventDomainContext) { try { if (event.type === 'resource') { handleResource(event, context as RumResourceEventDomainContext); } enrichEvent(event, context); return handler?.(event, context) ?? true; } catch {} // eslint-disable-line no-empty return true; }; }