@@ -73,6 +73,8 @@ type FoundAlert = Prisma.Result<
7373 > ;
7474} ;
7575
76+ class SkipRetryError extends Error { }
77+
7678export class DeliverAlertService extends BaseService {
7779 public async call ( alertId : string ) {
7880 const alert : FoundAlert | null = await this . _prisma . projectAlert . findFirst ( {
@@ -136,22 +138,34 @@ export class DeliverAlertService extends BaseService {
136138 alert . failedAttempt = finishedAttempt ;
137139 }
138140
139- switch ( alert . channel . type ) {
140- case "EMAIL" : {
141- await this . #sendEmail( alert ) ;
142- break ;
143- }
144- case "SLACK" : {
145- await this . #sendSlack( alert ) ;
146- break ;
147- }
148- case "WEBHOOK" : {
149- await this . #sendWebhook( alert ) ;
150- break ;
141+ try {
142+ switch ( alert . channel . type ) {
143+ case "EMAIL" : {
144+ await this . #sendEmail( alert ) ;
145+ break ;
146+ }
147+ case "SLACK" : {
148+ await this . #sendSlack( alert ) ;
149+ break ;
150+ }
151+ case "WEBHOOK" : {
152+ await this . #sendWebhook( alert ) ;
153+ break ;
154+ }
155+ default : {
156+ assertNever ( alert . channel . type ) ;
157+ }
151158 }
152- default : {
153- assertNever ( alert . channel . type ) ;
159+ } catch ( error ) {
160+ if ( error instanceof SkipRetryError ) {
161+ logger . error ( "[DeliverAlert] Skipping retry" , {
162+ reason : error . message ,
163+ } ) ;
164+
165+ return ;
154166 }
167+
168+ throw error ;
155169 }
156170
157171 await this . _prisma . projectAlert . update ( {
@@ -1012,6 +1026,14 @@ export class DeliverAlertService extends BaseService {
10121026 message,
10131027 } ) ;
10141028
1029+ if ( error . data . error === "invalid_blocks" ) {
1030+ logger . error ( "[DeliverAlert] Slack invalid blocks" , {
1031+ error,
1032+ } ) ;
1033+
1034+ throw new SkipRetryError ( "Slack invalid blocks" ) ;
1035+ }
1036+
10151037 throw new Error ( "Slack platform error" ) ;
10161038 }
10171039
0 commit comments