async function insertImageWithSigning()

in amplify/backend/function/S3Triggerb6cacc90/src/index.js [56:121]


async function insertImageWithSigning(event) {

  const params = {
    Bucket: event.Records[0].s3.bucket.name,
    Key: event.Records[0].s3.object.key,
  };

  const s3Client = new S3();
  const s3MetadataResponse = await s3Client.headObject(params).promise();

  const req = new AWS.HttpRequest(appsyncUrl, region);

  const item = {
    input: {
      image: params.Key,
      username: s3MetadataResponse.Metadata.user,
      description: "Image from s3 trigger lambda"
    }
  };

  req.method = "POST";
  req.path = "/graphql";
  req.headers.host = endpoint;
  req.headers["Content-Type"] = "application/json";
  req.body = JSON.stringify({
    query: print(createIngestedImage),
    operationName: "CreateIngestedImage",
    variables: item
  });

  if (apiKey) {
    req.headers["x-api-key"] = apiKey;
  } else {
    const signer = new AWS.Signers.V4(req, "appsync", true);
    var credentials = new AWS.EnvironmentCredentials('AWS');
    signer.addAuthorization(credentials, AWS.util.date.getDate());
  }

  // const data = await axios({
  //       method: 'post',
  //       url: req.endpoint.href,
  //       data: req.body,
  //       headers: req.headers
  //   });
  const data = await new Promise((resolve, reject) => {
    const httpRequest = https.request({ ...req, host: endpoint }, (result) => {
      let data = "";

      result.on("data", (chunk) => {
        data += chunk;
      });

      result.on("end", () => {
        resolve(JSON.parse(data.toString()));
      });
    });

    httpRequest.write(req.body);
    httpRequest.end();
  });

  return {
    statusCode: 200,
    body: data
  };
}