| 28 | } |
| 29 | |
| 30 | export const getFreshOrStale = ( |
| 31 | req: Pick<Request, 'headers' | 'method'>, |
| 32 | res: Pick<Response, 'getHeader' | 'statusCode'> |
| 33 | ) => { |
| 34 | const method = req.method |
| 35 | const status = res.statusCode |
| 36 | |
| 37 | // GET or HEAD for weak freshness validation only |
| 38 | if (method !== 'GET' && method !== 'HEAD') return false |
| 39 | |
| 40 | // 2xx or 304 as per rfc2616 14.26 |
| 41 | if ((status >= 200 && status < 300) || status === 304) { |
| 42 | return fresh(req.headers, { |
| 43 | etag: res.getHeader('ETag'), |
| 44 | 'last-modified': res.getHeader('Last-Modified') |
| 45 | }) |
| 46 | } |
| 47 | |
| 48 | return false |
| 49 | } |
| 50 | |
| 51 | export const checkIfXMLHttpRequest = (req: Pick<Request, 'headers'>) => |
| 52 | req.headers['X-Requested-With'] === 'XMLHttpRequest' |