n8n-nodes-base 1.98.1 → 1.99.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/credentials/GoogleSheetsOAuth2Api.credentials.js +1 -0
- package/dist/credentials/GoogleSheetsOAuth2Api.credentials.js.map +1 -1
- package/dist/credentials/JiraSoftwareCloudApi.credentials.js +1 -1
- package/dist/credentials/JiraSoftwareCloudApi.credentials.js.map +1 -1
- package/dist/credentials/JiraSoftwareServerApi.credentials.js +1 -1
- package/dist/credentials/JiraSoftwareServerApi.credentials.js.map +1 -1
- package/dist/credentials/JiraSoftwareServerPatApi.credentials.js +1 -1
- package/dist/credentials/JiraSoftwareServerPatApi.credentials.js.map +1 -1
- package/dist/nodes/Code/ExecutionError.js +11 -4
- package/dist/nodes/Code/ExecutionError.js.map +1 -1
- package/dist/nodes/Evaluation/utils/evaluationTriggerUtils.js +3 -2
- package/dist/nodes/Evaluation/utils/evaluationTriggerUtils.js.map +1 -1
- package/dist/nodes/ExecutionData/ExecutionData.node.js +35 -10
- package/dist/nodes/ExecutionData/ExecutionData.node.js.map +1 -1
- package/dist/nodes/Google/Sheet/v2/actions/utils/readOperation.js +7 -1
- package/dist/nodes/Google/Sheet/v2/actions/utils/readOperation.js.map +1 -1
- package/dist/nodes/Google/Sheet/v2/helpers/GoogleSheet.js +14 -6
- package/dist/nodes/Google/Sheet/v2/helpers/GoogleSheet.js.map +1 -1
- package/dist/nodes/Google/Sheet/v2/methods/resourceMapping.js +1 -1
- package/dist/nodes/Google/Sheet/v2/methods/resourceMapping.js.map +1 -1
- package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js +1 -2
- package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js.map +1 -1
- package/dist/nodes/Microsoft/Sql/GenericFunctions.js.map +1 -1
- package/dist/nodes/Onfleet/Onfleet.node.js.map +1 -1
- package/dist/nodes/Postgres/v1/genericFunctions.js.map +1 -1
- package/dist/types/credentials.json +4 -4
- package/dist/types/nodes.json +4 -4
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../nodes/Google/Sheet/v2/methods/resourceMapping.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tILoadOptionsFunctions,\n\tResourceMapperField,\n\tResourceMapperFields,\n} from 'n8n-workflow';\n\nimport { GoogleSheet } from '../helpers/GoogleSheet';\nimport { ROW_NUMBER, type ResourceLocator } from '../helpers/GoogleSheets.types';\nimport { getSpreadsheetId } from '../helpers/GoogleSheets.utils';\n\nexport async function getMappingColumns(\n\tthis: ILoadOptionsFunctions,\n): Promise<ResourceMapperFields> {\n\tconst documentId = this.getNodeParameter('documentId', 0) as IDataObject | null;\n\n\tif (!documentId) return { fields: [] };\n\n\tconst { mode, value } = documentId;\n\n\tconst spreadsheetId = getSpreadsheetId(this.getNode(), mode as ResourceLocator, value as string);\n\n\tconst sheet = new GoogleSheet(spreadsheetId, this);\n\tconst sheetWithinDocument = this.getNodeParameter('sheetName', undefined, {\n\t\textractValue: true,\n\t}) as string;\n\tconst { mode: sheetMode } = this.getNodeParameter('sheetName', 0) as { mode: ResourceLocator };\n\n\tconst { title: sheetName } = await sheet.spreadsheetGetSheet(\n\t\tthis.getNode(),\n\t\tsheetMode,\n\t\tsheetWithinDocument,\n\t);\n\n\tconst locationDefine = this.getNodeParameter(\n\t\t'options.locationDefine.values',\n\t\t0,\n\t\t{},\n\t) as IDataObject;\n\n\tlet columnNamesRow = 1;\n\n\tif (locationDefine.headerRow) {\n\t\tcolumnNamesRow = locationDefine.headerRow as number;\n\t}\n\n\tconst sheetData = await sheet.getData(\n\t\t`${sheetName}!${columnNamesRow}:${columnNamesRow}`,\n\t\t'FORMATTED_VALUE',\n\t);\n\n\tconst columns = sheet.testFilter(sheetData || [], 0, 0).filter((col) => col !== '');\n\n\tconst fields: ResourceMapperField[] = columns.map((col) => ({\n\t\tid: col,\n\t\tdisplayName: col,\n\t\trequired: false,\n\t\tdefaultMatch: col === 'id',\n\t\tdisplay: true,\n\t\ttype: 'string',\n\t\tcanBeUsedToMatch: true,\n\t}));\n\n\tconst operation = this.getNodeParameter('operation', 0) as string;\n\n\tif (operation === 'update') {\n\t\tfields.push({\n\t\t\tid: ROW_NUMBER,\n\t\t\tdisplayName: ROW_NUMBER,\n\t\t\trequired: false,\n\t\t\tdefaultMatch: false,\n\t\t\tdisplay: true,\n\t\t\ttype: '
|
|
1
|
+
{"version":3,"sources":["../../../../../../nodes/Google/Sheet/v2/methods/resourceMapping.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tILoadOptionsFunctions,\n\tResourceMapperField,\n\tResourceMapperFields,\n} from 'n8n-workflow';\n\nimport { GoogleSheet } from '../helpers/GoogleSheet';\nimport { ROW_NUMBER, type ResourceLocator } from '../helpers/GoogleSheets.types';\nimport { getSpreadsheetId } from '../helpers/GoogleSheets.utils';\n\nexport async function getMappingColumns(\n\tthis: ILoadOptionsFunctions,\n): Promise<ResourceMapperFields> {\n\tconst documentId = this.getNodeParameter('documentId', 0) as IDataObject | null;\n\n\tif (!documentId) return { fields: [] };\n\n\tconst { mode, value } = documentId;\n\n\tconst spreadsheetId = getSpreadsheetId(this.getNode(), mode as ResourceLocator, value as string);\n\n\tconst sheet = new GoogleSheet(spreadsheetId, this);\n\tconst sheetWithinDocument = this.getNodeParameter('sheetName', undefined, {\n\t\textractValue: true,\n\t}) as string;\n\tconst { mode: sheetMode } = this.getNodeParameter('sheetName', 0) as { mode: ResourceLocator };\n\n\tconst { title: sheetName } = await sheet.spreadsheetGetSheet(\n\t\tthis.getNode(),\n\t\tsheetMode,\n\t\tsheetWithinDocument,\n\t);\n\n\tconst locationDefine = this.getNodeParameter(\n\t\t'options.locationDefine.values',\n\t\t0,\n\t\t{},\n\t) as IDataObject;\n\n\tlet columnNamesRow = 1;\n\n\tif (locationDefine.headerRow) {\n\t\tcolumnNamesRow = locationDefine.headerRow as number;\n\t}\n\n\tconst sheetData = await sheet.getData(\n\t\t`${sheetName}!${columnNamesRow}:${columnNamesRow}`,\n\t\t'FORMATTED_VALUE',\n\t);\n\n\tconst columns = sheet.testFilter(sheetData || [], 0, 0).filter((col) => col !== '');\n\n\tconst fields: ResourceMapperField[] = columns.map((col) => ({\n\t\tid: col,\n\t\tdisplayName: col,\n\t\trequired: false,\n\t\tdefaultMatch: col === 'id',\n\t\tdisplay: true,\n\t\ttype: 'string',\n\t\tcanBeUsedToMatch: true,\n\t}));\n\n\tconst operation = this.getNodeParameter('operation', 0) as string;\n\n\tif (operation === 'update') {\n\t\tfields.push({\n\t\t\tid: ROW_NUMBER,\n\t\t\tdisplayName: ROW_NUMBER,\n\t\t\trequired: false,\n\t\t\tdefaultMatch: false,\n\t\t\tdisplay: true,\n\t\t\ttype: 'number',\n\t\t\tcanBeUsedToMatch: true,\n\t\t\treadOnly: true,\n\t\t\tremoved: true,\n\t\t});\n\t}\n\n\treturn { fields };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,yBAA4B;AAC5B,0BAAiD;AACjD,IAAAA,uBAAiC;AAEjC,eAAsB,oBAEW;AAChC,QAAM,aAAa,KAAK,iBAAiB,cAAc,CAAC;AAExD,MAAI,CAAC,WAAY,QAAO,EAAE,QAAQ,CAAC,EAAE;AAErC,QAAM,EAAE,MAAM,MAAM,IAAI;AAExB,QAAM,oBAAgB,uCAAiB,KAAK,QAAQ,GAAG,MAAyB,KAAe;AAE/F,QAAM,QAAQ,IAAI,+BAAY,eAAe,IAAI;AACjD,QAAM,sBAAsB,KAAK,iBAAiB,aAAa,QAAW;AAAA,IACzE,cAAc;AAAA,EACf,CAAC;AACD,QAAM,EAAE,MAAM,UAAU,IAAI,KAAK,iBAAiB,aAAa,CAAC;AAEhE,QAAM,EAAE,OAAO,UAAU,IAAI,MAAM,MAAM;AAAA,IACxC,KAAK,QAAQ;AAAA,IACb;AAAA,IACA;AAAA,EACD;AAEA,QAAM,iBAAiB,KAAK;AAAA,IAC3B;AAAA,IACA;AAAA,IACA,CAAC;AAAA,EACF;AAEA,MAAI,iBAAiB;AAErB,MAAI,eAAe,WAAW;AAC7B,qBAAiB,eAAe;AAAA,EACjC;AAEA,QAAM,YAAY,MAAM,MAAM;AAAA,IAC7B,GAAG,SAAS,IAAI,cAAc,IAAI,cAAc;AAAA,IAChD;AAAA,EACD;AAEA,QAAM,UAAU,MAAM,WAAW,aAAa,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,QAAQ,QAAQ,EAAE;AAElF,QAAM,SAAgC,QAAQ,IAAI,CAAC,SAAS;AAAA,IAC3D,IAAI;AAAA,IACJ,aAAa;AAAA,IACb,UAAU;AAAA,IACV,cAAc,QAAQ;AAAA,IACtB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,kBAAkB;AAAA,EACnB,EAAE;AAEF,QAAM,YAAY,KAAK,iBAAiB,aAAa,CAAC;AAEtD,MAAI,cAAc,UAAU;AAC3B,WAAO,KAAK;AAAA,MACX,IAAI;AAAA,MACJ,aAAa;AAAA,MACb,UAAU;AAAA,MACV,cAAc;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,MACN,kBAAkB;AAAA,MAClB,UAAU;AAAA,MACV,SAAS;AAAA,IACV,CAAC;AAAA,EACF;AAEA,SAAO,EAAE,OAAO;AACjB;","names":["import_GoogleSheets"]}
|
|
@@ -50,8 +50,7 @@ class MicrosoftSharePoint {
|
|
|
50
50
|
}
|
|
51
51
|
],
|
|
52
52
|
requestDefaults: {
|
|
53
|
-
baseURL: "=https://{{ $credentials.subdomain }}.sharepoint.com/_api/v2.0/"
|
|
54
|
-
ignoreHttpStatusErrors: true
|
|
53
|
+
baseURL: "=https://{{ $credentials.subdomain }}.sharepoint.com/_api/v2.0/"
|
|
55
54
|
},
|
|
56
55
|
properties: [
|
|
57
56
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.ts"],"sourcesContent":["import type { INodeType, INodeTypeDescription } from 'n8n-workflow';\nimport { NodeConnectionTypes } from 'n8n-workflow';\n\nimport { file, item, list } from './descriptions';\nimport { listSearch, resourceMapping } from './methods';\n\nexport class MicrosoftSharePoint implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Microsoft SharePoint',\n\t\tname: 'microsoftSharePoint',\n\t\ticon: {\n\t\t\tlight: 'file:microsoftSharePoint.svg',\n\t\t\tdark: 'file:microsoftSharePoint.svg',\n\t\t},\n\t\tgroup: ['transform'],\n\t\tversion: 1,\n\t\tsubtitle: '={{ $parameter[\"operation\"] + \": \" + $parameter[\"resource\"] }}',\n\t\tdescription: 'Interact with Microsoft SharePoint API',\n\t\tdefaults: {\n\t\t\tname: 'Microsoft SharePoint',\n\t\t},\n\t\tusableAsTool: true,\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'microsoftSharePointOAuth2Api',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t\trequestDefaults: {\n\t\t\tbaseURL: '=https://{{ $credentials.subdomain }}.sharepoint.com/_api/v2.0/',\n\t\t
|
|
1
|
+
{"version":3,"sources":["../../../../nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.ts"],"sourcesContent":["import type { INodeType, INodeTypeDescription } from 'n8n-workflow';\nimport { NodeConnectionTypes } from 'n8n-workflow';\n\nimport { file, item, list } from './descriptions';\nimport { listSearch, resourceMapping } from './methods';\n\nexport class MicrosoftSharePoint implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Microsoft SharePoint',\n\t\tname: 'microsoftSharePoint',\n\t\ticon: {\n\t\t\tlight: 'file:microsoftSharePoint.svg',\n\t\t\tdark: 'file:microsoftSharePoint.svg',\n\t\t},\n\t\tgroup: ['transform'],\n\t\tversion: 1,\n\t\tsubtitle: '={{ $parameter[\"operation\"] + \": \" + $parameter[\"resource\"] }}',\n\t\tdescription: 'Interact with Microsoft SharePoint API',\n\t\tdefaults: {\n\t\t\tname: 'Microsoft SharePoint',\n\t\t},\n\t\tusableAsTool: true,\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'microsoftSharePointOAuth2Api',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t\trequestDefaults: {\n\t\t\tbaseURL: '=https://{{ $credentials.subdomain }}.sharepoint.com/_api/v2.0/',\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Resource',\n\t\t\t\tname: 'resource',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'File',\n\t\t\t\t\t\tvalue: 'file',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Item',\n\t\t\t\t\t\tvalue: 'item',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'List',\n\t\t\t\t\t\tvalue: 'list',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'file',\n\t\t\t},\n\n\t\t\t...file.description,\n\t\t\t...item.description,\n\t\t\t...list.description,\n\t\t],\n\t};\n\n\tmethods = {\n\t\tlistSearch,\n\t\tresourceMapping,\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,0BAAoC;AAEpC,0BAAiC;AACjC,qBAA4C;AAErC,MAAM,oBAAyC;AAAA,EAA/C;AACN,uBAAoC;AAAA,MACnC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,QACL,OAAO;AAAA,QACP,MAAM;AAAA,MACP;AAAA,MACA,OAAO,CAAC,WAAW;AAAA,MACnB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,aAAa;AAAA,MACb,UAAU;AAAA,QACT,MAAM;AAAA,MACP;AAAA,MACA,cAAc;AAAA,MACd,QAAQ,CAAC,wCAAoB,IAAI;AAAA,MACjC,SAAS,CAAC,wCAAoB,IAAI;AAAA,MAClC,aAAa;AAAA,QACZ;AAAA,UACC,MAAM;AAAA,UACN,UAAU;AAAA,QACX;AAAA,MACD;AAAA,MACA,iBAAiB;AAAA,QAChB,SAAS;AAAA,MACV;AAAA,MACA,YAAY;AAAA,QACX;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,kBAAkB;AAAA,UAClB,SAAS;AAAA,YACR;AAAA,cACC,MAAM;AAAA,cACN,OAAO;AAAA,YACR;AAAA,YACA;AAAA,cACC,MAAM;AAAA,cACN,OAAO;AAAA,YACR;AAAA,YACA;AAAA,cACC,MAAM;AAAA,cACN,OAAO;AAAA,YACR;AAAA,UACD;AAAA,UACA,SAAS;AAAA,QACV;AAAA,QAEA,GAAG,yBAAK;AAAA,QACR,GAAG,yBAAK;AAAA,QACR,GAAG,yBAAK;AAAA,MACT;AAAA,IACD;AAEA,mBAAU;AAAA,MACT;AAAA,MACA;AAAA,IACD;AAAA;AACD;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../nodes/Microsoft/Sql/GenericFunctions.ts"],"sourcesContent":["import type { IResult } from 'mssql';\nimport mssql from 'mssql';\nimport type { IDataObject, INodeExecutionData } from 'n8n-workflow';\nimport { deepCopy } from 'n8n-workflow';\n\nimport { chunk, flatten } from '@utils/utilities';\n\nimport type { ITables, OperationInputData } from './interfaces';\n\n/**\n * Returns a copy of the item which only contains the json data and\n * of that only the defined properties\n *\n * @param {INodeExecutionData} item The item to copy\n * @param {string[]} properties The properties it should include\n */\nexport function copyInputItem(item: INodeExecutionData, properties: string[]): IDataObject {\n\t// Prepare the data to insert and copy it to be returned\n\tconst newItem: IDataObject = {};\n\tfor (const property of properties) {\n\t\tif (item.json[property] === undefined) {\n\t\t\tnewItem[property] = null;\n\t\t} else {\n\t\t\tnewItem[property] = deepCopy(item.json[property]);\n\t\t}\n\t}\n\treturn newItem;\n}\n\n/**\n * Creates an ITables with the columns for the operations\n *\n * @param {INodeExecutionData[]} items The items to extract the tables/columns for\n * @param {function} getNodeParam getter for the Node's Parameters\n */\nexport function createTableStruct(\n\t// eslint-disable-next-line @typescript-eslint/ban-types\n\tgetNodeParam: Function,\n\titems: INodeExecutionData[],\n\tadditionalProperties: string[] = [],\n\tkeyName?: string,\n): ITables {\n\treturn items.reduce((tables, item, index) => {\n\t\tconst table = getNodeParam('table', index) as string;\n\t\tconst columnString = getNodeParam('columns', index) as string;\n\t\tconst columns = columnString.split(',').map((column) => column.trim());\n\t\tconst itemCopy = copyInputItem(item, columns.concat(additionalProperties));\n\t\tconst keyParam = keyName ? (getNodeParam(keyName, index) as string) : undefined;\n\t\tif (tables[table] === undefined) {\n\t\t\ttables[table] = {};\n\t\t}\n\t\tif (tables[table][columnString] === undefined) {\n\t\t\ttables[table][columnString] = [];\n\t\t}\n\t\tif (keyName) {\n\t\t\titemCopy[keyName] = keyParam;\n\t\t}\n\t\ttables[table][columnString].push(itemCopy);\n\t\treturn tables;\n\t}, {} as ITables);\n}\n\n/**\n * Executes a queue of queries on given ITables.\n *\n * @param {ITables} tables The ITables to be processed.\n * @param {function} buildQueryQueue function that builds the queue of promises\n */\nexport async function executeQueryQueue(\n\ttables: ITables,\n\tbuildQueryQueue: (data: OperationInputData) => Array<Promise<object>>,\n): Promise<any[]> {\n\treturn await Promise.all(\n\t\tObject.keys(tables).map(async (table) => {\n\t\t\tconst columnsResults = Object.keys(tables[table]).map(async (columnString) => {\n\t\t\t\treturn await Promise.all(\n\t\t\t\t\tbuildQueryQueue({\n\t\t\t\t\t\ttable,\n\t\t\t\t\t\tcolumnString,\n\t\t\t\t\t\titems: tables[table][columnString],\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t\treturn await Promise.all(columnsResults);\n\t\t}),\n\t);\n}\n\nexport function formatColumns(columns: string) {\n\treturn columns\n\t\t.split(',')\n\t\t.map((column) => `[${column.trim()}]`)\n\t\t.join(', ');\n}\n\nexport function configurePool(credentials: IDataObject) {\n\tconst config = {\n\t\tserver: credentials.server as string,\n\t\tport: credentials.port as number,\n\t\tdatabase: credentials.database as string,\n\t\tuser: credentials.user as string,\n\t\tpassword: credentials.password as string,\n\t\tdomain: credentials.domain ? (credentials.domain as string) : undefined,\n\t\tconnectionTimeout: credentials.connectTimeout as number,\n\t\trequestTimeout: credentials.requestTimeout as number,\n\t\toptions: {\n\t\t\tencrypt: credentials.tls as boolean,\n\t\t\tenableArithAbort: false,\n\t\t\ttdsVersion: credentials.tdsVersion as string,\n\t\t\ttrustServerCertificate: credentials.allowUnauthorizedCerts as boolean,\n\t\t},\n\t};\n\n\treturn new mssql.ConnectionPool(config);\n}\n\nconst escapeTableName = (table: string) => {\n\ttable = table.trim();\n\tif (table.startsWith('[') && table.endsWith(']')) {\n\t\treturn table;\n\t} else {\n\t\treturn `[${table}]`;\n\t}\n};\n\nconst MSSQL_PARAMETER_LIMIT = 2100;\n\nexport function mssqlChunk(rows: IDataObject[]): IDataObject[][] {\n\tconst chunked: IDataObject[][] = [[]];\n\tlet currentParamCount = 0;\n\n\tfor (const row of rows) {\n\t\tconst rowValues = Object.values(row);\n\t\tconst valueCount = rowValues.length;\n\n\t\tif (currentParamCount + valueCount >= MSSQL_PARAMETER_LIMIT) {\n\t\t\tchunked.push([]);\n\t\t\tcurrentParamCount = 0;\n\t\t}\n\n\t\tchunked[chunked.length - 1].push(row);\n\n\t\tcurrentParamCount += valueCount;\n\t}\n\n\treturn chunked;\n}\n\nexport async function insertOperation(tables: ITables, pool: mssql.ConnectionPool) {\n\treturn await executeQueryQueue(\n\t\ttables,\n\t\t({ table, columnString, items }: OperationInputData): Array<Promise<object>> => {\n\t\t\treturn mssqlChunk(items).map(async (insertValues) => {\n\t\t\t\tconst request = pool.request();\n\n\t\t\t\tconst valuesPlaceholder = [];\n\n\t\t\t\tfor (const [rIndex, entry] of insertValues.entries()) {\n\t\t\t\t\tconst row = Object.values(entry);\n\t\t\t\t\tvaluesPlaceholder.push(`(${row.map((_, vIndex) => `@r${rIndex}v${vIndex}`).join(', ')})`);\n\t\t\t\t\tfor (const [vIndex, value] of row.entries()) {\n\t\t\t\t\t\trequest.input(`r${rIndex}v${vIndex}`, value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst query = `INSERT INTO ${escapeTableName(table)} (${formatColumns(\n\t\t\t\t\tcolumnString,\n\t\t\t\t)}) VALUES ${valuesPlaceholder.join(', ')};`;\n\n\t\t\t\treturn await request.query(query);\n\t\t\t});\n\t\t},\n\t);\n}\n\nexport async function updateOperation(tables: ITables, pool: mssql.ConnectionPool) {\n\treturn await executeQueryQueue(\n\t\ttables,\n\t\t({ table, columnString, items }: OperationInputData): Array<Promise<object>> => {\n\t\t\treturn items.map(async (item) => {\n\t\t\t\tconst request = pool.request();\n\t\t\t\tconst columns = columnString.split(',').map((column) => column.trim());\n\n\t\t\t\tconst setValues: string[] = [];\n\t\t\t\tconst condition = `${item.updateKey} = @condition`;\n\t\t\t\trequest.input('condition', item[item.updateKey as string]);\n\n\t\t\t\tfor (const [index, col] of columns.entries()) {\n\t\t\t\t\tsetValues.push(`[${col}] = @v${index}`);\n\t\t\t\t\trequest.input(`v${index}`, item[col]);\n\t\t\t\t}\n\n\t\t\t\tconst query = `UPDATE ${escapeTableName(table)} SET ${setValues.join(\n\t\t\t\t\t', ',\n\t\t\t\t)} WHERE ${condition};`;\n\n\t\t\t\treturn await request.query(query);\n\t\t\t});\n\t\t},\n\t);\n}\n\nexport async function deleteOperation(tables: ITables, pool: mssql.ConnectionPool) {\n\tconst queriesResults = await Promise.all(\n\t\tObject.keys(tables).map(async (table) => {\n\t\t\tconst deleteKeyResults = Object.keys(tables[table]).map(async (deleteKey) => {\n\t\t\t\tconst deleteItemsList = chunk(\n\t\t\t\t\ttables[table][deleteKey].map((item) =>\n\t\t\t\t\t\tcopyInputItem(item as INodeExecutionData, [deleteKey]),\n\t\t\t\t\t),\n\t\t\t\t\t1000,\n\t\t\t\t);\n\t\t\t\tconst queryQueue = deleteItemsList.map(async (deleteValues) => {\n\t\t\t\t\tconst request = pool.request();\n\t\t\t\t\tconst valuesPlaceholder: string[] = [];\n\n\t\t\t\t\tfor (const [index, entry] of deleteValues.entries()) {\n\t\t\t\t\t\tvaluesPlaceholder.push(`@v${index}`);\n\t\t\t\t\t\trequest.input(`v${index}`, entry[deleteKey]);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst query = `DELETE FROM ${escapeTableName(\n\t\t\t\t\t\ttable,\n\t\t\t\t\t)} WHERE [${deleteKey}] IN (${valuesPlaceholder.join(', ')});`;\n\n\t\t\t\t\treturn await request.query(query);\n\t\t\t\t});\n\t\t\t\treturn await Promise.all(queryQueue);\n\t\t\t});\n\t\t\treturn await Promise.all(deleteKeyResults);\n\t\t}),\n\t);\n\n\treturn flatten(queriesResults).reduce(\n\t\t(acc: number, resp: mssql.IResult<object>): number =>\n\t\t\t(acc += resp.rowsAffected.reduce((sum, val) => (sum += val))),\n\t\t0,\n\t);\n}\n\nexport async function executeSqlQueryAndPrepareResults(\n\tpool: mssql.ConnectionPool,\n\trawQuery: string,\n\titemIndex: number,\n): Promise<INodeExecutionData[]> {\n\tconst rawResult: IResult<any> = await pool.request().query(rawQuery);\n\tconst { recordsets, rowsAffected } = rawResult;\n\tif (Array.isArray(recordsets) && recordsets.length > 0) {\n\t\tconst result: IDataObject[] = recordsets.length > 1 ? flatten(recordsets) : recordsets[0];\n\n\t\treturn result.map((entry) => ({\n\t\t\tjson: entry,\n\t\t\tpairedItem: [{ item: itemIndex }],\n\t\t}));\n\t} else if (rowsAffected && rowsAffected.length > 0) {\n\t\t// Handle non-SELECT queries (e.g., INSERT, UPDATE, DELETE)\n\t\treturn rowsAffected.map((affectedRows, idx) => ({\n\t\t\tjson: {\n\t\t\t\tmessage: `Query ${idx + 1} executed successfully`,\n\t\t\t\trowsAffected: affectedRows,\n\t\t\t},\n\t\t\tpairedItem: [{ item: itemIndex }],\n\t\t}));\n\t} else {\n\t\treturn [\n\t\t\t{\n\t\t\t\tjson: { message: 'Query executed successfully, but no rows were affected' },\n\t\t\t\tpairedItem: [{ item: itemIndex }],\n\t\t\t},\n\t\t];\n\t}\n}\n"],"mappings":"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","names":["mssql"]}
|
|
1
|
+
{"version":3,"sources":["../../../../nodes/Microsoft/Sql/GenericFunctions.ts"],"sourcesContent":["import type { IResult } from 'mssql';\nimport mssql from 'mssql';\nimport type { IDataObject, INodeExecutionData } from 'n8n-workflow';\nimport { deepCopy } from 'n8n-workflow';\n\nimport { chunk, flatten } from '@utils/utilities';\n\nimport type { ITables, OperationInputData } from './interfaces';\n\n/**\n * Returns a copy of the item which only contains the json data and\n * of that only the defined properties\n *\n * @param {INodeExecutionData} item The item to copy\n * @param {string[]} properties The properties it should include\n */\nexport function copyInputItem(item: INodeExecutionData, properties: string[]): IDataObject {\n\t// Prepare the data to insert and copy it to be returned\n\tconst newItem: IDataObject = {};\n\tfor (const property of properties) {\n\t\tif (item.json[property] === undefined) {\n\t\t\tnewItem[property] = null;\n\t\t} else {\n\t\t\tnewItem[property] = deepCopy(item.json[property]);\n\t\t}\n\t}\n\treturn newItem;\n}\n\n/**\n * Creates an ITables with the columns for the operations\n *\n * @param {INodeExecutionData[]} items The items to extract the tables/columns for\n * @param {function} getNodeParam getter for the Node's Parameters\n */\nexport function createTableStruct(\n\t// eslint-disable-next-line @typescript-eslint/no-restricted-types\n\tgetNodeParam: Function,\n\titems: INodeExecutionData[],\n\tadditionalProperties: string[] = [],\n\tkeyName?: string,\n): ITables {\n\treturn items.reduce((tables, item, index) => {\n\t\tconst table = getNodeParam('table', index) as string;\n\t\tconst columnString = getNodeParam('columns', index) as string;\n\t\tconst columns = columnString.split(',').map((column) => column.trim());\n\t\tconst itemCopy = copyInputItem(item, columns.concat(additionalProperties));\n\t\tconst keyParam = keyName ? (getNodeParam(keyName, index) as string) : undefined;\n\t\tif (tables[table] === undefined) {\n\t\t\ttables[table] = {};\n\t\t}\n\t\tif (tables[table][columnString] === undefined) {\n\t\t\ttables[table][columnString] = [];\n\t\t}\n\t\tif (keyName) {\n\t\t\titemCopy[keyName] = keyParam;\n\t\t}\n\t\ttables[table][columnString].push(itemCopy);\n\t\treturn tables;\n\t}, {} as ITables);\n}\n\n/**\n * Executes a queue of queries on given ITables.\n *\n * @param {ITables} tables The ITables to be processed.\n * @param {function} buildQueryQueue function that builds the queue of promises\n */\nexport async function executeQueryQueue(\n\ttables: ITables,\n\tbuildQueryQueue: (data: OperationInputData) => Array<Promise<object>>,\n): Promise<any[]> {\n\treturn await Promise.all(\n\t\tObject.keys(tables).map(async (table) => {\n\t\t\tconst columnsResults = Object.keys(tables[table]).map(async (columnString) => {\n\t\t\t\treturn await Promise.all(\n\t\t\t\t\tbuildQueryQueue({\n\t\t\t\t\t\ttable,\n\t\t\t\t\t\tcolumnString,\n\t\t\t\t\t\titems: tables[table][columnString],\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t\treturn await Promise.all(columnsResults);\n\t\t}),\n\t);\n}\n\nexport function formatColumns(columns: string) {\n\treturn columns\n\t\t.split(',')\n\t\t.map((column) => `[${column.trim()}]`)\n\t\t.join(', ');\n}\n\nexport function configurePool(credentials: IDataObject) {\n\tconst config = {\n\t\tserver: credentials.server as string,\n\t\tport: credentials.port as number,\n\t\tdatabase: credentials.database as string,\n\t\tuser: credentials.user as string,\n\t\tpassword: credentials.password as string,\n\t\tdomain: credentials.domain ? (credentials.domain as string) : undefined,\n\t\tconnectionTimeout: credentials.connectTimeout as number,\n\t\trequestTimeout: credentials.requestTimeout as number,\n\t\toptions: {\n\t\t\tencrypt: credentials.tls as boolean,\n\t\t\tenableArithAbort: false,\n\t\t\ttdsVersion: credentials.tdsVersion as string,\n\t\t\ttrustServerCertificate: credentials.allowUnauthorizedCerts as boolean,\n\t\t},\n\t};\n\n\treturn new mssql.ConnectionPool(config);\n}\n\nconst escapeTableName = (table: string) => {\n\ttable = table.trim();\n\tif (table.startsWith('[') && table.endsWith(']')) {\n\t\treturn table;\n\t} else {\n\t\treturn `[${table}]`;\n\t}\n};\n\nconst MSSQL_PARAMETER_LIMIT = 2100;\n\nexport function mssqlChunk(rows: IDataObject[]): IDataObject[][] {\n\tconst chunked: IDataObject[][] = [[]];\n\tlet currentParamCount = 0;\n\n\tfor (const row of rows) {\n\t\tconst rowValues = Object.values(row);\n\t\tconst valueCount = rowValues.length;\n\n\t\tif (currentParamCount + valueCount >= MSSQL_PARAMETER_LIMIT) {\n\t\t\tchunked.push([]);\n\t\t\tcurrentParamCount = 0;\n\t\t}\n\n\t\tchunked[chunked.length - 1].push(row);\n\n\t\tcurrentParamCount += valueCount;\n\t}\n\n\treturn chunked;\n}\n\nexport async function insertOperation(tables: ITables, pool: mssql.ConnectionPool) {\n\treturn await executeQueryQueue(\n\t\ttables,\n\t\t({ table, columnString, items }: OperationInputData): Array<Promise<object>> => {\n\t\t\treturn mssqlChunk(items).map(async (insertValues) => {\n\t\t\t\tconst request = pool.request();\n\n\t\t\t\tconst valuesPlaceholder = [];\n\n\t\t\t\tfor (const [rIndex, entry] of insertValues.entries()) {\n\t\t\t\t\tconst row = Object.values(entry);\n\t\t\t\t\tvaluesPlaceholder.push(`(${row.map((_, vIndex) => `@r${rIndex}v${vIndex}`).join(', ')})`);\n\t\t\t\t\tfor (const [vIndex, value] of row.entries()) {\n\t\t\t\t\t\trequest.input(`r${rIndex}v${vIndex}`, value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst query = `INSERT INTO ${escapeTableName(table)} (${formatColumns(\n\t\t\t\t\tcolumnString,\n\t\t\t\t)}) VALUES ${valuesPlaceholder.join(', ')};`;\n\n\t\t\t\treturn await request.query(query);\n\t\t\t});\n\t\t},\n\t);\n}\n\nexport async function updateOperation(tables: ITables, pool: mssql.ConnectionPool) {\n\treturn await executeQueryQueue(\n\t\ttables,\n\t\t({ table, columnString, items }: OperationInputData): Array<Promise<object>> => {\n\t\t\treturn items.map(async (item) => {\n\t\t\t\tconst request = pool.request();\n\t\t\t\tconst columns = columnString.split(',').map((column) => column.trim());\n\n\t\t\t\tconst setValues: string[] = [];\n\t\t\t\tconst condition = `${item.updateKey} = @condition`;\n\t\t\t\trequest.input('condition', item[item.updateKey as string]);\n\n\t\t\t\tfor (const [index, col] of columns.entries()) {\n\t\t\t\t\tsetValues.push(`[${col}] = @v${index}`);\n\t\t\t\t\trequest.input(`v${index}`, item[col]);\n\t\t\t\t}\n\n\t\t\t\tconst query = `UPDATE ${escapeTableName(table)} SET ${setValues.join(\n\t\t\t\t\t', ',\n\t\t\t\t)} WHERE ${condition};`;\n\n\t\t\t\treturn await request.query(query);\n\t\t\t});\n\t\t},\n\t);\n}\n\nexport async function deleteOperation(tables: ITables, pool: mssql.ConnectionPool) {\n\tconst queriesResults = await Promise.all(\n\t\tObject.keys(tables).map(async (table) => {\n\t\t\tconst deleteKeyResults = Object.keys(tables[table]).map(async (deleteKey) => {\n\t\t\t\tconst deleteItemsList = chunk(\n\t\t\t\t\ttables[table][deleteKey].map((item) =>\n\t\t\t\t\t\tcopyInputItem(item as INodeExecutionData, [deleteKey]),\n\t\t\t\t\t),\n\t\t\t\t\t1000,\n\t\t\t\t);\n\t\t\t\tconst queryQueue = deleteItemsList.map(async (deleteValues) => {\n\t\t\t\t\tconst request = pool.request();\n\t\t\t\t\tconst valuesPlaceholder: string[] = [];\n\n\t\t\t\t\tfor (const [index, entry] of deleteValues.entries()) {\n\t\t\t\t\t\tvaluesPlaceholder.push(`@v${index}`);\n\t\t\t\t\t\trequest.input(`v${index}`, entry[deleteKey]);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst query = `DELETE FROM ${escapeTableName(\n\t\t\t\t\t\ttable,\n\t\t\t\t\t)} WHERE [${deleteKey}] IN (${valuesPlaceholder.join(', ')});`;\n\n\t\t\t\t\treturn await request.query(query);\n\t\t\t\t});\n\t\t\t\treturn await Promise.all(queryQueue);\n\t\t\t});\n\t\t\treturn await Promise.all(deleteKeyResults);\n\t\t}),\n\t);\n\n\treturn flatten(queriesResults).reduce(\n\t\t(acc: number, resp: mssql.IResult<object>): number =>\n\t\t\t(acc += resp.rowsAffected.reduce((sum, val) => (sum += val))),\n\t\t0,\n\t);\n}\n\nexport async function executeSqlQueryAndPrepareResults(\n\tpool: mssql.ConnectionPool,\n\trawQuery: string,\n\titemIndex: number,\n): Promise<INodeExecutionData[]> {\n\tconst rawResult: IResult<any> = await pool.request().query(rawQuery);\n\tconst { recordsets, rowsAffected } = rawResult;\n\tif (Array.isArray(recordsets) && recordsets.length > 0) {\n\t\tconst result: IDataObject[] = recordsets.length > 1 ? flatten(recordsets) : recordsets[0];\n\n\t\treturn result.map((entry) => ({\n\t\t\tjson: entry,\n\t\t\tpairedItem: [{ item: itemIndex }],\n\t\t}));\n\t} else if (rowsAffected && rowsAffected.length > 0) {\n\t\t// Handle non-SELECT queries (e.g., INSERT, UPDATE, DELETE)\n\t\treturn rowsAffected.map((affectedRows, idx) => ({\n\t\t\tjson: {\n\t\t\t\tmessage: `Query ${idx + 1} executed successfully`,\n\t\t\t\trowsAffected: affectedRows,\n\t\t\t},\n\t\t\tpairedItem: [{ item: itemIndex }],\n\t\t}));\n\t} else {\n\t\treturn [\n\t\t\t{\n\t\t\t\tjson: { message: 'Query executed successfully, but no rows were affected' },\n\t\t\t\tpairedItem: [{ item: itemIndex }],\n\t\t\t},\n\t\t];\n\t}\n}\n"],"mappings":"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","names":["mssql"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../nodes/Onfleet/Onfleet.node.ts"],"sourcesContent":["import {\n\ttype IExecuteFunctions,\n\ttype ICredentialsDecrypted,\n\ttype ICredentialTestFunctions,\n\ttype IDataObject,\n\ttype INodeCredentialTestResult,\n\ttype INodeExecutionData,\n\ttype INodeType,\n\ttype INodeTypeDescription,\n\ttype IRequestOptions,\n\tNodeConnectionTypes,\n} from 'n8n-workflow';\n\nimport { adminFields, adminOperations } from './descriptions/AdministratorDescription';\nimport { containerFields, containerOperations } from './descriptions/ContainerDescription';\nimport { destinationFields, destinationOperations } from './descriptions/DestinationDescription';\nimport { hubFields, hubOperations } from './descriptions/HubDescription';\nimport { organizationFields, organizationOperations } from './descriptions/OrganizationDescription';\nimport { recipientFields, recipientOperations } from './descriptions/RecipientDescription';\nimport { taskFields, taskOperations } from './descriptions/TaskDescription';\nimport { teamFields, teamOperations } from './descriptions/TeamDescription';\nimport { workerFields, workerOperations } from './descriptions/WorkerDescription';\nimport { resourceLoaders } from './GenericFunctions';\nimport { Onfleet as OnfleetMethods } from './Onfleet';\nexport class Onfleet implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Onfleet',\n\t\tname: 'onfleet',\n\t\ticon: 'file:Onfleet.svg',\n\t\tgroup: ['input'],\n\t\tversion: 1,\n\t\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\t\tdescription: 'Consume Onfleet API',\n\t\tdefaults: {\n\t\t\tname: 'Onfleet',\n\t\t},\n\t\tusableAsTool: true,\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'onfleetApi',\n\t\t\t\trequired: true,\n\t\t\t\ttestedBy: 'onfleetApiTest',\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t// List of option resources\n\t\t\t{\n\t\t\t\tdisplayName: 'Resource',\n\t\t\t\tname: 'resource',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Admin',\n\t\t\t\t\t\tvalue: 'admin',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Container',\n\t\t\t\t\t\tvalue: 'container',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Destination',\n\t\t\t\t\t\tvalue: 'destination',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Hub',\n\t\t\t\t\t\tvalue: 'hub',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Organization',\n\t\t\t\t\t\tvalue: 'organization',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Recipient',\n\t\t\t\t\t\tvalue: 'recipient',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Task',\n\t\t\t\t\t\tvalue: 'task',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Team',\n\t\t\t\t\t\tvalue: 'team',\n\t\t\t\t\t},\n\t\t\t\t\t// {\n\t\t\t\t\t// \tname: 'Webhook',\n\t\t\t\t\t// \tvalue: 'webhook',\n\t\t\t\t\t// },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Worker',\n\t\t\t\t\t\tvalue: 'worker',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'task',\n\t\t\t\tdescription: 'The resource to perform operations on',\n\t\t\t},\n\t\t\t// Operations & fields\n\t\t\t...adminOperations,\n\t\t\t...adminFields,\n\t\t\t...containerOperations,\n\t\t\t...containerFields,\n\t\t\t...destinationOperations,\n\t\t\t...destinationFields,\n\t\t\t...hubOperations,\n\t\t\t...hubFields,\n\t\t\t...organizationOperations,\n\t\t\t...organizationFields,\n\t\t\t...recipientOperations,\n\t\t\t...recipientFields,\n\t\t\t...taskOperations,\n\t\t\t...taskFields,\n\t\t\t...teamOperations,\n\t\t\t...teamFields,\n\t\t\t// ...webhookOperations,\n\t\t\t// ...webhookFields,\n\t\t\t...workerOperations,\n\t\t\t...workerFields,\n\t\t],\n\t};\n\n\tmethods = {\n\t\tcredentialTest: {\n\t\t\tasync onfleetApiTest(\n\t\t\t\tthis: ICredentialTestFunctions,\n\t\t\t\tcredential: ICredentialsDecrypted,\n\t\t\t): Promise<INodeCredentialTestResult> {\n\t\t\t\tconst credentials = credential.data as IDataObject;\n\n\t\t\t\tconst options: IRequestOptions = {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t'User-Agent': 'n8n-onfleet',\n\t\t\t\t\t},\n\t\t\t\t\tauth: {\n\t\t\t\t\t\tuser: credentials.apiKey as string,\n\t\t\t\t\t\tpass: '',\n\t\t\t\t\t},\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\turi: 'https://onfleet.com/api/v2/auth/test',\n\t\t\t\t\tjson: true,\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tawait this.helpers.request(options);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: 'OK',\n\t\t\t\t\t\tmessage: 'Authentication successful',\n\t\t\t\t\t};\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: 'Error',\n\t\t\t\t\t\tmessage: `Auth settings are not valid: ${error}`,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tloadOptions: resourceLoaders,\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst resource = this.getNodeParameter('resource', 0);\n\t\tconst operation = this.getNodeParameter('operation', 0);\n\t\tconst items = this.getInputData();\n\n\t\t// eslint-disable-next-line @typescript-eslint/
|
|
1
|
+
{"version":3,"sources":["../../../nodes/Onfleet/Onfleet.node.ts"],"sourcesContent":["import {\n\ttype IExecuteFunctions,\n\ttype ICredentialsDecrypted,\n\ttype ICredentialTestFunctions,\n\ttype IDataObject,\n\ttype INodeCredentialTestResult,\n\ttype INodeExecutionData,\n\ttype INodeType,\n\ttype INodeTypeDescription,\n\ttype IRequestOptions,\n\tNodeConnectionTypes,\n} from 'n8n-workflow';\n\nimport { adminFields, adminOperations } from './descriptions/AdministratorDescription';\nimport { containerFields, containerOperations } from './descriptions/ContainerDescription';\nimport { destinationFields, destinationOperations } from './descriptions/DestinationDescription';\nimport { hubFields, hubOperations } from './descriptions/HubDescription';\nimport { organizationFields, organizationOperations } from './descriptions/OrganizationDescription';\nimport { recipientFields, recipientOperations } from './descriptions/RecipientDescription';\nimport { taskFields, taskOperations } from './descriptions/TaskDescription';\nimport { teamFields, teamOperations } from './descriptions/TeamDescription';\nimport { workerFields, workerOperations } from './descriptions/WorkerDescription';\nimport { resourceLoaders } from './GenericFunctions';\nimport { Onfleet as OnfleetMethods } from './Onfleet';\nexport class Onfleet implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Onfleet',\n\t\tname: 'onfleet',\n\t\ticon: 'file:Onfleet.svg',\n\t\tgroup: ['input'],\n\t\tversion: 1,\n\t\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\t\tdescription: 'Consume Onfleet API',\n\t\tdefaults: {\n\t\t\tname: 'Onfleet',\n\t\t},\n\t\tusableAsTool: true,\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'onfleetApi',\n\t\t\t\trequired: true,\n\t\t\t\ttestedBy: 'onfleetApiTest',\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t// List of option resources\n\t\t\t{\n\t\t\t\tdisplayName: 'Resource',\n\t\t\t\tname: 'resource',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Admin',\n\t\t\t\t\t\tvalue: 'admin',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Container',\n\t\t\t\t\t\tvalue: 'container',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Destination',\n\t\t\t\t\t\tvalue: 'destination',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Hub',\n\t\t\t\t\t\tvalue: 'hub',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Organization',\n\t\t\t\t\t\tvalue: 'organization',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Recipient',\n\t\t\t\t\t\tvalue: 'recipient',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Task',\n\t\t\t\t\t\tvalue: 'task',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Team',\n\t\t\t\t\t\tvalue: 'team',\n\t\t\t\t\t},\n\t\t\t\t\t// {\n\t\t\t\t\t// \tname: 'Webhook',\n\t\t\t\t\t// \tvalue: 'webhook',\n\t\t\t\t\t// },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Worker',\n\t\t\t\t\t\tvalue: 'worker',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'task',\n\t\t\t\tdescription: 'The resource to perform operations on',\n\t\t\t},\n\t\t\t// Operations & fields\n\t\t\t...adminOperations,\n\t\t\t...adminFields,\n\t\t\t...containerOperations,\n\t\t\t...containerFields,\n\t\t\t...destinationOperations,\n\t\t\t...destinationFields,\n\t\t\t...hubOperations,\n\t\t\t...hubFields,\n\t\t\t...organizationOperations,\n\t\t\t...organizationFields,\n\t\t\t...recipientOperations,\n\t\t\t...recipientFields,\n\t\t\t...taskOperations,\n\t\t\t...taskFields,\n\t\t\t...teamOperations,\n\t\t\t...teamFields,\n\t\t\t// ...webhookOperations,\n\t\t\t// ...webhookFields,\n\t\t\t...workerOperations,\n\t\t\t...workerFields,\n\t\t],\n\t};\n\n\tmethods = {\n\t\tcredentialTest: {\n\t\t\tasync onfleetApiTest(\n\t\t\t\tthis: ICredentialTestFunctions,\n\t\t\t\tcredential: ICredentialsDecrypted,\n\t\t\t): Promise<INodeCredentialTestResult> {\n\t\t\t\tconst credentials = credential.data as IDataObject;\n\n\t\t\t\tconst options: IRequestOptions = {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t'User-Agent': 'n8n-onfleet',\n\t\t\t\t\t},\n\t\t\t\t\tauth: {\n\t\t\t\t\t\tuser: credentials.apiKey as string,\n\t\t\t\t\t\tpass: '',\n\t\t\t\t\t},\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\turi: 'https://onfleet.com/api/v2/auth/test',\n\t\t\t\t\tjson: true,\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tawait this.helpers.request(options);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: 'OK',\n\t\t\t\t\t\tmessage: 'Authentication successful',\n\t\t\t\t\t};\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: 'Error',\n\t\t\t\t\t\tmessage: `Auth settings are not valid: ${error}`,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tloadOptions: resourceLoaders,\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst resource = this.getNodeParameter('resource', 0);\n\t\tconst operation = this.getNodeParameter('operation', 0);\n\t\tconst items = this.getInputData();\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-restricted-types\n\t\tconst operations: { [key: string]: Function } = {\n\t\t\ttask: OnfleetMethods.executeTaskOperations,\n\t\t\tdestination: OnfleetMethods.executeDestinationOperations,\n\t\t\torganization: OnfleetMethods.executeOrganizationOperations,\n\t\t\tadmin: OnfleetMethods.executeAdministratorOperations,\n\t\t\trecipient: OnfleetMethods.executeRecipientOperations,\n\t\t\thub: OnfleetMethods.executeHubOperations,\n\t\t\tworker: OnfleetMethods.executeWorkerOperations,\n\t\t\twebhook: OnfleetMethods.executeWebhookOperations,\n\t\t\tcontainer: OnfleetMethods.executeContainerOperations,\n\t\t\tteam: OnfleetMethods.executeTeamOperations,\n\t\t};\n\n\t\tconst responseData = await operations[resource].call(this, `${resource}s`, operation, items);\n\n\t\t// Map data to n8n data\n\t\treturn [this.helpers.returnJsonArray(responseData as IDataObject)];\n\t}\n}\n"],"mappings":"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","names":["OnfleetMethods"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../nodes/Postgres/v1/genericFunctions.ts"],"sourcesContent":["import { ApplicationError } from 'n8n-workflow';\nimport type { IExecuteFunctions, IDataObject, INodeExecutionData, JsonObject } from 'n8n-workflow';\nimport type pgPromise from 'pg-promise';\nimport type pg from 'pg-promise/typescript/pg-subset';\n\nimport { getResolvables } from '@utils/utilities';\n\nimport type { PgpDatabase } from '../v2/helpers/interfaces';\n\n/**\n * Returns of a shallow copy of the items which only contains the json data and\n * of that only the define properties\n *\n * @param {INodeExecutionData[]} items The items to copy\n * @param {string[]} properties The properties it should include\n */\nexport function getItemsCopy(\n\titems: INodeExecutionData[],\n\tproperties: string[],\n\tguardedColumns?: { [key: string]: string },\n): IDataObject[] {\n\tlet newItem: IDataObject;\n\treturn items.map((item) => {\n\t\tnewItem = {};\n\t\tif (guardedColumns) {\n\t\t\tObject.keys(guardedColumns).forEach((column) => {\n\t\t\t\tnewItem[column] = item.json[guardedColumns[column]];\n\t\t\t});\n\t\t} else {\n\t\t\tfor (const property of properties) {\n\t\t\t\tnewItem[property] = item.json[property];\n\t\t\t}\n\t\t}\n\t\treturn newItem;\n\t});\n}\n\n/**\n * Returns of a shallow copy of the item which only contains the json data and\n * of that only the define properties\n *\n * @param {INodeExecutionData} item The item to copy\n * @param {string[]} properties The properties it should include\n */\nexport function getItemCopy(\n\titem: INodeExecutionData,\n\tproperties: string[],\n\tguardedColumns?: { [key: string]: string },\n): IDataObject {\n\tconst newItem: IDataObject = {};\n\tif (guardedColumns) {\n\t\tObject.keys(guardedColumns).forEach((column) => {\n\t\t\tnewItem[column] = item.json[guardedColumns[column]];\n\t\t});\n\t} else {\n\t\tfor (const property of properties) {\n\t\t\tnewItem[property] = item.json[property];\n\t\t}\n\t}\n\treturn newItem;\n}\n\n/**\n * Returns a returning clause from a comma separated string\n * @param {pgPromise.IMain<{}, pg.IClient>} pgp The pgPromise instance\n * @param string returning The comma separated string\n */\nexport function generateReturning(pgp: pgPromise.IMain<{}, pg.IClient>, returning: string): string {\n\treturn (\n\t\t' RETURNING ' +\n\t\treturning\n\t\t\t.split(',')\n\t\t\t.map((returnedField) => pgp.as.name(returnedField.trim()))\n\t\t\t.join(', ')\n\t);\n}\n\nexport function wrapData(data: IDataObject[]): INodeExecutionData[] {\n\tif (!Array.isArray(data)) {\n\t\treturn [{ json: data }];\n\t}\n\treturn data.map((item) => ({\n\t\tjson: item,\n\t}));\n}\n\n/**\n * Executes the given SQL query on the database.\n *\n * @param {Function} getNodeParam The getter for the Node's parameters\n * @param {pgPromise.IMain<{}, pg.IClient>} pgp The pgPromise instance\n * @param {PgpDatabase} db The pgPromise database connection\n * @param {input[]} input The Node's input data\n */\nexport async function pgQuery(\n\t// eslint-disable-next-line @typescript-eslint/ban-types\n\tgetNodeParam: Function,\n\tpgp: pgPromise.IMain<{}, pg.IClient>,\n\tdb: PgpDatabase,\n\titems: INodeExecutionData[],\n\tcontinueOnFail: boolean,\n\toverrideMode?: string,\n): Promise<IDataObject[]> {\n\tconst additionalFields = getNodeParam('additionalFields', 0) as IDataObject;\n\n\tlet valuesArray = [] as string[][];\n\tif (additionalFields.queryParams) {\n\t\tconst propertiesString = additionalFields.queryParams as string;\n\t\tconst properties = propertiesString.split(',').map((column) => column.trim());\n\t\tconst paramsItems = getItemsCopy(items, properties);\n\t\tvaluesArray = paramsItems.map((row) => properties.map((col) => row[col])) as string[][];\n\t}\n\n\tconst allQueries = [] as Array<{ query: string; values?: string[] }>;\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst query = getNodeParam('query', i) as string;\n\t\tconst values = valuesArray[i];\n\t\tconst queryFormat = { query, values };\n\t\tallQueries.push(queryFormat);\n\t}\n\n\tconst mode = overrideMode ? overrideMode : ((additionalFields.mode ?? 'multiple') as string);\n\tif (mode === 'multiple') {\n\t\treturn (await db.multi(pgp.helpers.concat(allQueries))).flat(1);\n\t} else if (mode === 'transaction') {\n\t\treturn await db.tx(async (t) => {\n\t\t\tconst result: IDataObject[] = [];\n\t\t\tfor (let i = 0; i < allQueries.length; i++) {\n\t\t\t\ttry {\n\t\t\t\t\tArray.prototype.push.apply(\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tawait t.any(allQueries[i].query, allQueries[i].values),\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\t...items[i].json,\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t});\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t} else if (mode === 'independently') {\n\t\treturn await db.task(async (t) => {\n\t\t\tconst result: IDataObject[] = [];\n\t\t\tfor (let i = 0; i < allQueries.length; i++) {\n\t\t\t\ttry {\n\t\t\t\t\tArray.prototype.push.apply(\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tawait t.any(allQueries[i].query, allQueries[i].values),\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\t...items[i].json,\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t}\n\tthrow new ApplicationError('multiple, independently or transaction are valid options', {\n\t\tlevel: 'warning',\n\t});\n}\n\nexport async function pgQueryV2(\n\tthis: IExecuteFunctions,\n\tpgp: pgPromise.IMain<{}, pg.IClient>,\n\tdb: PgpDatabase,\n\titems: INodeExecutionData[],\n\tcontinueOnFail: boolean,\n\toptions?: {\n\t\toverrideMode?: string;\n\t\tresolveExpression?: boolean;\n\t},\n): Promise<IDataObject[]> {\n\tconst additionalFields = this.getNodeParameter('additionalFields', 0);\n\n\tlet valuesArray = [] as string[][];\n\tif (additionalFields.queryParams) {\n\t\tconst propertiesString = additionalFields.queryParams as string;\n\t\tconst properties = propertiesString.split(',').map((column) => column.trim());\n\t\tconst paramsItems = getItemsCopy(items, properties);\n\t\tvaluesArray = paramsItems.map((row) => properties.map((col) => row[col])) as string[][];\n\t}\n\n\ttype QueryWithValues = { query: string; values?: string[] };\n\tconst allQueries = new Array<QueryWithValues>();\n\tfor (let i = 0; i < items.length; i++) {\n\t\tlet query = this.getNodeParameter('query', i) as string;\n\n\t\tif (options?.resolveExpression) {\n\t\t\tfor (const resolvable of getResolvables(query)) {\n\t\t\t\tquery = query.replace(resolvable, this.evaluateExpression(resolvable, i) as string);\n\t\t\t}\n\t\t}\n\n\t\tconst values = valuesArray[i];\n\t\tconst queryFormat = { query, values };\n\t\tallQueries.push(queryFormat);\n\t}\n\n\tconst mode = options?.overrideMode\n\t\t? options.overrideMode\n\t\t: ((additionalFields.mode ?? 'multiple') as string);\n\tif (mode === 'multiple') {\n\t\treturn (await db.multi(pgp.helpers.concat(allQueries)))\n\t\t\t.map((result, i) => {\n\t\t\t\treturn this.helpers.constructExecutionMetaData(wrapData(result as IDataObject[]), {\n\t\t\t\t\titemData: { item: i },\n\t\t\t\t});\n\t\t\t})\n\t\t\t.flat();\n\t} else if (mode === 'transaction') {\n\t\treturn await db.tx(async (t) => {\n\t\t\tconst result: INodeExecutionData[] = [];\n\t\t\tfor (let i = 0; i < allQueries.length; i++) {\n\t\t\t\ttry {\n\t\t\t\t\tconst transactionResult = await t.any(allQueries[i].query, allQueries[i].values);\n\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\twrapData(transactionResult as IDataObject[]),\n\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t);\n\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tjson: { ...items[i].json },\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\tpairedItem: { item: i },\n\t\t\t\t\t} as INodeExecutionData);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t} else if (mode === 'independently') {\n\t\treturn await db.task(async (t) => {\n\t\t\tconst result: INodeExecutionData[] = [];\n\t\t\tfor (let i = 0; i < allQueries.length; i++) {\n\t\t\t\ttry {\n\t\t\t\t\tconst transactionResult = await t.any(allQueries[i].query, allQueries[i].values);\n\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\twrapData(transactionResult as IDataObject[]),\n\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t);\n\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tjson: { ...items[i].json },\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\tpairedItem: { item: i },\n\t\t\t\t\t} as INodeExecutionData);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t}\n\tthrow new ApplicationError('multiple, independently or transaction are valid options', {\n\t\tlevel: 'warning',\n\t});\n}\n\n/**\n * Inserts the given items into the database.\n *\n * @param {Function} getNodeParam The getter for the Node's parameters\n * @param {pgPromise.IMain<{}, pg.IClient>} pgp The pgPromise instance\n * @param {PgpDatabase} db The pgPromise database connection\n * @param {INodeExecutionData[]} items The items to be inserted\n */\nexport async function pgInsert(\n\t// eslint-disable-next-line @typescript-eslint/ban-types\n\tgetNodeParam: Function,\n\tpgp: pgPromise.IMain<{}, pg.IClient>,\n\tdb: PgpDatabase,\n\titems: INodeExecutionData[],\n\tcontinueOnFail: boolean,\n\toverrideMode?: string,\n): Promise<IDataObject[]> {\n\tconst table = getNodeParam('table', 0) as string;\n\tconst schema = getNodeParam('schema', 0) as string;\n\tconst columnString = getNodeParam('columns', 0) as string;\n\tconst guardedColumns: { [key: string]: string } = {};\n\n\tconst columns = columnString\n\t\t.split(',')\n\t\t.map((column) => column.trim().split(':'))\n\t\t.map(([name, cast], i) => {\n\t\t\tguardedColumns[`column${i}`] = name;\n\t\t\treturn { name, cast, prop: `column${i}` };\n\t\t});\n\n\tconst columnNames = columns.map((column) => column.name);\n\n\tconst cs = new pgp.helpers.ColumnSet(columns, { table: { table, schema } });\n\n\tconst additionalFields = getNodeParam('additionalFields', 0) as IDataObject;\n\tconst mode = overrideMode ? overrideMode : ((additionalFields.mode ?? 'multiple') as string);\n\n\tconst returning = generateReturning(pgp, getNodeParam('returnFields', 0) as string);\n\tif (mode === 'multiple') {\n\t\tconst query =\n\t\t\tpgp.helpers.insert(getItemsCopy(items, columnNames, guardedColumns), cs) + returning;\n\t\treturn await db.any(query);\n\t} else if (mode === 'transaction') {\n\t\treturn await db.tx(async (t) => {\n\t\t\tconst result: IDataObject[] = [];\n\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\ttry {\n\t\t\t\t\tresult.push(await t.one(pgp.helpers.insert(itemCopy, cs) + returning));\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\t...itemCopy,\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t});\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t} else if (mode === 'independently') {\n\t\treturn await db.task(async (t) => {\n\t\t\tconst result: IDataObject[] = [];\n\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\ttry {\n\t\t\t\t\tconst insertResult = await t.oneOrNone(pgp.helpers.insert(itemCopy, cs) + returning);\n\t\t\t\t\tif (insertResult !== null) {\n\t\t\t\t\t\tresult.push(insertResult as IDataObject);\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) {\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\t...itemCopy,\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tthrow new ApplicationError('multiple, independently or transaction are valid options', {\n\t\tlevel: 'warning',\n\t});\n}\n\n/**\n * Inserts the given items into the database.\n *\n * @param {Function} getNodeParam The getter for the Node's parameters\n * @param {pgPromise.IMain<{}, pg.IClient>} pgp The pgPromise instance\n * @param {PgpDatabase} db`` The pgPromise database connection\n * @param {INodeExecutionData[]} items The items to be inserted\n */\nexport async function pgInsertV2(\n\tthis: IExecuteFunctions,\n\tpgp: pgPromise.IMain<{}, pg.IClient>,\n\tdb: PgpDatabase,\n\titems: INodeExecutionData[],\n\tcontinueOnFail: boolean,\n\toverrideMode?: string,\n): Promise<IDataObject[]> {\n\tconst table = this.getNodeParameter('table', 0) as string;\n\tconst schema = this.getNodeParameter('schema', 0) as string;\n\tconst columnString = this.getNodeParameter('columns', 0) as string;\n\tconst guardedColumns: { [key: string]: string } = {};\n\n\tconst columns = columnString\n\t\t.split(',')\n\t\t.map((column) => column.trim().split(':'))\n\t\t.map(([name, cast], i) => {\n\t\t\tguardedColumns[`column${i}`] = name;\n\t\t\treturn { name, cast, prop: `column${i}` };\n\t\t});\n\n\tconst columnNames = columns.map((column) => column.name);\n\n\tconst cs = new pgp.helpers.ColumnSet(columns, { table: { table, schema } });\n\n\tconst additionalFields = this.getNodeParameter('additionalFields', 0);\n\tconst mode = overrideMode ? overrideMode : ((additionalFields.mode ?? 'multiple') as string);\n\n\tconst returning = generateReturning(pgp, this.getNodeParameter('returnFields', 0) as string);\n\tif (mode === 'multiple') {\n\t\tconst query =\n\t\t\tpgp.helpers.insert(getItemsCopy(items, columnNames, guardedColumns), cs) + returning;\n\t\tconst queryResult = await db.any(query);\n\t\treturn queryResult\n\t\t\t.map((result, i) => {\n\t\t\t\treturn this.helpers.constructExecutionMetaData(wrapData(result as IDataObject[]), {\n\t\t\t\t\titemData: { item: i },\n\t\t\t\t});\n\t\t\t})\n\t\t\t.flat();\n\t} else if (mode === 'transaction') {\n\t\treturn await db.tx(async (t) => {\n\t\t\tconst result: IDataObject[] = [];\n\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\ttry {\n\t\t\t\t\tconst insertResult = await t.one(pgp.helpers.insert(itemCopy, cs) + returning);\n\t\t\t\t\tresult.push(\n\t\t\t\t\t\t...this.helpers.constructExecutionMetaData(wrapData(insertResult as IDataObject[]), {\n\t\t\t\t\t\t\titemData: { item: i },\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tjson: { ...itemCopy },\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\tpairedItem: { item: i },\n\t\t\t\t\t} as INodeExecutionData);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t} else if (mode === 'independently') {\n\t\treturn await db.task(async (t) => {\n\t\t\tconst result: IDataObject[] = [];\n\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\ttry {\n\t\t\t\t\tconst insertResult = await t.oneOrNone(pgp.helpers.insert(itemCopy, cs) + returning);\n\t\t\t\t\tif (insertResult !== null) {\n\t\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\t\twrapData(insertResult as IDataObject[]),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\titemData: { item: i },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) {\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tjson: { ...itemCopy },\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\tpairedItem: { item: i },\n\t\t\t\t\t} as INodeExecutionData);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tthrow new ApplicationError('multiple, independently or transaction are valid options', {\n\t\tlevel: 'warning',\n\t});\n}\n\n/**\n * Updates the given items in the database.\n *\n * @param {Function} getNodeParam The getter for the Node's parameters\n * @param {pgPromise.IMain<{}, pg.IClient>} pgp The pgPromise instance\n * @param {PgpDatabase} db The pgPromise database connection\n * @param {INodeExecutionData[]} items The items to be updated\n */\nexport async function pgUpdate(\n\t// eslint-disable-next-line @typescript-eslint/ban-types\n\tgetNodeParam: Function,\n\tpgp: pgPromise.IMain<{}, pg.IClient>,\n\tdb: PgpDatabase,\n\titems: INodeExecutionData[],\n\tcontinueOnFail = false,\n): Promise<IDataObject[]> {\n\tconst table = getNodeParam('table', 0) as string;\n\tconst schema = getNodeParam('schema', 0) as string;\n\tconst updateKey = getNodeParam('updateKey', 0) as string;\n\tconst columnString = getNodeParam('columns', 0) as string;\n\tconst guardedColumns: { [key: string]: string } = {};\n\n\tconst columns: Array<{ name: string; cast: string; prop: string }> = columnString\n\t\t.split(',')\n\t\t.map((column) => column.trim().split(':'))\n\t\t.map(([name, cast], i) => {\n\t\t\tguardedColumns[`column${i}`] = name;\n\t\t\treturn { name, cast, prop: `column${i}` };\n\t\t});\n\n\tconst updateKeys = updateKey.split(',').map((key, i) => {\n\t\tconst [name, cast] = key.trim().split(':');\n\t\tconst targetCol = columns.find((column) => column.name === name);\n\t\tconst updateColumn = { name, cast, prop: targetCol ? targetCol.prop : `updateColumn${i}` };\n\t\tif (!targetCol) {\n\t\t\tguardedColumns[updateColumn.prop] = name;\n\t\t\tcolumns.unshift(updateColumn);\n\t\t} else if (!targetCol.cast) {\n\t\t\ttargetCol.cast = updateColumn.cast || targetCol.cast;\n\t\t}\n\t\treturn updateColumn;\n\t});\n\n\tconst additionalFields = getNodeParam('additionalFields', 0) as IDataObject;\n\tconst mode = additionalFields.mode ?? ('multiple' as string);\n\n\tconst cs = new pgp.helpers.ColumnSet(columns, { table: { table, schema } });\n\n\t// Prepare the data to update and copy it to be returned\n\tconst columnNames = columns.map((column) => column.name);\n\tconst updateItems = getItemsCopy(items, columnNames, guardedColumns);\n\n\tconst returning = generateReturning(pgp, getNodeParam('returnFields', 0) as string);\n\tif (mode === 'multiple') {\n\t\tconst query =\n\t\t\t(pgp.helpers.update(updateItems, cs) as string) +\n\t\t\t' WHERE ' +\n\t\t\tupdateKeys\n\t\t\t\t.map((entry) => {\n\t\t\t\t\tconst key = pgp.as.name(entry.name);\n\t\t\t\t\treturn 'v.' + key + ' = t.' + key;\n\t\t\t\t})\n\t\t\t\t.join(' AND ') +\n\t\t\treturning;\n\t\treturn await db.any(query);\n\t} else {\n\t\tconst where =\n\t\t\t' WHERE ' +\n\t\t\tupdateKeys\n\t\t\t\t// eslint-disable-next-line n8n-local-rules/no-interpolation-in-regular-string\n\t\t\t\t.map((entry) => pgp.as.name(entry.name) + ' = ${' + entry.prop + '}')\n\t\t\t\t.join(' AND ');\n\t\tif (mode === 'transaction') {\n\t\t\treturn await db.tx(async (t) => {\n\t\t\t\tconst result: IDataObject[] = [];\n\t\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tArray.prototype.push.apply(\n\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\tawait t.any(\n\t\t\t\t\t\t\t\t(pgp.helpers.update(itemCopy, cs) as string) +\n\t\t\t\t\t\t\t\t\tpgp.as.format(where, itemCopy) +\n\t\t\t\t\t\t\t\t\treturning,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t...itemCopy,\n\t\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t} else if (mode === 'independently') {\n\t\t\treturn await db.task(async (t) => {\n\t\t\t\tconst result: IDataObject[] = [];\n\t\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tArray.prototype.push.apply(\n\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\tawait t.any(\n\t\t\t\t\t\t\t\t(pgp.helpers.update(itemCopy, cs) as string) +\n\t\t\t\t\t\t\t\t\tpgp.as.format(where, itemCopy) +\n\t\t\t\t\t\t\t\t\treturning,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t...itemCopy,\n\t\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\t}\n\tthrow new ApplicationError('multiple, independently or transaction are valid options', {\n\t\tlevel: 'warning',\n\t});\n}\n\n/**\n * Updates the given items in the database.\n *\n * @param {Function} getNodeParam The getter for the Node's parameters\n * @param {pgPromise.IMain<{}, pg.IClient>} pgp The pgPromise instance\n * @param {PgpDatabase} db The pgPromise database connection\n * @param {INodeExecutionData[]} items The items to be updated\n */\nexport async function pgUpdateV2(\n\tthis: IExecuteFunctions,\n\tpgp: pgPromise.IMain<{}, pg.IClient>,\n\tdb: PgpDatabase,\n\titems: INodeExecutionData[],\n\tcontinueOnFail = false,\n): Promise<IDataObject[]> {\n\tconst table = this.getNodeParameter('table', 0) as string;\n\tconst schema = this.getNodeParameter('schema', 0) as string;\n\tconst updateKey = this.getNodeParameter('updateKey', 0) as string;\n\tconst columnString = this.getNodeParameter('columns', 0) as string;\n\tconst guardedColumns: { [key: string]: string } = {};\n\n\tconst columns: Array<{ name: string; cast: string; prop: string }> = columnString\n\t\t.split(',')\n\t\t.map((column) => column.trim().split(':'))\n\t\t.map(([name, cast], i) => {\n\t\t\tguardedColumns[`column${i}`] = name;\n\t\t\treturn { name, cast, prop: `column${i}` };\n\t\t});\n\n\tconst updateKeys = updateKey.split(',').map((key, i) => {\n\t\tconst [name, cast] = key.trim().split(':');\n\t\tconst targetCol = columns.find((column) => column.name === name);\n\t\tconst updateColumn = { name, cast, prop: targetCol ? targetCol.prop : `updateColumn${i}` };\n\t\tif (!targetCol) {\n\t\t\tguardedColumns[updateColumn.prop] = name;\n\t\t\tcolumns.unshift(updateColumn);\n\t\t} else if (!targetCol.cast) {\n\t\t\ttargetCol.cast = updateColumn.cast || targetCol.cast;\n\t\t}\n\t\treturn updateColumn;\n\t});\n\n\tconst additionalFields = this.getNodeParameter('additionalFields', 0);\n\tconst mode = additionalFields.mode ?? ('multiple' as string);\n\n\tconst cs = new pgp.helpers.ColumnSet(columns, { table: { table, schema } });\n\n\t// Prepare the data to update and copy it to be returned\n\tconst columnNames = columns.map((column) => column.name);\n\tconst updateItems = getItemsCopy(items, columnNames, guardedColumns);\n\n\tconst returning = generateReturning(pgp, this.getNodeParameter('returnFields', 0) as string);\n\tif (mode === 'multiple') {\n\t\tconst query =\n\t\t\t(pgp.helpers.update(updateItems, cs) as string) +\n\t\t\t' WHERE ' +\n\t\t\tupdateKeys\n\t\t\t\t.map((entry) => {\n\t\t\t\t\tconst key = pgp.as.name(entry.name);\n\t\t\t\t\treturn 'v.' + key + ' = t.' + key;\n\t\t\t\t})\n\t\t\t\t.join(' AND ') +\n\t\t\treturning;\n\t\tconst updateResult = await db.any(query);\n\t\treturn updateResult;\n\t} else {\n\t\tconst where =\n\t\t\t' WHERE ' +\n\t\t\tupdateKeys\n\t\t\t\t// eslint-disable-next-line n8n-local-rules/no-interpolation-in-regular-string\n\t\t\t\t.map((entry) => pgp.as.name(entry.name) + ' = ${' + entry.prop + '}')\n\t\t\t\t.join(' AND ');\n\t\tif (mode === 'transaction') {\n\t\t\treturn await db.tx(async (t) => {\n\t\t\t\tconst result: IDataObject[] = [];\n\t\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst transactionResult = await t.any(\n\t\t\t\t\t\t\t(pgp.helpers.update(itemCopy, cs) as string) +\n\t\t\t\t\t\t\t\tpgp.as.format(where, itemCopy) +\n\t\t\t\t\t\t\t\treturning,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\t\twrapData(transactionResult as IDataObject[]),\n\t\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t...itemCopy,\n\t\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t} else if (mode === 'independently') {\n\t\t\treturn await db.task(async (t) => {\n\t\t\t\tconst result: IDataObject[] = [];\n\t\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst independentResult = await t.any(\n\t\t\t\t\t\t\t(pgp.helpers.update(itemCopy, cs) as string) +\n\t\t\t\t\t\t\t\tpgp.as.format(where, itemCopy) +\n\t\t\t\t\t\t\t\treturning,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\t\twrapData(independentResult as IDataObject[]),\n\t\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\tjson: { ...items[i].json },\n\t\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\t\tpairedItem: { item: i },\n\t\t\t\t\t\t} as INodeExecutionData);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\t}\n\tthrow new ApplicationError('multiple, independently or transaction are valid options', {\n\t\tlevel: 'warning',\n\t});\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../nodes/Postgres/v1/genericFunctions.ts"],"sourcesContent":["import { ApplicationError } from 'n8n-workflow';\nimport type { IExecuteFunctions, IDataObject, INodeExecutionData, JsonObject } from 'n8n-workflow';\nimport type pgPromise from 'pg-promise';\nimport type pg from 'pg-promise/typescript/pg-subset';\n\nimport { getResolvables } from '@utils/utilities';\n\nimport type { PgpDatabase } from '../v2/helpers/interfaces';\n\n/**\n * Returns of a shallow copy of the items which only contains the json data and\n * of that only the define properties\n *\n * @param {INodeExecutionData[]} items The items to copy\n * @param {string[]} properties The properties it should include\n */\nexport function getItemsCopy(\n\titems: INodeExecutionData[],\n\tproperties: string[],\n\tguardedColumns?: { [key: string]: string },\n): IDataObject[] {\n\tlet newItem: IDataObject;\n\treturn items.map((item) => {\n\t\tnewItem = {};\n\t\tif (guardedColumns) {\n\t\t\tObject.keys(guardedColumns).forEach((column) => {\n\t\t\t\tnewItem[column] = item.json[guardedColumns[column]];\n\t\t\t});\n\t\t} else {\n\t\t\tfor (const property of properties) {\n\t\t\t\tnewItem[property] = item.json[property];\n\t\t\t}\n\t\t}\n\t\treturn newItem;\n\t});\n}\n\n/**\n * Returns of a shallow copy of the item which only contains the json data and\n * of that only the define properties\n *\n * @param {INodeExecutionData} item The item to copy\n * @param {string[]} properties The properties it should include\n */\nexport function getItemCopy(\n\titem: INodeExecutionData,\n\tproperties: string[],\n\tguardedColumns?: { [key: string]: string },\n): IDataObject {\n\tconst newItem: IDataObject = {};\n\tif (guardedColumns) {\n\t\tObject.keys(guardedColumns).forEach((column) => {\n\t\t\tnewItem[column] = item.json[guardedColumns[column]];\n\t\t});\n\t} else {\n\t\tfor (const property of properties) {\n\t\t\tnewItem[property] = item.json[property];\n\t\t}\n\t}\n\treturn newItem;\n}\n\n/**\n * Returns a returning clause from a comma separated string\n * @param {pgPromise.IMain<{}, pg.IClient>} pgp The pgPromise instance\n * @param string returning The comma separated string\n */\nexport function generateReturning(pgp: pgPromise.IMain<{}, pg.IClient>, returning: string): string {\n\treturn (\n\t\t' RETURNING ' +\n\t\treturning\n\t\t\t.split(',')\n\t\t\t.map((returnedField) => pgp.as.name(returnedField.trim()))\n\t\t\t.join(', ')\n\t);\n}\n\nexport function wrapData(data: IDataObject[]): INodeExecutionData[] {\n\tif (!Array.isArray(data)) {\n\t\treturn [{ json: data }];\n\t}\n\treturn data.map((item) => ({\n\t\tjson: item,\n\t}));\n}\n\n/**\n * Executes the given SQL query on the database.\n *\n * @param {Function} getNodeParam The getter for the Node's parameters\n * @param {pgPromise.IMain<{}, pg.IClient>} pgp The pgPromise instance\n * @param {PgpDatabase} db The pgPromise database connection\n * @param {input[]} input The Node's input data\n */\nexport async function pgQuery(\n\t// eslint-disable-next-line @typescript-eslint/no-restricted-types\n\tgetNodeParam: Function,\n\tpgp: pgPromise.IMain<{}, pg.IClient>,\n\tdb: PgpDatabase,\n\titems: INodeExecutionData[],\n\tcontinueOnFail: boolean,\n\toverrideMode?: string,\n): Promise<IDataObject[]> {\n\tconst additionalFields = getNodeParam('additionalFields', 0) as IDataObject;\n\n\tlet valuesArray = [] as string[][];\n\tif (additionalFields.queryParams) {\n\t\tconst propertiesString = additionalFields.queryParams as string;\n\t\tconst properties = propertiesString.split(',').map((column) => column.trim());\n\t\tconst paramsItems = getItemsCopy(items, properties);\n\t\tvaluesArray = paramsItems.map((row) => properties.map((col) => row[col])) as string[][];\n\t}\n\n\tconst allQueries = [] as Array<{ query: string; values?: string[] }>;\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst query = getNodeParam('query', i) as string;\n\t\tconst values = valuesArray[i];\n\t\tconst queryFormat = { query, values };\n\t\tallQueries.push(queryFormat);\n\t}\n\n\tconst mode = overrideMode ? overrideMode : ((additionalFields.mode ?? 'multiple') as string);\n\tif (mode === 'multiple') {\n\t\treturn (await db.multi(pgp.helpers.concat(allQueries))).flat(1);\n\t} else if (mode === 'transaction') {\n\t\treturn await db.tx(async (t) => {\n\t\t\tconst result: IDataObject[] = [];\n\t\t\tfor (let i = 0; i < allQueries.length; i++) {\n\t\t\t\ttry {\n\t\t\t\t\tArray.prototype.push.apply(\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tawait t.any(allQueries[i].query, allQueries[i].values),\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\t...items[i].json,\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t});\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t} else if (mode === 'independently') {\n\t\treturn await db.task(async (t) => {\n\t\t\tconst result: IDataObject[] = [];\n\t\t\tfor (let i = 0; i < allQueries.length; i++) {\n\t\t\t\ttry {\n\t\t\t\t\tArray.prototype.push.apply(\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tawait t.any(allQueries[i].query, allQueries[i].values),\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\t...items[i].json,\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t}\n\tthrow new ApplicationError('multiple, independently or transaction are valid options', {\n\t\tlevel: 'warning',\n\t});\n}\n\nexport async function pgQueryV2(\n\tthis: IExecuteFunctions,\n\tpgp: pgPromise.IMain<{}, pg.IClient>,\n\tdb: PgpDatabase,\n\titems: INodeExecutionData[],\n\tcontinueOnFail: boolean,\n\toptions?: {\n\t\toverrideMode?: string;\n\t\tresolveExpression?: boolean;\n\t},\n): Promise<IDataObject[]> {\n\tconst additionalFields = this.getNodeParameter('additionalFields', 0);\n\n\tlet valuesArray = [] as string[][];\n\tif (additionalFields.queryParams) {\n\t\tconst propertiesString = additionalFields.queryParams as string;\n\t\tconst properties = propertiesString.split(',').map((column) => column.trim());\n\t\tconst paramsItems = getItemsCopy(items, properties);\n\t\tvaluesArray = paramsItems.map((row) => properties.map((col) => row[col])) as string[][];\n\t}\n\n\ttype QueryWithValues = { query: string; values?: string[] };\n\tconst allQueries = new Array<QueryWithValues>();\n\tfor (let i = 0; i < items.length; i++) {\n\t\tlet query = this.getNodeParameter('query', i) as string;\n\n\t\tif (options?.resolveExpression) {\n\t\t\tfor (const resolvable of getResolvables(query)) {\n\t\t\t\tquery = query.replace(resolvable, this.evaluateExpression(resolvable, i) as string);\n\t\t\t}\n\t\t}\n\n\t\tconst values = valuesArray[i];\n\t\tconst queryFormat = { query, values };\n\t\tallQueries.push(queryFormat);\n\t}\n\n\tconst mode = options?.overrideMode\n\t\t? options.overrideMode\n\t\t: ((additionalFields.mode ?? 'multiple') as string);\n\tif (mode === 'multiple') {\n\t\treturn (await db.multi(pgp.helpers.concat(allQueries)))\n\t\t\t.map((result, i) => {\n\t\t\t\treturn this.helpers.constructExecutionMetaData(wrapData(result as IDataObject[]), {\n\t\t\t\t\titemData: { item: i },\n\t\t\t\t});\n\t\t\t})\n\t\t\t.flat();\n\t} else if (mode === 'transaction') {\n\t\treturn await db.tx(async (t) => {\n\t\t\tconst result: INodeExecutionData[] = [];\n\t\t\tfor (let i = 0; i < allQueries.length; i++) {\n\t\t\t\ttry {\n\t\t\t\t\tconst transactionResult = await t.any(allQueries[i].query, allQueries[i].values);\n\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\twrapData(transactionResult as IDataObject[]),\n\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t);\n\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tjson: { ...items[i].json },\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\tpairedItem: { item: i },\n\t\t\t\t\t} as INodeExecutionData);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t} else if (mode === 'independently') {\n\t\treturn await db.task(async (t) => {\n\t\t\tconst result: INodeExecutionData[] = [];\n\t\t\tfor (let i = 0; i < allQueries.length; i++) {\n\t\t\t\ttry {\n\t\t\t\t\tconst transactionResult = await t.any(allQueries[i].query, allQueries[i].values);\n\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\twrapData(transactionResult as IDataObject[]),\n\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t);\n\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tjson: { ...items[i].json },\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\tpairedItem: { item: i },\n\t\t\t\t\t} as INodeExecutionData);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t}\n\tthrow new ApplicationError('multiple, independently or transaction are valid options', {\n\t\tlevel: 'warning',\n\t});\n}\n\n/**\n * Inserts the given items into the database.\n *\n * @param {Function} getNodeParam The getter for the Node's parameters\n * @param {pgPromise.IMain<{}, pg.IClient>} pgp The pgPromise instance\n * @param {PgpDatabase} db The pgPromise database connection\n * @param {INodeExecutionData[]} items The items to be inserted\n */\nexport async function pgInsert(\n\t// eslint-disable-next-line @typescript-eslint/no-restricted-types\n\tgetNodeParam: Function,\n\tpgp: pgPromise.IMain<{}, pg.IClient>,\n\tdb: PgpDatabase,\n\titems: INodeExecutionData[],\n\tcontinueOnFail: boolean,\n\toverrideMode?: string,\n): Promise<IDataObject[]> {\n\tconst table = getNodeParam('table', 0) as string;\n\tconst schema = getNodeParam('schema', 0) as string;\n\tconst columnString = getNodeParam('columns', 0) as string;\n\tconst guardedColumns: { [key: string]: string } = {};\n\n\tconst columns = columnString\n\t\t.split(',')\n\t\t.map((column) => column.trim().split(':'))\n\t\t.map(([name, cast], i) => {\n\t\t\tguardedColumns[`column${i}`] = name;\n\t\t\treturn { name, cast, prop: `column${i}` };\n\t\t});\n\n\tconst columnNames = columns.map((column) => column.name);\n\n\tconst cs = new pgp.helpers.ColumnSet(columns, { table: { table, schema } });\n\n\tconst additionalFields = getNodeParam('additionalFields', 0) as IDataObject;\n\tconst mode = overrideMode ? overrideMode : ((additionalFields.mode ?? 'multiple') as string);\n\n\tconst returning = generateReturning(pgp, getNodeParam('returnFields', 0) as string);\n\tif (mode === 'multiple') {\n\t\tconst query =\n\t\t\tpgp.helpers.insert(getItemsCopy(items, columnNames, guardedColumns), cs) + returning;\n\t\treturn await db.any(query);\n\t} else if (mode === 'transaction') {\n\t\treturn await db.tx(async (t) => {\n\t\t\tconst result: IDataObject[] = [];\n\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\ttry {\n\t\t\t\t\tresult.push(await t.one(pgp.helpers.insert(itemCopy, cs) + returning));\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\t...itemCopy,\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t});\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t} else if (mode === 'independently') {\n\t\treturn await db.task(async (t) => {\n\t\t\tconst result: IDataObject[] = [];\n\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\ttry {\n\t\t\t\t\tconst insertResult = await t.oneOrNone(pgp.helpers.insert(itemCopy, cs) + returning);\n\t\t\t\t\tif (insertResult !== null) {\n\t\t\t\t\t\tresult.push(insertResult as IDataObject);\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) {\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\t...itemCopy,\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tthrow new ApplicationError('multiple, independently or transaction are valid options', {\n\t\tlevel: 'warning',\n\t});\n}\n\n/**\n * Inserts the given items into the database.\n *\n * @param {Function} getNodeParam The getter for the Node's parameters\n * @param {pgPromise.IMain<{}, pg.IClient>} pgp The pgPromise instance\n * @param {PgpDatabase} db`` The pgPromise database connection\n * @param {INodeExecutionData[]} items The items to be inserted\n */\nexport async function pgInsertV2(\n\tthis: IExecuteFunctions,\n\tpgp: pgPromise.IMain<{}, pg.IClient>,\n\tdb: PgpDatabase,\n\titems: INodeExecutionData[],\n\tcontinueOnFail: boolean,\n\toverrideMode?: string,\n): Promise<IDataObject[]> {\n\tconst table = this.getNodeParameter('table', 0) as string;\n\tconst schema = this.getNodeParameter('schema', 0) as string;\n\tconst columnString = this.getNodeParameter('columns', 0) as string;\n\tconst guardedColumns: { [key: string]: string } = {};\n\n\tconst columns = columnString\n\t\t.split(',')\n\t\t.map((column) => column.trim().split(':'))\n\t\t.map(([name, cast], i) => {\n\t\t\tguardedColumns[`column${i}`] = name;\n\t\t\treturn { name, cast, prop: `column${i}` };\n\t\t});\n\n\tconst columnNames = columns.map((column) => column.name);\n\n\tconst cs = new pgp.helpers.ColumnSet(columns, { table: { table, schema } });\n\n\tconst additionalFields = this.getNodeParameter('additionalFields', 0);\n\tconst mode = overrideMode ? overrideMode : ((additionalFields.mode ?? 'multiple') as string);\n\n\tconst returning = generateReturning(pgp, this.getNodeParameter('returnFields', 0) as string);\n\tif (mode === 'multiple') {\n\t\tconst query =\n\t\t\tpgp.helpers.insert(getItemsCopy(items, columnNames, guardedColumns), cs) + returning;\n\t\tconst queryResult = await db.any(query);\n\t\treturn queryResult\n\t\t\t.map((result, i) => {\n\t\t\t\treturn this.helpers.constructExecutionMetaData(wrapData(result as IDataObject[]), {\n\t\t\t\t\titemData: { item: i },\n\t\t\t\t});\n\t\t\t})\n\t\t\t.flat();\n\t} else if (mode === 'transaction') {\n\t\treturn await db.tx(async (t) => {\n\t\t\tconst result: IDataObject[] = [];\n\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\ttry {\n\t\t\t\t\tconst insertResult = await t.one(pgp.helpers.insert(itemCopy, cs) + returning);\n\t\t\t\t\tresult.push(\n\t\t\t\t\t\t...this.helpers.constructExecutionMetaData(wrapData(insertResult as IDataObject[]), {\n\t\t\t\t\t\t\titemData: { item: i },\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tjson: { ...itemCopy },\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\tpairedItem: { item: i },\n\t\t\t\t\t} as INodeExecutionData);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t} else if (mode === 'independently') {\n\t\treturn await db.task(async (t) => {\n\t\t\tconst result: IDataObject[] = [];\n\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\ttry {\n\t\t\t\t\tconst insertResult = await t.oneOrNone(pgp.helpers.insert(itemCopy, cs) + returning);\n\t\t\t\t\tif (insertResult !== null) {\n\t\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\t\twrapData(insertResult as IDataObject[]),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\titemData: { item: i },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!continueOnFail) {\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tjson: { ...itemCopy },\n\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\tpairedItem: { item: i },\n\t\t\t\t\t} as INodeExecutionData);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tthrow new ApplicationError('multiple, independently or transaction are valid options', {\n\t\tlevel: 'warning',\n\t});\n}\n\n/**\n * Updates the given items in the database.\n *\n * @param {Function} getNodeParam The getter for the Node's parameters\n * @param {pgPromise.IMain<{}, pg.IClient>} pgp The pgPromise instance\n * @param {PgpDatabase} db The pgPromise database connection\n * @param {INodeExecutionData[]} items The items to be updated\n */\nexport async function pgUpdate(\n\t// eslint-disable-next-line @typescript-eslint/no-restricted-types\n\tgetNodeParam: Function,\n\tpgp: pgPromise.IMain<{}, pg.IClient>,\n\tdb: PgpDatabase,\n\titems: INodeExecutionData[],\n\tcontinueOnFail = false,\n): Promise<IDataObject[]> {\n\tconst table = getNodeParam('table', 0) as string;\n\tconst schema = getNodeParam('schema', 0) as string;\n\tconst updateKey = getNodeParam('updateKey', 0) as string;\n\tconst columnString = getNodeParam('columns', 0) as string;\n\tconst guardedColumns: { [key: string]: string } = {};\n\n\tconst columns: Array<{ name: string; cast: string; prop: string }> = columnString\n\t\t.split(',')\n\t\t.map((column) => column.trim().split(':'))\n\t\t.map(([name, cast], i) => {\n\t\t\tguardedColumns[`column${i}`] = name;\n\t\t\treturn { name, cast, prop: `column${i}` };\n\t\t});\n\n\tconst updateKeys = updateKey.split(',').map((key, i) => {\n\t\tconst [name, cast] = key.trim().split(':');\n\t\tconst targetCol = columns.find((column) => column.name === name);\n\t\tconst updateColumn = { name, cast, prop: targetCol ? targetCol.prop : `updateColumn${i}` };\n\t\tif (!targetCol) {\n\t\t\tguardedColumns[updateColumn.prop] = name;\n\t\t\tcolumns.unshift(updateColumn);\n\t\t} else if (!targetCol.cast) {\n\t\t\ttargetCol.cast = updateColumn.cast || targetCol.cast;\n\t\t}\n\t\treturn updateColumn;\n\t});\n\n\tconst additionalFields = getNodeParam('additionalFields', 0) as IDataObject;\n\tconst mode = additionalFields.mode ?? ('multiple' as string);\n\n\tconst cs = new pgp.helpers.ColumnSet(columns, { table: { table, schema } });\n\n\t// Prepare the data to update and copy it to be returned\n\tconst columnNames = columns.map((column) => column.name);\n\tconst updateItems = getItemsCopy(items, columnNames, guardedColumns);\n\n\tconst returning = generateReturning(pgp, getNodeParam('returnFields', 0) as string);\n\tif (mode === 'multiple') {\n\t\tconst query =\n\t\t\t(pgp.helpers.update(updateItems, cs) as string) +\n\t\t\t' WHERE ' +\n\t\t\tupdateKeys\n\t\t\t\t.map((entry) => {\n\t\t\t\t\tconst key = pgp.as.name(entry.name);\n\t\t\t\t\treturn 'v.' + key + ' = t.' + key;\n\t\t\t\t})\n\t\t\t\t.join(' AND ') +\n\t\t\treturning;\n\t\treturn await db.any(query);\n\t} else {\n\t\tconst where =\n\t\t\t' WHERE ' +\n\t\t\tupdateKeys\n\t\t\t\t// eslint-disable-next-line n8n-local-rules/no-interpolation-in-regular-string\n\t\t\t\t.map((entry) => pgp.as.name(entry.name) + ' = ${' + entry.prop + '}')\n\t\t\t\t.join(' AND ');\n\t\tif (mode === 'transaction') {\n\t\t\treturn await db.tx(async (t) => {\n\t\t\t\tconst result: IDataObject[] = [];\n\t\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tArray.prototype.push.apply(\n\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\tawait t.any(\n\t\t\t\t\t\t\t\t(pgp.helpers.update(itemCopy, cs) as string) +\n\t\t\t\t\t\t\t\t\tpgp.as.format(where, itemCopy) +\n\t\t\t\t\t\t\t\t\treturning,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t...itemCopy,\n\t\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t} else if (mode === 'independently') {\n\t\t\treturn await db.task(async (t) => {\n\t\t\t\tconst result: IDataObject[] = [];\n\t\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tArray.prototype.push.apply(\n\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\tawait t.any(\n\t\t\t\t\t\t\t\t(pgp.helpers.update(itemCopy, cs) as string) +\n\t\t\t\t\t\t\t\t\tpgp.as.format(where, itemCopy) +\n\t\t\t\t\t\t\t\t\treturning,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t...itemCopy,\n\t\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\t}\n\tthrow new ApplicationError('multiple, independently or transaction are valid options', {\n\t\tlevel: 'warning',\n\t});\n}\n\n/**\n * Updates the given items in the database.\n *\n * @param {Function} getNodeParam The getter for the Node's parameters\n * @param {pgPromise.IMain<{}, pg.IClient>} pgp The pgPromise instance\n * @param {PgpDatabase} db The pgPromise database connection\n * @param {INodeExecutionData[]} items The items to be updated\n */\nexport async function pgUpdateV2(\n\tthis: IExecuteFunctions,\n\tpgp: pgPromise.IMain<{}, pg.IClient>,\n\tdb: PgpDatabase,\n\titems: INodeExecutionData[],\n\tcontinueOnFail = false,\n): Promise<IDataObject[]> {\n\tconst table = this.getNodeParameter('table', 0) as string;\n\tconst schema = this.getNodeParameter('schema', 0) as string;\n\tconst updateKey = this.getNodeParameter('updateKey', 0) as string;\n\tconst columnString = this.getNodeParameter('columns', 0) as string;\n\tconst guardedColumns: { [key: string]: string } = {};\n\n\tconst columns: Array<{ name: string; cast: string; prop: string }> = columnString\n\t\t.split(',')\n\t\t.map((column) => column.trim().split(':'))\n\t\t.map(([name, cast], i) => {\n\t\t\tguardedColumns[`column${i}`] = name;\n\t\t\treturn { name, cast, prop: `column${i}` };\n\t\t});\n\n\tconst updateKeys = updateKey.split(',').map((key, i) => {\n\t\tconst [name, cast] = key.trim().split(':');\n\t\tconst targetCol = columns.find((column) => column.name === name);\n\t\tconst updateColumn = { name, cast, prop: targetCol ? targetCol.prop : `updateColumn${i}` };\n\t\tif (!targetCol) {\n\t\t\tguardedColumns[updateColumn.prop] = name;\n\t\t\tcolumns.unshift(updateColumn);\n\t\t} else if (!targetCol.cast) {\n\t\t\ttargetCol.cast = updateColumn.cast || targetCol.cast;\n\t\t}\n\t\treturn updateColumn;\n\t});\n\n\tconst additionalFields = this.getNodeParameter('additionalFields', 0);\n\tconst mode = additionalFields.mode ?? ('multiple' as string);\n\n\tconst cs = new pgp.helpers.ColumnSet(columns, { table: { table, schema } });\n\n\t// Prepare the data to update and copy it to be returned\n\tconst columnNames = columns.map((column) => column.name);\n\tconst updateItems = getItemsCopy(items, columnNames, guardedColumns);\n\n\tconst returning = generateReturning(pgp, this.getNodeParameter('returnFields', 0) as string);\n\tif (mode === 'multiple') {\n\t\tconst query =\n\t\t\t(pgp.helpers.update(updateItems, cs) as string) +\n\t\t\t' WHERE ' +\n\t\t\tupdateKeys\n\t\t\t\t.map((entry) => {\n\t\t\t\t\tconst key = pgp.as.name(entry.name);\n\t\t\t\t\treturn 'v.' + key + ' = t.' + key;\n\t\t\t\t})\n\t\t\t\t.join(' AND ') +\n\t\t\treturning;\n\t\tconst updateResult = await db.any(query);\n\t\treturn updateResult;\n\t} else {\n\t\tconst where =\n\t\t\t' WHERE ' +\n\t\t\tupdateKeys\n\t\t\t\t// eslint-disable-next-line n8n-local-rules/no-interpolation-in-regular-string\n\t\t\t\t.map((entry) => pgp.as.name(entry.name) + ' = ${' + entry.prop + '}')\n\t\t\t\t.join(' AND ');\n\t\tif (mode === 'transaction') {\n\t\t\treturn await db.tx(async (t) => {\n\t\t\t\tconst result: IDataObject[] = [];\n\t\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst transactionResult = await t.any(\n\t\t\t\t\t\t\t(pgp.helpers.update(itemCopy, cs) as string) +\n\t\t\t\t\t\t\t\tpgp.as.format(where, itemCopy) +\n\t\t\t\t\t\t\t\treturning,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\t\twrapData(transactionResult as IDataObject[]),\n\t\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t...itemCopy,\n\t\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t} else if (mode === 'independently') {\n\t\t\treturn await db.task(async (t) => {\n\t\t\t\tconst result: IDataObject[] = [];\n\t\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\t\tconst itemCopy = getItemCopy(items[i], columnNames, guardedColumns);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst independentResult = await t.any(\n\t\t\t\t\t\t\t(pgp.helpers.update(itemCopy, cs) as string) +\n\t\t\t\t\t\t\t\tpgp.as.format(where, itemCopy) +\n\t\t\t\t\t\t\t\treturning,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\t\twrapData(independentResult as IDataObject[]),\n\t\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (!continueOnFail) throw err;\n\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\tjson: { ...items[i].json },\n\t\t\t\t\t\t\tcode: (err as JsonObject).code,\n\t\t\t\t\t\t\tmessage: (err as JsonObject).message,\n\t\t\t\t\t\t\tpairedItem: { item: i },\n\t\t\t\t\t\t} as INodeExecutionData);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\t}\n\tthrow new ApplicationError('multiple, independently or transaction are valid options', {\n\t\tlevel: 'warning',\n\t});\n}\n"],"mappings":"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","names":[]}
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
{"name":"googleBusinessProfileOAuth2Api","extends":["googleOAuth2Api"],"displayName":"Google Business Profile OAuth2 API","documentationUrl":"google/oauth-single-service","properties":[{"displayName":"Scope","name":"scope","type":"hidden","default":"https://www.googleapis.com/auth/business.manage"},{"displayName":"Make sure that you have fulfilled the prerequisites and requested access to Google Business Profile API. <a href=\"https://developers.google.com/my-business/content/prereqs\" target=\"_blank\">More info</a>. Also, make sure that you have enabled the following APIs & Services in the Google Cloud Console: Google My Business API, Google My Business Management API. <a href=\"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-generic/#scopes\" target=\"_blank\">More info</a>.","name":"notice","type":"notice","default":""}],"supportedNodes":["googleBusinessProfile","googleBusinessProfileTrigger"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Google/BusinessProfile/googleBusinessProfile.svg"},
|
|
127
127
|
{"name":"googleOAuth2Api","extends":["oAuth2Api"],"displayName":"Google OAuth2 API","documentationUrl":"google/oauth-generic","properties":[{"displayName":"Grant Type","name":"grantType","type":"hidden","default":"authorizationCode"},{"displayName":"Authorization URL","name":"authUrl","type":"hidden","default":"https://accounts.google.com/o/oauth2/v2/auth"},{"displayName":"Access Token URL","name":"accessTokenUrl","type":"hidden","default":"https://oauth2.googleapis.com/token"},{"displayName":"Auth URI Query Parameters","name":"authQueryParameters","type":"hidden","default":"access_type=offline&prompt=consent"},{"displayName":"Authentication","name":"authentication","type":"hidden","default":"body"}],"iconUrl":"icons/n8n-nodes-base/dist/credentials/icons/Google.svg","supportedNodes":[]},
|
|
128
128
|
{"name":"googlePerspectiveOAuth2Api","extends":["googleOAuth2Api"],"displayName":"Google Perspective OAuth2 API","documentationUrl":"google/oauth-single-service","properties":[{"displayName":"Scope","name":"scope","type":"hidden","default":"https://www.googleapis.com/auth/userinfo.email"}],"supportedNodes":["googlePerspective"],"iconUrl":{"light":"icons/n8n-nodes-base/dist/nodes/Google/Perspective/googlePerspective.svg","dark":"icons/n8n-nodes-base/dist/nodes/Google/Perspective/googlePerspective.dark.svg"}},
|
|
129
|
-
{"name":"googleSheetsOAuth2Api","extends":["googleOAuth2Api"],"displayName":"Google Sheets OAuth2 API","documentationUrl":"google/oauth-single-service","properties":[{"displayName":"Scope","name":"scope","type":"hidden","default":"https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive.metadata"},{"displayName":"Make sure you enabled the following APIs & Services in the Google Cloud Console: Google Drive API, Google Sheets API. <a href=\"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-generic/#scopes\" target=\"_blank\">More info</a>.","name":"notice","type":"notice","default":"","displayOptions":{"hideOnCloud":true}}],"supportedNodes":["evaluationTrigger","evaluation","googleSheets"]
|
|
129
|
+
{"name":"googleSheetsOAuth2Api","extends":["googleOAuth2Api"],"displayName":"Google Sheets OAuth2 API","icon":"node:n8n-nodes-base.googleSheets","documentationUrl":"google/oauth-single-service","properties":[{"displayName":"Scope","name":"scope","type":"hidden","default":"https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive.metadata"},{"displayName":"Make sure you enabled the following APIs & Services in the Google Cloud Console: Google Drive API, Google Sheets API. <a href=\"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-generic/#scopes\" target=\"_blank\">More info</a>.","name":"notice","type":"notice","default":"","displayOptions":{"hideOnCloud":true}}],"supportedNodes":["evaluationTrigger","evaluation","googleSheets"]},
|
|
130
130
|
{"name":"googleSheetsTriggerOAuth2Api","extends":["googleOAuth2Api"],"displayName":"Google Sheets Trigger OAuth2 API","documentationUrl":"google/oauth-single-service","properties":[{"displayName":"Scope","name":"scope","type":"hidden","default":"https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive.metadata"},{"displayName":"Make sure you have enabled the following APIs & Services in the Google Cloud Console: Google Drive API, Google Sheets API. <a href=\"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-generic/#scopes\" target=\"_blank\">More info</a>.","name":"notice","type":"notice","default":"","displayOptions":{"hideOnCloud":true}}],"supportedNodes":["googleSheetsTrigger"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Google/Sheet/googleSheets.svg"},
|
|
131
131
|
{"name":"googleSlidesOAuth2Api","extends":["googleOAuth2Api"],"displayName":"Google Slides OAuth2 API","documentationUrl":"google/oauth-single-service","properties":[{"displayName":"Scope","name":"scope","type":"hidden","default":"https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/presentations"}],"supportedNodes":["googleSlides"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Google/Slides/googleslides.svg"},
|
|
132
132
|
{"name":"googleTasksOAuth2Api","extends":["googleOAuth2Api"],"displayName":"Google Tasks OAuth2 API","documentationUrl":"google/oauth-single-service","properties":[{"displayName":"Scope","name":"scope","type":"hidden","default":"https://www.googleapis.com/auth/tasks"}],"supportedNodes":["googleTasks"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Google/Task/googleTasks.svg"},
|
|
@@ -165,9 +165,9 @@
|
|
|
165
165
|
{"name":"iterableApi","displayName":"Iterable API","documentationUrl":"iterable","properties":[{"displayName":"API Key","name":"apiKey","type":"string","typeOptions":{"password":true},"default":""},{"displayName":"Region","name":"region","type":"options","options":[{"name":"EDC","value":"https://api.eu.iterable.com"},{"name":"USDC","value":"https://api.iterable.com"}],"default":"https://api.iterable.com"}],"authenticate":{"type":"generic","properties":{"headers":{"Api_Key":"={{$credentials.apiKey}}"}}},"test":{"request":{"baseURL":"={{$credentials?.region}}","url":"/api/webhooks","method":"GET"}},"supportedNodes":["iterable"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Iterable/iterable.png"},
|
|
166
166
|
{"name":"jenkinsApi","displayName":"Jenkins API","documentationUrl":"jenkins","properties":[{"displayName":"Jenkins Username","name":"username","type":"string","default":""},{"displayName":"Personal API Token","name":"apiKey","type":"string","typeOptions":{"password":true},"default":""},{"displayName":"Jenkins Instance URL","name":"baseUrl","type":"string","default":""}],"supportedNodes":["jenkins"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Jenkins/jenkins.svg"},
|
|
167
167
|
{"name":"jinaAiApi","displayName":"Jina AI API","documentationUrl":"jinaai","properties":[{"displayName":"API Key","name":"apiKey","type":"string","typeOptions":{"password":true},"default":""}],"authenticate":{"type":"generic","properties":{"headers":{"Authorization":"=Bearer {{ $credentials?.apiKey }}"}}},"test":{"request":{"method":"GET","url":"https://embeddings-dashboard-api.jina.ai/api/v1/api_key/fe_user","qs":{"api_key":"={{$credentials.apiKey}}"}}},"supportedNodes":["jinaAi"],"iconUrl":{"light":"icons/n8n-nodes-base/dist/nodes/JinaAI/jinaAi.svg","dark":"icons/n8n-nodes-base/dist/nodes/JinaAI/jinaAi.dark.svg"}},
|
|
168
|
-
{"name":"jiraSoftwareCloudApi","displayName":"Jira SW Cloud API","documentationUrl":"jira","properties":[{"displayName":"Email","name":"email","type":"string","placeholder":"name@email.com","default":""},{"displayName":"API Token","name":"apiToken","type":"string","typeOptions":{"password":true},"default":""},{"displayName":"Domain","name":"domain","type":"string","default":"","placeholder":"https://example.atlassian.net"}],"authenticate":{"type":"generic","properties":{"auth":{"username":"={{$credentials.email}}","password":"={{$credentials.apiToken}}"}}},"test":{"request":{"baseURL":"={{$credentials?.domain}}","url":"/rest/api/2/
|
|
169
|
-
{"name":"jiraSoftwareServerApi","displayName":"Jira SW Server API","documentationUrl":"jira","properties":[{"displayName":"Email","name":"email","type":"string","placeholder":"name@email.com","default":""},{"displayName":"Password","name":"password","typeOptions":{"password":true},"type":"string","default":""},{"displayName":"Domain","name":"domain","type":"string","default":"","placeholder":"https://example.com"}],"authenticate":{"type":"generic","properties":{"auth":{"username":"={{$credentials.email}}","password":"={{$credentials.password}}"}}},"test":{"request":{"baseURL":"={{$credentials?.domain}}","url":"/rest/api/2/
|
|
170
|
-
{"name":"jiraSoftwareServerPatApi","displayName":"Jira SW Server (PAT) API","documentationUrl":"jira","properties":[{"displayName":"Personal Access Token","name":"personalAccessToken","typeOptions":{"password":true},"type":"string","default":""},{"displayName":"Domain","name":"domain","type":"string","default":"","placeholder":"https://example.com"}],"authenticate":{"type":"generic","properties":{"headers":{"Authorization":"=Bearer {{$credentials.personalAccessToken}}"}}},"test":{"request":{"baseURL":"={{$credentials?.domain}}","url":"/rest/api/2/
|
|
168
|
+
{"name":"jiraSoftwareCloudApi","displayName":"Jira SW Cloud API","documentationUrl":"jira","properties":[{"displayName":"Email","name":"email","type":"string","placeholder":"name@email.com","default":""},{"displayName":"API Token","name":"apiToken","type":"string","typeOptions":{"password":true},"default":""},{"displayName":"Domain","name":"domain","type":"string","default":"","placeholder":"https://example.atlassian.net"}],"authenticate":{"type":"generic","properties":{"auth":{"username":"={{$credentials.email}}","password":"={{$credentials.apiToken}}"}}},"test":{"request":{"baseURL":"={{$credentials?.domain}}","url":"/rest/api/2/myself"}},"supportedNodes":["jira","jiraTrigger"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Jira/jira.svg"},
|
|
169
|
+
{"name":"jiraSoftwareServerApi","displayName":"Jira SW Server API","documentationUrl":"jira","properties":[{"displayName":"Email","name":"email","type":"string","placeholder":"name@email.com","default":""},{"displayName":"Password","name":"password","typeOptions":{"password":true},"type":"string","default":""},{"displayName":"Domain","name":"domain","type":"string","default":"","placeholder":"https://example.com"}],"authenticate":{"type":"generic","properties":{"auth":{"username":"={{$credentials.email}}","password":"={{$credentials.password}}"}}},"test":{"request":{"baseURL":"={{$credentials?.domain}}","url":"/rest/api/2/myself"}},"supportedNodes":["jira","jiraTrigger"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Jira/jira.svg"},
|
|
170
|
+
{"name":"jiraSoftwareServerPatApi","displayName":"Jira SW Server (PAT) API","documentationUrl":"jira","properties":[{"displayName":"Personal Access Token","name":"personalAccessToken","typeOptions":{"password":true},"type":"string","default":""},{"displayName":"Domain","name":"domain","type":"string","default":"","placeholder":"https://example.com"}],"authenticate":{"type":"generic","properties":{"headers":{"Authorization":"=Bearer {{$credentials.personalAccessToken}}"}}},"test":{"request":{"baseURL":"={{$credentials?.domain}}","url":"/rest/api/2/myself"}},"supportedNodes":["jira","jiraTrigger"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Jira/jira.svg"},
|
|
171
171
|
{"name":"jotFormApi","displayName":"JotForm API","documentationUrl":"jotForm","properties":[{"displayName":"API Key","name":"apiKey","type":"string","typeOptions":{"password":true},"default":""},{"displayName":"API Domain","name":"apiDomain","type":"options","options":[{"name":"api.jotform.com","value":"api.jotform.com"},{"name":"eu-api.jotform.com","value":"eu-api.jotform.com"},{"name":"hipaa-api.jotform.com","value":"hipaa-api.jotform.com"}],"default":"api.jotform.com","description":"The API domain to use. Use \"eu-api.jotform.com\" if your account is in based in Europe."}],"supportedNodes":["jotFormTrigger"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/JotForm/jotform.png"},
|
|
172
172
|
{"name":"jwtAuth","displayName":"JWT Auth","documentationUrl":"jwt","properties":[{"displayName":"Key Type","name":"keyType","type":"options","description":"Choose either the secret passphrase or PEM encoded public keys","options":[{"name":"Passphrase","value":"passphrase"},{"name":"PEM Key","value":"pemKey"}],"default":"passphrase"},{"displayName":"Secret","name":"secret","type":"string","typeOptions":{"password":true},"default":"","displayOptions":{"show":{"keyType":["passphrase"]}}},{"displayName":"Private Key","name":"privateKey","type":"string","typeOptions":{"password":true},"displayOptions":{"show":{"keyType":["pemKey"]}},"default":""},{"displayName":"Public Key","name":"publicKey","type":"string","typeOptions":{"password":true},"displayOptions":{"show":{"keyType":["pemKey"]}},"default":""},{"displayName":"Algorithm","name":"algorithm","type":"options","default":"HS256","options":[{"name":"HS256","value":"HS256"},{"name":"HS384","value":"HS384"},{"name":"HS512","value":"HS512"},{"name":"RS256","value":"RS256"},{"name":"RS384","value":"RS384"},{"name":"RS512","value":"RS512"},{"name":"ES256","value":"ES256"},{"name":"ES384","value":"ES384"},{"name":"ES512","value":"ES512"},{"name":"PS256","value":"PS256"},{"name":"PS384","value":"PS384"},{"name":"PS512","value":"PS512"},{"name":"none","value":"none"}]}],"iconUrl":"icons/n8n-nodes-base/dist/credentials/icons/jwt.svg","supportedNodes":["jwt","respondToWebhook","wait","webhook"]},
|
|
173
173
|
{"name":"kafka","displayName":"Kafka","documentationUrl":"kafka","properties":[{"displayName":"Client ID","name":"clientId","type":"string","default":"","placeholder":"my-app","hint":"Will not affect the connection, but will be used to identify the client in the Kafka server logs. Read more <a href=\"https://kafka.apache.org/documentation/#design_quotasgroups\">here</a>"},{"displayName":"Brokers","name":"brokers","type":"string","default":"","placeholder":"kafka1:9092,kafka2:9092"},{"displayName":"SSL","name":"ssl","type":"boolean","default":true},{"displayName":"Authentication","name":"authentication","type":"boolean","default":false},{"displayName":"Username","name":"username","type":"string","displayOptions":{"show":{"authentication":[true]}},"default":"","description":"Optional username if authenticated is required"},{"displayName":"Password","name":"password","type":"string","displayOptions":{"show":{"authentication":[true]}},"typeOptions":{"password":true},"default":"","description":"Optional password if authenticated is required"},{"displayName":"SASL Mechanism","name":"saslMechanism","type":"options","displayOptions":{"show":{"authentication":[true]}},"options":[{"name":"Plain","value":"plain"},{"name":"scram-sha-256","value":"scram-sha-256"},{"name":"scram-sha-512","value":"scram-sha-512"}],"default":"plain"}],"supportedNodes":["kafka","kafkaTrigger"],"iconUrl":{"light":"icons/n8n-nodes-base/dist/nodes/Kafka/kafka.svg","dark":"icons/n8n-nodes-base/dist/nodes/Kafka/kafka.dark.svg"}},
|