import { c as OutcomeStatus, n as EventAttributes, s as FunnelStatus } from "./event-subscriber-D1XLkPzi.js";

//#region src/metric-testing.d.ts
interface MetricsEvent {
  event: string;
  attributes?: EventAttributes;
  service: string;
  timestamp: number;
}
interface MetricsFunnelStep {
  funnel: string;
  status: FunnelStatus;
  attributes?: EventAttributes;
  service: string;
  timestamp: number;
}
interface MetricsOutcome {
  operation: string;
  status: OutcomeStatus;
  attributes?: EventAttributes;
  service: string;
  timestamp: number;
}
interface MetricsValue {
  metric: string;
  value: number;
  attributes?: EventAttributes;
  service: string;
  timestamp: number;
}
/**
 * In-memory metrics collector for testing
 */
interface MetricsCollector {
  /** Get all collected events */
  getEvents(): MetricsEvent[];
  /** Get all collected funnel steps */
  getFunnelSteps(): MetricsFunnelStep[];
  /** Get all collected outcomes */
  getOutcomes(): MetricsOutcome[];
  /** Get all collected values */
  getValues(): MetricsValue[];
  /** Clear all collected metrics */
  clear(): void;
  /** Record an event (internal use) */
  recordEvent(event: MetricsEvent): void;
  /** Record a funnel step (internal use) */
  recordFunnelStep(step: MetricsFunnelStep): void;
  /** Record an outcome (internal use) */
  recordOutcome(outcome: MetricsOutcome): void;
  /** Record a value (internal use) */
  recordValue(value: MetricsValue): void;
}
/**
 * Create an in-memory metrics collector for testing
 *
 * @example
 * ```typescript
 * const collector = createMetricsCollector()
 *
 * const metrics = new Metric('test-service', { collector })
 * metrics.trackEvent('order.completed', { orderId: '123' })
 *
 * const event =collector.getEvents()
 * expect(events).toHaveLength(1)
 * expect(events[0].event).toBe('order.completed')
 * ```
 */
declare function createMetricsCollector(): MetricsCollector;
/**
 * Assert that a metric event was tracked
 *
 * @example
 * ```typescript
 * assertEventTracked({
 *   collector,
 *   eventName: 'order.completed',
 *   attributes: { orderId: '123' }
 * })
 * ```
 */
declare function assertEventTracked(options: {
  collector: MetricsCollector;
  eventName: string;
  attributes?: Record<string, unknown>;
}): void;
/**
 * Assert that an outcome was tracked
 *
 * @example
 * ```typescript
 * assertOutcomeTracked({
 *   collector,
 *   operation: 'payment.process',
 *   status: 'success'
 * })
 * ```
 */
declare function assertOutcomeTracked(options: {
  collector: MetricsCollector;
  operation: string;
  status: 'success' | 'failure' | 'partial';
}): void;
//#endregion
export { MetricsValue as a, createMetricsCollector as c, MetricsOutcome as i, MetricsEvent as n, assertEventTracked as o, MetricsFunnelStep as r, assertOutcomeTracked as s, MetricsCollector as t };
//# sourceMappingURL=metric-testing-DXdK3-Q3.d.ts.map