UNPKG

@vtex/payment-provider

Version:
44 lines (43 loc) 2.1 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 = (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;