n8n-nodes-base 1.96.0 → 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.
Files changed (34) hide show
  1. package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js +18 -13
  2. package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js.map +1 -1
  3. package/dist/nodes/Google/Gmail/GenericFunctions.js +1 -1
  4. package/dist/nodes/Google/Gmail/GenericFunctions.js.map +1 -1
  5. package/dist/nodes/Google/Gmail/v2/DraftDescription.js +7 -0
  6. package/dist/nodes/Google/Gmail/v2/DraftDescription.js.map +1 -1
  7. package/dist/nodes/Google/Gmail/v2/GmailV2.node.js +4 -0
  8. package/dist/nodes/Google/Gmail/v2/GmailV2.node.js.map +1 -1
  9. package/dist/nodes/Google/Gmail/v2/utils/draft.js +44 -0
  10. package/dist/nodes/Google/Gmail/v2/utils/draft.js.map +1 -0
  11. package/dist/nodes/HttpRequest/V3/HttpRequestV3.node.js +10 -4
  12. package/dist/nodes/HttpRequest/V3/HttpRequestV3.node.js.map +1 -1
  13. package/dist/nodes/HttpRequest/V3/utils/binaryData.js +37 -0
  14. package/dist/nodes/HttpRequest/V3/utils/binaryData.js.map +1 -0
  15. package/dist/nodes/HttpRequest/V3/utils/parse.js +34 -0
  16. package/dist/nodes/HttpRequest/V3/utils/parse.js.map +1 -0
  17. package/dist/nodes/Linear/CommentDescription.js +105 -0
  18. package/dist/nodes/Linear/CommentDescription.js.map +1 -0
  19. package/dist/nodes/Linear/IssueDescription.js +23 -1
  20. package/dist/nodes/Linear/IssueDescription.js.map +1 -1
  21. package/dist/nodes/Linear/Linear.node.js +37 -0
  22. package/dist/nodes/Linear/Linear.node.js.map +1 -1
  23. package/dist/nodes/Linear/Queries.js +17 -0
  24. package/dist/nodes/Linear/Queries.js.map +1 -1
  25. package/dist/nodes/Linear/test/workflow/apiRequest.js +280 -0
  26. package/dist/nodes/Linear/test/workflow/apiRequest.js.map +1 -0
  27. package/dist/nodes/Linear/test/workflow/apiResponses.js +198 -0
  28. package/dist/nodes/Linear/test/workflow/apiResponses.js.map +1 -0
  29. package/dist/nodes/Postgres/transport/index.js +55 -60
  30. package/dist/nodes/Postgres/transport/index.js.map +1 -1
  31. package/dist/types/nodes.json +4 -4
  32. package/dist/utils/connection-pool-manager.js +42 -30
  33. package/dist/utils/connection-pool-manager.js.map +1 -1
  34. package/package.json +5 -5
@@ -29,6 +29,7 @@ var import_versionDescription = require("../../Google/Sheet/v2/actions/versionDe
29
29
  var import_methods = require("../methods");
30
30
  var import_evaluationTriggerUtils = require("../utils/evaluationTriggerUtils");
31
31
  const DEFAULT_STARTING_ROW = 2;
32
+ const MAX_ROWS = 1e3;
32
33
  class EvaluationTrigger {
33
34
  constructor() {
34
35
  this.description = {
@@ -110,11 +111,26 @@ class EvaluationTrigger {
110
111
  ]
111
112
  };
112
113
  this.methods = { loadOptions: import_methods.loadOptions, listSearch: import_methods.listSearch };
114
+ this.customOperations = {
115
+ dataset: {
116
+ async getRows() {
117
+ try {
118
+ const maxRows = this.getNodeParameter("limitRows", 0, false) ? this.getNodeParameter("maxRows", 0, MAX_ROWS) + 1 : MAX_ROWS;
119
+ const googleSheetInstance = import_evaluationTriggerUtils.getGoogleSheet.call(this);
120
+ const googleSheet = await import_evaluationTriggerUtils.getSheet.call(this, googleSheetInstance);
121
+ const results = await import_evaluationTriggerUtils.getResults.call(this, [], googleSheetInstance, googleSheet, {});
122
+ const result = results.slice(0, maxRows - 1);
123
+ return [result];
124
+ } catch (error) {
125
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), error);
126
+ }
127
+ }
128
+ }
129
+ };
113
130
  }
