import { IExecuteFunctions } from 'n8n-core'; import { IDataObject, INodeExecutionData, INodeType, INodeTypeDescription, } from 'n8n-workflow'; import {moceanApiRequest} from './GenericFunctions'; export class Mocean implements INodeType { description: INodeTypeDescription = { displayName: 'Mocean', name: 'mocean', icon: 'file:logo.png', group: ['transform'], version: 1, description: 'This is the official node created from Mocean', defaults: { name: 'Mocean', color: '#772244', }, inputs: ['main'], outputs: ['main'], credentials: [ { name: "moceanApi", required: true } ], properties: [ // Node properties which the user gets displayed and // can change on the node. { displayName: 'Resource', name: 'resource', type: 'options', options:[ { name: "SMS", value: "sms" }, { name: "Voice", value: "voice" } ], default: 'sms', }, { displayName: 'Operation', name: 'operation', type: 'options', displayOptions: { show: { resource: [ 'sms', 'voice' ], }, }, options: [ { name: 'Send', value: 'send', description: 'Send SMS/Voice message', }, ], default: 'send', description: 'The operation to perform.', }, { displayName: 'From', name: 'from', type: 'string', default: '', placeholder: 'Sender Number', required: true, displayOptions: { show: { operation: [ 'send', ], resource: [ 'sms', 'voice', ], }, }, description: 'The number to which to send the message', }, { displayName: 'To', name: 'to', type: 'string', default: '', placeholder: 'Receipient number', required: true, displayOptions: { show: { operation: [ 'send', ], resource: [ 'sms', 'voice', ], }, }, description: 'The number from which to send the message', }, { displayName: 'Language', name: 'language', type: 'options', options:[ { name: "English (United States)", value: "en-US" }, { name: "English (United Kingdom)", value: "en-GB" }, { name: "Chinese Mandarin (China", value: "cmn-CN" }, { name: "Japanese (Japan)", value: "ja-JP" }, { name: "Korean (Korea)", value: "ko-KR" } ], displayOptions: { show: { operation: [ 'send', ], resource: [ 'voice', ], }, }, default: 'en-US', }, { displayName: 'Message', name: 'message', type: 'string', default: '', placeholder: '', required: true, displayOptions: { show: { operation: [ 'send', ], resource: [ 'sms', 'voice', ], }, }, description: 'The message to send', }, ], }; async execute(this: IExecuteFunctions): Promise { const items = this.getInputData(); let item: INodeExecutionData; let returnData: IDataObject[] = []; let endpoint: string; let operation: string; let requesetMethod: string; let resource: string; let text: string; // For Post let body: IDataObject; // For Query string let qs: IDataObject; for (let itemIndex = 0; itemIndex < items.length; itemIndex++) { body = {}; qs = {}; resource = this.getNodeParameter('resource', itemIndex, '') as string; operation = this.getNodeParameter('operation',itemIndex,'') as string; text = this.getNodeParameter('message', itemIndex, '') as string; requesetMethod = 'POST'; body['mocean-from'] = this.getNodeParameter('from', itemIndex, '') as string; body['mocean-to'] = this.getNodeParameter('to', itemIndex, '') as string; if (resource === 'voice') { let language: string = this.getNodeParameter("language",itemIndex) as string; let command:any = [{"action": "say", "language": `${language}`, "text": `${text}`}]; body['mocean-command'] = JSON.stringify(command); endpoint = '/rest/2/voice/dial'; } else if(resource === 'sms') { body['mocean-text'] = text; endpoint = '/rest/2/sms'; } else { throw new Error(`Unknown resource ${resource}`); } if (operation === "send") { const responseData = await moceanApiRequest.call(this,requesetMethod,endpoint,body,qs); returnData.push(responseData as IDataObject); } else { throw new Error(`Unknown operation ${operation}`); } } return [this.helpers.returnJsonArray(returnData)]; } }