@@ -39,9 +39,24 @@ export default class SentryEventWorker extends Worker {
3939
4040 const [ headers , items ] = envelope ;
4141
42+ if ( items . length === 0 ) {
43+ this . logger . warn ( 'Received envelope with no items' ) ;
44+ return ;
45+ }
46+
47+ let processedCount = 0 ;
48+ let skippedCount = 0 ;
49+
4250 for ( const item of items ) {
43- await this . handleEnvelopeItem ( headers , item , event . projectId ) ;
51+ const result = await this . handleEnvelopeItem ( headers , item , event . projectId ) ;
52+ if ( result === 'processed' ) {
53+ processedCount ++ ;
54+ } else if ( result === 'skipped' ) {
55+ skippedCount ++ ;
56+ }
4457 }
58+
59+ this . logger . verbose ( `Processed ${ processedCount } events, skipped ${ skippedCount } non-event items from envelope` ) ;
4560 } catch ( error ) {
4661 this . logger . error ( `Error handling Sentry event task:` , error ) ;
4762 this . logger . info ( '👇 Here is the problematic event:' ) ;
@@ -99,8 +114,9 @@ export default class SentryEventWorker extends Worker {
99114 * @param envelopeHeaders - The whole envelope headers
100115 * @param item - Sentry item
101116 * @param projectId - Sentry project ID
117+ * @returns 'processed' if event was sent, 'skipped' if non-event item, throws error on failure
102118 */
103- private async handleEnvelopeItem ( envelopeHeaders : Envelope [ 0 ] , item : EnvelopeItem , projectId : string ) : Promise < void > {
119+ private async handleEnvelopeItem ( envelopeHeaders : Envelope [ 0 ] , item : EnvelopeItem , projectId : string ) : Promise < 'processed' | 'skipped' > {
104120 try {
105121 const [ itemHeader , itemPayload ] = item ;
106122
@@ -112,7 +128,8 @@ export default class SentryEventWorker extends Worker {
112128 * Skip non-event items
113129 */
114130 if ( itemHeader . type !== 'event' ) {
115- return ;
131+ this . logger . verbose ( `Skipping non-event item of type: ${ itemHeader . type } ` ) ;
132+ return 'skipped' ;
116133 }
117134 const payloadHasSDK = typeof itemPayload === 'object' && 'sdk' in itemPayload ;
118135
@@ -121,18 +138,37 @@ export default class SentryEventWorker extends Worker {
121138 */
122139 const sentryJsSDK = [ 'browser' , 'react' , 'vue' , 'angular' , 'capacirtor' , 'electron' ] ;
123140
124- const isJsSDK = payloadHasSDK && sentryJsSDK . includes ( itemPayload . sdk . name ) ;
141+ /**
142+ * Safely check if SDK name exists and is in the list
143+ */
144+ const sdkName = payloadHasSDK && itemPayload . sdk && typeof itemPayload . sdk === 'object' && 'name' in itemPayload . sdk
145+ ? itemPayload . sdk . name
146+ : undefined ;
147+
148+ const isJsSDK = sdkName !== undefined && sentryJsSDK . includes ( sdkName ) ;
125149
126150 const hawkEvent = this . transformToHawkFormat ( envelopeHeaders as EventEnvelope [ 0 ] , item as EventItem , projectId , isJsSDK ) ;
127151
128152 /**
129- * If we have release attached to the event
153+ * Send task to appropriate worker and check if it was successfully queued
130154 */
131- if ( isJsSDK ) {
132- await this . addTask ( WorkerNames . JAVASCRIPT , hawkEvent as JavaScriptEventWorkerTask ) ;
133- } else {
134- await this . addTask ( WorkerNames . DEFAULT , hawkEvent as DefaultEventWorkerTask ) ;
155+ const workerName = isJsSDK ? WorkerNames . JAVASCRIPT : WorkerNames . DEFAULT ;
156+ const taskSent = await this . addTask ( workerName , hawkEvent as JavaScriptEventWorkerTask | DefaultEventWorkerTask ) ;
157+
158+ if ( ! taskSent ) {
159+ /**
160+ * If addTask returns false, the message was not queued (queue full or channel closed)
161+ * This is a critical error that should be logged and thrown
162+ */
163+ const error = new Error ( `Failed to queue event to ${ workerName } worker. Queue may be full or channel closed.` ) ;
164+ this . logger . error ( error . message ) ;
165+ this . logger . info ( '👇 Here is the event that failed to queue:' ) ;
166+ this . logger . json ( hawkEvent ) ;
167+ throw error ;
135168 }
169+
170+ this . logger . verbose ( `Successfully queued event to ${ workerName } worker` ) ;
171+ return 'processed' ;
136172 } catch ( error ) {
137173 this . logger . error ( 'Error handling envelope item:' , error ) ;
138174 this . logger . info ( '👇 Here is the problematic item:' ) ;
0 commit comments