n8n-nodes-base 1.98.0 → 1.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/credentials/GoogleSheetsOAuth2Api.credentials.js +1 -0
  2. package/dist/credentials/GoogleSheetsOAuth2Api.credentials.js.map +1 -1
  3. package/dist/credentials/JiraSoftwareCloudApi.credentials.js +1 -1
  4. package/dist/credentials/JiraSoftwareCloudApi.credentials.js.map +1 -1
  5. package/dist/credentials/JiraSoftwareServerApi.credentials.js +1 -1
  6. package/dist/credentials/JiraSoftwareServerApi.credentials.js.map +1 -1
  7. package/dist/credentials/JiraSoftwareServerPatApi.credentials.js +1 -1
  8. package/dist/credentials/JiraSoftwareServerPatApi.credentials.js.map +1 -1
  9. package/dist/credentials/Snowflake.credentials.js +12 -7
  10. package/dist/credentials/Snowflake.credentials.js.map +1 -1
  11. package/dist/nodes/Code/ExecutionError.js +11 -4
  12. package/dist/nodes/Code/ExecutionError.js.map +1 -1
  13. package/dist/nodes/ExecutionData/ExecutionData.node.js +35 -10
  14. package/dist/nodes/ExecutionData/ExecutionData.node.js.map +1 -1
  15. package/dist/nodes/Google/Sheet/v2/methods/resourceMapping.js +1 -1
  16. package/dist/nodes/Google/Sheet/v2/methods/resourceMapping.js.map +1 -1
  17. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js +1 -2
  18. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js.map +1 -1
  19. package/dist/nodes/Microsoft/Sql/GenericFunctions.js.map +1 -1
  20. package/dist/nodes/Onfleet/Onfleet.node.js.map +1 -1
  21. package/dist/nodes/Postgres/v1/genericFunctions.js.map +1 -1
  22. package/dist/nodes/Snowflake/GenericFunctions.js +17 -1
  23. package/dist/nodes/Snowflake/GenericFunctions.js.map +1 -1
  24. package/dist/types/credentials.json +5 -5
  25. package/dist/types/nodes.json +4 -4
  26. package/package.json +6 -6
