diff --git a/apps/backend/src/public-api/routes/v1/public.integrations.controller.ts b/apps/backend/src/public-api/routes/v1/public.integrations.controller.ts index a1de24f8..d253226a 100644 --- a/apps/backend/src/public-api/routes/v1/public.integrations.controller.ts +++ b/apps/backend/src/public-api/routes/v1/public.integrations.controller.ts @@ -125,4 +125,13 @@ export class PublicIntegrationsController { ) { return this._mediaService.generateVideo(org, body); } + + @Post('/video/:identifier/:function') + videoFunction( + @Param('identifier') identifier: string, + @Param('function') functionName: string, + @Body('params') body: any + ) { + return this._mediaService.videoFunction(identifier, functionName, body); + } } diff --git a/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts b/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts index 73623dbd..5fb3fb6e 100644 --- a/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts @@ -129,6 +129,7 @@ export class MediaService { throw new Error(`Function ${functionName} not found on video instance`); } + this._videoManager.checkAvailableVideoFunction(functionToCall); return functionToCall(body); } } diff --git a/libraries/nestjs-libraries/src/videos/images-slides/images.slides.ts b/libraries/nestjs-libraries/src/videos/images-slides/images.slides.ts index 80173dd9..e7fd1cdc 100644 --- a/libraries/nestjs-libraries/src/videos/images-slides/images.slides.ts +++ b/libraries/nestjs-libraries/src/videos/images-slides/images.slides.ts @@ -1,8 +1,6 @@ import { OpenaiService } from '@gitroom/nestjs-libraries/openai/openai.service'; import { - URL, - Video, - VideoAbstract, + ExposeVideoFunction, URL, Video, VideoAbstract } from '@gitroom/nestjs-libraries/videos/video.interface'; import { chunk } from 'lodash'; import Transloadit from 'transloadit'; @@ -228,6 +226,7 @@ export class ImagesSlides extends VideoAbstract { return results.subtitled[0].url; } + @ExposeVideoFunction() async loadVoices(data: any) { const { voices } = await ( await fetch( diff --git a/libraries/nestjs-libraries/src/videos/veo3/veo3.ts b/libraries/nestjs-libraries/src/videos/veo3/veo3.ts index 8acd8cb6..6af9c552 100644 --- a/libraries/nestjs-libraries/src/videos/veo3/veo3.ts +++ b/libraries/nestjs-libraries/src/videos/veo3/veo3.ts @@ -39,19 +39,6 @@ export class Veo3 extends VideoAbstract { output: 'vertical' | 'horizontal', customParams: Params ): Promise { - console.log({ - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${process.env.KIEAI_API_KEY}`, - }, - method: 'POST', - body: JSON.stringify({ - prompt: customParams.prompt, - imageUrls: customParams?.images?.map((p) => p.path) || [], - model: 'veo3_fast', - aspectRatio: output === 'horizontal' ? '16:9' : '9:16', - }), - }); const value = await ( await fetch('https://api.kie.ai/api/v1/veo/generate', { headers: { diff --git a/libraries/nestjs-libraries/src/videos/video.interface.ts b/libraries/nestjs-libraries/src/videos/video.interface.ts index c509cfbf..ac6335f8 100644 --- a/libraries/nestjs-libraries/src/videos/video.interface.ts +++ b/libraries/nestjs-libraries/src/videos/video.interface.ts @@ -5,9 +5,7 @@ export type URL = string; export abstract class VideoAbstract { dto: Type; - async processAndValidate( - customParams?: T - ) { + async processAndValidate(customParams?: T) { const validationPipe = new ValidationPipe({ skipMissingProperties: false, transform: true, @@ -37,6 +35,16 @@ export interface VideoParams { trial: boolean; } +export function ExposeVideoFunction() { + return function ( + target: any, + propertyKey: string, + descriptor: PropertyDescriptor + ) { + Reflect.defineMetadata('video-function', 'true', descriptor.value); + }; +} + export function Video(params: VideoParams) { return function (target: any) { // Apply @Injectable decorator to the target class diff --git a/libraries/nestjs-libraries/src/videos/video.manager.ts b/libraries/nestjs-libraries/src/videos/video.manager.ts index e422fca3..2168300e 100644 --- a/libraries/nestjs-libraries/src/videos/video.manager.ts +++ b/libraries/nestjs-libraries/src/videos/video.manager.ts @@ -22,6 +22,16 @@ export class VideoManager { ); } + checkAvailableVideoFunction(method: any) { + const videoFunction = Reflect.getMetadata('video-function', method); + if (!videoFunction) { + throw new Error( + `Method ${method.name} is not a valid video function.` + ); + } + return videoFunction; + } + getVideoByName( identifier: string ): (VideoParams & { instance: VideoAbstract }) | undefined {