UNPKG

@vtex/api

Version:
54 lines (53 loc) 1.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.vary = void 0; const constants_1 = require("../../../../../constants"); const cachingStrategies = [ { forbidden: [], path: '/_v/private/', vary: [constants_1.HeaderKeys.SEGMENT, constants_1.HeaderKeys.SESSION], }, { forbidden: [constants_1.HeaderKeys.SEGMENT, constants_1.HeaderKeys.SESSION], path: '/_v/public/', vary: [], }, { forbidden: [constants_1.HeaderKeys.SESSION], path: '/_v/segment/', vary: [constants_1.HeaderKeys.SEGMENT], }, ]; const shouldVaryByHeader = (ctx, header, strategy) => { if (strategy && strategy.vary.includes(header)) { return true; } if (process.env.DETERMINISTIC_VARY) { return false; } return !!ctx.get(header); }; async function vary(ctx, next) { const { method, path } = ctx; const strategy = cachingStrategies.find((cachingStrategy) => path.indexOf(cachingStrategy.path) === 0); if (strategy) { strategy.forbidden.forEach((headerName) => { delete ctx.headers[headerName]; }); } // We don't need to vary non GET requests, since they are never cached if (method.toUpperCase() !== 'GET') { await next(); return; } ctx.vary(constants_1.HeaderKeys.LOCALE); if (shouldVaryByHeader(ctx, constants_1.HeaderKeys.SEGMENT, strategy)) { ctx.vary(constants_1.HeaderKeys.SEGMENT); } if (shouldVaryByHeader(ctx, constants_1.HeaderKeys.SESSION, strategy)) { ctx.vary(constants_1.HeaderKeys.SESSION); } await next(); } exports.vary = vary;