diff --git a/packages/replay/src/eventBuffer.ts b/packages/replay/src/eventBuffer.ts index 94aa0870bf73..6444c2cdf72f 100644 --- a/packages/replay/src/eventBuffer.ts +++ b/packages/replay/src/eventBuffer.ts @@ -77,6 +77,11 @@ export class EventBufferProxy implements EventBuffer { return this._used.finish(); } + /** @inheritDoc */ + public finishImmediate(): ReplayRecordingData { + return this._used.finishImmediate(); + } + /** Ensure the worker has loaded. */ private async _ensureWorkerIsLoaded(): Promise { try { @@ -139,14 +144,18 @@ class EventBufferArray implements EventBuffer { public finish(): Promise { return new Promise(resolve => { - // Make a copy of the events array reference and immediately clear the - // events member so that we do not lose new events while uploading - // attachment. - const eventsRet = this._events; - this._events = []; - resolve(JSON.stringify(eventsRet)); + resolve(this.finishImmediate()); }); } + + public finishImmediate(): string { + // Make a copy of the events array reference and immediately clear the + // events member so that we do not lose new events while uploading + // attachment. + const eventsRet = this._events; + this._events = []; + return JSON.stringify(eventsRet); + } } /** @@ -252,6 +261,16 @@ export class EventBufferCompressionWorker implements EventBuffer { return this._finishRequest(this._getAndIncrementId()); } + /** @inheritdoc */ + public finishImmediate(): string { + const events = this._pendingEvents; + + // We want to finish this, but just ignore the result + void this._finishRequest(this._getAndIncrementId()); + + return JSON.stringify(events); + } + /** * Post message to worker and wait for response before resolving promise. */ diff --git a/packages/replay/src/types.ts b/packages/replay/src/types.ts index dab618c3b349..3fdcd9f519f1 100644 --- a/packages/replay/src/types.ts +++ b/packages/replay/src/types.ts @@ -233,6 +233,11 @@ export interface EventBuffer { * Clears and returns the contents of the buffer. */ finish(): Promise; + + /** + * Clear & immediately return the contents of the buffer in a sync way. + */ + finishImmediate(): ReplayRecordingData; } export type AddUpdateCallback = () => boolean | void;