@@ -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":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAiC;AAKjC,uBAA+B;AAWxB,SAAS,aACf,OACA,YACA,gBACgB;AAChB,MAAI;AACJ,SAAO,MAAM,IAAI,CAAC,SAAS;AAC1B,cAAU,CAAC;AACX,QAAI,gBAAgB;AACnB,aAAO,KAAK,cAAc,EAAE,QAAQ,CAAC,WAAW;AAC/C,gBAAQ,MAAM,IAAI,KAAK,KAAK,eAAe,MAAM,CAAC;AAAA,MACnD,CAAC;AAAA,IACF,OAAO;AACN,iBAAW,YAAY,YAAY;AAClC,gBAAQ,QAAQ,IAAI,KAAK,KAAK,QAAQ;AAAA,MACvC;AAAA,IACD;AACA,WAAO;AAAA,EACR,CAAC;AACF;AASO,SAAS,YACf,MACA,YACA,gBACc;AACd,QAAM,UAAuB,CAAC;AAC9B,MAAI,gBAAgB;AACnB,WAAO,KAAK,cAAc,EAAE,QAAQ,CAAC,WAAW;AAC/C,cAAQ,MAAM,IAAI,KAAK,KAAK,eAAe,MAAM,CAAC;AAAA,IACnD,CAAC;AAAA,EACF,OAAO;AACN,eAAW,YAAY,YAAY;AAClC,cAAQ,QAAQ,IAAI,KAAK,KAAK,QAAQ;AAAA,IACvC;AAAA,EACD;AACA,SAAO;AACR;AAOO,SAAS,kBAAkB,KAAsC,WAA2B;AAClG,SACC,gBACA,UACE,MAAM,GAAG,EACT,IAAI,CAAC,kBAAkB,IAAI,GAAG,KAAK,cAAc,KAAK,CAAC,CAAC,EACxD,KAAK,IAAI;AAEb;AAEO,SAAS,SAAS,MAA2C;AACnE,MAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACzB,WAAO,CAAC,EAAE,MAAM,KAAK,CAAC;AAAA,EACvB;AACA,SAAO,KAAK,IAAI,CAAC,UAAU;AAAA,IAC1B,MAAM;AAAA,EACP,EAAE;AACH;AAUA,eAAsB,QAErB,cACA,KACA,IACA,OACA,gBACA,cACyB;AACzB,QAAM,mBAAmB,aAAa,oBAAoB,CAAC;AAE3D,MAAI,cAAc,CAAC;AACnB,MAAI,iBAAiB,aAAa;AACjC,UAAM,mBAAmB,iBAAiB;AAC1C,UAAM,aAAa,iBAAiB,MAAM,GAAG,EAAE,IAAI,CAAC,WAAW,OAAO,KAAK,CAAC;AAC5E,UAAM,cAAc,aAAa,OAAO,UAAU;AAClD,kBAAc,YAAY,IAAI,CAAC,QAAQ,WAAW,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;AAAA,EACzE;AAEA,QAAM,aAAa,CAAC;AACpB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,UAAM,QAAQ,aAAa,SAAS,CAAC;AACrC,UAAM,SAAS,YAAY,CAAC;AAC5B,UAAM,cAAc,EAAE,OAAO,OAAO;AACpC,eAAW,KAAK,WAAW;AAAA,EAC5B;AAEA,QAAM,OAAO,eAAe,eAAiB,iBAAiB,QAAQ;AACtE,MAAI,SAAS,YAAY;AACxB,YAAQ,MAAM,GAAG,MAAM,IAAI,QAAQ,OAAO,UAAU,CAAC,GAAG,KAAK,CAAC;AAAA,EAC/D,WAAW,SAAS,eAAe;AAClC,WAAO,MAAM,GAAG,GAAG,OAAO,MAAM;AAC/B,YAAM,SAAwB,CAAC;AAC/B,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC3C,YAAI;AACH,gBAAM,UAAU,KAAK;AAAA,YACpB;AAAA,YACA,MAAM,EAAE,IAAI,WAAW,CAAC,EAAE,OAAO,WAAW,CAAC,EAAE,MAAM;AAAA,UACtD;AAAA,QACD,SAAS,KAAK;AACb,cAAI,CAAC,eAAgB,OAAM;AAC3B,iBAAO,KAAK;AAAA,YACX,GAAG,MAAM,CAAC,EAAE;AAAA,YACZ,MAAO,IAAmB;AAAA,YAC1B,SAAU,IAAmB;AAAA,UAC9B,CAAC;AACD,iBAAO;AAAA,QACR;AAAA,MACD;AACA,aAAO;AAAA,IACR,CAAC;AAAA,EACF,WAAW,SAAS,iBAAiB;AACpC,WAAO,MAAM,GAAG,KAAK,OAAO,MAAM;AACjC,YAAM,SAAwB,CAAC;AAC/B,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC3C,YAAI;AACH,gBAAM,UAAU,KAAK;AAAA,YACpB;AAAA,YACA,MAAM,EAAE,IAAI,WAAW,CAAC,EAAE,OAAO,WAAW,CAAC,EAAE,MAAM;AAAA,UACtD;AAAA,QACD,SAAS,KAAK;AACb,cAAI,CAAC,eAAgB,OAAM;AAC3B,iBAAO,KAAK;AAAA,YACX,GAAG,MAAM,CAAC,EAAE;AAAA,YACZ,MAAO,IAAmB;AAAA,YAC1B,SAAU,IAAmB;AAAA,UAC9B,CAAC;AAAA,QACF;AAAA,MACD;AACA,aAAO;AAAA,IACR,CAAC;AAAA,EACF;AACA,QAAM,IAAI,qCAAiB,4DAA4D;AAAA,IACtF,OAAO;AAAA,EACR,CAAC;AACF;AAEA,eAAsB,UAErB,KACA,IACA,OACA,gBACA,SAIyB;AACzB,QAAM,mBAAmB,KAAK,iBAAiB,oBAAoB,CAAC;AAEpE,MAAI,cAAc,CAAC;AACnB,MAAI,iBAAiB,aAAa;AACjC,UAAM,mBAAmB,iBAAiB;AAC1C,UAAM,aAAa,iBAAiB,MAAM,GAAG,EAAE,IAAI,CAAC,WAAW,OAAO,KAAK,CAAC;AAC5E,UAAM,cAAc,aAAa,OAAO,UAAU;AAClD,kBAAc,YAAY,IAAI,CAAC,QAAQ,WAAW,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;AAAA,EACzE;AAGA,QAAM,aAAa,IAAI,MAAuB;AAC9C,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,QAAI,QAAQ,KAAK,iBAAiB,SAAS,CAAC;AAE5C,QAAI,SAAS,mBAAmB;AAC/B,iBAAW,kBAAc,iCAAe,KAAK,GAAG;AAC/C,gBAAQ,MAAM,QAAQ,YAAY,KAAK,mBAAmB,YAAY,CAAC,CAAW;AAAA,MACnF;AAAA,IACD;AAEA,UAAM,SAAS,YAAY,CAAC;AAC5B,UAAM,cAAc,EAAE,OAAO,OAAO;AACpC,eAAW,KAAK,WAAW;AAAA,EAC5B;AAEA,QAAM,OAAO,SAAS,eACnB,QAAQ,eACN,iBAAiB,QAAQ;AAC9B,MAAI,SAAS,YAAY;AACxB,YAAQ,MAAM,GAAG,MAAM,IAAI,QAAQ,OAAO,UAAU,CAAC,GACnD,IAAI,CAAC,QAAQ,MAAM;AACnB,aAAO,KAAK,QAAQ,2BAA2B,SAAS,MAAuB,GAAG;AAAA,QACjF,UAAU,EAAE,MAAM,EAAE;AAAA,MACrB,CAAC;AAAA,IACF,CAAC,EACA,KAAK;AAAA,EACR,WAAW,SAAS,eAAe;AAClC,WAAO,MAAM,GAAG,GAAG,OAAO,MAAM;AAC/B,YAAM,SAA+B,CAAC;AACtC,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC3C,YAAI;AACH,gBAAM,oBAAoB,MAAM,EAAE,IAAI,WAAW,CAAC,EAAE,OAAO,WAAW,CAAC,EAAE,MAAM;AAC/E,gBAAM,gBAAgB,KAAK,QAAQ;AAAA,YAClC,SAAS,iBAAkC;AAAA,YAC3C,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;AAAA,UACzB;AACA,iBAAO,KAAK,GAAG,aAAa;AAAA,QAC7B,SAAS,KAAK;AACb,cAAI,CAAC,eAAgB,OAAM;AAC3B,iBAAO,KAAK;AAAA,YACX,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,KAAK;AAAA,YACzB,MAAO,IAAmB;AAAA,YAC1B,SAAU,IAAmB;AAAA,YAC7B,YAAY,EAAE,MAAM,EAAE;AAAA,UACvB,CAAuB;AACvB,iBAAO;AAAA,QACR;AAAA,MACD;AACA,aAAO;AAAA,IACR,CAAC;AAAA,EACF,WAAW,SAAS,iBAAiB;AACpC,WAAO,MAAM,GAAG,KAAK,OAAO,MAAM;AACjC,YAAM,SAA+B,CAAC;AACtC,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC3C,YAAI;AACH,gBAAM,oBAAoB,MAAM,EAAE,IAAI,WAAW,CAAC,EAAE,OAAO,WAAW,CAAC,EAAE,MAAM;AAC/E,gBAAM,gBAAgB,KAAK,QAAQ;AAAA,YAClC,SAAS,iBAAkC;AAAA,YAC3C,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;AAAA,UACzB;AACA,iBAAO,KAAK,GAAG,aAAa;AAAA,QAC7B,SAAS,KAAK;AACb,cAAI,CAAC,eAAgB,OAAM;AAC3B,iBAAO,KAAK;AAAA,YACX,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,KAAK;AAAA,YACzB,MAAO,IAAmB;AAAA,YAC1B,SAAU,IAAmB;AAAA,YAC7B,YAAY,EAAE,MAAM,EAAE;AAAA,UACvB,CAAuB;AAAA,QACxB;AAAA,MACD;AACA,aAAO;AAAA,IACR,CAAC;AAAA,EACF;AACA,QAAM,IAAI,qCAAiB,4DAA4D;AAAA,IACtF,OAAO;AAAA,EACR,CAAC;AACF;AAUA,eAAsB,SAErB,cACA,KACA,IACA,OACA,gBACA,cACyB;AACzB,QAAM,QAAQ,aAAa,SAAS,CAAC;AACrC,QAAM,SAAS,aAAa,UAAU,CAAC;AACvC,QAAM,eAAe,aAAa,WAAW,CAAC;AAC9C,QAAM,iBAA4C,CAAC;AAEnD,QAAM,UAAU,aACd,MAAM,GAAG,EACT,IAAI,CAAC,WAAW,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC,EACxC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM;AACzB,mBAAe,SAAS,CAAC,EAAE,IAAI;AAC/B,WAAO,EAAE,MAAM,MAAM,MAAM,SAAS,CAAC,GAAG;AAAA,EACzC,CAAC;AAEF,QAAM,cAAc,QAAQ,IAAI,CAAC,WAAW,OAAO,IAAI;AAEvD,QAAM,KAAK,IAAI,IAAI,QAAQ,UAAU,SAAS,EAAE,OAAO,EAAE,OAAO,OAAO,EAAE,CAAC;AAE1E,QAAM,mBAAmB,aAAa,oBAAoB,CAAC;AAC3D,QAAM,OAAO,eAAe,eAAiB,iBAAiB,QAAQ;AAEtE,QAAM,YAAY,kBAAkB,KAAK,aAAa,gBAAgB,CAAC,CAAW;AAClF,MAAI,SAAS,YAAY;AACxB,UAAM,QACL,IAAI,QAAQ,OAAO,aAAa,OAAO,aAAa,cAAc,GAAG,EAAE,IAAI;AAC5E,WAAO,MAAM,GAAG,IAAI,KAAK;AAAA,EAC1B,WAAW,SAAS,eAAe;AAClC,WAAO,MAAM,GAAG,GAAG,OAAO,MAAM;AAC/B,YAAM,SAAwB,CAAC;AAC/B,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,cAAM,WAAW,YAAY,MAAM,CAAC,GAAG,aAAa,cAAc;AAClE,YAAI;AACH,iBAAO,KAAK,MAAM,EAAE,IAAI,IAAI,QAAQ,OAAO,UAAU,EAAE,IAAI,SAAS,CAAC;AAAA,QACtE,SAAS,KAAK;AACb,cAAI,CAAC,eAAgB,OAAM;AAC3B,iBAAO,KAAK;AAAA,YACX,GAAG;AAAA,YACH,MAAO,IAAmB;AAAA,YAC1B,SAAU,IAAmB;AAAA,UAC9B,CAAC;AACD,iBAAO;AAAA,QACR;AAAA,MACD;AACA,aAAO;AAAA,IACR,CAAC;AAAA,EACF,WAAW,SAAS,iBAAiB;AACpC,WAAO,MAAM,GAAG,KAAK,OAAO,MAAM;AACjC,YAAM,SAAwB,CAAC;AAC/B,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,cAAM,WAAW,YAAY,MAAM,CAAC,GAAG,aAAa,cAAc;AAClE,YAAI;AACH,gBAAM,eAAe,MAAM,EAAE,UAAU,IAAI,QAAQ,OAAO,UAAU,EAAE,IAAI,SAAS;AACnF,cAAI,iBAAiB,MAAM;AAC1B,mBAAO,KAAK,YAA2B;AAAA,UACxC;AAAA,QACD,SAAS,KAAK;AACb,cAAI,CAAC,gBAAgB;AACpB,kBAAM;AAAA,UACP;AACA,iBAAO,KAAK;AAAA,YACX,GAAG;AAAA,YACH,MAAO,IAAmB;AAAA,YAC1B,SAAU,IAAmB;AAAA,UAC9B,CAAC;AAAA,QACF;AAAA,MACD;AACA,aAAO;AAAA,IACR,CAAC;AAAA,EACF;AAEA,QAAM,IAAI,qCAAiB,4DAA4D;AAAA,IACtF,OAAO;AAAA,EACR,CAAC;AACF;AAUA,eAAsB,WAErB,KACA,IACA,OACA,gBACA,cACyB;AACzB,QAAM,QAAQ,KAAK,iBAAiB,SAAS,CAAC;AAC9C,QAAM,SAAS,KAAK,iBAAiB,UAAU,CAAC;AAChD,QAAM,eAAe,KAAK,iBAAiB,WAAW,CAAC;AACvD,QAAM,iBAA4C,CAAC;AAEnD,QAAM,UAAU,aACd,MAAM,GAAG,EACT,IAAI,CAAC,WAAW,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC,EACxC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM;AACzB,mBAAe,SAAS,CAAC,EAAE,IAAI;AAC/B,WAAO,EAAE,MAAM,MAAM,MAAM,SAAS,CAAC,GAAG;AAAA,EACzC,CAAC;AAEF,QAAM,cAAc,QAAQ,IAAI,CAAC,WAAW,OAAO,IAAI;AAEvD,QAAM,KAAK,IAAI,IAAI,QAAQ,UAAU,SAAS,EAAE,OAAO,EAAE,OAAO,OAAO,EAAE,CAAC;AAE1E,QAAM,mBAAmB,KAAK,iBAAiB,oBAAoB,CAAC;AACpE,QAAM,OAAO,eAAe,eAAiB,iBAAiB,QAAQ;AAEtE,QAAM,YAAY,kBAAkB,KAAK,KAAK,iBAAiB,gBAAgB,CAAC,CAAW;AAC3F,MAAI,SAAS,YAAY;AACxB,UAAM,QACL,IAAI,QAAQ,OAAO,aAAa,OAAO,aAAa,cAAc,GAAG,EAAE,IAAI;AAC5E,UAAM,cAAc,MAAM,GAAG,IAAI,KAAK;AACtC,WAAO,YACL,IAAI,CAAC,QAAQ,MAAM;AACnB,aAAO,KAAK,QAAQ,2BAA2B,SAAS,MAAuB,GAAG;AAAA,QACjF,UAAU,EAAE,MAAM,EAAE;AAAA,MACrB,CAAC;AAAA,IACF,CAAC,EACA,KAAK;AAAA,EACR,WAAW,SAAS,eAAe;AAClC,WAAO,MAAM,GAAG,GAAG,OAAO,MAAM;AAC/B,YAAM,SAAwB,CAAC;AAC/B,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,cAAM,WAAW,YAAY,MAAM,CAAC,GAAG,aAAa,cAAc;AAClE,YAAI;AACH,gBAAM,eAAe,MAAM,EAAE,IAAI,IAAI,QAAQ,OAAO,UAAU,EAAE,IAAI,SAAS;AAC7E,iBAAO;AAAA,YACN,GAAG,KAAK,QAAQ,2BAA2B,SAAS,YAA6B,GAAG;AAAA,cACnF,UAAU,EAAE,MAAM,EAAE;AAAA,YACrB,CAAC;AAAA,UACF;AAAA,QACD,SAAS,KAAK;AACb,cAAI,CAAC,eAAgB,OAAM;AAC3B,iBAAO,KAAK;AAAA,YACX,MAAM,EAAE,GAAG,SAAS;AAAA,YACpB,MAAO,IAAmB;AAAA,YAC1B,SAAU,IAAmB;AAAA,YAC7B,YAAY,EAAE,MAAM,EAAE;AAAA,UACvB,CAAuB;AACvB,iBAAO;AAAA,QACR;AAAA,MACD;AACA,aAAO;AAAA,IACR,CAAC;AAAA,EACF,WAAW,SAAS,iBAAiB;AACpC,WAAO,MAAM,GAAG,KAAK,OAAO,MAAM;AACjC,YAAM,SAAwB,CAAC;AAC/B,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,cAAM,WAAW,YAAY,MAAM,CAAC,GAAG,aAAa,cAAc;AAClE,YAAI;AACH,gBAAM,eAAe,MAAM,EAAE,UAAU,IAAI,QAAQ,OAAO,UAAU,EAAE,IAAI,SAAS;AACnF,cAAI,iBAAiB,MAAM;AAC1B,kBAAM,gBAAgB,KAAK,QAAQ;AAAA,cAClC,SAAS,YAA6B;AAAA,cACtC;AAAA,gBACC,UAAU,EAAE,MAAM,EAAE;AAAA,cACrB;AAAA,YACD;AACA,mBAAO,KAAK,GAAG,aAAa;AAAA,UAC7B;AAAA,QACD,SAAS,KAAK;AACb,cAAI,CAAC,gBAAgB;AACpB,kBAAM;AAAA,UACP;AACA,iBAAO,KAAK;AAAA,YACX,MAAM,EAAE,GAAG,SAAS;AAAA,YACpB,MAAO,IAAmB;AAAA,YAC1B,SAAU,IAAmB;AAAA,YAC7B,YAAY,EAAE,MAAM,EAAE;AAAA,UACvB,CAAuB;AAAA,QACxB;AAAA,MACD;AACA,aAAO;AAAA,IACR,CAAC;AAAA,EACF;AAEA,QAAM,IAAI,qCAAiB,4DAA4D;AAAA,IACtF,OAAO;AAAA,EACR,CAAC;AACF;AAUA,eAAsB,SAErB,cACA,KACA,IACA,OACA,iBAAiB,OACQ;AACzB,QAAM,QAAQ,aAAa,SAAS,CAAC;AACrC,QAAM,SAAS,aAAa,UAAU,CAAC;AACvC,QAAM,YAAY,aAAa,aAAa,CAAC;AAC7C,QAAM,eAAe,aAAa,WAAW,CAAC;AAC9C,QAAM,iBAA4C,CAAC;AAEnD,QAAM,UAA+D,aACnE,MAAM,GAAG,EACT,IAAI,CAAC,WAAW,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC,EACxC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM;AACzB,mBAAe,SAAS,CAAC,EAAE,IAAI;AAC/B,WAAO,EAAE,MAAM,MAAM,MAAM,SAAS,CAAC,GAAG;AAAA,EACzC,CAAC;AAEF,QAAM,aAAa,UAAU,MAAM,GAAG,EAAE,IAAI,CAAC,KAAK,MAAM;AACvD,UAAM,CAAC,MAAM,IAAI,IAAI,IAAI,KAAK,EAAE,MAAM,GAAG;AACzC,UAAM,YAAY,QAAQ,KAAK,CAAC,WAAW,OAAO,SAAS,IAAI;AAC/D,UAAM,eAAe,EAAE,MAAM,MAAM,MAAM,YAAY,UAAU,OAAO,eAAe,CAAC,GAAG;AACzF,QAAI,CAAC,WAAW;AACf,qBAAe,aAAa,IAAI,IAAI;AACpC,cAAQ,QAAQ,YAAY;AAAA,IAC7B,WAAW,CAAC,UAAU,MAAM;AAC3B,gBAAU,OAAO,aAAa,QAAQ,UAAU;AAAA,IACjD;AACA,WAAO;AAAA,EACR,CAAC;AAED,QAAM,mBAAmB,aAAa,oBAAoB,CAAC;AAC3D,QAAM,OAAO,iBAAiB,QAAS;AAEvC,QAAM,KAAK,IAAI,IAAI,QAAQ,UAAU,SAAS,EAAE,OAAO,EAAE,OAAO,OAAO,EAAE,CAAC;AAG1E,QAAM,cAAc,QAAQ,IAAI,CAAC,WAAW,OAAO,IAAI;AACvD,QAAM,cAAc,aAAa,OAAO,aAAa,cAAc;AAEnE,QAAM,YAAY,kBAAkB,KAAK,aAAa,gBAAgB,CAAC,CAAW;AAClF,MAAI,SAAS,YAAY;AACxB,UAAM,QACJ,IAAI,QAAQ,OAAO,aAAa,EAAE,IACnC,YACA,WACE,IAAI,CAAC,UAAU;AACf,YAAM,MAAM,IAAI,GAAG,KAAK,MAAM,IAAI;AAClC,aAAO,OAAO,MAAM,UAAU;AAAA,IAC/B,CAAC,EACA,KAAK,OAAO,IACd;AACD,WAAO,MAAM,GAAG,IAAI,KAAK;AAAA,EAC1B,OAAO;AACN,UAAM,QACL,YACA,WAEE,IAAI,CAAC,UAAU,IAAI,GAAG,KAAK,MAAM,IAAI,IAAI,UAAU,MAAM,OAAO,GAAG,EACnE,KAAK,OAAO;AACf,QAAI,SAAS,eAAe;AAC3B,aAAO,MAAM,GAAG,GAAG,OAAO,MAAM;AAC/B,cAAM,SAAwB,CAAC;AAC/B,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,gBAAM,WAAW,YAAY,MAAM,CAAC,GAAG,aAAa,cAAc;AAClE,cAAI;AACH,kBAAM,UAAU,KAAK;AAAA,cACpB;AAAA,cACA,MAAM,EAAE;AAAA,gBACN,IAAI,QAAQ,OAAO,UAAU,EAAE,IAC/B,IAAI,GAAG,OAAO,OAAO,QAAQ,IAC7B;AAAA,cACF;AAAA,YACD;AAAA,UACD,SAAS,KAAK;AACb,gBAAI,CAAC,eAAgB,OAAM;AAC3B,mBAAO,KAAK;AAAA,cACX,GAAG;AAAA,cACH,MAAO,IAAmB;AAAA,cAC1B,SAAU,IAAmB;AAAA,YAC9B,CAAC;AACD,mBAAO;AAAA,UACR;AAAA,QACD;AACA,eAAO;AAAA,MACR,CAAC;AAAA,IACF,WAAW,SAAS,iBAAiB;AACpC,aAAO,MAAM,GAAG,KAAK,OAAO,MAAM;AACjC,cAAM,SAAwB,CAAC;AAC/B,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,gBAAM,WAAW,YAAY,MAAM,CAAC,GAAG,aAAa,cAAc;AAClE,cAAI;AACH,kBAAM,UAAU,KAAK;AAAA,cACpB;AAAA,cACA,MAAM,EAAE;AAAA,gBACN,IAAI,QAAQ,OAAO,UAAU,EAAE,IAC/B,IAAI,GAAG,OAAO,OAAO,QAAQ,IAC7B;AAAA,cACF;AAAA,YACD;AAAA,UACD,SAAS,KAAK;AACb,gBAAI,CAAC,eAAgB,OAAM;AAC3B,mBAAO,KAAK;AAAA,cACX,GAAG;AAAA,cACH,MAAO,IAAmB;AAAA,cAC1B,SAAU,IAAmB;AAAA,YAC9B,CAAC;AAAA,UACF;AAAA,QACD;AACA,eAAO;AAAA,MACR,CAAC;AAAA,IACF;AAAA,EACD;AACA,QAAM,IAAI,qCAAiB,4DAA4D;AAAA,IACtF,OAAO;AAAA,EACR,CAAC;AACF;AAUA,eAAsB,WAErB,KACA,IACA,OACA,iBAAiB,OACQ;AACzB,QAAM,QAAQ,KAAK,iBAAiB,SAAS,CAAC;AAC9C,QAAM,SAAS,KAAK,iBAAiB,UAAU,CAAC;AAChD,QAAM,YAAY,KAAK,iBAAiB,aAAa,CAAC;AACtD,QAAM,eAAe,KAAK,iBAAiB,WAAW,CAAC;AACvD,QAAM,iBAA4C,CAAC;AAEnD,QAAM,UAA+D,aACnE,MAAM,GAAG,EACT,IAAI,CAAC,WAAW,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC,EACxC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM;AACzB,mBAAe,SAAS,CAAC,EAAE,IAAI;AAC/B,WAAO,EAAE,MAAM,MAAM,MAAM,SAAS,CAAC,GAAG;AAAA,EACzC,CAAC;AAEF,QAAM,aAAa,UAAU,MAAM,GAAG,EAAE,IAAI,CAAC,KAAK,MAAM;AACvD,UAAM,CAAC,MAAM,IAAI,IAAI,IAAI,KAAK,EAAE,MAAM,GAAG;AACzC,UAAM,YAAY,QAAQ,KAAK,CAAC,WAAW,OAAO,SAAS,IAAI;AAC/D,UAAM,eAAe,EAAE,MAAM,MAAM,MAAM,YAAY,UAAU,OAAO,eAAe,CAAC,GAAG;AACzF,QAAI,CAAC,WAAW;AACf,qBAAe,aAAa,IAAI,IAAI;AACpC,cAAQ,QAAQ,YAAY;AAAA,IAC7B,WAAW,CAAC,UAAU,MAAM;AAC3B,gBAAU,OAAO,aAAa,QAAQ,UAAU;AAAA,IACjD;AACA,WAAO;AAAA,EACR,CAAC;AAED,QAAM,mBAAmB,KAAK,iBAAiB,oBAAoB,CAAC;AACpE,QAAM,OAAO,iBAAiB,QAAS;AAEvC,QAAM,KAAK,IAAI,IAAI,QAAQ,UAAU,SAAS,EAAE,OAAO,EAAE,OAAO,OAAO,EAAE,CAAC;AAG1E,QAAM,cAAc,QAAQ,IAAI,CAAC,WAAW,OAAO,IAAI;AACvD,QAAM,cAAc,aAAa,OAAO,aAAa,cAAc;AAEnE,QAAM,YAAY,kBAAkB,KAAK,KAAK,iBAAiB,gBAAgB,CAAC,CAAW;AAC3F,MAAI,SAAS,YAAY;AACxB,UAAM,QACJ,IAAI,QAAQ,OAAO,aAAa,EAAE,IACnC,YACA,WACE,IAAI,CAAC,UAAU;AACf,YAAM,MAAM,IAAI,GAAG,KAAK,MAAM,IAAI;AAClC,aAAO,OAAO,MAAM,UAAU;AAAA,IAC/B,CAAC,EACA,KAAK,OAAO,IACd;AACD,UAAM,eAAe,MAAM,GAAG,IAAI,KAAK;AACvC,WAAO;AAAA,EACR,OAAO;AACN,UAAM,QACL,YACA,WAEE,IAAI,CAAC,UAAU,IAAI,GAAG,KAAK,MAAM,IAAI,IAAI,UAAU,MAAM,OAAO,GAAG,EACnE,KAAK,OAAO;AACf,QAAI,SAAS,eAAe;AAC3B,aAAO,MAAM,GAAG,GAAG,OAAO,MAAM;AAC/B,cAAM,SAAwB,CAAC;AAC/B,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,gBAAM,WAAW,YAAY,MAAM,CAAC,GAAG,aAAa,cAAc;AAClE,cAAI;AACH,kBAAM,oBAAoB,MAAM,EAAE;AAAA,cAChC,IAAI,QAAQ,OAAO,UAAU,EAAE,IAC/B,IAAI,GAAG,OAAO,OAAO,QAAQ,IAC7B;AAAA,YACF;AACA,kBAAM,gBAAgB,KAAK,QAAQ;AAAA,cAClC,SAAS,iBAAkC;AAAA,cAC3C,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;AAAA,YACzB;AACA,mBAAO,KAAK,GAAG,aAAa;AAAA,UAC7B,SAAS,KAAK;AACb,gBAAI,CAAC,eAAgB,OAAM;AAC3B,mBAAO,KAAK;AAAA,cACX,GAAG;AAAA,cACH,MAAO,IAAmB;AAAA,cAC1B,SAAU,IAAmB;AAAA,YAC9B,CAAC;AACD,mBAAO;AAAA,UACR;AAAA,QACD;AACA,eAAO;AAAA,MACR,CAAC;AAAA,IACF,WAAW,SAAS,iBAAiB;AACpC,aAAO,MAAM,GAAG,KAAK,OAAO,MAAM;AACjC,cAAM,SAAwB,CAAC;AAC/B,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,gBAAM,WAAW,YAAY,MAAM,CAAC,GAAG,aAAa,cAAc;AAClE,cAAI;AACH,kBAAM,oBAAoB,MAAM,EAAE;AAAA,cAChC,IAAI,QAAQ,OAAO,UAAU,EAAE,IAC/B,IAAI,GAAG,OAAO,OAAO,QAAQ,IAC7B;AAAA,YACF;AACA,kBAAM,gBAAgB,KAAK,QAAQ;AAAA,cAClC,SAAS,iBAAkC;AAAA,cAC3C,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;AAAA,YACzB;AACA,mBAAO,KAAK,GAAG,aAAa;AAAA,UAC7B,SAAS,KAAK;AACb,gBAAI,CAAC,eAAgB,OAAM;AAC3B,mBAAO,KAAK;AAAA,cACX,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,KAAK;AAAA,cACzB,MAAO,IAAmB;AAAA,cAC1B,SAAU,IAAmB;AAAA,cAC7B,YAAY,EAAE,MAAM,EAAE;AAAA,YACvB,CAAuB;AAAA,UACxB;AAAA,QACD;AACA,eAAO;AAAA,MACR,CAAC;AAAA,IACF;AAAA,EACD;AACA,QAAM,IAAI,qCAAiB,4DAA4D;AAAA,IACtF,OAAO;AAAA,EACR,CAAC;AACF;","names":[]}
@@ -34,7 +34,9 @@ __export(GenericFunctions_exports, {
34
34
  getConnectionOptions: () => getConnectionOptions
35
35
  });
