n8n-nodes-base 1.96.1 → 1.97.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/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js +18 -13
- package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js.map +1 -1
- package/dist/nodes/Form/Form.node.js +3 -3
- package/dist/nodes/Form/Form.node.js.map +1 -1
- package/dist/nodes/Form/formCompletionUtils.js.map +1 -0
- package/dist/nodes/Form/formNodeUtils.js.map +1 -0
- package/dist/nodes/Form/{utils/utils.js → utils.js} +7 -21
- package/dist/nodes/Form/utils.js.map +1 -0
- package/dist/nodes/Form/v1/FormTriggerV1.node.js +1 -1
- package/dist/nodes/Form/v1/FormTriggerV1.node.js.map +1 -1
- package/dist/nodes/Form/v2/FormTriggerV2.node.js +1 -1
- package/dist/nodes/Form/v2/FormTriggerV2.node.js.map +1 -1
- package/dist/nodes/Google/Gmail/GenericFunctions.js +1 -1
- package/dist/nodes/Google/Gmail/GenericFunctions.js.map +1 -1
- package/dist/nodes/Google/Gmail/v2/DraftDescription.js +7 -0
- package/dist/nodes/Google/Gmail/v2/DraftDescription.js.map +1 -1
- package/dist/nodes/Google/Gmail/v2/GmailV2.node.js +4 -0
- package/dist/nodes/Google/Gmail/v2/GmailV2.node.js.map +1 -1
- package/dist/nodes/Google/Gmail/v2/utils/draft.js +44 -0
- package/dist/nodes/Google/Gmail/v2/utils/draft.js.map +1 -0
- package/dist/nodes/HttpRequest/V3/HttpRequestV3.node.js +10 -4
- package/dist/nodes/HttpRequest/V3/HttpRequestV3.node.js.map +1 -1
- package/dist/nodes/HttpRequest/V3/utils/binaryData.js +37 -0
- package/dist/nodes/HttpRequest/V3/utils/binaryData.js.map +1 -0
- package/dist/nodes/HttpRequest/V3/utils/parse.js +34 -0
- package/dist/nodes/HttpRequest/V3/utils/parse.js.map +1 -0
- package/dist/nodes/Linear/CommentDescription.js +105 -0
- package/dist/nodes/Linear/CommentDescription.js.map +1 -0
- package/dist/nodes/Linear/IssueDescription.js +23 -1
- package/dist/nodes/Linear/IssueDescription.js.map +1 -1
- package/dist/nodes/Linear/Linear.node.js +37 -0
- package/dist/nodes/Linear/Linear.node.js.map +1 -1
- package/dist/nodes/Linear/Queries.js +17 -0
- package/dist/nodes/Linear/Queries.js.map +1 -1
- package/dist/nodes/Linear/test/workflow/apiRequest.js +280 -0
- package/dist/nodes/Linear/test/workflow/apiRequest.js.map +1 -0
- package/dist/nodes/Linear/test/workflow/apiResponses.js +198 -0
- package/dist/nodes/Linear/test/workflow/apiResponses.js.map +1 -0
- package/dist/nodes/Postgres/transport/index.js +55 -60
- package/dist/nodes/Postgres/transport/index.js.map +1 -1
- package/dist/nodes/Wait/Wait.node.js +1 -1
- package/dist/nodes/Wait/Wait.node.js.map +1 -1
- package/dist/types/nodes.json +4 -4
- package/dist/utils/connection-pool-manager.js +42 -30
- package/dist/utils/connection-pool-manager.js.map +1 -1
- package/dist/utils/sendAndWait/utils.js +1 -1
- package/dist/utils/sendAndWait/utils.js.map +1 -1
- package/package.json +7 -7
- package/dist/nodes/Form/utils/formCompletionUtils.js.map +0 -1
- package/dist/nodes/Form/utils/formNodeUtils.js.map +0 -1
- package/dist/nodes/Form/utils/utils.js.map +0 -1
- /package/dist/nodes/Form/{utils/formCompletionUtils.js → formCompletionUtils.js} +0 -0
- /package/dist/nodes/Form/{utils/formNodeUtils.js → formNodeUtils.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../nodes/Google/Gmail/GenericFunctions.ts"],"sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { DateTime } from 'luxon';\nimport { simpleParser } from 'mailparser';\nimport type {\n\tIBinaryKeyData,\n\tIDataObject,\n\tIExecuteFunctions,\n\tIHttpRequestMethods,\n\tILoadOptionsFunctions,\n\tINode,\n\tINodeExecutionData,\n\tINodePropertyOptions,\n\tIPollFunctions,\n\tIRequestOptions,\n\tJsonObject,\n} from 'n8n-workflow';\nimport { NodeApiError, NodeOperationError } from 'n8n-workflow';\nimport MailComposer from 'nodemailer/lib/mail-composer';\n\nimport type { IEmail } from '../../../utils/sendAndWait/interfaces';\nimport { createUtmCampaignLink, escapeHtml } from '../../../utils/utilities';\nimport { getGoogleAccessToken } from '../GenericFunctions';\n\nexport interface IAttachments {\n\ttype: string;\n\tname: string;\n\tcontent: string;\n}\n\nexport async function googleApiRequest(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions | IPollFunctions,\n\tmethod: IHttpRequestMethods,\n\tendpoint: string,\n\tbody: IDataObject = {},\n\tqs: IDataObject = {},\n\turi?: string,\n\toption: IDataObject = {},\n) {\n\tlet options: IRequestOptions = {\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t},\n\t\tmethod,\n\t\tbody,\n\t\tqs,\n\t\turi: uri || `https://www.googleapis.com${endpoint}`,\n\t\tqsStringifyOptions: {\n\t\t\tarrayFormat: 'repeat',\n\t\t},\n\t\tjson: true,\n\t};\n\n\toptions = Object.assign({}, options, option);\n\n\ttry {\n\t\tif (Object.keys(body).length === 0) {\n\t\t\tdelete options.body;\n\t\t}\n\n\t\tlet credentialType = 'gmailOAuth2';\n\t\tconst authentication = this.getNodeParameter('authentication', 0) as string;\n\n\t\tif (authentication === 'serviceAccount') {\n\t\t\tconst credentials = await this.getCredentials('googleApi');\n\t\t\tcredentialType = 'googleApi';\n\n\t\t\tconst { access_token } = await getGoogleAccessToken.call(this, credentials, 'gmail');\n\n\t\t\t(options.headers as IDataObject).Authorization = `Bearer ${access_token}`;\n\t\t}\n\n\t\tconst response = await this.helpers.requestWithAuthentication.call(\n\t\t\tthis,\n\t\t\tcredentialType,\n\t\t\toptions,\n\t\t);\n\t\treturn response;\n\t} catch (error) {\n\t\tif (error.code === 'ERR_OSSL_PEM_NO_START_LINE') {\n\t\t\terror.statusCode = '401';\n\t\t}\n\n\t\tif (error.httpCode === '400') {\n\t\t\tif (error.cause && ((error.cause.message as string) || '').includes('Invalid id value')) {\n\t\t\t\tconst resource = this.getNodeParameter('resource', 0) as string;\n\t\t\t\tconst errorOptions = {\n\t\t\t\t\tmessage: `Invalid ${resource} ID`,\n\t\t\t\t\tdescription: `${\n\t\t\t\t\t\tresource.charAt(0).toUpperCase() + resource.slice(1)\n\t\t\t\t\t} IDs should look something like this: 182b676d244938bd`,\n\t\t\t\t};\n\t\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, errorOptions);\n\t\t\t}\n\t\t}\n\n\t\tif (error.httpCode === '404') {\n\t\t\tlet resource = this.getNodeParameter('resource', 0) as string;\n\t\t\tif (resource === 'label') {\n\t\t\t\tresource = 'label ID';\n\t\t\t}\n\t\t\tconst errorOptions = {\n\t\t\t\tmessage: `${resource.charAt(0).toUpperCase() + resource.slice(1)} not found`,\n\t\t\t\tdescription: '',\n\t\t\t};\n\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, errorOptions);\n\t\t}\n\n\t\tif (error.httpCode === '409') {\n\t\t\tconst resource = this.getNodeParameter('resource', 0) as string;\n\t\t\tif (resource === 'label') {\n\t\t\t\tconst errorOptions = {\n\t\t\t\t\tmessage: 'Label name exists already',\n\t\t\t\t\tdescription: '',\n\t\t\t\t};\n\t\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, errorOptions);\n\t\t\t}\n\t\t}\n\n\t\tif (error.code === 'EAUTH') {\n\t\t\tconst errorOptions = {\n\t\t\t\tmessage: error?.body?.error_description || 'Authorization error',\n\t\t\t\tdescription: (error as Error).message,\n\t\t\t};\n\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, errorOptions);\n\t\t}\n\n\t\tif (\n\t\t\t((error.message as string) || '').includes('Bad request - please check your parameters') &&\n\t\t\terror.description\n\t\t) {\n\t\t\tconst errorOptions = {\n\t\t\t\tmessage: error.description,\n\t\t\t\tdescription: '',\n\t\t\t};\n\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, errorOptions);\n\t\t}\n\n\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, {\n\t\t\tmessage: error.message,\n\t\t\tdescription: error.description,\n\t\t});\n\t}\n}\n\nexport async function parseRawEmail(\n\tthis: IExecuteFunctions | IPollFunctions,\n\n\tmessageData: any,\n\tdataPropertyNameDownload: string,\n): Promise<INodeExecutionData> {\n\tconst messageEncoded = Buffer.from(messageData.raw as string, 'base64').toString('utf8');\n\tconst responseData = await simpleParser(messageEncoded);\n\n\tconst headers: IDataObject = {};\n\tfor (const header of responseData.headerLines) {\n\t\theaders[header.key] = header.line;\n\t}\n\n\tconst binaryData: IBinaryKeyData = {};\n\tif (responseData.attachments) {\n\t\tconst downloadAttachments = this.getNodeParameter(\n\t\t\t'options.downloadAttachments',\n\t\t\t0,\n\t\t\tfalse,\n\t\t) as boolean;\n\t\tif (downloadAttachments) {\n\t\t\tfor (let i = 0; i < responseData.attachments.length; i++) {\n\t\t\t\tconst attachment = responseData.attachments[i];\n\t\t\t\tbinaryData[`${dataPropertyNameDownload}${i}`] = await this.helpers.prepareBinaryData(\n\t\t\t\t\tattachment.content,\n\t\t\t\t\tattachment.filename,\n\t\t\t\t\tattachment.contentType,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst mailBaseData: IDataObject = {};\n\n\tconst resolvedModeAddProperties = ['id', 'threadId', 'labelIds', 'sizeEstimate'];\n\n\tfor (const key of resolvedModeAddProperties) {\n\t\tmailBaseData[key] = messageData[key];\n\t}\n\n\tconst json = Object.assign({}, mailBaseData, responseData, {\n\t\theaders,\n\t\theaderLines: undefined,\n\t\tattachments: undefined,\n\t\t// Having data in IDataObjects that is not representable in JSON leads to\n\t\t// inconsistencies between test executions and production executions.\n\t\t// During a manual execution this would be stringified and during a\n\t\t// production execution the next node would receive a date instance.\n\t\tdate: responseData.date ? responseData.date.toISOString() : responseData.date,\n\t}) as IDataObject;\n\n\treturn {\n\t\tjson,\n\t\tbinary: Object.keys(binaryData).length ? binaryData : undefined,\n\t} as INodeExecutionData;\n}\n\n//------------------------------------------------------------------------------------------------------------------------------------------\n// This function converts an email object into a MIME encoded email and then converts that string into base64 encoding\n// for more info on MIME, https://docs.microsoft.com/en-us/previous-versions/office/developer/exchange-server-2010/aa494197(v%3Dexchg.140)\n//------------------------------------------------------------------------------------------------------------------------------------------\n\nexport async function encodeEmail(email: IEmail) {\n\t// https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields\n\tconst mailOptions = {\n\t\tfrom: email.from,\n\t\tto: email.to,\n\t\tcc: email.cc,\n\t\tbcc: email.bcc,\n\t\treplyTo: email.replyTo,\n\t\tinReplyTo: email.inReplyTo,\n\t\treferences: email.reference,\n\t\tsubject: email.subject,\n\t\ttext: email.body,\n\t\tkeepBcc: true,\n\t} as IDataObject;\n\n\tif (email.htmlBody) {\n\t\tmailOptions.html = email.htmlBody;\n\t}\n\n\tif (\n\t\temail.attachments !== undefined &&\n\t\tArray.isArray(email.attachments) &&\n\t\temail.attachments.length > 0\n\t) {\n\t\tconst attachments = email.attachments.map((attachment) => ({\n\t\t\tfilename: attachment.name,\n\t\t\tcontent: attachment.content,\n\t\t\tcontentType: attachment.type,\n\t\t\tencoding: 'base64',\n\t\t}));\n\n\t\tmailOptions.attachments = attachments;\n\t}\n\n\tconst mail = new MailComposer(mailOptions).compile();\n\n\t// by default the bcc headers are deleted when the mail is built.\n\t// So add keepBcc flag to override such behaviour. Only works when\n\t// the flag is set after the compilation.\n\t// @ts-expect-error - https://nodemailer.com/extras/mailcomposer/#bcc\n\tmail.keepBcc = true;\n\n\tconst mailBody = await mail.build();\n\n\treturn mailBody.toString('base64').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n\nexport async function googleApiRequestAllItems(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions | IPollFunctions,\n\tpropertyName: string,\n\tmethod: IHttpRequestMethods,\n\tendpoint: string,\n\n\tbody: any = {},\n\tquery: IDataObject = {},\n): Promise<any> {\n\tconst returnData: IDataObject[] = [];\n\n\tlet responseData;\n\tquery.maxResults = 100;\n\n\tdo {\n\t\tresponseData = await googleApiRequest.call(this, method, endpoint, body as IDataObject, query);\n\t\tquery.pageToken = responseData.nextPageToken;\n\t\treturnData.push.apply(returnData, responseData[propertyName] as IDataObject[]);\n\t} while (responseData.nextPageToken !== undefined && responseData.nextPageToken !== '');\n\n\treturn returnData;\n}\n\nexport function extractEmail(s: string) {\n\tif (s.includes('<')) {\n\t\tconst data = s.split('<')[1];\n\t\treturn data.substring(0, data.length - 1);\n\t}\n\treturn s;\n}\n\nexport const prepareTimestamp = (\n\tnode: INode,\n\titemIndex: number,\n\tquery: string,\n\tdateValue: string | number | DateTime,\n\tlabel: 'after' | 'before',\n) => {\n\tif (dateValue instanceof DateTime) {\n\t\tdateValue = dateValue.toISO();\n\t}\n\n\tlet timestamp = DateTime.fromISO(dateValue as string).toSeconds();\n\tconst timestampLengthInMilliseconds1990 = 12;\n\n\tif (typeof timestamp === 'number') {\n\t\ttimestamp = Math.round(timestamp);\n\t}\n\n\tif (\n\t\t!timestamp &&\n\t\ttypeof dateValue === 'number' &&\n\t\tdateValue.toString().length < timestampLengthInMilliseconds1990\n\t) {\n\t\ttimestamp = dateValue;\n\t}\n\n\tif (!timestamp && (dateValue as string).length < timestampLengthInMilliseconds1990) {\n\t\ttimestamp = parseInt(dateValue as string, 10);\n\t}\n\n\tif (!timestamp) {\n\t\ttimestamp = Math.floor(DateTime.fromMillis(parseInt(dateValue as string, 10)).toSeconds());\n\t}\n\n\tif (!timestamp) {\n\t\tconst description = `'${dateValue}' isn't a valid date and time. If you're using an expression, be sure to set an ISO date string or a timestamp.`;\n\t\tthrow new NodeOperationError(\n\t\t\tnode,\n\t\t\t`Invalid date/time in 'Received ${label[0].toUpperCase() + label.slice(1)}' field`,\n\t\t\t{\n\t\t\t\tdescription,\n\t\t\t\titemIndex,\n\t\t\t},\n\t\t);\n\t}\n\n\tif (query) {\n\t\tquery += ` ${label}:${timestamp}`;\n\t} else {\n\t\tquery = `${label}:${timestamp}`;\n\t}\n\treturn query;\n};\n\nexport function prepareQuery(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions | IPollFunctions,\n\tfields: IDataObject,\n\titemIndex: number,\n) {\n\tconst qs: IDataObject = { ...fields };\n\tif (qs.labelIds) {\n\t\tif (qs.labelIds === '') {\n\t\t\tdelete qs.labelIds;\n\t\t} else {\n\t\t\tqs.labelIds = qs.labelIds as string[];\n\t\t}\n\t}\n\n\tif (qs.sender) {\n\t\tif (qs.q) {\n\t\t\tqs.q += ` from:${qs.sender}`;\n\t\t} else {\n\t\t\tqs.q = `from:${qs.sender}`;\n\t\t}\n\t\tdelete qs.sender;\n\t}\n\n\tif (qs.readStatus && qs.readStatus !== 'both') {\n\t\tif (qs.q) {\n\t\t\tqs.q += ` is:${qs.readStatus}`;\n\t\t} else {\n\t\t\tqs.q = `is:${qs.readStatus}`;\n\t\t}\n\t\tdelete qs.readStatus;\n\t}\n\n\tif (qs.receivedAfter) {\n\t\tqs.q = prepareTimestamp(\n\t\t\tthis.getNode(),\n\t\t\titemIndex,\n\t\t\tqs.q as string,\n\t\t\tqs.receivedAfter as string,\n\t\t\t'after',\n\t\t);\n\t\tdelete qs.receivedAfter;\n\t}\n\n\tif (qs.receivedBefore) {\n\t\tqs.q = prepareTimestamp(\n\t\t\tthis.getNode(),\n\t\t\titemIndex,\n\t\t\tqs.q as string,\n\t\t\tqs.receivedBefore as string,\n\t\t\t'before',\n\t\t);\n\t\tdelete qs.receivedBefore;\n\t}\n\n\treturn qs;\n}\n\nexport function prepareEmailsInput(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions,\n\tinput: string,\n\tfieldName: string,\n\titemIndex: number,\n) {\n\tlet emails = '';\n\n\tinput.split(',').forEach((entry) => {\n\t\tconst email = entry.trim();\n\n\t\tif (email.indexOf('@') === -1) {\n\t\t\tconst description = `The email address '${email}' in the '${fieldName}' field isn't valid`;\n\t\t\tthrow new NodeOperationError(this.getNode(), 'Invalid email address', {\n\t\t\t\tdescription,\n\t\t\t\titemIndex,\n\t\t\t});\n\t\t}\n\t\tif (email.includes('<') && email.includes('>')) {\n\t\t\temails += `${email},`;\n\t\t} else {\n\t\t\temails += `<${email}>, `;\n\t\t}\n\t});\n\n\treturn emails;\n}\n\nexport function prepareEmailBody(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions,\n\titemIndex: number,\n\tappendAttribution = false,\n\tinstanceId?: string,\n) {\n\tconst emailType = this.getNodeParameter('emailType', itemIndex) as string;\n\tlet message = (this.getNodeParameter('message', itemIndex, '') as string).trim();\n\n\tif (appendAttribution) {\n\t\tconst attributionText = 'This email was sent automatically with ';\n\t\tconst link = createUtmCampaignLink('n8n-nodes-base.gmail', instanceId);\n\t\tif (emailType === 'html') {\n\t\t\tmessage = `\n\t\t\t${message}\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t---\n\t\t\t<br>\n\t\t\t<em>${attributionText}<a href=\"${link}\" target=\"_blank\">n8n</a></em>\n\t\t\t`;\n\t\t} else {\n\t\t\tmessage = `${message}\\n\\n---\\n${attributionText}n8n\\n${'https://n8n.io'}`;\n\t\t}\n\t}\n\n\tconst body = {\n\t\tbody: '',\n\t\thtmlBody: '',\n\t};\n\n\tif (emailType === 'html') {\n\t\tbody.htmlBody = message;\n\t} else {\n\t\tbody.body = message;\n\t}\n\n\treturn body;\n}\n\nexport async function prepareEmailAttachments(\n\tthis: IExecuteFunctions,\n\toptions: IDataObject,\n\titemIndex: number,\n) {\n\tconst attachmentsList: IDataObject[] = [];\n\tconst attachments = options.attachmentsBinary as IDataObject[];\n\n\tif (attachments && !isEmpty(attachments)) {\n\t\tfor (const { property } of attachments) {\n\t\t\tfor (const name of (property as string).split(',')) {\n\t\t\t\tconst binaryData = this.helpers.assertBinaryData(itemIndex, name);\n\t\t\t\tconst binaryDataBuffer = await this.helpers.getBinaryDataBuffer(itemIndex, name);\n\n\t\t\t\tif (!Buffer.isBuffer(binaryDataBuffer)) {\n\t\t\t\t\tconst description = `The input field '${name}' doesn't contain an attachment. Please make sure you specify a field containing binary data`;\n\t\t\t\t\tthrow new NodeOperationError(this.getNode(), 'Attachment not found', {\n\t\t\t\t\t\tdescription,\n\t\t\t\t\t\titemIndex,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tattachmentsList.push({\n\t\t\t\t\tname: binaryData.fileName || 'unknown',\n\t\t\t\t\tcontent: binaryDataBuffer,\n\t\t\t\t\ttype: binaryData.mimeType,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\treturn attachmentsList;\n}\n\nexport function unescapeSnippets(items: INodeExecutionData[]) {\n\tconst result = items.map((item) => {\n\t\tconst snippet = item.json.snippet as string;\n\t\tif (snippet) {\n\t\t\titem.json.snippet = escapeHtml(snippet);\n\t\t}\n\t\treturn item;\n\t});\n\treturn result;\n}\n\nexport async function replyToEmail(\n\tthis: IExecuteFunctions,\n\tgmailId: string,\n\toptions: IDataObject,\n\titemIndex: number,\n) {\n\tlet qs: IDataObject = {};\n\n\tlet cc = '';\n\tlet bcc = '';\n\n\tif (options.ccList) {\n\t\tcc = prepareEmailsInput.call(this, options.ccList as string, 'CC', itemIndex);\n\t}\n\n\tif (options.bccList) {\n\t\tbcc = prepareEmailsInput.call(this, options.bccList as string, 'BCC', itemIndex);\n\t}\n\tlet attachments: IDataObject[] = [];\n\tif (options.attachmentsUi) {\n\t\tattachments = await prepareEmailAttachments.call(\n\t\t\tthis,\n\t\t\toptions.attachmentsUi as IDataObject,\n\t\t\titemIndex,\n\t\t);\n\t\tif (attachments.length) {\n\t\t\tqs = {\n\t\t\t\tuserId: 'me',\n\t\t\t\tuploadType: 'media',\n\t\t\t};\n\t\t}\n\t}\n\n\tconst endpoint = `/gmail/v1/users/me/messages/${gmailId}`;\n\n\tqs.format = 'metadata';\n\n\tconst { payload, threadId } = await googleApiRequest.call(this, 'GET', endpoint, {}, qs);\n\n\tconst subject =\n\t\tpayload.headers.filter(\n\t\t\t(data: { [key: string]: string }) => data.name.toLowerCase() === 'subject',\n\t\t)[0]?.value || '';\n\n\tconst messageIdGlobal =\n\t\tpayload.headers.filter(\n\t\t\t(data: { [key: string]: string }) => data.name.toLowerCase() === 'message-id',\n\t\t)[0]?.value || '';\n\n\tconst { emailAddress } = await googleApiRequest.call(this, 'GET', '/gmail/v1/users/me/profile');\n\n\tlet to = '';\n\tconst replyToSenderOnly =\n\t\toptions.replyToSenderOnly === undefined ? false : (options.replyToSenderOnly as boolean);\n\n\tconst prepareEmailString = (email: string) => {\n\t\tif (email.includes(emailAddress as string)) return;\n\t\tif (email.includes('<') && email.includes('>')) {\n\t\t\tto += `${email}, `;\n\t\t} else {\n\t\t\tto += `<${email}>, `;\n\t\t}\n\t};\n\n\tfor (const header of payload.headers as IDataObject[]) {\n\t\tif (((header.name as string) || '').toLowerCase() === 'from') {\n\t\t\tconst from = header.value as string;\n\t\t\tif (from.includes('<') && from.includes('>')) {\n\t\t\t\tto += `${from}, `;\n\t\t\t} else {\n\t\t\t\tto += `<${from}>, `;\n\t\t\t}\n\t\t}\n\n\t\tif (((header.name as string) || '').toLowerCase() === 'to' && !replyToSenderOnly) {\n\t\t\tconst toEmails = header.value as string;\n\t\t\ttoEmails.split(',').forEach(prepareEmailString);\n\t\t}\n\t}\n\n\tlet from = '';\n\tif (options.senderName) {\n\t\tfrom = `${options.senderName as string} <${emailAddress}>`;\n\t}\n\n\tconst email: IEmail = {\n\t\tfrom,\n\t\tto,\n\t\tcc,\n\t\tbcc,\n\t\tsubject,\n\t\tattachments,\n\t\tinReplyTo: messageIdGlobal,\n\t\treference: messageIdGlobal,\n\t\t...prepareEmailBody.call(this, itemIndex),\n\t};\n\n\tconst body = {\n\t\traw: await encodeEmail(email),\n\t\tthreadId,\n\t};\n\n\treturn await googleApiRequest.call(this, 'POST', '/gmail/v1/users/me/messages/send', body, qs);\n}\n\nexport async function simplifyOutput(\n\tthis: IExecuteFunctions | IPollFunctions,\n\tdata: IDataObject[],\n) {\n\tconst labelsData = await googleApiRequest.call(this, 'GET', '/gmail/v1/users/me/labels');\n\tconst labels = ((labelsData.labels as IDataObject[]) || []).map(({ id, name }) => ({\n\t\tid,\n\t\tname,\n\t}));\n\treturn (data || []).map((item) => {\n\t\tif (item.labelIds) {\n\t\t\titem.labels = labels.filter((label) =>\n\t\t\t\t(item.labelIds as string[]).includes(label.id as string),\n\t\t\t);\n\t\t\tdelete item.labelIds;\n\t\t}\n\t\tif (item.payload && (item.payload as IDataObject).headers) {\n\t\t\tconst { headers } = item.payload as IDataObject;\n\t\t\t((headers as IDataObject[]) || []).forEach((header) => {\n\t\t\t\titem[header.name as string] = header.value;\n\t\t\t});\n\t\t\tdelete (item.payload as IDataObject).headers;\n\t\t}\n\t\treturn item;\n\t});\n}\n\n/**\n * Get all the labels to display them to user so that they can select them easily\n */\nexport async function getLabels(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\tconst returnData: INodePropertyOptions[] = [];\n\n\tconst labels = await googleApiRequestAllItems.call(\n\t\tthis,\n\t\t'labels',\n\t\t'GET',\n\t\t'/gmail/v1/users/me/labels',\n\t);\n\n\tfor (const label of labels) {\n\t\treturnData.push({\n\t\t\tname: label.name,\n\t\t\tvalue: label.id,\n\t\t});\n\t}\n\n\treturn returnData.sort((a, b) => {\n\t\tif (a.name < b.name) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.name > b.name) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n}\n"],"mappings":"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","names":["MailComposer","isEmpty","email","from"]}
|
|
1
|
+
{"version":3,"sources":["../../../../nodes/Google/Gmail/GenericFunctions.ts"],"sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { DateTime } from 'luxon';\nimport { simpleParser } from 'mailparser';\nimport type {\n\tIBinaryKeyData,\n\tIDataObject,\n\tIExecuteFunctions,\n\tIHttpRequestMethods,\n\tILoadOptionsFunctions,\n\tINode,\n\tINodeExecutionData,\n\tINodePropertyOptions,\n\tIPollFunctions,\n\tIRequestOptions,\n\tJsonObject,\n} from 'n8n-workflow';\nimport { NodeApiError, NodeOperationError } from 'n8n-workflow';\nimport MailComposer from 'nodemailer/lib/mail-composer';\n\nimport type { IEmail } from '../../../utils/sendAndWait/interfaces';\nimport { createUtmCampaignLink, escapeHtml } from '../../../utils/utilities';\nimport { getGoogleAccessToken } from '../GenericFunctions';\n\nexport interface IAttachments {\n\ttype: string;\n\tname: string;\n\tcontent: string;\n}\n\nexport async function googleApiRequest(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions | IPollFunctions,\n\tmethod: IHttpRequestMethods,\n\tendpoint: string,\n\tbody: IDataObject = {},\n\tqs: IDataObject = {},\n\turi?: string,\n\toption: IDataObject = {},\n) {\n\tlet options: IRequestOptions = {\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t},\n\t\tmethod,\n\t\tbody,\n\t\tqs,\n\t\turi: uri || `https://www.googleapis.com${endpoint}`,\n\t\tqsStringifyOptions: {\n\t\t\tarrayFormat: 'repeat',\n\t\t},\n\t\tjson: true,\n\t};\n\n\toptions = Object.assign({}, options, option);\n\n\ttry {\n\t\tif (Object.keys(body).length === 0) {\n\t\t\tdelete options.body;\n\t\t}\n\n\t\tlet credentialType = 'gmailOAuth2';\n\t\tconst authentication = this.getNodeParameter('authentication', 0) as string;\n\n\t\tif (authentication === 'serviceAccount') {\n\t\t\tconst credentials = await this.getCredentials('googleApi');\n\t\t\tcredentialType = 'googleApi';\n\n\t\t\tconst { access_token } = await getGoogleAccessToken.call(this, credentials, 'gmail');\n\n\t\t\t(options.headers as IDataObject).Authorization = `Bearer ${access_token}`;\n\t\t}\n\n\t\tconst response = await this.helpers.requestWithAuthentication.call(\n\t\t\tthis,\n\t\t\tcredentialType,\n\t\t\toptions,\n\t\t);\n\t\treturn response;\n\t} catch (error) {\n\t\tif (error.code === 'ERR_OSSL_PEM_NO_START_LINE') {\n\t\t\terror.statusCode = '401';\n\t\t}\n\n\t\tif (error.httpCode === '400') {\n\t\t\tif (error.cause && ((error.cause.message as string) || '').includes('Invalid id value')) {\n\t\t\t\tconst resource = this.getNodeParameter('resource', 0) as string;\n\t\t\t\tconst errorOptions = {\n\t\t\t\t\tmessage: `Invalid ${resource} ID`,\n\t\t\t\t\tdescription: `${\n\t\t\t\t\t\tresource.charAt(0).toUpperCase() + resource.slice(1)\n\t\t\t\t\t} IDs should look something like this: 182b676d244938bd`,\n\t\t\t\t};\n\t\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, errorOptions);\n\t\t\t}\n\t\t}\n\n\t\tif (error.httpCode === '404') {\n\t\t\tlet resource = this.getNodeParameter('resource', 0) as string;\n\t\t\tif (resource === 'label') {\n\t\t\t\tresource = 'label ID';\n\t\t\t}\n\t\t\tconst errorOptions = {\n\t\t\t\tmessage: `${resource.charAt(0).toUpperCase() + resource.slice(1)} not found`,\n\t\t\t\tdescription: '',\n\t\t\t};\n\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, errorOptions);\n\t\t}\n\n\t\tif (error.httpCode === '409') {\n\t\t\tconst resource = this.getNodeParameter('resource', 0) as string;\n\t\t\tif (resource === 'label') {\n\t\t\t\tconst errorOptions = {\n\t\t\t\t\tmessage: 'Label name exists already',\n\t\t\t\t\tdescription: '',\n\t\t\t\t};\n\t\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, errorOptions);\n\t\t\t}\n\t\t}\n\n\t\tif (error.code === 'EAUTH') {\n\t\t\tconst errorOptions = {\n\t\t\t\tmessage: error?.body?.error_description || 'Authorization error',\n\t\t\t\tdescription: (error as Error).message,\n\t\t\t};\n\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, errorOptions);\n\t\t}\n\n\t\tif (\n\t\t\t((error.message as string) || '').includes('Bad request - please check your parameters') &&\n\t\t\terror.description\n\t\t) {\n\t\t\tconst errorOptions = {\n\t\t\t\tmessage: error.description,\n\t\t\t\tdescription: '',\n\t\t\t};\n\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, errorOptions);\n\t\t}\n\n\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, {\n\t\t\tmessage: error.message,\n\t\t\tdescription: error.description,\n\t\t});\n\t}\n}\n\nexport async function parseRawEmail(\n\tthis: IExecuteFunctions | IPollFunctions,\n\n\tmessageData: any,\n\tdataPropertyNameDownload: string,\n): Promise<INodeExecutionData> {\n\tconst messageEncoded = Buffer.from(messageData.raw as string, 'base64').toString('utf8');\n\tconst responseData = await simpleParser(messageEncoded);\n\n\tconst headers: IDataObject = {};\n\tfor (const header of responseData.headerLines) {\n\t\theaders[header.key] = header.line;\n\t}\n\n\tconst binaryData: IBinaryKeyData = {};\n\tif (responseData.attachments) {\n\t\tconst downloadAttachments = this.getNodeParameter(\n\t\t\t'options.downloadAttachments',\n\t\t\t0,\n\t\t\tfalse,\n\t\t) as boolean;\n\t\tif (downloadAttachments) {\n\t\t\tfor (let i = 0; i < responseData.attachments.length; i++) {\n\t\t\t\tconst attachment = responseData.attachments[i];\n\t\t\t\tbinaryData[`${dataPropertyNameDownload}${i}`] = await this.helpers.prepareBinaryData(\n\t\t\t\t\tattachment.content,\n\t\t\t\t\tattachment.filename,\n\t\t\t\t\tattachment.contentType,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst mailBaseData: IDataObject = {};\n\n\tconst resolvedModeAddProperties = ['id', 'threadId', 'labelIds', 'sizeEstimate'];\n\n\tfor (const key of resolvedModeAddProperties) {\n\t\tmailBaseData[key] = messageData[key];\n\t}\n\n\tconst json = Object.assign({}, mailBaseData, responseData, {\n\t\theaders,\n\t\theaderLines: undefined,\n\t\tattachments: undefined,\n\t\t// Having data in IDataObjects that is not representable in JSON leads to\n\t\t// inconsistencies between test executions and production executions.\n\t\t// During a manual execution this would be stringified and during a\n\t\t// production execution the next node would receive a date instance.\n\t\tdate: responseData.date ? responseData.date.toISOString() : responseData.date,\n\t}) as IDataObject;\n\n\treturn {\n\t\tjson,\n\t\tbinary: Object.keys(binaryData).length ? binaryData : undefined,\n\t} as INodeExecutionData;\n}\n\n//------------------------------------------------------------------------------------------------------------------------------------------\n// This function converts an email object into a MIME encoded email and then converts that string into base64 encoding\n// for more info on MIME, https://docs.microsoft.com/en-us/previous-versions/office/developer/exchange-server-2010/aa494197(v%3Dexchg.140)\n//------------------------------------------------------------------------------------------------------------------------------------------\n\nexport async function encodeEmail(email: IEmail) {\n\t// https://nodemailer.com/extras/mailcomposer/#e-mail-message-fields\n\tconst mailOptions = {\n\t\tfrom: email.from,\n\t\tto: email.to,\n\t\tcc: email.cc,\n\t\tbcc: email.bcc,\n\t\treplyTo: email.replyTo,\n\t\tinReplyTo: email.inReplyTo,\n\t\treferences: email.reference,\n\t\tsubject: email.subject,\n\t\ttext: email.body,\n\t\tkeepBcc: true,\n\t} as IDataObject;\n\n\tif (email.htmlBody) {\n\t\tmailOptions.html = email.htmlBody;\n\t}\n\n\tif (\n\t\temail.attachments !== undefined &&\n\t\tArray.isArray(email.attachments) &&\n\t\temail.attachments.length > 0\n\t) {\n\t\tconst attachments = email.attachments.map((attachment) => ({\n\t\t\tfilename: attachment.name,\n\t\t\tcontent: attachment.content,\n\t\t\tcontentType: attachment.type,\n\t\t\tencoding: 'base64',\n\t\t}));\n\n\t\tmailOptions.attachments = attachments;\n\t}\n\n\tconst mail = new MailComposer(mailOptions).compile();\n\n\t// by default the bcc headers are deleted when the mail is built.\n\t// So add keepBcc flag to override such behaviour. Only works when\n\t// the flag is set after the compilation.\n\t// @ts-expect-error - https://nodemailer.com/extras/mailcomposer/#bcc\n\tmail.keepBcc = true;\n\n\tconst mailBody = await mail.build();\n\n\treturn mailBody.toString('base64').replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nexport async function googleApiRequestAllItems(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions | IPollFunctions,\n\tpropertyName: string,\n\tmethod: IHttpRequestMethods,\n\tendpoint: string,\n\n\tbody: any = {},\n\tquery: IDataObject = {},\n): Promise<any> {\n\tconst returnData: IDataObject[] = [];\n\n\tlet responseData;\n\tquery.maxResults = 100;\n\n\tdo {\n\t\tresponseData = await googleApiRequest.call(this, method, endpoint, body as IDataObject, query);\n\t\tquery.pageToken = responseData.nextPageToken;\n\t\treturnData.push.apply(returnData, responseData[propertyName] as IDataObject[]);\n\t} while (responseData.nextPageToken !== undefined && responseData.nextPageToken !== '');\n\n\treturn returnData;\n}\n\nexport function extractEmail(s: string) {\n\tif (s.includes('<')) {\n\t\tconst data = s.split('<')[1];\n\t\treturn data.substring(0, data.length - 1);\n\t}\n\treturn s;\n}\n\nexport const prepareTimestamp = (\n\tnode: INode,\n\titemIndex: number,\n\tquery: string,\n\tdateValue: string | number | DateTime,\n\tlabel: 'after' | 'before',\n) => {\n\tif (dateValue instanceof DateTime) {\n\t\tdateValue = dateValue.toISO();\n\t}\n\n\tlet timestamp = DateTime.fromISO(dateValue as string).toSeconds();\n\tconst timestampLengthInMilliseconds1990 = 12;\n\n\tif (typeof timestamp === 'number') {\n\t\ttimestamp = Math.round(timestamp);\n\t}\n\n\tif (\n\t\t!timestamp &&\n\t\ttypeof dateValue === 'number' &&\n\t\tdateValue.toString().length < timestampLengthInMilliseconds1990\n\t) {\n\t\ttimestamp = dateValue;\n\t}\n\n\tif (!timestamp && (dateValue as string).length < timestampLengthInMilliseconds1990) {\n\t\ttimestamp = parseInt(dateValue as string, 10);\n\t}\n\n\tif (!timestamp) {\n\t\ttimestamp = Math.floor(DateTime.fromMillis(parseInt(dateValue as string, 10)).toSeconds());\n\t}\n\n\tif (!timestamp) {\n\t\tconst description = `'${dateValue}' isn't a valid date and time. If you're using an expression, be sure to set an ISO date string or a timestamp.`;\n\t\tthrow new NodeOperationError(\n\t\t\tnode,\n\t\t\t`Invalid date/time in 'Received ${label[0].toUpperCase() + label.slice(1)}' field`,\n\t\t\t{\n\t\t\t\tdescription,\n\t\t\t\titemIndex,\n\t\t\t},\n\t\t);\n\t}\n\n\tif (query) {\n\t\tquery += ` ${label}:${timestamp}`;\n\t} else {\n\t\tquery = `${label}:${timestamp}`;\n\t}\n\treturn query;\n};\n\nexport function prepareQuery(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions | IPollFunctions,\n\tfields: IDataObject,\n\titemIndex: number,\n) {\n\tconst qs: IDataObject = { ...fields };\n\tif (qs.labelIds) {\n\t\tif (qs.labelIds === '') {\n\t\t\tdelete qs.labelIds;\n\t\t} else {\n\t\t\tqs.labelIds = qs.labelIds as string[];\n\t\t}\n\t}\n\n\tif (qs.sender) {\n\t\tif (qs.q) {\n\t\t\tqs.q += ` from:${qs.sender}`;\n\t\t} else {\n\t\t\tqs.q = `from:${qs.sender}`;\n\t\t}\n\t\tdelete qs.sender;\n\t}\n\n\tif (qs.readStatus && qs.readStatus !== 'both') {\n\t\tif (qs.q) {\n\t\t\tqs.q += ` is:${qs.readStatus}`;\n\t\t} else {\n\t\t\tqs.q = `is:${qs.readStatus}`;\n\t\t}\n\t\tdelete qs.readStatus;\n\t}\n\n\tif (qs.receivedAfter) {\n\t\tqs.q = prepareTimestamp(\n\t\t\tthis.getNode(),\n\t\t\titemIndex,\n\t\t\tqs.q as string,\n\t\t\tqs.receivedAfter as string,\n\t\t\t'after',\n\t\t);\n\t\tdelete qs.receivedAfter;\n\t}\n\n\tif (qs.receivedBefore) {\n\t\tqs.q = prepareTimestamp(\n\t\t\tthis.getNode(),\n\t\t\titemIndex,\n\t\t\tqs.q as string,\n\t\t\tqs.receivedBefore as string,\n\t\t\t'before',\n\t\t);\n\t\tdelete qs.receivedBefore;\n\t}\n\n\treturn qs;\n}\n\nexport function prepareEmailsInput(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions,\n\tinput: string,\n\tfieldName: string,\n\titemIndex: number,\n) {\n\tlet emails = '';\n\n\tinput.split(',').forEach((entry) => {\n\t\tconst email = entry.trim();\n\n\t\tif (email.indexOf('@') === -1) {\n\t\t\tconst description = `The email address '${email}' in the '${fieldName}' field isn't valid`;\n\t\t\tthrow new NodeOperationError(this.getNode(), 'Invalid email address', {\n\t\t\t\tdescription,\n\t\t\t\titemIndex,\n\t\t\t});\n\t\t}\n\t\tif (email.includes('<') && email.includes('>')) {\n\t\t\temails += `${email},`;\n\t\t} else {\n\t\t\temails += `<${email}>, `;\n\t\t}\n\t});\n\n\treturn emails;\n}\n\nexport function prepareEmailBody(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions,\n\titemIndex: number,\n\tappendAttribution = false,\n\tinstanceId?: string,\n) {\n\tconst emailType = this.getNodeParameter('emailType', itemIndex) as string;\n\tlet message = (this.getNodeParameter('message', itemIndex, '') as string).trim();\n\n\tif (appendAttribution) {\n\t\tconst attributionText = 'This email was sent automatically with ';\n\t\tconst link = createUtmCampaignLink('n8n-nodes-base.gmail', instanceId);\n\t\tif (emailType === 'html') {\n\t\t\tmessage = `\n\t\t\t${message}\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t---\n\t\t\t<br>\n\t\t\t<em>${attributionText}<a href=\"${link}\" target=\"_blank\">n8n</a></em>\n\t\t\t`;\n\t\t} else {\n\t\t\tmessage = `${message}\\n\\n---\\n${attributionText}n8n\\n${'https://n8n.io'}`;\n\t\t}\n\t}\n\n\tconst body = {\n\t\tbody: '',\n\t\thtmlBody: '',\n\t};\n\n\tif (emailType === 'html') {\n\t\tbody.htmlBody = message;\n\t} else {\n\t\tbody.body = message;\n\t}\n\n\treturn body;\n}\n\nexport async function prepareEmailAttachments(\n\tthis: IExecuteFunctions,\n\toptions: IDataObject,\n\titemIndex: number,\n) {\n\tconst attachmentsList: IDataObject[] = [];\n\tconst attachments = options.attachmentsBinary as IDataObject[];\n\n\tif (attachments && !isEmpty(attachments)) {\n\t\tfor (const { property } of attachments) {\n\t\t\tfor (const name of (property as string).split(',')) {\n\t\t\t\tconst binaryData = this.helpers.assertBinaryData(itemIndex, name);\n\t\t\t\tconst binaryDataBuffer = await this.helpers.getBinaryDataBuffer(itemIndex, name);\n\n\t\t\t\tif (!Buffer.isBuffer(binaryDataBuffer)) {\n\t\t\t\t\tconst description = `The input field '${name}' doesn't contain an attachment. Please make sure you specify a field containing binary data`;\n\t\t\t\t\tthrow new NodeOperationError(this.getNode(), 'Attachment not found', {\n\t\t\t\t\t\tdescription,\n\t\t\t\t\t\titemIndex,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tattachmentsList.push({\n\t\t\t\t\tname: binaryData.fileName || 'unknown',\n\t\t\t\t\tcontent: binaryDataBuffer,\n\t\t\t\t\ttype: binaryData.mimeType,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\treturn attachmentsList;\n}\n\nexport function unescapeSnippets(items: INodeExecutionData[]) {\n\tconst result = items.map((item) => {\n\t\tconst snippet = item.json.snippet as string;\n\t\tif (snippet) {\n\t\t\titem.json.snippet = escapeHtml(snippet);\n\t\t}\n\t\treturn item;\n\t});\n\treturn result;\n}\n\nexport async function replyToEmail(\n\tthis: IExecuteFunctions,\n\tgmailId: string,\n\toptions: IDataObject,\n\titemIndex: number,\n) {\n\tlet qs: IDataObject = {};\n\n\tlet cc = '';\n\tlet bcc = '';\n\n\tif (options.ccList) {\n\t\tcc = prepareEmailsInput.call(this, options.ccList as string, 'CC', itemIndex);\n\t}\n\n\tif (options.bccList) {\n\t\tbcc = prepareEmailsInput.call(this, options.bccList as string, 'BCC', itemIndex);\n\t}\n\tlet attachments: IDataObject[] = [];\n\tif (options.attachmentsUi) {\n\t\tattachments = await prepareEmailAttachments.call(\n\t\t\tthis,\n\t\t\toptions.attachmentsUi as IDataObject,\n\t\t\titemIndex,\n\t\t);\n\t\tif (attachments.length) {\n\t\t\tqs = {\n\t\t\t\tuserId: 'me',\n\t\t\t\tuploadType: 'media',\n\t\t\t};\n\t\t}\n\t}\n\n\tconst endpoint = `/gmail/v1/users/me/messages/${gmailId}`;\n\n\tqs.format = 'metadata';\n\n\tconst { payload, threadId } = await googleApiRequest.call(this, 'GET', endpoint, {}, qs);\n\n\tconst subject =\n\t\tpayload.headers.filter(\n\t\t\t(data: { [key: string]: string }) => data.name.toLowerCase() === 'subject',\n\t\t)[0]?.value || '';\n\n\tconst messageIdGlobal =\n\t\tpayload.headers.filter(\n\t\t\t(data: { [key: string]: string }) => data.name.toLowerCase() === 'message-id',\n\t\t)[0]?.value || '';\n\n\tconst { emailAddress } = await googleApiRequest.call(this, 'GET', '/gmail/v1/users/me/profile');\n\n\tlet to = '';\n\tconst replyToSenderOnly =\n\t\toptions.replyToSenderOnly === undefined ? false : (options.replyToSenderOnly as boolean);\n\n\tconst prepareEmailString = (email: string) => {\n\t\tif (email.includes(emailAddress as string)) return;\n\t\tif (email.includes('<') && email.includes('>')) {\n\t\t\tto += `${email}, `;\n\t\t} else {\n\t\t\tto += `<${email}>, `;\n\t\t}\n\t};\n\n\tfor (const header of payload.headers as IDataObject[]) {\n\t\tif (((header.name as string) || '').toLowerCase() === 'from') {\n\t\t\tconst from = header.value as string;\n\t\t\tif (from.includes('<') && from.includes('>')) {\n\t\t\t\tto += `${from}, `;\n\t\t\t} else {\n\t\t\t\tto += `<${from}>, `;\n\t\t\t}\n\t\t}\n\n\t\tif (((header.name as string) || '').toLowerCase() === 'to' && !replyToSenderOnly) {\n\t\t\tconst toEmails = header.value as string;\n\t\t\ttoEmails.split(',').forEach(prepareEmailString);\n\t\t}\n\t}\n\n\tlet from = '';\n\tif (options.senderName) {\n\t\tfrom = `${options.senderName as string} <${emailAddress}>`;\n\t}\n\n\tconst email: IEmail = {\n\t\tfrom,\n\t\tto,\n\t\tcc,\n\t\tbcc,\n\t\tsubject,\n\t\tattachments,\n\t\tinReplyTo: messageIdGlobal,\n\t\treference: messageIdGlobal,\n\t\t...prepareEmailBody.call(this, itemIndex),\n\t};\n\n\tconst body = {\n\t\traw: await encodeEmail(email),\n\t\tthreadId,\n\t};\n\n\treturn await googleApiRequest.call(this, 'POST', '/gmail/v1/users/me/messages/send', body, qs);\n}\n\nexport async function simplifyOutput(\n\tthis: IExecuteFunctions | IPollFunctions,\n\tdata: IDataObject[],\n) {\n\tconst labelsData = await googleApiRequest.call(this, 'GET', '/gmail/v1/users/me/labels');\n\tconst labels = ((labelsData.labels as IDataObject[]) || []).map(({ id, name }) => ({\n\t\tid,\n\t\tname,\n\t}));\n\treturn (data || []).map((item) => {\n\t\tif (item.labelIds) {\n\t\t\titem.labels = labels.filter((label) =>\n\t\t\t\t(item.labelIds as string[]).includes(label.id as string),\n\t\t\t);\n\t\t\tdelete item.labelIds;\n\t\t}\n\t\tif (item.payload && (item.payload as IDataObject).headers) {\n\t\t\tconst { headers } = item.payload as IDataObject;\n\t\t\t((headers as IDataObject[]) || []).forEach((header) => {\n\t\t\t\titem[header.name as string] = header.value;\n\t\t\t});\n\t\t\tdelete (item.payload as IDataObject).headers;\n\t\t}\n\t\treturn item;\n\t});\n}\n\n/**\n * Get all the labels to display them to user so that they can select them easily\n */\nexport async function getLabels(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\tconst returnData: INodePropertyOptions[] = [];\n\n\tconst labels = await googleApiRequestAllItems.call(\n\t\tthis,\n\t\t'labels',\n\t\t'GET',\n\t\t'/gmail/v1/users/me/labels',\n\t);\n\n\tfor (const label of labels) {\n\t\treturnData.push({\n\t\t\tname: label.name,\n\t\t\tvalue: label.id,\n\t\t});\n\t}\n\n\treturn returnData.sort((a, b) => {\n\t\tif (a.name < b.name) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.name > b.name) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n}\n"],"mappings":"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","names":["MailComposer","isEmpty","email","from"]}
|
|
@@ -87,6 +87,13 @@ const draftFields = [
|
|
|
87
87
|
},
|
|
88
88
|
placeholder: "Hello World!"
|
|
89
89
|
},
|
|
90
|
+
{
|
|
91
|
+
displayName: "To reply to an existing thread, specify the exact subject title of that thread.",
|
|
92
|
+
name: "threadNotice",
|
|
93
|
+
type: "notice",
|
|
94
|
+
default: "",
|
|
95
|
+
displayOptions: { show: { resource: ["draft"], operation: ["create"] } }
|
|
96
|
+
},
|
|
90
97
|
{
|
|
91
98
|
displayName: "Email Type",
|
|
92
99
|
name: "emailType",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../nodes/Google/Gmail/v2/DraftDescription.ts"],"sourcesContent":["import type { INodeProperties } from 'n8n-workflow';\n\nexport const draftOperations: INodeProperties[] = [\n\t{\n\t\tdisplayName: 'Operation',\n\t\tname: 'operation',\n\t\ttype: 'options',\n\t\tnoDataExpression: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'Create',\n\t\t\t\tvalue: 'create',\n\t\t\t\taction: 'Create a draft',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Delete',\n\t\t\t\tvalue: 'delete',\n\t\t\t\taction: 'Delete a draft',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Get',\n\t\t\t\tvalue: 'get',\n\t\t\t\taction: 'Get a draft',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Get Many',\n\t\t\t\tvalue: 'getAll',\n\t\t\t\taction: 'Get many drafts',\n\t\t\t},\n\t\t],\n\t\tdefault: 'create',\n\t},\n];\n\nexport const draftFields: INodeProperties[] = [\n\t{\n\t\tdisplayName: 'Draft ID',\n\t\tname: 'messageId',\n\t\ttype: 'string',\n\t\tdefault: '',\n\t\trequired: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t\toperation: ['delete', 'get'],\n\t\t\t},\n\t\t},\n\t\tplaceholder: 'r-3254521568507167962',\n\t},\n\t{\n\t\tdisplayName: 'Subject',\n\t\tname: 'subject',\n\t\ttype: 'string',\n\t\tdefault: '',\n\t\trequired: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t\tplaceholder: 'Hello World!',\n\t},\n\t{\n\t\tdisplayName: 'Email Type',\n\t\tname: 'emailType',\n\t\ttype: 'options',\n\t\tdefault: 'text',\n\t\trequired: true,\n\t\tnoDataExpression: true,\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'HTML',\n\t\t\t\tvalue: 'html',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Text',\n\t\t\t\tvalue: 'text',\n\t\t\t},\n\t\t],\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Message',\n\t\tname: 'message',\n\t\ttype: 'string',\n\t\tdefault: '',\n\t\trequired: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Options',\n\t\tname: 'options',\n\t\ttype: 'collection',\n\t\tplaceholder: 'Add option',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t\tdefault: {},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Attachments',\n\t\t\t\tname: 'attachmentsUi',\n\t\t\t\tplaceholder: 'Add Attachment',\n\t\t\t\ttype: 'fixedCollection',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tmultipleValues: true,\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'attachmentsBinary',\n\t\t\t\t\t\tdisplayName: 'Attachment Binary',\n\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'Attachment Field Name (in Input)',\n\t\t\t\t\t\t\t\tname: 'property',\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\tdescription:\n\t\t\t\t\t\t\t\t\t'Add the field name from the input node. Multiple properties can be set separated by comma.',\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\tdefault: {},\n\t\t\t\tdescription: 'Array of supported attachments to add to the message',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'BCC',\n\t\t\t\tname: 'bccList',\n\t\t\t\ttype: 'string',\n\t\t\t\tdescription:\n\t\t\t\t\t'The email addresses of the blind copy recipients. Multiple addresses can be separated by a comma. e.g. jay@getsby.com, jon@smith.com.',\n\t\t\t\tplaceholder: 'info@example.com',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'CC',\n\t\t\t\tname: 'ccList',\n\t\t\t\ttype: 'string',\n\t\t\t\tdescription:\n\t\t\t\t\t'The email addresses of the copy recipients. Multiple addresses can be separated by a comma. e.g. jay@getsby.com, jon@smith.com.',\n\t\t\t\tplaceholder: 'info@example.com',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'From Alias Name or ID',\n\t\t\t\tname: 'fromAlias',\n\t\t\t\ttype: 'options',\n\t\t\t\tdefault: '',\n\t\t\t\tdescription:\n\t\t\t\t\t'Select the alias to send the email from. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tloadOptionsMethod: 'getGmailAliases',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Send Replies To',\n\t\t\t\tname: 'replyTo',\n\t\t\t\ttype: 'string',\n\t\t\t\tplaceholder: 'reply@example.com',\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'The email address that the reply message is sent to',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Thread ID',\n\t\t\t\tname: 'threadId',\n\t\t\t\ttype: 'string',\n\t\t\t\tplaceholder: '18cc573e2431878f',\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'The identifier of the thread to attach the draft',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'To Email',\n\t\t\t\tname: 'sendTo',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'info@example.com',\n\t\t\t\tdescription:\n\t\t\t\t\t'The email addresses of the recipients. Multiple addresses can be separated by a comma. e.g. jay@getsby.com, jon@smith.com.',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tdisplayName: 'Options',\n\t\tname: 'options',\n\t\ttype: 'collection',\n\t\tplaceholder: 'Add option',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t\toperation: ['get'],\n\t\t\t},\n\t\t},\n\t\tdefault: {},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Attachment Prefix',\n\t\t\t\tname: 'dataPropertyAttachmentsPrefixName',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: 'attachment_',\n\t\t\t\tdescription:\n\t\t\t\t\t\"Prefix for name of the binary property to which to write the attachment. An index starting with 0 will be added. So if name is 'attachment_' the first attachment is saved to 'attachment_0'.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Download Attachments',\n\t\t\t\tname: 'downloadAttachments',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: \"Whether the draft's attachments will be downloaded\",\n\t\t\t},\n\t\t],\n\t},\n\n\t/* -------------------------------------------------------------------------- */\n\t/* draft:getAll */\n\t/* -------------------------------------------------------------------------- */\n\t{\n\t\tdisplayName: 'Return All',\n\t\tname: 'returnAll',\n\t\ttype: 'boolean',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toperation: ['getAll'],\n\t\t\t\tresource: ['draft'],\n\t\t\t},\n\t\t},\n\t\tdefault: false,\n\t\tdescription: 'Whether to return all results or only up to a given limit',\n\t},\n\t{\n\t\tdisplayName: 'Limit',\n\t\tname: 'limit',\n\t\ttype: 'number',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toperation: ['getAll'],\n\t\t\t\tresource: ['draft'],\n\t\t\t\treturnAll: [false],\n\t\t\t},\n\t\t},\n\t\ttypeOptions: {\n\t\t\tminValue: 1,\n\t\t\tmaxValue: 500,\n\t\t},\n\t\tdefault: 50,\n\t\tdescription: 'Max number of results to return',\n\t},\n\t{\n\t\tdisplayName: 'Options',\n\t\tname: 'options',\n\t\ttype: 'collection',\n\t\tplaceholder: 'Add option',\n\t\tdefault: {},\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toperation: ['getAll'],\n\t\t\t\tresource: ['draft'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Attachment Prefix',\n\t\t\t\tname: 'dataPropertyAttachmentsPrefixName',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: 'attachment_',\n\t\t\t\tdescription:\n\t\t\t\t\t\"Prefix for name of the binary property to which to write the attachments. An index starting with 0 will be added. So if name is 'attachment_' the first attachment is saved to 'attachment_0'.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Download Attachments',\n\t\t\t\tname: 'downloadAttachments',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: \"Whether the draft's attachments will be downloaded\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Include Spam and Trash',\n\t\t\t\tname: 'includeSpamTrash',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: 'Whether to include messages from SPAM and TRASH in the results',\n\t\t\t},\n\t\t],\n\t},\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,kBAAqC;AAAA,EACjD;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,UAAU,CAAC,OAAO;AAAA,MACnB;AAAA,IACD;AAAA,IACA,SAAS;AAAA,MACR;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MACT;AAAA,MACA;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MACT;AAAA,MACA;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MACT;AAAA,MACA;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MACT;AAAA,IACD;AAAA,IACA,SAAS;AAAA,EACV;AACD;AAEO,MAAM,cAAiC;AAAA,EAC7C;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,UAAU,CAAC,OAAO;AAAA,QAClB,WAAW,CAAC,UAAU,KAAK;AAAA,MAC5B;AAAA,IACD;AAAA,IACA,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,UAAU,CAAC,OAAO;AAAA,QAClB,WAAW,CAAC,QAAQ;AAAA,MACrB;AAAA,IACD;AAAA,IACA,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,SAAS;AAAA,MACR;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,MACA;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,IACD;AAAA,IACA,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,UAAU,CAAC,OAAO;AAAA,QAClB,WAAW,CAAC,QAAQ;AAAA,MACrB;AAAA,IACD;AAAA,EACD;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,UAAU,CAAC,OAAO;AAAA,QAClB,WAAW,CAAC,QAAQ;AAAA,MACrB;AAAA,IACD;AAAA,EACD;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,UAAU,CAAC,OAAO;AAAA,QAClB,WAAW,CAAC,QAAQ;AAAA,MACrB;AAAA,IACD;AAAA,IACA,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,MACR;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,UACZ,gBAAgB;AAAA,QACjB;AAAA,QACA,SAAS;AAAA,UACR;AAAA,YACC,MAAM;AAAA,YACN,aAAa;AAAA,YACb,QAAQ;AAAA,cACP;AAAA,gBACC,aAAa;AAAA,gBACb,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,SAAS;AAAA,gBACT,aACC;AAAA,cACF;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,QACA,SAAS,CAAC;AAAA,QACV,aAAa;AAAA,MACd;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aACC;AAAA,QACD,aAAa;AAAA,QACb,SAAS;AAAA,MACV;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aACC;AAAA,QACD,aAAa;AAAA,QACb,SAAS;AAAA,MACV;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACC;AAAA,QACD,aAAa;AAAA,UACZ,mBAAmB;AAAA,QACpB;AAAA,MACD;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,aAAa;AAAA,MACd;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,aAAa;AAAA,MACd;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,QACb,aACC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,UAAU,CAAC,OAAO;AAAA,QAClB,WAAW,CAAC,KAAK;AAAA,MAClB;AAAA,IACD;AAAA,IACA,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,MACR;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACC;AAAA,MACF;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACd;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,WAAW,CAAC,QAAQ;AAAA,QACpB,UAAU,CAAC,OAAO;AAAA,MACnB;AAAA,IACD;AAAA,IACA,SAAS;AAAA,IACT,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,WAAW,CAAC,QAAQ;AAAA,QACpB,UAAU,CAAC,OAAO;AAAA,QAClB,WAAW,CAAC,KAAK;AAAA,MAClB;AAAA,IACD;AAAA,IACA,aAAa;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,IACX;AAAA,IACA,SAAS;AAAA,IACT,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS,CAAC;AAAA,IACV,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,WAAW,CAAC,QAAQ;AAAA,QACpB,UAAU,CAAC,OAAO;AAAA,MACnB;AAAA,IACD;AAAA,IACA,SAAS;AAAA,MACR;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACC;AAAA,MACF;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACd;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,MACd;AAAA,IACD;AAAA,EACD;AACD;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../../nodes/Google/Gmail/v2/DraftDescription.ts"],"sourcesContent":["import type { INodeProperties } from 'n8n-workflow';\n\nexport const draftOperations: INodeProperties[] = [\n\t{\n\t\tdisplayName: 'Operation',\n\t\tname: 'operation',\n\t\ttype: 'options',\n\t\tnoDataExpression: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'Create',\n\t\t\t\tvalue: 'create',\n\t\t\t\taction: 'Create a draft',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Delete',\n\t\t\t\tvalue: 'delete',\n\t\t\t\taction: 'Delete a draft',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Get',\n\t\t\t\tvalue: 'get',\n\t\t\t\taction: 'Get a draft',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Get Many',\n\t\t\t\tvalue: 'getAll',\n\t\t\t\taction: 'Get many drafts',\n\t\t\t},\n\t\t],\n\t\tdefault: 'create',\n\t},\n];\n\nexport const draftFields: INodeProperties[] = [\n\t{\n\t\tdisplayName: 'Draft ID',\n\t\tname: 'messageId',\n\t\ttype: 'string',\n\t\tdefault: '',\n\t\trequired: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t\toperation: ['delete', 'get'],\n\t\t\t},\n\t\t},\n\t\tplaceholder: 'r-3254521568507167962',\n\t},\n\t{\n\t\tdisplayName: 'Subject',\n\t\tname: 'subject',\n\t\ttype: 'string',\n\t\tdefault: '',\n\t\trequired: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t\tplaceholder: 'Hello World!',\n\t},\n\t{\n\t\tdisplayName: 'To reply to an existing thread, specify the exact subject title of that thread.',\n\t\tname: 'threadNotice',\n\t\ttype: 'notice',\n\t\tdefault: '',\n\t\tdisplayOptions: { show: { resource: ['draft'], operation: ['create'] } },\n\t},\n\t{\n\t\tdisplayName: 'Email Type',\n\t\tname: 'emailType',\n\t\ttype: 'options',\n\t\tdefault: 'text',\n\t\trequired: true,\n\t\tnoDataExpression: true,\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'HTML',\n\t\t\t\tvalue: 'html',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Text',\n\t\t\t\tvalue: 'text',\n\t\t\t},\n\t\t],\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Message',\n\t\tname: 'message',\n\t\ttype: 'string',\n\t\tdefault: '',\n\t\trequired: true,\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Options',\n\t\tname: 'options',\n\t\ttype: 'collection',\n\t\tplaceholder: 'Add option',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t\toperation: ['create'],\n\t\t\t},\n\t\t},\n\t\tdefault: {},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Attachments',\n\t\t\t\tname: 'attachmentsUi',\n\t\t\t\tplaceholder: 'Add Attachment',\n\t\t\t\ttype: 'fixedCollection',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tmultipleValues: true,\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'attachmentsBinary',\n\t\t\t\t\t\tdisplayName: 'Attachment Binary',\n\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisplayName: 'Attachment Field Name (in Input)',\n\t\t\t\t\t\t\t\tname: 'property',\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\tdescription:\n\t\t\t\t\t\t\t\t\t'Add the field name from the input node. Multiple properties can be set separated by comma.',\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\tdefault: {},\n\t\t\t\tdescription: 'Array of supported attachments to add to the message',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'BCC',\n\t\t\t\tname: 'bccList',\n\t\t\t\ttype: 'string',\n\t\t\t\tdescription:\n\t\t\t\t\t'The email addresses of the blind copy recipients. Multiple addresses can be separated by a comma. e.g. jay@getsby.com, jon@smith.com.',\n\t\t\t\tplaceholder: 'info@example.com',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'CC',\n\t\t\t\tname: 'ccList',\n\t\t\t\ttype: 'string',\n\t\t\t\tdescription:\n\t\t\t\t\t'The email addresses of the copy recipients. Multiple addresses can be separated by a comma. e.g. jay@getsby.com, jon@smith.com.',\n\t\t\t\tplaceholder: 'info@example.com',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'From Alias Name or ID',\n\t\t\t\tname: 'fromAlias',\n\t\t\t\ttype: 'options',\n\t\t\t\tdefault: '',\n\t\t\t\tdescription:\n\t\t\t\t\t'Select the alias to send the email from. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tloadOptionsMethod: 'getGmailAliases',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Send Replies To',\n\t\t\t\tname: 'replyTo',\n\t\t\t\ttype: 'string',\n\t\t\t\tplaceholder: 'reply@example.com',\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'The email address that the reply message is sent to',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Thread ID',\n\t\t\t\tname: 'threadId',\n\t\t\t\ttype: 'string',\n\t\t\t\tplaceholder: '18cc573e2431878f',\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'The identifier of the thread to attach the draft',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'To Email',\n\t\t\t\tname: 'sendTo',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'info@example.com',\n\t\t\t\tdescription:\n\t\t\t\t\t'The email addresses of the recipients. Multiple addresses can be separated by a comma. e.g. jay@getsby.com, jon@smith.com.',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tdisplayName: 'Options',\n\t\tname: 'options',\n\t\ttype: 'collection',\n\t\tplaceholder: 'Add option',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['draft'],\n\t\t\t\toperation: ['get'],\n\t\t\t},\n\t\t},\n\t\tdefault: {},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Attachment Prefix',\n\t\t\t\tname: 'dataPropertyAttachmentsPrefixName',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: 'attachment_',\n\t\t\t\tdescription:\n\t\t\t\t\t\"Prefix for name of the binary property to which to write the attachment. An index starting with 0 will be added. So if name is 'attachment_' the first attachment is saved to 'attachment_0'.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Download Attachments',\n\t\t\t\tname: 'downloadAttachments',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: \"Whether the draft's attachments will be downloaded\",\n\t\t\t},\n\t\t],\n\t},\n\n\t/* -------------------------------------------------------------------------- */\n\t/* draft:getAll */\n\t/* -------------------------------------------------------------------------- */\n\t{\n\t\tdisplayName: 'Return All',\n\t\tname: 'returnAll',\n\t\ttype: 'boolean',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toperation: ['getAll'],\n\t\t\t\tresource: ['draft'],\n\t\t\t},\n\t\t},\n\t\tdefault: false,\n\t\tdescription: 'Whether to return all results or only up to a given limit',\n\t},\n\t{\n\t\tdisplayName: 'Limit',\n\t\tname: 'limit',\n\t\ttype: 'number',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toperation: ['getAll'],\n\t\t\t\tresource: ['draft'],\n\t\t\t\treturnAll: [false],\n\t\t\t},\n\t\t},\n\t\ttypeOptions: {\n\t\t\tminValue: 1,\n\t\t\tmaxValue: 500,\n\t\t},\n\t\tdefault: 50,\n\t\tdescription: 'Max number of results to return',\n\t},\n\t{\n\t\tdisplayName: 'Options',\n\t\tname: 'options',\n\t\ttype: 'collection',\n\t\tplaceholder: 'Add option',\n\t\tdefault: {},\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toperation: ['getAll'],\n\t\t\t\tresource: ['draft'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Attachment Prefix',\n\t\t\t\tname: 'dataPropertyAttachmentsPrefixName',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: 'attachment_',\n\t\t\t\tdescription:\n\t\t\t\t\t\"Prefix for name of the binary property to which to write the attachments. An index starting with 0 will be added. So if name is 'attachment_' the first attachment is saved to 'attachment_0'.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Download Attachments',\n\t\t\t\tname: 'downloadAttachments',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: \"Whether the draft's attachments will be downloaded\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Include Spam and Trash',\n\t\t\t\tname: 'includeSpamTrash',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: 'Whether to include messages from SPAM and TRASH in the results',\n\t\t\t},\n\t\t],\n\t},\n];\n"],"mappings":"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","names":[]}
|
|
@@ -27,6 +27,7 @@ var import_LabelDescription = require("./LabelDescription");
|
|
|
27
27
|
var import_loadOptions = require("./loadOptions");
|
|
28
28
|
var import_MessageDescription = require("./MessageDescription");
|
|
29
29
|
var import_ThreadDescription = require("./ThreadDescription");
|
|
30
|
+
var import_draft = require("./utils/draft");
|
|
30
31
|
var import_configureWaitTillDate = require("../../../../utils/sendAndWait/configureWaitTillDate.util");
|
|
31
32
|
var import_descriptions = require("../../../../utils/sendAndWait/descriptions");
|
|
32
33
|
var import_utils = require("../../../../utils/sendAndWait/utils");
|
|
@@ -467,6 +468,9 @@ class GmailV2 {
|
|
|
467
468
|
...import_GenericFunctions.prepareEmailBody.call(this, i),
|
|
468
469
|
attachments
|
|
469
470
|
};
|
|
471
|
+
if (threadId && options.replyTo) {
|
|
472
|
+
await import_draft.addThreadHeadersToEmail.call(this, email, threadId);
|
|
473
|
+
}
|
|
470
474
|
const body = {
|
|
471
475
|
message: {
|
|
472
476
|
raw: await (0, import_GenericFunctions.encodeEmail)(email),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../nodes/Google/Gmail/v2/GmailV2.node.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tINodeType,\n\tINodeTypeBaseDescription,\n\tINodeTypeDescription,\n} from 'n8n-workflow';\nimport { NodeConnectionTypes, NodeOperationError, SEND_AND_WAIT_OPERATION } from 'n8n-workflow';\n\nimport { draftFields, draftOperations } from './DraftDescription';\nimport { labelFields, labelOperations } from './LabelDescription';\nimport { getGmailAliases, getLabels, getThreadMessages } from './loadOptions';\nimport { messageFields, messageOperations } from './MessageDescription';\nimport { threadFields, threadOperations } from './ThreadDescription';\nimport { configureWaitTillDate } from '../../../../utils/sendAndWait/configureWaitTillDate.util';\nimport { sendAndWaitWebhooksDescription } from '../../../../utils/sendAndWait/descriptions';\nimport type { IEmail } from '../../../../utils/sendAndWait/interfaces';\nimport {\n\tcreateEmail,\n\tgetSendAndWaitProperties,\n\tsendAndWaitWebhook,\n} from '../../../../utils/sendAndWait/utils';\nimport {\n\tencodeEmail,\n\tgoogleApiRequest,\n\tgoogleApiRequestAllItems,\n\tparseRawEmail,\n\tprepareEmailAttachments,\n\tprepareEmailBody,\n\tprepareEmailsInput,\n\tprepareQuery,\n\treplyToEmail,\n\tsimplifyOutput,\n\tunescapeSnippets,\n} from '../GenericFunctions';\n\nconst versionDescription: INodeTypeDescription = {\n\tdisplayName: 'Gmail',\n\tname: 'gmail',\n\ticon: 'file:gmail.svg',\n\tgroup: ['transform'],\n\tversion: [2, 2.1],\n\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\tdescription: 'Consume the Gmail API',\n\tdefaults: {\n\t\tname: 'Gmail',\n\t},\n\tinputs: [NodeConnectionTypes.Main],\n\toutputs: [NodeConnectionTypes.Main],\n\tusableAsTool: true,\n\tcredentials: [\n\t\t{\n\t\t\tname: 'googleApi',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tauthentication: ['serviceAccount'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: 'gmailOAuth2',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tauthentication: ['oAuth2'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t],\n\twebhooks: sendAndWaitWebhooksDescription,\n\tproperties: [\n\t\t{\n\t\t\tdisplayName: 'Authentication',\n\t\t\tname: 'authentication',\n\t\t\ttype: 'options',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\t// eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased\n\t\t\t\t\tname: 'OAuth2 (recommended)',\n\t\t\t\t\tvalue: 'oAuth2',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Service Account',\n\t\t\t\t\tvalue: 'serviceAccount',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdefault: 'oAuth2',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Resource',\n\t\t\tname: 'resource',\n\t\t\ttype: 'options',\n\t\t\tnoDataExpression: true,\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: 'Message',\n\t\t\t\t\tvalue: 'message',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Label',\n\t\t\t\t\tvalue: 'label',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Draft',\n\t\t\t\t\tvalue: 'draft',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Thread',\n\t\t\t\t\tvalue: 'thread',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdefault: 'message',\n\t\t},\n\t\t//-------------------------------\n\t\t// Draft Operations\n\t\t//-------------------------------\n\t\t...draftOperations,\n\t\t...draftFields,\n\t\t//-------------------------------\n\t\t// Label Operations\n\t\t//-------------------------------\n\t\t...labelOperations,\n\t\t...labelFields,\n\t\t//-------------------------------\n\t\t// Message Operations\n\t\t//-------------------------------\n\t\t...messageOperations,\n\t\t...messageFields,\n\t\t...getSendAndWaitProperties([\n\t\t\t{\n\t\t\t\tdisplayName: 'To',\n\t\t\t\tname: 'sendTo',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\trequired: true,\n\t\t\t\tplaceholder: 'e.g. info@example.com',\n\t\t\t},\n\t\t]),\n\t\t//-------------------------------\n\t\t// Thread Operations\n\t\t//-------------------------------\n\t\t...threadOperations,\n\t\t...threadFields,\n\t\t//-------------------------------\n\t],\n};\n\nexport class GmailV2 implements INodeType {\n\tdescription: INodeTypeDescription;\n\n\tconstructor(baseDescription: INodeTypeBaseDescription) {\n\t\tthis.description = {\n\t\t\t...baseDescription,\n\t\t\t...versionDescription,\n\t\t};\n\t}\n\n\tmethods = {\n\t\tloadOptions: {\n\t\t\tgetLabels,\n\t\t\tgetThreadMessages,\n\t\t\tgetGmailAliases,\n\t\t},\n\t};\n\n\twebhook = sendAndWaitWebhook;\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst returnData: INodeExecutionData[] = [];\n\t\tconst resource = this.getNodeParameter('resource', 0);\n\t\tconst operation = this.getNodeParameter('operation', 0);\n\t\tconst nodeVersion = this.getNode().typeVersion;\n\t\tconst instanceId = this.getInstanceId();\n\n\t\tif (resource === 'message' && operation === SEND_AND_WAIT_OPERATION) {\n\t\t\tconst email: IEmail = createEmail(this);\n\n\t\t\tawait googleApiRequest.call(this, 'POST', '/gmail/v1/users/me/messages/send', {\n\t\t\t\traw: await encodeEmail(email),\n\t\t\t});\n\n\t\t\tconst waitTill = configureWaitTillDate(this);\n\n\t\t\tawait this.putExecutionToWait(waitTill);\n\t\t\treturn [this.getInputData()];\n\t\t}\n\n\t\tlet responseData;\n\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\ttry {\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\t// labels //\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\tif (resource === 'label') {\n\t\t\t\t\tif (operation === 'create') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/v1/reference/users/labels/create\n\t\t\t\t\t\tconst labelName = this.getNodeParameter('name', i) as string;\n\t\t\t\t\t\tconst labelListVisibility = this.getNodeParameter(\n\t\t\t\t\t\t\t'options.labelListVisibility',\n\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\t'labelShow',\n\t\t\t\t\t\t) as string;\n\t\t\t\t\t\tconst messageListVisibility = this.getNodeParameter(\n\t\t\t\t\t\t\t'options.messageListVisibility',\n\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\t'show',\n\t\t\t\t\t\t) as string;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\tlabelListVisibility,\n\t\t\t\t\t\t\tmessageListVisibility,\n\t\t\t\t\t\t\tname: labelName,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/gmail/v1/users/me/labels',\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\tif (operation === 'delete') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/v1/reference/users/labels/delete\n\t\t\t\t\t\tconst labelId = this.getNodeParameter('labelId', i) as string[];\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/labels/${labelId}`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'DELETE', endpoint);\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/v1/reference/users/labels/get\n\t\t\t\t\t\tconst labelId = this.getNodeParameter('labelId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/labels/${labelId}`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', endpoint);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', '/gmail/v1/users/me/labels');\n\n\t\t\t\t\t\tresponseData = this.helpers.returnJsonArray(responseData.labels as IDataObject[]);\n\n\t\t\t\t\t\tif (!returnAll) {\n\t\t\t\t\t\t\tconst limit = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = responseData.splice(0, limit);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\t// messages //\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\tif (resource === 'message') {\n\t\t\t\t\tif (operation === 'send') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/v1/reference/users/messages/send\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst sendTo = this.getNodeParameter('sendTo', i) as string;\n\t\t\t\t\t\tlet qs: IDataObject = {};\n\n\t\t\t\t\t\tconst to = prepareEmailsInput.call(this, sendTo, 'To', i);\n\t\t\t\t\t\tlet cc = '';\n\t\t\t\t\t\tlet bcc = '';\n\t\t\t\t\t\tlet replyTo = '';\n\n\t\t\t\t\t\tif (options.ccList) {\n\t\t\t\t\t\t\tcc = prepareEmailsInput.call(this, options.ccList as string, 'CC', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.bccList) {\n\t\t\t\t\t\t\tbcc = prepareEmailsInput.call(this, options.bccList as string, 'BCC', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.replyTo) {\n\t\t\t\t\t\t\treplyTo = prepareEmailsInput.call(this, options.replyTo as string, 'ReplyTo', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet attachments: IDataObject[] = [];\n\n\t\t\t\t\t\tif (options.attachmentsUi) {\n\t\t\t\t\t\t\tattachments = await prepareEmailAttachments.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\toptions.attachmentsUi as IDataObject,\n\t\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attachments.length) {\n\t\t\t\t\t\t\t\tqs = {\n\t\t\t\t\t\t\t\t\tuserId: 'me',\n\t\t\t\t\t\t\t\t\tuploadType: 'media',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet from = '';\n\t\t\t\t\t\tif (options.senderName) {\n\t\t\t\t\t\t\tconst { emailAddress } = await googleApiRequest.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'/gmail/v1/users/me/profile',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tfrom = `${options.senderName as string} <${emailAddress}>`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet appendAttribution = options.appendAttribution;\n\t\t\t\t\t\tif (appendAttribution === undefined) {\n\t\t\t\t\t\t\tappendAttribution = nodeVersion >= 2.1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst email: IEmail = {\n\t\t\t\t\t\t\tfrom,\n\t\t\t\t\t\t\tto,\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t\tbcc,\n\t\t\t\t\t\t\treplyTo,\n\t\t\t\t\t\t\tsubject: this.getNodeParameter('subject', i) as string,\n\t\t\t\t\t\t\t...prepareEmailBody.call(this, i, appendAttribution as boolean, instanceId),\n\t\t\t\t\t\t\tattachments,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst endpoint = '/gmail/v1/users/me/messages/send';\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\traw: await encodeEmail(email),\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body, qs);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'reply') {\n\t\t\t\t\t\tconst messageIdGmail = this.getNodeParameter('messageId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tresponseData = await replyToEmail.call(this, messageIdGmail, options, i);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/v1/reference/users/messages/get\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/messages/${id}`;\n\t\t\t\t\t\tconst qs: IDataObject = {};\n\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i, {});\n\t\t\t\t\t\tconst simple = this.getNodeParameter('simple', i) as boolean;\n\n\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\tqs.format = 'metadata';\n\t\t\t\t\t\t\tqs.metadataHeaders = ['From', 'To', 'Cc', 'Bcc', 'Subject'];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.format = 'raw';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', endpoint, {}, qs);\n\n\t\t\t\t\t\tlet nodeExecutionData: INodeExecutionData;\n\t\t\t\t\t\tif (!simple) {\n\t\t\t\t\t\t\tconst dataPropertyNameDownload =\n\t\t\t\t\t\t\t\t(options.dataPropertyAttachmentsPrefixName as string) || 'attachment_';\n\n\t\t\t\t\t\t\tnodeExecutionData = await parseRawEmail.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\tresponseData,\n\t\t\t\t\t\t\t\tdataPropertyNameDownload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst [json, _] = await simplifyOutput.call(this, [responseData as IDataObject]);\n\t\t\t\t\t\t\tnodeExecutionData = { json };\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = [nodeExecutionData];\n\t\t\t\t\t}\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\tconst filters = this.getNodeParameter('filters', i, {});\n\t\t\t\t\t\tconst qs: IDataObject = {};\n\t\t\t\t\t\tObject.assign(qs, prepareQuery.call(this, filters, i), options, i);\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'messages',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/gmail/v1/users/me/messages',\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.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.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'/gmail/v1/users/me/messages',\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\tresponseData = responseData.messages;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (responseData === undefined) {\n\t\t\t\t\t\t\tresponseData = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst simple = this.getNodeParameter('simple', i) as boolean;\n\n\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\tqs.format = 'metadata';\n\t\t\t\t\t\t\tqs.metadataHeaders = ['From', 'To', 'Cc', 'Bcc', 'Subject'];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.format = 'raw';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (let index = 0; index < responseData.length; index++) {\n\t\t\t\t\t\t\tresponseData[index] = await googleApiRequest.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`/gmail/v1/users/me/messages/${responseData[index].id}`,\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\n\t\t\t\t\t\t\tif (!simple) {\n\t\t\t\t\t\t\t\tconst dataPropertyNameDownload =\n\t\t\t\t\t\t\t\t\t(options.dataPropertyAttachmentsPrefixName as string) || 'attachment_';\n\n\t\t\t\t\t\t\t\tresponseData[index] = await parseRawEmail.call(\n\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\tresponseData[index],\n\t\t\t\t\t\t\t\t\tdataPropertyNameDownload,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\tresponseData = this.helpers.returnJsonArray(\n\t\t\t\t\t\t\t\tawait simplifyOutput.call(this, responseData as IDataObject[]),\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\tif (operation === 'delete') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/v1/reference/users/messages/delete\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/messages/${id}`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'DELETE', endpoint);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'markAsRead') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/reference/rest/v1/users.messages/modify\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/messages/${id}/modify`;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\tremoveLabelIds: ['UNREAD'],\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (operation === 'markAsUnread') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/reference/rest/v1/users.messages/modify\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/messages/${id}/modify`;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\taddLabelIds: ['UNREAD'],\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (operation === 'addLabels') {\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst labelIds = this.getNodeParameter('labelIds', i) as string[];\n\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/messages/${id}/modify`;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\taddLabelIds: labelIds,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'removeLabels') {\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst labelIds = this.getNodeParameter('labelIds', i) as string[];\n\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/messages/${id}/modify`;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\tremoveLabelIds: labelIds,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\t// drafts //\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\tif (resource === 'draft') {\n\t\t\t\t\tif (operation === 'create') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/v1/reference/users/drafts/create\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tlet qs: IDataObject = {};\n\n\t\t\t\t\t\tlet to = '';\n\t\t\t\t\t\tlet cc = '';\n\t\t\t\t\t\tlet bcc = '';\n\t\t\t\t\t\tlet replyTo = '';\n\t\t\t\t\t\tlet fromAlias = '';\n\t\t\t\t\t\tlet threadId = null;\n\n\t\t\t\t\t\tif (options.sendTo) {\n\t\t\t\t\t\t\tto += prepareEmailsInput.call(this, options.sendTo as string, 'To', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.ccList) {\n\t\t\t\t\t\t\tcc = prepareEmailsInput.call(this, options.ccList as string, 'CC', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.bccList) {\n\t\t\t\t\t\t\tbcc = prepareEmailsInput.call(this, options.bccList as string, 'BCC', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.replyTo) {\n\t\t\t\t\t\t\treplyTo = prepareEmailsInput.call(this, options.replyTo as string, 'ReplyTo', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.fromAlias) {\n\t\t\t\t\t\t\tfromAlias = options.fromAlias as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.threadId && typeof options.threadId === 'string') {\n\t\t\t\t\t\t\tthreadId = options.threadId;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet attachments: IDataObject[] = [];\n\t\t\t\t\t\tif (options.attachmentsUi) {\n\t\t\t\t\t\t\tattachments = await prepareEmailAttachments.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\toptions.attachmentsUi as IDataObject,\n\t\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attachments.length) {\n\t\t\t\t\t\t\t\tqs = {\n\t\t\t\t\t\t\t\t\tuserId: 'me',\n\t\t\t\t\t\t\t\t\tuploadType: 'media',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst email: IEmail = {\n\t\t\t\t\t\t\tfrom: fromAlias,\n\t\t\t\t\t\t\tto,\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t\tbcc,\n\t\t\t\t\t\t\treplyTo,\n\t\t\t\t\t\t\tsubject: this.getNodeParameter('subject', i) as string,\n\t\t\t\t\t\t\t...prepareEmailBody.call(this, i),\n\t\t\t\t\t\t\tattachments,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\traw: await encodeEmail(email),\n\t\t\t\t\t\t\t\tthreadId: threadId || undefined,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/gmail/v1/users/me/drafts',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/v1/reference/users/drafts/get\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/drafts/${id}`;\n\t\t\t\t\t\tconst qs: IDataObject = {};\n\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tqs.format = 'raw';\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', endpoint, {}, qs);\n\n\t\t\t\t\t\tconst dataPropertyNameDownload =\n\t\t\t\t\t\t\t(options.dataPropertyAttachmentsPrefixName as string) || 'attachment_';\n\n\t\t\t\t\t\tconst nodeExecutionData = await parseRawEmail.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\tresponseData.message,\n\t\t\t\t\t\t\tdataPropertyNameDownload,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Add the draft-id\n\t\t\t\t\t\tnodeExecutionData.json.messageId = nodeExecutionData.json.id;\n\t\t\t\t\t\tnodeExecutionData.json.id = responseData.id;\n\n\t\t\t\t\t\tresponseData = [nodeExecutionData];\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/v1/reference/users/drafts/delete\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/drafts/${id}`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'DELETE', endpoint);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\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\tconst qs: IDataObject = {};\n\t\t\t\t\t\tObject.assign(qs, options);\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'drafts',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/gmail/v1/users/me/drafts',\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.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.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'/gmail/v1/users/me/drafts',\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\tresponseData = responseData.drafts;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (responseData === undefined) {\n\t\t\t\t\t\t\tresponseData = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.format = 'raw';\n\n\t\t\t\t\t\tfor (let index = 0; index < responseData.length; index++) {\n\t\t\t\t\t\t\tresponseData[index] = await googleApiRequest.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`/gmail/v1/users/me/drafts/${responseData[index].id}`,\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\n\t\t\t\t\t\t\tconst dataPropertyNameDownload =\n\t\t\t\t\t\t\t\t(options.dataPropertyAttachmentsPrefixName as string) || 'attachment_';\n\t\t\t\t\t\t\tconst id = responseData[index].id;\n\t\t\t\t\t\t\tresponseData[index] = await parseRawEmail.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\tresponseData[index].message,\n\t\t\t\t\t\t\t\tdataPropertyNameDownload,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// Add the draft-id\n\t\t\t\t\t\t\tresponseData[index].json.messageId = responseData[index].json.id;\n\t\t\t\t\t\t\tresponseData[index].json.id = id;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\t// threads //\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\tif (resource === 'thread') {\n\t\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/reference/rest/v1/users.threads/delete\n\t\t\t\t\t\tconst id = this.getNodeParameter('threadId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/threads/${id}`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'DELETE', endpoint);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/reference/rest/v1/users.threads/get\n\t\t\t\t\t\tconst id = this.getNodeParameter('threadId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/threads/${id}`;\n\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst onlyMessages = options.returnOnlyMessages || false;\n\t\t\t\t\t\tconst qs: IDataObject = {};\n\n\t\t\t\t\t\tconst simple = this.getNodeParameter('simple', i) as boolean;\n\n\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\tqs.format = 'metadata';\n\t\t\t\t\t\t\tqs.metadataHeaders = ['From', 'To', 'Cc', 'Bcc', 'Subject'];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.format = 'full';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', endpoint, {}, qs);\n\n\t\t\t\t\t\tif (onlyMessages) {\n\t\t\t\t\t\t\tresponseData = this.helpers.returnJsonArray(\n\t\t\t\t\t\t\t\tawait simplifyOutput.call(this, responseData.messages as IDataObject[]),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresponseData.messages = await simplifyOutput.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\tresponseData.messages as IDataObject[],\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tresponseData = [{ json: responseData }];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/reference/rest/v1/users.threads/list\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tconst filters = this.getNodeParameter('filters', i);\n\t\t\t\t\t\tconst qs: IDataObject = {};\n\t\t\t\t\t\tObject.assign(qs, prepareQuery.call(this, filters, i));\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'threads',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/gmail/v1/users/me/threads',\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.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.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'/gmail/v1/users/me/threads',\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\tresponseData = responseData.threads;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (responseData === undefined) {\n\t\t\t\t\t\t\tresponseData = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = this.helpers.returnJsonArray(responseData as IDataObject[]);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'reply') {\n\t\t\t\t\t\tconst messageIdGmail = this.getNodeParameter('messageId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tresponseData = await replyToEmail.call(this, messageIdGmail, options, i);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'trash') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/reference/rest/v1/users.threads/trash\n\t\t\t\t\t\tconst id = this.getNodeParameter('threadId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/threads/${id}/trash`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'untrash') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/reference/rest/v1/users.threads/untrash\n\t\t\t\t\t\tconst id = this.getNodeParameter('threadId', i);\n\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/threads/${id}/untrash`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'addLabels') {\n\t\t\t\t\t\tconst id = this.getNodeParameter('threadId', i);\n\t\t\t\t\t\tconst labelIds = this.getNodeParameter('labelIds', i) as string[];\n\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/threads/${id}/modify`;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\taddLabelIds: labelIds,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'removeLabels') {\n\t\t\t\t\t\tconst id = this.getNodeParameter('threadId', i);\n\t\t\t\t\t\tconst labelIds = this.getNodeParameter('labelIds', i) as string[];\n\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/threads/${id}/modify`;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\tremoveLabelIds: labelIds,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body);\n\t\t\t\t\t}\n\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{\n\t\t\t\t\t\titemData: { item: i },\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturnData.push(...executionData);\n\t\t\t} catch (error) {\n\t\t\t\terror.message = `${error.message} (item ${i})`;\n\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\treturnData.push({ json: { error: error.message }, pairedItem: { item: i } });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow new NodeOperationError(this.getNode(), error as Error, {\n\t\t\t\t\tdescription: error.description,\n\t\t\t\t\titemIndex: i,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\t['draft', 'message', 'thread'].includes(resource) &&\n\t\t\t['get', 'getAll'].includes(operation)\n\t\t) {\n\t\t\treturn [unescapeSnippets(returnData)];\n\t\t}\n\t\treturn [returnData];\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../../nodes/Google/Gmail/v2/GmailV2.node.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tINodeType,\n\tINodeTypeBaseDescription,\n\tINodeTypeDescription,\n} from 'n8n-workflow';\nimport { NodeConnectionTypes, NodeOperationError, SEND_AND_WAIT_OPERATION } from 'n8n-workflow';\n\nimport { draftFields, draftOperations } from './DraftDescription';\nimport { labelFields, labelOperations } from './LabelDescription';\nimport { getGmailAliases, getLabels, getThreadMessages } from './loadOptions';\nimport { messageFields, messageOperations } from './MessageDescription';\nimport { threadFields, threadOperations } from './ThreadDescription';\nimport { addThreadHeadersToEmail } from './utils/draft';\nimport { configureWaitTillDate } from '../../../../utils/sendAndWait/configureWaitTillDate.util';\nimport { sendAndWaitWebhooksDescription } from '../../../../utils/sendAndWait/descriptions';\nimport type { IEmail } from '../../../../utils/sendAndWait/interfaces';\nimport {\n\tcreateEmail,\n\tgetSendAndWaitProperties,\n\tsendAndWaitWebhook,\n} from '../../../../utils/sendAndWait/utils';\nimport {\n\tencodeEmail,\n\tgoogleApiRequest,\n\tgoogleApiRequestAllItems,\n\tparseRawEmail,\n\tprepareEmailAttachments,\n\tprepareEmailBody,\n\tprepareEmailsInput,\n\tprepareQuery,\n\treplyToEmail,\n\tsimplifyOutput,\n\tunescapeSnippets,\n} from '../GenericFunctions';\n\nconst versionDescription: INodeTypeDescription = {\n\tdisplayName: 'Gmail',\n\tname: 'gmail',\n\ticon: 'file:gmail.svg',\n\tgroup: ['transform'],\n\tversion: [2, 2.1],\n\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\tdescription: 'Consume the Gmail API',\n\tdefaults: {\n\t\tname: 'Gmail',\n\t},\n\tinputs: [NodeConnectionTypes.Main],\n\toutputs: [NodeConnectionTypes.Main],\n\tusableAsTool: true,\n\tcredentials: [\n\t\t{\n\t\t\tname: 'googleApi',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tauthentication: ['serviceAccount'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: 'gmailOAuth2',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tauthentication: ['oAuth2'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t],\n\twebhooks: sendAndWaitWebhooksDescription,\n\tproperties: [\n\t\t{\n\t\t\tdisplayName: 'Authentication',\n\t\t\tname: 'authentication',\n\t\t\ttype: 'options',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\t// eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased\n\t\t\t\t\tname: 'OAuth2 (recommended)',\n\t\t\t\t\tvalue: 'oAuth2',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Service Account',\n\t\t\t\t\tvalue: 'serviceAccount',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdefault: 'oAuth2',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Resource',\n\t\t\tname: 'resource',\n\t\t\ttype: 'options',\n\t\t\tnoDataExpression: true,\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: 'Message',\n\t\t\t\t\tvalue: 'message',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Label',\n\t\t\t\t\tvalue: 'label',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Draft',\n\t\t\t\t\tvalue: 'draft',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Thread',\n\t\t\t\t\tvalue: 'thread',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdefault: 'message',\n\t\t},\n\t\t//-------------------------------\n\t\t// Draft Operations\n\t\t//-------------------------------\n\t\t...draftOperations,\n\t\t...draftFields,\n\t\t//-------------------------------\n\t\t// Label Operations\n\t\t//-------------------------------\n\t\t...labelOperations,\n\t\t...labelFields,\n\t\t//-------------------------------\n\t\t// Message Operations\n\t\t//-------------------------------\n\t\t...messageOperations,\n\t\t...messageFields,\n\t\t...getSendAndWaitProperties([\n\t\t\t{\n\t\t\t\tdisplayName: 'To',\n\t\t\t\tname: 'sendTo',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\trequired: true,\n\t\t\t\tplaceholder: 'e.g. info@example.com',\n\t\t\t},\n\t\t]),\n\t\t//-------------------------------\n\t\t// Thread Operations\n\t\t//-------------------------------\n\t\t...threadOperations,\n\t\t...threadFields,\n\t\t//-------------------------------\n\t],\n};\n\nexport class GmailV2 implements INodeType {\n\tdescription: INodeTypeDescription;\n\n\tconstructor(baseDescription: INodeTypeBaseDescription) {\n\t\tthis.description = {\n\t\t\t...baseDescription,\n\t\t\t...versionDescription,\n\t\t};\n\t}\n\n\tmethods = {\n\t\tloadOptions: {\n\t\t\tgetLabels,\n\t\t\tgetThreadMessages,\n\t\t\tgetGmailAliases,\n\t\t},\n\t};\n\n\twebhook = sendAndWaitWebhook;\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst returnData: INodeExecutionData[] = [];\n\t\tconst resource = this.getNodeParameter('resource', 0);\n\t\tconst operation = this.getNodeParameter('operation', 0);\n\t\tconst nodeVersion = this.getNode().typeVersion;\n\t\tconst instanceId = this.getInstanceId();\n\n\t\tif (resource === 'message' && operation === SEND_AND_WAIT_OPERATION) {\n\t\t\tconst email: IEmail = createEmail(this);\n\n\t\t\tawait googleApiRequest.call(this, 'POST', '/gmail/v1/users/me/messages/send', {\n\t\t\t\traw: await encodeEmail(email),\n\t\t\t});\n\n\t\t\tconst waitTill = configureWaitTillDate(this);\n\n\t\t\tawait this.putExecutionToWait(waitTill);\n\t\t\treturn [this.getInputData()];\n\t\t}\n\n\t\tlet responseData;\n\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\ttry {\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\t// labels //\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\tif (resource === 'label') {\n\t\t\t\t\tif (operation === 'create') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/v1/reference/users/labels/create\n\t\t\t\t\t\tconst labelName = this.getNodeParameter('name', i) as string;\n\t\t\t\t\t\tconst labelListVisibility = this.getNodeParameter(\n\t\t\t\t\t\t\t'options.labelListVisibility',\n\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\t'labelShow',\n\t\t\t\t\t\t) as string;\n\t\t\t\t\t\tconst messageListVisibility = this.getNodeParameter(\n\t\t\t\t\t\t\t'options.messageListVisibility',\n\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\t'show',\n\t\t\t\t\t\t) as string;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\tlabelListVisibility,\n\t\t\t\t\t\t\tmessageListVisibility,\n\t\t\t\t\t\t\tname: labelName,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/gmail/v1/users/me/labels',\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\tif (operation === 'delete') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/v1/reference/users/labels/delete\n\t\t\t\t\t\tconst labelId = this.getNodeParameter('labelId', i) as string[];\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/labels/${labelId}`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'DELETE', endpoint);\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/v1/reference/users/labels/get\n\t\t\t\t\t\tconst labelId = this.getNodeParameter('labelId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/labels/${labelId}`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', endpoint);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', '/gmail/v1/users/me/labels');\n\n\t\t\t\t\t\tresponseData = this.helpers.returnJsonArray(responseData.labels as IDataObject[]);\n\n\t\t\t\t\t\tif (!returnAll) {\n\t\t\t\t\t\t\tconst limit = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = responseData.splice(0, limit);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\t// messages //\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\tif (resource === 'message') {\n\t\t\t\t\tif (operation === 'send') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/v1/reference/users/messages/send\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst sendTo = this.getNodeParameter('sendTo', i) as string;\n\t\t\t\t\t\tlet qs: IDataObject = {};\n\n\t\t\t\t\t\tconst to = prepareEmailsInput.call(this, sendTo, 'To', i);\n\t\t\t\t\t\tlet cc = '';\n\t\t\t\t\t\tlet bcc = '';\n\t\t\t\t\t\tlet replyTo = '';\n\n\t\t\t\t\t\tif (options.ccList) {\n\t\t\t\t\t\t\tcc = prepareEmailsInput.call(this, options.ccList as string, 'CC', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.bccList) {\n\t\t\t\t\t\t\tbcc = prepareEmailsInput.call(this, options.bccList as string, 'BCC', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.replyTo) {\n\t\t\t\t\t\t\treplyTo = prepareEmailsInput.call(this, options.replyTo as string, 'ReplyTo', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet attachments: IDataObject[] = [];\n\n\t\t\t\t\t\tif (options.attachmentsUi) {\n\t\t\t\t\t\t\tattachments = await prepareEmailAttachments.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\toptions.attachmentsUi as IDataObject,\n\t\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attachments.length) {\n\t\t\t\t\t\t\t\tqs = {\n\t\t\t\t\t\t\t\t\tuserId: 'me',\n\t\t\t\t\t\t\t\t\tuploadType: 'media',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet from = '';\n\t\t\t\t\t\tif (options.senderName) {\n\t\t\t\t\t\t\tconst { emailAddress } = await googleApiRequest.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'/gmail/v1/users/me/profile',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tfrom = `${options.senderName as string} <${emailAddress}>`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet appendAttribution = options.appendAttribution;\n\t\t\t\t\t\tif (appendAttribution === undefined) {\n\t\t\t\t\t\t\tappendAttribution = nodeVersion >= 2.1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst email: IEmail = {\n\t\t\t\t\t\t\tfrom,\n\t\t\t\t\t\t\tto,\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t\tbcc,\n\t\t\t\t\t\t\treplyTo,\n\t\t\t\t\t\t\tsubject: this.getNodeParameter('subject', i) as string,\n\t\t\t\t\t\t\t...prepareEmailBody.call(this, i, appendAttribution as boolean, instanceId),\n\t\t\t\t\t\t\tattachments,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst endpoint = '/gmail/v1/users/me/messages/send';\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\traw: await encodeEmail(email),\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body, qs);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'reply') {\n\t\t\t\t\t\tconst messageIdGmail = this.getNodeParameter('messageId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tresponseData = await replyToEmail.call(this, messageIdGmail, options, i);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/v1/reference/users/messages/get\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/messages/${id}`;\n\t\t\t\t\t\tconst qs: IDataObject = {};\n\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i, {});\n\t\t\t\t\t\tconst simple = this.getNodeParameter('simple', i) as boolean;\n\n\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\tqs.format = 'metadata';\n\t\t\t\t\t\t\tqs.metadataHeaders = ['From', 'To', 'Cc', 'Bcc', 'Subject'];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.format = 'raw';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', endpoint, {}, qs);\n\n\t\t\t\t\t\tlet nodeExecutionData: INodeExecutionData;\n\t\t\t\t\t\tif (!simple) {\n\t\t\t\t\t\t\tconst dataPropertyNameDownload =\n\t\t\t\t\t\t\t\t(options.dataPropertyAttachmentsPrefixName as string) || 'attachment_';\n\n\t\t\t\t\t\t\tnodeExecutionData = await parseRawEmail.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\tresponseData,\n\t\t\t\t\t\t\t\tdataPropertyNameDownload,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst [json, _] = await simplifyOutput.call(this, [responseData as IDataObject]);\n\t\t\t\t\t\t\tnodeExecutionData = { json };\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = [nodeExecutionData];\n\t\t\t\t\t}\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\tconst filters = this.getNodeParameter('filters', i, {});\n\t\t\t\t\t\tconst qs: IDataObject = {};\n\t\t\t\t\t\tObject.assign(qs, prepareQuery.call(this, filters, i), options, i);\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'messages',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/gmail/v1/users/me/messages',\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.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.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'/gmail/v1/users/me/messages',\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\tresponseData = responseData.messages;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (responseData === undefined) {\n\t\t\t\t\t\t\tresponseData = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst simple = this.getNodeParameter('simple', i) as boolean;\n\n\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\tqs.format = 'metadata';\n\t\t\t\t\t\t\tqs.metadataHeaders = ['From', 'To', 'Cc', 'Bcc', 'Subject'];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.format = 'raw';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (let index = 0; index < responseData.length; index++) {\n\t\t\t\t\t\t\tresponseData[index] = await googleApiRequest.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`/gmail/v1/users/me/messages/${responseData[index].id}`,\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\n\t\t\t\t\t\t\tif (!simple) {\n\t\t\t\t\t\t\t\tconst dataPropertyNameDownload =\n\t\t\t\t\t\t\t\t\t(options.dataPropertyAttachmentsPrefixName as string) || 'attachment_';\n\n\t\t\t\t\t\t\t\tresponseData[index] = await parseRawEmail.call(\n\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\tresponseData[index],\n\t\t\t\t\t\t\t\t\tdataPropertyNameDownload,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\tresponseData = this.helpers.returnJsonArray(\n\t\t\t\t\t\t\t\tawait simplifyOutput.call(this, responseData as IDataObject[]),\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\tif (operation === 'delete') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/v1/reference/users/messages/delete\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/messages/${id}`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'DELETE', endpoint);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'markAsRead') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/reference/rest/v1/users.messages/modify\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/messages/${id}/modify`;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\tremoveLabelIds: ['UNREAD'],\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (operation === 'markAsUnread') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/reference/rest/v1/users.messages/modify\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/messages/${id}/modify`;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\taddLabelIds: ['UNREAD'],\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (operation === 'addLabels') {\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst labelIds = this.getNodeParameter('labelIds', i) as string[];\n\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/messages/${id}/modify`;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\taddLabelIds: labelIds,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'removeLabels') {\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst labelIds = this.getNodeParameter('labelIds', i) as string[];\n\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/messages/${id}/modify`;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\tremoveLabelIds: labelIds,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\t// drafts //\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\tif (resource === 'draft') {\n\t\t\t\t\tif (operation === 'create') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/v1/reference/users/drafts/create\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tlet qs: IDataObject = {};\n\n\t\t\t\t\t\tlet to = '';\n\t\t\t\t\t\tlet cc = '';\n\t\t\t\t\t\tlet bcc = '';\n\t\t\t\t\t\tlet replyTo = '';\n\t\t\t\t\t\tlet fromAlias = '';\n\t\t\t\t\t\tlet threadId = null;\n\n\t\t\t\t\t\tif (options.sendTo) {\n\t\t\t\t\t\t\tto += prepareEmailsInput.call(this, options.sendTo as string, 'To', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.ccList) {\n\t\t\t\t\t\t\tcc = prepareEmailsInput.call(this, options.ccList as string, 'CC', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.bccList) {\n\t\t\t\t\t\t\tbcc = prepareEmailsInput.call(this, options.bccList as string, 'BCC', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.replyTo) {\n\t\t\t\t\t\t\treplyTo = prepareEmailsInput.call(this, options.replyTo as string, 'ReplyTo', i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.fromAlias) {\n\t\t\t\t\t\t\tfromAlias = options.fromAlias as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.threadId && typeof options.threadId === 'string') {\n\t\t\t\t\t\t\tthreadId = options.threadId;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet attachments: IDataObject[] = [];\n\t\t\t\t\t\tif (options.attachmentsUi) {\n\t\t\t\t\t\t\tattachments = await prepareEmailAttachments.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\toptions.attachmentsUi as IDataObject,\n\t\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attachments.length) {\n\t\t\t\t\t\t\t\tqs = {\n\t\t\t\t\t\t\t\t\tuserId: 'me',\n\t\t\t\t\t\t\t\t\tuploadType: 'media',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst email: IEmail = {\n\t\t\t\t\t\t\tfrom: fromAlias,\n\t\t\t\t\t\t\tto,\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t\tbcc,\n\t\t\t\t\t\t\treplyTo,\n\t\t\t\t\t\t\tsubject: this.getNodeParameter('subject', i) as string,\n\t\t\t\t\t\t\t...prepareEmailBody.call(this, i),\n\t\t\t\t\t\t\tattachments,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (threadId && options.replyTo) {\n\t\t\t\t\t\t\t// If a threadId is set, we need to add the Message-ID of the last message in the thread\n\t\t\t\t\t\t\t// to the email so that Gmail can correctly associate the draft with the thread\n\t\t\t\t\t\t\tawait addThreadHeadersToEmail.call(this, email, threadId);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\traw: await encodeEmail(email),\n\t\t\t\t\t\t\t\tthreadId: threadId || undefined,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/gmail/v1/users/me/drafts',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/v1/reference/users/drafts/get\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/drafts/${id}`;\n\t\t\t\t\t\tconst qs: IDataObject = {};\n\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tqs.format = 'raw';\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', endpoint, {}, qs);\n\n\t\t\t\t\t\tconst dataPropertyNameDownload =\n\t\t\t\t\t\t\t(options.dataPropertyAttachmentsPrefixName as string) || 'attachment_';\n\n\t\t\t\t\t\tconst nodeExecutionData = await parseRawEmail.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\tresponseData.message,\n\t\t\t\t\t\t\tdataPropertyNameDownload,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Add the draft-id\n\t\t\t\t\t\tnodeExecutionData.json.messageId = nodeExecutionData.json.id;\n\t\t\t\t\t\tnodeExecutionData.json.id = responseData.id;\n\n\t\t\t\t\t\tresponseData = [nodeExecutionData];\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\t\t// https://developers.google.com/gmail/api/v1/reference/users/drafts/delete\n\t\t\t\t\t\tconst id = this.getNodeParameter('messageId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/drafts/${id}`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'DELETE', endpoint);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\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\tconst qs: IDataObject = {};\n\t\t\t\t\t\tObject.assign(qs, options);\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'drafts',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/gmail/v1/users/me/drafts',\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.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.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'/gmail/v1/users/me/drafts',\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\tresponseData = responseData.drafts;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (responseData === undefined) {\n\t\t\t\t\t\t\tresponseData = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.format = 'raw';\n\n\t\t\t\t\t\tfor (let index = 0; index < responseData.length; index++) {\n\t\t\t\t\t\t\tresponseData[index] = await googleApiRequest.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`/gmail/v1/users/me/drafts/${responseData[index].id}`,\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\n\t\t\t\t\t\t\tconst dataPropertyNameDownload =\n\t\t\t\t\t\t\t\t(options.dataPropertyAttachmentsPrefixName as string) || 'attachment_';\n\t\t\t\t\t\t\tconst id = responseData[index].id;\n\t\t\t\t\t\t\tresponseData[index] = await parseRawEmail.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\tresponseData[index].message,\n\t\t\t\t\t\t\t\tdataPropertyNameDownload,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// Add the draft-id\n\t\t\t\t\t\t\tresponseData[index].json.messageId = responseData[index].json.id;\n\t\t\t\t\t\t\tresponseData[index].json.id = id;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\t// threads //\n\t\t\t\t//------------------------------------------------------------------//\n\t\t\t\tif (resource === 'thread') {\n\t\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/reference/rest/v1/users.threads/delete\n\t\t\t\t\t\tconst id = this.getNodeParameter('threadId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/threads/${id}`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'DELETE', endpoint);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/reference/rest/v1/users.threads/get\n\t\t\t\t\t\tconst id = this.getNodeParameter('threadId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/threads/${id}`;\n\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst onlyMessages = options.returnOnlyMessages || false;\n\t\t\t\t\t\tconst qs: IDataObject = {};\n\n\t\t\t\t\t\tconst simple = this.getNodeParameter('simple', i) as boolean;\n\n\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\tqs.format = 'metadata';\n\t\t\t\t\t\t\tqs.metadataHeaders = ['From', 'To', 'Cc', 'Bcc', 'Subject'];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.format = 'full';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', endpoint, {}, qs);\n\n\t\t\t\t\t\tif (onlyMessages) {\n\t\t\t\t\t\t\tresponseData = this.helpers.returnJsonArray(\n\t\t\t\t\t\t\t\tawait simplifyOutput.call(this, responseData.messages as IDataObject[]),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresponseData.messages = await simplifyOutput.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\tresponseData.messages as IDataObject[],\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tresponseData = [{ json: responseData }];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/reference/rest/v1/users.threads/list\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tconst filters = this.getNodeParameter('filters', i);\n\t\t\t\t\t\tconst qs: IDataObject = {};\n\t\t\t\t\t\tObject.assign(qs, prepareQuery.call(this, filters, i));\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'threads',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/gmail/v1/users/me/threads',\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.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.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'/gmail/v1/users/me/threads',\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\tresponseData = responseData.threads;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (responseData === undefined) {\n\t\t\t\t\t\t\tresponseData = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = this.helpers.returnJsonArray(responseData as IDataObject[]);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'reply') {\n\t\t\t\t\t\tconst messageIdGmail = this.getNodeParameter('messageId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tresponseData = await replyToEmail.call(this, messageIdGmail, options, i);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'trash') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/reference/rest/v1/users.threads/trash\n\t\t\t\t\t\tconst id = this.getNodeParameter('threadId', i);\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/threads/${id}/trash`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'untrash') {\n\t\t\t\t\t\t//https://developers.google.com/gmail/api/reference/rest/v1/users.threads/untrash\n\t\t\t\t\t\tconst id = this.getNodeParameter('threadId', i);\n\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/threads/${id}/untrash`;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'addLabels') {\n\t\t\t\t\t\tconst id = this.getNodeParameter('threadId', i);\n\t\t\t\t\t\tconst labelIds = this.getNodeParameter('labelIds', i) as string[];\n\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/threads/${id}/modify`;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\taddLabelIds: labelIds,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body);\n\t\t\t\t\t}\n\t\t\t\t\tif (operation === 'removeLabels') {\n\t\t\t\t\t\tconst id = this.getNodeParameter('threadId', i);\n\t\t\t\t\t\tconst labelIds = this.getNodeParameter('labelIds', i) as string[];\n\n\t\t\t\t\t\tconst endpoint = `/gmail/v1/users/me/threads/${id}/modify`;\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\tremoveLabelIds: labelIds,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'POST', endpoint, body);\n\t\t\t\t\t}\n\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{\n\t\t\t\t\t\titemData: { item: i },\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturnData.push(...executionData);\n\t\t\t} catch (error) {\n\t\t\t\terror.message = `${error.message} (item ${i})`;\n\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\treturnData.push({ json: { error: error.message }, pairedItem: { item: i } });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow new NodeOperationError(this.getNode(), error as Error, {\n\t\t\t\t\tdescription: error.description,\n\t\t\t\t\titemIndex: i,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\t['draft', 'message', 'thread'].includes(resource) &&\n\t\t\t['get', 'getAll'].includes(operation)\n\t\t) {\n\t\t\treturn [unescapeSnippets(returnData)];\n\t\t}\n\t\treturn [returnData];\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,0BAAiF;AAEjF,8BAA6C;AAC7C,8BAA6C;AAC7C,yBAA8D;AAC9D,gCAAiD;AACjD,+BAA+C;AAC/C,mBAAwC;AACxC,mCAAsC;AACtC,0BAA+C;AAE/C,mBAIO;AACP,8BAYO;AAEP,MAAM,qBAA2C;AAAA,EAChD,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO,CAAC,WAAW;AAAA,EACnB,SAAS,CAAC,GAAG,GAAG;AAAA,EAChB,UAAU;AAAA,EACV,aAAa;AAAA,EACb,UAAU;AAAA,IACT,MAAM;AAAA,EACP;AAAA,EACA,QAAQ,CAAC,wCAAoB,IAAI;AAAA,EACjC,SAAS,CAAC,wCAAoB,IAAI;AAAA,EAClC,cAAc;AAAA,EACd,aAAa;AAAA,IACZ;AAAA,MACC,MAAM;AAAA,MACN,UAAU;AAAA,MACV,gBAAgB;AAAA,QACf,MAAM;AAAA,UACL,gBAAgB,CAAC,gBAAgB;AAAA,QAClC;AAAA,MACD;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,UAAU;AAAA,MACV,gBAAgB;AAAA,QACf,MAAM;AAAA,UACL,gBAAgB,CAAC,QAAQ;AAAA,QAC1B;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,IACX;AAAA,MACC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,QACR;AAAA;AAAA,UAEC,MAAM;AAAA,UACN,OAAO;AAAA,QACR;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,OAAO;AAAA,QACR;AAAA,MACD;AAAA,MACA,SAAS;AAAA,IACV;AAAA,IACA;AAAA,MACC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,kBAAkB;AAAA,MAClB,SAAS;AAAA,QACR;AAAA,UACC,MAAM;AAAA,UACN,OAAO;AAAA,QACR;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,OAAO;AAAA,QACR;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,OAAO;AAAA,QACR;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,OAAO;AAAA,QACR;AAAA,MACD;AAAA,MACA,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA,IAIA,GAAG;AAAA,IACH,GAAG;AAAA;AAAA;AAAA;AAAA,IAIH,GAAG;AAAA,IACH,GAAG;AAAA;AAAA;AAAA;AAAA,IAIH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAG,uCAAyB;AAAA,MAC3B;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,QACV,aAAa;AAAA,MACd;AAAA,IACD,CAAC;AAAA;AAAA;AAAA;AAAA,IAID,GAAG;AAAA,IACH,GAAG;AAAA;AAAA,EAEJ;AACD;AAEO,MAAM,QAA6B;AAAA,EAGzC,YAAY,iBAA2C;AAOvD,mBAAU;AAAA,MACT,aAAa;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAEA,mBAAU;AAdT,SAAK,cAAc;AAAA,MAClB,GAAG;AAAA,MACH,GAAG;AAAA,IACJ;AAAA,EACD;AAAA,EAYA,MAAM,UAAkE;AACvE,UAAM,QAAQ,KAAK,aAAa;AAChC,UAAM,aAAmC,CAAC;AAC1C,UAAM,WAAW,KAAK,iBAAiB,YAAY,CAAC;AACpD,UAAM,YAAY,KAAK,iBAAiB,aAAa,CAAC;AACtD,UAAM,cAAc,KAAK,QAAQ,EAAE;AACnC,UAAM,aAAa,KAAK,cAAc;AAEtC,QAAI,aAAa,aAAa,cAAc,6CAAyB;AACpE,YAAM,YAAgB,0BAAY,IAAI;AAEtC,YAAM,yCAAiB,KAAK,MAAM,QAAQ,oCAAoC;AAAA,QAC7E,KAAK,UAAM,qCAAY,KAAK;AAAA,MAC7B,CAAC;AAED,YAAM,eAAW,oDAAsB,IAAI;AAE3C,YAAM,KAAK,mBAAmB,QAAQ;AACtC,aAAO,CAAC,KAAK,aAAa,CAAC;AAAA,IAC5B;AAEA,QAAI;AAEJ,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,UAAI;AAIH,YAAI,aAAa,SAAS;AACzB,cAAI,cAAc,UAAU;AAE3B,kBAAM,YAAY,KAAK,iBAAiB,QAAQ,CAAC;AACjD,kBAAM,sBAAsB,KAAK;AAAA,cAChC;AAAA,cACA;AAAA,cACA;AAAA,YACD;AACA,kBAAM,wBAAwB,KAAK;AAAA,cAClC;AAAA,cACA;AAAA,cACA;AAAA,YACD;AAEA,kBAAM,OAAO;AAAA,cACZ;AAAA,cACA;AAAA,cACA,MAAM;AAAA,YACP;AAEA,2BAAe,MAAM,yCAAiB;AAAA,cACrC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACD;AAAA,UACD;AACA,cAAI,cAAc,UAAU;AAE3B,kBAAM,UAAU,KAAK,iBAAiB,WAAW,CAAC;AAClD,kBAAM,WAAW,6BAA6B,OAAO;AAErD,2BAAe,MAAM,yCAAiB,KAAK,MAAM,UAAU,QAAQ;AACnE,2BAAe,EAAE,SAAS,KAAK;AAAA,UAChC;AACA,cAAI,cAAc,OAAO;AAExB,kBAAM,UAAU,KAAK,iBAAiB,WAAW,CAAC;AAClD,kBAAM,WAAW,6BAA6B,OAAO;AAErD,2BAAe,MAAM,yCAAiB,KAAK,MAAM,OAAO,QAAQ;AAAA,UACjE;AACA,cAAI,cAAc,UAAU;AAC3B,kBAAM,YAAY,KAAK,iBAAiB,aAAa,CAAC;AAEtD,2BAAe,MAAM,yCAAiB,KAAK,MAAM,OAAO,2BAA2B;AAEnF,2BAAe,KAAK,QAAQ,gBAAgB,aAAa,MAAuB;AAEhF,gBAAI,CAAC,WAAW;AACf,oBAAM,QAAQ,KAAK,iBAAiB,SAAS,CAAC;AAC9C,6BAAe,aAAa,OAAO,GAAG,KAAK;AAAA,YAC5C;AAAA,UACD;AAAA,QACD;AAIA,YAAI,aAAa,WAAW;AAC3B,cAAI,cAAc,QAAQ;AAEzB,kBAAM,UAAU,KAAK,iBAAiB,WAAW,CAAC;AAClD,kBAAM,SAAS,KAAK,iBAAiB,UAAU,CAAC;AAChD,gBAAI,KAAkB,CAAC;AAEvB,kBAAM,KAAK,2CAAmB,KAAK,MAAM,QAAQ,MAAM,CAAC;AACxD,gBAAI,KAAK;AACT,gBAAI,MAAM;AACV,gBAAI,UAAU;AAEd,gBAAI,QAAQ,QAAQ;AACnB,mBAAK,2CAAmB,KAAK,MAAM,QAAQ,QAAkB,MAAM,CAAC;AAAA,YACrE;AAEA,gBAAI,QAAQ,SAAS;AACpB,oBAAM,2CAAmB,KAAK,MAAM,QAAQ,SAAmB,OAAO,CAAC;AAAA,YACxE;AAEA,gBAAI,QAAQ,SAAS;AACpB,wBAAU,2CAAmB,KAAK,MAAM,QAAQ,SAAmB,WAAW,CAAC;AAAA,YAChF;AAEA,gBAAI,cAA6B,CAAC;AAElC,gBAAI,QAAQ,eAAe;AAC1B,4BAAc,MAAM,gDAAwB;AAAA,gBAC3C;AAAA,gBACA,QAAQ;AAAA,gBACR;AAAA,cACD;AACA,kBAAI,YAAY,QAAQ;AACvB,qBAAK;AAAA,kBACJ,QAAQ;AAAA,kBACR,YAAY;AAAA,gBACb;AAAA,cACD;AAAA,YACD;AAEA,gBAAI,OAAO;AACX,gBAAI,QAAQ,YAAY;AACvB,oBAAM,EAAE,aAAa,IAAI,MAAM,yCAAiB;AAAA,gBAC/C;AAAA,gBACA;AAAA,gBACA;AAAA,cACD;AACA,qBAAO,GAAG,QAAQ,UAAoB,KAAK,YAAY;AAAA,YACxD;AAEA,gBAAI,oBAAoB,QAAQ;AAChC,gBAAI,sBAAsB,QAAW;AACpC,kCAAoB,eAAe;AAAA,YACpC;AAEA,kBAAM,QAAgB;AAAA,cACrB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS,KAAK,iBAAiB,WAAW,CAAC;AAAA,cAC3C,GAAG,yCAAiB,KAAK,MAAM,GAAG,mBAA8B,UAAU;AAAA,cAC1E;AAAA,YACD;AAEA,kBAAM,WAAW;AAEjB,kBAAM,OAAO;AAAA,cACZ,KAAK,UAAM,qCAAY,KAAK;AAAA,YAC7B;AAEA,2BAAe,MAAM,yCAAiB,KAAK,MAAM,QAAQ,UAAU,MAAM,EAAE;AAAA,UAC5E;AACA,cAAI,cAAc,SAAS;AAC1B,kBAAM,iBAAiB,KAAK,iBAAiB,aAAa,CAAC;AAC3D,kBAAM,UAAU,KAAK,iBAAiB,WAAW,CAAC;AAElD,2BAAe,MAAM,qCAAa,KAAK,MAAM,gBAAgB,SAAS,CAAC;AAAA,UACxE;AACA,cAAI,cAAc,OAAO;AAExB,kBAAM,KAAK,KAAK,iBAAiB,aAAa,CAAC;AAC/C,kBAAM,WAAW,+BAA+B,EAAE;AAClD,kBAAM,KAAkB,CAAC;AAEzB,kBAAM,UAAU,KAAK,iBAAiB,WAAW,GAAG,CAAC,CAAC;AACtD,kBAAM,SAAS,KAAK,iBAAiB,UAAU,CAAC;AAEhD,gBAAI,QAAQ;AACX,iBAAG,SAAS;AACZ,iBAAG,kBAAkB,CAAC,QAAQ,MAAM,MAAM,OAAO,SAAS;AAAA,YAC3D,OAAO;AACN,iBAAG,SAAS;AAAA,YACb;AAEA,2BAAe,MAAM,yCAAiB,KAAK,MAAM,OAAO,UAAU,CAAC,GAAG,EAAE;AAExE,gBAAI;AACJ,gBAAI,CAAC,QAAQ;AACZ,oBAAM,2BACJ,QAAQ,qCAAgD;AAE1D,kCAAoB,MAAM,sCAAc;AAAA,gBACvC;AAAA,gBACA;AAAA,gBACA;AAAA,cACD;AAAA,YACD,OAAO;AACN,oBAAM,CAAC,MAAM,CAAC,IAAI,MAAM,uCAAe,KAAK,MAAM,CAAC,YAA2B,CAAC;AAC/E,kCAAoB,EAAE,KAAK;AAAA,YAC5B;AAEA,2BAAe,CAAC,iBAAiB;AAAA,UAClC;AACA,cAAI,cAAc,UAAU;AAC3B,kBAAM,YAAY,KAAK,iBAAiB,aAAa,CAAC;AACtD,kBAAM,UAAU,KAAK,iBAAiB,WAAW,GAAG,CAAC,CAAC;AACtD,kBAAM,UAAU,KAAK,iBAAiB,WAAW,GAAG,CAAC,CAAC;AACtD,kBAAM,KAAkB,CAAC;AACzB,mBAAO,OAAO,IAAI,qCAAa,KAAK,MAAM,SAAS,CAAC,GAAG,SAAS,CAAC;AAEjE,gBAAI,WAAW;AACd,6BAAe,MAAM,iDAAyB;AAAA,gBAC7C;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,CAAC;AAAA,gBACD;AAAA,cACD;AAAA,YACD,OAAO;AACN,iBAAG,aAAa,KAAK,iBAAiB,SAAS,CAAC;AAChD,6BAAe,MAAM,yCAAiB;AAAA,gBACrC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,CAAC;AAAA,gBACD;AAAA,cACD;AACA,6BAAe,aAAa;AAAA,YAC7B;AAEA,gBAAI,iBAAiB,QAAW;AAC/B,6BAAe,CAAC;AAAA,YACjB;AAEA,kBAAM,SAAS,KAAK,iBAAiB,UAAU,CAAC;AAEhD,gBAAI,QAAQ;AACX,iBAAG,SAAS;AACZ,iBAAG,kBAAkB,CAAC,QAAQ,MAAM,MAAM,OAAO,SAAS;AAAA,YAC3D,OAAO;AACN,iBAAG,SAAS;AAAA,YACb;AAEA,qBAAS,QAAQ,GAAG,QAAQ,aAAa,QAAQ,SAAS;AACzD,2BAAa,KAAK,IAAI,MAAM,yCAAiB;AAAA,gBAC5C;AAAA,gBACA;AAAA,gBACA,+BAA+B,aAAa,KAAK,EAAE,EAAE;AAAA,gBACrD,CAAC;AAAA,gBACD;AAAA,cACD;AAEA,kBAAI,CAAC,QAAQ;AACZ,sBAAM,2BACJ,QAAQ,qCAAgD;AAE1D,6BAAa,KAAK,IAAI,MAAM,sCAAc;AAAA,kBACzC;AAAA,kBACA,aAAa,KAAK;AAAA,kBAClB;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAEA,gBAAI,QAAQ;AACX,6BAAe,KAAK,QAAQ;AAAA,gBAC3B,MAAM,uCAAe,KAAK,MAAM,YAA6B;AAAA,cAC9D;AAAA,YACD;AAAA,UACD;AACA,cAAI,cAAc,UAAU;AAE3B,kBAAM,KAAK,KAAK,iBAAiB,aAAa,CAAC;AAC/C,kBAAM,WAAW,+BAA+B,EAAE;AAElD,2BAAe,MAAM,yCAAiB,KAAK,MAAM,UAAU,QAAQ;AAEnE,2BAAe,EAAE,SAAS,KAAK;AAAA,UAChC;AACA,cAAI,cAAc,cAAc;AAE/B,kBAAM,KAAK,KAAK,iBAAiB,aAAa,CAAC;AAC/C,kBAAM,WAAW,+BAA+B,EAAE;AAElD,kBAAM,OAAO;AAAA,cACZ,gBAAgB,CAAC,QAAQ;AAAA,YAC1B;AAEA,2BAAe,MAAM,yCAAiB,KAAK,MAAM,QAAQ,UAAU,IAAI;AAAA,UACxE;AAEA,cAAI,cAAc,gBAAgB;AAEjC,kBAAM,KAAK,KAAK,iBAAiB,aAAa,CAAC;AAC/C,kBAAM,WAAW,+BAA+B,EAAE;AAElD,kBAAM,OAAO;AAAA,cACZ,aAAa,CAAC,QAAQ;AAAA,YACvB;AAEA,2BAAe,MAAM,yCAAiB,KAAK,MAAM,QAAQ,UAAU,IAAI;AAAA,UACxE;AAEA,cAAI,cAAc,aAAa;AAC9B,kBAAM,KAAK,KAAK,iBAAiB,aAAa,CAAC;AAC/C,kBAAM,WAAW,KAAK,iBAAiB,YAAY,CAAC;AAEpD,kBAAM,WAAW,+BAA+B,EAAE;AAElD,kBAAM,OAAO;AAAA,cACZ,aAAa;AAAA,YACd;AAEA,2BAAe,MAAM,yCAAiB,KAAK,MAAM,QAAQ,UAAU,IAAI;AAAA,UACxE;AACA,cAAI,cAAc,gBAAgB;AACjC,kBAAM,KAAK,KAAK,iBAAiB,aAAa,CAAC;AAC/C,kBAAM,WAAW,KAAK,iBAAiB,YAAY,CAAC;AAEpD,kBAAM,WAAW,+BAA+B,EAAE;AAElD,kBAAM,OAAO;AAAA,cACZ,gBAAgB;AAAA,YACjB;AACA,2BAAe,MAAM,yCAAiB,KAAK,MAAM,QAAQ,UAAU,IAAI;AAAA,UACxE;AAAA,QACD;AAIA,YAAI,aAAa,SAAS;AACzB,cAAI,cAAc,UAAU;AAE3B,kBAAM,UAAU,KAAK,iBAAiB,WAAW,CAAC;AAClD,gBAAI,KAAkB,CAAC;AAEvB,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,MAAM;AACV,gBAAI,UAAU;AACd,gBAAI,YAAY;AAChB,gBAAI,WAAW;AAEf,gBAAI,QAAQ,QAAQ;AACnB,oBAAM,2CAAmB,KAAK,MAAM,QAAQ,QAAkB,MAAM,CAAC;AAAA,YACtE;AAEA,gBAAI,QAAQ,QAAQ;AACnB,mBAAK,2CAAmB,KAAK,MAAM,QAAQ,QAAkB,MAAM,CAAC;AAAA,YACrE;AAEA,gBAAI,QAAQ,SAAS;AACpB,oBAAM,2CAAmB,KAAK,MAAM,QAAQ,SAAmB,OAAO,CAAC;AAAA,YACxE;AAEA,gBAAI,QAAQ,SAAS;AACpB,wBAAU,2CAAmB,KAAK,MAAM,QAAQ,SAAmB,WAAW,CAAC;AAAA,YAChF;AAEA,gBAAI,QAAQ,WAAW;AACtB,0BAAY,QAAQ;AAAA,YACrB;AAEA,gBAAI,QAAQ,YAAY,OAAO,QAAQ,aAAa,UAAU;AAC7D,yBAAW,QAAQ;AAAA,YACpB;AAEA,gBAAI,cAA6B,CAAC;AAClC,gBAAI,QAAQ,eAAe;AAC1B,4BAAc,MAAM,gDAAwB;AAAA,gBAC3C;AAAA,gBACA,QAAQ;AAAA,gBACR;AAAA,cACD;AACA,kBAAI,YAAY,QAAQ;AACvB,qBAAK;AAAA,kBACJ,QAAQ;AAAA,kBACR,YAAY;AAAA,gBACb;AAAA,cACD;AAAA,YACD;AAEA,kBAAM,QAAgB;AAAA,cACrB,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS,KAAK,iBAAiB,WAAW,CAAC;AAAA,cAC3C,GAAG,yCAAiB,KAAK,MAAM,CAAC;AAAA,cAChC;AAAA,YACD;AAEA,gBAAI,YAAY,QAAQ,SAAS;AAGhC,oBAAM,qCAAwB,KAAK,MAAM,OAAO,QAAQ;AAAA,YACzD;AAEA,kBAAM,OAAO;AAAA,cACZ,SAAS;AAAA,gBACR,KAAK,UAAM,qCAAY,KAAK;AAAA,gBAC5B,UAAU,YAAY;AAAA,cACvB;AAAA,YACD;AAEA,2BAAe,MAAM,yCAAiB;AAAA,cACrC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACD;AAAA,UACD;AACA,cAAI,cAAc,OAAO;AAExB,kBAAM,KAAK,KAAK,iBAAiB,aAAa,CAAC;AAC/C,kBAAM,WAAW,6BAA6B,EAAE;AAChD,kBAAM,KAAkB,CAAC;AAEzB,kBAAM,UAAU,KAAK,iBAAiB,WAAW,CAAC;AAClD,eAAG,SAAS;AAEZ,2BAAe,MAAM,yCAAiB,KAAK,MAAM,OAAO,UAAU,CAAC,GAAG,EAAE;AAExE,kBAAM,2BACJ,QAAQ,qCAAgD;AAE1D,kBAAM,oBAAoB,MAAM,sCAAc;AAAA,cAC7C;AAAA,cACA,aAAa;AAAA,cACb;AAAA,YACD;AAGA,8BAAkB,KAAK,YAAY,kBAAkB,KAAK;AAC1D,8BAAkB,KAAK,KAAK,aAAa;AAEzC,2BAAe,CAAC,iBAAiB;AAAA,UAClC;AACA,cAAI,cAAc,UAAU;AAE3B,kBAAM,KAAK,KAAK,iBAAiB,aAAa,CAAC;AAC/C,kBAAM,WAAW,6BAA6B,EAAE;AAEhD,2BAAe,MAAM,yCAAiB,KAAK,MAAM,UAAU,QAAQ;AAEnE,2BAAe,EAAE,SAAS,KAAK;AAAA,UAChC;AACA,cAAI,cAAc,UAAU;AAC3B,kBAAM,YAAY,KAAK,iBAAiB,aAAa,CAAC;AACtD,kBAAM,UAAU,KAAK,iBAAiB,WAAW,CAAC;AAClD,kBAAM,KAAkB,CAAC;AACzB,mBAAO,OAAO,IAAI,OAAO;AAEzB,gBAAI,WAAW;AACd,6BAAe,MAAM,iDAAyB;AAAA,gBAC7C;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,CAAC;AAAA,gBACD;AAAA,cACD;AAAA,YACD,OAAO;AACN,iBAAG,aAAa,KAAK,iBAAiB,SAAS,CAAC;AAChD,6BAAe,MAAM,yCAAiB;AAAA,gBACrC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,CAAC;AAAA,gBACD;AAAA,cACD;AACA,6BAAe,aAAa;AAAA,YAC7B;AAEA,gBAAI,iBAAiB,QAAW;AAC/B,6BAAe,CAAC;AAAA,YACjB;AAEA,eAAG,SAAS;AAEZ,qBAAS,QAAQ,GAAG,QAAQ,aAAa,QAAQ,SAAS;AACzD,2BAAa,KAAK,IAAI,MAAM,yCAAiB;AAAA,gBAC5C;AAAA,gBACA;AAAA,gBACA,6BAA6B,aAAa,KAAK,EAAE,EAAE;AAAA,gBACnD,CAAC;AAAA,gBACD;AAAA,cACD;AAEA,oBAAM,2BACJ,QAAQ,qCAAgD;AAC1D,oBAAM,KAAK,aAAa,KAAK,EAAE;AAC/B,2BAAa,KAAK,IAAI,MAAM,sCAAc;AAAA,gBACzC;AAAA,gBACA,aAAa,KAAK,EAAE;AAAA,gBACpB;AAAA,cACD;AAGA,2BAAa,KAAK,EAAE,KAAK,YAAY,aAAa,KAAK,EAAE,KAAK;AAC9D,2BAAa,KAAK,EAAE,KAAK,KAAK;AAAA,YAC/B;AAAA,UACD;AAAA,QACD;AAIA,YAAI,aAAa,UAAU;AAC1B,cAAI,cAAc,UAAU;AAE3B,kBAAM,KAAK,KAAK,iBAAiB,YAAY,CAAC;AAC9C,kBAAM,WAAW,8BAA8B,EAAE;AAEjD,2BAAe,MAAM,yCAAiB,KAAK,MAAM,UAAU,QAAQ;AAEnE,2BAAe,EAAE,SAAS,KAAK;AAAA,UAChC;AACA,cAAI,cAAc,OAAO;AAExB,kBAAM,KAAK,KAAK,iBAAiB,YAAY,CAAC;AAC9C,kBAAM,WAAW,8BAA8B,EAAE;AAEjD,kBAAM,UAAU,KAAK,iBAAiB,WAAW,CAAC;AAClD,kBAAM,eAAe,QAAQ,sBAAsB;AACnD,kBAAM,KAAkB,CAAC;AAEzB,kBAAM,SAAS,KAAK,iBAAiB,UAAU,CAAC;AAEhD,gBAAI,QAAQ;AACX,iBAAG,SAAS;AACZ,iBAAG,kBAAkB,CAAC,QAAQ,MAAM,MAAM,OAAO,SAAS;AAAA,YAC3D,OAAO;AACN,iBAAG,SAAS;AAAA,YACb;AAEA,2BAAe,MAAM,yCAAiB,KAAK,MAAM,OAAO,UAAU,CAAC,GAAG,EAAE;AAExE,gBAAI,cAAc;AACjB,6BAAe,KAAK,QAAQ;AAAA,gBAC3B,MAAM,uCAAe,KAAK,MAAM,aAAa,QAAyB;AAAA,cACvE;AAAA,YACD,OAAO;AACN,2BAAa,WAAW,MAAM,uCAAe;AAAA,gBAC5C;AAAA,gBACA,aAAa;AAAA,cACd;AACA,6BAAe,CAAC,EAAE,MAAM,aAAa,CAAC;AAAA,YACvC;AAAA,UACD;AACA,cAAI,cAAc,UAAU;AAE3B,kBAAM,YAAY,KAAK,iBAAiB,aAAa,CAAC;AACtD,kBAAM,UAAU,KAAK,iBAAiB,WAAW,CAAC;AAClD,kBAAM,KAAkB,CAAC;AACzB,mBAAO,OAAO,IAAI,qCAAa,KAAK,MAAM,SAAS,CAAC,CAAC;AAErD,gBAAI,WAAW;AACd,6BAAe,MAAM,iDAAyB;AAAA,gBAC7C;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,CAAC;AAAA,gBACD;AAAA,cACD;AAAA,YACD,OAAO;AACN,iBAAG,aAAa,KAAK,iBAAiB,SAAS,CAAC;AAChD,6BAAe,MAAM,yCAAiB;AAAA,gBACrC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,CAAC;AAAA,gBACD;AAAA,cACD;AACA,6BAAe,aAAa;AAAA,YAC7B;AAEA,gBAAI,iBAAiB,QAAW;AAC/B,6BAAe,CAAC;AAAA,YACjB;AAEA,2BAAe,KAAK,QAAQ,gBAAgB,YAA6B;AAAA,UAC1E;AACA,cAAI,cAAc,SAAS;AAC1B,kBAAM,iBAAiB,KAAK,iBAAiB,aAAa,CAAC;AAC3D,kBAAM,UAAU,KAAK,iBAAiB,WAAW,CAAC;AAElD,2BAAe,MAAM,qCAAa,KAAK,MAAM,gBAAgB,SAAS,CAAC;AAAA,UACxE;AACA,cAAI,cAAc,SAAS;AAE1B,kBAAM,KAAK,KAAK,iBAAiB,YAAY,CAAC;AAC9C,kBAAM,WAAW,8BAA8B,EAAE;AAEjD,2BAAe,MAAM,yCAAiB,KAAK,MAAM,QAAQ,QAAQ;AAAA,UAClE;AACA,cAAI,cAAc,WAAW;AAE5B,kBAAM,KAAK,KAAK,iBAAiB,YAAY,CAAC;AAE9C,kBAAM,WAAW,8BAA8B,EAAE;AAEjD,2BAAe,MAAM,yCAAiB,KAAK,MAAM,QAAQ,QAAQ;AAAA,UAClE;AACA,cAAI,cAAc,aAAa;AAC9B,kBAAM,KAAK,KAAK,iBAAiB,YAAY,CAAC;AAC9C,kBAAM,WAAW,KAAK,iBAAiB,YAAY,CAAC;AAEpD,kBAAM,WAAW,8BAA8B,EAAE;AAEjD,kBAAM,OAAO;AAAA,cACZ,aAAa;AAAA,YACd;AAEA,2BAAe,MAAM,yCAAiB,KAAK,MAAM,QAAQ,UAAU,IAAI;AAAA,UACxE;AACA,cAAI,cAAc,gBAAgB;AACjC,kBAAM,KAAK,KAAK,iBAAiB,YAAY,CAAC;AAC9C,kBAAM,WAAW,KAAK,iBAAiB,YAAY,CAAC;AAEpD,kBAAM,WAAW,8BAA8B,EAAE;AAEjD,kBAAM,OAAO;AAAA,cACZ,gBAAgB;AAAA,YACjB;AACA,2BAAe,MAAM,yCAAiB,KAAK,MAAM,QAAQ,UAAU,IAAI;AAAA,UACxE;AAAA,QACD;AAGA,cAAM,gBAAgB,KAAK,QAAQ;AAAA,UAClC,KAAK,QAAQ,gBAAgB,YAA6B;AAAA,UAC1D;AAAA,YACC,UAAU,EAAE,MAAM,EAAE;AAAA,UACrB;AAAA,QACD;AACA,mBAAW,KAAK,GAAG,aAAa;AAAA,MACjC,SAAS,OAAO;AACf,cAAM,UAAU,GAAG,MAAM,OAAO,UAAU,CAAC;AAC3C,YAAI,KAAK,eAAe,GAAG;AAC1B,qBAAW,KAAK,EAAE,MAAM,EAAE,OAAO,MAAM,QAAQ,GAAG,YAAY,EAAE,MAAM,EAAE,EAAE,CAAC;AAC3E;AAAA,QACD;AACA,cAAM,IAAI,uCAAmB,KAAK,QAAQ,GAAG,OAAgB;AAAA,UAC5D,aAAa,MAAM;AAAA,UACnB,WAAW;AAAA,QACZ,CAAC;AAAA,MACF;AAAA,IACD;AACA,QACC,CAAC,SAAS,WAAW,QAAQ,EAAE,SAAS,QAAQ,KAChD,CAAC,OAAO,QAAQ,EAAE,SAAS,SAAS,GACnC;AACD,aAAO,KAAC,0CAAiB,UAAU,CAAC;AAAA,IACrC;AACA,WAAO,CAAC,UAAU;AAAA,EACnB;AACD;","names":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var draft_exports = {};
|
|
20
|
+
__export(draft_exports, {
|
|
21
|
+
addThreadHeadersToEmail: () => addThreadHeadersToEmail
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(draft_exports);
|
|
24
|
+
var import_GenericFunctions = require("../../GenericFunctions");
|
|
25
|
+
async function addThreadHeadersToEmail(email, threadId) {
|
|
26
|
+
const thread = await import_GenericFunctions.googleApiRequest.call(
|
|
27
|
+
this,
|
|
28
|
+
"GET",
|
|
29
|
+
`/gmail/v1/users/me/threads/${threadId}`,
|
|
30
|
+
{},
|
|
31
|
+
{ format: "metadata", metadataHeaders: ["Message-ID"] }
|
|
32
|
+
);
|
|
33
|
+
if (thread?.messages) {
|
|
34
|
+
const lastMessage = thread.messages.length - 1;
|
|
35
|
+
const messageId = thread.messages[lastMessage].payload.headers[0].value;
|
|
36
|
+
email.inReplyTo = messageId;
|
|
37
|
+
email.reference = messageId;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
41
|
+
0 && (module.exports = {
|
|
42
|
+
addThreadHeadersToEmail
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=draft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../nodes/Google/Gmail/v2/utils/draft.ts"],"sourcesContent":["import type { IExecuteFunctions } from 'n8n-workflow';\n\nimport type { IEmail } from '@utils/sendAndWait/interfaces';\n\nimport { googleApiRequest } from '../../GenericFunctions';\n\n/**\n * Adds inReplyTo and reference headers to the email if threadId is provided.\n */\nexport async function addThreadHeadersToEmail(\n\tthis: IExecuteFunctions,\n\temail: IEmail,\n\tthreadId: string,\n): Promise<void> {\n\tconst thread = await googleApiRequest.call(\n\t\tthis,\n\t\t'GET',\n\t\t`/gmail/v1/users/me/threads/${threadId}`,\n\t\t{},\n\t\t{ format: 'metadata', metadataHeaders: ['Message-ID'] },\n\t);\n\n\tif (thread?.messages) {\n\t\tconst lastMessage = thread.messages.length - 1;\n\t\tconst messageId: string = thread.messages[lastMessage].payload.headers[0].value;\n\n\t\temail.inReplyTo = messageId;\n\t\temail.reference = messageId;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,8BAAiC;AAKjC,eAAsB,wBAErB,OACA,UACgB;AAChB,QAAM,SAAS,MAAM,yCAAiB;AAAA,IACrC;AAAA,IACA;AAAA,IACA,8BAA8B,QAAQ;AAAA,IACtC,CAAC;AAAA,IACD,EAAE,QAAQ,YAAY,iBAAiB,CAAC,YAAY,EAAE;AAAA,EACvD;AAEA,MAAI,QAAQ,UAAU;AACrB,UAAM,cAAc,OAAO,SAAS,SAAS;AAC7C,UAAM,YAAoB,OAAO,SAAS,WAAW,EAAE,QAAQ,QAAQ,CAAC,EAAE;AAE1E,UAAM,YAAY;AAClB,UAAM,YAAY;AAAA,EACnB;AACD;","names":[]}
|
|
@@ -35,6 +35,8 @@ var import_set = __toESM(require("lodash/set"));
|
|
|
35
35
|
var import_n8n_workflow = require("n8n-workflow");
|
|
36
36
|
var import_utilities = require("../../../utils/utilities");
|
|
37
37
|
var import_Description = require("./Description");
|
|
38
|
+
var import_binaryData = require("./utils/binaryData");
|
|
39
|
+
var import_parse = require("./utils/parse");
|
|
38
40
|
var import_GenericFunctions = require("../GenericFunctions");
|
|
39
41
|
var import_optimizeResponse = require("../shared/optimizeResponse");
|
|
40
42
|
function toText(data) {
|
|
@@ -106,6 +108,7 @@ class HttpRequestV3 {
|
|
|
106
108
|
const requestPromises = [];
|
|
107
109
|
let fullResponse = false;
|
|
108
110
|
let autoDetectResponseFormat = false;
|
|
111
|
+
let responseFileName;
|
|
109
112
|
const pagination = this.getNodeParameter("options.pagination.pagination", 0, null, {
|
|
110
113
|
rawExpressions: true
|
|
111
114
|
});
|
|
@@ -183,6 +186,7 @@ class HttpRequestV3 {
|
|
|
183
186
|
response,
|
|
184
187
|
lowercaseHeaders
|
|
185
188
|
} = this.getNodeParameter("options", itemIndex, {});
|
|
189
|
+
responseFileName = response?.response?.outputPropertyName;
|
|
186
190
|
const url = this.getNodeParameter("url", itemIndex);
|
|
187
191
|
const responseFormat = response?.response?.responseFormat || "autodetect";
|
|
188
192
|
fullResponse = response?.response?.fullResponse || false;
|
|
@@ -725,11 +729,13 @@ class HttpRequestV3 {
|
|
|
725
729
|
const preparedBinaryData = await this.helpers.prepareBinaryData(
|
|
726
730
|
binaryData,
|
|
727
731
|
void 0,
|
|
728
|
-
responseContentType
|
|
732
|
+
(0, import_parse.mimeTypeFromResponse)(responseContentType)
|
|
733
|
+
);
|
|
734
|
+
preparedBinaryData.fileName = (0, import_binaryData.setFilename)(
|
|
735
|
+
preparedBinaryData,
|
|
736
|
+
requestOptions,
|
|
737
|
+
responseFileName
|
|
729
738
|
);
|
|
730
|
-
if (!preparedBinaryData.fileName && preparedBinaryData.fileExtension && typeof requestOptions.uri === "string" && requestOptions.uri.endsWith(preparedBinaryData.fileExtension)) {
|
|
731
|
-
preparedBinaryData.fileName = requestOptions.uri.split("/").pop();
|
|
732
|
-
}
|
|
733
739
|
newItem.binary[outputPropertyName] = preparedBinaryData;
|
|
734
740
|
returnItems.push(newItem);
|
|
735
741
|
} else if (responseFormat === "text") {
|