in function/nodejs_14_x/src/handler/get_object_handler.ts [26:67]
export default async function handleGetObjectRequest (s3Client: S3, requestContext: GetObjectContext, userRequest: UserRequest):
Promise<PromiseResult<{}, AWSError> | null> {
// Validate user request and return error if invalid
const errorMessage = validate(userRequest);
if (errorMessage != null) {
return getErrorResponse(s3Client, requestContext, ErrorCode.INVALID_REQUEST, errorMessage);
}
// Read the original object from Amazon S3
const requestHeaders = getRequestHeaders(userRequest.headers);
const objectResponse = await fetch(requestContext.inputS3Url, { // TODO: handle fetch errors
method: 'GET',
headers: requestHeaders
});
const originalObject = await objectResponse.buffer();
if (originalObject === null) {
return getErrorResponse(s3Client, requestContext, ErrorCode.NO_SUCH_KEY, 'Requested key does not exist');
}
const responseHeaders = getResponseHeaders(objectResponse.headers);
if (!objectResponse.ok) {
// Errors in the Amazon S3 response should be forwarded to the caller without invoking transformObject.
return getResponseForS3Errors(s3Client, requestContext, objectResponse, responseHeaders);
}
// Transform the object
const transformedWholeObject = transformObject(originalObject);
// Handle range or partNumber if present in the request
const transformedObject = applyRangeOrPartNumber(transformedWholeObject, userRequest);
// Send the transformed object or error back to Amazon S3 Object Lambda
if (transformedObject.hasError) {
return getErrorResponse(s3Client, requestContext, ErrorCode.INVALID_REQUEST, String(transformedObject.errorMessage), responseHeaders);
}
if (transformedObject.object !== undefined) {
return writeResponse(s3Client, requestContext, transformedObject.object, responseHeaders);
}
return null;
}