36
36
  module.exports = __toCommonJS(GenericFunctions_exports);
37
+ var import_crypto = require("crypto");
37
38
  var import_pick = __toESM(require("lodash/pick"));
39
+ var import_utilities = require("../../utils/utilities");
38
40
  const commonConnectionFields = [
39
41
  "account",
40
42
  "database",
@@ -43,11 +45,25 @@ const commonConnectionFields = [
43
45
  "role",
44
46
  "clientSessionKeepAlive"
45
47
  ];
48
+ const extractPrivateKey = (credential) => {
49
+ const key = (0, import_utilities.formatPrivateKey)(credential.privateKey);
50
+ if (!credential.passphrase) return key;
51
+ const privateKeyObject = (0, import_crypto.createPrivateKey)({
52
+ key,
53
+ format: "pem",
54
+ passphrase: credential.passphrase
55
+ });
56
+ return privateKeyObject.export({
57
+ format: "pem",
58
+ type: "pkcs8"
59
+ });
60
+ };
46
61
  const getConnectionOptions = (credential) => {
47
62
  const connectionOptions = (0, import_pick.default)(credential, commonConnectionFields);
48
63
  if (credential.authentication === "keyPair") {
49
64
  connectionOptions.authenticator = "SNOWFLAKE_JWT";
50
- connectionOptions.privateKey = credential.privateKey;
65
+ connectionOptions.username = credential.username;
66
+ connectionOptions.privateKey = extractPrivateKey(credential);
51
67
  } else {
52
68
  connectionOptions.username = credential.username;
53
69
  connectionOptions.password = credential.password;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../nodes/Snowflake/GenericFunctions.ts"],"sourcesContent":["import pick from 'lodash/pick';\nimport type snowflake from 'snowflake-sdk';\n\nconst commonConnectionFields = [\n\t'account',\n\t'database',\n\t'schema',\n\t'warehouse',\n\t'role',\n\t'clientSessionKeepAlive',\n] as const;\n\nexport type SnowflakeCredential = Pick<\n\tsnowflake.ConnectionOptions,\n\t(typeof commonConnectionFields)[number]\n> &\n\t(\n\t\t| {\n\t\t\t\tauthentication: 'password';\n\t\t\t\tusername?: string;\n\t\t\t\tpassword?: string;\n\t\t }\n\t\t| {\n\t\t\t\tauthentication: 'keyPair';\n\t\t\t\tprivateKey: string;\n\t\t }\n\t);\n\nexport const getConnectionOptions = (credential: SnowflakeCredential) => {\n\tconst connectionOptions: snowflake.ConnectionOptions = pick(credential, commonConnectionFields);\n\tif (credential.authentication === 'keyPair') {\n\t\tconnectionOptions.authenticator = 'SNOWFLAKE_JWT';\n\t\tconnectionOptions.privateKey = credential.privateKey;\n\t} else {\n\t\tconnectionOptions.username = credential.username;\n\t\tconnectionOptions.password = credential.password;\n\t}\n\treturn connectionOptions;\n};\n\nexport async function connect(conn: snowflake.Connection) {\n\treturn await new Promise<void>((resolve, reject) => {\n\t\tconn.connect((error) => (error ? reject(error) : resolve()));\n\t});\n}\n\nexport async function destroy(conn: snowflake.Connection) {\n\treturn await new Promise<void>((resolve, reject) => {\n\t\tconn.destroy((error) => (error ? reject(error) : resolve()));\n\t});\n}\n\nexport async function execute(\n\tconn: snowflake.Connection,\n\tsqlText: string,\n\tbinds: snowflake.InsertBinds,\n) {\n\treturn await new Promise<any[] | undefined>((resolve, reject) => {\n\t\tconn.execute({\n\t\t\tsqlText,\n\t\t\tbinds,\n\t\t\tcomplete: (error, _, rows) => (error ? reject(error) : resolve(rows)),\n\t\t});\n\t});\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAGjB,MAAM,yBAAyB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAkBO,MAAM,uBAAuB,CAAC,eAAoC;AACxE,QAAM,wBAAiD,YAAAA,SAAK,YAAY,sBAAsB;AAC9F,MAAI,WAAW,mBAAmB,WAAW;AAC5C,sBAAkB,gBAAgB;AAClC,sBAAkB,aAAa,WAAW;AAAA,EAC3C,OAAO;AACN,sBAAkB,WAAW,WAAW;AACxC,sBAAkB,WAAW,WAAW;AAAA,EACzC;AACA,SAAO;AACR;AAEA,eAAsB,QAAQ,MAA4B;AACzD,SAAO,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AACnD,SAAK,QAAQ,CAAC,UAAW,QAAQ,OAAO,KAAK,IAAI,QAAQ,CAAE;AAAA,EAC5D,CAAC;AACF;AAEA,eAAsB,QAAQ,MAA4B;AACzD,SAAO,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AACnD,SAAK,QAAQ,CAAC,UAAW,QAAQ,OAAO,KAAK,IAAI,QAAQ,CAAE;AAAA,EAC5D,CAAC;AACF;AAEA,eAAsB,QACrB,MACA,SACA,OACC;AACD,SAAO,MAAM,IAAI,QAA2B,CAAC,SAAS,WAAW;AAChE,SAAK,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,MACA,UAAU,CAAC,OAAO,GAAG,SAAU,QAAQ,OAAO,KAAK,IAAI,QAAQ,IAAI;AAAA,IACpE,CAAC;AAAA,EACF,CAAC;AACF;","names":["pick"]}
1
+ {"version":3,"sources":["../../../nodes/Snowflake/GenericFunctions.ts"],"sourcesContent":["import { createPrivateKey } from 'crypto';\nimport pick from 'lodash/pick';\nimport type snowflake from 'snowflake-sdk';\n\nimport { formatPrivateKey } from '@utils/utilities';\n\nconst commonConnectionFields = [\n\t'account',\n\t'database',\n\t'schema',\n\t'warehouse',\n\t'role',\n\t'clientSessionKeepAlive',\n] as const;\n\nexport type SnowflakeCredential = Pick<\n\tsnowflake.ConnectionOptions,\n\t(typeof commonConnectionFields)[number]\n> &\n\t(\n\t\t| {\n\t\t\t\tauthentication: 'password';\n\t\t\t\tusername?: string;\n\t\t\t\tpassword?: string;\n\t\t }\n\t\t| {\n\t\t\t\tauthentication: 'keyPair';\n\t\t\t\tusername: string;\n\t\t\t\tprivateKey: string;\n\t\t\t\tpassphrase?: string;\n\t\t }\n\t);\n\nconst extractPrivateKey = (credential: { privateKey: string; passphrase?: string }) => {\n\tconst key = formatPrivateKey(credential.privateKey as string);\n\n\tif (!credential.passphrase) return key;\n\n\tconst privateKeyObject = createPrivateKey({\n\t\tkey,\n\t\tformat: 'pem',\n\t\tpassphrase: credential.passphrase as string,\n\t});\n\n\treturn privateKeyObject.export({\n\t\tformat: 'pem',\n\t\ttype: 'pkcs8',\n\t}) as string;\n};\n\nexport const getConnectionOptions = (credential: SnowflakeCredential) => {\n\tconst connectionOptions: snowflake.ConnectionOptions = pick(credential, commonConnectionFields);\n\tif (credential.authentication === 'keyPair') {\n\t\tconnectionOptions.authenticator = 'SNOWFLAKE_JWT';\n\t\tconnectionOptions.username = credential.username;\n\t\tconnectionOptions.privateKey = extractPrivateKey(credential);\n\t} else {\n\t\tconnectionOptions.username = credential.username;\n\t\tconnectionOptions.password = credential.password;\n\t}\n\treturn connectionOptions;\n};\n\nexport async function connect(conn: snowflake.Connection) {\n\treturn await new Promise<void>((resolve, reject) => {\n\t\tconn.connect((error) => (error ? reject(error) : resolve()));\n\t});\n}\n\nexport async function destroy(conn: snowflake.Connection) {\n\treturn await new Promise<void>((resolve, reject) => {\n\t\tconn.destroy((error) => (error ? reject(error) : resolve()));\n\t});\n}\n\nexport async function execute(\n\tconn: snowflake.Connection,\n\tsqlText: string,\n\tbinds: snowflake.InsertBinds,\n) {\n\treturn await new Promise<any[] | undefined>((resolve, reject) => {\n\t\tconn.execute({\n\t\t\tsqlText,\n\t\t\tbinds,\n\t\t\tcomplete: (error, _, rows) => (error ? reject(error) : resolve(rows)),\n\t\t});\n\t});\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAiC;AACjC,kBAAiB;AAGjB,uBAAiC;AAEjC,MAAM,yBAAyB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAoBA,MAAM,oBAAoB,CAAC,eAA4D;AACtF,QAAM,UAAM,mCAAiB,WAAW,UAAoB;AAE5D,MAAI,CAAC,WAAW,WAAY,QAAO;AAEnC,QAAM,uBAAmB,gCAAiB;AAAA,IACzC;AAAA,IACA,QAAQ;AAAA,IACR,YAAY,WAAW;AAAA,EACxB,CAAC;AAED,SAAO,iBAAiB,OAAO;AAAA,IAC9B,QAAQ;AAAA,IACR,MAAM;AAAA,EACP,CAAC;AACF;AAEO,MAAM,uBAAuB,CAAC,eAAoC;AACxE,QAAM,wBAAiD,YAAAA,SAAK,YAAY,sBAAsB;AAC9F,MAAI,WAAW,mBAAmB,WAAW;AAC5C,sBAAkB,gBAAgB;AAClC,sBAAkB,WAAW,WAAW;AACxC,sBAAkB,aAAa,kBAAkB,UAAU;AAAA,EAC5D,OAAO;AACN,sBAAkB,WAAW,WAAW;AACxC,sBAAkB,WAAW,WAAW;AAAA,EACzC;AACA,SAAO;AACR;AAEA,eAAsB,QAAQ,MAA4B;AACzD,SAAO,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AACnD,SAAK,QAAQ,CAAC,UAAW,QAAQ,OAAO,KAAK,IAAI,QAAQ,CAAE;AAAA,EAC5D,CAAC;AACF;AAEA,eAAsB,QAAQ,MAA4B;AACzD,SAAO,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AACnD,SAAK,QAAQ,CAAC,UAAW,QAAQ,OAAO,KAAK,IAAI,QAAQ,CAAE;AAAA,EAC5D,CAAC;AACF;AAEA,eAAsB,QACrB,MACA,SACA,OACC;AACD,SAAO,MAAM,IAAI,QAA2B,CAAC,SAAS,WAAW;AAChE,SAAK,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,MACA,UAAU,CAAC,OAAO,GAAG,SAAU,QAAQ,OAAO,KAAK,IAAI,QAAQ,IAAI;AAAA,IACpE,CAAC;AAAA,EACF,CAAC;AACF;","names":["pick"]}
@@ -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"],"icon":"fa:check-double"},
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/project"}},"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/project"}},"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/project"}},"supportedNodes":["jira","jiraTrigger"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Jira/jira.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/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"}},
@@ -307,7 +307,7 @@
307
307
  {"name":"slackOAuth2Api","extends":["oAuth2Api"],"displayName":"Slack OAuth2 API","documentationUrl":"slack","properties":[{"displayName":"Grant Type","name":"grantType","type":"hidden","default":"authorizationCode"},{"displayName":"Authorization URL","name":"authUrl","type":"hidden","default":"https://slack.com/oauth/v2/authorize"},{"displayName":"Access Token URL","name":"accessTokenUrl","type":"hidden","default":"https://slack.com/api/oauth.v2.access"},{"displayName":"Scope","name":"scope","type":"hidden","default":"chat:write"},{"displayName":"Auth URI Query Parameters","name":"authQueryParameters","type":"hidden","default":"user_scope=channels:read channels:write chat:write files:read files:write groups:read im:read mpim:read reactions:read reactions:write stars:read stars:write usergroups:write usergroups:read users.profile:read users.profile:write users:read"},{"displayName":"Authentication","name":"authentication","type":"hidden","default":"body"},{"displayName":"If you get an Invalid Scopes error, make sure you add the correct one <a target=\"_blank\" href=\"https://docs.n8n.io/integrations/builtin/credentials/slack/#using-oauth\">here</a> to your Slack integration","name":"notice","type":"notice","default":""}],"supportedNodes":["slack"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Slack/slack.svg"},
308
308
  {"name":"sms77Api","displayName":"seven API","documentationUrl":"sms77","properties":[{"displayName":"API Key","name":"apiKey","type":"string","typeOptions":{"password":true},"default":""}],"authenticate":{"type":"generic","properties":{"headers":{"X-Api-Key":"={{$credentials.apiKey}}"}}},"test":{"request":{"baseURL":"https://gateway.seven.io/api","url":"/hooks","qs":{"action":"read"}},"rules":[{"type":"responseSuccessBody","properties":{"key":"success","message":"Invalid API Key"}}]},"supportedNodes":["sms77"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Sms77/seven.svg"},
309
309
  {"name":"smtp","displayName":"SMTP","documentationUrl":"sendemail","properties":[{"displayName":"User","name":"user","type":"string","default":""},{"displayName":"Password","name":"password","type":"string","typeOptions":{"password":true},"default":""},{"displayName":"Host","name":"host","type":"string","default":""},{"displayName":"Port","name":"port","type":"number","default":465},{"displayName":"SSL/TLS","name":"secure","type":"boolean","default":true},{"displayName":"Disable STARTTLS","name":"disableStartTls","type":"boolean","default":false,"displayOptions":{"show":{"secure":[false]}}},{"displayName":"Client Host Name","name":"hostName","type":"string","default":"","placeholder":"","description":"The hostname of the client, used for identifying to the server"}],"supportedNodes":["emailSend"],"icon":"fa:envelope"},
310
- {"name":"snowflake","displayName":"Snowflake","documentationUrl":"snowflake","properties":[{"displayName":"Account","name":"account","type":"string","default":"","description":"Enter the name of your Snowflake account"},{"displayName":"Database","name":"database","type":"string","default":"","description":"Specify the database you want to use after creating the connection"},{"displayName":"Warehouse","name":"warehouse","type":"string","default":"","description":"The default virtual warehouse to use for the session after connecting. Used for performing queries, loading data, etc."},{"displayName":"Authentication","name":"authentication","type":"options","options":[{"name":"Password","value":"password"},{"name":"Key-Pair","value":"keyPair"}],"default":"password","description":"The way to authenticate with Snowflake"},{"displayName":"Username","name":"username","type":"string","default":"","displayOptions":{"show":{"authentication":["password"]}}},{"displayName":"Password","name":"password","type":"string","typeOptions":{"password":true},"default":"","displayOptions":{"show":{"authentication":["password"]}}},{"displayName":"Private Key","name":"privateKey","type":"string","typeOptions":{"password":true,"rows":4},"default":"","required":true,"displayOptions":{"show":{"authentication":["keyPair"]}},"description":"Private PEM key for Key-pair authentication with Snowflake"},{"displayName":"Schema","name":"schema","type":"string","default":"","description":"Enter the schema you want to use after creating the connection"},{"displayName":"Role","name":"role","type":"string","default":"","description":"Enter the security role you want to use after creating the connection"},{"displayName":"Client Session Keep Alive","name":"clientSessionKeepAlive","type":"boolean","default":false,"description":"Whether to keep alive the client session. By default, client connections typically time out approximately 3-4 hours after the most recent query was executed. If the parameter clientSessionKeepAlive is set to true, the client’s connection to the server will be kept alive indefinitely, even if no queries are executed."}],"supportedNodes":["snowflake"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Snowflake/snowflake.svg"},
310
+ {"name":"snowflake","displayName":"Snowflake","documentationUrl":"snowflake","properties":[{"displayName":"Account","name":"account","type":"string","default":"","description":"Enter the name of your Snowflake account"},{"displayName":"Database","name":"database","type":"string","default":"","description":"Specify the database you want to use after creating the connection"},{"displayName":"Warehouse","name":"warehouse","type":"string","default":"","description":"The default virtual warehouse to use for the session after connecting. Used for performing queries, loading data, etc."},{"displayName":"Authentication","name":"authentication","type":"options","options":[{"name":"Password","value":"password"},{"name":"Key-Pair","value":"keyPair"}],"default":"password","description":"The way to authenticate with Snowflake"},{"displayName":"Username","name":"username","type":"string","default":""},{"displayName":"Password","name":"password","type":"string","typeOptions":{"password":true},"default":"","displayOptions":{"show":{"authentication":["password"]}}},{"displayName":"Private Key","name":"privateKey","type":"string","typeOptions":{"password":true,"rows":4},"default":"","required":true,"displayOptions":{"show":{"authentication":["keyPair"]}},"description":"Private PEM key for Key-pair authentication with Snowflake, follow guide <a href=\"https://docs.snowflake.com/en/user-guide/key-pair-auth\" target=\"_blank\">here</a>"},{"displayName":"Passphrase","name":"passphrase","type":"string","default":"","description":"If the private key is encrypted, you must provide the passphrase used to encrypt it","typeOptions":{"password":true}},{"displayName":"Schema","name":"schema","type":"string","default":"","description":"Enter the schema you want to use after creating the connection"},{"displayName":"Role","name":"role","type":"string","default":"","description":"Enter the security role you want to use after creating the connection"},{"displayName":"Client Session Keep Alive","name":"clientSessionKeepAlive","type":"boolean","default":false,"description":"Whether to keep alive the client session. By default, client connections typically time out approximately 3-4 hours after the most recent query was executed. If the parameter clientSessionKeepAlive is set to true, the client’s connection to the server will be kept alive indefinitely, even if no queries are executed."}],"supportedNodes":["snowflake"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Snowflake/snowflake.svg"},
311
311
  {"name":"solarWindsIpamApi","displayName":"SolarWinds IPAM","documentationUrl":"solarwindsipam","httpRequestNode":{"name":"SolarWinds IPAM","docsUrl":"https://www.solarwinds.com/ip-address-manager","apiBaseUrlPlaceholder":"https://your-ipam-server"},"properties":[{"displayName":"Base URL","name":"url","required":true,"type":"string","default":"","placeholder":"https://your-ipam-server","description":"The base URL of your SolarWinds IPAM server."},{"displayName":"Username","name":"username","required":true,"type":"string","default":"","description":"The username for SolarWinds IPAM API."},{"displayName":"Password","name":"password","required":true,"type":"string","typeOptions":{"password":true},"default":"","description":"The password for SolarWinds IPAM API."}],"authenticate":{"type":"generic","properties":{"auth":{"username":"={{$credentials.username}}","password":"={{$credentials.password}}"}}},"test":{"request":{"baseURL":"={{$credentials.url}}","url":"/SolarWinds/InformationService/v3/Json/Query","method":"GET","qs":{"query":"SELECT TOP 1 AccountID FROM IPAM.AccountRoles"},"skipSslCertificateValidation":true},"rules":[{"type":"responseCode","properties":{"value":403,"message":"Connection failed: Invalid credentials or unreachable server"}}]},"iconUrl":{"light":"icons/n8n-nodes-base/dist/credentials/icons/SolarWindsIpam.svg","dark":"icons/n8n-nodes-base/dist/credentials/icons/SolarWindsIpam.svg"},"supportedNodes":[]},
312
312
  {"name":"solarWindsObservabilityApi","displayName":"SolarWinds Observability","documentationUrl":"solarwindsobservability","httpRequestNode":{"name":"SolarWinds Observability","docsUrl":"https://documentation.solarwinds.com/en/success_center/observability/content/api/api-swagger.htm","apiBaseUrlPlaceholder":"https://api.xx-yy.cloud.solarwinds.com/"},"properties":[{"displayName":"URL","name":"url","required":true,"type":"string","default":""},{"displayName":"API Token","name":"apiToken","required":true,"type":"string","typeOptions":{"password":true},"default":""}],"authenticate":{"type":"generic","properties":{"headers":{"Authorization":"=Bearer {{$credentials.apiToken}}","Content-Type":"application/json-rpc"}}},"test":{"request":{"baseURL":"={{$credentials.url}}","url":"/v1/logs","method":"GET"},"rules":[{"type":"responseSuccessBody","properties":{"key":"error","value":"invalid_auth","message":"Invalid access token"}}]},"iconUrl":{"light":"icons/n8n-nodes-base/dist/credentials/icons/SolarWindsObservability.svg","dark":"icons/n8n-nodes-base/dist/credentials/icons/SolarWindsObservability.svg"},"supportedNodes":[]},
313
313
  {"name":"splunkApi","displayName":"Splunk API","documentationUrl":"splunk","properties":[{"displayName":"Auth Token","name":"authToken","type":"string","typeOptions":{"password":true},"default":""},{"displayName":"Base URL","name":"baseUrl","type":"string","description":"Protocol, domain and port","placeholder":"e.g. https://localhost:8089","default":""},{"displayName":"Allow Self-Signed Certificates","name":"allowUnauthorizedCerts","type":"boolean","description":"Whether to connect even if SSL certificate validation is not possible","default":false}],"authenticate":{"type":"generic","properties":{"headers":{"Authorization":"=Bearer {{$credentials?.authToken}}"}}},"test":{"request":{"url":"={{$credentials.baseUrl}}/services/alerts/fired_alerts","method":"GET","skipSslCertificateValidation":"={{$credentials?.allowUnauthorizedCerts}}"}},"supportedNodes":["splunk"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Splunk/splunk.svg"},