UNPKG

n8n-nodes-selfhosthub

Version:

Collection of n8n nodes for self-hosted AI services, including Leonardo.ai integration for AI image and content generation capabilities.

175 lines 8.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CreateJ2vMovie = void 0; const createMovie_1 = require("./operations/createMovie"); const mergeVideoAudio_1 = require("./operations/mergeVideoAudio"); const mergeVideos_1 = require("./operations/mergeVideos"); const requestBuilder_1 = require("./utils/requestBuilder"); class CreateJ2vMovie { constructor() { this.description = { displayName: 'Self-Host Hub (JSON2Video)', name: 'createJ2vMovie', icon: 'file:createJ2vMovie.png', group: [], version: 1, subtitle: '=', description: 'Create videos with the JSON2Video API', defaults: { name: 'Self-Host Hub (JSON2Video)', }, // We use NodeConnectionType.Main directly because isolatedModules is disabled in tsconfig.json // If isolatedModules is enabled, these would need to be replaced with string literals and type assertions // For more details, see docs/DEVELOPMENT_GUIDELINES.md#typescript-configuration inputs: [ { type: 'main', displayName: 'Input', }, ], outputs: [ { type: 'main', displayName: 'Output', }, ], credentials: [ { name: 'json2VideoApiCredentials', required: true, }, ], properties: [ // Core operation selector { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, options: [ { name: 'Create Movie', value: 'createMovie', }, { name: 'Merge Video and Audio', value: 'mergeVideoAudio', }, { name: 'Merge Videos', value: 'mergeVideos', }, ], default: 'createMovie', }, // Advanced Mode toggle for each operation createMovie_1.createMovieAdvancedModeParameter, mergeVideoAudio_1.mergeVideoAudioAdvancedModeParameter, mergeVideos_1.mergeVideosAdvancedModeParameter, // JSON Template for advanced mode for each operation createMovie_1.createMovieJsonTemplateParameter, mergeVideoAudio_1.mergeVideoAudioJsonTemplateParameter, mergeVideos_1.mergeVideosJsonTemplateParameter, // Import parameter definitions for each operation - validate each parameter has required fields ...createMovie_1.createMovieParameters.filter(p => p && typeof p.name === 'string'), ...createMovie_1.createMovieAdvancedParameters.filter(p => p && typeof p.name === 'string'), ...mergeVideoAudio_1.mergeVideoAudioParameters.filter(p => p && typeof p.name === 'string'), ...mergeVideoAudio_1.mergeVideoAudioAdvancedParameters.filter(p => p && typeof p.name === 'string'), ...mergeVideos_1.mergeVideosParameters.filter(p => p && typeof p.name === 'string'), ...mergeVideos_1.mergeVideosAdvancedParameters.filter(p => p && typeof p.name === 'string'), ], }; } async execute() { const items = this.getInputData(); const returnData = []; const credentials = await this.getCredentials('json2VideoApiCredentials'); const apiKey = credentials.apiKey; // Process each item for (let i = 0; i < items.length; i++) { try { // Get operation type const operation = String(this.getNodeParameter('operation', i, '')); // Check for advanced mode based on operation let isAdvancedMode = false; if (operation === 'createMovie') { isAdvancedMode = this.getNodeParameter('advancedMode', i, true); } else if (operation === 'mergeVideoAudio') { isAdvancedMode = this.getNodeParameter('advancedModeMergeAudio', i, true); } else if (operation === 'mergeVideos') { isAdvancedMode = this.getNodeParameter('advancedModeMergeVideos', i, true); } // Log parameters for debugging try { const movieElements = this.getNodeParameter('movieElements.elementValues', i, []); const elements = this.getNodeParameter('elements.elementValues', i, []); } catch (error) { } // Build request body using the centralized utility const requestBody = requestBuilder_1.buildRequestBody.call(this, operation, i, isAdvancedMode); // Get recordId and webhookUrl for the API URL parameters const recordId = String(this.getNodeParameter('recordId', i, '')); const webhookUrl = String(this.getNodeParameter('webhookUrl', i, '')); // Common API call setup const options = { method: 'POST', url: '', body: requestBody, headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey, }, json: true, }; // Set the appropriate API endpoint based on operation switch (operation) { case 'createMovie': case 'mergeVideoAudio': case 'mergeVideos': options.url = `https://api.json2video.com/v2/movies?id=${recordId}&webhook=${encodeURIComponent(webhookUrl)}`; break; case 'checkStatus': const jobId = this.getNodeParameter('jobId', i); options.url = `https://api.json2video.com/v2/movies/${jobId}`; options.method = 'GET'; break; } // Make the API request const responseData = await this.helpers.request(options); // Handle the API response properly - JSON2Video returns an object, not an array let processedResponse; if (Array.isArray(responseData)) { processedResponse = responseData; } else { // Single object response - wrap in array processedResponse = [responseData]; } // Return the API response const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(processedResponse), { itemData: { item: i } }); returnData.push(...executionData); } catch (error) { if (this.continueOnFail()) { // Add error as json to output returnData.push({ json: { error: error.message || 'Unknown error occurred', }, pairedItem: { item: i, }, }); continue; } throw error; } } return [returnData]; } } exports.CreateJ2vMovie = CreateJ2vMovie; //# sourceMappingURL=CreateJ2vMovie.node.js.map