Skip to content

Commit a90d155

Browse files
committed
sdk-core: emit events directly from database
1 parent 31a472c commit a90d155

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

packages/sdk-core/src/modules/database/BacktraceDatabase.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { anySignal, createAbortController } from '../../common/AbortController.js';
2+
import { Events } from '../../common/Events.js';
23
import { IdGenerator } from '../../common/IdGenerator.js';
34
import { TimeHelper } from '../../common/TimeHelper.js';
45
import { BacktraceAttachment } from '../../model/attachment/index.js';
56
import { BacktraceDatabaseConfiguration } from '../../model/configuration/BacktraceDatabaseConfiguration.js';
67
import { BacktraceData } from '../../model/data/BacktraceData.js';
78
import { BacktraceReportSubmission } from '../../model/http/BacktraceReportSubmission.js';
9+
import { BacktraceReportSubmissionResult, BacktraceSubmissionResponse } from '../../model/http/index.js';
810
import { BacktraceModule, BacktraceModuleBindData } from '../BacktraceModule.js';
911
import { SessionFiles } from '../storage/index.js';
1012
import { BacktraceDatabaseContext } from './BacktraceDatabaseContext.js';
@@ -16,7 +18,17 @@ import {
1618
ReportBacktraceDatabaseRecord,
1719
} from './model/BacktraceDatabaseRecord.js';
1820

19-
export class BacktraceDatabase implements BacktraceModule {
21+
type BacktraceDatabaseEvents = {
22+
added: [record: BacktraceDatabaseRecord];
23+
removed: [record: BacktraceDatabaseRecord];
24+
'before-send': [record: BacktraceDatabaseRecord];
25+
'after-send': [
26+
record: BacktraceDatabaseRecord,
27+
result: BacktraceReportSubmissionResult<BacktraceSubmissionResponse>,
28+
];
29+
};
30+
31+
export class BacktraceDatabase extends Events<BacktraceDatabaseEvents> implements BacktraceModule {
2032
/**
2133
* Determines if the database is enabled.
2234
*/
@@ -45,6 +57,8 @@ export class BacktraceDatabase implements BacktraceModule {
4557
private readonly _requestHandler: BacktraceReportSubmission,
4658
private readonly _sessionFiles?: SessionFiles,
4759
) {
60+
super();
61+
4862
this._databaseRecordContext = new BacktraceDatabaseContext(this._options?.maximumRetries);
4963
this._recordLimits = {
5064
report: this._options?.maximumNumberOfRecords ?? 8,
@@ -151,6 +165,8 @@ export class BacktraceDatabase implements BacktraceModule {
151165
this._databaseRecordContext.add(record);
152166
this.lockSessionWithRecord(record);
153167

168+
this.emit('added', record);
169+
154170
return record;
155171
}
156172

@@ -189,6 +205,8 @@ export class BacktraceDatabase implements BacktraceModule {
189205
this._databaseRecordContext.add(record);
190206
this.lockSessionWithRecord(record);
191207

208+
this.emit('added', record);
209+
192210
return record;
193211
}
194212

@@ -238,6 +256,8 @@ export class BacktraceDatabase implements BacktraceModule {
238256
this._databaseRecordContext.remove(record);
239257
this._storageProvider.delete(record);
240258
this._sessionFiles?.unlockPreviousSessions(record.id);
259+
260+
this.emit('removed', record);
241261
}
242262
}
243263

@@ -287,11 +307,15 @@ export class BacktraceDatabase implements BacktraceModule {
287307
try {
288308
record.locked = true;
289309

310+
this.emit('before-send', record);
311+
290312
const result =
291313
record.type === 'report'
292314
? await this._requestHandler.send(record.data, record.attachments, signal)
293315
: await this._requestHandler.sendAttachment(record.rxid, record.attachment, signal);
294316

317+
this.emit('after-send', record, result);
318+
295319
if (
296320
result.status === 'Ok' ||
297321
result.status === 'Unsupported' ||
@@ -356,6 +380,7 @@ export class BacktraceDatabase implements BacktraceModule {
356380

357381
for (const record of recordsToAdd) {
358382
this.lockSessionWithRecord(record);
383+
this.emit('added', record);
359384
}
360385
}
361386

0 commit comments

Comments
 (0)