UNPKG

n8n-nodes-walichat

Version:

n8n plugin for WaliChat

781 lines (780 loc) 27.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeOutboundFileOperations = exports.outboundFileProperties = void 0; const request_1 = require("../request"); exports.outboundFileProperties = [ { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['outbound-files'], }, }, options: [ { name: 'Search Files', value: 'searchFiles', description: 'Search/list files', }, { name: 'Upload File', value: 'uploadFile', description: 'Upload a new file', }, { name: 'Delete Files', value: 'deleteFiles', description: 'Delete multiple files', }, { name: 'Get File Preview', value: 'previewFile', description: 'Get file preview image', }, { name: 'Download File', value: 'downloadFile', description: 'Download file content', }, { name: 'Get File', value: 'getFile', description: 'Get file information by ID', }, { name: 'Update File', value: 'updateFile', description: 'Update file metadata', }, { name: 'Delete File', value: 'deleteFile', description: 'Delete a file by ID', }, ], default: 'searchFiles', }, // SEARCH FILES FILTERS { displayName: 'Filters', name: 'filters', type: 'collection', placeholder: 'Add Filter', default: {}, displayOptions: { show: { resource: ['outbound-files'], operation: ['searchFiles'], }, }, options: [ { displayName: 'Search Term', name: 'search', type: 'string', default: '', description: 'Search files by filename, tags or reference', }, { displayName: 'Created After', name: 'after', type: 'dateTime', default: '', description: 'Files created after this date', }, { displayName: 'Created Before', name: 'before', type: 'dateTime', default: '', description: 'Files created before this date', }, { displayName: 'File Format', name: 'format', type: 'multiOptions', options: [ { name: 'GIF', value: 'gif' }, { name: 'Voice Message', value: 'ptt' }, { name: 'Native', value: 'native' }, ], default: [], description: 'Filter files by format type', }, { displayName: 'File IDs', name: 'ids', type: 'string', typeOptions: { multipleValues: true, loadOptionsMethod: 'getFiles', }, default: [], description: 'Filter files by specific IDs', }, { displayName: 'Tags', name: 'tags', type: 'string', typeOptions: { multipleValues: true, }, default: [], description: 'Filter files by tags', }, { displayName: 'SHA2 Checksum', name: 'sha2', type: 'string', default: '', description: 'Find a file by SHA2 checksum', }, { displayName: 'Reference', name: 'reference', type: 'string', default: '', description: 'Search files by reference', }, { displayName: 'Status', name: 'status', type: 'multiOptions', options: [ { name: 'Ready', value: 'ready' }, { name: 'Processing', value: 'processing' }, { name: 'Failed', value: 'failed' }, ], default: [], description: 'Filter files by status', }, { displayName: 'Device ID', name: 'device', type: 'string', typeOptions: { loadOptionsMethod: 'getDevices', }, default: '', description: 'Filter files by device ID', }, { displayName: 'Filename', name: 'filename', type: 'string', default: '', description: 'Search files by filename', }, { displayName: 'Origin', name: 'origin', type: 'options', options: [ { name: 'Remote URL', value: 'remote' }, { name: 'Upload', value: 'upload' }, ], default: '', description: 'Filter files by origin', }, { displayName: 'MIME Type', name: 'mime', type: 'multiOptions', options: [ { name: 'JPEG Image', value: 'image/jpeg' }, { name: 'PNG Image', value: 'image/png' }, { name: 'MP4 Video', value: 'video/mp4' }, { name: 'MP3 Audio', value: 'audio/mp3' }, { name: 'OGG Audio', value: 'audio/ogg' }, { name: 'PDF Document', value: 'application/pdf' }, ], default: [], description: 'Filter files by MIME type', }, { displayName: 'File Type', name: 'kind', type: 'multiOptions', options: [ { name: 'Image', value: 'image' }, { name: 'Video', value: 'video' }, { name: 'Audio', value: 'audio' }, { name: 'Document', value: 'document' }, { name: 'Other', value: 'file' }, ], default: [], description: 'Filter files by type', }, { displayName: 'Extension', name: 'ext', type: 'multiOptions', options: [ { name: 'JPG', value: 'jpg' }, { name: 'PNG', value: 'png' }, { name: 'MP4', value: 'mp4' }, { name: 'MP3', value: 'mp3' }, { name: 'OGG', value: 'ogg' }, { name: 'PDF', value: 'pdf' }, { name: 'DOCX', value: 'docx' }, { name: 'XLSX', value: 'xlsx' }, ], default: [], description: 'Filter files by extension', }, { displayName: 'Permission', name: 'permission', type: 'options', options: [ { name: 'Public', value: 'public' }, { name: 'Read-only', value: 'readonly' }, { name: 'Private', value: 'private' }, ], default: '', description: 'Filter files by permission level', }, { displayName: 'Owner User ID', name: 'owner', type: 'string', default: '', description: 'Filter files by creator user ID', }, { displayName: 'File Size Range (bytes)', name: 'filesize', type: 'string', default: '', placeholder: '10000,1000000', description: 'Filter by file size range (min,max) in bytes', }, { displayName: 'Results Page Size', name: 'size', type: 'number', default: 20, description: 'Number of results per page', }, { displayName: 'Page Number', name: 'page', type: 'number', default: 0, description: 'Page number (starting from 0)', }, ], }, // UPLOAD FILE OPTIONS { displayName: 'Upload Method', name: 'uploadMethod', type: 'options', required: true, displayOptions: { show: { resource: ['outbound-files'], operation: ['uploadFile'], }, }, options: [ { name: 'From URL', value: 'url', }, // Binary data upload would require additional implementation // that's not fully covered in this example { name: 'From URL (Without Binary Data Support)', value: 'url_only', description: 'Note: Full binary upload is not supported in this version', }, ], default: 'url', }, { displayName: 'File URL', name: 'url', type: 'string', required: true, default: '', displayOptions: { show: { resource: ['outbound-files'], operation: ['uploadFile'], uploadMethod: ['url', 'url_only'], }, }, description: 'URL of the file to upload', }, { displayName: 'File Options', name: 'fileOptions', type: 'collection', placeholder: 'Add Option', default: {}, displayOptions: { show: { resource: ['outbound-files'], operation: ['uploadFile'], }, }, options: [ { displayName: 'Filename', name: 'filename', type: 'string', default: '', description: 'Custom filename for the uploaded file', }, { displayName: 'Reference', name: 'reference', type: 'string', default: '', description: 'Reference identifier for the file', }, { displayName: 'Format', name: 'format', type: 'options', options: [ { name: 'GIF', value: 'gif' }, { name: 'Voice Message', value: 'ptt' }, { name: 'Native', value: 'native' }, ], default: 'native', description: 'Display format for the file', }, { displayName: 'Expiration', name: 'expiration', type: 'options', options: [ { name: '10 Minutes', value: '10m' }, { name: '30 Minutes', value: '30m' }, { name: '1 Hour', value: '1h' }, { name: '6 Hours', value: '6h' }, { name: '12 Hours', value: '12h' }, { name: '1 Day', value: '1d' }, { name: '2 Days', value: '2d' }, { name: '3 Days', value: '3d' }, { name: '5 Days', value: '5d' }, { name: '7 Days', value: '7d' }, { name: '15 Days', value: '15d' }, { name: '30 Days', value: '30d' }, { name: '60 Days', value: '60d' }, { name: '90 Days', value: '90d' }, { name: '120 Days', value: '120d' }, { name: '180 Days', value: '180d' }, { name: '1 Year', value: '1y' }, { name: '2 Years', value: '2y' }, ], default: '30d', description: 'File expiration time', }, { displayName: 'Permission', name: 'permission', type: 'options', options: [ { name: 'Public', value: 'public' }, { name: 'Read-only', value: 'readonly' }, { name: 'Private', value: 'private' }, ], default: 'public', description: 'Access permission for the file', }, { displayName: 'Tags', name: 'tags', type: 'string', typeOptions: { multipleValues: true, }, default: [], description: 'Tags for the file', }, ], }, // DELETE FILES OPTIONS { displayName: 'Delete Options', name: 'deleteOptions', type: 'collection', placeholder: 'Add Option', default: {}, displayOptions: { show: { resource: ['outbound-files'], operation: ['deleteFiles'], }, }, options: [ { displayName: 'Maximum Files to Delete', name: 'limit', type: 'number', default: 100, description: 'Maximum limit of files to delete (1-500)', }, { displayName: 'File IDs', name: 'ids', type: 'string', typeOptions: { multipleValues: true, loadOptionsMethod: 'getFiles', }, default: [], description: 'IDs of files to delete', }, { displayName: 'Created Before', name: 'before', type: 'dateTime', default: '', description: 'Delete files created before this date', }, { displayName: 'Created After', name: 'after', type: 'dateTime', default: '', description: 'Delete files created after this date', }, { displayName: 'Expires Before', name: 'expires', type: 'dateTime', default: '', description: 'Delete files that expire before this date', }, { displayName: 'Filename', name: 'filename', type: 'string', default: '', description: 'Delete files matching this filename', }, { displayName: 'File Extensions', name: 'ext', type: 'string', typeOptions: { multipleValues: true, }, default: [], description: 'Delete files with these extensions', }, { displayName: 'MIME Types', name: 'mime', type: 'string', typeOptions: { multipleValues: true, }, default: [], description: 'Delete files with these MIME types', }, { displayName: 'File Types', name: 'kind', type: 'multiOptions', options: [ { name: 'Image', value: 'image' }, { name: 'Video', value: 'video' }, { name: 'Audio', value: 'audio' }, { name: 'Document', value: 'document' }, { name: 'Other', value: 'file' }, ], default: [], description: 'Delete files of these types', }, { displayName: 'Owner IDs', name: 'owner', type: 'string', typeOptions: { multipleValues: true, }, default: [], description: 'Delete files created by these user IDs', }, { displayName: 'Format', name: 'format', type: 'options', options: [ { name: 'GIF', value: 'gif' }, { name: 'Voice Message', value: 'ptt' }, { name: 'Native', value: 'native' }, ], default: 'native', description: 'Delete files with this format', }, { displayName: 'Permission', name: 'permission', type: 'options', options: [ { name: 'Public', value: 'public' }, { name: 'Read-only', value: 'readonly' }, { name: 'Private', value: 'private' }, ], default: 'public', description: 'Delete files with this permission', }, { displayName: 'Tags', name: 'tags', type: 'string', typeOptions: { multipleValues: true, }, default: [], description: 'Delete files with these tags', }, { displayName: 'Minimum Size (bytes)', name: 'size', type: 'number', default: 0, description: 'Delete files larger than this size in bytes', }, { displayName: 'Origin', name: 'origin', type: 'options', options: [ { name: 'Remote URL', value: 'remote' }, { name: 'Upload', value: 'upload' }, ], default: '', description: 'Delete files with this origin', }, { displayName: 'SHA2 Hashes', name: 'sha2', type: 'string', typeOptions: { multipleValues: true, }, default: [], description: 'Delete files with these SHA2 hashes', }, ], }, // FILE ID FOR SINGLE FILE OPERATIONS { displayName: 'File ID', name: 'fileId', type: 'string', required: true, default: '', typeOptions: { loadOptionsMethod: 'getFiles', }, displayOptions: { show: { resource: ['outbound-files'], operation: ['previewFile', 'downloadFile', 'getFile', 'updateFile', 'deleteFile'], }, }, description: 'ID of the file', }, // UPDATE FILE OPTIONS { displayName: 'Update Fields', name: 'updateFields', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: ['outbound-files'], operation: ['updateFile'], }, }, options: [ { displayName: 'Filename', name: 'filename', type: 'string', default: '', description: 'New filename for the file', }, { displayName: 'Reference', name: 'reference', type: 'string', default: '', description: 'New reference identifier', }, { displayName: 'Format', name: 'format', type: 'options', options: [ { name: 'GIF', value: 'gif' }, { name: 'Voice Message', value: 'ptt' }, { name: 'Native', value: 'native' }, ], default: 'native', description: 'New display format', }, { displayName: 'Tags', name: 'tags', type: 'string', typeOptions: { multipleValues: true, }, default: [], description: 'New tags for the file', }, { displayName: 'Message Caption', name: 'message', type: 'string', typeOptions: { rows: 3, }, default: '', description: 'Text caption for the media file', }, { displayName: 'Expiration', name: 'expiration', type: 'options', options: [ { name: '10 Minutes', value: '10m' }, { name: '30 Minutes', value: '30m' }, { name: '1 Hour', value: '1h' }, { name: '6 Hours', value: '6h' }, { name: '12 Hours', value: '12h' }, { name: '1 Day', value: '1d' }, { name: '2 Days', value: '2d' }, { name: '3 Days', value: '3d' }, { name: '5 Days', value: '5d' }, { name: '7 Days', value: '7d' }, { name: '15 Days', value: '15d' }, { name: '30 Days', value: '30d' }, { name: '60 Days', value: '60d' }, { name: '90 Days', value: '90d' }, { name: '120 Days', value: '120d' }, { name: '180 Days', value: '180d' }, { name: '1 Year', value: '1y' }, { name: '2 Years', value: '2y' }, ], default: '', description: 'New expiration time', }, { displayName: 'Permission', name: 'permission', type: 'options', options: [ { name: 'Public', value: 'public' }, { name: 'Read-only', value: 'readonly' }, { name: 'Private', value: 'private' }, ], default: '', description: 'New access permission', }, ], }, ]; async function executeOutboundFileOperations(index) { const operation = this.getNodeParameter('operation', index); // SEARCH FILES if (operation === 'searchFiles') { const filters = this.getNodeParameter('filters', index, {}); const queryParameters = {}; // Add all filters to query parameters for (const [key, value] of Object.entries(filters)) { if (value !== undefined && value !== '' && (typeof value !== 'object' || (Array.isArray(value) && value.length > 0))) { queryParameters[key] = value; } } return (0, request_1.request)(this, 'GET', '/files', undefined, queryParameters); } // UPLOAD FILE if (operation === 'uploadFile') { const uploadMethod = this.getNodeParameter('uploadMethod', index); const url = this.getNodeParameter('url', index); const fileOptions = this.getNodeParameter('fileOptions', index, {}); const body = { url, }; // Add file options to request body for (const [key, value] of Object.entries(fileOptions)) { if (value !== undefined && (typeof value !== 'object' || (Array.isArray(value) && value.length > 0))) { body[key] = value; } } return (0, request_1.request)(this, 'POST', '/files', body); } // DELETE FILES if (operation === 'deleteFiles') { const deleteOptions = this.getNodeParameter('deleteOptions', index, {}); const body = {}; // Add delete options to request body for (const [key, value] of Object.entries(deleteOptions)) { if (value !== undefined && (typeof value !== 'object' || (Array.isArray(value) && value.length > 0))) { body[key] = value; } } return (0, request_1.request)(this, 'DELETE', '/files', body); } // GET FILE PREVIEW if (operation === 'previewFile') { const fileId = this.getNodeParameter('fileId', index); // For image responses, set appropriate Accept header const customHeaders = { 'Accept': 'image/*', }; return (0, request_1.request)(this, 'GET', `/files/${fileId}/preview`, undefined, undefined, customHeaders); } // DOWNLOAD FILE if (operation === 'downloadFile') { const fileId = this.getNodeParameter('fileId', index); // For binary file responses, set appropriate Accept header const customHeaders = { 'Accept': '*/*', }; return (0, request_1.request)(this, 'GET', `/files/${fileId}/download`, undefined, undefined, customHeaders); } // GET FILE if (operation === 'getFile') { const fileId = this.getNodeParameter('fileId', index); return (0, request_1.request)(this, 'GET', `/files/${fileId}`); } // UPDATE FILE if (operation === 'updateFile') { const fileId = this.getNodeParameter('fileId', index); const updateFields = this.getNodeParameter('updateFields', index, {}); const body = {}; // Add update fields to request body for (const [key, value] of Object.entries(updateFields)) { if (value !== undefined && (typeof value !== 'object' || (Array.isArray(value) && value.length > 0))) { body[key] = value; } } return (0, request_1.request)(this, 'PATCH', `/files/${fileId}`, body); } // DELETE FILE if (operation === 'deleteFile') { const fileId = this.getNodeParameter('fileId', index); return (0, request_1.request)(this, 'DELETE', `/files/${fileId}`); } throw new Error(`The operation "${operation}" is not supported for outbound files!`); } exports.executeOutboundFileOperations = executeOutboundFileOperations;