1
1
import async from "async" ;
2
2
3
+ import { HTTPClient } from "../../lib/http.js" ;
3
4
import {
4
5
AfterErrorContext ,
5
6
AfterErrorHook ,
@@ -24,12 +25,10 @@ import {
24
25
stringToBoolean ,
25
26
} from "./utils/index.js" ;
26
27
import {
27
- HTTPClientExtension ,
28
28
MIN_PAGES_PER_THREAD ,
29
29
PARTITION_FORM_FILES_KEY ,
30
30
PARTITION_FORM_SPLIT_PDF_PAGE_KEY ,
31
31
} from "./common.js" ;
32
- import { retry , RetryConfig } from "../../lib/retries" ;
33
32
34
33
/**
35
34
* Represents a hook for splitting and sending PDF files as per page requests.
@@ -40,7 +39,8 @@ export class SplitPdfHook
40
39
/**
41
40
* The HTTP client used for making requests.
42
41
*/
43
- client : HTTPClientExtension | undefined ;
42
+ client : HTTPClient | undefined ;
43
+
44
44
45
45
/**
46
46
* Keeps the strict-mode setting for splitPdfPage feature.
@@ -68,16 +68,9 @@ export class SplitPdfHook
68
68
* @returns The initialized SDK options.
69
69
*/
70
70
sdkInit ( opts : SDKInitOptions ) : SDKInitOptions {
71
- const { baseURL } = opts ;
72
- this . client = new HTTPClientExtension ( ) ;
73
-
74
- this . client . addHook ( "response" , ( res ) => {
75
- if ( res . status != 200 ) {
76
- console . error ( "Request failed with status code" , `${ res . status } ` ) ;
77
- }
78
- } ) ;
79
-
80
- return { baseURL : baseURL , client : this . client } ;
71
+ const { baseURL, client } = opts ;
72
+ this . client = client ;
73
+ return { baseURL : baseURL , client : client } ;
81
74
}
82
75
83
76
/**
@@ -185,48 +178,23 @@ export class SplitPdfHook
185
178
file . name ,
186
179
firstPageNumber
187
180
) ;
188
- const timeoutInMs = 60 * 10 * 1000 ;
189
181
const req = new Request ( requestClone , {
190
182
headers,
191
183
body,
192
- signal : AbortSignal . timeout ( timeoutInMs )
193
184
} ) ;
194
185
requests . push ( req ) ;
195
186
setIndex += 1 ;
196
187
}
197
188
198
189
this . partitionSuccessfulResponses [ operationID ] = new Array ( requests . length ) ;
199
- this . partitionFailedResponses [ operationID ] = new Array ( requests . length ) ;
200
190
201
191
const allowFailed = this . allowFailed ;
202
192
203
- // These are the retry values from our api spec
204
- // We need to hardcode them here until we're able to reuse the SDK
205
- // from within this hook
206
- const oneSecond = 1000 ;
207
- const oneMinute = 1000 * 60 ;
208
- const retryConfig = {
209
- strategy : "backoff" ,
210
- backoff : {
211
- initialInterval : oneSecond * 3 ,
212
- maxInterval : oneMinute * 12 ,
213
- exponent : 1.88 ,
214
- maxElapsedTime : oneMinute * 30 ,
215
- } ,
216
- } as RetryConfig ;
217
-
218
- const retryCodes = [ "502" , "503" , "504" ] ;
219
-
220
193
this . partitionRequests [ operationID ] = async . parallelLimit (
221
- requests . map ( ( req , pageIndex ) => async ( ) => {
194
+ requests . slice ( 0 , - 1 ) . map ( ( req , pageIndex ) => async ( ) => {
222
195
const pageNumber = pageIndex + startingPageNumber ;
223
196
try {
224
- const response = await retry (
225
- async ( ) => {
226
- return await this . client ! . request ( req . clone ( ) ) ;
227
- } ,
228
- { config : retryConfig , statusCodes : retryCodes }
229
- ) ;
197
+ const response = await this . client ! . request ( req ) ;
230
198
if ( response . status === 200 ) {
231
199
( this . partitionSuccessfulResponses [ operationID ] as Response [ ] ) [ pageIndex ] =
232
200
response . clone ( ) ;
@@ -238,7 +206,7 @@ export class SplitPdfHook
238
206
}
239
207
}
240
208
} catch ( e ) {
241
- console . error ( `Failed to send request for page ${ pageNumber } .` , e ) ;
209
+ console . error ( `Failed to send request for page ${ pageNumber } .` ) ;
242
210
if ( ! allowFailed ) {
243
211
throw e ;
244
212
}
@@ -247,8 +215,7 @@ export class SplitPdfHook
247
215
concurrencyLevel
248
216
) ;
249
217
250
- const dummyRequest = new Request ( "https://no-op/" ) ;
251
- return dummyRequest ;
218
+ return requests . at ( - 1 ) as Request ;
252
219
}
253
220
254
221
/**
@@ -263,39 +230,28 @@ export class SplitPdfHook
263
230
successfulResponses : Response [ ] ,
264
231
failedResponses : Response [ ]
265
232
) : Promise < Response > {
266
- let realResponse = response . clone ( ) ;
267
- const firstSuccessfulResponse = successfulResponses . at ( 0 ) ;
268
- const isFakeResponse = response . headers . has ( "fake-response" ) ;
269
- if ( firstSuccessfulResponse !== undefined && isFakeResponse ) {
270
- realResponse = firstSuccessfulResponse . clone ( ) ;
271
- }
272
-
273
233
let responseBody , responseStatus , responseStatusText ;
274
234
const numFailedResponses = failedResponses ?. length ?? 0 ;
275
- const headers = prepareResponseHeaders ( realResponse ) ;
235
+ const headers = prepareResponseHeaders ( response ) ;
276
236
277
237
if ( ! this . allowFailed && failedResponses && failedResponses . length > 0 ) {
278
238
const failedResponse = failedResponses [ 0 ] ?. clone ( ) ;
279
239
if ( failedResponse ) {
280
240
responseBody = await failedResponse . text ( ) ;
241
+ responseStatus = failedResponse . status ;
281
242
responseStatusText = failedResponse . statusText ;
282
243
} else {
283
244
responseBody = JSON . stringify ( { "details:" : "Unknown error" } ) ;
245
+ responseStatus = 503
284
246
responseStatusText = "Unknown error"
285
247
}
286
- // if the response status is unknown or was 502, 503, 504, set back to 500 to ensure we don't cause more retries
287
- responseStatus = 500 ;
288
248
console . warn (
289
249
`${ numFailedResponses } requests failed. The partition operation is cancelled.`
290
250
) ;
291
251
} else {
292
- if ( isFakeResponse ) {
293
- responseBody = await prepareResponseBody ( [ ...successfulResponses ] ) ;
294
- } else {
295
- responseBody = await prepareResponseBody ( [ ...successfulResponses , response ] ) ;
296
- }
297
- responseStatus = realResponse . status
298
- responseStatusText = realResponse . statusText
252
+ responseBody = await prepareResponseBody ( [ ...successfulResponses , response ] ) ;
253
+ responseStatus = response . status
254
+ responseStatusText = response . statusText
299
255
if ( numFailedResponses > 0 ) {
300
256
console . warn (
301
257
`${ numFailedResponses } requests failed. The results might miss some pages.`
0 commit comments