import type { Observable, RawError, PageMayExitEvent, Encoder } from '@openobserve/browser-core' import { createBatch, createFlushController, createHttpRequest, DeflateEncoderStreamId } from '@openobserve/browser-core' import type { RumConfiguration } from '../domain/configuration' import type { LifeCycle } from '../domain/lifeCycle' import { LifeCycleEventType } from '../domain/lifeCycle' import type { AssembledRumEvent } from '../rawRumEvent.types' import { RumEventType } from '../rawRumEvent.types' export function startRumBatch( configuration: RumConfiguration, lifeCycle: LifeCycle, reportError: (error: RawError) => void, pageMayExitObservable: Observable, sessionExpireObservable: Observable, createEncoder: (streamId: DeflateEncoderStreamId) => Encoder ) { const endpoints = [configuration.rumEndpointBuilder] if (configuration.replica) { endpoints.push(configuration.replica.rumEndpointBuilder) } const batch = createBatch({ encoder: createEncoder(DeflateEncoderStreamId.RUM), request: createHttpRequest(endpoints, reportError), flushController: createFlushController({ pageMayExitObservable, sessionExpireObservable, }), }) lifeCycle.subscribe(LifeCycleEventType.RUM_EVENT_COLLECTED, (serverRumEvent: AssembledRumEvent) => { if (serverRumEvent.type === RumEventType.VIEW) { batch.upsert(serverRumEvent, serverRumEvent.view.id) } else { batch.add(serverRumEvent) } }) return batch }