33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
import { ProxyReqMutator } from "../index";
|
|
|
|
/**
|
|
* For AWS/GCP/Azure/Google requests, the body is signed earlier in the request
|
|
* pipeline, before the proxy middleware. This function just assigns the path
|
|
* and headers to the proxy request.
|
|
*/
|
|
export const finalizeSignedRequest: ProxyReqMutator = (manager) => {
|
|
const req = manager.request;
|
|
if (!req.signedRequest) {
|
|
throw new Error("Expected req.signedRequest to be set");
|
|
}
|
|
|
|
// The path depends on the selected model and the assigned key's region.
|
|
manager.setPath(req.signedRequest.path);
|
|
|
|
// Amazon doesn't want extra headers, so we need to remove all of them and
|
|
// reassign only the ones specified in the signed request.
|
|
const headers = req.signedRequest.headers;
|
|
Object.keys(headers).forEach((key) => {
|
|
manager.removeHeader(key);
|
|
});
|
|
Object.entries(req.signedRequest.headers).forEach(([key, value]) => {
|
|
manager.setHeader(key, value);
|
|
});
|
|
const serialized =
|
|
typeof req.signedRequest.body === "string"
|
|
? req.signedRequest.body
|
|
: JSON.stringify(req.signedRequest.body);
|
|
manager.setHeader("Content-Length", String(Buffer.byteLength(serialized)));
|
|
manager.setBody(serialized);
|
|
};
|