@@ -1406,6 +1406,117 @@ describe("TriggerChatTransport", function () {
14061406 expect ( runStore . get ( "chat-tracking-error" ) ) . toBeUndefined ( ) ;
14071407 } ) ;
14081408
1409+ it ( "normalizes non-Error consumeTrackingStream failures before reporting onError" , async function ( ) {
1410+ const errors : TriggerChatTransportError [ ] = [ ] ;
1411+ const runStore = new TrackedRunStore ( ) ;
1412+
1413+ const server = await startServer ( function ( req , res ) {
1414+ if ( req . method === "POST" && req . url === "/api/v1/tasks/chat-task/trigger" ) {
1415+ res . writeHead ( 200 , {
1416+ "content-type" : "application/json" ,
1417+ "x-trigger-jwt" : "pk_run_tracking_string_error" ,
1418+ } ) ;
1419+ res . end ( JSON . stringify ( { id : "run_tracking_string_error" } ) ) ;
1420+ return ;
1421+ }
1422+
1423+ res . writeHead ( 404 ) ;
1424+ res . end ( ) ;
1425+ } ) ;
1426+
1427+ const transport = new TriggerChatTransport ( {
1428+ task : "chat-task" ,
1429+ stream : "chat-stream" ,
1430+ accessToken : "pk_trigger" ,
1431+ baseURL : server . url ,
1432+ runStore,
1433+ onError : function onError ( error ) {
1434+ errors . push ( error ) ;
1435+ } ,
1436+ } ) ;
1437+
1438+ ( transport as any ) . fetchRunStream = async function fetchRunStream ( ) {
1439+ return new ReadableStream ( {
1440+ start ( controller ) {
1441+ controller . error ( "tracking string failure" ) ;
1442+ } ,
1443+ } ) ;
1444+ } ;
1445+
1446+ const stream = await transport . sendMessages ( {
1447+ trigger : "submit-message" ,
1448+ chatId : "chat-tracking-string-error" ,
1449+ messageId : undefined ,
1450+ messages : [ ] ,
1451+ abortSignal : undefined ,
1452+ } ) ;
1453+
1454+ await expect ( readChunks ( stream ) ) . rejects . toBe ( "tracking string failure" ) ;
1455+
1456+ await waitForCondition ( function ( ) {
1457+ return errors . length === 1 ;
1458+ } ) ;
1459+
1460+ expect ( errors [ 0 ] ) . toMatchObject ( {
1461+ phase : "consumeTrackingStream" ,
1462+ chatId : "chat-tracking-string-error" ,
1463+ runId : "run_tracking_string_error" ,
1464+ } ) ;
1465+ expect ( errors [ 0 ] ?. error . message ) . toBe ( "tracking string failure" ) ;
1466+ expect ( runStore . get ( "chat-tracking-string-error" ) ) . toBeUndefined ( ) ;
1467+ } ) ;
1468+
1469+ it ( "ignores onError callback failures during consumeTrackingStream errors" , async function ( ) {
1470+ const runStore = new TrackedRunStore ( ) ;
1471+
1472+ const server = await startServer ( function ( req , res ) {
1473+ if ( req . method === "POST" && req . url === "/api/v1/tasks/chat-task/trigger" ) {
1474+ res . writeHead ( 200 , {
1475+ "content-type" : "application/json" ,
1476+ "x-trigger-jwt" : "pk_run_tracking_onerror_failure" ,
1477+ } ) ;
1478+ res . end ( JSON . stringify ( { id : "run_tracking_onerror_failure" } ) ) ;
1479+ return ;
1480+ }
1481+
1482+ res . writeHead ( 404 ) ;
1483+ res . end ( ) ;
1484+ } ) ;
1485+
1486+ const transport = new TriggerChatTransport ( {
1487+ task : "chat-task" ,
1488+ stream : "chat-stream" ,
1489+ accessToken : "pk_trigger" ,
1490+ baseURL : server . url ,
1491+ runStore,
1492+ onError : async function onError ( ) {
1493+ throw new Error ( "onError failed" ) ;
1494+ } ,
1495+ } ) ;
1496+
1497+ ( transport as any ) . fetchRunStream = async function fetchRunStream ( ) {
1498+ return new ReadableStream ( {
1499+ start ( controller ) {
1500+ controller . error ( new Error ( "tracking failed root cause" ) ) ;
1501+ } ,
1502+ } ) ;
1503+ } ;
1504+
1505+ const stream = await transport . sendMessages ( {
1506+ trigger : "submit-message" ,
1507+ chatId : "chat-tracking-onerror-failure" ,
1508+ messageId : undefined ,
1509+ messages : [ ] ,
1510+ abortSignal : undefined ,
1511+ } ) ;
1512+
1513+ await expect ( readChunks ( stream ) ) . rejects . toThrowError ( "tracking failed root cause" ) ;
1514+
1515+ await waitForCondition ( function ( ) {
1516+ return runStore . get ( "chat-tracking-onerror-failure" ) === undefined ;
1517+ } ) ;
1518+ } ) ;
1519+
14091520 it ( "reports reconnect failures through onError" , async function ( ) {
14101521 const errors : TriggerChatTransportError [ ] = [ ] ;
14111522 const runStore = new InMemoryTriggerChatRunStore ( ) ;
0 commit comments