UNPKG

@vtex/api

Version:
40 lines (39 loc) 1.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.response = void 0; const constants_1 = require("../../../../../constants"); const cacheControl_1 = require("../utils/cacheControl"); function setVaryHeaders(ctx, cacheControl) { ctx.vary(constants_1.HeaderKeys.FORWARDED_HOST); if (cacheControl.scope === 'segment') { ctx.vary(constants_1.HeaderKeys.SEGMENT); } if (cacheControl.scope === 'private' || ctx.query.scope === 'private') { ctx.vary(constants_1.HeaderKeys.SEGMENT); ctx.vary(constants_1.HeaderKeys.SESSION); } else if (ctx.vtex.sessionToken) { ctx.vtex.logger.warn({ message: 'GraphQL resolver receiving session token without private scope', userAgent: ctx.get('user-agent'), }); } } async function response(ctx, next) { var _a; await next(); const { cacheControl, status, graphqlResponse, } = ctx.graphql; const cacheControlHeader = (0, cacheControl_1.cacheControlHTTP)(ctx); ctx.set(constants_1.HeaderKeys.CACHE_CONTROL, cacheControlHeader); if (status === 'error') { // Do not generate etag for errors ctx.remove(constants_1.HeaderKeys.META); ctx.remove(constants_1.HeaderKeys.ETAG); (_a = ctx.vtex.recorder) === null || _a === void 0 ? void 0 : _a.clear(); } if (ctx.method.toUpperCase() === 'GET') { setVaryHeaders(ctx, cacheControl); } ctx.body = graphqlResponse; } exports.response = response;