114
131
  async execute() {
115
132
  const inputData = this.getInputData();
116
- const MAX_ROWS = 1e3;
117
- const maxRows = this.getNodeParameter("limitRows", 0) ? this.getNodeParameter("maxRows", 0) + 1 : MAX_ROWS;
133
+ const maxRows = this.getNodeParameter("limitRows", 0, false) ? this.getNodeParameter("maxRows", 0, MAX_ROWS) + 1 : MAX_ROWS;
118
134
  const previousRunRowNumber = inputData?.[0]?.json?.row_number;
119
135
  const previousRunRowsLeft = inputData?.[0]?.json?._rowsLeft;
120
136
  const firstDataRow = typeof previousRunRowNumber === "number" && previousRunRowsLeft !== 0 ? previousRunRowNumber + 1 : DEFAULT_STARTING_ROW;
@@ -126,17 +142,6 @@ class EvaluationTrigger {
126
142
  const googleSheetInstance = import_evaluationTriggerUtils.getGoogleSheet.call(this);
127
143
  const googleSheet = await import_evaluationTriggerUtils.getSheet.call(this, googleSheetInstance);
128
144
  const allRows = await import_evaluationTriggerUtils.getResults.call(this, [], googleSheetInstance, googleSheet, rangeOptions);
129
- if (inputData[0].json.requestDataset) {
130
- const testRunnerResult = await import_evaluationTriggerUtils.getResults.call(
131
- this,
132
- [],
133
- googleSheetInstance,
134
- googleSheet,
135
- {}
136
- );
137
- const result = testRunnerResult.slice(0, maxRows - 1);
138
- return [result];
139
- }
140
145
  const hasFilter = this.getNodeParameter("filtersUI.values", 0, []);
141
146
  if (hasFilter.length > 0) {
142
147
  const currentRow = allRows[0];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.ts"],"sourcesContent":["/* eslint-disable n8n-nodes-base/node-filename-against-convention */\nimport type {\n\tINodeType,\n\tINodeTypeDescription,\n\tIExecuteFunctions,\n\tINodeExecutionData,\n} from 'n8n-workflow';\nimport { NodeConnectionTypes, NodeOperationError } from 'n8n-workflow';\n\nimport { document, sheet } from '../../Google/Sheet/GoogleSheetsTrigger.node';\nimport { readFilter } from '../../Google/Sheet/v2/actions/sheet/read.operation';\nimport { authentication } from '../../Google/Sheet/v2/actions/versionDescription';\nimport type { ILookupValues } from '../../Google/Sheet/v2/helpers/GoogleSheets.types';\nimport { listSearch, loadOptions } from '../methods';\nimport {\n\tgetGoogleSheet,\n\tgetResults,\n\tgetRowsLeft,\n\tgetNumberOfRowsLeftFiltered,\n\tgetSheet,\n} from '../utils/evaluationTriggerUtils';\n\nexport const DEFAULT_STARTING_ROW = 2;\n\nexport class EvaluationTrigger implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Evaluation Trigger',\n\t\ticon: 'fa:check-double',\n\t\tname: 'evaluationTrigger',\n\t\tgroup: ['trigger'],\n\t\tversion: 4.6,\n\t\tdescription: 'Run a test dataset through your workflow to check performance',\n\t\teventTriggerDescription: '',\n\t\tdefaults: {\n\t\t\tname: 'When fetching a dataset row',\n\t\t\tcolor: '#c3c9d5',\n\t\t},\n\t\tinputs: [],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'Pulls a test dataset from a Google Sheet. The workflow will run once for each row, in sequence. Tips for wiring this node up <a href=\"https://docs.n8n.io/advanced-ai/evaluations/tips-and-common-issues/#combining-multiple-triggers\">here</a>.',\n\t\t\t\tname: 'notice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Credentials',\n\t\t\t\tname: 'credentials',\n\t\t\t\ttype: 'credentials',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\tauthentication,\n\t\t\t{\n\t\t\t\t...document,\n\t\t\t\tdisplayName: 'Document Containing Dataset',\n\t\t\t\thint: 'Example dataset format <a href=\"https://docs.google.com/spreadsheets/d/1vD_IdeFUg7sHsK9okL6Doy1rGOkWTnPJV3Dro4FBUsY/edit?gid=0#gid=0\">here</a>',\n\t\t\t},\n\t\t\t{ ...sheet, displayName: 'Sheet Containing Dataset' },\n\t\t\t{\n\t\t\t\tdisplayName: 'Limit Rows',\n\t\t\t\tname: 'limitRows',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false,\n\t\t\t\tnoDataExpression: true,\n\t\t\t\tdescription: 'Whether to limit number of rows to process',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Max Rows to Process',\n\t\t\t\tname: 'maxRows',\n\t\t\t\ttype: 'number',\n\t\t\t\tdefault: 10,\n\t\t\t\tdescription: 'Maximum number of rows to process',\n\t\t\t\tnoDataExpression: false,\n\t\t\t\tdisplayOptions: { show: { limitRows: [true] } },\n\t\t\t},\n\t\t\treadFilter,\n\t\t],\n\t\tcodex: {\n\t\t\talias: ['Test', 'Metrics', 'Evals', 'Set Output', 'Set Metrics'],\n\t\t},\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'googleApi',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tauthentication: ['serviceAccount'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttestedBy: 'googleApiCredentialTest',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'googleSheetsOAuth2Api',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tauthentication: ['oAuth2'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n\n\tmethods = { loadOptions, listSearch };\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst inputData = this.getInputData();\n\n\t\tconst MAX_ROWS = 1000;\n\n\t\tconst maxRows = this.getNodeParameter('limitRows', 0)\n\t\t\t? (this.getNodeParameter('maxRows', 0) as number) + 1\n\t\t\t: MAX_ROWS;\n\n\t\tconst previousRunRowNumber = inputData?.[0]?.json?.row_number;\n\t\tconst previousRunRowsLeft = inputData?.[0]?.json?._rowsLeft;\n\n\t\tconst firstDataRow =\n\t\t\ttypeof previousRunRowNumber === 'number' && previousRunRowsLeft !== 0\n\t\t\t\t? previousRunRowNumber + 1\n\t\t\t\t: DEFAULT_STARTING_ROW;\n\t\tconst rangeOptions = {\n\t\t\trangeDefinition: 'specifyRange',\n\t\t\theaderRow: 1,\n\t\t\tfirstDataRow,\n\t\t};\n\n\t\tconst googleSheetInstance = getGoogleSheet.call(this);\n\n\t\tconst googleSheet = await getSheet.call(this, googleSheetInstance);\n\n\t\tconst allRows = await getResults.call(this, [], googleSheetInstance, googleSheet, rangeOptions);\n\n\t\t// This is for test runner which requires a different return format\n\t\tif (inputData[0].json.requestDataset) {\n\t\t\tconst testRunnerResult = await getResults.call(\n\t\t\t\tthis,\n\t\t\t\t[],\n\t\t\t\tgoogleSheetInstance,\n\t\t\t\tgoogleSheet,\n\t\t\t\t{},\n\t\t\t);\n\n\t\t\tconst result = testRunnerResult.slice(0, maxRows - 1);\n\n\t\t\treturn [result];\n\t\t}\n\n\t\tconst hasFilter = this.getNodeParameter('filtersUI.values', 0, []) as ILookupValues[];\n\n\t\tif (hasFilter.length > 0) {\n\t\t\tconst currentRow = allRows[0];\n\t\t\tconst currentRowNumber = currentRow.json?.row_number as number;\n\n\t\t\tif (currentRow === undefined) {\n\t\t\t\tthrow new NodeOperationError(this.getNode(), 'No row found');\n\t\t\t}\n\n\t\t\tconst rowsLeft = await getNumberOfRowsLeftFiltered.call(\n\t\t\t\tthis,\n\t\t\t\tgoogleSheetInstance,\n\t\t\t\tgoogleSheet.title,\n\t\t\t\tcurrentRowNumber + 1,\n\t\t\t\tmaxRows,\n\t\t\t);\n\n\t\t\tcurrentRow.json._rowsLeft = rowsLeft;\n\n\t\t\treturn [[currentRow]];\n\t\t} else {\n\t\t\tconst currentRow = allRows.find((row) => (row?.json?.row_number as number) === firstDataRow);\n\n\t\t\tconst rowsLeft = await getRowsLeft.call(\n\t\t\t\tthis,\n\t\t\t\tgoogleSheetInstance,\n\t\t\t\tgoogleSheet.title,\n\t\t\t\t`${googleSheet.title}!${firstDataRow}:${maxRows}`,\n\t\t\t);\n\n\t\t\tif (currentRow === undefined) {\n\t\t\t\tthrow new NodeOperationError(this.getNode(), 'No row found');\n\t\t\t}\n\n\t\t\tcurrentRow.json._rowsLeft = rowsLeft;\n\n\t\t\treturn [[currentRow]];\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,0BAAwD;AAExD,iCAAgC;AAChC,kBAA2B;AAC3B,gCAA+B;AAE/B,qBAAwC;AACxC,oCAMO;AAEA,MAAM,uBAAuB;AAE7B,MAAM,kBAAuC;AAAA,EAA7C;AACN,uBAAoC;AAAA,MACnC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO,CAAC,SAAS;AAAA,MACjB,SAAS;AAAA,MACT,aAAa;AAAA,MACb,yBAAyB;AAAA,MACzB,UAAU;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,MACA,QAAQ,CAAC;AAAA,MACT,SAAS,CAAC,wCAAoB,IAAI;AAAA,MAClC,YAAY;AAAA,QACX;AAAA,UACC,aACC;AAAA,UACD,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,QACV;AAAA,QACA;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,UACC,GAAG;AAAA,UACH,aAAa;AAAA,UACb,MAAM;AAAA,QACP;AAAA,QACA,EAAE,GAAG,kCAAO,aAAa,2BAA2B;AAAA,QACpD;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,kBAAkB;AAAA,UAClB,aAAa;AAAA,QACd;AAAA,QACA;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,aAAa;AAAA,UACb,kBAAkB;AAAA,UAClB,gBAAgB,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE;AAAA,QAC/C;AAAA,QACA;AAAA,MACD;AAAA,MACA,OAAO;AAAA,QACN,OAAO,CAAC,QAAQ,WAAW,SAAS,cAAc,aAAa;AAAA,MAChE;AAAA,MACA,aAAa;AAAA,QACZ;AAAA,UACC,MAAM;AAAA,UACN,UAAU;AAAA,UACV,gBAAgB;AAAA,YACf,MAAM;AAAA,cACL,gBAAgB,CAAC,gBAAgB;AAAA,YAClC;AAAA,UACD;AAAA,UACA,UAAU;AAAA,QACX;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,UAAU;AAAA,UACV,gBAAgB;AAAA,YACf,MAAM;AAAA,cACL,gBAAgB,CAAC,QAAQ;AAAA,YAC1B;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,mBAAU,EAAE,yCAAa,sCAAW;AAAA;AAAA,EAEpC,MAAM,UAAkE;AACvE,UAAM,YAAY,KAAK,aAAa;AAEpC,UAAM,WAAW;AAEjB,UAAM,UAAU,KAAK,iBAAiB,aAAa,CAAC,IAChD,KAAK,iBAAiB,WAAW,CAAC,IAAe,IAClD;AAEH,UAAM,uBAAuB,YAAY,CAAC,GAAG,MAAM;AACnD,UAAM,sBAAsB,YAAY,CAAC,GAAG,MAAM;AAElD,UAAM,eACL,OAAO,yBAAyB,YAAY,wBAAwB,IACjE,uBAAuB,IACvB;AACJ,UAAM,eAAe;AAAA,MACpB,iBAAiB;AAAA,MACjB,WAAW;AAAA,MACX;AAAA,IACD;AAEA,UAAM,sBAAsB,6CAAe,KAAK,IAAI;AAEpD,UAAM,cAAc,MAAM,uCAAS,KAAK,MAAM,mBAAmB;AAEjE,UAAM,UAAU,MAAM,yCAAW,KAAK,MAAM,CAAC,GAAG,qBAAqB,aAAa,YAAY;AAG9F,QAAI,UAAU,CAAC,EAAE,KAAK,gBAAgB;AACrC,YAAM,mBAAmB,MAAM,yCAAW;AAAA,QACzC;AAAA,QACA,CAAC;AAAA,QACD;AAAA,QACA;AAAA,QACA,CAAC;AAAA,MACF;AAEA,YAAM,SAAS,iBAAiB,MAAM,GAAG,UAAU,CAAC;AAEpD,aAAO,CAAC,MAAM;AAAA,IACf;AAEA,UAAM,YAAY,KAAK,iBAAiB,oBAAoB,GAAG,CAAC,CAAC;AAEjE,QAAI,UAAU,SAAS,GAAG;AACzB,YAAM,aAAa,QAAQ,CAAC;AAC5B,YAAM,mBAAmB,WAAW,MAAM;AAE1C,UAAI,eAAe,QAAW;AAC7B,cAAM,IAAI,uCAAmB,KAAK,QAAQ,GAAG,cAAc;AAAA,MAC5D;AAEA,YAAM,WAAW,MAAM,0DAA4B;AAAA,QAClD;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,mBAAmB;AAAA,QACnB;AAAA,MACD;AAEA,iBAAW,KAAK,YAAY;AAE5B,aAAO,CAAC,CAAC,UAAU,CAAC;AAAA,IACrB,OAAO;AACN,YAAM,aAAa,QAAQ,KAAK,CAAC,QAAS,KAAK,MAAM,eAA0B,YAAY;AAE3F,YAAM,WAAW,MAAM,0CAAY;AAAA,QAClC;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,GAAG,YAAY,KAAK,IAAI,YAAY,IAAI,OAAO;AAAA,MAChD;AAEA,UAAI,eAAe,QAAW;AAC7B,cAAM,IAAI,uCAAmB,KAAK,QAAQ,GAAG,cAAc;AAAA,MAC5D;AAEA,iBAAW,KAAK,YAAY;AAE5B,aAAO,CAAC,CAAC,UAAU,CAAC;AAAA,IACrB;AAAA,EACD;AACD;","names":[]}
1
+ {"version":3,"sources":["../../../../nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.ts"],"sourcesContent":["/* eslint-disable n8n-nodes-base/node-filename-against-convention */\nimport type {\n\tINodeType,\n\tINodeTypeDescription,\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tNodeExecutionWithMetadata,\n} from 'n8n-workflow';\nimport { NodeConnectionTypes, NodeOperationError } from 'n8n-workflow';\n\nimport { document, sheet } from '../../Google/Sheet/GoogleSheetsTrigger.node';\nimport { readFilter } from '../../Google/Sheet/v2/actions/sheet/read.operation';\nimport { authentication } from '../../Google/Sheet/v2/actions/versionDescription';\nimport type { ILookupValues } from '../../Google/Sheet/v2/helpers/GoogleSheets.types';\nimport { listSearch, loadOptions } from '../methods';\nimport {\n\tgetGoogleSheet,\n\tgetResults,\n\tgetRowsLeft,\n\tgetNumberOfRowsLeftFiltered,\n\tgetSheet,\n} from '../utils/evaluationTriggerUtils';\n\nexport const DEFAULT_STARTING_ROW = 2;\n\nconst MAX_ROWS = 1000;\n\nexport class EvaluationTrigger implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Evaluation Trigger',\n\t\ticon: 'fa:check-double',\n\t\tname: 'evaluationTrigger',\n\t\tgroup: ['trigger'],\n\t\tversion: 4.6,\n\t\tdescription: 'Run a test dataset through your workflow to check performance',\n\t\teventTriggerDescription: '',\n\t\tdefaults: {\n\t\t\tname: 'When fetching a dataset row',\n\t\t\tcolor: '#c3c9d5',\n\t\t},\n\t\tinputs: [],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'Pulls a test dataset from a Google Sheet. The workflow will run once for each row, in sequence. Tips for wiring this node up <a href=\"https://docs.n8n.io/advanced-ai/evaluations/tips-and-common-issues/#combining-multiple-triggers\">here</a>.',\n\t\t\t\tname: 'notice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Credentials',\n\t\t\t\tname: 'credentials',\n\t\t\t\ttype: 'credentials',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\tauthentication,\n\t\t\t{\n\t\t\t\t...document,\n\t\t\t\tdisplayName: 'Document Containing Dataset',\n\t\t\t\thint: 'Example dataset format <a href=\"https://docs.google.com/spreadsheets/d/1vD_IdeFUg7sHsK9okL6Doy1rGOkWTnPJV3Dro4FBUsY/edit?gid=0#gid=0\">here</a>',\n\t\t\t},\n\t\t\t{ ...sheet, displayName: 'Sheet Containing Dataset' },\n\t\t\t{\n\t\t\t\tdisplayName: 'Limit Rows',\n\t\t\t\tname: 'limitRows',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false,\n\t\t\t\tnoDataExpression: true,\n\t\t\t\tdescription: 'Whether to limit number of rows to process',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Max Rows to Process',\n\t\t\t\tname: 'maxRows',\n\t\t\t\ttype: 'number',\n\t\t\t\tdefault: 10,\n\t\t\t\tdescription: 'Maximum number of rows to process',\n\t\t\t\tnoDataExpression: false,\n\t\t\t\tdisplayOptions: { show: { limitRows: [true] } },\n\t\t\t},\n\t\t\treadFilter,\n\t\t],\n\t\tcodex: {\n\t\t\talias: ['Test', 'Metrics', 'Evals', 'Set Output', 'Set Metrics'],\n\t\t},\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'googleApi',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tauthentication: ['serviceAccount'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttestedBy: 'googleApiCredentialTest',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'googleSheetsOAuth2Api',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tauthentication: ['oAuth2'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n\n\tmethods = { loadOptions, listSearch };\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst inputData = this.getInputData();\n\n\t\tconst maxRows = this.getNodeParameter('limitRows', 0, false)\n\t\t\t? (this.getNodeParameter('maxRows', 0, MAX_ROWS) as number) + 1\n\t\t\t: MAX_ROWS;\n\n\t\tconst previousRunRowNumber = inputData?.[0]?.json?.row_number;\n\t\tconst previousRunRowsLeft = inputData?.[0]?.json?._rowsLeft;\n\n\t\tconst firstDataRow =\n\t\t\ttypeof previousRunRowNumber === 'number' && previousRunRowsLeft !== 0\n\t\t\t\t? previousRunRowNumber + 1\n\t\t\t\t: DEFAULT_STARTING_ROW;\n\t\tconst rangeOptions = {\n\t\t\trangeDefinition: 'specifyRange',\n\t\t\theaderRow: 1,\n\t\t\tfirstDataRow,\n\t\t};\n\n\t\tconst googleSheetInstance = getGoogleSheet.call(this);\n\n\t\tconst googleSheet = await getSheet.call(this, googleSheetInstance);\n\n\t\tconst allRows = await getResults.call(this, [], googleSheetInstance, googleSheet, rangeOptions);\n\n\t\tconst hasFilter = this.getNodeParameter('filtersUI.values', 0, []) as ILookupValues[];\n\n\t\tif (hasFilter.length > 0) {\n\t\t\tconst currentRow = allRows[0];\n\t\t\tconst currentRowNumber = currentRow.json?.row_number as number;\n\n\t\t\tif (currentRow === undefined) {\n\t\t\t\tthrow new NodeOperationError(this.getNode(), 'No row found');\n\t\t\t}\n\n\t\t\tconst rowsLeft = await getNumberOfRowsLeftFiltered.call(\n\t\t\t\tthis,\n\t\t\t\tgoogleSheetInstance,\n\t\t\t\tgoogleSheet.title,\n\t\t\t\tcurrentRowNumber + 1,\n\t\t\t\tmaxRows,\n\t\t\t);\n\n\t\t\tcurrentRow.json._rowsLeft = rowsLeft;\n\n\t\t\treturn [[currentRow]];\n\t\t} else {\n\t\t\tconst currentRow = allRows.find((row) => (row?.json?.row_number as number) === firstDataRow);\n\n\t\t\tconst rowsLeft = await getRowsLeft.call(\n\t\t\t\tthis,\n\t\t\t\tgoogleSheetInstance,\n\t\t\t\tgoogleSheet.title,\n\t\t\t\t`${googleSheet.title}!${firstDataRow}:${maxRows}`,\n\t\t\t);\n\n\t\t\tif (currentRow === undefined) {\n\t\t\t\tthrow new NodeOperationError(this.getNode(), 'No row found');\n\t\t\t}\n\n\t\t\tcurrentRow.json._rowsLeft = rowsLeft;\n\n\t\t\treturn [[currentRow]];\n\t\t}\n\t}\n\n\tcustomOperations = {\n\t\tdataset: {\n\t\t\tasync getRows(\n\t\t\t\tthis: IExecuteFunctions,\n\t\t\t): Promise<INodeExecutionData[][] | NodeExecutionWithMetadata[][] | null> {\n\t\t\t\ttry {\n\t\t\t\t\tconst maxRows = this.getNodeParameter('limitRows', 0, false)\n\t\t\t\t\t\t? (this.getNodeParameter('maxRows', 0, MAX_ROWS) as number) + 1\n\t\t\t\t\t\t: MAX_ROWS;\n\n\t\t\t\t\tconst googleSheetInstance = getGoogleSheet.call(this);\n\t\t\t\t\tconst googleSheet = await getSheet.call(this, googleSheetInstance);\n\n\t\t\t\t\tconst results = await getResults.call(this, [], googleSheetInstance, googleSheet, {});\n\t\t\t\t\tconst result = results.slice(0, maxRows - 1);\n\n\t\t\t\t\treturn [result];\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new NodeOperationError(this.getNode(), error);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,0BAAwD;AAExD,iCAAgC;AAChC,kBAA2B;AAC3B,gCAA+B;AAE/B,qBAAwC;AACxC,oCAMO;AAEA,MAAM,uBAAuB;AAEpC,MAAM,WAAW;AAEV,MAAM,kBAAuC;AAAA,EAA7C;AACN,uBAAoC;AAAA,MACnC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO,CAAC,SAAS;AAAA,MACjB,SAAS;AAAA,MACT,aAAa;AAAA,MACb,yBAAyB;AAAA,MACzB,UAAU;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,MACA,QAAQ,CAAC;AAAA,MACT,SAAS,CAAC,wCAAoB,IAAI;AAAA,MAClC,YAAY;AAAA,QACX;AAAA,UACC,aACC;AAAA,UACD,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,QACV;AAAA,QACA;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,UACC,GAAG;AAAA,UACH,aAAa;AAAA,UACb,MAAM;AAAA,QACP;AAAA,QACA,EAAE,GAAG,kCAAO,aAAa,2BAA2B;AAAA,QACpD;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,kBAAkB;AAAA,UAClB,aAAa;AAAA,QACd;AAAA,QACA;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,aAAa;AAAA,UACb,kBAAkB;AAAA,UAClB,gBAAgB,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE;AAAA,QAC/C;AAAA,QACA;AAAA,MACD;AAAA,MACA,OAAO;AAAA,QACN,OAAO,CAAC,QAAQ,WAAW,SAAS,cAAc,aAAa;AAAA,MAChE;AAAA,MACA,aAAa;AAAA,QACZ;AAAA,UACC,MAAM;AAAA,UACN,UAAU;AAAA,UACV,gBAAgB;AAAA,YACf,MAAM;AAAA,cACL,gBAAgB,CAAC,gBAAgB;AAAA,YAClC;AAAA,UACD;AAAA,UACA,UAAU;AAAA,QACX;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,UAAU;AAAA,UACV,gBAAgB;AAAA,YACf,MAAM;AAAA,cACL,gBAAgB,CAAC,QAAQ;AAAA,YAC1B;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,mBAAU,EAAE,yCAAa,sCAAW;AAqEpC,4BAAmB;AAAA,MAClB,SAAS;AAAA,QACR,MAAM,UAEoE;AACzE,cAAI;AACH,kBAAM,UAAU,KAAK,iBAAiB,aAAa,GAAG,KAAK,IACvD,KAAK,iBAAiB,WAAW,GAAG,QAAQ,IAAe,IAC5D;AAEH,kBAAM,sBAAsB,6CAAe,KAAK,IAAI;AACpD,kBAAM,cAAc,MAAM,uCAAS,KAAK,MAAM,mBAAmB;AAEjE,kBAAM,UAAU,MAAM,yCAAW,KAAK,MAAM,CAAC,GAAG,qBAAqB,aAAa,CAAC,CAAC;AACpF,kBAAM,SAAS,QAAQ,MAAM,GAAG,UAAU,CAAC;AAE3C,mBAAO,CAAC,MAAM;AAAA,UACf,SAAS,OAAO;AACf,kBAAM,IAAI,uCAAmB,KAAK,QAAQ,GAAG,KAAK;AAAA,UACnD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA;AAAA,EAzFA,MAAM,UAAkE;AACvE,UAAM,YAAY,KAAK,aAAa;AAEpC,UAAM,UAAU,KAAK,iBAAiB,aAAa,GAAG,KAAK,IACvD,KAAK,iBAAiB,WAAW,GAAG,QAAQ,IAAe,IAC5D;AAEH,UAAM,uBAAuB,YAAY,CAAC,GAAG,MAAM;AACnD,UAAM,sBAAsB,YAAY,CAAC,GAAG,MAAM;AAElD,UAAM,eACL,OAAO,yBAAyB,YAAY,wBAAwB,IACjE,uBAAuB,IACvB;AACJ,UAAM,eAAe;AAAA,MACpB,iBAAiB;AAAA,MACjB,WAAW;AAAA,MACX;AAAA,IACD;AAEA,UAAM,sBAAsB,6CAAe,KAAK,IAAI;AAEpD,UAAM,cAAc,MAAM,uCAAS,KAAK,MAAM,mBAAmB;AAEjE,UAAM,UAAU,MAAM,yCAAW,KAAK,MAAM,CAAC,GAAG,qBAAqB,aAAa,YAAY;AAE9F,UAAM,YAAY,KAAK,iBAAiB,oBAAoB,GAAG,CAAC,CAAC;AAEjE,QAAI,UAAU,SAAS,GAAG;AACzB,YAAM,aAAa,QAAQ,CAAC;AAC5B,YAAM,mBAAmB,WAAW,MAAM;AAE1C,UAAI,eAAe,QAAW;AAC7B,cAAM,IAAI,uCAAmB,KAAK,QAAQ,GAAG,cAAc;AAAA,MAC5D;AAEA,YAAM,WAAW,MAAM,0DAA4B;AAAA,QAClD;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,mBAAmB;AAAA,QACnB;AAAA,MACD;AAEA,iBAAW,KAAK,YAAY;AAE5B,aAAO,CAAC,CAAC,UAAU,CAAC;AAAA,IACrB,OAAO;AACN,YAAM,aAAa,QAAQ,KAAK,CAAC,QAAS,KAAK,MAAM,eAA0B,YAAY;AAE3F,YAAM,WAAW,MAAM,0CAAY;AAAA,QAClC;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,GAAG,YAAY,KAAK,IAAI,YAAY,IAAI,OAAO;AAAA,MAChD;AAEA,UAAI,eAAe,QAAW;AAC7B,cAAM,IAAI,uCAAmB,KAAK,QAAQ,GAAG,cAAc;AAAA,MAC5D;AAEA,iBAAW,KAAK,YAAY;AAE5B,aAAO,CAAC,CAAC,UAAU,CAAC;AAAA,IACrB;AAAA,EACD;AAyBD;","names":[]}
@@ -213,7 +213,7 @@ async function encodeEmail(email) {
213
213
  const mail = new import_mail_composer.default(mailOptions).compile();
214
214
  mail.keepBcc = true;
215
215
  const mailBody = await mail.build();
216
- return mailBody.toString("base64").replace(/\+/g, "-").replace(/\//g, "_");
216
+ return mailBody.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
217
217
  }
218
218
  async function googleApiRequestAllItems(propertyName, method, endpoint, body = {}, query = {}) {
219
219
  const returnData = [];
@@ -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":"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","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":"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","names":[]}