@@ -8,7 +8,6 @@ import https from "node:https";
88import path from "node:path" ;
99import { Writable } from "node:stream" ;
1010
11- import { GetObjectCommand , S3Client } from "@aws-sdk/client-s3" ;
1211import { loadBuildId , loadConfig } from "config/util.js" ;
1312import { OpenNextNodeResponse , StreamCreator } from "http/openNextResponse.js" ;
1413// @ts -ignore
@@ -19,16 +18,14 @@ import {
1918} from "next/dist/server/image-optimizer" ;
2019// @ts -ignore
2120import type { NextUrlWithParsedQuery } from "next/dist/server/request-meta" ;
22- import { ImageLoader , InternalEvent , InternalResult } from "types/open-next.js" ;
21+ import { InternalEvent , InternalResult } from "types/open-next.js" ;
2322
2423import { createGenericHandler } from "../core/createGenericHandler.js" ;
25- import { awsLogger , debug , error } from "./logger.js" ;
24+ import { resolveImageLoader } from "../core/resolve.js" ;
25+ import { debug , error } from "./logger.js" ;
2626import { optimizeImage } from "./plugins/image-optimization/image-optimization.js" ;
2727import { setNodeEnv } from "./util.js" ;
2828
29- // Expected environment variables
30- const { BUCKET_NAME , BUCKET_KEY_PREFIX } = process . env ;
31-
3229setNodeEnv ( ) ;
3330const nextDir = path . join ( __dirname , ".next" ) ;
3431const config = loadConfig ( nextDir ) ;
@@ -42,7 +39,6 @@ const nextConfig = {
4239} ;
4340debug ( "Init config" , {
4441 nextDir,
45- BUCKET_NAME ,
4642 nextConfig,
4743} ) ;
4844
@@ -64,7 +60,14 @@ export async function defaultHandler(
6460 const { headers, query : queryString } = event ;
6561
6662 try {
67- // const headers = normalizeHeaderKeysToLowercase(rawHeaders);
63+ // Set the HOST environment variable to the host header if it is not set
64+ // If it is set it is assumed to be set by the user and should be used instead
65+ // It might be useful for cases where the user wants to use a different host than the one in the request
66+ // It could even allow to have multiple hosts for the image optimization by setting the HOST environment variable in the wrapper for example
67+ if ( ! process . env . HOST ) {
68+ const headersHost = headers [ "x-forwarded-host" ] || headers [ "host" ] ;
69+ process . env . HOST = headersHost ;
70+ }
6871
6972 const imageParams = validateImageParams (
7073 headers ,
@@ -101,20 +104,6 @@ export async function defaultHandler(
101104// Helper functions //
102105//////////////////////
103106
104- // function normalizeHeaderKeysToLowercase(headers: APIGatewayProxyEventHeaders) {
105- // // Make header keys lowercase to ensure integrity
106- // return Object.entries(headers).reduce(
107- // (acc, [key, value]) => ({ ...acc, [key.toLowerCase()]: value }),
108- // {} as APIGatewayProxyEventHeaders,
109- // );
110- // }
111-
112- function ensureBucketExists ( ) {
113- if ( ! BUCKET_NAME ) {
114- throw new Error ( "Bucket name must be defined!" ) ;
115- }
116- }
117-
118107function validateImageParams (
119108 headers : OutgoingHttpHeaders ,
120109 query ?: InternalEvent [ "query" ] ,
@@ -218,36 +207,9 @@ function buildFailureResponse(
218207 } ;
219208}
220209
221- const resolveLoader = ( ) => {
222- const openNextParams = globalThis . openNextConfig . imageOptimization ;
223- if ( typeof openNextParams ?. loader === "function" ) {
224- return openNextParams . loader ( ) ;
225- } else {
226- const s3Client = new S3Client ( { logger : awsLogger } ) ;
227- return Promise . resolve < ImageLoader > ( {
228- name : "s3" ,
229- // @ts -ignore
230- load : async ( key : string ) => {
231- ensureBucketExists ( ) ;
232- const keyPrefix = BUCKET_KEY_PREFIX ?. replace ( / ^ \/ | \/ $ / g, "" ) ;
233- const response = await s3Client . send (
234- new GetObjectCommand ( {
235- Bucket : BUCKET_NAME ,
236- Key : keyPrefix
237- ? keyPrefix + "/" + key . replace ( / ^ \/ / , "" )
238- : key . replace ( / ^ \/ / , "" ) ,
239- } ) ,
240- ) ;
241- return {
242- body : response . Body ,
243- contentType : response . ContentType ,
244- cacheControl : response . CacheControl ,
245- } ;
246- } ,
247- } ) ;
248- }
249- } ;
250- const loader = await resolveLoader ( ) ;
210+ const loader = await resolveImageLoader (
211+ globalThis . openNextConfig . imageOptimization ?. loader ?? "s3" ,
212+ ) ;
251213
252214async function downloadHandler (
253215 _req : IncomingMessage ,
0 commit comments