UNPKG

n8n-nodes-instagram-integrations

Version:

N8N nodes for Instagram API integration with OAuth2 authentication

1,166 lines (1,165 loc) 110 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.Instagram = void 0; const n8n_workflow_1 = require("n8n-workflow"); const GenericFunctions_1 = require("./GenericFunctions"); class Instagram { constructor() { this.description = { displayName: 'Instagram', name: 'instagram', icon: 'file:instagram-large.svg', group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Send messages and interact with Instagram users via Messaging API', defaults: { name: 'Instagram', }, inputs: ['main'], outputs: ['main'], credentials: [ { name: 'instagramOAuth2Api', required: true, }, ], properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'Comment', value: 'comment', }, { name: 'Media', value: 'media', }, { name: 'Message', value: 'message', }, { name: 'Post', value: 'post', }, { name: 'Story', value: 'story', }, { name: 'User', value: 'user', }, ], default: 'message', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['comment'], }, }, options: [ { name: 'Delete', value: 'deleteComment', description: 'Delete a comment on your media', action: 'Delete a comment', }, { name: 'Get Comments', value: 'getComments', description: 'Get comments on a media post', action: 'Get comments on a media post', }, { name: 'Get Replies', value: 'getReplies', description: 'Get replies to a comment', action: 'Get replies to a comment', }, { name: 'Hide/Unhide', value: 'toggleVisibility', description: 'Hide or unhide a comment', action: 'Hide or unhide a comment', }, { name: 'Reply', value: 'replyToComment', description: 'Reply to a comment publicly', action: 'Reply to a comment', }, { name: 'Send Private Reply', value: 'sendPrivateReply', description: 'Send a private DM to a commenter', action: 'Send a private reply to a commenter', }, ], default: 'getComments', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['message'], }, }, options: [ { name: 'Send Audio', value: 'sendAudio', description: 'Send an audio message', action: 'Send an audio message', }, { name: 'Send Button Template', value: 'sendButtonTemplate', description: 'Send a message with buttons', action: 'Send a button template message', }, { name: 'Send Generic Template', value: 'sendGenericTemplate', description: 'Send a carousel of cards', action: 'Send a generic template message', }, { name: 'Send Image', value: 'sendImage', description: 'Send an image message', action: 'Send an image message', }, { name: 'Send Quick Replies', value: 'sendQuickReplies', description: 'Send a message with quick reply options', action: 'Send a message with quick replies', }, { name: 'Send Text', value: 'sendText', description: 'Send a text message', action: 'Send a text message', }, { name: 'Send Video', value: 'sendVideo', description: 'Send a video message', action: 'Send a video message', }, { name: 'Upload Media', value: 'uploadMedia', description: 'Upload media to Instagram', action: 'Upload media', }, ], default: 'sendText', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['media'], }, }, options: [ { name: 'Get Media', value: 'getMedia', description: 'Get media object information', action: 'Get media', }, { name: 'Get Media Children', value: 'getMediaChildren', description: 'Get children of a carousel album', action: 'Get media children', }, { name: 'List Media', value: 'listMedia', description: 'Get list of media objects', action: 'List media', }, ], default: 'listMedia', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['post'], }, }, options: [ { name: 'Create Single Post', value: 'createSinglePost', description: 'Create a single image or video post', action: 'Create a single post', }, { name: 'Create Carousel Post', value: 'createCarouselPost', description: 'Create a carousel post with multiple images/videos', action: 'Create a carousel post', }, { name: 'Create Reel', value: 'createReel', description: 'Create a reel (short video)', action: 'Create a reel', }, { name: 'Publish Post', value: 'publishPost', description: 'Publish a media container', action: 'Publish a post', }, ], default: 'createSinglePost', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['story'], }, }, options: [ { name: 'Create Story', value: 'createStory', description: 'Create a story (image or video)', action: 'Create a story', }, ], default: 'createStory', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['user'], }, }, options: [ { name: 'Get My Profile', value: 'getMyProfile', description: 'Get authenticated account profile information', action: 'Get my profile', }, { name: 'Get Profile', value: 'getProfile', description: 'Get user profile information by ID', action: 'Get user profile', }, ], default: 'getMyProfile', }, { displayName: 'Media ID', name: 'commentMediaId', type: 'string', required: true, displayOptions: { show: { resource: ['comment'], operation: ['getComments'], }, }, default: '', placeholder: '17895695668004550', description: 'ID of the media post to get comments from', }, { displayName: 'Return All', name: 'returnAll', type: 'boolean', displayOptions: { show: { resource: ['comment'], operation: ['getComments'], }, }, default: false, description: 'Whether to return all comments or only up to a given limit', }, { displayName: 'Limit', name: 'limit', type: 'number', displayOptions: { show: { resource: ['comment'], operation: ['getComments'], returnAll: [false], }, }, typeOptions: { minValue: 1, }, default: 50, description: 'Max number of comments to return', }, { displayName: 'Comment ID', name: 'commentId', type: 'string', required: true, displayOptions: { show: { resource: ['comment'], operation: ['getReplies'], }, }, default: '', placeholder: '17870913679156914', description: 'ID of the comment to get replies from', }, { displayName: 'Comment ID', name: 'commentId', type: 'string', required: true, displayOptions: { show: { resource: ['comment'], operation: ['replyToComment'], }, }, default: '', placeholder: '17870913679156914', description: 'ID of the comment to reply to', }, { displayName: 'Reply Message', name: 'replyMessage', type: 'string', required: true, displayOptions: { show: { resource: ['comment'], operation: ['replyToComment'], }, }, default: '', placeholder: 'Thanks for your comment!', description: 'The message to post as a reply to the comment', }, { displayName: 'Comment ID', name: 'commentId', type: 'string', required: true, displayOptions: { show: { resource: ['comment'], operation: ['sendPrivateReply'], }, }, default: '', placeholder: '17870913679156914', description: 'ID of the comment to reply to privately. The commenter will receive a DM.', }, { displayName: 'Private Message', name: 'privateMessage', type: 'string', required: true, displayOptions: { show: { resource: ['comment'], operation: ['sendPrivateReply'], }, }, default: '', placeholder: 'Thanks for commenting! Here is more info...', description: 'The private message to send to the commenter via DM. Must be sent within 7 days of the comment.', }, { displayName: 'Comment ID', name: 'commentId', type: 'string', required: true, displayOptions: { show: { resource: ['comment'], operation: ['deleteComment'], }, }, default: '', placeholder: '17870913679156914', description: 'ID of the comment to delete', }, { displayName: 'Comment ID', name: 'commentId', type: 'string', required: true, displayOptions: { show: { resource: ['comment'], operation: ['toggleVisibility'], }, }, default: '', placeholder: '17870913679156914', description: 'ID of the comment to hide or unhide', }, { displayName: 'Action', name: 'hideAction', type: 'options', required: true, displayOptions: { show: { resource: ['comment'], operation: ['toggleVisibility'], }, }, options: [ { name: 'Hide', value: 'hide', description: 'Hide the comment from public view', }, { name: 'Unhide', value: 'unhide', description: 'Make the comment visible again', }, ], default: 'hide', description: 'Whether to hide or unhide the comment', }, { displayName: 'Recipient ID', name: 'recipientId', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendText'], }, }, default: '', placeholder: '1234567890', description: 'Instagram-scoped user ID (IGSID) of the recipient', }, { displayName: 'Message', name: 'messageText', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendText'], }, }, default: '', placeholder: 'Hello from N8N!', description: 'Text message to send (max 1000 characters)', }, { displayName: 'Recipient ID', name: 'recipientId', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendImage'], }, }, default: '', placeholder: '1234567890', description: 'Instagram-scoped user ID (IGSID) of the recipient', }, { displayName: 'Image URL', name: 'imageUrl', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendImage'], }, }, default: '', placeholder: 'https://example.com/photo.jpg', description: 'Public HTTPS URL of the image (JPG, PNG)', }, { displayName: 'Is Reusable', name: 'isReusable', type: 'boolean', displayOptions: { show: { resource: ['message'], operation: ['sendImage'], }, }, default: false, description: 'Whether to make the attachment reusable for multiple recipients', }, { displayName: 'Recipient ID', name: 'recipientId', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendAudio'], }, }, default: '', placeholder: '1234567890', description: 'Instagram-scoped user ID (IGSID) of the recipient', }, { displayName: 'Audio URL', name: 'audioUrl', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendAudio'], }, }, default: '', placeholder: 'https://example.com/voice.mp3', description: 'Public HTTPS URL of the audio file', }, { displayName: 'Is Reusable', name: 'isReusable', type: 'boolean', displayOptions: { show: { resource: ['message'], operation: ['sendAudio'], }, }, default: false, description: 'Whether to make the attachment reusable for multiple recipients', }, { displayName: 'Recipient ID', name: 'recipientId', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendVideo'], }, }, default: '', placeholder: '1234567890', description: 'Instagram-scoped user ID (IGSID) of the recipient', }, { displayName: 'Video URL', name: 'videoUrl', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendVideo'], }, }, default: '', placeholder: 'https://example.com/video.mp4', description: 'Public HTTPS URL of the video file', }, { displayName: 'Is Reusable', name: 'isReusable', type: 'boolean', displayOptions: { show: { resource: ['message'], operation: ['sendVideo'], }, }, default: false, description: 'Whether to make the attachment reusable for multiple recipients', }, { displayName: 'Recipient ID', name: 'recipientId', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendButtonTemplate'], }, }, default: '', placeholder: '1234567890', description: 'Instagram-scoped user ID (IGSID) of the recipient', }, { displayName: 'Message Text', name: 'messageText', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendButtonTemplate'], }, }, default: '', placeholder: 'Choose an option:', description: 'Text to display above buttons (max 640 characters)', }, { displayName: 'Buttons', name: 'buttons', type: 'fixedCollection', typeOptions: { multipleValues: true, maxValues: 3, }, displayOptions: { show: { resource: ['message'], operation: ['sendButtonTemplate'], }, }, default: {}, placeholder: 'Add Button', options: [ { name: 'button', displayName: 'Button', values: [ { displayName: 'Type', name: 'type', type: 'options', options: [ { name: 'Web URL', value: 'web_url', }, { name: 'Postback', value: 'postback', }, ], default: 'web_url', description: 'Type of button', }, { displayName: 'Title', name: 'title', type: 'string', default: '', placeholder: 'Click Me', description: 'Button title (max 20 characters)', }, { displayName: 'URL', name: 'url', type: 'string', displayOptions: { show: { type: ['web_url'], }, }, default: '', placeholder: 'https://example.com', description: 'Button URL (must be HTTPS)', }, { displayName: 'Payload', name: 'payload', type: 'string', displayOptions: { show: { type: ['postback'], }, }, default: '', placeholder: 'BUTTON_CLICKED', description: 'Postback payload (max 1000 characters)', }, ], }, ], }, { displayName: 'Recipient ID', name: 'recipientId', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendGenericTemplate'], }, }, default: '', placeholder: '1234567890', description: 'Instagram-scoped user ID (IGSID) of the recipient', }, { displayName: 'Elements', name: 'elements', type: 'fixedCollection', typeOptions: { multipleValues: true, maxValues: 10, }, displayOptions: { show: { resource: ['message'], operation: ['sendGenericTemplate'], }, }, default: {}, placeholder: 'Add Element', options: [ { name: 'element', displayName: 'Element', values: [ { displayName: 'Buttons', name: 'buttons', type: 'fixedCollection', typeOptions: { multipleValues: true, maxValues: 3, }, default: {}, placeholder: 'Add Button', options: [ { name: 'button', displayName: 'Button', values: [ { displayName: 'Type', name: 'type', type: 'options', options: [ { name: 'Web URL', value: 'web_url', }, { name: 'Postback', value: 'postback', }, ], default: 'web_url', description: 'Type of button', }, { displayName: 'Title', name: 'title', type: 'string', default: '', placeholder: 'Click Me', description: 'Button title (max 20 characters)', }, { displayName: 'URL', name: 'url', type: 'string', default: '', placeholder: 'https://example.com', description: 'Button URL (must be HTTPS)', }, { displayName: 'Payload', name: 'payload', type: 'string', default: '', placeholder: 'BUTTON_CLICKED', description: 'Postback payload (max 1000 characters)', }, ] }, ] }, { displayName: 'Default Action', name: 'default_action', type: 'fixedCollection', default: {}, options: [ { name: 'action', displayName: 'Action', values: [ { displayName: 'URL', name: 'url', type: 'string', default: '', placeholder: 'https://example.com', description: 'URL to open when card is tapped (must be HTTPS)', }, ] }, ] }, { displayName: 'Image URL', name: 'image_url', type: 'string', default: '', placeholder: 'https://example.com/image.jpg', description: 'Image URL for the card', }, { displayName: 'Subtitle', name: 'subtitle', type: 'string', default: '', placeholder: 'Card subtitle', description: 'Element subtitle (max 80 characters)', }, { displayName: 'Title', name: 'title', type: 'string', default: '', placeholder: 'Card Title', description: 'Element title (max 80 characters)', }, ], }, ], }, { displayName: 'Recipient ID', name: 'recipientId', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendQuickReplies'], }, }, default: '', placeholder: '1234567890', description: 'Instagram-scoped user ID (IGSID) of the recipient', }, { displayName: 'Message Text', name: 'messageText', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['sendQuickReplies'], }, }, default: '', placeholder: 'Choose an option:', description: 'Text message to display with quick replies', }, { displayName: 'Quick Replies', name: 'quickReplies', type: 'fixedCollection', typeOptions: { multipleValues: true, maxValues: 13, }, displayOptions: { show: { resource: ['message'], operation: ['sendQuickReplies'], }, }, default: {}, placeholder: 'Add Quick Reply', options: [ { name: 'quickReply', displayName: 'Quick Reply', values: [ { displayName: 'Title', name: 'title', type: 'string', default: '', placeholder: 'Option 1', description: 'Quick reply title (max 20 characters)', }, { displayName: 'Payload', name: 'payload', type: 'string', default: '', placeholder: 'OPTION_1', description: 'Payload sent back when clicked (max 1000 characters)', }, ], }, ], }, { displayName: 'Media Type', name: 'mediaType', type: 'options', displayOptions: { show: { resource: ['message'], operation: ['uploadMedia'], }, }, options: [ { name: 'Image', value: 'IMAGE', }, { name: 'Video', value: 'VIDEO', }, { name: 'Reels', value: 'REELS', }, { name: 'Stories', value: 'STORIES', }, ], default: 'IMAGE', description: 'Type of media to upload', }, { displayName: 'Media URL', name: 'mediaUrl', type: 'string', required: true, displayOptions: { show: { resource: ['message'], operation: ['uploadMedia'], }, }, default: '', placeholder: 'https://example.com/image.jpg', description: 'Public URL of the media file', }, { displayName: 'Caption', name: 'caption', type: 'string', displayOptions: { show: { resource: ['message'], operation: ['uploadMedia'], }, }, default: '', placeholder: 'Check out this photo!', description: 'Caption for the media', }, { displayName: 'Return All', name: 'returnAll', type: 'boolean', displayOptions: { show: { resource: ['media'], operation: ['listMedia'], }, }, default: false, description: 'Whether to return all results or only up to a given limit', }, { displayName: 'Limit', name: 'limit', type: 'number', displayOptions: { show: { resource: ['media'], operation: ['listMedia'], returnAll: [false], }, }, typeOptions: { minValue: 1, }, default: 50, description: 'Max number of results to return', }, { displayName: 'Fields', name: 'mediaFields', type: 'multiOptions', displayOptions: { show: { resource: ['media'], operation: ['listMedia'], }, }, options: [ { name: 'Caption', value: 'caption' }, { name: 'Comments Count', value: 'comments_count' }, { name: 'ID', value: 'id' }, { name: 'Is Comment Enabled', value: 'is_comment_enabled' }, { name: 'Like Count', value: 'like_count' }, { name: 'Media Type', value: 'media_type' }, { name: 'Media URL', value: 'media_url' }, { name: 'Owner', value: 'owner' }, { name: 'Permalink', value: 'permalink' }, { name: 'Thumbnail URL', value: 'thumbnail_url' }, { name: 'Timestamp', value: 'timestamp' }, { name: 'Username', value: 'username' }, ], default: ['id', 'media_type', 'media_url', 'permalink', 'timestamp'], description: 'Fields to retrieve for each media item', }, { displayName: 'Media ID', name: 'mediaId', type: 'string', required: true, displayOptions: { show: { resource: ['media'], operation: ['getMedia', 'getMediaChildren'], }, }, default: '', placeholder: '17895695668004550', description: 'ID of the media object', }, { displayName: 'Fields', name: 'mediaDetailFields', type: 'multiOptions', displayOptions: { show: { resource: ['media'], operation: ['getMedia'], }, }, options: [ { name: 'Caption', value: 'caption' }, { name: 'Children', value: 'children' }, { name: 'Comments Count', value: 'comments_count' }, { name: 'ID', value: 'id' }, { name: 'Is Comment Enabled', value: 'is_comment_enabled' }, { name: 'Like Count', value: 'like_count' }, { name: 'Media Product Type', value: 'media_product_type' }, { name: 'Media Type', value: 'media_type' }, { name: 'Media URL', value: 'media_url' }, { name: 'Owner', value: 'owner' }, { name: 'Permalink', value: 'permalink' }, { name: 'Shortcode', value: 'shortcode' }, { name: 'Thumbnail URL', value: 'thumbnail_url' }, { name: 'Timestamp', value: 'timestamp' }, { name: 'Username', value: 'username' }, ], default: ['id', 'media_type', 'media_url', 'permalink', 'caption'], description: 'Fields to retrieve for the media object', }, { displayName: 'Media Type', name: 'postMediaType', type: 'options', required: true, displayOptions: { show: { resource: ['post'], operation: ['createSinglePost'], }, }, options: [{ name: 'Image', value: 'IMAGE' }, { name: 'Video', value: 'VIDEO' }, ], default: 'IMAGE', description: 'Type of media for the post', }, { displayName: 'Image URL', name: 'postImageUrl', type: 'string', required: true, displayOptions: { show: {