{"version":3,"file":"NotModifiedChecker.cjs","sources":["../../../../../packages/engine-http/src/content/NotModifiedChecker.ts"],"sourcesContent":["import { DatabaseContext, LatestTransactionIdByStageQuery } from '@contember/engine-system-api'\nimport { Timer } from '../application'\nimport { IncomingMessage, ServerResponse } from 'node:http'\n\n\nconst NotModifiedHeaderName = 'x-contember-ref'\n\nexport interface NotModifiedCheckResult {\n\tisModified: boolean\n\tsetResponseHeader: (response: ServerResponse) => void\n}\n\nexport class NotModifiedChecker {\n\tpublic async checkNotModified({ request, body, timer, systemDatabase, stageId }: {\n\t\tbody: any\n\t\trequest: IncomingMessage\n\t\ttimer: Timer\n\t\tsystemDatabase: DatabaseContext\n\t\tstageId: string\n\t}): Promise<NotModifiedCheckResult | null> {\n\t\tif (request.headers[NotModifiedHeaderName] === undefined) {\n\t\t\treturn null\n\t\t}\n\t\tconst requestRef = request.headers[NotModifiedHeaderName]\n\t\tconst isMutation = typeof body === 'object' && body !== null && 'query' in body && String(body.query).includes('mutation')\n\t\tif (isMutation) {\n\t\t\treturn null\n\t\t}\n\t\tconst latestRef = await timer('NotModifiedCheck', () => {\n\t\t\tconst queryHandler = systemDatabase.queryHandler\n\t\t\treturn queryHandler.fetch(new LatestTransactionIdByStageQuery(stageId))\n\t\t})\n\n\t\t// No content transaction found\n\t\tif (latestRef === null) {\n\t\t\treturn null\n\t\t}\n\n\t\treturn {\n\t\t\tisModified: latestRef !== requestRef,\n\t\t\tsetResponseHeader: res => {\n\t\t\t\tif (res.statusCode === 200) {\n\t\t\t\t\tres.setHeader(NotModifiedHeaderName, latestRef)\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":["LatestTransactionIdByStageQuery"],"mappings":";;;AAKA,MAAM,wBAAwB;AAOvB,MAAM,mBAAmB;AAAA,EAC/B,MAAa,iBAAiB,EAAE,SAAS,MAAM,OAAO,gBAAgB,WAM3B;AAC1C,QAAI,QAAQ,QAAQ,qBAAqB,MAAM,QAAW;AAClD,aAAA;AAAA,IAAA;AAEF,UAAA,aAAa,QAAQ,QAAQ,qBAAqB;AACxD,UAAM,aAAa,OAAO,SAAS,YAAY,SAAS,QAAQ,WAAW,QAAQ,OAAO,KAAK,KAAK,EAAE,SAAS,UAAU;AACzH,QAAI,YAAY;AACR,aAAA;AAAA,IAAA;AAER,UAAM,YAAY,MAAM,MAAM,oBAAoB,MAAM;AACvD,YAAM,eAAe,eAAe;AACpC,aAAO,aAAa,MAAM,IAAIA,gBAAA,gCAAgC,OAAO,CAAC;AAAA,IAAA,CACtE;AAGD,QAAI,cAAc,MAAM;AAChB,aAAA;AAAA,IAAA;AAGD,WAAA;AAAA,MACN,YAAY,cAAc;AAAA,MAC1B,mBAAmB,CAAO,QAAA;AACrB,YAAA,IAAI,eAAe,KAAK;AACvB,cAAA,UAAU,uBAAuB,SAAS;AAAA,QAAA;AAAA,MAC/C;AAAA,IAEF;AAAA,EAAA;AAEF;;"}