58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
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()
|
|
}
|
|
]
|