import type { DISCARDED, Duration, HookNamesAsConst, RecursivePartial, RelativeTime, SKIPPED, TelemetryEvent } from '@datadog/browser-core'; import type { RumEvent } from '../rumEvent.types'; import type { RawRumEvent } from '../rawRumEvent.types'; import type { RumEventDomainContext } from '../domainContext.types'; export type DefaultRumEventAttributes = RecursivePartial & { type: RumEvent['type']; }; export type DefaultTelemetryEventAttributes = RecursivePartial; type DeepReadonly = { readonly [K in keyof T]: DeepReadonly; }; export interface AssembleHookParams { readonly eventType: RumEvent['type']; rawRumEvent: DeepReadonly; domainContext: DeepReadonly>; readonly startTime: RelativeTime; readonly duration?: Duration | undefined; } export interface HookCallbackMap { [HookNamesAsConst.ASSEMBLE]: (param: AssembleHookParams) => DefaultRumEventAttributes | SKIPPED | DISCARDED; [HookNamesAsConst.ASSEMBLE_TELEMETRY]: (param: { startTime: RelativeTime; }) => DefaultTelemetryEventAttributes | SKIPPED | DISCARDED; } export type Hooks = ReturnType; export declare const createHooks: () => { register(hookName: K, callback: HookCallbackMap[K]): { unregister: () => void; }; triggerHook(hookName: K, param: Parameters[0]): "DISCARDED" | Exclude, "SKIPPED"> | undefined; }; export {};