n8n-nodes-base 1.88.0 → 1.90.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/credentials/Aws.credentials.js +16 -2
- package/dist/credentials/Aws.credentials.js.map +1 -1
- package/dist/credentials/CustomerIoApi.credentials.js +2 -2
- package/dist/credentials/CustomerIoApi.credentials.js.map +1 -1
- package/dist/nodes/Airtable/v2/actions/record/update.operation.js +15 -3
- package/dist/nodes/Airtable/v2/actions/record/update.operation.js.map +1 -1
- package/dist/nodes/Aws/__tests__/credentials.js +35 -0
- package/dist/nodes/Aws/__tests__/credentials.js.map +1 -0
- package/dist/nodes/Code/Pyodide.js +16 -1
- package/dist/nodes/Code/Pyodide.js.map +1 -1
- package/dist/nodes/EmailReadImap/v2/EmailReadImapV2.node.js +1 -1
- package/dist/nodes/EmailReadImap/v2/EmailReadImapV2.node.js.map +1 -1
- package/dist/nodes/ExecuteWorkflow/ExecuteWorkflow/methods/localResourceMapping.js +3 -1
- package/dist/nodes/ExecuteWorkflow/ExecuteWorkflow/methods/localResourceMapping.js.map +1 -1
- package/dist/nodes/Form/formCompletionUtils.js +1 -3
- package/dist/nodes/Form/formCompletionUtils.js.map +1 -1
- package/dist/nodes/Form/utils.js +2 -7
- package/dist/nodes/Form/utils.js.map +1 -1
- package/dist/nodes/Freshdesk/Freshdesk.node.js +3 -6
- package/dist/nodes/Freshdesk/Freshdesk.node.js.map +1 -1
- package/dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js +12 -4
- package/dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js.map +1 -1
- package/dist/nodes/HttpRequest/V3/Description.js +8 -0
- package/dist/nodes/HttpRequest/V3/Description.js.map +1 -1
- package/dist/nodes/HttpRequest/V3/HttpRequestV3.node.js +23 -5
- package/dist/nodes/HttpRequest/V3/HttpRequestV3.node.js.map +1 -1
- package/dist/nodes/HttpRequest/shared/optimizeResponse.js +387 -0
- package/dist/nodes/HttpRequest/shared/optimizeResponse.js.map +1 -0
- package/dist/nodes/Hubspot/V2/HubspotV2.node.js +10 -2
- package/dist/nodes/Hubspot/V2/HubspotV2.node.js.map +1 -1
- package/dist/nodes/Jira/GenericFunctions.js +7 -3
- package/dist/nodes/Jira/GenericFunctions.js.map +1 -1
- package/dist/nodes/Jira/Jira.node.js +4 -6
- package/dist/nodes/Jira/Jira.node.js.map +1 -1
- package/dist/nodes/LinkedIn/GenericFunctions.js +1 -1
- package/dist/nodes/LinkedIn/GenericFunctions.js.map +1 -1
- package/dist/nodes/Microsoft/AzureCosmosDb/test/credentials.js +36 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/test/credentials.js.map +1 -0
- package/dist/nodes/Microsoft/Excel/test/credentials.js +36 -0
- package/dist/nodes/Microsoft/Excel/test/credentials.js.map +1 -0
- package/dist/nodes/Microsoft/Storage/test/credentials.js +57 -0
- package/dist/nodes/Microsoft/Storage/test/credentials.js.map +1 -0
- package/dist/nodes/Microsoft/Teams/test/credentials.js +36 -0
- package/dist/nodes/Microsoft/Teams/test/credentials.js.map +1 -0
- package/dist/nodes/Postgres/v2/helpers/utils.js +3 -1
- package/dist/nodes/Postgres/v2/helpers/utils.js.map +1 -1
- package/dist/nodes/RespondToWebhook/RespondToWebhook.node.js +57 -48
- package/dist/nodes/RespondToWebhook/RespondToWebhook.node.js.map +1 -1
- package/dist/nodes/SplitInBatches/v3/SplitInBatchesV3.node.js +1 -1
- package/dist/nodes/SplitInBatches/v3/SplitInBatchesV3.node.js.map +1 -1
- package/dist/nodes/Supabase/GenericFunctions.js +13 -4
- package/dist/nodes/Supabase/GenericFunctions.js.map +1 -1
- package/dist/nodes/Supabase/RowDescription.js +1 -0
- package/dist/nodes/Supabase/RowDescription.js.map +1 -1
- package/dist/nodes/Supabase/Supabase.node.js +17 -0
- package/dist/nodes/Supabase/Supabase.node.js.map +1 -1
- package/dist/nodes/Telegram/TelegramTrigger.node.js +4 -60
- package/dist/nodes/Telegram/TelegramTrigger.node.js.map +1 -1
- package/dist/nodes/Telegram/util/triggerUtils.js +88 -0
- package/dist/nodes/Telegram/util/triggerUtils.js.map +1 -0
- package/dist/nodes/Wait/Wait.node.js +5 -6
- package/dist/nodes/Wait/Wait.node.js.map +1 -1
- package/dist/nodes/Wordpress/__tests__/workflow/credentials.js +36 -0
- package/dist/nodes/Wordpress/__tests__/workflow/credentials.js.map +1 -0
- package/dist/test/globalSetup.js +3 -0
- package/dist/test/globalSetup.js.map +1 -1
- package/dist/test/nodes/ExecuteWorkflow.js +3 -2
- package/dist/test/nodes/ExecuteWorkflow.js.map +1 -1
- package/dist/test/nodes/Helpers.js +4 -15
- package/dist/test/nodes/Helpers.js.map +1 -1
- package/dist/test/nodes/TriggerHelpers.js +5 -2
- package/dist/test/nodes/TriggerHelpers.js.map +1 -1
- package/dist/test/nodes/credentials-helper.js +9 -13
- package/dist/test/nodes/credentials-helper.js.map +1 -1
- package/dist/types/nodes.json +6 -6
- package/dist/utils/workflowInputsResourceMapping/GenericFunctions.js +6 -1
- package/dist/utils/workflowInputsResourceMapping/GenericFunctions.js.map +1 -1
- package/package.json +14 -11
- package/dist/test/nodes/FakeCredentialsMap.js +0 -313
- package/dist/test/nodes/FakeCredentialsMap.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../nodes/Form/utils.ts"],"sourcesContent":["import type { Response } from 'express';\nimport isbot from 'isbot';\nimport { DateTime } from 'luxon';\nimport type {\n\tINodeExecutionData,\n\tMultiPartFormData,\n\tIDataObject,\n\tIWebhookFunctions,\n\tFormFieldsParameter,\n\tNodeTypeAndVersion,\n} from 'n8n-workflow';\nimport {\n\tFORM_NODE_TYPE,\n\tFORM_TRIGGER_NODE_TYPE,\n\tNodeOperationError,\n\tWAIT_NODE_TYPE,\n\tjsonParse,\n} from 'n8n-workflow';\nimport sanitize from 'sanitize-html';\n\nimport type { FormTriggerData, FormTriggerInput } from './interfaces';\nimport { FORM_TRIGGER_AUTHENTICATION_PROPERTY } from './interfaces';\nimport { getResolvables } from '../../utils/utilities';\nimport { WebhookAuthorizationError } from '../Webhook/error';\nimport { validateWebhookAuthentication } from '../Webhook/utils';\n\nexport function sanitizeHtml(text: string) {\n\treturn sanitize(text, {\n\t\tallowedTags: [\n\t\t\t'b',\n\t\t\t'div',\n\t\t\t'i',\n\t\t\t'iframe',\n\t\t\t'img',\n\t\t\t'video',\n\t\t\t'source',\n\t\t\t'em',\n\t\t\t'strong',\n\t\t\t'a',\n\t\t\t'h1',\n\t\t\t'h2',\n\t\t\t'h3',\n\t\t\t'h4',\n\t\t\t'h5',\n\t\t\t'h6',\n\t\t\t'u',\n\t\t\t'sub',\n\t\t\t'sup',\n\t\t\t'code',\n\t\t\t'pre',\n\t\t\t'span',\n\t\t\t'br',\n\t\t\t'ul',\n\t\t\t'ol',\n\t\t\t'li',\n\t\t\t'p',\n\t\t],\n\t\tallowedAttributes: {\n\t\t\ta: ['href', 'target', 'rel'],\n\t\t\timg: ['src', 'alt', 'width', 'height'],\n\t\t\tvideo: ['*'],\n\t\t\tiframe: ['*'],\n\t\t\tsource: ['*'],\n\t\t},\n\t\ttransformTags: {\n\t\t\tiframe: sanitize.simpleTransform('iframe', {\n\t\t\t\tsandbox: '',\n\t\t\t\treferrerpolicy: 'strict-origin-when-cross-origin',\n\t\t\t\tallow: 'fullscreen; autoplay; encrypted-media',\n\t\t\t}),\n\t\t},\n\t});\n}\n\nexport const prepareFormFields = (context: IWebhookFunctions, fields: FormFieldsParameter) => {\n\treturn fields.map((field) => {\n\t\tif (field.fieldType === 'html') {\n\t\t\tlet { html } = field;\n\n\t\t\tif (!html) return field;\n\n\t\t\tfor (const resolvable of getResolvables(html)) {\n\t\t\t\thtml = html.replace(resolvable, context.evaluateExpression(resolvable) as string);\n\t\t\t}\n\n\t\t\tfield.html = sanitizeHtml(html as string);\n\t\t}\n\n\t\tif (field.fieldType === 'hiddenField') {\n\t\t\tfield.fieldLabel = field.fieldName as string;\n\t\t}\n\n\t\treturn field;\n\t});\n};\n\nexport function sanitizeCustomCss(css: string | undefined): string | undefined {\n\tif (!css) return undefined;\n\n\t// Use sanitize-html with custom settings for CSS\n\treturn sanitize(css, {\n\t\tallowedTags: [], // No HTML tags allowed\n\t\tallowedAttributes: {}, // No attributes allowed\n\t\t// This ensures we're only keeping the text content\n\t\t// which should be the CSS, while removing any HTML/script tags\n\t});\n}\n\nexport function createDescriptionMetadata(description: string) {\n\treturn description === ''\n\t\t? 'n8n form'\n\t\t: description.replace(/^\\s*\\n+|<\\/?[^>]+(>|$)/g, '').slice(0, 150);\n}\n\nexport function prepareFormData({\n\tformTitle,\n\tformDescription,\n\tformSubmittedHeader,\n\tformSubmittedText,\n\tredirectUrl,\n\tformFields,\n\ttestRun,\n\tquery,\n\tinstanceId,\n\tuseResponseData,\n\tappendAttribution = true,\n\tbuttonLabel,\n\tcustomCss,\n}: {\n\tformTitle: string;\n\tformDescription: string;\n\tformSubmittedText: string | undefined;\n\tredirectUrl: string | undefined;\n\tformFields: FormFieldsParameter;\n\ttestRun: boolean;\n\tquery: IDataObject;\n\tinstanceId?: string;\n\tuseResponseData?: boolean;\n\tappendAttribution?: boolean;\n\tbuttonLabel?: string;\n\tformSubmittedHeader?: string;\n\tcustomCss?: string;\n}) {\n\tconst utm_campaign = instanceId ? `&utm_campaign=${instanceId}` : '';\n\tconst n8nWebsiteLink = `https://n8n.io/?utm_source=n8n-internal&utm_medium=form-trigger${utm_campaign}`;\n\n\tif (formSubmittedText === undefined) {\n\t\tformSubmittedText = 'Your response has been recorded';\n\t}\n\n\tconst formData: FormTriggerData = {\n\t\ttestRun,\n\t\tformTitle,\n\t\tformDescription,\n\t\tformDescriptionMetadata: createDescriptionMetadata(formDescription),\n\t\tformSubmittedHeader,\n\t\tformSubmittedText,\n\t\tn8nWebsiteLink,\n\t\tformFields: [],\n\t\tuseResponseData,\n\t\tappendAttribution,\n\t\tbuttonLabel,\n\t\tdangerousCustomCss: sanitizeCustomCss(customCss),\n\t};\n\n\tif (redirectUrl) {\n\t\tif (!redirectUrl.includes('://')) {\n\t\t\tredirectUrl = `http://${redirectUrl}`;\n\t\t}\n\t\tformData.redirectUrl = redirectUrl;\n\t}\n\n\tfor (const [index, field] of formFields.entries()) {\n\t\tconst { fieldType, requiredField, multiselect, placeholder } = field;\n\n\t\tconst input: IDataObject = {\n\t\t\tid: `field-${index}`,\n\t\t\terrorId: `error-field-${index}`,\n\t\t\tlabel: field.fieldLabel,\n\t\t\tinputRequired: requiredField ? 'form-required' : '',\n\t\t\tdefaultValue: query[field.fieldLabel] ?? '',\n\t\t\tplaceholder,\n\t\t};\n\n\t\tif (multiselect) {\n\t\t\tinput.isMultiSelect = true;\n\t\t\tinput.multiSelectOptions =\n\t\t\t\tfield.fieldOptions?.values.map((e, i) => ({\n\t\t\t\t\tid: `option${i}_${input.id}`,\n\t\t\t\t\tlabel: e.option,\n\t\t\t\t})) ?? [];\n\t\t} else if (fieldType === 'file') {\n\t\t\tinput.isFileInput = true;\n\t\t\tinput.acceptFileTypes = field.acceptFileTypes;\n\t\t\tinput.multipleFiles = field.multipleFiles ? 'multiple' : '';\n\t\t} else if (fieldType === 'dropdown') {\n\t\t\tinput.isSelect = true;\n\t\t\tconst fieldOptions = field.fieldOptions?.values ?? [];\n\t\t\tinput.selectOptions = fieldOptions.map((e) => e.option);\n\t\t} else if (fieldType === 'textarea') {\n\t\t\tinput.isTextarea = true;\n\t\t} else if (fieldType === 'html') {\n\t\t\tinput.isHtml = true;\n\t\t\tinput.html = field.html as string;\n\t\t} else if (fieldType === 'hiddenField') {\n\t\t\tinput.isHidden = true;\n\t\t\tinput.hiddenName = field.fieldName as string;\n\t\t\tinput.hiddenValue =\n\t\t\t\tinput.defaultValue === '' ? (field.fieldValue as string) : input.defaultValue;\n\t\t} else {\n\t\t\tinput.isInput = true;\n\t\t\tinput.type = fieldType as 'text' | 'number' | 'date' | 'email';\n\t\t}\n\n\t\tformData.formFields.push(input as FormTriggerInput);\n\t}\n\n\treturn formData;\n}\n\nexport const validateResponseModeConfiguration = (context: IWebhookFunctions) => {\n\tconst responseMode = context.getNodeParameter('responseMode', 'onReceived') as string;\n\tconst connectedNodes = context.getChildNodes(context.getNode().name);\n\tconst nodeVersion = context.getNode().typeVersion;\n\n\tconst isRespondToWebhookConnected = connectedNodes.some(\n\t\t(node) => node.type === 'n8n-nodes-base.respondToWebhook',\n\t);\n\n\tif (!isRespondToWebhookConnected && responseMode === 'responseNode') {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error('No Respond to Webhook node found in the workflow'),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'Insert a Respond to Webhook node to your workflow to respond to the form submission or choose another option for the “Respond When” parameter',\n\t\t\t},\n\t\t);\n\t}\n\n\tif (isRespondToWebhookConnected && responseMode !== 'responseNode' && nodeVersion <= 2.1) {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error(`${context.getNode().name} node not correctly configured`),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'Set the “Respond When” parameter to “Using Respond to Webhook Node” or remove the Respond to Webhook node',\n\t\t\t},\n\t\t);\n\t}\n\n\tif (isRespondToWebhookConnected && nodeVersion > 2.1) {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error(\n\t\t\t\t'The \"Respond to Webhook\" node is not supported in workflows initiated by the \"n8n Form Trigger\"',\n\t\t\t),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'To configure your response, add an \"n8n Form\" node and set the \"Page Type\" to \"Form Ending\"',\n\t\t\t},\n\t\t);\n\t}\n};\n\nexport function addFormResponseDataToReturnItem(\n\treturnItem: INodeExecutionData,\n\tformFields: FormFieldsParameter,\n\tbodyData: IDataObject,\n) {\n\tfor (const [index, field] of formFields.entries()) {\n\t\tconst key = `field-${index}`;\n\t\tconst name = field.fieldLabel ?? field.fieldName;\n\t\tlet value = bodyData[key] ?? null;\n\n\t\tif (value === null) {\n\t\t\treturnItem.json[name] = null;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (field.fieldType === 'html') {\n\t\t\tif (field.elementName) {\n\t\t\t\treturnItem.json[field.elementName] = value;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (field.fieldType === 'number') {\n\t\t\tvalue = Number(value);\n\t\t}\n\t\tif (field.fieldType === 'text') {\n\t\t\tvalue = String(value).trim();\n\t\t}\n\t\tif (field.multiselect && typeof value === 'string') {\n\t\t\tvalue = jsonParse(value);\n\t\t}\n\t\tif (field.fieldType === 'date' && value && field.formatDate !== '') {\n\t\t\tvalue = DateTime.fromFormat(String(value), 'yyyy-mm-dd').toFormat(field.formatDate as string);\n\t\t}\n\t\tif (field.fieldType === 'file' && field.multipleFiles && !Array.isArray(value)) {\n\t\t\tvalue = [value];\n\t\t}\n\n\t\treturnItem.json[name] = value;\n\t}\n}\n\nexport async function prepareFormReturnItem(\n\tcontext: IWebhookFunctions,\n\tformFields: FormFieldsParameter,\n\tmode: 'test' | 'production',\n\tuseWorkflowTimezone: boolean = false,\n) {\n\tconst bodyData = (context.getBodyData().data as IDataObject) ?? {};\n\tconst files = (context.getBodyData().files as IDataObject) ?? {};\n\n\tconst returnItem: INodeExecutionData = {\n\t\tjson: {},\n\t};\n\tif (files && Object.keys(files).length) {\n\t\treturnItem.binary = {};\n\t}\n\n\tfor (const key of Object.keys(files)) {\n\t\tconst processFiles: MultiPartFormData.File[] = [];\n\t\tlet multiFile = false;\n\t\tconst filesInput = files[key] as MultiPartFormData.File[] | MultiPartFormData.File;\n\n\t\tif (Array.isArray(filesInput)) {\n\t\t\tbodyData[key] = filesInput.map((file) => ({\n\t\t\t\tfilename: file.originalFilename,\n\t\t\t\tmimetype: file.mimetype,\n\t\t\t\tsize: file.size,\n\t\t\t}));\n\t\t\tprocessFiles.push(...filesInput);\n\t\t\tmultiFile = true;\n\t\t} else {\n\t\t\tbodyData[key] = {\n\t\t\t\tfilename: filesInput.originalFilename,\n\t\t\t\tmimetype: filesInput.mimetype,\n\t\t\t\tsize: filesInput.size,\n\t\t\t};\n\t\t\tprocessFiles.push(filesInput);\n\t\t}\n\n\t\tconst entryIndex = Number(key.replace(/field-/g, ''));\n\t\tconst fieldLabel = isNaN(entryIndex) ? key : formFields[entryIndex].fieldLabel;\n\n\t\tlet fileCount = 0;\n\t\tfor (const file of processFiles) {\n\t\t\tlet binaryPropertyName = fieldLabel.replace(/\\W/g, '_');\n\n\t\t\tif (multiFile) {\n\t\t\t\tbinaryPropertyName += `_${fileCount++}`;\n\t\t\t}\n\n\t\t\treturnItem.binary![binaryPropertyName] = await context.nodeHelpers.copyBinaryFile(\n\t\t\t\tfile.filepath,\n\t\t\t\tfile.originalFilename ?? file.newFilename,\n\t\t\t\tfile.mimetype,\n\t\t\t);\n\t\t}\n\t}\n\n\taddFormResponseDataToReturnItem(returnItem, formFields, bodyData);\n\n\tconst timezone = useWorkflowTimezone ? context.getTimezone() : 'UTC';\n\treturnItem.json.submittedAt = DateTime.now().setZone(timezone).toISO();\n\n\treturnItem.json.formMode = mode;\n\n\tconst workflowStaticData = context.getWorkflowStaticData('node');\n\tif (\n\t\tObject.keys(workflowStaticData || {}).length &&\n\t\tcontext.getNode().type === FORM_TRIGGER_NODE_TYPE\n\t) {\n\t\treturnItem.json.formQueryParameters = workflowStaticData;\n\t}\n\n\treturn returnItem;\n}\n\nexport function renderForm({\n\tcontext,\n\tres,\n\tformTitle,\n\tformDescription,\n\tformFields,\n\tresponseMode,\n\tmode,\n\tformSubmittedText,\n\tredirectUrl,\n\tappendAttribution,\n\tbuttonLabel,\n\tcustomCss,\n}: {\n\tcontext: IWebhookFunctions;\n\tres: Response;\n\tformTitle: string;\n\tformDescription: string;\n\tformFields: FormFieldsParameter;\n\tresponseMode: string;\n\tmode: 'test' | 'production';\n\tformSubmittedText?: string;\n\tredirectUrl?: string;\n\tappendAttribution?: boolean;\n\tbuttonLabel?: string;\n\tcustomCss?: string;\n}) {\n\tformDescription = (formDescription || '').replace(/\\\\n/g, '\\n').replace(/<br>/g, '\\n');\n\tconst instanceId = context.getInstanceId();\n\n\tconst useResponseData = responseMode === 'responseNode';\n\n\tlet query: IDataObject = {};\n\n\tif (context.getNode().type === FORM_TRIGGER_NODE_TYPE) {\n\t\tquery = context.getRequestObject().query as IDataObject;\n\t\tconst workflowStaticData = context.getWorkflowStaticData('node');\n\t\tfor (const key of Object.keys(query)) {\n\t\t\tworkflowStaticData[key] = query[key];\n\t\t}\n\t} else if (context.getNode().type === FORM_NODE_TYPE) {\n\t\tconst parentNodes = context.getParentNodes(context.getNode().name);\n\t\tconst trigger = parentNodes.find(\n\t\t\t(node) => node.type === FORM_TRIGGER_NODE_TYPE,\n\t\t) as NodeTypeAndVersion;\n\t\ttry {\n\t\t\tconst triggerQueryParameters = context.evaluateExpression(\n\t\t\t\t`{{ $('${trigger?.name}').first().json.formQueryParameters }}`,\n\t\t\t) as IDataObject;\n\n\t\t\tif (triggerQueryParameters) {\n\t\t\t\tquery = triggerQueryParameters;\n\t\t\t}\n\t\t} catch (error) {}\n\t}\n\n\tformFields = prepareFormFields(context, formFields);\n\n\tconst data = prepareFormData({\n\t\tformTitle,\n\t\tformDescription,\n\t\tformSubmittedText,\n\t\tredirectUrl,\n\t\tformFields,\n\t\ttestRun: mode === 'test',\n\t\tquery,\n\t\tinstanceId,\n\t\tuseResponseData,\n\t\tappendAttribution,\n\t\tbuttonLabel,\n\t\tcustomCss,\n\t});\n\n\tres.render('form-trigger', data);\n}\n\nexport const isFormConnected = (nodes: NodeTypeAndVersion[]) => {\n\treturn nodes.some(\n\t\t(n) =>\n\t\t\tn.type === FORM_NODE_TYPE || (n.type === WAIT_NODE_TYPE && n.parameters?.resume === 'form'),\n\t);\n};\n\nexport async function formWebhook(\n\tcontext: IWebhookFunctions,\n\tauthProperty = FORM_TRIGGER_AUTHENTICATION_PROPERTY,\n) {\n\tconst node = context.getNode();\n\tconst options = context.getNodeParameter('options', {}) as {\n\t\tignoreBots?: boolean;\n\t\trespondWithOptions?: {\n\t\t\tvalues: {\n\t\t\t\trespondWith: 'text' | 'redirect';\n\t\t\t\tformSubmittedText: string;\n\t\t\t\tredirectUrl: string;\n\t\t\t};\n\t\t};\n\t\tformSubmittedText?: string;\n\t\tuseWorkflowTimezone?: boolean;\n\t\tappendAttribution?: boolean;\n\t\tbuttonLabel?: string;\n\t\tcustomCss?: string;\n\t};\n\tconst res = context.getResponseObject();\n\tconst req = context.getRequestObject();\n\n\ttry {\n\t\tif (options.ignoreBots && isbot(req.headers['user-agent'])) {\n\t\t\tthrow new WebhookAuthorizationError(403);\n\t\t}\n\t\tif (node.typeVersion > 1) {\n\t\t\tawait validateWebhookAuthentication(context, authProperty);\n\t\t}\n\t} catch (error) {\n\t\tif (error instanceof WebhookAuthorizationError) {\n\t\t\tres.setHeader('WWW-Authenticate', 'Basic realm=\"Enter credentials\"');\n\t\t\tres.status(401).send();\n\t\t\treturn { noWebhookResponse: true };\n\t\t}\n\t\tthrow error;\n\t}\n\n\tconst mode = context.getMode() === 'manual' ? 'test' : 'production';\n\tconst formFields = context.getNodeParameter('formFields.values', []) as FormFieldsParameter;\n\n\tconst method = context.getRequestObject().method;\n\n\tvalidateResponseModeConfiguration(context);\n\n\t//Show the form on GET request\n\tif (method === 'GET') {\n\t\tconst formTitle = context.getNodeParameter('formTitle', '') as string;\n\t\tconst formDescription = sanitizeHtml(context.getNodeParameter('formDescription', '') as string);\n\t\tlet responseMode = context.getNodeParameter('responseMode', '') as string;\n\n\t\tlet formSubmittedText;\n\t\tlet redirectUrl;\n\t\tlet appendAttribution = true;\n\n\t\tif (options.respondWithOptions) {\n\t\t\tconst values = (options.respondWithOptions as IDataObject).values as IDataObject;\n\t\t\tif (values.respondWith === 'text') {\n\t\t\t\tformSubmittedText = values.formSubmittedText as string;\n\t\t\t}\n\t\t\tif (values.respondWith === 'redirect') {\n\t\t\t\tredirectUrl = values.redirectUrl as string;\n\t\t\t}\n\t\t} else {\n\t\t\tformSubmittedText = options.formSubmittedText as string;\n\t\t}\n\n\t\tif (options.appendAttribution === false) {\n\t\t\tappendAttribution = false;\n\t\t}\n\n\t\tlet buttonLabel = 'Submit';\n\n\t\tif (options.buttonLabel) {\n\t\t\tbuttonLabel = options.buttonLabel;\n\t\t}\n\n\t\tconst connectedNodes = context.getChildNodes(context.getNode().name, {\n\t\t\tincludeNodeParameters: true,\n\t\t});\n\t\tconst hasNextPage = isFormConnected(connectedNodes);\n\n\t\tif (hasNextPage) {\n\t\t\tredirectUrl = undefined;\n\t\t\tresponseMode = 'responseNode';\n\t\t}\n\n\t\trenderForm({\n\t\t\tcontext,\n\t\t\tres,\n\t\t\tformTitle,\n\t\t\tformDescription,\n\t\t\tformFields,\n\t\t\tresponseMode,\n\t\t\tmode,\n\t\t\tformSubmittedText,\n\t\t\tredirectUrl,\n\t\t\tappendAttribution,\n\t\t\tbuttonLabel,\n\t\t\tcustomCss: options.customCss,\n\t\t});\n\n\t\treturn {\n\t\t\tnoWebhookResponse: true,\n\t\t};\n\t}\n\n\tlet { useWorkflowTimezone } = options;\n\n\tif (useWorkflowTimezone === undefined && node.typeVersion > 2) {\n\t\tuseWorkflowTimezone = true;\n\t}\n\n\tconst returnItem = await prepareFormReturnItem(context, formFields, mode, useWorkflowTimezone);\n\n\treturn {\n\t\twebhookResponse: { status: 200 },\n\t\tworkflowData: [[returnItem]],\n\t};\n}\n\nexport function resolveRawData(context: IWebhookFunctions, rawData: string) {\n\tconst resolvables = getResolvables(rawData);\n\tlet returnData: string = rawData;\n\n\tif (returnData.startsWith('=')) {\n\t\treturnData = returnData.replace(/^=+/, '');\n\t} else {\n\t\treturn returnData;\n\t}\n\n\tif (resolvables.length) {\n\t\tfor (const resolvable of resolvables) {\n\t\t\tconst resolvedValue = context.evaluateExpression(`${resolvable}`);\n\n\t\t\tif (typeof resolvedValue === 'object' && resolvedValue !== null) {\n\t\t\t\treturnData = returnData.replace(resolvable, JSON.stringify(resolvedValue));\n\t\t\t} else {\n\t\t\t\treturnData = returnData.replace(resolvable, resolvedValue as string);\n\t\t\t}\n\t\t}\n\t}\n\treturn returnData;\n}\n"],"mappings":"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","names":["sanitize","isbot"]}
|
|
1
|
+
{"version":3,"sources":["../../../nodes/Form/utils.ts"],"sourcesContent":["import type { Response } from 'express';\nimport isbot from 'isbot';\nimport { DateTime } from 'luxon';\nimport type {\n\tINodeExecutionData,\n\tMultiPartFormData,\n\tIDataObject,\n\tIWebhookFunctions,\n\tFormFieldsParameter,\n\tNodeTypeAndVersion,\n} from 'n8n-workflow';\nimport {\n\tFORM_NODE_TYPE,\n\tFORM_TRIGGER_NODE_TYPE,\n\tNodeOperationError,\n\tWAIT_NODE_TYPE,\n\tjsonParse,\n} from 'n8n-workflow';\nimport sanitize from 'sanitize-html';\n\nimport type { FormTriggerData, FormTriggerInput } from './interfaces';\nimport { FORM_TRIGGER_AUTHENTICATION_PROPERTY } from './interfaces';\nimport { getResolvables } from '../../utils/utilities';\nimport { WebhookAuthorizationError } from '../Webhook/error';\nimport { validateWebhookAuthentication } from '../Webhook/utils';\n\nexport function sanitizeHtml(text: string) {\n\treturn sanitize(text, {\n\t\tallowedTags: [\n\t\t\t'b',\n\t\t\t'div',\n\t\t\t'i',\n\t\t\t'iframe',\n\t\t\t'img',\n\t\t\t'video',\n\t\t\t'source',\n\t\t\t'em',\n\t\t\t'strong',\n\t\t\t'a',\n\t\t\t'h1',\n\t\t\t'h2',\n\t\t\t'h3',\n\t\t\t'h4',\n\t\t\t'h5',\n\t\t\t'h6',\n\t\t\t'u',\n\t\t\t'sub',\n\t\t\t'sup',\n\t\t\t'code',\n\t\t\t'pre',\n\t\t\t'span',\n\t\t\t'br',\n\t\t\t'ul',\n\t\t\t'ol',\n\t\t\t'li',\n\t\t\t'p',\n\t\t],\n\t\tallowedAttributes: {\n\t\t\ta: ['href', 'target', 'rel'],\n\t\t\timg: ['src', 'alt', 'width', 'height'],\n\t\t\tvideo: ['*'],\n\t\t\tiframe: ['*'],\n\t\t\tsource: ['*'],\n\t\t},\n\t\ttransformTags: {\n\t\t\tiframe: sanitize.simpleTransform('iframe', {\n\t\t\t\tsandbox: '',\n\t\t\t\treferrerpolicy: 'strict-origin-when-cross-origin',\n\t\t\t\tallow: 'fullscreen; autoplay; encrypted-media',\n\t\t\t}),\n\t\t},\n\t});\n}\n\nexport const prepareFormFields = (context: IWebhookFunctions, fields: FormFieldsParameter) => {\n\treturn fields.map((field) => {\n\t\tif (field.fieldType === 'html') {\n\t\t\tlet { html } = field;\n\n\t\t\tif (!html) return field;\n\n\t\t\tfor (const resolvable of getResolvables(html)) {\n\t\t\t\thtml = html.replace(resolvable, context.evaluateExpression(resolvable) as string);\n\t\t\t}\n\n\t\t\tfield.html = sanitizeHtml(html as string);\n\t\t}\n\n\t\tif (field.fieldType === 'hiddenField') {\n\t\t\tfield.fieldLabel = field.fieldName as string;\n\t\t}\n\n\t\treturn field;\n\t});\n};\n\nexport function sanitizeCustomCss(css: string | undefined): string | undefined {\n\tif (!css) return undefined;\n\n\t// Use sanitize-html with custom settings for CSS\n\treturn sanitize(css, {\n\t\tallowedTags: [], // No HTML tags allowed\n\t\tallowedAttributes: {}, // No attributes allowed\n\t\t// This ensures we're only keeping the text content\n\t\t// which should be the CSS, while removing any HTML/script tags\n\t});\n}\n\nexport function createDescriptionMetadata(description: string) {\n\treturn description === ''\n\t\t? 'n8n form'\n\t\t: description.replace(/^\\s*\\n+|<\\/?[^>]+(>|$)/g, '').slice(0, 150);\n}\n\nexport function prepareFormData({\n\tformTitle,\n\tformDescription,\n\tformSubmittedHeader,\n\tformSubmittedText,\n\tredirectUrl,\n\tformFields,\n\ttestRun,\n\tquery,\n\tinstanceId,\n\tuseResponseData,\n\tappendAttribution = true,\n\tbuttonLabel,\n\tcustomCss,\n}: {\n\tformTitle: string;\n\tformDescription: string;\n\tformSubmittedText: string | undefined;\n\tredirectUrl: string | undefined;\n\tformFields: FormFieldsParameter;\n\ttestRun: boolean;\n\tquery: IDataObject;\n\tinstanceId?: string;\n\tuseResponseData?: boolean;\n\tappendAttribution?: boolean;\n\tbuttonLabel?: string;\n\tformSubmittedHeader?: string;\n\tcustomCss?: string;\n}) {\n\tconst utm_campaign = instanceId ? `&utm_campaign=${instanceId}` : '';\n\tconst n8nWebsiteLink = `https://n8n.io/?utm_source=n8n-internal&utm_medium=form-trigger${utm_campaign}`;\n\n\tif (formSubmittedText === undefined) {\n\t\tformSubmittedText = 'Your response has been recorded';\n\t}\n\n\tconst formData: FormTriggerData = {\n\t\ttestRun,\n\t\tformTitle,\n\t\tformDescription,\n\t\tformDescriptionMetadata: createDescriptionMetadata(formDescription),\n\t\tformSubmittedHeader,\n\t\tformSubmittedText,\n\t\tn8nWebsiteLink,\n\t\tformFields: [],\n\t\tuseResponseData,\n\t\tappendAttribution,\n\t\tbuttonLabel,\n\t\tdangerousCustomCss: sanitizeCustomCss(customCss),\n\t};\n\n\tif (redirectUrl) {\n\t\tif (!redirectUrl.includes('://')) {\n\t\t\tredirectUrl = `http://${redirectUrl}`;\n\t\t}\n\t\tformData.redirectUrl = redirectUrl;\n\t}\n\n\tfor (const [index, field] of formFields.entries()) {\n\t\tconst { fieldType, requiredField, multiselect, placeholder } = field;\n\n\t\tconst input: IDataObject = {\n\t\t\tid: `field-${index}`,\n\t\t\terrorId: `error-field-${index}`,\n\t\t\tlabel: field.fieldLabel,\n\t\t\tinputRequired: requiredField ? 'form-required' : '',\n\t\t\tdefaultValue: query[field.fieldLabel] ?? '',\n\t\t\tplaceholder,\n\t\t};\n\n\t\tif (multiselect) {\n\t\t\tinput.isMultiSelect = true;\n\t\t\tinput.multiSelectOptions =\n\t\t\t\tfield.fieldOptions?.values.map((e, i) => ({\n\t\t\t\t\tid: `option${i}_${input.id}`,\n\t\t\t\t\tlabel: e.option,\n\t\t\t\t})) ?? [];\n\t\t} else if (fieldType === 'file') {\n\t\t\tinput.isFileInput = true;\n\t\t\tinput.acceptFileTypes = field.acceptFileTypes;\n\t\t\tinput.multipleFiles = field.multipleFiles ? 'multiple' : '';\n\t\t} else if (fieldType === 'dropdown') {\n\t\t\tinput.isSelect = true;\n\t\t\tconst fieldOptions = field.fieldOptions?.values ?? [];\n\t\t\tinput.selectOptions = fieldOptions.map((e) => e.option);\n\t\t} else if (fieldType === 'textarea') {\n\t\t\tinput.isTextarea = true;\n\t\t} else if (fieldType === 'html') {\n\t\t\tinput.isHtml = true;\n\t\t\tinput.html = field.html as string;\n\t\t} else if (fieldType === 'hiddenField') {\n\t\t\tinput.isHidden = true;\n\t\t\tinput.hiddenName = field.fieldName as string;\n\t\t\tinput.hiddenValue =\n\t\t\t\tinput.defaultValue === '' ? (field.fieldValue as string) : input.defaultValue;\n\t\t} else {\n\t\t\tinput.isInput = true;\n\t\t\tinput.type = fieldType as 'text' | 'number' | 'date' | 'email';\n\t\t}\n\n\t\tformData.formFields.push(input as FormTriggerInput);\n\t}\n\n\treturn formData;\n}\n\nexport const validateResponseModeConfiguration = (context: IWebhookFunctions) => {\n\tconst responseMode = context.getNodeParameter('responseMode', 'onReceived') as string;\n\tconst connectedNodes = context.getChildNodes(context.getNode().name);\n\tconst nodeVersion = context.getNode().typeVersion;\n\n\tconst isRespondToWebhookConnected = connectedNodes.some(\n\t\t(node) => node.type === 'n8n-nodes-base.respondToWebhook',\n\t);\n\n\tif (!isRespondToWebhookConnected && responseMode === 'responseNode') {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error('No Respond to Webhook node found in the workflow'),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'Insert a Respond to Webhook node to your workflow to respond to the form submission or choose another option for the “Respond When” parameter',\n\t\t\t},\n\t\t);\n\t}\n\n\tif (isRespondToWebhookConnected && responseMode !== 'responseNode' && nodeVersion <= 2.1) {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error(`${context.getNode().name} node not correctly configured`),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'Set the “Respond When” parameter to “Using Respond to Webhook Node” or remove the Respond to Webhook node',\n\t\t\t},\n\t\t);\n\t}\n\n\tif (isRespondToWebhookConnected && nodeVersion > 2.1) {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error(\n\t\t\t\t'The \"Respond to Webhook\" node is not supported in workflows initiated by the \"n8n Form Trigger\"',\n\t\t\t),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'To configure your response, add an \"n8n Form\" node and set the \"Page Type\" to \"Form Ending\"',\n\t\t\t},\n\t\t);\n\t}\n};\n\nexport function addFormResponseDataToReturnItem(\n\treturnItem: INodeExecutionData,\n\tformFields: FormFieldsParameter,\n\tbodyData: IDataObject,\n) {\n\tfor (const [index, field] of formFields.entries()) {\n\t\tconst key = `field-${index}`;\n\t\tconst name = field.fieldLabel ?? field.fieldName;\n\t\tlet value = bodyData[key] ?? null;\n\n\t\tif (value === null) {\n\t\t\treturnItem.json[name] = null;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (field.fieldType === 'html') {\n\t\t\tif (field.elementName) {\n\t\t\t\treturnItem.json[field.elementName] = value;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (field.fieldType === 'number') {\n\t\t\tvalue = Number(value);\n\t\t}\n\t\tif (field.fieldType === 'text') {\n\t\t\tvalue = String(value).trim();\n\t\t}\n\t\tif (field.multiselect && typeof value === 'string') {\n\t\t\tvalue = jsonParse(value);\n\t\t}\n\t\tif (field.fieldType === 'date' && value && field.formatDate !== '') {\n\t\t\tvalue = DateTime.fromFormat(String(value), 'yyyy-mm-dd').toFormat(field.formatDate as string);\n\t\t}\n\t\tif (field.fieldType === 'file' && field.multipleFiles && !Array.isArray(value)) {\n\t\t\tvalue = [value];\n\t\t}\n\n\t\treturnItem.json[name] = value;\n\t}\n}\n\nexport async function prepareFormReturnItem(\n\tcontext: IWebhookFunctions,\n\tformFields: FormFieldsParameter,\n\tmode: 'test' | 'production',\n\tuseWorkflowTimezone: boolean = false,\n) {\n\tconst bodyData = (context.getBodyData().data as IDataObject) ?? {};\n\tconst files = (context.getBodyData().files as IDataObject) ?? {};\n\n\tconst returnItem: INodeExecutionData = {\n\t\tjson: {},\n\t};\n\tif (files && Object.keys(files).length) {\n\t\treturnItem.binary = {};\n\t}\n\n\tfor (const key of Object.keys(files)) {\n\t\tconst processFiles: MultiPartFormData.File[] = [];\n\t\tlet multiFile = false;\n\t\tconst filesInput = files[key] as MultiPartFormData.File[] | MultiPartFormData.File;\n\n\t\tif (Array.isArray(filesInput)) {\n\t\t\tbodyData[key] = filesInput.map((file) => ({\n\t\t\t\tfilename: file.originalFilename,\n\t\t\t\tmimetype: file.mimetype,\n\t\t\t\tsize: file.size,\n\t\t\t}));\n\t\t\tprocessFiles.push(...filesInput);\n\t\t\tmultiFile = true;\n\t\t} else {\n\t\t\tbodyData[key] = {\n\t\t\t\tfilename: filesInput.originalFilename,\n\t\t\t\tmimetype: filesInput.mimetype,\n\t\t\t\tsize: filesInput.size,\n\t\t\t};\n\t\t\tprocessFiles.push(filesInput);\n\t\t}\n\n\t\tconst entryIndex = Number(key.replace(/field-/g, ''));\n\t\tconst fieldLabel = isNaN(entryIndex) ? key : formFields[entryIndex].fieldLabel;\n\n\t\tlet fileCount = 0;\n\t\tfor (const file of processFiles) {\n\t\t\tlet binaryPropertyName = fieldLabel.replace(/\\W/g, '_');\n\n\t\t\tif (multiFile) {\n\t\t\t\tbinaryPropertyName += `_${fileCount++}`;\n\t\t\t}\n\n\t\t\treturnItem.binary![binaryPropertyName] = await context.nodeHelpers.copyBinaryFile(\n\t\t\t\tfile.filepath,\n\t\t\t\tfile.originalFilename ?? file.newFilename,\n\t\t\t\tfile.mimetype,\n\t\t\t);\n\t\t}\n\t}\n\n\taddFormResponseDataToReturnItem(returnItem, formFields, bodyData);\n\n\tconst timezone = useWorkflowTimezone ? context.getTimezone() : 'UTC';\n\treturnItem.json.submittedAt = DateTime.now().setZone(timezone).toISO();\n\n\treturnItem.json.formMode = mode;\n\n\tif (\n\t\tcontext.getNode().type === FORM_TRIGGER_NODE_TYPE &&\n\t\tObject.keys(context.getRequestObject().query || {}).length\n\t) {\n\t\treturnItem.json.formQueryParameters = context.getRequestObject().query;\n\t}\n\n\treturn returnItem;\n}\n\nexport function renderForm({\n\tcontext,\n\tres,\n\tformTitle,\n\tformDescription,\n\tformFields,\n\tresponseMode,\n\tmode,\n\tformSubmittedText,\n\tredirectUrl,\n\tappendAttribution,\n\tbuttonLabel,\n\tcustomCss,\n}: {\n\tcontext: IWebhookFunctions;\n\tres: Response;\n\tformTitle: string;\n\tformDescription: string;\n\tformFields: FormFieldsParameter;\n\tresponseMode: string;\n\tmode: 'test' | 'production';\n\tformSubmittedText?: string;\n\tredirectUrl?: string;\n\tappendAttribution?: boolean;\n\tbuttonLabel?: string;\n\tcustomCss?: string;\n}) {\n\tformDescription = (formDescription || '').replace(/\\\\n/g, '\\n').replace(/<br>/g, '\\n');\n\tconst instanceId = context.getInstanceId();\n\n\tconst useResponseData = responseMode === 'responseNode';\n\n\tlet query: IDataObject = {};\n\n\tif (context.getNode().type === FORM_TRIGGER_NODE_TYPE) {\n\t\tquery = context.getRequestObject().query as IDataObject;\n\t} else if (context.getNode().type === FORM_NODE_TYPE) {\n\t\tconst parentNodes = context.getParentNodes(context.getNode().name);\n\t\tconst trigger = parentNodes.find(\n\t\t\t(node) => node.type === FORM_TRIGGER_NODE_TYPE,\n\t\t) as NodeTypeAndVersion;\n\t\ttry {\n\t\t\tconst triggerQueryParameters = context.evaluateExpression(\n\t\t\t\t`{{ $('${trigger?.name}').first().json.formQueryParameters }}`,\n\t\t\t) as IDataObject;\n\n\t\t\tif (triggerQueryParameters) {\n\t\t\t\tquery = triggerQueryParameters;\n\t\t\t}\n\t\t} catch (error) {}\n\t}\n\n\tformFields = prepareFormFields(context, formFields);\n\n\tconst data = prepareFormData({\n\t\tformTitle,\n\t\tformDescription,\n\t\tformSubmittedText,\n\t\tredirectUrl,\n\t\tformFields,\n\t\ttestRun: mode === 'test',\n\t\tquery,\n\t\tinstanceId,\n\t\tuseResponseData,\n\t\tappendAttribution,\n\t\tbuttonLabel,\n\t\tcustomCss,\n\t});\n\n\tres.render('form-trigger', data);\n}\n\nexport const isFormConnected = (nodes: NodeTypeAndVersion[]) => {\n\treturn nodes.some(\n\t\t(n) =>\n\t\t\tn.type === FORM_NODE_TYPE || (n.type === WAIT_NODE_TYPE && n.parameters?.resume === 'form'),\n\t);\n};\n\nexport async function formWebhook(\n\tcontext: IWebhookFunctions,\n\tauthProperty = FORM_TRIGGER_AUTHENTICATION_PROPERTY,\n) {\n\tconst node = context.getNode();\n\tconst options = context.getNodeParameter('options', {}) as {\n\t\tignoreBots?: boolean;\n\t\trespondWithOptions?: {\n\t\t\tvalues: {\n\t\t\t\trespondWith: 'text' | 'redirect';\n\t\t\t\tformSubmittedText: string;\n\t\t\t\tredirectUrl: string;\n\t\t\t};\n\t\t};\n\t\tformSubmittedText?: string;\n\t\tuseWorkflowTimezone?: boolean;\n\t\tappendAttribution?: boolean;\n\t\tbuttonLabel?: string;\n\t\tcustomCss?: string;\n\t};\n\tconst res = context.getResponseObject();\n\tconst req = context.getRequestObject();\n\n\ttry {\n\t\tif (options.ignoreBots && isbot(req.headers['user-agent'])) {\n\t\t\tthrow new WebhookAuthorizationError(403);\n\t\t}\n\t\tif (node.typeVersion > 1) {\n\t\t\tawait validateWebhookAuthentication(context, authProperty);\n\t\t}\n\t} catch (error) {\n\t\tif (error instanceof WebhookAuthorizationError) {\n\t\t\tres.setHeader('WWW-Authenticate', 'Basic realm=\"Enter credentials\"');\n\t\t\tres.status(401).send();\n\t\t\treturn { noWebhookResponse: true };\n\t\t}\n\t\tthrow error;\n\t}\n\n\tconst mode = context.getMode() === 'manual' ? 'test' : 'production';\n\tconst formFields = context.getNodeParameter('formFields.values', []) as FormFieldsParameter;\n\n\tconst method = context.getRequestObject().method;\n\n\tvalidateResponseModeConfiguration(context);\n\n\t//Show the form on GET request\n\tif (method === 'GET') {\n\t\tconst formTitle = context.getNodeParameter('formTitle', '') as string;\n\t\tconst formDescription = sanitizeHtml(context.getNodeParameter('formDescription', '') as string);\n\t\tlet responseMode = context.getNodeParameter('responseMode', '') as string;\n\n\t\tlet formSubmittedText;\n\t\tlet redirectUrl;\n\t\tlet appendAttribution = true;\n\n\t\tif (options.respondWithOptions) {\n\t\t\tconst values = (options.respondWithOptions as IDataObject).values as IDataObject;\n\t\t\tif (values.respondWith === 'text') {\n\t\t\t\tformSubmittedText = values.formSubmittedText as string;\n\t\t\t}\n\t\t\tif (values.respondWith === 'redirect') {\n\t\t\t\tredirectUrl = values.redirectUrl as string;\n\t\t\t}\n\t\t} else {\n\t\t\tformSubmittedText = options.formSubmittedText as string;\n\t\t}\n\n\t\tif (options.appendAttribution === false) {\n\t\t\tappendAttribution = false;\n\t\t}\n\n\t\tlet buttonLabel = 'Submit';\n\n\t\tif (options.buttonLabel) {\n\t\t\tbuttonLabel = options.buttonLabel;\n\t\t}\n\n\t\tconst connectedNodes = context.getChildNodes(context.getNode().name, {\n\t\t\tincludeNodeParameters: true,\n\t\t});\n\t\tconst hasNextPage = isFormConnected(connectedNodes);\n\n\t\tif (hasNextPage) {\n\t\t\tredirectUrl = undefined;\n\t\t\tresponseMode = 'responseNode';\n\t\t}\n\n\t\trenderForm({\n\t\t\tcontext,\n\t\t\tres,\n\t\t\tformTitle,\n\t\t\tformDescription,\n\t\t\tformFields,\n\t\t\tresponseMode,\n\t\t\tmode,\n\t\t\tformSubmittedText,\n\t\t\tredirectUrl,\n\t\t\tappendAttribution,\n\t\t\tbuttonLabel,\n\t\t\tcustomCss: options.customCss,\n\t\t});\n\n\t\treturn {\n\t\t\tnoWebhookResponse: true,\n\t\t};\n\t}\n\n\tlet { useWorkflowTimezone } = options;\n\n\tif (useWorkflowTimezone === undefined && node.typeVersion > 2) {\n\t\tuseWorkflowTimezone = true;\n\t}\n\n\tconst returnItem = await prepareFormReturnItem(context, formFields, mode, useWorkflowTimezone);\n\n\treturn {\n\t\twebhookResponse: { status: 200 },\n\t\tworkflowData: [[returnItem]],\n\t};\n}\n\nexport function resolveRawData(context: IWebhookFunctions, rawData: string) {\n\tconst resolvables = getResolvables(rawData);\n\tlet returnData: string = rawData;\n\n\tif (returnData.startsWith('=')) {\n\t\treturnData = returnData.replace(/^=+/, '');\n\t} else {\n\t\treturn returnData;\n\t}\n\n\tif (resolvables.length) {\n\t\tfor (const resolvable of resolvables) {\n\t\t\tconst resolvedValue = context.evaluateExpression(`${resolvable}`);\n\n\t\t\tif (typeof resolvedValue === 'object' && resolvedValue !== null) {\n\t\t\t\treturnData = returnData.replace(resolvable, JSON.stringify(resolvedValue));\n\t\t\t} else {\n\t\t\t\treturnData = returnData.replace(resolvable, resolvedValue as string);\n\t\t\t}\n\t\t}\n\t}\n\treturn returnData;\n}\n"],"mappings":"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","names":["sanitize","isbot"]}
|
|
@@ -24,19 +24,19 @@ module.exports = __toCommonJS(Freshdesk_node_exports);
|
|
|
24
24
|
var import_n8n_workflow = require("n8n-workflow");
|
|
25
25
|
var import_ContactDescription = require("./ContactDescription");
|
|
26
26
|
var import_GenericFunctions = require("./GenericFunctions");
|
|
27
|
-
const
|
|
27
|
+
const Status = {
|
|
28
28
|
Open: 2,
|
|
29
29
|
Pending: 3,
|
|
30
30
|
Resolved: 4,
|
|
31
31
|
Closed: 5
|
|
32
32
|
};
|
|
33
|
-
const
|
|
33
|
+
const Priority = {
|
|
34
34
|
Low: 1,
|
|
35
35
|
Medium: 2,
|
|
36
36
|
High: 3,
|
|
37
37
|
Urgent: 4
|
|
38
38
|
};
|
|
39
|
-
const
|
|
39
|
+
const Source = {
|
|
40
40
|
Email: 1,
|
|
41
41
|
Portal: 2,
|
|
42
42
|
Phone: 3,
|
|
@@ -1048,11 +1048,8 @@ class Freshdesk {
|
|
|
1048
1048
|
const source = this.getNodeParameter("source", i);
|
|
1049
1049
|
const options = this.getNodeParameter("options", i);
|
|
1050
1050
|
const body = {
|
|
1051
|
-
// @ts-ignore
|
|
1052
1051
|
status: Status[(0, import_GenericFunctions.capitalize)(status)],
|
|
1053
|
-
// @ts-ignore
|
|
1054
1052
|
priority: Priority[(0, import_GenericFunctions.capitalize)(priority)],
|
|
1055
|
-
// @ts-ignore
|
|
1056
1053
|
source: Source[(0, import_GenericFunctions.capitalize)(source)]
|
|
1057
1054
|
};
|
|
1058
1055
|
if (requester === "requesterId") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../nodes/Freshdesk/Freshdesk.node.ts"],"sourcesContent":["import type {\n\tIExecuteFunctions,\n\tIDataObject,\n\tILoadOptionsFunctions,\n\tINodeExecutionData,\n\tINodePropertyOptions,\n\tINodeType,\n\tINodeTypeDescription,\n} from 'n8n-workflow';\nimport { NodeConnectionTypes, NodeOperationError } from 'n8n-workflow';\n\nimport { contactFields, contactOperations } from './ContactDescription';\nimport type { ICreateContactBody } from './ContactInterface';\nimport {\n\tcapitalize,\n\tfreshdeskApiRequest,\n\tfreshdeskApiRequestAllItems,\n\t// validateJSON,\n} from './GenericFunctions';\n\nconst Statuses = {\n\tOpen: 2,\n\tPending: 3,\n\tResolved: 4,\n\tClosed: 5,\n} as const;\n\ntype Status = (typeof Statuses)[keyof typeof Statuses];\n\nconst Priorities = {\n\tLow: 1,\n\tMedium: 2,\n\tHigh: 3,\n\tUrgent: 4,\n} as const;\n\ntype Priority = (typeof Priorities)[keyof typeof Priorities];\n\nconst Sources = {\n\tEmail: 1,\n\tPortal: 2,\n\tPhone: 3,\n\tChat: 7,\n\tMobihelp: 8,\n\tFeedbackWidget: 9,\n\tOutboundEmail: 10,\n} as const;\n\ntype Source = (typeof Sources)[keyof typeof Sources];\n\ninterface ICreateTicketBody {\n\tname?: string;\n\trequester_id?: number;\n\temail?: string;\n\tfacebook_id?: string;\n\tphone?: string;\n\ttwitter_id?: string;\n\tunique_external_id?: string;\n\tsubject?: string | null;\n\ttype?: string;\n\tstatus?: Status;\n\tpriority?: Priority;\n\tdescription?: string;\n\tresponder_id?: number;\n\tcc_emails?: [string];\n\tcustom_fields?: IDataObject;\n\tdue_by?: string;\n\temail_config_id?: number;\n\tfr_due_by?: string;\n\tgroup_id?: number;\n\tproduct_id?: number;\n\tsource?: Source;\n\ttags?: [string];\n\tcompany_id?: number;\n}\n\nexport class Freshdesk implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Freshdesk',\n\t\tname: 'freshdesk',\n\n\t\ticon: 'file:freshdesk.svg',\n\t\tgroup: ['output'],\n\t\tversion: 1,\n\t\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\t\tdescription: 'Consume Freshdesk API',\n\t\tdefaults: {\n\t\t\tname: 'Freshdesk',\n\t\t},\n\t\tusableAsTool: true,\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'freshdeskApi',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Resource',\n\t\t\t\tname: 'resource',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\trequired: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Contact',\n\t\t\t\t\t\tvalue: 'contact',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Ticket',\n\t\t\t\t\t\tvalue: 'ticket',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'ticket',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Operation',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Create',\n\t\t\t\t\t\tvalue: 'create',\n\t\t\t\t\t\tdescription: 'Create a new ticket',\n\t\t\t\t\t\taction: 'Create a ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Delete',\n\t\t\t\t\t\tvalue: 'delete',\n\t\t\t\t\t\tdescription: 'Delete a ticket',\n\t\t\t\t\t\taction: 'Delete a ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Get',\n\t\t\t\t\t\tvalue: 'get',\n\t\t\t\t\t\tdescription: 'Get a ticket',\n\t\t\t\t\t\taction: 'Get a ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Get Many',\n\t\t\t\t\t\tvalue: 'getAll',\n\t\t\t\t\t\tdescription: 'Get many tickets',\n\t\t\t\t\t\taction: 'Get many tickets',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Update',\n\t\t\t\t\t\tvalue: 'update',\n\t\t\t\t\t\tdescription: 'Update a ticket',\n\t\t\t\t\t\taction: 'Update a ticket',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'create',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Requester Identification',\n\t\t\t\tname: 'requester',\n\t\t\t\ttype: 'options',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['create'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Email',\n\t\t\t\t\t\tvalue: 'email',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Email address of the requester. If no contact exists with this email address in Freshdesk, it will be added as a new contact.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Facebook ID',\n\t\t\t\t\t\tvalue: 'facebookId',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Facebook ID of the requester. If no contact exists with this facebook_id, then a new contact will be created.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Phone',\n\t\t\t\t\t\tvalue: 'phone',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Phone number of the requester. If no contact exists with this phone number in Freshdesk, it will be added as a new contact. If the phone number is set and the email address is not, then the name attribute is mandatory.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Requester ID',\n\t\t\t\t\t\tvalue: 'requesterId',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"User ID of the requester. For existing contacts, the requester_id can be passed instead of the requester's email.\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Twitter ID',\n\t\t\t\t\t\tvalue: 'twitterId',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Twitter handle of the requester. If no contact exists with this handle in Freshdesk, it will be added as a new contact.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Unique External ID',\n\t\t\t\t\t\tvalue: 'uniqueExternalId',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'External ID of the requester. If no contact exists with this external ID in Freshdesk, they will be added as a new contact.',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'requesterId',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Value',\n\t\t\t\tname: 'requesterIdentificationValue',\n\t\t\t\ttype: 'string',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['create'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'Value of the identification selected',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Status',\n\t\t\t\tname: 'status',\n\t\t\t\ttype: 'options',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['create'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Closed',\n\t\t\t\t\t\tvalue: 'closed',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Open',\n\t\t\t\t\t\tvalue: 'open',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Pending',\n\t\t\t\t\t\tvalue: 'pending',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Resolved',\n\t\t\t\t\t\tvalue: 'resolved',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'pending',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Priority',\n\t\t\t\tname: 'priority',\n\t\t\t\ttype: 'options',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['create'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Low',\n\t\t\t\t\t\tvalue: 'low',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Medium',\n\t\t\t\t\t\tvalue: 'medium',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'High',\n\t\t\t\t\t\tvalue: 'high',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Urgent',\n\t\t\t\t\t\tvalue: 'urgent',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'low',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Source',\n\t\t\t\tname: 'source',\n\t\t\t\ttype: 'options',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['create'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Chat',\n\t\t\t\t\t\tvalue: 'chat',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Email',\n\t\t\t\t\t\tvalue: 'email',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Feedback Widget',\n\t\t\t\t\t\tvalue: 'feedbackWidget',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Mobihelp',\n\t\t\t\t\t\tvalue: 'mobileHelp',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Outbound Email',\n\t\t\t\t\t\tvalue: 'OutboundEmail',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Phone',\n\t\t\t\t\t\tvalue: 'phone',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Portal',\n\t\t\t\t\t\tvalue: 'portal',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'portal',\n\t\t\t\tdescription: 'The channel through which the ticket was created',\n\t\t\t},\n\t\t\t// {\n\t\t\t// \tdisplayName: 'JSON Parameters',\n\t\t\t// \tname: 'jsonParameters',\n\t\t\t// \ttype: 'boolean',\n\t\t\t// \tdefault: false,\n\t\t\t// \tdescription: '',\n\t\t\t// \tdisplayOptions: {\n\t\t\t// \t\tshow: {\n\t\t\t// \t\t\tresource: [\n\t\t\t// \t\t\t\t'ticket'\n\t\t\t// \t\t\t],\n\t\t\t// \t\t\toperation: [\n\t\t\t// \t\t\t\t'create',\n\t\t\t// \t\t\t]\n\t\t\t// \t\t},\n\t\t\t// \t},\n\t\t\t// },\n\t\t\t{\n\t\t\t\tdisplayName: 'Options',\n\t\t\t\tname: 'options',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add option',\n\t\t\t\tdefault: {},\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['create'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Agent Name or ID',\n\t\t\t\t\t\tname: 'agent',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getAgents',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'ID of the agent to whom the ticket has been assigned. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'CC Emails',\n\t\t\t\t\t\tname: 'ccEmails',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Separated by a comma (,) email addresses added in the 'cc' field of the incoming ticket email\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Company Name or ID',\n\t\t\t\t\t\tname: 'company',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getCompanies',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Company ID of the requester. This attribute can only be set if the Multiple Companies feature is enabled (Estate plan and above). Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Description',\n\t\t\t\t\t\tname: 'description',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\trows: 5,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription: 'HTML content of the ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Due By',\n\t\t\t\t\t\tname: 'dueBy',\n\t\t\t\t\t\ttype: 'dateTime',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Timestamp that denotes when the ticket is due to be resolved',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Email Config ID',\n\t\t\t\t\t\tname: 'emailConfigId',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"ID of email config which is used for this ticket. (i.e., support@yourcompany.com/sales@yourcompany.com) If product_id is given and email_config_id is not given, product's primary email_config_id will be set.\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'FR Due By',\n\t\t\t\t\t\tname: 'frDueBy',\n\t\t\t\t\t\ttype: 'dateTime',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Timestamp that denotes when the first response is due',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Group Name or ID',\n\t\t\t\t\t\tname: 'group',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getGroups',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'ID of the group to which the ticket has been assigned. The default value is the ID of the group that is associated with the given email_config_id. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Name',\n\t\t\t\t\t\tname: 'name',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tplaceholder: '',\n\t\t\t\t\t\tdescription: 'Name of the requester',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Product Name or ID',\n\t\t\t\t\t\tname: 'product',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getProducts',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'ID of the product to which the ticket is associated. It will be ignored if the email_config_id attribute is set in the request. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Subject',\n\t\t\t\t\t\tname: 'subject',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tplaceholder: '',\n\t\t\t\t\t\tdescription: 'Subject of the ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Tags',\n\t\t\t\t\t\tname: 'tags',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Separated by a comma (,) tags that have been associated with the ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Type',\n\t\t\t\t\t\tname: 'type',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: 'Question',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Helps categorize the ticket according to the different kinds of issues your support team deals with',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Feature Request',\n\t\t\t\t\t\t\t\tvalue: 'Feature Request',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Incident',\n\t\t\t\t\t\t\t\tvalue: 'Incident',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Problem',\n\t\t\t\t\t\t\t\tvalue: 'Problem',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Question',\n\t\t\t\t\t\t\t\tvalue: 'Question',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Refund',\n\t\t\t\t\t\t\t\tvalue: 'Refund',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t// {\n\t\t\t// \tdisplayName: 'Custom Fields',\n\t\t\t// \tname: 'customFieldsUi',\n\t\t\t// \tplaceholder: 'Add Custom fields',\n\t\t\t// \ttype: 'fixedCollection',\n\t\t\t// \trequired: false,\n\t\t\t// \tdefault: '',\n\t\t\t// \ttypeOptions: {\n\t\t\t// \t\tmultipleValues: true,\n\t\t\t// \t},\n\t\t\t// \tdisplayOptions: {\n\t\t\t// \t\tshow: {\n\t\t\t// \t\t\tresource: [\n\t\t\t// \t\t\t\t'ticket'\n\t\t\t// \t\t\t],\n\t\t\t// \t\t\toperation: [\n\t\t\t// \t\t\t\t'create'\n\t\t\t// \t\t\t],\n\t\t\t// \t\t\tjsonParameters: [\n\t\t\t// \t\t\t\tfalse,\n\t\t\t// \t\t\t],\n\t\t\t// \t\t},\n\t\t\t// \t},\n\t\t\t// \tdescription: 'Key value pairs containing the names and values of custom fields.',\n\t\t\t// \toptions: [\n\t\t\t// \t\t{\n\t\t\t// \t\t\tname: 'customFieldsValues',\n\t\t\t// \t\t\tdisplayName: 'Custom fields',\n\t\t\t// \t\t\tvalues: [\n\t\t\t// \t\t\t\t{\n\t\t\t// \t\t\t\t\tdisplayName: 'Key',\n\t\t\t// \t\t\t\t\trequired: false,\n\t\t\t// \t\t\t\t\tname: 'key',\n\t\t\t// \t\t\t\t\ttype: 'string',\n\t\t\t// \t\t\t\t\tdefault: '',\n\t\t\t// \t\t\t\t},\n\t\t\t// \t\t\t\t{\n\t\t\t// \t\t\t\t\tdisplayName: 'Value',\n\t\t\t// \t\t\t\t\tname: 'value',\n\t\t\t// \t\t\t\t\ttype: 'string',\n\t\t\t// \t\t\t\t\trequired: false,\n\t\t\t// \t\t\t\t\tdefault: '',\n\t\t\t// \t\t\t\t},\n\t\t\t// \t\t\t],\n\t\t\t// \t\t},\n\t\t\t// \t],\n\t\t\t// },\n\t\t\t// {\n\t\t\t// \tdisplayName: 'Custom Fields',\n\t\t\t// \tname: 'customFieldsJson',\n\t\t\t// \ttype: 'json',\n\t\t\t// \ttypeOptions: {\n\t\t\t// \t\talwaysOpenEditWindow: true,\n\t\t\t// \t},\n\t\t\t// \tdisplayOptions: {\n\t\t\t// \t\tshow: {\n\t\t\t// \t\t\tresource: [\n\t\t\t// \t\t\t\t'ticket',\n\t\t\t// \t\t\t],\n\t\t\t// \t\t\toperation: [\n\t\t\t// \t\t\t\t'create',\n\t\t\t// \t\t\t],\n\t\t\t// \t\t\tjsonParameters: [\n\t\t\t// \t\t\t\ttrue,\n\t\t\t// \t\t\t],\n\t\t\t// \t\t},\n\t\t\t// \t},\n\t\t\t// \tdefault: '',\n\t\t\t// \trequired: false,\n\t\t\t// \tplaceholder: `{\n\t\t\t// \t\t'gadget': 'Cold Welder',\n\t\t\t// \t}`,\n\t\t\t// \tdescription: 'Key value pairs containing the names and values of custom fields.',\n\t\t\t// },\n\t\t\t{\n\t\t\t\tdisplayName: 'Ticket ID',\n\t\t\t\tname: 'ticketId',\n\t\t\t\ttype: 'string',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['update'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Update Fields',\n\t\t\t\tname: 'updateFields',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add Field',\n\t\t\t\tdefault: {},\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['update'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Agent Name or ID',\n\t\t\t\t\t\tname: 'agent',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getAgents',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'ID of the agent to whom the ticket has been assigned. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'CC Emails',\n\t\t\t\t\t\tname: 'ccEmails',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Separated by a comma (,) email addresses added in the 'cc' field of the incoming ticket email\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Company Name or ID',\n\t\t\t\t\t\tname: 'company',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getCompanies',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Company ID of the requester. This attribute can only be set if the Multiple Companies feature is enabled (Estate plan and above). Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Due By',\n\t\t\t\t\t\tname: 'dueBy',\n\t\t\t\t\t\ttype: 'dateTime',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Timestamp that denotes when the ticket is due to be resolved',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Email Config ID',\n\t\t\t\t\t\tname: 'emailConfigId',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"ID of email config which is used for this ticket. (i.e., support@yourcompany.com/sales@yourcompany.com) If product_id is given and email_config_id is not given, product's primary email_config_id will be set.\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'FR Due By',\n\t\t\t\t\t\tname: 'frDueBy',\n\t\t\t\t\t\ttype: 'dateTime',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Timestamp that denotes when the first response is due',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Group Name or ID',\n\t\t\t\t\t\tname: 'group',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getGroups',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'ID of the group to which the ticket has been assigned. The default value is the ID of the group that is associated with the given email_config_id. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Name',\n\t\t\t\t\t\tname: 'name',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tplaceholder: '',\n\t\t\t\t\t\tdescription: 'Name of the requester',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Product Name or ID',\n\t\t\t\t\t\tname: 'product',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getProducts',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'ID of the product to which the ticket is associated. It will be ignored if the email_config_id attribute is set in the request. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Priority',\n\t\t\t\t\t\tname: 'priority',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Low',\n\t\t\t\t\t\t\t\tvalue: 'low',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Medium',\n\t\t\t\t\t\t\t\tvalue: 'medium',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'High',\n\t\t\t\t\t\t\t\tvalue: 'high',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Urgent',\n\t\t\t\t\t\t\t\tvalue: 'urgent',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: 'low',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Requester Identification',\n\t\t\t\t\t\tname: 'requester',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Email',\n\t\t\t\t\t\t\t\tvalue: 'email',\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'Email address of the requester. If no contact exists with this email address in Freshdesk, it will be added as a new contact.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Facebook ID',\n\t\t\t\t\t\t\t\tvalue: 'facebookId',\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'Facebook ID of the requester. If no contact exists with this facebook_id, then a new contact will be created.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Phone',\n\t\t\t\t\t\t\t\tvalue: 'phone',\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'Phone number of the requester. If no contact exists with this phone number in Freshdesk, it will be added as a new contact. If the phone number is set and the email address is not, then the name attribute is mandatory.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Requester ID',\n\t\t\t\t\t\t\t\tvalue: 'requesterId',\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"User ID of the requester. For existing contacts, the requester_id can be passed instead of the requester's email.\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Twitter ID',\n\t\t\t\t\t\t\t\tvalue: 'twitterId',\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'Twitter handle of the requester. If no contact exists with this handle in Freshdesk, it will be added as a new contact.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Unique External ID',\n\t\t\t\t\t\t\t\tvalue: 'uniqueExternalId',\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'External ID of the requester. If no contact exists with this external ID in Freshdesk, they will be added as a new contact.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: 'requesterId',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Requester Value',\n\t\t\t\t\t\tname: 'requesterIdentificationValue',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Value of the identification selected',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Status',\n\t\t\t\t\t\tname: 'status',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Open',\n\t\t\t\t\t\t\t\tvalue: 'open',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Pending',\n\t\t\t\t\t\t\t\tvalue: 'pending',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Resolved',\n\t\t\t\t\t\t\t\tvalue: 'resolved',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Closed',\n\t\t\t\t\t\t\t\tvalue: 'closed',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: 'pending',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Source',\n\t\t\t\t\t\tname: 'source',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Chat',\n\t\t\t\t\t\t\t\tvalue: 'chat',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Email',\n\t\t\t\t\t\t\t\tvalue: 'email',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Feedback Widget',\n\t\t\t\t\t\t\t\tvalue: 'feedbackWidget',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Mobihelp',\n\t\t\t\t\t\t\t\tvalue: 'mobileHelp',\n\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Outbound Email',\n\t\t\t\t\t\t\t\tvalue: 'OutboundEmail',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Phone',\n\t\t\t\t\t\t\t\tvalue: 'phone',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Portal',\n\t\t\t\t\t\t\t\tvalue: 'portal',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: 'portal',\n\t\t\t\t\t\tdescription: 'The channel through which the ticket was created',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Tags',\n\t\t\t\t\t\tname: 'tags',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Separated by a comma (,) tags that have been associated with the ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Type',\n\t\t\t\t\t\tname: 'type',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: 'Question',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Helps categorize the ticket according to the different kinds of issues your support team deals with',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Feature Request',\n\t\t\t\t\t\t\t\tvalue: 'Feature Request',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Incident',\n\t\t\t\t\t\t\t\tvalue: 'Incident',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Problem',\n\t\t\t\t\t\t\t\tvalue: 'Problem',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Question',\n\t\t\t\t\t\t\t\tvalue: 'Question',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Refund',\n\t\t\t\t\t\t\t\tvalue: 'Refund',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Ticket ID',\n\t\t\t\tname: 'ticketId',\n\t\t\t\ttype: 'string',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['get'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Return All',\n\t\t\t\tname: 'returnAll',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['getAll'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: 'Whether to return all results or only up to a given limit',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Limit',\n\t\t\t\tname: 'limit',\n\t\t\t\ttype: 'number',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['getAll'],\n\t\t\t\t\t\treturnAll: [false],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tminValue: 1,\n\t\t\t\t\tmaxValue: 10,\n\t\t\t\t},\n\t\t\t\tdefault: 5,\n\t\t\t\tdescription: 'Max number of results to return',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Options',\n\t\t\t\tname: 'options',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add option',\n\t\t\t\tdefault: {},\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['getAll'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Company ID',\n\t\t\t\t\t\tname: 'companyId',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Include',\n\t\t\t\t\t\tname: 'include',\n\t\t\t\t\t\ttype: 'multiOptions',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Company',\n\t\t\t\t\t\t\t\tvalue: 'company',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Description',\n\t\t\t\t\t\t\t\tvalue: 'description',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Requester',\n\t\t\t\t\t\t\t\tvalue: 'requester',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Stats',\n\t\t\t\t\t\t\t\tvalue: 'stats',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: [],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Order',\n\t\t\t\t\t\tname: 'order',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'ASC',\n\t\t\t\t\t\t\t\tvalue: 'asc',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'DESC',\n\t\t\t\t\t\t\t\tvalue: 'desc',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: 'desc',\n\t\t\t\t\t\tdescription: 'Order sort attribute ascending or descending',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Order By',\n\t\t\t\t\t\tname: 'orderBy',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Created At',\n\t\t\t\t\t\t\t\tvalue: 'createdAt',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Due By',\n\t\t\t\t\t\t\t\tvalue: 'dueBy',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Updated At',\n\t\t\t\t\t\t\t\tvalue: 'updatedAt',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Sort collection by object attribute',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Requester Email',\n\t\t\t\t\t\tname: 'requesterEmail',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Requester ID',\n\t\t\t\t\t\tname: 'requesterId',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Updated Since',\n\t\t\t\t\t\tname: 'updatedSince',\n\t\t\t\t\t\ttype: 'dateTime',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Ticket ID',\n\t\t\t\tname: 'ticketId',\n\t\t\t\ttype: 'string',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['delete'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t// CONTACTS\n\t\t\t...contactOperations,\n\t\t\t...contactFields,\n\t\t],\n\t};\n\n\tmethods = {\n\t\tloadOptions: {\n\t\t\t// Get all the agents to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getAgents(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst agents = await freshdeskApiRequest.call(this, 'GET', '/agents');\n\t\t\t\tfor (const agent of agents) {\n\t\t\t\t\tconst agentName = agent.contact.name;\n\t\t\t\t\tconst agentId = agent.id;\n\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: agentName,\n\t\t\t\t\t\tvalue: agentId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\n\t\t\t// Get all the groups to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getGroups(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst groups = await freshdeskApiRequest.call(this, 'GET', '/groups');\n\t\t\t\tfor (const group of groups) {\n\t\t\t\t\tconst groupName = group.name;\n\t\t\t\t\tconst groupId = group.id;\n\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: groupName,\n\t\t\t\t\t\tvalue: groupId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\n\t\t\t// Get all the products to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getProducts(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst products = await freshdeskApiRequest.call(this, 'GET', '/products');\n\t\t\t\tfor (const product of products) {\n\t\t\t\t\tconst productName = product.name;\n\t\t\t\t\tconst productId = product.id;\n\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: productName,\n\t\t\t\t\t\tvalue: productId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\n\t\t\t// Get all the companies to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getCompanies(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst companies = await freshdeskApiRequest.call(this, 'GET', '/companies');\n\t\t\t\tfor (const company of companies) {\n\t\t\t\t\tconst companyName = company.name;\n\t\t\t\t\tconst companyId = company.id;\n\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: companyName,\n\t\t\t\t\t\tvalue: companyId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\t\t},\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst returnData: INodeExecutionData[] = [];\n\t\tlet responseData;\n\t\tconst qs: IDataObject = {};\n\t\tconst resource = this.getNodeParameter('resource', 0);\n\t\tconst operation = this.getNodeParameter('operation', 0);\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\ttry {\n\t\t\t\tif (resource === 'ticket') {\n\t\t\t\t\t//https://developers.freshdesk.com/api/#create_ticket\n\t\t\t\t\tif (operation === 'create') {\n\t\t\t\t\t\tconst requester = this.getNodeParameter('requester', i) as string;\n\t\t\t\t\t\tconst value = this.getNodeParameter('requesterIdentificationValue', i) as string;\n\t\t\t\t\t\tconst status = this.getNodeParameter('status', i) as string;\n\t\t\t\t\t\tconst priority = this.getNodeParameter('priority', i) as string;\n\t\t\t\t\t\tconst source = this.getNodeParameter('source', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\t//const jsonActive = this.getNodeParameter('jsonParameters') as boolean;\n\t\t\t\t\t\tconst body: ICreateTicketBody = {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tstatus: Status[capitalize(status)],\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tpriority: Priority[capitalize(priority)],\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tsource: Source[capitalize(source)],\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (requester === 'requesterId') {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tif (isNaN(value)) {\n\t\t\t\t\t\t\t\tthrow new NodeOperationError(this.getNode(), 'Requester Id must be a number', {\n\t\t\t\t\t\t\t\t\titemIndex: i,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbody.requester_id = parseInt(value, 10);\n\t\t\t\t\t\t} else if (requester === 'email') {\n\t\t\t\t\t\t\tbody.email = value;\n\t\t\t\t\t\t} else if (requester === 'facebookId') {\n\t\t\t\t\t\t\tbody.facebook_id = value;\n\t\t\t\t\t\t} else if (requester === 'phone') {\n\t\t\t\t\t\t\tbody.phone = value;\n\t\t\t\t\t\t} else if (requester === 'twitterId') {\n\t\t\t\t\t\t\tbody.twitter_id = value;\n\t\t\t\t\t\t} else if (requester === 'uniqueExternalId') {\n\t\t\t\t\t\t\tbody.unique_external_id = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// if (!jsonActive) {\n\t\t\t\t\t\t// \tconst customFieldsUi = this.getNodeParameter('customFieldsUi') as IDataObject;\n\t\t\t\t\t\t// \tif (Object.keys(customFieldsUi).length > 0) {\n\t\t\t\t\t\t// \t\tconst aux: IDataObject = {};\n\t\t\t\t\t\t// \t\t// @ts-ignore\n\t\t\t\t\t\t// \t\tcustomFieldsUi.customFieldsValues.forEach( o => {\n\t\t\t\t\t\t// \t\t\taux[`${o.key}`] = o.value;\n\t\t\t\t\t\t// \t\t\treturn aux;\n\t\t\t\t\t\t// \t\t});\n\t\t\t\t\t\t// \t\tbody.custom_fields = aux;\n\t\t\t\t\t\t// } else {\n\t\t\t\t\t\t// \tbody.custom_fields = validateJSON(this.getNodeParameter('customFielsJson') as string);\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\tif (options.name) {\n\t\t\t\t\t\t\tbody.name = options.name as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.subject) {\n\t\t\t\t\t\t\tbody.subject = options.subject as string;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody.subject = 'null';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.type) {\n\t\t\t\t\t\t\tbody.type = options.type as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.description) {\n\t\t\t\t\t\t\tbody.description = options.description as string;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody.description = 'null';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.agent) {\n\t\t\t\t\t\t\tbody.responder_id = options.agent as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.company) {\n\t\t\t\t\t\t\tbody.company_id = options.company as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.product) {\n\t\t\t\t\t\t\tbody.product_id = options.product as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.group) {\n\t\t\t\t\t\t\tbody.group_id = options.group as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.frDueBy) {\n\t\t\t\t\t\t\tbody.fr_due_by = options.frDueBy as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.emailConfigId) {\n\t\t\t\t\t\t\tbody.email_config_id = options.emailConfigId as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.dueBy) {\n\t\t\t\t\t\t\tbody.due_by = options.dueBy as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.tags) {\n\t\t\t\t\t\t\tbody.tags = (options.tags as string).split(',') as [string];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.ccEmails) {\n\t\t\t\t\t\t\tbody.cc_emails = (options.ccEmails as string).split(',') as [string];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(this, 'POST', '/tickets', body);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.freshdesk.com/api/#update_ticket\n\t\t\t\t\tif (operation === 'update') {\n\t\t\t\t\t\tconst ticketId = this.getNodeParameter('ticketId', i) as string;\n\t\t\t\t\t\tconst updateFields = this.getNodeParameter('updateFields', i);\n\t\t\t\t\t\tconst body: ICreateTicketBody = {};\n\n\t\t\t\t\t\tif (updateFields.requester) {\n\t\t\t\t\t\t\tconst value = updateFields.requesterIdentificationValue as string;\n\t\t\t\t\t\t\tif (updateFields.requester === 'requesterId') {\n\t\t\t\t\t\t\t\tif (isNaN(parseInt(value, 10))) {\n\t\t\t\t\t\t\t\t\tthrow new NodeOperationError(this.getNode(), 'Requester Id must be a number', {\n\t\t\t\t\t\t\t\t\t\titemIndex: i,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbody.requester_id = parseInt(value, 10);\n\t\t\t\t\t\t\t} else if (updateFields.requester === 'email') {\n\t\t\t\t\t\t\t\tbody.email = value;\n\t\t\t\t\t\t\t} else if (updateFields.requester === 'facebookId') {\n\t\t\t\t\t\t\t\tbody.facebook_id = value;\n\t\t\t\t\t\t\t} else if (updateFields.requester === 'phone') {\n\t\t\t\t\t\t\t\tbody.phone = value;\n\t\t\t\t\t\t\t} else if (updateFields.requester === 'twitterId') {\n\t\t\t\t\t\t\t\tbody.twitter_id = value;\n\t\t\t\t\t\t\t} else if (updateFields.requester === 'uniqueExternalId') {\n\t\t\t\t\t\t\t\tbody.unique_external_id = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.status) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status = Status[capitalize(updateFields.status)];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.priority) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.priority = Priority[capitalize(updateFields.priority)];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.source) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.source = Source[capitalize(updateFields.source)];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.name) {\n\t\t\t\t\t\t\tbody.name = updateFields.name as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.type) {\n\t\t\t\t\t\t\tbody.type = updateFields.type as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.agent) {\n\t\t\t\t\t\t\tbody.responder_id = updateFields.agent as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.company) {\n\t\t\t\t\t\t\tbody.company_id = updateFields.company as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.product) {\n\t\t\t\t\t\t\tbody.product_id = updateFields.product as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.group) {\n\t\t\t\t\t\t\tbody.group_id = updateFields.group as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.frDueBy) {\n\t\t\t\t\t\t\tbody.fr_due_by = updateFields.frDueBy as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.emailConfigId) {\n\t\t\t\t\t\t\tbody.email_config_id = updateFields.emailConfigId as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.dueBy) {\n\t\t\t\t\t\t\tbody.due_by = updateFields.dueBy as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.tags) {\n\t\t\t\t\t\t\tbody.tags = (updateFields.tags as string).split(',') as [string];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.ccEmails) {\n\t\t\t\t\t\t\tbody.cc_emails = (updateFields.ccEmails as string).split(',') as [string];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'PUT',\n\t\t\t\t\t\t\t`/tickets/${ticketId}`,\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.freshdesk.com/api/#view_a_ticket\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\tconst ticketId = this.getNodeParameter('ticketId', i) as string;\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(this, 'GET', `/tickets/${ticketId}`);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.freshdesk.com/api/#list_all_tickets\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tif (options.requesterId) {\n\t\t\t\t\t\t\tqs.requester_id = options.requesterId as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.requesterEmail) {\n\t\t\t\t\t\t\tqs.email = options.requesterEmail as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.companyId) {\n\t\t\t\t\t\t\tqs.company_id = options.companyId as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.updatedSince) {\n\t\t\t\t\t\t\tqs.updated_since = options.updatedSince as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.orderBy) {\n\t\t\t\t\t\t\tqs.order_by = options.orderBy as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.order) {\n\t\t\t\t\t\t\tqs.order_type = options.order as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.include) {\n\t\t\t\t\t\t\tif ((options.include as string[]).length !== 0) {\n\t\t\t\t\t\t\t\tqs.include = (options.include as string[]).join(',');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await freshdeskApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/tickets',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.per_page = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(this, 'GET', '/tickets', {}, qs);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.freshdesk.com/api/#delete_a_ticket\n\t\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\t\tconst ticketId = this.getNodeParameter('ticketId', i) as string;\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(this, 'DELETE', `/tickets/${ticketId}`);\n\t\t\t\t\t}\n\t\t\t\t} else if (resource === 'contact') {\n\t\t\t\t\t//https://developers.freshdesk.com/api/#create_contact\n\t\t\t\t\tif (operation === 'create') {\n\t\t\t\t\t\tconst name = this.getNodeParameter('name', i) as string;\n\t\t\t\t\t\tconst email = this.getNodeParameter('email', i) as string;\n\t\t\t\t\t\tconst additionalFields = this.getNodeParameter('additionalFields', i, {});\n\n\t\t\t\t\t\tif (additionalFields.customFields) {\n\t\t\t\t\t\t\tconst metadata = (additionalFields.customFields as IDataObject)\n\t\t\t\t\t\t\t\t.customField as IDataObject[];\n\t\t\t\t\t\t\tadditionalFields.custom_fields = {};\n\t\t\t\t\t\t\tfor (const data of metadata) {\n\t\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\t\tadditionalFields.custom_fields[data.name as string] = data.value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete additionalFields.customFields;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst body: ICreateContactBody = additionalFields;\n\t\t\t\t\t\tbody.name = name;\n\t\t\t\t\t\tif (email) {\n\t\t\t\t\t\t\tbody.email = email;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(this, 'POST', '/contacts', body);\n\t\t\t\t\t\t//https://developers.freshdesk.com/api/#delete_contact\n\t\t\t\t\t} else if (operation === 'delete') {\n\t\t\t\t\t\tconst contactId = this.getNodeParameter('contactId', i) as string;\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'DELETE',\n\t\t\t\t\t\t\t`/contacts/${contactId}`,\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (operation === 'get') {\n\t\t\t\t\t\tconst contactId = this.getNodeParameter('contactId', i) as string;\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t`/contacts/${contactId}`,\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t);\n\t\t\t\t\t\t//https://developers.freshdesk.com/api/#list_all_contacts\n\t\t\t\t\t} else if (operation === 'getAll') {\n\t\t\t\t\t\tconst filters = this.getNodeParameter('filters', i, {});\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(this, 'GET', '/contacts', {}, filters);\n\t\t\t\t\t\t//https://developers.freshdesk.com/api/#update_contact\n\t\t\t\t\t} else if (operation === 'update') {\n\t\t\t\t\t\tconst contactId = this.getNodeParameter('contactId', i) as string;\n\t\t\t\t\t\tconst additionalFields = this.getNodeParameter('additionalFields', i, {});\n\n\t\t\t\t\t\tif (additionalFields.customFields) {\n\t\t\t\t\t\t\tconst metadata = (additionalFields.customFields as IDataObject)\n\t\t\t\t\t\t\t\t.customField as IDataObject[];\n\t\t\t\t\t\t\tadditionalFields.custom_fields = {};\n\t\t\t\t\t\t\tfor (const data of metadata) {\n\t\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\t\tadditionalFields.custom_fields[data.name as string] = data.value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete additionalFields.customFields;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst body: ICreateContactBody = additionalFields;\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'PUT',\n\t\t\t\t\t\t\t`/contacts/${contactId}`,\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!Array.isArray(responseData) && responseData === undefined) {\n\t\t\t\t\tresponseData = {\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\tthis.helpers.returnJsonArray(responseData as IDataObject[]),\n\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t);\n\t\t\t\treturnData.push(...executionData);\n\t\t\t} catch (error) {\n\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\tconst executionErrorData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\tthis.helpers.returnJsonArray({ error: error.message }),\n\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t);\n\t\t\t\t\treturnData.push(...executionErrorData);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\treturn [returnData];\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../nodes/Freshdesk/Freshdesk.node.ts"],"sourcesContent":["import type {\n\tIExecuteFunctions,\n\tIDataObject,\n\tILoadOptionsFunctions,\n\tINodeExecutionData,\n\tINodePropertyOptions,\n\tINodeType,\n\tINodeTypeDescription,\n} from 'n8n-workflow';\nimport { NodeConnectionTypes, NodeOperationError } from 'n8n-workflow';\n\nimport { contactFields, contactOperations } from './ContactDescription';\nimport type { ICreateContactBody } from './ContactInterface';\nimport {\n\tcapitalize,\n\tfreshdeskApiRequest,\n\tfreshdeskApiRequestAllItems,\n\t// validateJSON,\n} from './GenericFunctions';\n\nconst Status = {\n\tOpen: 2,\n\tPending: 3,\n\tResolved: 4,\n\tClosed: 5,\n} as const;\n\nconst Priority = {\n\tLow: 1,\n\tMedium: 2,\n\tHigh: 3,\n\tUrgent: 4,\n} as const;\n\nconst Source = {\n\tEmail: 1,\n\tPortal: 2,\n\tPhone: 3,\n\tChat: 7,\n\tMobihelp: 8,\n\tFeedbackWidget: 9,\n\tOutboundEmail: 10,\n} as const;\n\ntype StatusKey = keyof typeof Status;\ntype PriorityKey = keyof typeof Priority;\ntype SourceKey = keyof typeof Source;\n\ntype StatusValue = (typeof Status)[keyof typeof Status];\ntype PriorityValue = (typeof Priority)[keyof typeof Priority];\ntype SourceValue = (typeof Source)[keyof typeof Source];\n\ninterface ICreateTicketBody {\n\tname?: string;\n\trequester_id?: number;\n\temail?: string;\n\tfacebook_id?: string;\n\tphone?: string;\n\ttwitter_id?: string;\n\tunique_external_id?: string;\n\tsubject?: string | null;\n\ttype?: string;\n\tstatus?: StatusValue;\n\tpriority?: PriorityValue;\n\tdescription?: string;\n\tresponder_id?: number;\n\tcc_emails?: [string];\n\tcustom_fields?: IDataObject;\n\tdue_by?: string;\n\temail_config_id?: number;\n\tfr_due_by?: string;\n\tgroup_id?: number;\n\tproduct_id?: number;\n\tsource?: SourceValue;\n\ttags?: [string];\n\tcompany_id?: number;\n}\n\nexport class Freshdesk implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Freshdesk',\n\t\tname: 'freshdesk',\n\n\t\ticon: 'file:freshdesk.svg',\n\t\tgroup: ['output'],\n\t\tversion: 1,\n\t\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\t\tdescription: 'Consume Freshdesk API',\n\t\tdefaults: {\n\t\t\tname: 'Freshdesk',\n\t\t},\n\t\tusableAsTool: true,\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'freshdeskApi',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Resource',\n\t\t\t\tname: 'resource',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\trequired: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Contact',\n\t\t\t\t\t\tvalue: 'contact',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Ticket',\n\t\t\t\t\t\tvalue: 'ticket',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'ticket',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Operation',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Create',\n\t\t\t\t\t\tvalue: 'create',\n\t\t\t\t\t\tdescription: 'Create a new ticket',\n\t\t\t\t\t\taction: 'Create a ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Delete',\n\t\t\t\t\t\tvalue: 'delete',\n\t\t\t\t\t\tdescription: 'Delete a ticket',\n\t\t\t\t\t\taction: 'Delete a ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Get',\n\t\t\t\t\t\tvalue: 'get',\n\t\t\t\t\t\tdescription: 'Get a ticket',\n\t\t\t\t\t\taction: 'Get a ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Get Many',\n\t\t\t\t\t\tvalue: 'getAll',\n\t\t\t\t\t\tdescription: 'Get many tickets',\n\t\t\t\t\t\taction: 'Get many tickets',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Update',\n\t\t\t\t\t\tvalue: 'update',\n\t\t\t\t\t\tdescription: 'Update a ticket',\n\t\t\t\t\t\taction: 'Update a ticket',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'create',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Requester Identification',\n\t\t\t\tname: 'requester',\n\t\t\t\ttype: 'options',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['create'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Email',\n\t\t\t\t\t\tvalue: 'email',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Email address of the requester. If no contact exists with this email address in Freshdesk, it will be added as a new contact.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Facebook ID',\n\t\t\t\t\t\tvalue: 'facebookId',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Facebook ID of the requester. If no contact exists with this facebook_id, then a new contact will be created.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Phone',\n\t\t\t\t\t\tvalue: 'phone',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Phone number of the requester. If no contact exists with this phone number in Freshdesk, it will be added as a new contact. If the phone number is set and the email address is not, then the name attribute is mandatory.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Requester ID',\n\t\t\t\t\t\tvalue: 'requesterId',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"User ID of the requester. For existing contacts, the requester_id can be passed instead of the requester's email.\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Twitter ID',\n\t\t\t\t\t\tvalue: 'twitterId',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Twitter handle of the requester. If no contact exists with this handle in Freshdesk, it will be added as a new contact.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Unique External ID',\n\t\t\t\t\t\tvalue: 'uniqueExternalId',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'External ID of the requester. If no contact exists with this external ID in Freshdesk, they will be added as a new contact.',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'requesterId',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Value',\n\t\t\t\tname: 'requesterIdentificationValue',\n\t\t\t\ttype: 'string',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['create'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'Value of the identification selected',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Status',\n\t\t\t\tname: 'status',\n\t\t\t\ttype: 'options',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['create'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Closed',\n\t\t\t\t\t\tvalue: 'closed',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Open',\n\t\t\t\t\t\tvalue: 'open',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Pending',\n\t\t\t\t\t\tvalue: 'pending',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Resolved',\n\t\t\t\t\t\tvalue: 'resolved',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'pending',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Priority',\n\t\t\t\tname: 'priority',\n\t\t\t\ttype: 'options',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['create'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Low',\n\t\t\t\t\t\tvalue: 'low',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Medium',\n\t\t\t\t\t\tvalue: 'medium',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'High',\n\t\t\t\t\t\tvalue: 'high',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Urgent',\n\t\t\t\t\t\tvalue: 'urgent',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'low',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Source',\n\t\t\t\tname: 'source',\n\t\t\t\ttype: 'options',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['create'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Chat',\n\t\t\t\t\t\tvalue: 'chat',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Email',\n\t\t\t\t\t\tvalue: 'email',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Feedback Widget',\n\t\t\t\t\t\tvalue: 'feedbackWidget',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Mobihelp',\n\t\t\t\t\t\tvalue: 'mobileHelp',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Outbound Email',\n\t\t\t\t\t\tvalue: 'OutboundEmail',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Phone',\n\t\t\t\t\t\tvalue: 'phone',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Portal',\n\t\t\t\t\t\tvalue: 'portal',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'portal',\n\t\t\t\tdescription: 'The channel through which the ticket was created',\n\t\t\t},\n\t\t\t// {\n\t\t\t// \tdisplayName: 'JSON Parameters',\n\t\t\t// \tname: 'jsonParameters',\n\t\t\t// \ttype: 'boolean',\n\t\t\t// \tdefault: false,\n\t\t\t// \tdescription: '',\n\t\t\t// \tdisplayOptions: {\n\t\t\t// \t\tshow: {\n\t\t\t// \t\t\tresource: [\n\t\t\t// \t\t\t\t'ticket'\n\t\t\t// \t\t\t],\n\t\t\t// \t\t\toperation: [\n\t\t\t// \t\t\t\t'create',\n\t\t\t// \t\t\t]\n\t\t\t// \t\t},\n\t\t\t// \t},\n\t\t\t// },\n\t\t\t{\n\t\t\t\tdisplayName: 'Options',\n\t\t\t\tname: 'options',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add option',\n\t\t\t\tdefault: {},\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['create'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Agent Name or ID',\n\t\t\t\t\t\tname: 'agent',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getAgents',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'ID of the agent to whom the ticket has been assigned. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'CC Emails',\n\t\t\t\t\t\tname: 'ccEmails',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Separated by a comma (,) email addresses added in the 'cc' field of the incoming ticket email\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Company Name or ID',\n\t\t\t\t\t\tname: 'company',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getCompanies',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Company ID of the requester. This attribute can only be set if the Multiple Companies feature is enabled (Estate plan and above). Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Description',\n\t\t\t\t\t\tname: 'description',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\trows: 5,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription: 'HTML content of the ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Due By',\n\t\t\t\t\t\tname: 'dueBy',\n\t\t\t\t\t\ttype: 'dateTime',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Timestamp that denotes when the ticket is due to be resolved',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Email Config ID',\n\t\t\t\t\t\tname: 'emailConfigId',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"ID of email config which is used for this ticket. (i.e., support@yourcompany.com/sales@yourcompany.com) If product_id is given and email_config_id is not given, product's primary email_config_id will be set.\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'FR Due By',\n\t\t\t\t\t\tname: 'frDueBy',\n\t\t\t\t\t\ttype: 'dateTime',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Timestamp that denotes when the first response is due',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Group Name or ID',\n\t\t\t\t\t\tname: 'group',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getGroups',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'ID of the group to which the ticket has been assigned. The default value is the ID of the group that is associated with the given email_config_id. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Name',\n\t\t\t\t\t\tname: 'name',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tplaceholder: '',\n\t\t\t\t\t\tdescription: 'Name of the requester',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Product Name or ID',\n\t\t\t\t\t\tname: 'product',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getProducts',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'ID of the product to which the ticket is associated. It will be ignored if the email_config_id attribute is set in the request. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Subject',\n\t\t\t\t\t\tname: 'subject',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tplaceholder: '',\n\t\t\t\t\t\tdescription: 'Subject of the ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Tags',\n\t\t\t\t\t\tname: 'tags',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Separated by a comma (,) tags that have been associated with the ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Type',\n\t\t\t\t\t\tname: 'type',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: 'Question',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Helps categorize the ticket according to the different kinds of issues your support team deals with',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Feature Request',\n\t\t\t\t\t\t\t\tvalue: 'Feature Request',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Incident',\n\t\t\t\t\t\t\t\tvalue: 'Incident',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Problem',\n\t\t\t\t\t\t\t\tvalue: 'Problem',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Question',\n\t\t\t\t\t\t\t\tvalue: 'Question',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Refund',\n\t\t\t\t\t\t\t\tvalue: 'Refund',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t// {\n\t\t\t// \tdisplayName: 'Custom Fields',\n\t\t\t// \tname: 'customFieldsUi',\n\t\t\t// \tplaceholder: 'Add Custom fields',\n\t\t\t// \ttype: 'fixedCollection',\n\t\t\t// \trequired: false,\n\t\t\t// \tdefault: '',\n\t\t\t// \ttypeOptions: {\n\t\t\t// \t\tmultipleValues: true,\n\t\t\t// \t},\n\t\t\t// \tdisplayOptions: {\n\t\t\t// \t\tshow: {\n\t\t\t// \t\t\tresource: [\n\t\t\t// \t\t\t\t'ticket'\n\t\t\t// \t\t\t],\n\t\t\t// \t\t\toperation: [\n\t\t\t// \t\t\t\t'create'\n\t\t\t// \t\t\t],\n\t\t\t// \t\t\tjsonParameters: [\n\t\t\t// \t\t\t\tfalse,\n\t\t\t// \t\t\t],\n\t\t\t// \t\t},\n\t\t\t// \t},\n\t\t\t// \tdescription: 'Key value pairs containing the names and values of custom fields.',\n\t\t\t// \toptions: [\n\t\t\t// \t\t{\n\t\t\t// \t\t\tname: 'customFieldsValues',\n\t\t\t// \t\t\tdisplayName: 'Custom fields',\n\t\t\t// \t\t\tvalues: [\n\t\t\t// \t\t\t\t{\n\t\t\t// \t\t\t\t\tdisplayName: 'Key',\n\t\t\t// \t\t\t\t\trequired: false,\n\t\t\t// \t\t\t\t\tname: 'key',\n\t\t\t// \t\t\t\t\ttype: 'string',\n\t\t\t// \t\t\t\t\tdefault: '',\n\t\t\t// \t\t\t\t},\n\t\t\t// \t\t\t\t{\n\t\t\t// \t\t\t\t\tdisplayName: 'Value',\n\t\t\t// \t\t\t\t\tname: 'value',\n\t\t\t// \t\t\t\t\ttype: 'string',\n\t\t\t// \t\t\t\t\trequired: false,\n\t\t\t// \t\t\t\t\tdefault: '',\n\t\t\t// \t\t\t\t},\n\t\t\t// \t\t\t],\n\t\t\t// \t\t},\n\t\t\t// \t],\n\t\t\t// },\n\t\t\t// {\n\t\t\t// \tdisplayName: 'Custom Fields',\n\t\t\t// \tname: 'customFieldsJson',\n\t\t\t// \ttype: 'json',\n\t\t\t// \ttypeOptions: {\n\t\t\t// \t\talwaysOpenEditWindow: true,\n\t\t\t// \t},\n\t\t\t// \tdisplayOptions: {\n\t\t\t// \t\tshow: {\n\t\t\t// \t\t\tresource: [\n\t\t\t// \t\t\t\t'ticket',\n\t\t\t// \t\t\t],\n\t\t\t// \t\t\toperation: [\n\t\t\t// \t\t\t\t'create',\n\t\t\t// \t\t\t],\n\t\t\t// \t\t\tjsonParameters: [\n\t\t\t// \t\t\t\ttrue,\n\t\t\t// \t\t\t],\n\t\t\t// \t\t},\n\t\t\t// \t},\n\t\t\t// \tdefault: '',\n\t\t\t// \trequired: false,\n\t\t\t// \tplaceholder: `{\n\t\t\t// \t\t'gadget': 'Cold Welder',\n\t\t\t// \t}`,\n\t\t\t// \tdescription: 'Key value pairs containing the names and values of custom fields.',\n\t\t\t// },\n\t\t\t{\n\t\t\t\tdisplayName: 'Ticket ID',\n\t\t\t\tname: 'ticketId',\n\t\t\t\ttype: 'string',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['update'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Update Fields',\n\t\t\t\tname: 'updateFields',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add Field',\n\t\t\t\tdefault: {},\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['update'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Agent Name or ID',\n\t\t\t\t\t\tname: 'agent',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getAgents',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'ID of the agent to whom the ticket has been assigned. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'CC Emails',\n\t\t\t\t\t\tname: 'ccEmails',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Separated by a comma (,) email addresses added in the 'cc' field of the incoming ticket email\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Company Name or ID',\n\t\t\t\t\t\tname: 'company',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getCompanies',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Company ID of the requester. This attribute can only be set if the Multiple Companies feature is enabled (Estate plan and above). Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Due By',\n\t\t\t\t\t\tname: 'dueBy',\n\t\t\t\t\t\ttype: 'dateTime',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Timestamp that denotes when the ticket is due to be resolved',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Email Config ID',\n\t\t\t\t\t\tname: 'emailConfigId',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"ID of email config which is used for this ticket. (i.e., support@yourcompany.com/sales@yourcompany.com) If product_id is given and email_config_id is not given, product's primary email_config_id will be set.\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'FR Due By',\n\t\t\t\t\t\tname: 'frDueBy',\n\t\t\t\t\t\ttype: 'dateTime',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Timestamp that denotes when the first response is due',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Group Name or ID',\n\t\t\t\t\t\tname: 'group',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getGroups',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'ID of the group to which the ticket has been assigned. The default value is the ID of the group that is associated with the given email_config_id. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Name',\n\t\t\t\t\t\tname: 'name',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tplaceholder: '',\n\t\t\t\t\t\tdescription: 'Name of the requester',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Product Name or ID',\n\t\t\t\t\t\tname: 'product',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsMethod: 'getProducts',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'ID of the product to which the ticket is associated. It will be ignored if the email_config_id attribute is set in the request. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Priority',\n\t\t\t\t\t\tname: 'priority',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Low',\n\t\t\t\t\t\t\t\tvalue: 'low',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Medium',\n\t\t\t\t\t\t\t\tvalue: 'medium',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'High',\n\t\t\t\t\t\t\t\tvalue: 'high',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Urgent',\n\t\t\t\t\t\t\t\tvalue: 'urgent',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: 'low',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Requester Identification',\n\t\t\t\t\t\tname: 'requester',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Email',\n\t\t\t\t\t\t\t\tvalue: 'email',\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'Email address of the requester. If no contact exists with this email address in Freshdesk, it will be added as a new contact.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Facebook ID',\n\t\t\t\t\t\t\t\tvalue: 'facebookId',\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'Facebook ID of the requester. If no contact exists with this facebook_id, then a new contact will be created.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Phone',\n\t\t\t\t\t\t\t\tvalue: 'phone',\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'Phone number of the requester. If no contact exists with this phone number in Freshdesk, it will be added as a new contact. If the phone number is set and the email address is not, then the name attribute is mandatory.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Requester ID',\n\t\t\t\t\t\t\t\tvalue: 'requesterId',\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"User ID of the requester. For existing contacts, the requester_id can be passed instead of the requester's email.\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Twitter ID',\n\t\t\t\t\t\t\t\tvalue: 'twitterId',\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'Twitter handle of the requester. If no contact exists with this handle in Freshdesk, it will be added as a new contact.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Unique External ID',\n\t\t\t\t\t\t\t\tvalue: 'uniqueExternalId',\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'External ID of the requester. If no contact exists with this external ID in Freshdesk, they will be added as a new contact.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: 'requesterId',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Requester Value',\n\t\t\t\t\t\tname: 'requesterIdentificationValue',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Value of the identification selected',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Status',\n\t\t\t\t\t\tname: 'status',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Open',\n\t\t\t\t\t\t\t\tvalue: 'open',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Pending',\n\t\t\t\t\t\t\t\tvalue: 'pending',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Resolved',\n\t\t\t\t\t\t\t\tvalue: 'resolved',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Closed',\n\t\t\t\t\t\t\t\tvalue: 'closed',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: 'pending',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Source',\n\t\t\t\t\t\tname: 'source',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Chat',\n\t\t\t\t\t\t\t\tvalue: 'chat',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Email',\n\t\t\t\t\t\t\t\tvalue: 'email',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Feedback Widget',\n\t\t\t\t\t\t\t\tvalue: 'feedbackWidget',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Mobihelp',\n\t\t\t\t\t\t\t\tvalue: 'mobileHelp',\n\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Outbound Email',\n\t\t\t\t\t\t\t\tvalue: 'OutboundEmail',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Phone',\n\t\t\t\t\t\t\t\tvalue: 'phone',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Portal',\n\t\t\t\t\t\t\t\tvalue: 'portal',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: 'portal',\n\t\t\t\t\t\tdescription: 'The channel through which the ticket was created',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Tags',\n\t\t\t\t\t\tname: 'tags',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Separated by a comma (,) tags that have been associated with the ticket',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Type',\n\t\t\t\t\t\tname: 'type',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdefault: 'Question',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Helps categorize the ticket according to the different kinds of issues your support team deals with',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Feature Request',\n\t\t\t\t\t\t\t\tvalue: 'Feature Request',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Incident',\n\t\t\t\t\t\t\t\tvalue: 'Incident',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Problem',\n\t\t\t\t\t\t\t\tvalue: 'Problem',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Question',\n\t\t\t\t\t\t\t\tvalue: 'Question',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Refund',\n\t\t\t\t\t\t\t\tvalue: 'Refund',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Ticket ID',\n\t\t\t\tname: 'ticketId',\n\t\t\t\ttype: 'string',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['get'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Return All',\n\t\t\t\tname: 'returnAll',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['getAll'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: 'Whether to return all results or only up to a given limit',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Limit',\n\t\t\t\tname: 'limit',\n\t\t\t\ttype: 'number',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['getAll'],\n\t\t\t\t\t\treturnAll: [false],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tminValue: 1,\n\t\t\t\t\tmaxValue: 10,\n\t\t\t\t},\n\t\t\t\tdefault: 5,\n\t\t\t\tdescription: 'Max number of results to return',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Options',\n\t\t\t\tname: 'options',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add option',\n\t\t\t\tdefault: {},\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['getAll'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Company ID',\n\t\t\t\t\t\tname: 'companyId',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Include',\n\t\t\t\t\t\tname: 'include',\n\t\t\t\t\t\ttype: 'multiOptions',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Company',\n\t\t\t\t\t\t\t\tvalue: 'company',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Description',\n\t\t\t\t\t\t\t\tvalue: 'description',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Requester',\n\t\t\t\t\t\t\t\tvalue: 'requester',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Stats',\n\t\t\t\t\t\t\t\tvalue: 'stats',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: [],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Order',\n\t\t\t\t\t\tname: 'order',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'ASC',\n\t\t\t\t\t\t\t\tvalue: 'asc',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'DESC',\n\t\t\t\t\t\t\t\tvalue: 'desc',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: 'desc',\n\t\t\t\t\t\tdescription: 'Order sort attribute ascending or descending',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Order By',\n\t\t\t\t\t\tname: 'orderBy',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Created At',\n\t\t\t\t\t\t\t\tvalue: 'createdAt',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Due By',\n\t\t\t\t\t\t\t\tvalue: 'dueBy',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'Updated At',\n\t\t\t\t\t\t\t\tvalue: 'updatedAt',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'Sort collection by object attribute',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Requester Email',\n\t\t\t\t\t\tname: 'requesterEmail',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Requester ID',\n\t\t\t\t\t\tname: 'requesterId',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Updated Since',\n\t\t\t\t\t\tname: 'updatedSince',\n\t\t\t\t\t\ttype: 'dateTime',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Ticket ID',\n\t\t\t\tname: 'ticketId',\n\t\t\t\ttype: 'string',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['ticket'],\n\t\t\t\t\t\toperation: ['delete'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t// CONTACTS\n\t\t\t...contactOperations,\n\t\t\t...contactFields,\n\t\t],\n\t};\n\n\tmethods = {\n\t\tloadOptions: {\n\t\t\t// Get all the agents to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getAgents(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst agents = await freshdeskApiRequest.call(this, 'GET', '/agents');\n\t\t\t\tfor (const agent of agents) {\n\t\t\t\t\tconst agentName = agent.contact.name;\n\t\t\t\t\tconst agentId = agent.id;\n\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: agentName,\n\t\t\t\t\t\tvalue: agentId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\n\t\t\t// Get all the groups to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getGroups(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst groups = await freshdeskApiRequest.call(this, 'GET', '/groups');\n\t\t\t\tfor (const group of groups) {\n\t\t\t\t\tconst groupName = group.name;\n\t\t\t\t\tconst groupId = group.id;\n\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: groupName,\n\t\t\t\t\t\tvalue: groupId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\n\t\t\t// Get all the products to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getProducts(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst products = await freshdeskApiRequest.call(this, 'GET', '/products');\n\t\t\t\tfor (const product of products) {\n\t\t\t\t\tconst productName = product.name;\n\t\t\t\t\tconst productId = product.id;\n\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: productName,\n\t\t\t\t\t\tvalue: productId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\n\t\t\t// Get all the companies to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getCompanies(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst companies = await freshdeskApiRequest.call(this, 'GET', '/companies');\n\t\t\t\tfor (const company of companies) {\n\t\t\t\t\tconst companyName = company.name;\n\t\t\t\t\tconst companyId = company.id;\n\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: companyName,\n\t\t\t\t\t\tvalue: companyId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\t\t},\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst returnData: INodeExecutionData[] = [];\n\t\tlet responseData;\n\t\tconst qs: IDataObject = {};\n\t\tconst resource = this.getNodeParameter('resource', 0);\n\t\tconst operation = this.getNodeParameter('operation', 0);\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\ttry {\n\t\t\t\tif (resource === 'ticket') {\n\t\t\t\t\t//https://developers.freshdesk.com/api/#create_ticket\n\t\t\t\t\tif (operation === 'create') {\n\t\t\t\t\t\tconst requester = this.getNodeParameter('requester', i) as string;\n\t\t\t\t\t\tconst value = this.getNodeParameter('requesterIdentificationValue', i) as string;\n\t\t\t\t\t\tconst status = this.getNodeParameter('status', i) as string;\n\t\t\t\t\t\tconst priority = this.getNodeParameter('priority', i) as string;\n\t\t\t\t\t\tconst source = this.getNodeParameter('source', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\t//const jsonActive = this.getNodeParameter('jsonParameters') as boolean;\n\t\t\t\t\t\tconst body: ICreateTicketBody = {\n\t\t\t\t\t\t\tstatus: Status[capitalize(status) as StatusKey],\n\t\t\t\t\t\t\tpriority: Priority[capitalize(priority) as PriorityKey],\n\t\t\t\t\t\t\tsource: Source[capitalize(source) as SourceKey],\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (requester === 'requesterId') {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tif (isNaN(value)) {\n\t\t\t\t\t\t\t\tthrow new NodeOperationError(this.getNode(), 'Requester Id must be a number', {\n\t\t\t\t\t\t\t\t\titemIndex: i,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbody.requester_id = parseInt(value, 10);\n\t\t\t\t\t\t} else if (requester === 'email') {\n\t\t\t\t\t\t\tbody.email = value;\n\t\t\t\t\t\t} else if (requester === 'facebookId') {\n\t\t\t\t\t\t\tbody.facebook_id = value;\n\t\t\t\t\t\t} else if (requester === 'phone') {\n\t\t\t\t\t\t\tbody.phone = value;\n\t\t\t\t\t\t} else if (requester === 'twitterId') {\n\t\t\t\t\t\t\tbody.twitter_id = value;\n\t\t\t\t\t\t} else if (requester === 'uniqueExternalId') {\n\t\t\t\t\t\t\tbody.unique_external_id = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// if (!jsonActive) {\n\t\t\t\t\t\t// \tconst customFieldsUi = this.getNodeParameter('customFieldsUi') as IDataObject;\n\t\t\t\t\t\t// \tif (Object.keys(customFieldsUi).length > 0) {\n\t\t\t\t\t\t// \t\tconst aux: IDataObject = {};\n\t\t\t\t\t\t// \t\t// @ts-ignore\n\t\t\t\t\t\t// \t\tcustomFieldsUi.customFieldsValues.forEach( o => {\n\t\t\t\t\t\t// \t\t\taux[`${o.key}`] = o.value;\n\t\t\t\t\t\t// \t\t\treturn aux;\n\t\t\t\t\t\t// \t\t});\n\t\t\t\t\t\t// \t\tbody.custom_fields = aux;\n\t\t\t\t\t\t// } else {\n\t\t\t\t\t\t// \tbody.custom_fields = validateJSON(this.getNodeParameter('customFielsJson') as string);\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\tif (options.name) {\n\t\t\t\t\t\t\tbody.name = options.name as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.subject) {\n\t\t\t\t\t\t\tbody.subject = options.subject as string;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody.subject = 'null';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.type) {\n\t\t\t\t\t\t\tbody.type = options.type as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.description) {\n\t\t\t\t\t\t\tbody.description = options.description as string;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbody.description = 'null';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.agent) {\n\t\t\t\t\t\t\tbody.responder_id = options.agent as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.company) {\n\t\t\t\t\t\t\tbody.company_id = options.company as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.product) {\n\t\t\t\t\t\t\tbody.product_id = options.product as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.group) {\n\t\t\t\t\t\t\tbody.group_id = options.group as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.frDueBy) {\n\t\t\t\t\t\t\tbody.fr_due_by = options.frDueBy as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.emailConfigId) {\n\t\t\t\t\t\t\tbody.email_config_id = options.emailConfigId as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.dueBy) {\n\t\t\t\t\t\t\tbody.due_by = options.dueBy as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.tags) {\n\t\t\t\t\t\t\tbody.tags = (options.tags as string).split(',') as [string];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.ccEmails) {\n\t\t\t\t\t\t\tbody.cc_emails = (options.ccEmails as string).split(',') as [string];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(this, 'POST', '/tickets', body);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.freshdesk.com/api/#update_ticket\n\t\t\t\t\tif (operation === 'update') {\n\t\t\t\t\t\tconst ticketId = this.getNodeParameter('ticketId', i) as string;\n\t\t\t\t\t\tconst updateFields = this.getNodeParameter('updateFields', i);\n\t\t\t\t\t\tconst body: ICreateTicketBody = {};\n\n\t\t\t\t\t\tif (updateFields.requester) {\n\t\t\t\t\t\t\tconst value = updateFields.requesterIdentificationValue as string;\n\t\t\t\t\t\t\tif (updateFields.requester === 'requesterId') {\n\t\t\t\t\t\t\t\tif (isNaN(parseInt(value, 10))) {\n\t\t\t\t\t\t\t\t\tthrow new NodeOperationError(this.getNode(), 'Requester Id must be a number', {\n\t\t\t\t\t\t\t\t\t\titemIndex: i,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbody.requester_id = parseInt(value, 10);\n\t\t\t\t\t\t\t} else if (updateFields.requester === 'email') {\n\t\t\t\t\t\t\t\tbody.email = value;\n\t\t\t\t\t\t\t} else if (updateFields.requester === 'facebookId') {\n\t\t\t\t\t\t\t\tbody.facebook_id = value;\n\t\t\t\t\t\t\t} else if (updateFields.requester === 'phone') {\n\t\t\t\t\t\t\t\tbody.phone = value;\n\t\t\t\t\t\t\t} else if (updateFields.requester === 'twitterId') {\n\t\t\t\t\t\t\t\tbody.twitter_id = value;\n\t\t\t\t\t\t\t} else if (updateFields.requester === 'uniqueExternalId') {\n\t\t\t\t\t\t\t\tbody.unique_external_id = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.status) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status = Status[capitalize(updateFields.status)];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.priority) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.priority = Priority[capitalize(updateFields.priority)];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.source) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.source = Source[capitalize(updateFields.source)];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.name) {\n\t\t\t\t\t\t\tbody.name = updateFields.name as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.type) {\n\t\t\t\t\t\t\tbody.type = updateFields.type as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.agent) {\n\t\t\t\t\t\t\tbody.responder_id = updateFields.agent as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.company) {\n\t\t\t\t\t\t\tbody.company_id = updateFields.company as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.product) {\n\t\t\t\t\t\t\tbody.product_id = updateFields.product as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.group) {\n\t\t\t\t\t\t\tbody.group_id = updateFields.group as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.frDueBy) {\n\t\t\t\t\t\t\tbody.fr_due_by = updateFields.frDueBy as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.emailConfigId) {\n\t\t\t\t\t\t\tbody.email_config_id = updateFields.emailConfigId as number;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.dueBy) {\n\t\t\t\t\t\t\tbody.due_by = updateFields.dueBy as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.tags) {\n\t\t\t\t\t\t\tbody.tags = (updateFields.tags as string).split(',') as [string];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateFields.ccEmails) {\n\t\t\t\t\t\t\tbody.cc_emails = (updateFields.ccEmails as string).split(',') as [string];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'PUT',\n\t\t\t\t\t\t\t`/tickets/${ticketId}`,\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.freshdesk.com/api/#view_a_ticket\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\tconst ticketId = this.getNodeParameter('ticketId', i) as string;\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(this, 'GET', `/tickets/${ticketId}`);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.freshdesk.com/api/#list_all_tickets\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tif (options.requesterId) {\n\t\t\t\t\t\t\tqs.requester_id = options.requesterId as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.requesterEmail) {\n\t\t\t\t\t\t\tqs.email = options.requesterEmail as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.companyId) {\n\t\t\t\t\t\t\tqs.company_id = options.companyId as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.updatedSince) {\n\t\t\t\t\t\t\tqs.updated_since = options.updatedSince as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.orderBy) {\n\t\t\t\t\t\t\tqs.order_by = options.orderBy as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.order) {\n\t\t\t\t\t\t\tqs.order_type = options.order as string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options.include) {\n\t\t\t\t\t\t\tif ((options.include as string[]).length !== 0) {\n\t\t\t\t\t\t\t\tqs.include = (options.include as string[]).join(',');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await freshdeskApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/tickets',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.per_page = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(this, 'GET', '/tickets', {}, qs);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.freshdesk.com/api/#delete_a_ticket\n\t\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\t\tconst ticketId = this.getNodeParameter('ticketId', i) as string;\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(this, 'DELETE', `/tickets/${ticketId}`);\n\t\t\t\t\t}\n\t\t\t\t} else if (resource === 'contact') {\n\t\t\t\t\t//https://developers.freshdesk.com/api/#create_contact\n\t\t\t\t\tif (operation === 'create') {\n\t\t\t\t\t\tconst name = this.getNodeParameter('name', i) as string;\n\t\t\t\t\t\tconst email = this.getNodeParameter('email', i) as string;\n\t\t\t\t\t\tconst additionalFields = this.getNodeParameter('additionalFields', i, {});\n\n\t\t\t\t\t\tif (additionalFields.customFields) {\n\t\t\t\t\t\t\tconst metadata = (additionalFields.customFields as IDataObject)\n\t\t\t\t\t\t\t\t.customField as IDataObject[];\n\t\t\t\t\t\t\tadditionalFields.custom_fields = {};\n\t\t\t\t\t\t\tfor (const data of metadata) {\n\t\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\t\tadditionalFields.custom_fields[data.name as string] = data.value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete additionalFields.customFields;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst body: ICreateContactBody = additionalFields;\n\t\t\t\t\t\tbody.name = name;\n\t\t\t\t\t\tif (email) {\n\t\t\t\t\t\t\tbody.email = email;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(this, 'POST', '/contacts', body);\n\t\t\t\t\t\t//https://developers.freshdesk.com/api/#delete_contact\n\t\t\t\t\t} else if (operation === 'delete') {\n\t\t\t\t\t\tconst contactId = this.getNodeParameter('contactId', i) as string;\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'DELETE',\n\t\t\t\t\t\t\t`/contacts/${contactId}`,\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (operation === 'get') {\n\t\t\t\t\t\tconst contactId = this.getNodeParameter('contactId', i) as string;\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t`/contacts/${contactId}`,\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t);\n\t\t\t\t\t\t//https://developers.freshdesk.com/api/#list_all_contacts\n\t\t\t\t\t} else if (operation === 'getAll') {\n\t\t\t\t\t\tconst filters = this.getNodeParameter('filters', i, {});\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(this, 'GET', '/contacts', {}, filters);\n\t\t\t\t\t\t//https://developers.freshdesk.com/api/#update_contact\n\t\t\t\t\t} else if (operation === 'update') {\n\t\t\t\t\t\tconst contactId = this.getNodeParameter('contactId', i) as string;\n\t\t\t\t\t\tconst additionalFields = this.getNodeParameter('additionalFields', i, {});\n\n\t\t\t\t\t\tif (additionalFields.customFields) {\n\t\t\t\t\t\t\tconst metadata = (additionalFields.customFields as IDataObject)\n\t\t\t\t\t\t\t\t.customField as IDataObject[];\n\t\t\t\t\t\t\tadditionalFields.custom_fields = {};\n\t\t\t\t\t\t\tfor (const data of metadata) {\n\t\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\t\tadditionalFields.custom_fields[data.name as string] = data.value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete additionalFields.customFields;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst body: ICreateContactBody = additionalFields;\n\t\t\t\t\t\tresponseData = await freshdeskApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'PUT',\n\t\t\t\t\t\t\t`/contacts/${contactId}`,\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!Array.isArray(responseData) && responseData === undefined) {\n\t\t\t\t\tresponseData = {\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\tthis.helpers.returnJsonArray(responseData as IDataObject[]),\n\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t);\n\t\t\t\treturnData.push(...executionData);\n\t\t\t} catch (error) {\n\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\tconst executionErrorData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\tthis.helpers.returnJsonArray({ error: error.message }),\n\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t);\n\t\t\t\t\treturnData.push(...executionErrorData);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\treturn [returnData];\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
@@ -499,12 +499,16 @@ class GoogleSheetsTrigger {
|
|
|
499
499
|
options.dateTimeRenderOption || "FORMATTED_STRING"
|
|
500
500
|
);
|
|
501
501
|
if (Array.isArray(sheetData) && sheetData.length !== 0) {
|
|
502
|
-
|
|
503
|
-
|
|
502
|
+
sheetData.splice(0, 1);
|
|
503
|
+
}
|
|
504
|
+
let dataStartIndex = 0;
|
|
505
|
+
if (rangeDefinition === "specifyRange" && keyRow < startIndex) {
|
|
506
|
+
dataStartIndex = startIndex - keyRow - 1;
|
|
504
507
|
}
|
|
505
508
|
if (this.getMode() === "manual") {
|
|
506
509
|
if (Array.isArray(sheetData)) {
|
|
507
|
-
const
|
|
510
|
+
const sheetDataFromStartIndex = sheetData.slice(dataStartIndex);
|
|
511
|
+
const returnData = (0, import_GoogleSheetsTrigger.arrayOfArraysToJson)(sheetDataFromStartIndex, columns);
|
|
508
512
|
if (Array.isArray(returnData) && returnData.length !== 0) {
|
|
509
513
|
return [this.helpers.returnJsonArray(returnData)];
|
|
510
514
|
}
|
|
@@ -515,7 +519,11 @@ class GoogleSheetsTrigger {
|
|
|
515
519
|
workflowStaticData.lastIndexChecked = sheetData.length;
|
|
516
520
|
return null;
|
|
517
521
|
}
|
|
518
|
-
const
|
|
522
|
+
const rowsStartIndex = Math.max(
|
|
523
|
+
workflowStaticData.lastIndexChecked,
|
|
524
|
+
dataStartIndex
|
|
525
|
+
);
|
|
526
|
+
const addedRows = sheetData?.slice(rowsStartIndex) || [];
|
|
519
527
|
const returnData = (0, import_GoogleSheetsTrigger.arrayOfArraysToJson)(addedRows, columns);
|
|
520
528
|
workflowStaticData.lastIndexChecked = sheetData.length;
|
|
521
529
|
if (Array.isArray(returnData) && returnData.length !== 0) {
|