UNPKG

@vtex/payment-provider-sdk

Version:
44 lines (43 loc) 2.05 kB
"use strict"; 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 = ramda_1.pipe(ramda_1.toLower, ramda_1.either(ramda_1.startsWith(vtexHeaderPrefix), 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 (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 = ramda_1.pickBy(nonProxyable, config.headers); const forwardableHeaders = ramda_1.omit(ramda_1.keys(nonFowardableHeaders), config.headers); const renamedHeaders = ramda_1.mapObjIndexed(forward, forwardableHeaders); // add x-provider-forward const forwardedToProvider = 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;