@vtex/api
Version:
VTEX I/O API client
40 lines (39 loc) • 1.52 kB
JavaScript
;
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;