import { INodeProperties } from 'n8n-workflow'; export const channelOperations = [ { displayName: 'Operation', name: 'operation', type: 'options', displayOptions: { show: { resource: [ 'channel', ], }, }, options: [ { name: 'Archive', value: 'archive', description: 'Archives a conversation.', }, { name: 'Close', value: 'close', description: 'Closes a direct message or multi-person direct message.', }, { name: 'Create', value: 'create', description: 'Initiates a public or private channel-based conversation', }, { name: 'Get', value: 'get', description: 'Get information about a channel.', }, { name: 'Get All', value: 'getAll', description: 'Get all channels in a Slack team.', }, { name: 'History', value: 'history', description: `Get a conversation's history of messages and events.`, }, { name: 'Invite', value: 'invite', description: 'Invite a user to a channel', }, { name: 'Join', value: 'join', description: 'Joins an existing conversation.', }, { name: 'Kick', value: 'kick', description: 'Removes a user from a channel.', }, { name: 'Leave', value: 'leave', description: 'Leaves a conversation.', }, { name: 'Open', value: 'open', description: 'Opens or resumes a direct message or multi-person direct message.', }, { name: 'Rename', value: 'rename', description: 'Renames a conversation.', }, { name: 'Replies', value: 'replies', description: 'Get a thread of messages posted to a channel', }, { name: 'Set Purpose', value: 'setPurpose', description: 'Sets the purpose for a conversation.', }, { name: 'Set Topic', value: 'setTopic', description: 'Sets the topic for a conversation.', }, { name: 'Unarchive', value: 'unarchive', description: 'Unarchives a conversation.', }, ], default: 'create', description: 'The operation to perform.', }, ] as INodeProperties[]; export const channelFields = [ /* -------------------------------------------------------------------------- */ /* channel:archive */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'options', typeOptions: { loadOptionsMethod: 'getChannels', }, displayOptions: { show: { operation: [ 'archive', ], resource: [ 'channel', ], }, }, default: '', required: true, description: 'The name of the channel to archive.', }, /* -------------------------------------------------------------------------- */ /* channel:close */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'options', typeOptions: { loadOptionsMethod: 'getChannels', }, displayOptions: { show: { operation: [ 'close', ], resource: [ 'channel', ], }, }, default: '', required: true, description: 'The name of the channel to close.', }, /* -------------------------------------------------------------------------- */ /* channel:create */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'string', default: '', placeholder: 'Channel name', displayOptions: { show: { operation: [ 'create', ], resource: [ 'channel', ], }, }, required: true, description: 'The name of the channel to create.', }, { displayName: 'Additional Fields', name: 'additionalFields', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: [ 'channel', ], operation: [ 'create', ], }, }, options: [ { displayName: 'Is Private', name: 'isPrivate', type: 'boolean', default: false, description: 'Create a private channel instead of a public one', }, { displayName: 'Users', name: 'users', type: 'multiOptions', typeOptions: { loadOptionsMethod: 'getUsers', }, default: [], description: `Required for workspace apps. A list of between 1 and 30 human users that will be added to the newly-created conversation`, }, ], }, /* -------------------------------------------------------------------------- */ /* channel:invite */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'options', typeOptions: { loadOptionsMethod: 'getChannels', }, default: '', displayOptions: { show: { operation: [ 'invite', ], resource: [ 'channel', ], }, }, required: true, description: 'The ID of the channel to invite user to.', }, { displayName: 'User ID', name: 'userId', type: 'options', typeOptions: { loadOptionsMethod: 'getUsers', }, default: '', displayOptions: { show: { operation: [ 'invite', ], resource: [ 'channel', ], }, }, required: true, description: 'The ID of the user to invite into channel.', }, /* -------------------------------------------------------------------------- */ /* channel:get */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'string', default: '', displayOptions: { show: { operation: [ 'get', ], resource: [ 'channel', ], }, }, required: true, description: 'Channel ID to learn more about', }, { displayName: 'Additional Fields', name: 'additionalFields', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: [ 'channel', ], operation: [ 'get', ], }, }, options: [ { displayName: 'Include Num of Members', name: 'includeNumMembers', type: 'boolean', default: false, }, ], }, /* -------------------------------------------------------------------------- */ /* channel:kick */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'options', typeOptions: { loadOptionsMethod: 'getChannels', }, default: '', placeholder: 'Channel name', displayOptions: { show: { operation: [ 'kick', ], resource: [ 'channel', ], }, }, required: true, description: 'The name of the channel to create.', }, { displayName: 'User', name: 'userId', type: 'options', typeOptions: { loadOptionsMethod: 'getUsers', }, displayOptions: { show: { operation: [ 'kick', ], resource: [ 'channel', ], }, }, default: '', }, /* -------------------------------------------------------------------------- */ /* channel:join */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'options', typeOptions: { loadOptionsMethod: 'getChannels', }, default: '', placeholder: 'Channel name', displayOptions: { show: { operation: [ 'join', ], resource: [ 'channel', ], }, }, required: true, }, /* -------------------------------------------------------------------------- */ /* channel:getAll */ /* -------------------------------------------------------------------------- */ { displayName: 'Return All', name: 'returnAll', type: 'boolean', displayOptions: { show: { resource: [ 'channel', ], operation: [ 'getAll', ], }, }, default: false, description: 'If all results should be returned or only up to a given limit.', }, { displayName: 'Limit', name: 'limit', type: 'number', displayOptions: { show: { resource: [ 'channel', ], operation: [ 'getAll', ], returnAll: [ false, ], }, }, typeOptions: { minValue: 1, maxValue: 100, }, default: 50, description: 'How many results to return.', }, { displayName: 'Filters', name: 'filters', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: [ 'channel', ], operation: [ 'getAll', ], }, }, options: [ { displayName: 'Exclude Archived', name: 'excludeArchived', type: 'boolean', default: false, description: 'Set to true to exclude archived channels from the list', }, { displayName: 'Types', name: 'types', type: 'multiOptions', options: [ { name: 'Public Channel', value: 'public_channel', }, { name: 'Private Channel', value: 'private_channel', }, { name: 'mpim', value: 'mpim', }, { name: 'im', value: 'im', }, ], default: ['public_channel'], description: 'Mix and match channel types', }, ], }, /* -------------------------------------------------------------------------- */ /* channel:history */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'options', typeOptions: { loadOptionsMethod: 'getChannels', }, default: '', placeholder: 'Channel name', displayOptions: { show: { operation: [ 'history', ], resource: [ 'channel', ], }, }, required: true, description: 'The name of the channel to create.', }, { displayName: 'Return All', name: 'returnAll', type: 'boolean', displayOptions: { show: { resource: [ 'channel', ], operation: [ 'history', ], }, }, default: false, description: 'If all results should be returned or only up to a given limit.', }, { displayName: 'Limit', name: 'limit', type: 'number', displayOptions: { show: { resource: [ 'channel', ], operation: [ 'history', ], returnAll: [ false, ], }, }, typeOptions: { minValue: 1, maxValue: 100, }, default: 50, description: 'How many results to return.', }, { displayName: 'Filters', name: 'filters', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: [ 'channel', ], operation: [ 'history', ], }, }, options: [ { displayName: 'Inclusive', name: 'inclusive', type: 'boolean', default: false, description: 'Include messages with latest or oldest timestamp in results only when either timestamp is specified.', }, { displayName: 'Latest', name: 'latest', type: 'dateTime', default: '', description: 'End of time range of messages to include in results.', }, { displayName: 'Oldest', name: 'oldest', type: 'dateTime', default: '', description: 'Start of time range of messages to include in results.', }, ], }, /* -------------------------------------------------------------------------- */ /* channel:leave */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'options', typeOptions: { loadOptionsMethod: 'getChannels', }, displayOptions: { show: { operation: [ 'leave', ], resource: [ 'channel', ], }, }, default: '', required: true, description: 'The name of the channel to leave.', }, /* -------------------------------------------------------------------------- */ /* channel:open */ /* -------------------------------------------------------------------------- */ { displayName: 'Options', name: 'options', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: [ 'channel', ], operation: [ 'open', ], }, }, options: [ { displayName: 'Channel ID', name: 'channelId', type: 'string', default: '', description: `Resume a conversation by supplying an im or mpim's ID. Or provide the users field instead`, }, { displayName: 'Return IM', name: 'returnIm', type: 'boolean', default: false, description: 'Boolean, indicates you want the full IM channel definition in the response.', }, { displayName: 'Users', name: 'users', type: 'multiOptions', typeOptions: { loadOptionsMethod: 'getUsers', }, default: [], description: `If only one user is included, this creates a 1:1 DM. The ordering of the users is preserved whenever a multi-person direct message is returned. Supply a channel when not supplying users.`, }, ], }, /* -------------------------------------------------------------------------- */ /* channel:rename */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'options', typeOptions: { loadOptionsMethod: 'getChannels', }, displayOptions: { show: { operation: [ 'rename', ], resource: [ 'channel', ], }, }, default: '', required: true, description: 'The name of the channel to rename.', }, { displayName: 'Name', name: 'name', type: 'string', displayOptions: { show: { operation: [ 'rename', ], resource: [ 'channel', ], }, }, default: '', required: true, description: 'New name for conversation.', }, /* -------------------------------------------------------------------------- */ /* channel:replies */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'options', typeOptions: { loadOptionsMethod: 'getChannels', }, default: '', placeholder: 'Channel name', displayOptions: { show: { operation: [ 'replies', ], resource: [ 'channel', ], }, }, required: true, description: 'The name of the channel to create.', }, { displayName: 'TS', name: 'ts', type: 'string', default: '', displayOptions: { show: { operation: [ 'replies', ], resource: [ 'channel', ], }, }, required: true, description: `Unique identifier of a thread's parent message.`, }, { displayName: 'Return All', name: 'returnAll', type: 'boolean', displayOptions: { show: { resource: [ 'channel', ], operation: [ 'replies', ], }, }, default: false, description: 'If all results should be returned or only up to a given limit.', }, { displayName: 'Limit', name: 'limit', type: 'number', displayOptions: { show: { resource: [ 'channel', ], operation: [ 'replies', ], returnAll: [ false, ], }, }, typeOptions: { minValue: 1, maxValue: 100, }, default: 50, description: 'How many results to return.', }, { displayName: 'Filters', name: 'filters', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: [ 'channel', ], operation: [ 'replies', ], }, }, options: [ { displayName: 'Inclusive', name: 'inclusive', type: 'boolean', default: false, description: 'Include messages with latest or oldest timestamp in results only when either timestamp is specified.', }, { displayName: 'Latest', name: 'latest', type: 'string', default: '', description: 'End of time range of messages to include in results.', }, { displayName: 'Oldest', name: 'oldest', type: 'string', default: '', description: 'Start of time range of messages to include in results.', }, ], }, /* -------------------------------------------------------------------------- */ /* channel:setPurpose */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'options', typeOptions: { loadOptionsMethod: 'getChannels', }, displayOptions: { show: { operation: [ 'setPurpose', ], resource: [ 'channel', ], }, }, default: '', required: true, description: 'Conversation to set the purpose of', }, { displayName: 'Purpose', name: 'purpose', type: 'string', displayOptions: { show: { operation: [ 'setPurpose', ], resource: [ 'channel', ], }, }, default: '', required: true, description: 'A new, specialer purpose', }, /* -------------------------------------------------------------------------- */ /* channel:setTopic */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'options', typeOptions: { loadOptionsMethod: 'getChannels', }, displayOptions: { show: { operation: [ 'setTopic', ], resource: [ 'channel', ], }, }, default: '', required: true, description: 'Conversation to set the topic of', }, { displayName: 'Topic', name: 'topic', type: 'string', displayOptions: { show: { operation: [ 'setTopic', ], resource: [ 'channel', ], }, }, default: '', required: true, description: 'The new topic string. Does not support formatting or linkification.', }, /* -------------------------------------------------------------------------- */ /* channel:unarchive */ /* -------------------------------------------------------------------------- */ { displayName: 'Channel', name: 'channelId', type: 'options', typeOptions: { loadOptionsMethod: 'getChannels', }, displayOptions: { show: { operation: [ 'unarchive', ], resource: [ 'channel', ], }, }, default: '', required: true, description: 'The ID of the channel to unarchive.', }, ] as INodeProperties[];