fgiova/aws-signature

View on GitHub
src/aws/getPayloadHash.ts

Summary

Maintainability
A
25 mins
Test Coverage
A
100%
import { SHA256_HEADER, UNSIGNED_PAYLOAD } from "./constants";
import {HttpRequest, isArrayBuffer, toUint8Array} from "./utils";
import {createHash} from "crypto";

/**
 * @private
 */
export function getPayloadHash(
    { headers, body }: HttpRequest,
){
    for (const headerName of Object.keys(headers)) {
        if (headerName.toLowerCase() === SHA256_HEADER) {
            return headers[headerName];
        }
    }

    if (body == undefined) {
        return "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
    } else if (typeof body === "string" || ArrayBuffer.isView(body) || isArrayBuffer(body)) {
        return createHash("sha256").update(toUint8Array(body)).digest("hex");
    }

    // As any defined body that is not a string or binary data is a stream, this
    // body is unsignable. Attempt to send the request with an unsigned payload,
    // which may or may not be accepted by the service.
    return UNSIGNED_PAYLOAD;
}