11import { anySignal , createAbortController } from '../../common/AbortController.js' ;
2+ import { Events } from '../../common/Events.js' ;
23import { IdGenerator } from '../../common/IdGenerator.js' ;
34import { TimeHelper } from '../../common/TimeHelper.js' ;
45import { BacktraceAttachment } from '../../model/attachment/index.js' ;
56import { BacktraceDatabaseConfiguration } from '../../model/configuration/BacktraceDatabaseConfiguration.js' ;
67import { BacktraceData } from '../../model/data/BacktraceData.js' ;
78import { BacktraceReportSubmission } from '../../model/http/BacktraceReportSubmission.js' ;
9+ import { BacktraceReportSubmissionResult , BacktraceSubmissionResponse } from '../../model/http/index.js' ;
810import { BacktraceModule , BacktraceModuleBindData } from '../BacktraceModule.js' ;
911import { SessionFiles } from '../storage/index.js' ;
1012import { 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