export default async function handleGetObjectRequest()

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;
}