import express from 'express' import { HttpStatusCode } from '@peertube/peertube-models' import { ApiCache, APICacheOptions } from './shared/index.js' const defaultOptions: APICacheOptions = { excludeStatus: [ HttpStatusCode.FORBIDDEN_403, HttpStatusCode.NOT_FOUND_404 ] } export function cacheRoute (duration: string) { const instance = new ApiCache(defaultOptions) return instance.buildMiddleware(duration) } export function cacheRouteFactory (options: APICacheOptions = {}) { const instance = new ApiCache({ ...defaultOptions, ...options }) return { instance, middleware: instance.buildMiddleware.bind(instance) } } // --------------------------------------------------------------------------- export function buildPodcastGroupsCache (options: { channelId: number }) { return 'podcast-feed-' + options.channelId } export function buildAPVideoChaptersGroupsCache (options: { videoId: number | string }) { return 'ap-video-chapters-' + options.videoId } // --------------------------------------------------------------------------- export const videoFeedsPodcastSetCacheKey = [ (req: express.Request, res: express.Response, next: express.NextFunction) => { if (req.query.videoChannelId) { res.locals.apicacheGroups = [ buildPodcastGroupsCache({ channelId: req.query.videoChannelId }) ] } return next() } ] export const apVideoChaptersSetCacheKey = [ (req: express.Request, res: express.Response, next: express.NextFunction) => { if (req.params.id) { res.locals.apicacheGroups = [ buildAPVideoChaptersGroupsCache({ videoId: req.params.id }) ] } return next() } ]