@@ -181,22 +181,30 @@ export class BetaMessageStream implements AsyncIterable<BetaMessageStreamEvent>
181181 options ?: RequestOptions ,
182182 ) : Promise < void > {
183183 const signal = options ?. signal ;
184+ let abortHandler : ( ( ) => void ) | undefined ;
184185 if ( signal ) {
185186 if ( signal . aborted ) this . controller . abort ( ) ;
186- signal . addEventListener ( 'abort' , ( ) => this . controller . abort ( ) ) ;
187+ abortHandler = this . controller . abort . bind ( this . controller ) ;
188+ signal . addEventListener ( 'abort' , abortHandler ) ;
187189 }
188- this . #beginRequest( ) ;
189- const { response, data : stream } = await messages
190- . create ( { ...params , stream : true } , { ...options , signal : this . controller . signal } )
191- . withResponse ( ) ;
192- this . _connected ( response ) ;
193- for await ( const event of stream ) {
194- this . #addStreamEvent( event ) ;
195- }
196- if ( stream . controller . signal ?. aborted ) {
197- throw new APIUserAbortError ( ) ;
190+ try {
191+ this . #beginRequest( ) ;
192+ const { response, data : stream } = await messages
193+ . create ( { ...params , stream : true } , { ...options , signal : this . controller . signal } )
194+ . withResponse ( ) ;
195+ this . _connected ( response ) ;
196+ for await ( const event of stream ) {
197+ this . #addStreamEvent( event ) ;
198+ }
199+ if ( stream . controller . signal ?. aborted ) {
200+ throw new APIUserAbortError ( ) ;
201+ }
202+ this . #endRequest( ) ;
203+ } finally {
204+ if ( signal && abortHandler ) {
205+ signal . removeEventListener ( 'abort' , abortHandler ) ;
206+ }
198207 }
199- this . #endRequest( ) ;
200208 }
201209
202210 protected _connected ( response : Response | null ) {
@@ -497,20 +505,28 @@ export class BetaMessageStream implements AsyncIterable<BetaMessageStreamEvent>
497505 options ?: RequestOptions ,
498506 ) : Promise < void > {
499507 const signal = options ?. signal ;
508+ let abortHandler : ( ( ) => void ) | undefined ;
500509 if ( signal ) {
501510 if ( signal . aborted ) this . controller . abort ( ) ;
502- signal . addEventListener ( 'abort' , ( ) => this . controller . abort ( ) ) ;
511+ abortHandler = this . controller . abort . bind ( this . controller ) ;
512+ signal . addEventListener ( 'abort' , abortHandler ) ;
503513 }
504- this . #beginRequest( ) ;
505- this . _connected ( null ) ;
506- const stream = Stream . fromReadableStream < BetaMessageStreamEvent > ( readableStream , this . controller ) ;
507- for await ( const event of stream ) {
508- this . #addStreamEvent( event ) ;
509- }
510- if ( stream . controller . signal ?. aborted ) {
511- throw new APIUserAbortError ( ) ;
514+ try {
515+ this . #beginRequest( ) ;
516+ this . _connected ( null ) ;
517+ const stream = Stream . fromReadableStream < BetaMessageStreamEvent > ( readableStream , this . controller ) ;
518+ for await ( const event of stream ) {
519+ this . #addStreamEvent( event ) ;
520+ }
521+ if ( stream . controller . signal ?. aborted ) {
522+ throw new APIUserAbortError ( ) ;
523+ }
524+ this . #endRequest( ) ;
525+ } finally {
526+ if ( signal && abortHandler ) {
527+ signal . removeEventListener ( 'abort' , abortHandler ) ;
528+ }
512529 }
513- this . #endRequest( ) ;
514530 }
515531
516532 /**
0 commit comments