import { OutgoingHttpHeaders } from 'http' import { RegisterServerAuthExternalOptions } from '@server/types' import { MAbuseMessage, MAbuseReporter, MAccountBlocklist, MActorFollowActorsDefault, MActorUrl, MChannelBannerAccountDefault, MStreamingPlaylist, MVideoChangeOwnershipFull, MVideoFile, MVideoFormattableDetails, MVideoId, MVideoImmutable, MVideoLive, MVideoPlaylistFull, MVideoPlaylistFullSummary } from '@server/types/models' import { MOAuthTokenUser } from '@server/types/models/oauth/oauth-token' import { MPlugin, MServer, MServerBlocklist } from '@server/types/models/server' import { MVideoImportDefault } from '@server/types/models/video/video-import' import { MVideoPlaylistElement, MVideoPlaylistElementVideoUrlPlaylistPrivacy } from '@server/types/models/video/video-playlist-element' import { MAccountVideoRateAccountVideo } from '@server/types/models/video/video-rate' import { HttpMethod, PeerTubeProblemDocumentData, ServerErrorCode, VideoCreate } from '@shared/models' import { File as UploadXFile, Metadata } from '@uploadx/core' import { RegisteredPlugin } from '../../lib/plugins/plugin-manager' import { MAccountDefault, MActorAccountChannelId, MActorFollowActorsDefaultSubscription, MActorFull, MComment, MCommentOwnerVideoReply, MUserDefault, MVideoBlacklist, MVideoCaptionVideo, MVideoFullLight, MVideoRedundancyVideo, MVideoShareActor, MVideoThumbnail } from '../../types/models' import { Writable } from 'stream' declare module 'express' { export interface Request { query: any method: HttpMethod } // Upload using multer or uploadx middleware export type MulterOrUploadXFile = UploadXFile | Express.Multer.File export type UploadFiles = { [fieldname: string]: MulterOrUploadXFile[] } | MulterOrUploadXFile[] // Partial object used by some functions to check the file mimetype/extension export type UploadFileForCheck = { originalname: string mimetype: string } export type UploadFilesForCheck = { [fieldname: string]: UploadFileForCheck[] } | UploadFileForCheck[] // Upload file with a duration added by our middleware export type VideoUploadFile = Pick & { duration: number } // Extends Metadata property of UploadX object export type UploadXFileMetadata = Metadata & VideoCreate & { previewfile: Express.Multer.File[] thumbnailfile: Express.Multer.File[] } // Our custom UploadXFile object using our custom metadata export type CustomUploadXFile = UploadXFile & { metadata: T } export type EnhancedUploadXFile = CustomUploadXFile & { duration: number path: string filename: string } // Extends Response with added functions and potential variables passed by middlewares interface Response { fail: (options: { message: string title?: string status?: number type?: ServerErrorCode instance?: string data?: PeerTubeProblemDocumentData }) => void locals: { apicache: { content: string | Buffer write: Writable['write'] writeHead: Response['writeHead'] end: Response['end'] cacheable: boolean headers: OutgoingHttpHeaders } docUrl?: string videoAPI?: MVideoFormattableDetails videoAll?: MVideoFullLight onlyImmutableVideo?: MVideoImmutable onlyVideo?: MVideoThumbnail videoId?: MVideoId videoLive?: MVideoLive videoShare?: MVideoShareActor videoFile?: MVideoFile videoFileResumable?: EnhancedUploadXFile videoImport?: MVideoImportDefault videoBlacklist?: MVideoBlacklist videoCaption?: MVideoCaptionVideo abuse?: MAbuseReporter abuseMessage?: MAbuseMessage videoStreamingPlaylist?: MStreamingPlaylist videoChannel?: MChannelBannerAccountDefault videoPlaylistFull?: MVideoPlaylistFull videoPlaylistSummary?: MVideoPlaylistFullSummary videoPlaylistElement?: MVideoPlaylistElement videoPlaylistElementAP?: MVideoPlaylistElementVideoUrlPlaylistPrivacy accountVideoRate?: MAccountVideoRateAccountVideo videoCommentFull?: MCommentOwnerVideoReply videoCommentThread?: MComment follow?: MActorFollowActorsDefault subscription?: MActorFollowActorsDefaultSubscription nextOwner?: MAccountDefault videoChangeOwnership?: MVideoChangeOwnershipFull account?: MAccountDefault actorUrl?: MActorUrl actorFull?: MActorFull user?: MUserDefault server?: MServer videoRedundancy?: MVideoRedundancyVideo accountBlock?: MAccountBlocklist serverBlock?: MServerBlocklist oauth?: { token: MOAuthTokenUser } signature?: { actor: MActorAccountChannelId } authenticated?: boolean registeredPlugin?: RegisteredPlugin externalAuth?: RegisterServerAuthExternalOptions plugin?: MPlugin } } }