@vtex/payment-provider
Version:
VTEX Payment Provider SDK
44 lines (43 loc) • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useSecureProxy = void 0;
const url_1 = require("url");
const util_1 = require("util");
const ramda_1 = require("ramda");
const utils_1 = require("./utils");
const nonProxyableHeaders = ['proxy-authorization', 'content-type', 'accept'];
const vtexHeaderPrefix = 'x-vtex-';
const forwardPrefix = 'x-provider-forward-';
const nonProxyable = (0, ramda_1.pipe)(ramda_1.toLower, (0, ramda_1.either)((0, ramda_1.startsWith)(vtexHeaderPrefix), (0, ramda_1.contains)(ramda_1.__, nonProxyableHeaders)));
const forward = (_, headerName) => `${forwardPrefix}${headerName}`;
const useProtocol = (protocol) => (urlString) => {
const url = new url_1.URL(urlString);
url.protocol = protocol;
return url.toString();
};
const toHTTP = useProtocol('http');
const toHTTPS = useProtocol('https');
const useSecureProxy = (baseUrl) => async (middlewareContext, next) => {
const { config } = middlewareContext;
const secureProxyUrl = config.secureProxy;
if ((0, util_1.isNullOrUndefined)(secureProxyUrl)) {
await next();
return;
}
const destinationURL = `${baseUrl}${config.url}`;
// IO Works only in http and then use X-Vtex-Use-Https header to specify for that the destination should receive in https
config.headers.to = toHTTPS(destinationURL);
const nonFowardableHeaders = (0, ramda_1.pickBy)(nonProxyable, config.headers);
const forwardableHeaders = (0, ramda_1.omit)((0, ramda_1.keys)(nonFowardableHeaders), config.headers);
const renamedHeaders = (0, ramda_1.mapObjIndexed)(forward, forwardableHeaders); // add x-provider-forward
const forwardedToProvider = (0, utils_1.renameKeys)(renamedHeaders, forwardableHeaders);
// Need switch to http then router will reroute to https
middlewareContext.config.url = toHTTP(secureProxyUrl);
middlewareContext.config.baseURL = undefined;
middlewareContext.config.headers = {
...nonFowardableHeaders,
...forwardedToProvider,
};
await next();
};
exports.useSecureProxy = useSecureProxy;