@@ -1043,7 +1043,7 @@ class Tangerine extends dns.promises.Resolver {
10431043 //
10441044 async #request( pkt , server , abortController , timeout = this . options . timeout ) {
10451045 // safeguard in case aborted
1046- if ( abortController . signal . aborted ) return ;
1046+ if ( abortController ? .signal ? .aborted ) return ;
10471047
10481048 let localAddress ;
10491049 let localPort ;
@@ -1129,31 +1129,33 @@ class Tangerine extends dns.promises.Resolver {
11291129 const statusCode = response . status || response . statusCode ;
11301130 debug ( 'response' , { statusCode, headers } ) ;
11311131
1132- // <https://github.com/nodejs/undici/issues/3353#issuecomment-2184635954>
1133- // eslint-disable-next-line max-depth
1134- if ( body && isStream ( body ) && typeof body . on === 'function' )
1135- body . on ( 'error' , ( err ) => {
1136- this . options . logger . error ( err , { response } ) ;
1137- } ) ;
1138-
11391132 // eslint-disable-next-line max-depth
11401133 if ( body && statusCode >= 200 && statusCode < 300 ) {
11411134 // <https://sindresorhus.com/blog/goodbye-nodejs-buffer>
1142- buffer = Buffer . isBuffer ( body )
1143- ? body
1144- : // eslint-disable-next-line no-await-in-loop
1145- await getStream . buffer ( body ) ;
1146- // <https://github.com/nodejs/undici/issues/3353>
1147- // eslint-disable-next-line no-await-in-loop, max-depth
1148- if ( body && typeof body . dump === 'function' ) await body . dump ( ) ;
1149- // NOTE: we don't need to do this (causes uncaught exception)
1150- // if (!abortController.signal.aborted) abortController.abort();
1135+ // eslint-disable-next-line max-depth
1136+ if ( Buffer . isBuffer ( body ) ) buffer = body ;
1137+ else if ( typeof body . arrayBuffer === 'function' )
1138+ // eslint-disable-next-line no-await-in-loop
1139+ buffer = Buffer . from ( await body . arrayBuffer ( ) ) ;
1140+ // eslint-disable-next-line no-await-in-loop
1141+ else if ( isStream ( body ) ) buffer = await getStream . buffer ( body ) ;
1142+ else {
1143+ const err = new TypeError ( 'Unsupported body type' ) ;
1144+ err . body = body ;
1145+ throw err ;
1146+ }
1147+
11511148 break ;
11521149 }
11531150
11541151 // <https://github.com/nodejs/undici/issues/3353>
1155- // eslint-disable-next-line no-await-in-loop, max-depth
1156- if ( body && typeof body . dump === 'function' ) await body . dump ( ) ;
1152+ if (
1153+ ! abortController ?. signal ?. aborted &&
1154+ body &&
1155+ typeof body . dump === 'function'
1156+ )
1157+ // eslint-disable-next-line no-await-in-loop
1158+ await body . dump ( ) ;
11571159
11581160 // <https://github.com/nodejs/undici/blob/00dfd0bd41e73782452aecb728395f354585ca94/lib/core/errors.js#L47-L58>
11591161 const message =
@@ -1173,14 +1175,13 @@ class Tangerine extends dns.promises.Resolver {
11731175 // NOTE: if NOTFOUND error occurs then don't attempt further requests
11741176 // <https://nodejs.org/api/dns.html#dnssetserversservers>
11751177 //
1176- // eslint-disable-next-line max-depth
1178+
11771179 if ( err . code === dns . NOTFOUND ) throw err ;
11781180
1179- // eslint-disable-next-line max-depth
11801181 if ( err . status >= 429 ) ipErrors . push ( err ) ;
11811182
11821183 // break out of the loop if status code was not retryable
1183- // eslint-disable-next-line max-depth
1184+
11841185 if (
11851186 ! (
11861187 err . statusCode &&
@@ -1231,8 +1232,6 @@ class Tangerine extends dns.promises.Resolver {
12311232 // https://github.com/mafintosh/dns-packet/issues/72
12321233 return packet . decode ( buffer ) ;
12331234 } catch ( _err ) {
1234- // NOTE: we don't need to do this (causes uncaught exception)
1235- // if (!abortController.signal.aborted) abortController.abort();
12361235 debug ( _err , { name, rrtype, ecsSubnet } ) ;
12371236 if ( this . options . returnHTTPErrors ) throw _err ;
12381237 const err = this . constructor . createError (
@@ -1258,7 +1257,7 @@ class Tangerine extends dns.promises.Resolver {
12581257 for ( const abortController of this . abortControllers ) {
12591258 if ( ! abortController . signal . aborted ) {
12601259 try {
1261- abortController . abort ( ) ;
1260+ abortController . abort ( 'Cancel invoked' ) ;
12621261 } catch ( err ) {
12631262 this . options . logger . debug ( err ) ;
12641263 }
@@ -1281,7 +1280,7 @@ class Tangerine extends dns.promises.Resolver {
12811280 'abort' ,
12821281 ( ) => {
12831282 try {
1284- abortController . abort ( ) ;
1283+ abortController . abort ( 'Parent abort controller aborted' ) ;
12851284 } catch ( err ) {
12861285 this . options . logger . debug ( err ) ;
12871286 }
0 commit comments