UNPKG

n8n-nodes-straico-official

Version:
1,203 lines (1,202 loc) 122 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StraicoOfficial = void 0; const n8n_workflow_1 = require("n8n-workflow"); class StraicoOfficial { constructor() { this.description = { displayName: 'Straico Official', name: 'straicoOfficial', icon: 'file:straico.svg', group: ['transform'], version: [1, 2], subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Get data from Straico API', defaults: { name: 'Straico Official', }, inputs: ['main'], outputs: ['main'], credentials: [ { name: 'straicoApi', required: true, }, ], requestDefaults: { baseURL: 'https://api.straico.com', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, }, properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'Agent', value: 'agent', }, { name: 'Chat', value: 'chat', }, { name: 'File', value: 'file', }, { name: 'Image', value: 'image', }, { name: 'Model', value: 'models', }, { name: 'Prompt', value: 'prompt', }, { name: 'RAG', value: 'rag', }, { name: 'TTS', value: 'tts', }, { name: 'User', value: 'user', }, { name: 'Video', value: 'video', }, ], default: 'prompt', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['user'], }, }, options: [ { name: 'Get Info', value: 'get', action: 'Get user information', routing: { request: { method: 'GET', url: '/v0/user', }, }, }, ], default: 'get', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['models'], }, }, options: [ { name: 'Get Many', value: 'getAll', action: 'Get all models information v1', routing: { request: { method: 'GET', url: '/v1/models', }, }, }, { name: 'Get All Models v2', value: 'getAllModelsInfo', action: 'Get all models information v2', }, { name: 'Get Specific Model v2', value: 'getSpecificModel', action: 'Get specific model information v2', }, ], default: 'getAll', }, { displayName: 'Model ID', name: 'modelId', type: 'string', default: '', required: true, description: 'The ID of the specific model to get information for (e.g., openai/gpt-4, meta-llama/llama-3.1-8b)', placeholder: 'openai/gpt-4.1', displayOptions: { show: { resource: ['models'], operation: ['getSpecificModel'], }, }, }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['prompt'], }, }, options: [ { name: 'Completion', value: 'completion', action: 'Create a completion', routing: { request: { method: 'POST', url: '/v1/prompt/completion', }, }, }, ], default: 'completion', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['chat'], }, }, options: [ { name: 'Completion V2', value: 'completionV2', action: 'Create a chat completion', routing: { request: { method: 'POST', url: '/v2/chat/completions', }, }, }, ], default: 'completionV2', }, { displayName: 'Model Names or IDs', name: 'models', type: 'multiOptions', description: 'Choose from the list, or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>', hint: 'Select one or more models for completion. Leave empty to use smart LLM selector.', typeOptions: { loadOptionsMethod: 'getModels', }, default: [], displayOptions: { show: { resource: ['prompt'], operation: ['completion'], }, }, routing: { request: { body: { models: '={{ $value }}', }, }, }, }, { displayName: 'Message', name: 'message', type: 'string', typeOptions: { rows: 4, }, default: '', required: true, displayOptions: { show: { resource: ['prompt'], operation: ['completion'], }, }, routing: { request: { body: { message: '={{ $value }}', }, }, }, }, { displayName: 'Smart LLM Selector', name: 'smart_llm_selector', type: 'collection', placeholder: 'Add Selector', default: {}, displayOptions: { show: { resource: ['prompt'], operation: ['completion'], '@version': [1, 2], }, }, options: [ { displayName: 'Quantity', name: 'quantity', type: 'number', default: 1, description: 'Number of models to select (1-4)', typeOptions: { minValue: 1, maxValue: 4, }, }, { displayName: 'Pricing Method', name: 'pricing_method', type: 'options', options: [ { name: 'Quality', value: 'quality' }, { name: 'Balance', value: 'balance' }, { name: 'Budget', value: 'budget' }, ], default: 'balance', description: 'Pricing strategy for model selection', }, ], }, { displayName: 'Additional Fields', name: 'additionalFields', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: ['prompt'], operation: ['completion'], }, }, options: [ { displayName: 'Display Transcripts', name: 'display_transcripts', type: 'boolean', default: false, description: 'Whether to return transcripts of the files', }, { displayName: 'File URLs', name: 'file_urls', type: 'string', default: '', hint: 'e.g. https://example.com/file1.pdf,https://example.com/file2.docx', description: 'Comma-separated list of file URLs to analyze (up to 4, previously uploaded via the File Upload endpoint)', }, { displayName: 'Images', name: 'images', type: 'string', default: '', hint: 'e.g. https://example.com/image1.jpg,https://example.com/image2.png', description: 'Comma-separated list of image URLs', }, { displayName: 'Max Tokens', name: 'max_tokens', type: 'number', default: 100, description: 'Maximum tokens to generate', typeOptions: { minValue: 1, maxValue: 2048, }, }, { displayName: 'Replace Failed Models', name: 'replace_failed_models', type: 'boolean', default: false, description: 'Whether to replace failed models with similar ones if available', }, { displayName: 'Temperature', name: 'temperature', type: 'number', default: 0.7, description: 'Controls creativity and diversity of generated text (0-2)', typeOptions: { minValue: 0, maxValue: 2, }, }, { displayName: 'YouTube URLs', name: 'youtube_urls', type: 'string', default: '', hint: 'e.g. https://youtube.com/watch?v=abc123,https://youtube.com/watch?v=def456', description: 'Comma-separated list of YouTube video URLs to analyze (up to 4)', }, ], }, { displayName: 'Simplify', name: 'simplify', type: 'boolean', default: false, description: 'Whether to return a simplified version of the response instead of the raw data', displayOptions: { show: { resource: ['prompt'], operation: ['completion'], }, }, }, { displayName: 'Model Names or IDs', name: 'models', type: 'multiOptions', description: 'Choose from the list, or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>', hint: 'Select one model for chat completion. Leave empty to use smart LLM selector.', typeOptions: { loadOptionsMethod: 'getModels', }, default: [], displayOptions: { show: { resource: ['chat'], operation: ['completionV2'], }, }, }, { displayName: 'Previous Messages', name: 'previousMessages', type: 'json', default: '', description: 'Messages from previous chat completion (drag and drop from previous node output). Should be an array of message objects.', hint: 'Designed for drag and drop the full_current_chat field from previous completions outputs.', placeholder: '[{"role": "user", "content": "Hello"}, {"role": "assistant", "content": "Hi!"}]', displayOptions: { show: { resource: ['chat'], operation: ['completionV2'], }, }, }, { displayName: 'New Messages', name: 'messages', type: 'fixedCollection', default: { message: [{ role: 'user', content: [{ type: 'text', text: '' }] }] }, required: false, description: 'New messages to add to the chat completion (will be appended after previous messages)', displayOptions: { show: { resource: ['chat'], operation: ['completionV2'], }, }, typeOptions: { multipleValues: true, }, options: [ { name: 'message', displayName: 'Message', values: [ { displayName: 'Role', name: 'role', type: 'options', options: [ { name: 'User', value: 'user', }, { name: 'Assistant', value: 'assistant', }, ], default: 'user', description: 'The role of the message sender', }, { displayName: 'Content', name: 'content', type: 'fixedCollection', default: { item: [{ type: 'text', text: '' }] }, required: true, description: 'The content of the message', typeOptions: { multipleValues: true, }, options: [ { name: 'item', displayName: 'Content Item', values: [ { displayName: 'Type', name: 'type', type: 'options', options: [ { name: 'Text', value: 'text', }, { name: 'Image URL', value: 'image_url', }, ], default: 'text', description: 'The type of content', }, { displayName: 'Text', name: 'text', type: 'string', default: '', description: 'The text content', displayOptions: { show: { type: ['text'], }, }, }, { displayName: 'Image URL', name: 'image_url', type: 'string', default: '', description: 'The URL of the image', displayOptions: { show: { type: ['image_url'], }, }, }, ], }, ], }, ], }, ], routing: { request: { body: { messages: '={{ $value.message }}', }, }, }, }, { displayName: 'Smart LLM Selector', name: 'smart_llm_selector', type: 'collection', placeholder: 'Add Selector', default: {}, displayOptions: { show: { resource: ['chat'], operation: ['completionV2'], '@version': [1, 2], }, }, options: [ { displayName: 'Pricing Method', name: 'pricing_method', type: 'options', options: [ { name: 'Quality', value: 'quality' }, { name: 'Balance', value: 'balance' }, { name: 'Budget', value: 'budget' }, ], default: 'balance', description: 'Pricing strategy for model selection', }, ], }, { displayName: 'Additional Fields', name: 'additionalFields', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: ['chat'], operation: ['completionV2'], }, }, options: [ { displayName: 'Temperature', name: 'temperature', type: 'number', default: 0.7, description: 'Controls creativity and diversity of generated text (0-2)', typeOptions: { minValue: 0, maxValue: 2, }, }, { displayName: 'Max Tokens', name: 'max_tokens', type: 'number', default: 100, description: 'Maximum tokens to generate', typeOptions: { minValue: 1, maxValue: 2048, }, }, { displayName: 'Replace Failed Models', name: 'replace_failed_models', type: 'boolean', default: false, description: 'Whether to replace failed models with similar ones if available', }, ], }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['image'], }, }, options: [ { name: 'Generate Image', value: 'generate', action: 'Generate an image v0', routing: { request: { method: 'POST', url: '/v0/image/generation', }, }, }, { name: 'Generate Image V1', value: 'generateV1', action: 'Generate an image v1', routing: { request: { method: 'POST', url: '/v1/image/generation', }, }, }, ], default: 'generate', }, { displayName: 'Model', name: 'model', type: 'string', default: 'openai/dall-e-3', required: true, displayOptions: { show: { resource: ['image'], operation: ['generate'], }, }, routing: { request: { body: { model: '={{ $value }}', }, }, }, }, { displayName: 'Description', name: 'description', type: 'string', typeOptions: { rows: 3, }, default: '', required: true, displayOptions: { show: { resource: ['image'], operation: ['generate'], }, }, routing: { request: { body: { description: '={{ $value }}', }, }, }, }, { displayName: 'Size', name: 'size', type: 'options', options: [ { name: 'Square', value: 'square', }, { name: 'Landscape', value: 'landscape', }, { name: 'Portrait', value: 'portrait', }, ], default: 'landscape', required: true, displayOptions: { show: { resource: ['image'], operation: ['generate'], }, }, routing: { request: { body: { size: '={{ $value }}', }, }, }, }, { displayName: 'Variations', name: 'variations', type: 'number', typeOptions: { minValue: 1, maxValue: 4, }, default: 1, required: true, displayOptions: { show: { resource: ['image'], operation: ['generate'], }, }, routing: { request: { body: { variations: '={{ $value }}', }, }, }, }, { displayName: 'Seed', name: 'seed', type: 'number', default: null, description: 'Seed for reproducibility (only for flux and ideogram models)', typeOptions: { minValue: 0, maxValue: 2147483647, }, displayOptions: { show: { resource: ['image'], operation: ['generate'], }, }, }, { displayName: 'Enhance Prompt', name: 'enhance', type: 'boolean', default: false, description: 'Whether to use AI to enhance the original prompt', displayOptions: { show: { resource: ['image'], operation: ['generate'], }, }, }, { displayName: 'Custom Enhancer', name: 'customEnhancer', type: 'string', default: '', description: 'Custom instructions for the AI to enhance the prompt', displayOptions: { show: { resource: ['image'], operation: ['generate'], enhance: [true], }, }, }, { displayName: 'Model', name: 'model', type: 'options', description: 'Choose from the list, or specify ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>', typeOptions: { loadOptionsMethod: 'getImageModels', }, default: '', required: true, displayOptions: { show: { resource: ['image'], operation: ['generateV1'], }, }, routing: { request: { body: { model: '={{ $value }}', }, }, }, }, { displayName: 'Description', name: 'description', type: 'string', typeOptions: { rows: 4, }, default: '', required: true, description: 'A detailed textual description of the image to be generated', displayOptions: { show: { resource: ['image'], operation: ['generateV1'], }, }, routing: { request: { body: { description: '={{ $value }}', }, }, }, }, { displayName: 'Size', name: 'size', type: 'options', options: [ { name: 'Square', value: 'square', }, { name: 'Square HD', value: 'square_hd', }, { name: 'Landscape', value: 'landscape', }, { name: 'Portrait', value: 'portrait', }, ], default: 'square', required: true, description: 'The desired image dimensions. Square HD is only available for fal-ai/bytedance/seedream/v4/edit model', displayOptions: { show: { resource: ['image'], operation: ['generateV1'], }, }, routing: { request: { body: { size: '={{ $value }}', }, }, }, }, { displayName: 'Variations', name: 'variations', type: 'number', typeOptions: { minValue: 1, maxValue: 4, }, default: 1, required: true, description: 'Number of images to generate. Minimum: 1, Maximum: 4', displayOptions: { show: { resource: ['image'], operation: ['generateV1'], }, }, routing: { request: { body: { variations: '={{ $value }}', }, }, }, }, { displayName: 'Image URLs', name: 'image_urls', type: 'string', typeOptions: { multipleValues: true, multipleValueButtonText: 'Add Image URL', }, default: [], description: 'An array of image URLs that will be used as context. Applies to fal-ai/nano-banana-edit and fal-ai/bytedance/seedream/v4/edit models', displayOptions: { show: { resource: ['image'], operation: ['generateV1'], model: ['fal-ai/nano-banana-edit', 'fal-ai/bytedance/seedream/v4/edit'], }, }, routing: { request: { body: { image_urls: '={{ $value }}', }, }, }, }, { displayName: 'Image URL', name: 'image_url', type: 'string', default: '', description: 'String with the image URL to be used as context or edition base. Applies to fal-ai/ideogram/v3/replace-background and fal-ai/flux-pro/kontext models', displayOptions: { show: { resource: ['image'], operation: ['generateV1'], model: ['fal-ai/ideogram/v3/replace-background', 'fal-ai/flux-pro/kontext'], }, }, routing: { request: { body: { image_url: '={{ $value }}', }, }, }, }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['video'], }, }, options: [ { name: 'Generate Video', value: 'generate', action: 'Generate a video from image', routing: { request: { method: 'POST', url: '/v1/image/tovideo', }, }, }, ], default: 'generate', }, { displayName: 'Model', name: 'model', type: 'options', description: 'Choose from the list, or specify ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>', typeOptions: { loadOptionsMethod: 'getVideoModels', }, default: '', required: true, displayOptions: { show: { resource: ['video'], operation: ['generate'], }, }, routing: { request: { body: { model: '={{ $value }}', }, }, }, }, { displayName: 'Description', name: 'description', type: 'string', typeOptions: { rows: 3, }, default: '', required: true, description: 'A detailed textual description of the video to be generated', displayOptions: { show: { resource: ['video'], operation: ['generate'], }, }, routing: { request: { body: { description: '={{ $value }}', }, }, }, }, { displayName: 'Size', name: 'size', type: 'options', options: [ { name: 'Square', value: 'square', }, { name: 'Landscape', value: 'landscape', }, { name: 'Portrait', value: 'portrait', }, ], default: 'landscape', required: true, description: 'The desired video dimensions', displayOptions: { show: { resource: ['video'], operation: ['generate'], }, }, routing: { request: { body: { size: '={{ $value }}', }, }, }, }, { displayName: 'Duration', name: 'duration', type: 'number', typeOptions: { minValue: 1, maxValue: 60, }, default: 5, required: true, description: 'The duration in seconds of the video. Usually, 5 is a valid value, but the valid durations depend on the model', displayOptions: { show: { resource: ['video'], operation: ['generate'], }, }, routing: { request: { body: { duration: '={{ $value }}', }, }, }, }, { displayName: 'Image URL', name: 'image_url', type: 'string', default: '', required: true, description: 'The URL of the image to be taken as basis of the output video', placeholder: 'https://example.com/image.jpg', displayOptions: { show: { resource: ['video'], operation: ['generate'], }, }, routing: { request: { body: { image_url: '={{ $value }}', }, }, }, }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['tts'], }, }, options: [ { name: 'Create', value: 'create', action: 'Convert text to speech', routing: { request: { method: 'POST', url: '/v1/tts/create', }, }, }, ], default: 'create', }, { displayName: 'Model', name: 'model', type: 'options', options: [ { name: 'Eleven Multilingual V2', value: 'eleven_multilingual_v2', }, { name: 'TTS-1', value: 'tts-1', }, ], default: 'tts-1', required: true, description: 'Specifies the model to use for the TTS conversion', displayOptions: { show: { resource: ['tts'], operation: ['create'], }, }, routing: { request: { body: { model: '={{ $value }}', }, }, }, }, { displayName: 'Text', name: 'text', type: 'string', typeOptions: { rows: 4, }, default: '', required: true, description: 'The actual text content that you want to convert into speech (Up to 4,000 characters)', displayOptions: { show: { resource: ['tts'], operation: ['create'], }, }, routing: { request: { body: { text: '={{ $value }}', }, }, }, }, { displayName: 'Voice', name: 'voice_id', type: 'options', options: [ { name: 'Alloy', value: 'alloy', }, { name: 'Echo', value: 'echo', }, { name: 'Fable', value: 'fable', }, { name: 'Onyx', value: 'onyx', }, { name: 'Nova', value: 'nova', }, { name: 'Shimmer', value: 'shimmer', }, ], default: 'alloy', required: true, description: 'Voice to use for TTS-1 model', displayOptions: {