@@ -31,6 +31,7 @@ import {
31
31
} from "./routing/redirector" ;
32
32
import { getRewritePath } from "./routing/rewriter" ;
33
33
import { addHeadersToResponse } from "./headers/addHeaders" ;
34
+ import type { SdkError } from "@aws-sdk/smithy-client" ;
34
35
35
36
const basePath = RoutesManifestJson . basePath ;
36
37
const NEXT_PREVIEW_DATA_COOKIE = "__next_preview_data" ;
@@ -169,6 +170,30 @@ const router = (
169
170
} ;
170
171
} ;
171
172
173
+ // Need retries to fix https://github.com/aws/aws-sdk-js-v3/issues/1196
174
+ const buildS3RetryStrategy = async ( ) => {
175
+ const { defaultRetryDecider, StandardRetryStrategy } = await import (
176
+ "@aws-sdk/middleware-retry"
177
+ ) ;
178
+
179
+ const retryDecider = ( err : SdkError & { code ?: string } ) => {
180
+ if (
181
+ "code" in err &&
182
+ ( err . code === "ECONNRESET" ||
183
+ err . code === "EPIPE" ||
184
+ err . code === "ETIMEDOUT" )
185
+ ) {
186
+ return true ;
187
+ } else {
188
+ return defaultRetryDecider ( err ) ;
189
+ }
190
+ } ;
191
+
192
+ return new StandardRetryStrategy ( async ( ) => 3 , {
193
+ retryDecider
194
+ } ) ;
195
+ } ;
196
+
172
197
export const handler = async (
173
198
event : OriginRequestEvent | OriginResponseEvent
174
199
) : Promise < CloudFrontResultResponse | CloudFrontRequest > => {
@@ -458,7 +483,12 @@ const handleOriginResponse = async ({
458
483
459
484
// Lazily import only S3Client to reduce init times until actually needed
460
485
const { S3Client } = await import ( "@aws-sdk/client-s3/S3Client" ) ;
461
- const s3 = new S3Client ( { region : request . origin ?. s3 ?. region } ) ;
486
+
487
+ const s3 = new S3Client ( {
488
+ region : request . origin ?. s3 ?. region ,
489
+ maxAttempts : 3 ,
490
+ retryStrategy : await buildS3RetryStrategy ( )
491
+ } ) ;
462
492
let pagePath ;
463
493
if (
464
494
isDataRequest ( uri ) &&
0 commit comments