@@ -73,6 +73,8 @@ type FoundAlert = Prisma.Result<
73
73
> ;
74
74
} ;
75
75
76
+ class SkipRetryError extends Error { }
77
+
76
78
export class DeliverAlertService extends BaseService {
77
79
public async call ( alertId : string ) {
78
80
const alert : FoundAlert | null = await this . _prisma . projectAlert . findFirst ( {
@@ -136,22 +138,34 @@ export class DeliverAlertService extends BaseService {
136
138
alert . failedAttempt = finishedAttempt ;
137
139
}
138
140
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
+ }
151
158
}
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 ;
154
166
}
167
+
168
+ throw error ;
155
169
}
156
170
157
171
await this . _prisma . projectAlert . update ( {
@@ -1012,6 +1026,14 @@ export class DeliverAlertService extends BaseService {
1012
1026
message,
1013
1027
} ) ;
1014
1028
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
+
1015
1037
throw new Error ( "Slack platform error" ) ;
1016
1038
}
1017
1039
0 commit comments