n8n-nodes-base 1.88.0 → 1.89.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 (40) hide show
  1. package/dist/credentials/Aws.credentials.js +16 -2
  2. package/dist/credentials/Aws.credentials.js.map +1 -1
  3. package/dist/nodes/Airtable/v2/actions/record/update.operation.js +15 -3
  4. package/dist/nodes/Airtable/v2/actions/record/update.operation.js.map +1 -1
  5. package/dist/nodes/Form/utils.js +2 -7
  6. package/dist/nodes/Form/utils.js.map +1 -1
  7. package/dist/nodes/Freshdesk/Freshdesk.node.js +3 -6
  8. package/dist/nodes/Freshdesk/Freshdesk.node.js.map +1 -1
  9. package/dist/nodes/HttpRequest/V3/Description.js +8 -0
  10. package/dist/nodes/HttpRequest/V3/Description.js.map +1 -1
  11. package/dist/nodes/HttpRequest/V3/HttpRequestV3.node.js +23 -5
  12. package/dist/nodes/HttpRequest/V3/HttpRequestV3.node.js.map +1 -1
  13. package/dist/nodes/HttpRequest/shared/optimizeResponse.js +387 -0
  14. package/dist/nodes/HttpRequest/shared/optimizeResponse.js.map +1 -0
  15. package/dist/nodes/Hubspot/V2/HubspotV2.node.js +10 -2
  16. package/dist/nodes/Hubspot/V2/HubspotV2.node.js.map +1 -1
  17. package/dist/nodes/LinkedIn/GenericFunctions.js +1 -1
  18. package/dist/nodes/LinkedIn/GenericFunctions.js.map +1 -1
  19. package/dist/nodes/Postgres/v2/helpers/utils.js +3 -1
  20. package/dist/nodes/Postgres/v2/helpers/utils.js.map +1 -1
  21. package/dist/nodes/RespondToWebhook/RespondToWebhook.node.js +57 -48
  22. package/dist/nodes/RespondToWebhook/RespondToWebhook.node.js.map +1 -1
  23. package/dist/nodes/Supabase/GenericFunctions.js +13 -4
  24. package/dist/nodes/Supabase/GenericFunctions.js.map +1 -1
  25. package/dist/nodes/Supabase/RowDescription.js +1 -0
  26. package/dist/nodes/Supabase/RowDescription.js.map +1 -1
  27. package/dist/nodes/Supabase/Supabase.node.js +17 -0
  28. package/dist/nodes/Supabase/Supabase.node.js.map +1 -1
  29. package/dist/nodes/Telegram/TelegramTrigger.node.js +4 -60
  30. package/dist/nodes/Telegram/TelegramTrigger.node.js.map +1 -1
  31. package/dist/nodes/Telegram/util/triggerUtils.js +88 -0
  32. package/dist/nodes/Telegram/util/triggerUtils.js.map +1 -0
  33. package/dist/nodes/Wait/Wait.node.js +5 -6
  34. package/dist/nodes/Wait/Wait.node.js.map +1 -1
  35. package/dist/test/nodes/Helpers.js +4 -2
  36. package/dist/test/nodes/Helpers.js.map +1 -1
  37. package/dist/test/nodes/TriggerHelpers.js +5 -2
  38. package/dist/test/nodes/TriggerHelpers.js.map +1 -1
  39. package/dist/types/nodes.json +5 -5
  40. package/package.json +8 -6
@@ -38,7 +38,7 @@ async function linkedInApiRequest(method, endpoint, body = {}, binary, _headers)
38
38
  headers: {
39
39
  Accept: "application/json",
40
40
  "X-Restli-Protocol-Version": "2.0.0",
41
- "LinkedIn-Version": "202404"
41
+ "LinkedIn-Version": "202504"
42
42
  },
43
43
  method,
44
44
  body,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../nodes/LinkedIn/GenericFunctions.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tIExecuteFunctions,\n\tIHookFunctions,\n\tILoadOptionsFunctions,\n\tJsonObject,\n\tIRequestOptions,\n\tIHttpRequestMethods,\n} from 'n8n-workflow';\nimport { NodeApiError } from 'n8n-workflow';\nfunction resolveHeaderData(fullResponse: any) {\n\tif (fullResponse.statusCode === 201) {\n\t\treturn { urn: fullResponse.headers['x-restli-id'] };\n\t} else {\n\t\treturn fullResponse.body;\n\t}\n}\n\nexport async function linkedInApiRequest(\n\tthis: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions,\n\tmethod: IHttpRequestMethods,\n\tendpoint: string,\n\n\tbody: any = {},\n\tbinary?: boolean,\n\t_headers?: object,\n): Promise<any> {\n\tconst authenticationMethod = this.getNodeParameter('authentication', 0);\n\tconst credentialType =\n\t\tauthenticationMethod === 'standard'\n\t\t\t? 'linkedInOAuth2Api'\n\t\t\t: 'linkedInCommunityManagementOAuth2Api';\n\n\tconst baseUrl = 'https://api.linkedin.com';\n\n\tlet options: IRequestOptions = {\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'X-Restli-Protocol-Version': '2.0.0',\n\t\t\t'LinkedIn-Version': '202404',\n\t\t},\n\t\tmethod,\n\t\tbody,\n\t\turl: binary ? endpoint : `${baseUrl}${endpoint.includes('v2') ? '' : '/rest'}${endpoint}`,\n\t\tjson: true,\n\t};\n\n\toptions = Object.assign({}, options, {\n\t\tresolveWithFullResponse: true,\n\t});\n\t// If uploading binary data\n\tif (binary) {\n\t\tdelete options.json;\n\t\toptions.encoding = null;\n\t\tif (Object.keys(_headers as object).length > 0) {\n\t\t\tObject.assign(options.headers as object, _headers);\n\t\t}\n\t}\n\n\tif (Object.keys(body as IDataObject).length === 0) {\n\t\tdelete options.body;\n\t}\n\n\ttry {\n\t\treturn resolveHeaderData(\n\t\t\tawait this.helpers.requestOAuth2.call(this, credentialType, options, {\n\t\t\t\ttokenType: 'Bearer',\n\t\t\t}),\n\t\t);\n\t} catch (error) {\n\t\tthrow new NodeApiError(this.getNode(), error as JsonObject);\n\t}\n}\n\nexport function validateJSON(json: string | undefined): any {\n\tlet result;\n\ttry {\n\t\tresult = JSON.parse(json!);\n\t} catch (exception) {\n\t\tresult = '';\n\t}\n\treturn result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,0BAA6B;AAC7B,SAAS,kBAAkB,cAAmB;AAC7C,MAAI,aAAa,eAAe,KAAK;AACpC,WAAO,EAAE,KAAK,aAAa,QAAQ,aAAa,EAAE;AAAA,EACnD,OAAO;AACN,WAAO,aAAa;AAAA,EACrB;AACD;AAEA,eAAsB,mBAErB,QACA,UAEA,OAAY,CAAC,GACb,QACA,UACe;AACf,QAAM,uBAAuB,KAAK,iBAAiB,kBAAkB,CAAC;AACtE,QAAM,iBACL,yBAAyB,aACtB,sBACA;AAEJ,QAAM,UAAU;AAEhB,MAAI,UAA2B;AAAA,IAC9B,SAAS;AAAA,MACR,QAAQ;AAAA,MACR,6BAA6B;AAAA,MAC7B,oBAAoB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK,SAAS,WAAW,GAAG,OAAO,GAAG,SAAS,SAAS,IAAI,IAAI,KAAK,OAAO,GAAG,QAAQ;AAAA,IACvF,MAAM;AAAA,EACP;AAEA,YAAU,OAAO,OAAO,CAAC,GAAG,SAAS;AAAA,IACpC,yBAAyB;AAAA,EAC1B,CAAC;AAED,MAAI,QAAQ;AACX,WAAO,QAAQ;AACf,YAAQ,WAAW;AACnB,QAAI,OAAO,KAAK,QAAkB,EAAE,SAAS,GAAG;AAC/C,aAAO,OAAO,QAAQ,SAAmB,QAAQ;AAAA,IAClD;AAAA,EACD;AAEA,MAAI,OAAO,KAAK,IAAmB,EAAE,WAAW,GAAG;AAClD,WAAO,QAAQ;AAAA,EAChB;AAEA,MAAI;AACH,WAAO;AAAA,MACN,MAAM,KAAK,QAAQ,cAAc,KAAK,MAAM,gBAAgB,SAAS;AAAA,QACpE,WAAW;AAAA,MACZ,CAAC;AAAA,IACF;AAAA,EACD,SAAS,OAAO;AACf,UAAM,IAAI,iCAAa,KAAK,QAAQ,GAAG,KAAmB;AAAA,EAC3D;AACD;AAEO,SAAS,aAAa,MAA+B;AAC3D,MAAI;AACJ,MAAI;AACH,aAAS,KAAK,MAAM,IAAK;AAAA,EAC1B,SAAS,WAAW;AACnB,aAAS;AAAA,EACV;AACA,SAAO;AACR;","names":[]}
1
+ {"version":3,"sources":["../../../nodes/LinkedIn/GenericFunctions.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tIExecuteFunctions,\n\tIHookFunctions,\n\tILoadOptionsFunctions,\n\tJsonObject,\n\tIRequestOptions,\n\tIHttpRequestMethods,\n} from 'n8n-workflow';\nimport { NodeApiError } from 'n8n-workflow';\nfunction resolveHeaderData(fullResponse: any) {\n\tif (fullResponse.statusCode === 201) {\n\t\treturn { urn: fullResponse.headers['x-restli-id'] };\n\t} else {\n\t\treturn fullResponse.body;\n\t}\n}\n\nexport async function linkedInApiRequest(\n\tthis: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions,\n\tmethod: IHttpRequestMethods,\n\tendpoint: string,\n\n\tbody: any = {},\n\tbinary?: boolean,\n\t_headers?: object,\n): Promise<any> {\n\tconst authenticationMethod = this.getNodeParameter('authentication', 0);\n\tconst credentialType =\n\t\tauthenticationMethod === 'standard'\n\t\t\t? 'linkedInOAuth2Api'\n\t\t\t: 'linkedInCommunityManagementOAuth2Api';\n\n\tconst baseUrl = 'https://api.linkedin.com';\n\n\tlet options: IRequestOptions = {\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'X-Restli-Protocol-Version': '2.0.0',\n\t\t\t'LinkedIn-Version': '202504',\n\t\t},\n\t\tmethod,\n\t\tbody,\n\t\turl: binary ? endpoint : `${baseUrl}${endpoint.includes('v2') ? '' : '/rest'}${endpoint}`,\n\t\tjson: true,\n\t};\n\n\toptions = Object.assign({}, options, {\n\t\tresolveWithFullResponse: true,\n\t});\n\t// If uploading binary data\n\tif (binary) {\n\t\tdelete options.json;\n\t\toptions.encoding = null;\n\t\tif (Object.keys(_headers as object).length > 0) {\n\t\t\tObject.assign(options.headers as object, _headers);\n\t\t}\n\t}\n\n\tif (Object.keys(body as IDataObject).length === 0) {\n\t\tdelete options.body;\n\t}\n\n\ttry {\n\t\treturn resolveHeaderData(\n\t\t\tawait this.helpers.requestOAuth2.call(this, credentialType, options, {\n\t\t\t\ttokenType: 'Bearer',\n\t\t\t}),\n\t\t);\n\t} catch (error) {\n\t\tthrow new NodeApiError(this.getNode(), error as JsonObject);\n\t}\n}\n\nexport function validateJSON(json: string | undefined): any {\n\tlet result;\n\ttry {\n\t\tresult = JSON.parse(json!);\n\t} catch (exception) {\n\t\tresult = '';\n\t}\n\treturn result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,0BAA6B;AAC7B,SAAS,kBAAkB,cAAmB;AAC7C,MAAI,aAAa,eAAe,KAAK;AACpC,WAAO,EAAE,KAAK,aAAa,QAAQ,aAAa,EAAE;AAAA,EACnD,OAAO;AACN,WAAO,aAAa;AAAA,EACrB;AACD;AAEA,eAAsB,mBAErB,QACA,UAEA,OAAY,CAAC,GACb,QACA,UACe;AACf,QAAM,uBAAuB,KAAK,iBAAiB,kBAAkB,CAAC;AACtE,QAAM,iBACL,yBAAyB,aACtB,sBACA;AAEJ,QAAM,UAAU;AAEhB,MAAI,UAA2B;AAAA,IAC9B,SAAS;AAAA,MACR,QAAQ;AAAA,MACR,6BAA6B;AAAA,MAC7B,oBAAoB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK,SAAS,WAAW,GAAG,OAAO,GAAG,SAAS,SAAS,IAAI,IAAI,KAAK,OAAO,GAAG,QAAQ;AAAA,IACvF,MAAM;AAAA,EACP;AAEA,YAAU,OAAO,OAAO,CAAC,GAAG,SAAS;AAAA,IACpC,yBAAyB;AAAA,EAC1B,CAAC;AAED,MAAI,QAAQ;AACX,WAAO,QAAQ;AACf,YAAQ,WAAW;AACnB,QAAI,OAAO,KAAK,QAAkB,EAAE,SAAS,GAAG;AAC/C,aAAO,OAAO,QAAQ,SAAmB,QAAQ;AAAA,IAClD;AAAA,EACD;AAEA,MAAI,OAAO,KAAK,IAAmB,EAAE,WAAW,GAAG;AAClD,WAAO,QAAQ;AAAA,EAChB;AAEA,MAAI;AACH,WAAO;AAAA,MACN,MAAM,KAAK,QAAQ,cAAc,KAAK,MAAM,gBAAgB,SAAS;AAAA,QACpE,WAAW;AAAA,MACZ,CAAC;AAAA,IACF;AAAA,EACD,SAAS,OAAO;AACf,UAAM,IAAI,iCAAa,KAAK,QAAQ,GAAG,KAAmB;AAAA,EAC3D;AACD;AAEO,SAAS,aAAa,MAA+B;AAC3D,MAAI;AACJ,MAAI;AACH,aAAS,KAAK,MAAM,IAAK;AAAA,EAC1B,SAAS,WAAW;AACnB,aAAS;AAAA,EACV;AACA,SAAO;AACR;","names":[]}
@@ -328,7 +328,9 @@ function hasJsonDataTypeInSchema(schema) {
328
328
  return schema.some(({ data_type }) => data_type === "json");
329
329
  }
330
330
  function convertValuesToJsonWithPgp(pgp, schema, values) {
331
- schema.filter(({ data_type }) => data_type === "json").forEach(({ column_name }) => {
331
+ schema.filter(
332
+ ({ data_type, column_name }) => data_type === "json" && values[column_name] !== null && values[column_name] !== void 0
333
+ ).forEach(({ column_name }) => {
332
334
  values[column_name] = pgp.as.json(values[column_name], true);
333
335
  });
334
336
  return values;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../nodes/Postgres/v2/helpers/utils.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tIExecuteFunctions,\n\tINode,\n\tINodeExecutionData,\n\tINodePropertyOptions,\n\tNodeParameterValueType,\n} from 'n8n-workflow';\nimport { NodeOperationError, jsonParse } from 'n8n-workflow';\n\nimport type {\n\tColumnInfo,\n\tEnumInfo,\n\tPgpClient,\n\tPgpDatabase,\n\tQueryMode,\n\tQueryValues,\n\tQueryWithValues,\n\tSortRule,\n\tWhereClause,\n} from './interfaces';\nimport { generatePairedItemData } from '../../../../utils/utilities';\n\nexport function isJSON(str: string) {\n\ttry {\n\t\tJSON.parse(str.trim());\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function evaluateExpression(expression: NodeParameterValueType) {\n\tif (expression === undefined) {\n\t\treturn '';\n\t} else if (expression === null) {\n\t\treturn 'null';\n\t} else {\n\t\treturn typeof expression === 'object' ? JSON.stringify(expression) : expression.toString();\n\t}\n}\n\nexport function stringToArray(str: NodeParameterValueType | undefined) {\n\tif (str === undefined) return [];\n\treturn String(str)\n\t\t.split(',')\n\t\t.filter((entry) => entry)\n\t\t.map((entry) => entry.trim());\n}\n\nexport function wrapData(data: IDataObject | 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\nexport function prepareErrorItem(\n\titems: INodeExecutionData[],\n\terror: IDataObject | NodeOperationError | Error,\n\tindex: number,\n) {\n\treturn {\n\t\tjson: { message: error.message, item: { ...items[index].json }, error: { ...error } },\n\t\tpairedItem: { item: index },\n\t} as INodeExecutionData;\n}\n\nexport function parsePostgresError(\n\tnode: INode,\n\terror: any,\n\tqueries: QueryWithValues[],\n\titemIndex?: number,\n) {\n\tif (error.message.includes('syntax error at or near') && queries.length) {\n\t\ttry {\n\t\t\tconst snippet = error.message.match(/syntax error at or near \"(.*)\"/)[1] as string;\n\t\t\tconst failedQureryIndex = queries.findIndex((query) => query.query.includes(snippet));\n\n\t\t\tif (failedQureryIndex !== -1) {\n\t\t\t\tif (!itemIndex) {\n\t\t\t\t\titemIndex = failedQureryIndex;\n\t\t\t\t}\n\t\t\t\tconst failedQuery = queries[failedQureryIndex].query;\n\t\t\t\tconst lines = failedQuery.split('\\n');\n\t\t\t\tconst lineIndex = lines.findIndex((line) => line.includes(snippet));\n\t\t\t\tconst errorMessage = `Syntax error at line ${lineIndex + 1} near \"${snippet}\"`;\n\t\t\t\terror.message = errorMessage;\n\t\t\t}\n\t\t} catch {}\n\t}\n\n\tlet message = error.message;\n\tconst errorDescription = error.description ? error.description : error.detail || error.hint;\n\tlet description = errorDescription;\n\n\tif (!description && queries[itemIndex || 0]?.query) {\n\t\tdescription = `Failed query: ${queries[itemIndex || 0].query}`;\n\t}\n\n\tif (error.message.includes('ECONNREFUSED')) {\n\t\tmessage = 'Connection refused';\n\t\ttry {\n\t\t\tdescription = error.message.split('ECONNREFUSED ')[1].trim();\n\t\t} catch (e) {}\n\t}\n\n\tif (error.message.includes('ENOTFOUND')) {\n\t\tmessage = 'Host not found';\n\t\ttry {\n\t\t\tdescription = error.message.split('ENOTFOUND ')[1].trim();\n\t\t} catch (e) {}\n\t}\n\n\tif (error.message.includes('ETIMEDOUT')) {\n\t\tmessage = 'Connection timed out';\n\t\ttry {\n\t\t\tdescription = error.message.split('ETIMEDOUT ')[1].trim();\n\t\t} catch (e) {}\n\t}\n\n\treturn new NodeOperationError(node, error as Error, {\n\t\tmessage,\n\t\tdescription,\n\t\titemIndex,\n\t});\n}\n\nexport function addWhereClauses(\n\tnode: INode,\n\titemIndex: number,\n\tquery: string,\n\tclauses: WhereClause[],\n\treplacements: QueryValues,\n\tcombineConditions: string,\n): [string, QueryValues] {\n\tif (clauses.length === 0) return [query, replacements];\n\n\tlet combineWith = 'AND';\n\n\tif (combineConditions === 'OR') {\n\t\tcombineWith = 'OR';\n\t}\n\n\tlet replacementIndex = replacements.length + 1;\n\n\tlet whereQuery = ' WHERE';\n\tconst values: QueryValues = [];\n\n\tclauses.forEach((clause, index) => {\n\t\tif (clause.condition === 'equal') {\n\t\t\tclause.condition = '=';\n\t\t}\n\t\tif (['>', '<', '>=', '<='].includes(clause.condition)) {\n\t\t\tconst value = Number(clause.value);\n\n\t\t\tif (Number.isNaN(value)) {\n\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\tnode,\n\t\t\t\t\t`Operator in entry ${index + 1} of 'Select Rows' works with numbers, but value ${\n\t\t\t\t\t\tclause.value\n\t\t\t\t\t} is not a number`,\n\t\t\t\t\t{\n\t\t\t\t\t\titemIndex,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tclause.value = value;\n\t\t}\n\t\tconst columnReplacement = `$${replacementIndex}:name`;\n\t\tvalues.push(clause.column);\n\t\treplacementIndex = replacementIndex + 1;\n\n\t\tlet valueReplacement = '';\n\t\tif (clause.condition !== 'IS NULL' && clause.condition !== 'IS NOT NULL') {\n\t\t\tvalueReplacement = ` $${replacementIndex}`;\n\t\t\tvalues.push(clause.value);\n\t\t\treplacementIndex = replacementIndex + 1;\n\t\t}\n\n\t\tconst operator = index === clauses.length - 1 ? '' : ` ${combineWith}`;\n\n\t\twhereQuery += ` ${columnReplacement} ${clause.condition}${valueReplacement}${operator}`;\n\t});\n\n\treturn [`${query}${whereQuery}`, replacements.concat(...values)];\n}\n\nexport function addSortRules(\n\tquery: string,\n\trules: SortRule[],\n\treplacements: QueryValues,\n): [string, QueryValues] {\n\tif (rules.length === 0) return [query, replacements];\n\n\tlet replacementIndex = replacements.length + 1;\n\n\tlet orderByQuery = ' ORDER BY';\n\tconst values: string[] = [];\n\n\trules.forEach((rule, index) => {\n\t\tconst columnReplacement = `$${replacementIndex}:name`;\n\t\tvalues.push(rule.column);\n\t\treplacementIndex = replacementIndex + 1;\n\n\t\tconst endWith = index === rules.length - 1 ? '' : ',';\n\n\t\tconst sortDirection = rule.direction === 'DESC' ? 'DESC' : 'ASC';\n\n\t\torderByQuery += ` ${columnReplacement} ${sortDirection}${endWith}`;\n\t});\n\n\treturn [`${query}${orderByQuery}`, replacements.concat(...values)];\n}\n\nexport function addReturning(\n\tquery: string,\n\toutputColumns: string[],\n\treplacements: QueryValues,\n): [string, QueryValues] {\n\tif (outputColumns.includes('*')) return [`${query} RETURNING *`, replacements];\n\n\tconst replacementIndex = replacements.length + 1;\n\n\treturn [`${query} RETURNING $${replacementIndex}:name`, [...replacements, outputColumns]];\n}\n\nconst isSelectQuery = (query: string) => {\n\treturn query\n\t\t.replace(/\\/\\*.*?\\*\\//g, '') // remove multiline comments\n\t\t.replace(/\\n/g, '')\n\t\t.split(';')\n\t\t.filter((statement) => statement && !statement.startsWith('--')) // remove comments and empty statements\n\t\t.every((statement) => statement.trim().toLowerCase().startsWith('select'));\n};\n\nexport function configureQueryRunner(\n\tthis: IExecuteFunctions,\n\tnode: INode,\n\tcontinueOnFail: boolean,\n\tpgp: PgpClient,\n\tdb: PgpDatabase,\n) {\n\treturn async (queries: QueryWithValues[], items: INodeExecutionData[], options: IDataObject) => {\n\t\tlet returnData: INodeExecutionData[] = [];\n\t\tconst emptyReturnData: INodeExecutionData[] =\n\t\t\toptions.operation === 'select' ? [] : [{ json: { success: true } }];\n\n\t\tconst queryBatching = (options.queryBatching as QueryMode) || 'single';\n\n\t\tif (queryBatching === 'single') {\n\t\t\ttry {\n\t\t\t\treturnData = (await db.multi(pgp.helpers.concat(queries)))\n\t\t\t\t\t.map((result, i) => {\n\t\t\t\t\t\treturn this.helpers.constructExecutionMetaData(wrapData(result 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\t.flat();\n\n\t\t\t\tif (!returnData.length) {\n\t\t\t\t\tconst pairedItem = generatePairedItemData(queries.length);\n\n\t\t\t\t\tif ((options?.nodeVersion as number) < 2.3) {\n\t\t\t\t\t\tif (emptyReturnData.length) {\n\t\t\t\t\t\t\temptyReturnData[0].pairedItem = pairedItem;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturnData = emptyReturnData;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturnData = queries.every((query) => isSelectQuery(query.query))\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: [{ json: { success: true }, pairedItem }];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconst error = parsePostgresError(node, err, queries);\n\t\t\t\tif (!continueOnFail) throw error;\n\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tjson: {\n\t\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\t\terror: { ...error },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\n\t\tif (queryBatching === 'transaction') {\n\t\t\treturnData = await db.tx(async (transaction) => {\n\t\t\t\tconst result: INodeExecutionData[] = [];\n\t\t\t\tfor (let i = 0; i < queries.length; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst query = queries[i].query;\n\t\t\t\t\t\tconst values = queries[i].values;\n\n\t\t\t\t\t\tlet transactionResults;\n\t\t\t\t\t\tif ((options?.nodeVersion as number) < 2.3) {\n\t\t\t\t\t\t\ttransactionResults = await transaction.any(query, values);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttransactionResults = (await transaction.multi(query, values)).flat();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!transactionResults.length) {\n\t\t\t\t\t\t\tif ((options?.nodeVersion as number) < 2.3) {\n\t\t\t\t\t\t\t\ttransactionResults = emptyReturnData;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttransactionResults = isSelectQuery(query) ? [] : [{ success: true }];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\t\twrapData(transactionResults),\n\t\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst error = parsePostgresError(node, err, queries, i);\n\t\t\t\t\t\tif (!continueOnFail) throw error;\n\t\t\t\t\t\tresult.push(prepareErrorItem(items, error, i));\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}\n\n\t\tif (queryBatching === 'independently') {\n\t\t\treturnData = await db.task(async (task) => {\n\t\t\t\tconst result: INodeExecutionData[] = [];\n\t\t\t\tfor (let i = 0; i < queries.length; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst query = queries[i].query;\n\t\t\t\t\t\tconst values = queries[i].values;\n\n\t\t\t\t\t\tlet transactionResults;\n\t\t\t\t\t\tif ((options?.nodeVersion as number) < 2.3) {\n\t\t\t\t\t\t\ttransactionResults = await task.any(query, values);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttransactionResults = (await task.multi(query, values)).flat();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!transactionResults.length) {\n\t\t\t\t\t\t\tif ((options?.nodeVersion as number) < 2.3) {\n\t\t\t\t\t\t\t\ttransactionResults = emptyReturnData;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttransactionResults = isSelectQuery(query) ? [] : [{ success: true }];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\t\twrapData(transactionResults),\n\t\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst error = parsePostgresError(node, err, queries, i);\n\t\t\t\t\t\tif (!continueOnFail) throw error;\n\t\t\t\t\t\tresult.push(prepareErrorItem(items, error, i));\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\n\t\treturn returnData;\n\t};\n}\n\nexport function replaceEmptyStringsByNulls(\n\titems: INodeExecutionData[],\n\treplace?: boolean,\n): INodeExecutionData[] {\n\tif (!replace) return items;\n\n\tconst returnData: INodeExecutionData[] = items.map((item) => {\n\t\tconst newItem = { ...item };\n\t\tconst keys = Object.keys(newItem.json);\n\n\t\tfor (const key of keys) {\n\t\t\tif (newItem.json[key] === '') {\n\t\t\t\tnewItem.json[key] = null;\n\t\t\t}\n\t\t}\n\n\t\treturn newItem;\n\t});\n\n\treturn returnData;\n}\n\nexport function prepareItem(values: IDataObject[]) {\n\tconst item = values.reduce((acc, { column, value }) => {\n\t\tacc[column as string] = value;\n\t\treturn acc;\n\t}, {} as IDataObject);\n\n\treturn item;\n}\n\nexport function hasJsonDataTypeInSchema(schema: ColumnInfo[]) {\n\treturn schema.some(({ data_type }) => data_type === 'json');\n}\n\nexport function convertValuesToJsonWithPgp(\n\tpgp: PgpClient,\n\tschema: ColumnInfo[],\n\tvalues: IDataObject,\n) {\n\tschema\n\t\t.filter(({ data_type }: { data_type: string }) => data_type === 'json')\n\t\t.forEach(({ column_name }) => {\n\t\t\tvalues[column_name] = pgp.as.json(values[column_name], true);\n\t\t});\n\n\treturn values;\n}\n\nexport async function columnFeatureSupport(\n\tdb: PgpDatabase,\n): Promise<{ identity_generation: boolean; is_generated: boolean }> {\n\tconst result = await db.any(\n\t\t`SELECT EXISTS (\n\t\t\tSELECT 1 FROM information_schema.columns WHERE table_name = 'columns' AND table_schema = 'information_schema' AND column_name = 'is_generated'\n\t\t) as is_generated,\n\t\tEXISTS (\n\t\t\tSELECT 1 FROM information_schema.columns WHERE table_name = 'columns' AND table_schema = 'information_schema' AND column_name = 'identity_generation'\n\t\t) as identity_generation;`,\n\t);\n\n\treturn result[0];\n}\n\nexport async function getTableSchema(\n\tdb: PgpDatabase,\n\tschema: string,\n\ttable: string,\n\toptions?: { getColumnsForResourceMapper?: boolean },\n): Promise<ColumnInfo[]> {\n\tconst select = ['column_name', 'data_type', 'is_nullable', 'udt_name', 'column_default'];\n\n\tif (options?.getColumnsForResourceMapper) {\n\t\t// Check if columns exist before querying (identity_generation was added in v10, is_generated in v12)\n\t\tconst supported = await columnFeatureSupport(db);\n\n\t\tif (supported.identity_generation) {\n\t\t\tselect.push('identity_generation');\n\t\t}\n\n\t\tif (supported.is_generated) {\n\t\t\tselect.push('is_generated');\n\t\t}\n\t}\n\n\tconst selectString = select.join(', ');\n\tconst columns = await db.any(\n\t\t`SELECT ${selectString} FROM information_schema.columns WHERE table_schema = $1 AND table_name = $2`,\n\t\t[schema, table],\n\t);\n\n\treturn columns;\n}\n\nexport async function uniqueColumns(db: PgpDatabase, table: string, schema = 'public') {\n\t// Using the modified query from https://wiki.postgresql.org/wiki/Retrieve_primary_key_columns\n\t// `quote_ident` - properly quote and escape an identifier\n\t// `::regclass` - cast a string to a regclass (internal type for object names)\n\tconst unique = await db.any(\n\t\t`\n\t\tSELECT DISTINCT a.attname\n\t\t\tFROM pg_index i JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)\n\t\tWHERE i.indrelid = (quote_ident($1) || '.' || quote_ident($2))::regclass\n\t\t\tAND (i.indisprimary OR i.indisunique);\n\t\t`,\n\t\t[schema, table],\n\t);\n\treturn unique as IDataObject[];\n}\n\nexport async function getEnums(db: PgpDatabase): Promise<EnumInfo[]> {\n\tconst enumsData = await db.any(\n\t\t'SELECT pg_type.typname, pg_enum.enumlabel FROM pg_type JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid;',\n\t);\n\treturn enumsData as EnumInfo[];\n}\n\nexport function getEnumValues(enumInfo: EnumInfo[], enumName: string): INodePropertyOptions[] {\n\treturn enumInfo.reduce((acc, current) => {\n\t\tif (current.typname === enumName) {\n\t\t\tacc.push({ name: current.enumlabel, value: current.enumlabel });\n\t\t}\n\t\treturn acc;\n\t}, [] as INodePropertyOptions[]);\n}\n\nexport async function doesRowExist(\n\tdb: PgpDatabase,\n\tschema: string,\n\ttable: string,\n\tvalues: string[],\n): Promise<boolean> {\n\tconst where = [];\n\tfor (let i = 3; i < 3 + values.length; i += 2) {\n\t\twhere.push(`$${i}:name=$${i + 1}`);\n\t}\n\tconst exists = await db.any(\n\t\t`SELECT EXISTS(SELECT 1 FROM $1:name.$2:name WHERE ${where.join(' AND ')})`,\n\t\t[schema, table, ...values],\n\t);\n\treturn exists[0].exists;\n}\n\nexport function checkItemAgainstSchema(\n\tnode: INode,\n\titem: IDataObject,\n\tcolumnsInfo: ColumnInfo[],\n\tindex: number,\n) {\n\tif (columnsInfo.length === 0) return item;\n\tconst schema = columnsInfo.reduce((acc, { column_name, data_type, is_nullable }) => {\n\t\tacc[column_name] = { type: data_type.toUpperCase(), nullable: is_nullable === 'YES' };\n\t\treturn acc;\n\t}, {} as IDataObject);\n\n\tfor (const key of Object.keys(item)) {\n\t\tif (schema[key] === undefined) {\n\t\t\tthrow new NodeOperationError(node, `Column '${key}' does not exist in selected table`, {\n\t\t\t\titemIndex: index,\n\t\t\t});\n\t\t}\n\t\tif (item[key] === null && !(schema[key] as IDataObject)?.nullable) {\n\t\t\tthrow new NodeOperationError(node, `Column '${key}' is not nullable`, {\n\t\t\t\titemIndex: index,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn item;\n}\n\nexport const configureTableSchemaUpdater = (initialSchema: string, initialTable: string) => {\n\tlet currentSchema = initialSchema;\n\tlet currentTable = initialTable;\n\treturn async (db: PgpDatabase, tableSchema: ColumnInfo[], schema: string, table: string) => {\n\t\tif (currentSchema !== schema || currentTable !== table) {\n\t\t\tcurrentSchema = schema;\n\t\t\tcurrentTable = table;\n\t\t\ttableSchema = await getTableSchema(db, schema, table);\n\t\t}\n\t\treturn tableSchema;\n\t};\n};\n\n/**\n * If postgress column type is array we need to convert it to fornmat that postgres understands, original object data would be modified\n * @param data the object with keys representing column names and values\n * @param schema table schema\n * @param node INode\n * @param itemIndex the index of the current item\n */\nexport const convertArraysToPostgresFormat = (\n\tdata: IDataObject,\n\tschema: ColumnInfo[],\n\tnode: INode,\n\titemIndex = 0,\n) => {\n\tfor (const columnInfo of schema) {\n\t\t//in case column type is array we need to convert it to fornmat that postgres understands\n\t\tif (columnInfo.data_type.toUpperCase() === 'ARRAY') {\n\t\t\tlet columnValue = data[columnInfo.column_name];\n\n\t\t\tif (typeof columnValue === 'string') {\n\t\t\t\tcolumnValue = jsonParse(columnValue);\n\t\t\t}\n\n\t\t\tif (Array.isArray(columnValue)) {\n\t\t\t\tconst arrayEntries = columnValue.map((entry) => {\n\t\t\t\t\tif (typeof entry === 'number') {\n\t\t\t\t\t\treturn entry;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof entry === 'boolean') {\n\t\t\t\t\t\tentry = String(entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof entry === 'object') {\n\t\t\t\t\t\tentry = JSON.stringify(entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof entry === 'string') {\n\t\t\t\t\t\treturn `\"${entry.replace(/\"/g, '\\\\\"')}\"`; //escape double quotes\n\t\t\t\t\t}\n\n\t\t\t\t\treturn entry;\n\t\t\t\t});\n\n\t\t\t\t//wrap in {} instead of [] as postgres does and join with ,\n\t\t\t\tdata[columnInfo.column_name] = `{${arrayEntries.join(',')}}`;\n\t\t\t} else {\n\t\t\t\tif (columnInfo.is_nullable === 'NO') {\n\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\t`Column '${columnInfo.column_name}' has to be an array`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\titemIndex,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport function addExecutionHints(\n\tcontext: IExecuteFunctions,\n\titems: INodeExecutionData[],\n\toperation: string,\n\texecuteOnce: boolean | undefined,\n) {\n\tif (operation === 'select' && items.length > 1 && !executeOnce) {\n\t\tcontext.addExecutionHints({\n\t\t\tmessage: `This node ran ${items.length} times, once for each input item. To run for the first item only, enable 'execute once' in the node settings`,\n\t\t\tlocation: 'outputPane',\n\t\t});\n\t}\n\n\tif (\n\t\toperation === 'executeQuery' &&\n\t\titems.length > 1 &&\n\t\t(context.getNodeParameter('options.queryBatching', 0, 'single') as string) === 'single' &&\n\t\t(context.getNodeParameter('query', 0, '') as string).toLowerCase().startsWith('insert')\n\t) {\n\t\tcontext.addExecutionHints({\n\t\t\tmessage:\n\t\t\t\t\"Inserts were batched for performance. If you need to preserve item matching, consider changing 'Query batching' to 'Independent' in the options.\",\n\t\t\tlocation: 'outputPane',\n\t\t});\n\t}\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../nodes/Postgres/v2/helpers/utils.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tIExecuteFunctions,\n\tINode,\n\tINodeExecutionData,\n\tINodePropertyOptions,\n\tNodeParameterValueType,\n} from 'n8n-workflow';\nimport { NodeOperationError, jsonParse } from 'n8n-workflow';\n\nimport type {\n\tColumnInfo,\n\tEnumInfo,\n\tPgpClient,\n\tPgpDatabase,\n\tQueryMode,\n\tQueryValues,\n\tQueryWithValues,\n\tSortRule,\n\tWhereClause,\n} from './interfaces';\nimport { generatePairedItemData } from '../../../../utils/utilities';\n\nexport function isJSON(str: string) {\n\ttry {\n\t\tJSON.parse(str.trim());\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function evaluateExpression(expression: NodeParameterValueType) {\n\tif (expression === undefined) {\n\t\treturn '';\n\t} else if (expression === null) {\n\t\treturn 'null';\n\t} else {\n\t\treturn typeof expression === 'object' ? JSON.stringify(expression) : expression.toString();\n\t}\n}\n\nexport function stringToArray(str: NodeParameterValueType | undefined) {\n\tif (str === undefined) return [];\n\treturn String(str)\n\t\t.split(',')\n\t\t.filter((entry) => entry)\n\t\t.map((entry) => entry.trim());\n}\n\nexport function wrapData(data: IDataObject | 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\nexport function prepareErrorItem(\n\titems: INodeExecutionData[],\n\terror: IDataObject | NodeOperationError | Error,\n\tindex: number,\n) {\n\treturn {\n\t\tjson: { message: error.message, item: { ...items[index].json }, error: { ...error } },\n\t\tpairedItem: { item: index },\n\t} as INodeExecutionData;\n}\n\nexport function parsePostgresError(\n\tnode: INode,\n\terror: any,\n\tqueries: QueryWithValues[],\n\titemIndex?: number,\n) {\n\tif (error.message.includes('syntax error at or near') && queries.length) {\n\t\ttry {\n\t\t\tconst snippet = error.message.match(/syntax error at or near \"(.*)\"/)[1] as string;\n\t\t\tconst failedQureryIndex = queries.findIndex((query) => query.query.includes(snippet));\n\n\t\t\tif (failedQureryIndex !== -1) {\n\t\t\t\tif (!itemIndex) {\n\t\t\t\t\titemIndex = failedQureryIndex;\n\t\t\t\t}\n\t\t\t\tconst failedQuery = queries[failedQureryIndex].query;\n\t\t\t\tconst lines = failedQuery.split('\\n');\n\t\t\t\tconst lineIndex = lines.findIndex((line) => line.includes(snippet));\n\t\t\t\tconst errorMessage = `Syntax error at line ${lineIndex + 1} near \"${snippet}\"`;\n\t\t\t\terror.message = errorMessage;\n\t\t\t}\n\t\t} catch {}\n\t}\n\n\tlet message = error.message;\n\tconst errorDescription = error.description ? error.description : error.detail || error.hint;\n\tlet description = errorDescription;\n\n\tif (!description && queries[itemIndex || 0]?.query) {\n\t\tdescription = `Failed query: ${queries[itemIndex || 0].query}`;\n\t}\n\n\tif (error.message.includes('ECONNREFUSED')) {\n\t\tmessage = 'Connection refused';\n\t\ttry {\n\t\t\tdescription = error.message.split('ECONNREFUSED ')[1].trim();\n\t\t} catch (e) {}\n\t}\n\n\tif (error.message.includes('ENOTFOUND')) {\n\t\tmessage = 'Host not found';\n\t\ttry {\n\t\t\tdescription = error.message.split('ENOTFOUND ')[1].trim();\n\t\t} catch (e) {}\n\t}\n\n\tif (error.message.includes('ETIMEDOUT')) {\n\t\tmessage = 'Connection timed out';\n\t\ttry {\n\t\t\tdescription = error.message.split('ETIMEDOUT ')[1].trim();\n\t\t} catch (e) {}\n\t}\n\n\treturn new NodeOperationError(node, error as Error, {\n\t\tmessage,\n\t\tdescription,\n\t\titemIndex,\n\t});\n}\n\nexport function addWhereClauses(\n\tnode: INode,\n\titemIndex: number,\n\tquery: string,\n\tclauses: WhereClause[],\n\treplacements: QueryValues,\n\tcombineConditions: string,\n): [string, QueryValues] {\n\tif (clauses.length === 0) return [query, replacements];\n\n\tlet combineWith = 'AND';\n\n\tif (combineConditions === 'OR') {\n\t\tcombineWith = 'OR';\n\t}\n\n\tlet replacementIndex = replacements.length + 1;\n\n\tlet whereQuery = ' WHERE';\n\tconst values: QueryValues = [];\n\n\tclauses.forEach((clause, index) => {\n\t\tif (clause.condition === 'equal') {\n\t\t\tclause.condition = '=';\n\t\t}\n\t\tif (['>', '<', '>=', '<='].includes(clause.condition)) {\n\t\t\tconst value = Number(clause.value);\n\n\t\t\tif (Number.isNaN(value)) {\n\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\tnode,\n\t\t\t\t\t`Operator in entry ${index + 1} of 'Select Rows' works with numbers, but value ${\n\t\t\t\t\t\tclause.value\n\t\t\t\t\t} is not a number`,\n\t\t\t\t\t{\n\t\t\t\t\t\titemIndex,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tclause.value = value;\n\t\t}\n\t\tconst columnReplacement = `$${replacementIndex}:name`;\n\t\tvalues.push(clause.column);\n\t\treplacementIndex = replacementIndex + 1;\n\n\t\tlet valueReplacement = '';\n\t\tif (clause.condition !== 'IS NULL' && clause.condition !== 'IS NOT NULL') {\n\t\t\tvalueReplacement = ` $${replacementIndex}`;\n\t\t\tvalues.push(clause.value);\n\t\t\treplacementIndex = replacementIndex + 1;\n\t\t}\n\n\t\tconst operator = index === clauses.length - 1 ? '' : ` ${combineWith}`;\n\n\t\twhereQuery += ` ${columnReplacement} ${clause.condition}${valueReplacement}${operator}`;\n\t});\n\n\treturn [`${query}${whereQuery}`, replacements.concat(...values)];\n}\n\nexport function addSortRules(\n\tquery: string,\n\trules: SortRule[],\n\treplacements: QueryValues,\n): [string, QueryValues] {\n\tif (rules.length === 0) return [query, replacements];\n\n\tlet replacementIndex = replacements.length + 1;\n\n\tlet orderByQuery = ' ORDER BY';\n\tconst values: string[] = [];\n\n\trules.forEach((rule, index) => {\n\t\tconst columnReplacement = `$${replacementIndex}:name`;\n\t\tvalues.push(rule.column);\n\t\treplacementIndex = replacementIndex + 1;\n\n\t\tconst endWith = index === rules.length - 1 ? '' : ',';\n\n\t\tconst sortDirection = rule.direction === 'DESC' ? 'DESC' : 'ASC';\n\n\t\torderByQuery += ` ${columnReplacement} ${sortDirection}${endWith}`;\n\t});\n\n\treturn [`${query}${orderByQuery}`, replacements.concat(...values)];\n}\n\nexport function addReturning(\n\tquery: string,\n\toutputColumns: string[],\n\treplacements: QueryValues,\n): [string, QueryValues] {\n\tif (outputColumns.includes('*')) return [`${query} RETURNING *`, replacements];\n\n\tconst replacementIndex = replacements.length + 1;\n\n\treturn [`${query} RETURNING $${replacementIndex}:name`, [...replacements, outputColumns]];\n}\n\nconst isSelectQuery = (query: string) => {\n\treturn query\n\t\t.replace(/\\/\\*.*?\\*\\//g, '') // remove multiline comments\n\t\t.replace(/\\n/g, '')\n\t\t.split(';')\n\t\t.filter((statement) => statement && !statement.startsWith('--')) // remove comments and empty statements\n\t\t.every((statement) => statement.trim().toLowerCase().startsWith('select'));\n};\n\nexport function configureQueryRunner(\n\tthis: IExecuteFunctions,\n\tnode: INode,\n\tcontinueOnFail: boolean,\n\tpgp: PgpClient,\n\tdb: PgpDatabase,\n) {\n\treturn async (queries: QueryWithValues[], items: INodeExecutionData[], options: IDataObject) => {\n\t\tlet returnData: INodeExecutionData[] = [];\n\t\tconst emptyReturnData: INodeExecutionData[] =\n\t\t\toptions.operation === 'select' ? [] : [{ json: { success: true } }];\n\n\t\tconst queryBatching = (options.queryBatching as QueryMode) || 'single';\n\n\t\tif (queryBatching === 'single') {\n\t\t\ttry {\n\t\t\t\treturnData = (await db.multi(pgp.helpers.concat(queries)))\n\t\t\t\t\t.map((result, i) => {\n\t\t\t\t\t\treturn this.helpers.constructExecutionMetaData(wrapData(result 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\t.flat();\n\n\t\t\t\tif (!returnData.length) {\n\t\t\t\t\tconst pairedItem = generatePairedItemData(queries.length);\n\n\t\t\t\t\tif ((options?.nodeVersion as number) < 2.3) {\n\t\t\t\t\t\tif (emptyReturnData.length) {\n\t\t\t\t\t\t\temptyReturnData[0].pairedItem = pairedItem;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturnData = emptyReturnData;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturnData = queries.every((query) => isSelectQuery(query.query))\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: [{ json: { success: true }, pairedItem }];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconst error = parsePostgresError(node, err, queries);\n\t\t\t\tif (!continueOnFail) throw error;\n\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tjson: {\n\t\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\t\terror: { ...error },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\n\t\tif (queryBatching === 'transaction') {\n\t\t\treturnData = await db.tx(async (transaction) => {\n\t\t\t\tconst result: INodeExecutionData[] = [];\n\t\t\t\tfor (let i = 0; i < queries.length; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst query = queries[i].query;\n\t\t\t\t\t\tconst values = queries[i].values;\n\n\t\t\t\t\t\tlet transactionResults;\n\t\t\t\t\t\tif ((options?.nodeVersion as number) < 2.3) {\n\t\t\t\t\t\t\ttransactionResults = await transaction.any(query, values);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttransactionResults = (await transaction.multi(query, values)).flat();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!transactionResults.length) {\n\t\t\t\t\t\t\tif ((options?.nodeVersion as number) < 2.3) {\n\t\t\t\t\t\t\t\ttransactionResults = emptyReturnData;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttransactionResults = isSelectQuery(query) ? [] : [{ success: true }];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\t\twrapData(transactionResults),\n\t\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst error = parsePostgresError(node, err, queries, i);\n\t\t\t\t\t\tif (!continueOnFail) throw error;\n\t\t\t\t\t\tresult.push(prepareErrorItem(items, error, i));\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}\n\n\t\tif (queryBatching === 'independently') {\n\t\t\treturnData = await db.task(async (task) => {\n\t\t\t\tconst result: INodeExecutionData[] = [];\n\t\t\t\tfor (let i = 0; i < queries.length; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst query = queries[i].query;\n\t\t\t\t\t\tconst values = queries[i].values;\n\n\t\t\t\t\t\tlet transactionResults;\n\t\t\t\t\t\tif ((options?.nodeVersion as number) < 2.3) {\n\t\t\t\t\t\t\ttransactionResults = await task.any(query, values);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttransactionResults = (await task.multi(query, values)).flat();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!transactionResults.length) {\n\t\t\t\t\t\t\tif ((options?.nodeVersion as number) < 2.3) {\n\t\t\t\t\t\t\t\ttransactionResults = emptyReturnData;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttransactionResults = isSelectQuery(query) ? [] : [{ success: true }];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\t\twrapData(transactionResults),\n\t\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresult.push(...executionData);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst error = parsePostgresError(node, err, queries, i);\n\t\t\t\t\t\tif (!continueOnFail) throw error;\n\t\t\t\t\t\tresult.push(prepareErrorItem(items, error, i));\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\n\t\treturn returnData;\n\t};\n}\n\nexport function replaceEmptyStringsByNulls(\n\titems: INodeExecutionData[],\n\treplace?: boolean,\n): INodeExecutionData[] {\n\tif (!replace) return items;\n\n\tconst returnData: INodeExecutionData[] = items.map((item) => {\n\t\tconst newItem = { ...item };\n\t\tconst keys = Object.keys(newItem.json);\n\n\t\tfor (const key of keys) {\n\t\t\tif (newItem.json[key] === '') {\n\t\t\t\tnewItem.json[key] = null;\n\t\t\t}\n\t\t}\n\n\t\treturn newItem;\n\t});\n\n\treturn returnData;\n}\n\nexport function prepareItem(values: IDataObject[]) {\n\tconst item = values.reduce((acc, { column, value }) => {\n\t\tacc[column as string] = value;\n\t\treturn acc;\n\t}, {} as IDataObject);\n\n\treturn item;\n}\n\nexport function hasJsonDataTypeInSchema(schema: ColumnInfo[]) {\n\treturn schema.some(({ data_type }) => data_type === 'json');\n}\n\nexport function convertValuesToJsonWithPgp(\n\tpgp: PgpClient,\n\tschema: ColumnInfo[],\n\tvalues: IDataObject,\n) {\n\tschema\n\t\t.filter(\n\t\t\t({ data_type, column_name }) =>\n\t\t\t\tdata_type === 'json' && values[column_name] !== null && values[column_name] !== undefined,\n\t\t)\n\t\t.forEach(({ column_name }) => {\n\t\t\tvalues[column_name] = pgp.as.json(values[column_name], true);\n\t\t});\n\n\treturn values;\n}\n\nexport async function columnFeatureSupport(\n\tdb: PgpDatabase,\n): Promise<{ identity_generation: boolean; is_generated: boolean }> {\n\tconst result = await db.any(\n\t\t`SELECT EXISTS (\n\t\t\tSELECT 1 FROM information_schema.columns WHERE table_name = 'columns' AND table_schema = 'information_schema' AND column_name = 'is_generated'\n\t\t) as is_generated,\n\t\tEXISTS (\n\t\t\tSELECT 1 FROM information_schema.columns WHERE table_name = 'columns' AND table_schema = 'information_schema' AND column_name = 'identity_generation'\n\t\t) as identity_generation;`,\n\t);\n\n\treturn result[0];\n}\n\nexport async function getTableSchema(\n\tdb: PgpDatabase,\n\tschema: string,\n\ttable: string,\n\toptions?: { getColumnsForResourceMapper?: boolean },\n): Promise<ColumnInfo[]> {\n\tconst select = ['column_name', 'data_type', 'is_nullable', 'udt_name', 'column_default'];\n\n\tif (options?.getColumnsForResourceMapper) {\n\t\t// Check if columns exist before querying (identity_generation was added in v10, is_generated in v12)\n\t\tconst supported = await columnFeatureSupport(db);\n\n\t\tif (supported.identity_generation) {\n\t\t\tselect.push('identity_generation');\n\t\t}\n\n\t\tif (supported.is_generated) {\n\t\t\tselect.push('is_generated');\n\t\t}\n\t}\n\n\tconst selectString = select.join(', ');\n\tconst columns = await db.any(\n\t\t`SELECT ${selectString} FROM information_schema.columns WHERE table_schema = $1 AND table_name = $2`,\n\t\t[schema, table],\n\t);\n\n\treturn columns;\n}\n\nexport async function uniqueColumns(db: PgpDatabase, table: string, schema = 'public') {\n\t// Using the modified query from https://wiki.postgresql.org/wiki/Retrieve_primary_key_columns\n\t// `quote_ident` - properly quote and escape an identifier\n\t// `::regclass` - cast a string to a regclass (internal type for object names)\n\tconst unique = await db.any(\n\t\t`\n\t\tSELECT DISTINCT a.attname\n\t\t\tFROM pg_index i JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)\n\t\tWHERE i.indrelid = (quote_ident($1) || '.' || quote_ident($2))::regclass\n\t\t\tAND (i.indisprimary OR i.indisunique);\n\t\t`,\n\t\t[schema, table],\n\t);\n\treturn unique as IDataObject[];\n}\n\nexport async function getEnums(db: PgpDatabase): Promise<EnumInfo[]> {\n\tconst enumsData = await db.any(\n\t\t'SELECT pg_type.typname, pg_enum.enumlabel FROM pg_type JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid;',\n\t);\n\treturn enumsData as EnumInfo[];\n}\n\nexport function getEnumValues(enumInfo: EnumInfo[], enumName: string): INodePropertyOptions[] {\n\treturn enumInfo.reduce((acc, current) => {\n\t\tif (current.typname === enumName) {\n\t\t\tacc.push({ name: current.enumlabel, value: current.enumlabel });\n\t\t}\n\t\treturn acc;\n\t}, [] as INodePropertyOptions[]);\n}\n\nexport async function doesRowExist(\n\tdb: PgpDatabase,\n\tschema: string,\n\ttable: string,\n\tvalues: string[],\n): Promise<boolean> {\n\tconst where = [];\n\tfor (let i = 3; i < 3 + values.length; i += 2) {\n\t\twhere.push(`$${i}:name=$${i + 1}`);\n\t}\n\tconst exists = await db.any(\n\t\t`SELECT EXISTS(SELECT 1 FROM $1:name.$2:name WHERE ${where.join(' AND ')})`,\n\t\t[schema, table, ...values],\n\t);\n\treturn exists[0].exists;\n}\n\nexport function checkItemAgainstSchema(\n\tnode: INode,\n\titem: IDataObject,\n\tcolumnsInfo: ColumnInfo[],\n\tindex: number,\n) {\n\tif (columnsInfo.length === 0) return item;\n\tconst schema = columnsInfo.reduce((acc, { column_name, data_type, is_nullable }) => {\n\t\tacc[column_name] = { type: data_type.toUpperCase(), nullable: is_nullable === 'YES' };\n\t\treturn acc;\n\t}, {} as IDataObject);\n\n\tfor (const key of Object.keys(item)) {\n\t\tif (schema[key] === undefined) {\n\t\t\tthrow new NodeOperationError(node, `Column '${key}' does not exist in selected table`, {\n\t\t\t\titemIndex: index,\n\t\t\t});\n\t\t}\n\t\tif (item[key] === null && !(schema[key] as IDataObject)?.nullable) {\n\t\t\tthrow new NodeOperationError(node, `Column '${key}' is not nullable`, {\n\t\t\t\titemIndex: index,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn item;\n}\n\nexport const configureTableSchemaUpdater = (initialSchema: string, initialTable: string) => {\n\tlet currentSchema = initialSchema;\n\tlet currentTable = initialTable;\n\treturn async (db: PgpDatabase, tableSchema: ColumnInfo[], schema: string, table: string) => {\n\t\tif (currentSchema !== schema || currentTable !== table) {\n\t\t\tcurrentSchema = schema;\n\t\t\tcurrentTable = table;\n\t\t\ttableSchema = await getTableSchema(db, schema, table);\n\t\t}\n\t\treturn tableSchema;\n\t};\n};\n\n/**\n * If postgress column type is array we need to convert it to fornmat that postgres understands, original object data would be modified\n * @param data the object with keys representing column names and values\n * @param schema table schema\n * @param node INode\n * @param itemIndex the index of the current item\n */\nexport const convertArraysToPostgresFormat = (\n\tdata: IDataObject,\n\tschema: ColumnInfo[],\n\tnode: INode,\n\titemIndex = 0,\n) => {\n\tfor (const columnInfo of schema) {\n\t\t//in case column type is array we need to convert it to fornmat that postgres understands\n\t\tif (columnInfo.data_type.toUpperCase() === 'ARRAY') {\n\t\t\tlet columnValue = data[columnInfo.column_name];\n\n\t\t\tif (typeof columnValue === 'string') {\n\t\t\t\tcolumnValue = jsonParse(columnValue);\n\t\t\t}\n\n\t\t\tif (Array.isArray(columnValue)) {\n\t\t\t\tconst arrayEntries = columnValue.map((entry) => {\n\t\t\t\t\tif (typeof entry === 'number') {\n\t\t\t\t\t\treturn entry;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof entry === 'boolean') {\n\t\t\t\t\t\tentry = String(entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof entry === 'object') {\n\t\t\t\t\t\tentry = JSON.stringify(entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof entry === 'string') {\n\t\t\t\t\t\treturn `\"${entry.replace(/\"/g, '\\\\\"')}\"`; //escape double quotes\n\t\t\t\t\t}\n\n\t\t\t\t\treturn entry;\n\t\t\t\t});\n\n\t\t\t\t//wrap in {} instead of [] as postgres does and join with ,\n\t\t\t\tdata[columnInfo.column_name] = `{${arrayEntries.join(',')}}`;\n\t\t\t} else {\n\t\t\t\tif (columnInfo.is_nullable === 'NO') {\n\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\t`Column '${columnInfo.column_name}' has to be an array`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\titemIndex,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport function addExecutionHints(\n\tcontext: IExecuteFunctions,\n\titems: INodeExecutionData[],\n\toperation: string,\n\texecuteOnce: boolean | undefined,\n) {\n\tif (operation === 'select' && items.length > 1 && !executeOnce) {\n\t\tcontext.addExecutionHints({\n\t\t\tmessage: `This node ran ${items.length} times, once for each input item. To run for the first item only, enable 'execute once' in the node settings`,\n\t\t\tlocation: 'outputPane',\n\t\t});\n\t}\n\n\tif (\n\t\toperation === 'executeQuery' &&\n\t\titems.length > 1 &&\n\t\t(context.getNodeParameter('options.queryBatching', 0, 'single') as string) === 'single' &&\n\t\t(context.getNodeParameter('query', 0, '') as string).toLowerCase().startsWith('insert')\n\t) {\n\t\tcontext.addExecutionHints({\n\t\t\tmessage:\n\t\t\t\t\"Inserts were batched for performance. If you need to preserve item matching, consider changing 'Query batching' to 'Independent' in the options.\",\n\t\t\tlocation: 'outputPane',\n\t\t});\n\t}\n}\n"],"mappings":"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","names":[]}
@@ -35,6 +35,55 @@ var import_jsonwebtoken = __toESM(require("jsonwebtoken"));
35
35
  var import_set = __toESM(require("lodash/set"));
36
36
  var import_n8n_workflow = require("n8n-workflow");
37
37
  var import_utilities = require("../../utils/utilities");
38
+ const respondWithProperty = {
39
+ displayName: "Respond With",
40
+ name: "respondWith",
41
+ type: "options",
42
+ options: [
43
+ {
44
+ name: "All Incoming Items",
45
+ value: "allIncomingItems",
46
+ description: "Respond with all input JSON items"
47
+ },
48
+ {
49
+ name: "Binary File",
50
+ value: "binary",
51
+ description: "Respond with incoming file binary data"
52
+ },
53
+ {
54
+ name: "First Incoming Item",
55
+ value: "firstIncomingItem",
56
+ description: "Respond with the first input JSON item"
57
+ },
58
+ {
59
+ name: "JSON",
60
+ value: "json",
61
+ description: "Respond with a custom JSON body"
62
+ },
63
+ {
64
+ name: "JWT Token",
65
+ value: "jwt",
66
+ description: "Respond with a JWT token"
67
+ },
68
+ {
69
+ name: "No Data",
70
+ value: "noData",
71
+ description: "Respond with an empty body"
72
+ },
73
+ {
74
+ name: "Redirect",
75
+ value: "redirect",
76
+ description: "Respond with a redirect to a given URL"
77
+ },
78
+ {
79
+ name: "Text",
80
+ value: "text",
81
+ description: "Respond with a simple text message body"
82
+ }
83
+ ],
84
+ default: "firstIncomingItem",
85
+ description: "The data that should be returned"
86
+ };
38
87
  class RespondToWebhook {
39
88
  constructor() {
40
89
  this.description = {
@@ -42,7 +91,7 @@ class RespondToWebhook {
42
91
  icon: { light: "file:webhook.svg", dark: "file:webhook.dark.svg" },
43
92
  name: "respondToWebhook",
44
93
  group: ["transform"],
45
- version: [1, 1.1],
94
+ version: [1, 1.1, 1.2],
46
95
  description: "Returns data for Webhook",
47
96
  defaults: {
48
97
  name: "Respond to Webhook"
@@ -68,53 +117,13 @@ class RespondToWebhook {
68
117
  default: ""
69
118
  },
70
119
  {
71
- displayName: "Respond With",
72
- name: "respondWith",
73
- type: "options",
74
- options: [
75
- {
76
- name: "All Incoming Items",
77
- value: "allIncomingItems",
78
- description: "Respond with all input JSON items"
79
- },
80
- {
81
- name: "Binary File",
82
- value: "binary",
83
- description: "Respond with incoming file binary data"
84
- },
85
- {
86
- name: "First Incoming Item",
87
- value: "firstIncomingItem",
88
- description: "Respond with the first input JSON item"
89
- },
90
- {
91
- name: "JSON",
92
- value: "json",
93
- description: "Respond with a custom JSON body"
94
- },
95
- {
96
- name: "JWT Token",
97
- value: "jwt",
98
- description: "Respond with a JWT token"
99
- },
100
- {
101
- name: "No Data",
102
- value: "noData",
103
- description: "Respond with an empty body"
104
- },
105
- {
106
- name: "Redirect",
107
- value: "redirect",
108
- description: "Respond with a redirect to a given URL"
109
- },
110
- {
111
- name: "Text",
112
- value: "text",
113
- description: "Respond with a simple text message body"
114
- }
115
- ],
116
- default: "firstIncomingItem",
117
- description: "The data that should be returned"
120
+ ...respondWithProperty,
121
+ displayOptions: { show: { "@version": [1, 1.1] } }
122
+ },
123
+ {
124
+ ...respondWithProperty,
125
+ noDataExpression: true,
126
+ displayOptions: { show: { "@version": [{ _cnd: { gte: 1.2 } }] } }
118
127
  },
119
128
  {
120
129
  displayName: "Credentials",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../nodes/RespondToWebhook/RespondToWebhook.node.ts"],"sourcesContent":["import jwt from 'jsonwebtoken';\nimport set from 'lodash/set';\nimport type {\n\tIDataObject,\n\tIExecuteFunctions,\n\tIN8nHttpFullResponse,\n\tIN8nHttpResponse,\n\tINodeExecutionData,\n\tINodeType,\n\tINodeTypeDescription,\n} from 'n8n-workflow';\nimport {\n\tjsonParse,\n\tBINARY_ENCODING,\n\tNodeOperationError,\n\tNodeConnectionTypes,\n\tWEBHOOK_NODE_TYPE,\n\tFORM_TRIGGER_NODE_TYPE,\n\tCHAT_TRIGGER_NODE_TYPE,\n\tWAIT_NODE_TYPE,\n} from 'n8n-workflow';\nimport type { Readable } from 'stream';\n\nimport { formatPrivateKey, generatePairedItemData } from '../../utils/utilities';\n\nexport class RespondToWebhook implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Respond to Webhook',\n\t\ticon: { light: 'file:webhook.svg', dark: 'file:webhook.dark.svg' },\n\t\tname: 'respondToWebhook',\n\t\tgroup: ['transform'],\n\t\tversion: [1, 1.1],\n\t\tdescription: 'Returns data for Webhook',\n\t\tdefaults: {\n\t\t\tname: 'Respond to Webhook',\n\t\t},\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'jwtAuth',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['jwt'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'Verify that the \"Webhook\" node\\'s \"Respond\" parameter is set to \"Using Respond to Webhook Node\". <a href=\"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/\" target=\"_blank\">More details',\n\t\t\t\tname: 'generalNotice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Respond With',\n\t\t\t\tname: 'respondWith',\n\t\t\t\ttype: 'options',\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'All Incoming Items',\n\t\t\t\t\t\tvalue: 'allIncomingItems',\n\t\t\t\t\t\tdescription: 'Respond with all input JSON items',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Binary File',\n\t\t\t\t\t\tvalue: 'binary',\n\t\t\t\t\t\tdescription: 'Respond with incoming file binary data',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'First Incoming Item',\n\t\t\t\t\t\tvalue: 'firstIncomingItem',\n\t\t\t\t\t\tdescription: 'Respond with the first input JSON item',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'JSON',\n\t\t\t\t\t\tvalue: 'json',\n\t\t\t\t\t\tdescription: 'Respond with a custom JSON body',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'JWT Token',\n\t\t\t\t\t\tvalue: 'jwt',\n\t\t\t\t\t\tdescription: 'Respond with a JWT token',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'No Data',\n\t\t\t\t\t\tvalue: 'noData',\n\t\t\t\t\t\tdescription: 'Respond with an empty body',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Redirect',\n\t\t\t\t\t\tvalue: 'redirect',\n\t\t\t\t\t\tdescription: 'Respond with a redirect to a given URL',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Text',\n\t\t\t\t\t\tvalue: 'text',\n\t\t\t\t\t\tdescription: 'Respond with a simple text message body',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'firstIncomingItem',\n\t\t\t\tdescription: 'The data that should be returned',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Credentials',\n\t\t\t\tname: 'credentials',\n\t\t\t\ttype: 'credentials',\n\t\t\t\tdefault: '',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['jwt'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'When using expressions, note that this node will only run for the first item in the input data',\n\t\t\t\tname: 'webhookNotice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['json', 'text', 'jwt'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Redirect URL',\n\t\t\t\tname: 'redirectURL',\n\t\t\t\ttype: 'string',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['redirect'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'e.g. http://www.n8n.io',\n\t\t\t\tdescription: 'The URL to redirect to',\n\t\t\t\tvalidateType: 'url',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Response Body',\n\t\t\t\tname: 'responseBody',\n\t\t\t\ttype: 'json',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['json'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '{\\n \"myField\": \"value\"\\n}',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\trows: 4,\n\t\t\t\t},\n\t\t\t\tdescription: 'The HTTP response JSON data',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Payload',\n\t\t\t\tname: 'payload',\n\t\t\t\ttype: 'json',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['jwt'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '{\\n \"myField\": \"value\"\\n}',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\trows: 4,\n\t\t\t\t},\n\t\t\t\tvalidateType: 'object',\n\t\t\t\tdescription: 'The payload to include in the JWT token',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Response Body',\n\t\t\t\tname: 'responseBody',\n\t\t\t\ttype: 'string',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['text'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttypeOptions: {\n\t\t\t\t\trows: 2,\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'e.g. Workflow completed',\n\t\t\t\tdescription: 'The HTTP response text data',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Response Data Source',\n\t\t\t\tname: 'responseDataSource',\n\t\t\t\ttype: 'options',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['binary'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Choose Automatically From Input',\n\t\t\t\t\t\tvalue: 'automatically',\n\t\t\t\t\t\tdescription: 'Use if input data will contain a single piece of binary data',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Specify Myself',\n\t\t\t\t\t\tvalue: 'set',\n\t\t\t\t\t\tdescription: 'Enter the name of the input field the binary data will be in',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'automatically',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Input Field Name',\n\t\t\t\tname: 'inputFieldName',\n\t\t\t\ttype: 'string',\n\t\t\t\trequired: true,\n\t\t\t\tdefault: 'data',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['binary'],\n\t\t\t\t\t\tresponseDataSource: ['set'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdescription: 'The name of the node input field with the binary data',\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tdisplayName: 'Options',\n\t\t\t\tname: 'options',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add option',\n\t\t\t\tdefault: {},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Response Code',\n\t\t\t\t\t\tname: 'responseCode',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tminValue: 100,\n\t\t\t\t\t\t\tmaxValue: 599,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefault: 200,\n\t\t\t\t\t\tdescription: 'The HTTP response code to return. Defaults to 200.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Response Headers',\n\t\t\t\t\t\tname: 'responseHeaders',\n\t\t\t\t\t\tplaceholder: 'Add Response Header',\n\t\t\t\t\t\tdescription: 'Add headers to the webhook response',\n\t\t\t\t\t\ttype: 'fixedCollection',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tmultipleValues: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefault: {},\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'entries',\n\t\t\t\t\t\t\t\tdisplayName: 'Entries',\n\t\t\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tdisplayName: 'Name',\n\t\t\t\t\t\t\t\t\t\tname: 'name',\n\t\t\t\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t\t\t\t\tdescription: 'Name of the header',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tdisplayName: 'Value',\n\t\t\t\t\t\t\t\t\t\tname: 'value',\n\t\t\t\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t\t\t\t\tdescription: 'Value of the header',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Put Response in Field',\n\t\t\t\t\t\tname: 'responseKey',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\t['/respondWith']: ['allIncomingItems', 'firstIncomingItem'],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'The name of the response field to put all items in',\n\t\t\t\t\t\tplaceholder: 'e.g. data',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst nodeVersion = this.getNode().typeVersion;\n\n\t\tconst WEBHOOK_NODE_TYPES = [\n\t\t\tWEBHOOK_NODE_TYPE,\n\t\t\tFORM_TRIGGER_NODE_TYPE,\n\t\t\tCHAT_TRIGGER_NODE_TYPE,\n\t\t\tWAIT_NODE_TYPE,\n\t\t];\n\n\t\ttry {\n\t\t\tif (nodeVersion >= 1.1) {\n\t\t\t\tconst connectedNodes = this.getParentNodes(this.getNode().name);\n\t\t\t\tif (!connectedNodes.some(({ type }) => WEBHOOK_NODE_TYPES.includes(type))) {\n\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\tnew Error('No Webhook node found in the workflow'),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t'Insert a Webhook node to your workflow and set the “Respond” parameter to “Using Respond to Webhook Node” ',\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst respondWith = this.getNodeParameter('respondWith', 0) as string;\n\t\t\tconst options = this.getNodeParameter('options', 0, {});\n\n\t\t\tconst headers = {} as IDataObject;\n\t\t\tif (options.responseHeaders) {\n\t\t\t\tfor (const header of (options.responseHeaders as IDataObject).entries as IDataObject[]) {\n\t\t\t\t\tif (typeof header.name !== 'string') {\n\t\t\t\t\t\theader.name = header.name?.toString();\n\t\t\t\t\t}\n\t\t\t\t\theaders[header.name?.toLowerCase() as string] = header.value?.toString();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet statusCode = (options.responseCode as number) || 200;\n\t\t\tlet responseBody: IN8nHttpResponse | Readable;\n\t\t\tif (respondWith === 'json') {\n\t\t\t\tconst responseBodyParameter = this.getNodeParameter('responseBody', 0) as string;\n\t\t\t\tif (responseBodyParameter) {\n\t\t\t\t\tif (typeof responseBodyParameter === 'object') {\n\t\t\t\t\t\tresponseBody = responseBodyParameter;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponseBody = jsonParse(responseBodyParameter);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tthrow new NodeOperationError(this.getNode(), error as Error, {\n\t\t\t\t\t\t\t\tmessage: \"Invalid JSON in 'Response Body' field\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Check that the syntax of the JSON in the 'Response Body' parameter is valid\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (respondWith === 'jwt') {\n\t\t\t\ttry {\n\t\t\t\t\tconst { keyType, secret, algorithm, privateKey } = await this.getCredentials<{\n\t\t\t\t\t\tkeyType: 'passphrase' | 'pemKey';\n\t\t\t\t\t\tprivateKey: string;\n\t\t\t\t\t\tsecret: string;\n\t\t\t\t\t\talgorithm: jwt.Algorithm;\n\t\t\t\t\t}>('jwtAuth');\n\n\t\t\t\t\tlet secretOrPrivateKey;\n\n\t\t\t\t\tif (keyType === 'passphrase') {\n\t\t\t\t\t\tsecretOrPrivateKey = secret;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsecretOrPrivateKey = formatPrivateKey(privateKey);\n\t\t\t\t\t}\n\t\t\t\t\tconst payload = this.getNodeParameter('payload', 0, {}) as IDataObject;\n\t\t\t\t\tconst token = jwt.sign(payload, secretOrPrivateKey, { algorithm });\n\t\t\t\t\tresponseBody = { token };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new NodeOperationError(this.getNode(), error as Error, {\n\t\t\t\t\t\tmessage: 'Error signing JWT token',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (respondWith === 'allIncomingItems') {\n\t\t\t\tconst respondItems = items.map((item) => item.json);\n\t\t\t\tresponseBody = options.responseKey\n\t\t\t\t\t? set({}, options.responseKey as string, respondItems)\n\t\t\t\t\t: respondItems;\n\t\t\t} else if (respondWith === 'firstIncomingItem') {\n\t\t\t\tresponseBody = options.responseKey\n\t\t\t\t\t? set({}, options.responseKey as string, items[0].json)\n\t\t\t\t\t: items[0].json;\n\t\t\t} else if (respondWith === 'text') {\n\t\t\t\tresponseBody = this.getNodeParameter('responseBody', 0) as string;\n\t\t\t} else if (respondWith === 'binary') {\n\t\t\t\tconst item = items[0];\n\n\t\t\t\tif (item.binary === undefined) {\n\t\t\t\t\tthrow new NodeOperationError(this.getNode(), 'No binary data exists on the first item!');\n\t\t\t\t}\n\n\t\t\t\tlet responseBinaryPropertyName: string;\n\n\t\t\t\tconst responseDataSource = this.getNodeParameter('responseDataSource', 0) as string;\n\n\t\t\t\tif (responseDataSource === 'set') {\n\t\t\t\t\tresponseBinaryPropertyName = this.getNodeParameter('inputFieldName', 0) as string;\n\t\t\t\t} else {\n\t\t\t\t\tconst binaryKeys = Object.keys(item.binary);\n\t\t\t\t\tif (binaryKeys.length === 0) {\n\t\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\t\t'No binary data exists on the first item!',\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tresponseBinaryPropertyName = binaryKeys[0];\n\t\t\t\t}\n\n\t\t\t\tconst binaryData = this.helpers.assertBinaryData(0, responseBinaryPropertyName);\n\t\t\t\tif (binaryData.id) {\n\t\t\t\t\tresponseBody = { binaryData };\n\t\t\t\t} else {\n\t\t\t\t\tresponseBody = Buffer.from(binaryData.data, BINARY_ENCODING);\n\t\t\t\t\theaders['content-length'] = (responseBody as Buffer).length;\n\t\t\t\t}\n\n\t\t\t\tif (!headers['content-type']) {\n\t\t\t\t\theaders['content-type'] = binaryData.mimeType;\n\t\t\t\t}\n\t\t\t} else if (respondWith === 'redirect') {\n\t\t\t\theaders.location = this.getNodeParameter('redirectURL', 0) as string;\n\t\t\t\tstatusCode = (options.responseCode as number) ?? 307;\n\t\t\t} else if (respondWith !== 'noData') {\n\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t`The Response Data option \"${respondWith}\" is not supported!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst response: IN8nHttpFullResponse = {\n\t\t\t\tbody: responseBody,\n\t\t\t\theaders,\n\t\t\t\tstatusCode,\n\t\t\t};\n\n\t\t\tthis.sendResponse(response);\n\t\t} catch (error) {\n\t\t\tif (this.continueOnFail()) {\n\t\t\t\tconst itemData = generatePairedItemData(items.length);\n\t\t\t\tconst returnData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t[{ json: { error: error.message } }],\n\t\t\t\t\t{ itemData },\n\t\t\t\t);\n\t\t\t\treturn [returnData];\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn [items];\n\t}\n}\n"],"mappings":"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","names":["jwt","set"]}
1
+ {"version":3,"sources":["../../../nodes/RespondToWebhook/RespondToWebhook.node.ts"],"sourcesContent":["import jwt from 'jsonwebtoken';\nimport set from 'lodash/set';\nimport type {\n\tIDataObject,\n\tIExecuteFunctions,\n\tIN8nHttpFullResponse,\n\tIN8nHttpResponse,\n\tINodeExecutionData,\n\tINodeProperties,\n\tINodeType,\n\tINodeTypeDescription,\n} from 'n8n-workflow';\nimport {\n\tjsonParse,\n\tBINARY_ENCODING,\n\tNodeOperationError,\n\tNodeConnectionTypes,\n\tWEBHOOK_NODE_TYPE,\n\tFORM_TRIGGER_NODE_TYPE,\n\tCHAT_TRIGGER_NODE_TYPE,\n\tWAIT_NODE_TYPE,\n} from 'n8n-workflow';\nimport type { Readable } from 'stream';\n\nimport { formatPrivateKey, generatePairedItemData } from '../../utils/utilities';\n\nconst respondWithProperty: INodeProperties = {\n\tdisplayName: 'Respond With',\n\tname: 'respondWith',\n\ttype: 'options',\n\toptions: [\n\t\t{\n\t\t\tname: 'All Incoming Items',\n\t\t\tvalue: 'allIncomingItems',\n\t\t\tdescription: 'Respond with all input JSON items',\n\t\t},\n\t\t{\n\t\t\tname: 'Binary File',\n\t\t\tvalue: 'binary',\n\t\t\tdescription: 'Respond with incoming file binary data',\n\t\t},\n\t\t{\n\t\t\tname: 'First Incoming Item',\n\t\t\tvalue: 'firstIncomingItem',\n\t\t\tdescription: 'Respond with the first input JSON item',\n\t\t},\n\t\t{\n\t\t\tname: 'JSON',\n\t\t\tvalue: 'json',\n\t\t\tdescription: 'Respond with a custom JSON body',\n\t\t},\n\t\t{\n\t\t\tname: 'JWT Token',\n\t\t\tvalue: 'jwt',\n\t\t\tdescription: 'Respond with a JWT token',\n\t\t},\n\t\t{\n\t\t\tname: 'No Data',\n\t\t\tvalue: 'noData',\n\t\t\tdescription: 'Respond with an empty body',\n\t\t},\n\t\t{\n\t\t\tname: 'Redirect',\n\t\t\tvalue: 'redirect',\n\t\t\tdescription: 'Respond with a redirect to a given URL',\n\t\t},\n\t\t{\n\t\t\tname: 'Text',\n\t\t\tvalue: 'text',\n\t\t\tdescription: 'Respond with a simple text message body',\n\t\t},\n\t],\n\tdefault: 'firstIncomingItem',\n\tdescription: 'The data that should be returned',\n};\n\nexport class RespondToWebhook implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Respond to Webhook',\n\t\ticon: { light: 'file:webhook.svg', dark: 'file:webhook.dark.svg' },\n\t\tname: 'respondToWebhook',\n\t\tgroup: ['transform'],\n\t\tversion: [1, 1.1, 1.2],\n\t\tdescription: 'Returns data for Webhook',\n\t\tdefaults: {\n\t\t\tname: 'Respond to Webhook',\n\t\t},\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'jwtAuth',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['jwt'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'Verify that the \"Webhook\" node\\'s \"Respond\" parameter is set to \"Using Respond to Webhook Node\". <a href=\"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/\" target=\"_blank\">More details',\n\t\t\t\tname: 'generalNotice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\t...respondWithProperty,\n\t\t\t\tdisplayOptions: { show: { '@version': [1, 1.1] } },\n\t\t\t},\n\t\t\t{\n\t\t\t\t...respondWithProperty,\n\t\t\t\tnoDataExpression: true,\n\t\t\t\tdisplayOptions: { show: { '@version': [{ _cnd: { gte: 1.2 } }] } },\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Credentials',\n\t\t\t\tname: 'credentials',\n\t\t\t\ttype: 'credentials',\n\t\t\t\tdefault: '',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['jwt'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'When using expressions, note that this node will only run for the first item in the input data',\n\t\t\t\tname: 'webhookNotice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['json', 'text', 'jwt'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Redirect URL',\n\t\t\t\tname: 'redirectURL',\n\t\t\t\ttype: 'string',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['redirect'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'e.g. http://www.n8n.io',\n\t\t\t\tdescription: 'The URL to redirect to',\n\t\t\t\tvalidateType: 'url',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Response Body',\n\t\t\t\tname: 'responseBody',\n\t\t\t\ttype: 'json',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['json'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '{\\n \"myField\": \"value\"\\n}',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\trows: 4,\n\t\t\t\t},\n\t\t\t\tdescription: 'The HTTP response JSON data',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Payload',\n\t\t\t\tname: 'payload',\n\t\t\t\ttype: 'json',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['jwt'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '{\\n \"myField\": \"value\"\\n}',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\trows: 4,\n\t\t\t\t},\n\t\t\t\tvalidateType: 'object',\n\t\t\t\tdescription: 'The payload to include in the JWT token',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Response Body',\n\t\t\t\tname: 'responseBody',\n\t\t\t\ttype: 'string',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['text'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttypeOptions: {\n\t\t\t\t\trows: 2,\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'e.g. Workflow completed',\n\t\t\t\tdescription: 'The HTTP response text data',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Response Data Source',\n\t\t\t\tname: 'responseDataSource',\n\t\t\t\ttype: 'options',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['binary'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Choose Automatically From Input',\n\t\t\t\t\t\tvalue: 'automatically',\n\t\t\t\t\t\tdescription: 'Use if input data will contain a single piece of binary data',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Specify Myself',\n\t\t\t\t\t\tvalue: 'set',\n\t\t\t\t\t\tdescription: 'Enter the name of the input field the binary data will be in',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'automatically',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Input Field Name',\n\t\t\t\tname: 'inputFieldName',\n\t\t\t\ttype: 'string',\n\t\t\t\trequired: true,\n\t\t\t\tdefault: 'data',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\trespondWith: ['binary'],\n\t\t\t\t\t\tresponseDataSource: ['set'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdescription: 'The name of the node input field with the binary data',\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tdisplayName: 'Options',\n\t\t\t\tname: 'options',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add option',\n\t\t\t\tdefault: {},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Response Code',\n\t\t\t\t\t\tname: 'responseCode',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tminValue: 100,\n\t\t\t\t\t\t\tmaxValue: 599,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefault: 200,\n\t\t\t\t\t\tdescription: 'The HTTP response code to return. Defaults to 200.',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Response Headers',\n\t\t\t\t\t\tname: 'responseHeaders',\n\t\t\t\t\t\tplaceholder: 'Add Response Header',\n\t\t\t\t\t\tdescription: 'Add headers to the webhook response',\n\t\t\t\t\t\ttype: 'fixedCollection',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tmultipleValues: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefault: {},\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'entries',\n\t\t\t\t\t\t\t\tdisplayName: 'Entries',\n\t\t\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tdisplayName: 'Name',\n\t\t\t\t\t\t\t\t\t\tname: 'name',\n\t\t\t\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t\t\t\t\tdescription: 'Name of the header',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tdisplayName: 'Value',\n\t\t\t\t\t\t\t\t\t\tname: 'value',\n\t\t\t\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t\t\t\t\tdescription: 'Value of the header',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Put Response in Field',\n\t\t\t\t\t\tname: 'responseKey',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\t['/respondWith']: ['allIncomingItems', 'firstIncomingItem'],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdescription: 'The name of the response field to put all items in',\n\t\t\t\t\t\tplaceholder: 'e.g. data',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst nodeVersion = this.getNode().typeVersion;\n\n\t\tconst WEBHOOK_NODE_TYPES = [\n\t\t\tWEBHOOK_NODE_TYPE,\n\t\t\tFORM_TRIGGER_NODE_TYPE,\n\t\t\tCHAT_TRIGGER_NODE_TYPE,\n\t\t\tWAIT_NODE_TYPE,\n\t\t];\n\n\t\ttry {\n\t\t\tif (nodeVersion >= 1.1) {\n\t\t\t\tconst connectedNodes = this.getParentNodes(this.getNode().name);\n\t\t\t\tif (!connectedNodes.some(({ type }) => WEBHOOK_NODE_TYPES.includes(type))) {\n\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\tnew Error('No Webhook node found in the workflow'),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t'Insert a Webhook node to your workflow and set the “Respond” parameter to “Using Respond to Webhook Node” ',\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst respondWith = this.getNodeParameter('respondWith', 0) as string;\n\t\t\tconst options = this.getNodeParameter('options', 0, {});\n\n\t\t\tconst headers = {} as IDataObject;\n\t\t\tif (options.responseHeaders) {\n\t\t\t\tfor (const header of (options.responseHeaders as IDataObject).entries as IDataObject[]) {\n\t\t\t\t\tif (typeof header.name !== 'string') {\n\t\t\t\t\t\theader.name = header.name?.toString();\n\t\t\t\t\t}\n\t\t\t\t\theaders[header.name?.toLowerCase() as string] = header.value?.toString();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet statusCode = (options.responseCode as number) || 200;\n\t\t\tlet responseBody: IN8nHttpResponse | Readable;\n\t\t\tif (respondWith === 'json') {\n\t\t\t\tconst responseBodyParameter = this.getNodeParameter('responseBody', 0) as string;\n\t\t\t\tif (responseBodyParameter) {\n\t\t\t\t\tif (typeof responseBodyParameter === 'object') {\n\t\t\t\t\t\tresponseBody = responseBodyParameter;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponseBody = jsonParse(responseBodyParameter);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tthrow new NodeOperationError(this.getNode(), error as Error, {\n\t\t\t\t\t\t\t\tmessage: \"Invalid JSON in 'Response Body' field\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Check that the syntax of the JSON in the 'Response Body' parameter is valid\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (respondWith === 'jwt') {\n\t\t\t\ttry {\n\t\t\t\t\tconst { keyType, secret, algorithm, privateKey } = await this.getCredentials<{\n\t\t\t\t\t\tkeyType: 'passphrase' | 'pemKey';\n\t\t\t\t\t\tprivateKey: string;\n\t\t\t\t\t\tsecret: string;\n\t\t\t\t\t\talgorithm: jwt.Algorithm;\n\t\t\t\t\t}>('jwtAuth');\n\n\t\t\t\t\tlet secretOrPrivateKey;\n\n\t\t\t\t\tif (keyType === 'passphrase') {\n\t\t\t\t\t\tsecretOrPrivateKey = secret;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsecretOrPrivateKey = formatPrivateKey(privateKey);\n\t\t\t\t\t}\n\t\t\t\t\tconst payload = this.getNodeParameter('payload', 0, {}) as IDataObject;\n\t\t\t\t\tconst token = jwt.sign(payload, secretOrPrivateKey, { algorithm });\n\t\t\t\t\tresponseBody = { token };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new NodeOperationError(this.getNode(), error as Error, {\n\t\t\t\t\t\tmessage: 'Error signing JWT token',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (respondWith === 'allIncomingItems') {\n\t\t\t\tconst respondItems = items.map((item) => item.json);\n\t\t\t\tresponseBody = options.responseKey\n\t\t\t\t\t? set({}, options.responseKey as string, respondItems)\n\t\t\t\t\t: respondItems;\n\t\t\t} else if (respondWith === 'firstIncomingItem') {\n\t\t\t\tresponseBody = options.responseKey\n\t\t\t\t\t? set({}, options.responseKey as string, items[0].json)\n\t\t\t\t\t: items[0].json;\n\t\t\t} else if (respondWith === 'text') {\n\t\t\t\tresponseBody = this.getNodeParameter('responseBody', 0) as string;\n\t\t\t} else if (respondWith === 'binary') {\n\t\t\t\tconst item = items[0];\n\n\t\t\t\tif (item.binary === undefined) {\n\t\t\t\t\tthrow new NodeOperationError(this.getNode(), 'No binary data exists on the first item!');\n\t\t\t\t}\n\n\t\t\t\tlet responseBinaryPropertyName: string;\n\n\t\t\t\tconst responseDataSource = this.getNodeParameter('responseDataSource', 0) as string;\n\n\t\t\t\tif (responseDataSource === 'set') {\n\t\t\t\t\tresponseBinaryPropertyName = this.getNodeParameter('inputFieldName', 0) as string;\n\t\t\t\t} else {\n\t\t\t\t\tconst binaryKeys = Object.keys(item.binary);\n\t\t\t\t\tif (binaryKeys.length === 0) {\n\t\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\t\t'No binary data exists on the first item!',\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tresponseBinaryPropertyName = binaryKeys[0];\n\t\t\t\t}\n\n\t\t\t\tconst binaryData = this.helpers.assertBinaryData(0, responseBinaryPropertyName);\n\t\t\t\tif (binaryData.id) {\n\t\t\t\t\tresponseBody = { binaryData };\n\t\t\t\t} else {\n\t\t\t\t\tresponseBody = Buffer.from(binaryData.data, BINARY_ENCODING);\n\t\t\t\t\theaders['content-length'] = (responseBody as Buffer).length;\n\t\t\t\t}\n\n\t\t\t\tif (!headers['content-type']) {\n\t\t\t\t\theaders['content-type'] = binaryData.mimeType;\n\t\t\t\t}\n\t\t\t} else if (respondWith === 'redirect') {\n\t\t\t\theaders.location = this.getNodeParameter('redirectURL', 0) as string;\n\t\t\t\tstatusCode = (options.responseCode as number) ?? 307;\n\t\t\t} else if (respondWith !== 'noData') {\n\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t`The Response Data option \"${respondWith}\" is not supported!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst response: IN8nHttpFullResponse = {\n\t\t\t\tbody: responseBody,\n\t\t\t\theaders,\n\t\t\t\tstatusCode,\n\t\t\t};\n\n\t\t\tthis.sendResponse(response);\n\t\t} catch (error) {\n\t\t\tif (this.continueOnFail()) {\n\t\t\t\tconst itemData = generatePairedItemData(items.length);\n\t\t\t\tconst returnData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t[{ json: { error: error.message } }],\n\t\t\t\t\t{ itemData },\n\t\t\t\t);\n\t\t\t\treturn [returnData];\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn [items];\n\t}\n}\n"],"mappings":"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","names":["jwt","set"]}
@@ -30,6 +30,14 @@ module.exports = __toCommonJS(GenericFunctions_exports);
30
30
  var import_n8n_workflow = require("n8n-workflow");
31
31
  async function supabaseApiRequest(method, resource, body = {}, qs = {}, uri, headers = {}) {
32
32
  const credentials = await this.getCredentials("supabaseApi");
33
+ if (this.getNodeParameter("useCustomSchema", false)) {
34
+ const schema = this.getNodeParameter("schema", "public");
35
+ if (["POST", "PATCH", "PUT", "DELETE"].includes(method)) {
36
+ headers["Content-Profile"] = schema;
37
+ } else if (["GET", "HEAD"].includes(method)) {
38
+ headers["Accept-Profile"] = schema;
39
+ }
40
+ }
33
41
  const options = {
34
42
  headers: {
35
43
  Prefer: "return=representation"
@@ -37,18 +45,19 @@ async function supabaseApiRequest(method, resource, body = {}, qs = {}, uri, hea
37
45
  method,
38
46
  qs,
39
47
  body,
40
- uri: uri || `${credentials.host}/rest/v1${resource}`,
48
+ uri: uri ?? `${credentials.host}/rest/v1${resource}`,
41
49
  json: true
42
50
  };
43
51
  try {
44
- if (Object.keys(headers).length !== 0) {
45
- options.headers = Object.assign({}, options.headers, headers);
46
- }
52
+ options.headers = Object.assign({}, options.headers, headers);
47
53
  if (Object.keys(body).length === 0) {
48
54
  delete options.body;
49
55
  }
50
56
  return await this.helpers.requestWithAuthentication.call(this, "supabaseApi", options);
51
57
  } catch (error) {
58
+ if (error.description) {
59
+ error.message = `${error.message}: ${error.description}`;
60
+ }
52
61
  throw new import_n8n_workflow.NodeApiError(this.getNode(), error);
53
62
  }
54
63
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../nodes/Supabase/GenericFunctions.ts"],"sourcesContent":["import type {\n\tICredentialDataDecryptedObject,\n\tICredentialTestFunctions,\n\tIDataObject,\n\tIExecuteFunctions,\n\tIHookFunctions,\n\tILoadOptionsFunctions,\n\tIWebhookFunctions,\n\tINodeProperties,\n\tIPairedItemData,\n\tJsonObject,\n\tIHttpRequestMethods,\n\tIRequestOptions,\n} from 'n8n-workflow';\nimport { NodeApiError } from 'n8n-workflow';\n\nexport async function supabaseApiRequest(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions | IWebhookFunctions,\n\tmethod: IHttpRequestMethods,\n\tresource: string,\n\tbody: IDataObject | IDataObject[] = {},\n\tqs: IDataObject = {},\n\turi?: string,\n\theaders: IDataObject = {},\n) {\n\tconst credentials = await this.getCredentials<{\n\t\thost: string;\n\t\tserviceRole: string;\n\t}>('supabaseApi');\n\n\tconst options: IRequestOptions = {\n\t\theaders: {\n\t\t\tPrefer: 'return=representation',\n\t\t},\n\t\tmethod,\n\t\tqs,\n\t\tbody,\n\t\turi: uri || `${credentials.host}/rest/v1${resource}`,\n\t\tjson: true,\n\t};\n\ttry {\n\t\tif (Object.keys(headers).length !== 0) {\n\t\t\toptions.headers = Object.assign({}, options.headers, headers);\n\t\t}\n\t\tif (Object.keys(body).length === 0) {\n\t\t\tdelete options.body;\n\t\t}\n\t\treturn await this.helpers.requestWithAuthentication.call(this, 'supabaseApi', options);\n\t} catch (error) {\n\t\tthrow new NodeApiError(this.getNode(), error as JsonObject);\n\t}\n}\n\nconst mapOperations: { [key: string]: string } = {\n\tcreate: 'created',\n\tupdate: 'updated',\n\tgetAll: 'retrieved',\n\tdelete: 'deleted',\n};\n\nexport function getFilters(\n\tresources: string[],\n\toperations: string[],\n\t{\n\t\tincludeNoneOption = true,\n\t\tfilterTypeDisplayName = 'Filter',\n\t\tfilterFixedCollectionDisplayName = 'Filters',\n\n\t\tmustMatchOptions = [\n\t\t\t{\n\t\t\t\tname: 'Any Filter',\n\t\t\t\tvalue: 'anyFilter',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'All Filters',\n\t\t\t\tvalue: 'allFilters',\n\t\t\t},\n\t\t],\n\t},\n): INodeProperties[] {\n\treturn [\n\t\t{\n\t\t\tdisplayName: filterTypeDisplayName,\n\t\t\tname: 'filterType',\n\t\t\ttype: 'options',\n\t\t\toptions: [\n\t\t\t\t...(includeNoneOption ? [{ name: 'None', value: 'none' }] : []),\n\t\t\t\t{\n\t\t\t\t\tname: 'Build Manually',\n\t\t\t\t\tvalue: 'manual',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'String',\n\t\t\t\t\tvalue: 'string',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tresource: resources,\n\t\t\t\t\toperation: operations,\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefault: 'manual',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Must Match',\n\t\t\tname: 'matchType',\n\t\t\ttype: 'options',\n\t\t\toptions: mustMatchOptions,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tresource: resources,\n\t\t\t\t\toperation: operations,\n\t\t\t\t\tfilterType: ['manual'],\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefault: 'anyFilter',\n\t\t},\n\t\t{\n\t\t\tdisplayName: filterFixedCollectionDisplayName,\n\t\t\tname: 'filters',\n\t\t\ttype: 'fixedCollection',\n\t\t\ttypeOptions: {\n\t\t\t\tmultipleValues: true,\n\t\t\t},\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tresource: resources,\n\t\t\t\t\toperation: operations,\n\t\t\t\t\tfilterType: ['manual'],\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefault: {},\n\t\t\tplaceholder: 'Add Condition',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Conditions',\n\t\t\t\t\tname: 'conditions',\n\t\t\t\t\tvalues: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Field Name or ID',\n\t\t\t\t\t\t\tname: 'keyName',\n\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t'Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>',\n\t\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\t\tloadOptionsDependsOn: ['tableId'],\n\t\t\t\t\t\t\t\tloadOptionsMethod: 'getTableColumns',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Condition',\n\t\t\t\t\t\t\tname: 'condition',\n\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Equals',\n\t\t\t\t\t\t\t\t\tvalue: 'eq',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Full-Text',\n\t\t\t\t\t\t\t\t\tvalue: 'fullText',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Greater Than',\n\t\t\t\t\t\t\t\t\tvalue: 'gt',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Greater Than or Equal',\n\t\t\t\t\t\t\t\t\tvalue: 'gte',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'ILIKE operator',\n\t\t\t\t\t\t\t\t\tvalue: 'ilike',\n\t\t\t\t\t\t\t\t\tdescription: 'Use * in place of %',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Is',\n\t\t\t\t\t\t\t\t\tvalue: 'is',\n\t\t\t\t\t\t\t\t\tdescription: 'Checking for exact equality (null,true,false,unknown)',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Less Than',\n\t\t\t\t\t\t\t\t\tvalue: 'lt',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Less Than or Equal',\n\t\t\t\t\t\t\t\t\tvalue: 'lte',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'LIKE operator',\n\t\t\t\t\t\t\t\t\tvalue: 'like',\n\t\t\t\t\t\t\t\t\tdescription: 'Use * in place of %',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Not Equals',\n\t\t\t\t\t\t\t\t\tvalue: 'neq',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Search Function',\n\t\t\t\t\t\t\tname: 'searchFunction',\n\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\t\tcondition: ['fullText'],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'to_tsquery',\n\t\t\t\t\t\t\t\t\tvalue: 'fts',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'plainto_tsquery',\n\t\t\t\t\t\t\t\t\tvalue: 'plfts',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'phraseto_tsquery',\n\t\t\t\t\t\t\t\t\tvalue: 'phfts',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'websearch_to_tsquery',\n\t\t\t\t\t\t\t\t\tvalue: 'wfts',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Field Value',\n\t\t\t\t\t\t\tname: 'keyValue',\n\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t\tdescription: `Filter to decide which rows get ${mapOperations[operations[0]]}`,\n\t\t},\n\t\t{\n\t\t\tdisplayName:\n\t\t\t\t'See <a href=\"https://postgrest.org/en/stable/references/api/tables_views.html#horizontal-filtering\" target=\"_blank\">PostgREST guide</a> to creating filters',\n\t\t\tname: 'jsonNotice',\n\t\t\ttype: 'notice',\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tresource: resources,\n\t\t\t\t\toperation: operations,\n\t\t\t\t\tfilterType: ['string'],\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefault: '',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Filters (String)',\n\t\t\tname: 'filterString',\n\t\t\ttype: 'string',\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tresource: resources,\n\t\t\t\t\toperation: operations,\n\t\t\t\t\tfilterType: ['string'],\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefault: '',\n\t\t\tplaceholder: 'name=eq.jhon',\n\t\t},\n\t];\n}\n\nexport const buildQuery = (obj: IDataObject, value: IDataObject) => {\n\tif (value.condition === 'fullText') {\n\t\treturn Object.assign(obj, {\n\t\t\t[`${value.keyName}`]: `${value.searchFunction}.${value.keyValue}`,\n\t\t});\n\t}\n\treturn Object.assign(obj, { [`${value.keyName}`]: `${value.condition}.${value.keyValue}` });\n};\n\nexport const buildOrQuery = (key: IDataObject) => {\n\tif (key.condition === 'fullText') {\n\t\treturn `${key.keyName}.${key.searchFunction}.${key.keyValue}`;\n\t}\n\treturn `${key.keyName}.${key.condition}.${key.keyValue}`;\n};\n\nexport const buildGetQuery = (obj: IDataObject, value: IDataObject) => {\n\treturn Object.assign(obj, { [`${value.keyName}`]: `eq.${value.keyValue}` });\n};\n\nexport async function validateCredentials(\n\tthis: ICredentialTestFunctions,\n\tdecryptedCredentials: ICredentialDataDecryptedObject,\n): Promise<any> {\n\tconst credentials = decryptedCredentials;\n\n\tconst { serviceRole } = credentials as {\n\t\tserviceRole: string;\n\t};\n\n\tconst options: IRequestOptions = {\n\t\theaders: {\n\t\t\tapikey: serviceRole,\n\t\t\tAuthorization: 'Bearer ' + serviceRole,\n\t\t},\n\t\tmethod: 'GET',\n\t\turi: `${credentials.host}/rest/v1/`,\n\t\tjson: true,\n\t};\n\n\treturn await this.helpers.request(options);\n}\n\nexport function mapPairedItemsFrom<T>(iterable: Iterable<T> | ArrayLike<T>): IPairedItemData[] {\n\treturn Array.from(iterable, (_, i) => i).map((index) => {\n\t\treturn {\n\t\t\titem: index,\n\t\t};\n\t});\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../nodes/Supabase/GenericFunctions.ts"],"sourcesContent":["import type {\n\tICredentialDataDecryptedObject,\n\tICredentialTestFunctions,\n\tIDataObject,\n\tIExecuteFunctions,\n\tIHookFunctions,\n\tILoadOptionsFunctions,\n\tIWebhookFunctions,\n\tINodeProperties,\n\tIPairedItemData,\n\tJsonObject,\n\tIHttpRequestMethods,\n\tIRequestOptions,\n} from 'n8n-workflow';\nimport { NodeApiError } from 'n8n-workflow';\n\nexport async function supabaseApiRequest(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions | IWebhookFunctions,\n\tmethod: IHttpRequestMethods,\n\tresource: string,\n\tbody: IDataObject | IDataObject[] = {},\n\tqs: IDataObject = {},\n\turi?: string,\n\theaders: IDataObject = {},\n) {\n\tconst credentials = await this.getCredentials<{\n\t\thost: string;\n\t\tserviceRole: string;\n\t}>('supabaseApi');\n\n\tif (this.getNodeParameter('useCustomSchema', false)) {\n\t\tconst schema = this.getNodeParameter('schema', 'public');\n\t\tif (['POST', 'PATCH', 'PUT', 'DELETE'].includes(method)) {\n\t\t\theaders['Content-Profile'] = schema;\n\t\t} else if (['GET', 'HEAD'].includes(method)) {\n\t\t\theaders['Accept-Profile'] = schema;\n\t\t}\n\t}\n\n\tconst options: IRequestOptions = {\n\t\theaders: {\n\t\t\tPrefer: 'return=representation',\n\t\t},\n\t\tmethod,\n\t\tqs,\n\t\tbody,\n\t\turi: uri ?? `${credentials.host}/rest/v1${resource}`,\n\t\tjson: true,\n\t};\n\n\ttry {\n\t\toptions.headers = Object.assign({}, options.headers, headers);\n\t\tif (Object.keys(body).length === 0) {\n\t\t\tdelete options.body;\n\t\t}\n\t\treturn await this.helpers.requestWithAuthentication.call(this, 'supabaseApi', options);\n\t} catch (error) {\n\t\tif (error.description) {\n\t\t\terror.message = `${error.message}: ${error.description}`;\n\t\t}\n\t\tthrow new NodeApiError(this.getNode(), error as JsonObject);\n\t}\n}\n\nconst mapOperations: { [key: string]: string } = {\n\tcreate: 'created',\n\tupdate: 'updated',\n\tgetAll: 'retrieved',\n\tdelete: 'deleted',\n};\n\nexport function getFilters(\n\tresources: string[],\n\toperations: string[],\n\t{\n\t\tincludeNoneOption = true,\n\t\tfilterTypeDisplayName = 'Filter',\n\t\tfilterFixedCollectionDisplayName = 'Filters',\n\n\t\tmustMatchOptions = [\n\t\t\t{\n\t\t\t\tname: 'Any Filter',\n\t\t\t\tvalue: 'anyFilter',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'All Filters',\n\t\t\t\tvalue: 'allFilters',\n\t\t\t},\n\t\t],\n\t},\n): INodeProperties[] {\n\treturn [\n\t\t{\n\t\t\tdisplayName: filterTypeDisplayName,\n\t\t\tname: 'filterType',\n\t\t\ttype: 'options',\n\t\t\toptions: [\n\t\t\t\t...(includeNoneOption ? [{ name: 'None', value: 'none' }] : []),\n\t\t\t\t{\n\t\t\t\t\tname: 'Build Manually',\n\t\t\t\t\tvalue: 'manual',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'String',\n\t\t\t\t\tvalue: 'string',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tresource: resources,\n\t\t\t\t\toperation: operations,\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefault: 'manual',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Must Match',\n\t\t\tname: 'matchType',\n\t\t\ttype: 'options',\n\t\t\toptions: mustMatchOptions,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tresource: resources,\n\t\t\t\t\toperation: operations,\n\t\t\t\t\tfilterType: ['manual'],\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefault: 'anyFilter',\n\t\t},\n\t\t{\n\t\t\tdisplayName: filterFixedCollectionDisplayName,\n\t\t\tname: 'filters',\n\t\t\ttype: 'fixedCollection',\n\t\t\ttypeOptions: {\n\t\t\t\tmultipleValues: true,\n\t\t\t},\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tresource: resources,\n\t\t\t\t\toperation: operations,\n\t\t\t\t\tfilterType: ['manual'],\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefault: {},\n\t\t\tplaceholder: 'Add Condition',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Conditions',\n\t\t\t\t\tname: 'conditions',\n\t\t\t\t\tvalues: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Field Name or ID',\n\t\t\t\t\t\t\tname: 'keyName',\n\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t'Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>',\n\t\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\t\tloadOptionsDependsOn: ['tableId'],\n\t\t\t\t\t\t\t\tloadOptionsMethod: 'getTableColumns',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Condition',\n\t\t\t\t\t\t\tname: 'condition',\n\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Equals',\n\t\t\t\t\t\t\t\t\tvalue: 'eq',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Full-Text',\n\t\t\t\t\t\t\t\t\tvalue: 'fullText',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Greater Than',\n\t\t\t\t\t\t\t\t\tvalue: 'gt',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Greater Than or Equal',\n\t\t\t\t\t\t\t\t\tvalue: 'gte',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'ILIKE operator',\n\t\t\t\t\t\t\t\t\tvalue: 'ilike',\n\t\t\t\t\t\t\t\t\tdescription: 'Use * in place of %',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Is',\n\t\t\t\t\t\t\t\t\tvalue: 'is',\n\t\t\t\t\t\t\t\t\tdescription: 'Checking for exact equality (null,true,false,unknown)',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Less Than',\n\t\t\t\t\t\t\t\t\tvalue: 'lt',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Less Than or Equal',\n\t\t\t\t\t\t\t\t\tvalue: 'lte',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'LIKE operator',\n\t\t\t\t\t\t\t\t\tvalue: 'like',\n\t\t\t\t\t\t\t\t\tdescription: 'Use * in place of %',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'Not Equals',\n\t\t\t\t\t\t\t\t\tvalue: 'neq',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Search Function',\n\t\t\t\t\t\t\tname: 'searchFunction',\n\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\t\tcondition: ['fullText'],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'to_tsquery',\n\t\t\t\t\t\t\t\t\tvalue: 'fts',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'plainto_tsquery',\n\t\t\t\t\t\t\t\t\tvalue: 'plfts',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'phraseto_tsquery',\n\t\t\t\t\t\t\t\t\tvalue: 'phfts',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'websearch_to_tsquery',\n\t\t\t\t\t\t\t\t\tvalue: 'wfts',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Field Value',\n\t\t\t\t\t\t\tname: 'keyValue',\n\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t\tdescription: `Filter to decide which rows get ${mapOperations[operations[0]]}`,\n\t\t},\n\t\t{\n\t\t\tdisplayName:\n\t\t\t\t'See <a href=\"https://postgrest.org/en/stable/references/api/tables_views.html#horizontal-filtering\" target=\"_blank\">PostgREST guide</a> to creating filters',\n\t\t\tname: 'jsonNotice',\n\t\t\ttype: 'notice',\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tresource: resources,\n\t\t\t\t\toperation: operations,\n\t\t\t\t\tfilterType: ['string'],\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefault: '',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Filters (String)',\n\t\t\tname: 'filterString',\n\t\t\ttype: 'string',\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tresource: resources,\n\t\t\t\t\toperation: operations,\n\t\t\t\t\tfilterType: ['string'],\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefault: '',\n\t\t\tplaceholder: 'name=eq.jhon',\n\t\t},\n\t];\n}\n\nexport const buildQuery = (obj: IDataObject, value: IDataObject) => {\n\tif (value.condition === 'fullText') {\n\t\treturn Object.assign(obj, {\n\t\t\t[`${value.keyName}`]: `${value.searchFunction}.${value.keyValue}`,\n\t\t});\n\t}\n\treturn Object.assign(obj, { [`${value.keyName}`]: `${value.condition}.${value.keyValue}` });\n};\n\nexport const buildOrQuery = (key: IDataObject) => {\n\tif (key.condition === 'fullText') {\n\t\treturn `${key.keyName}.${key.searchFunction}.${key.keyValue}`;\n\t}\n\treturn `${key.keyName}.${key.condition}.${key.keyValue}`;\n};\n\nexport const buildGetQuery = (obj: IDataObject, value: IDataObject) => {\n\treturn Object.assign(obj, { [`${value.keyName}`]: `eq.${value.keyValue}` });\n};\n\nexport async function validateCredentials(\n\tthis: ICredentialTestFunctions,\n\tdecryptedCredentials: ICredentialDataDecryptedObject,\n): Promise<any> {\n\tconst credentials = decryptedCredentials;\n\n\tconst { serviceRole } = credentials as {\n\t\tserviceRole: string;\n\t};\n\n\tconst options: IRequestOptions = {\n\t\theaders: {\n\t\t\tapikey: serviceRole,\n\t\t\tAuthorization: 'Bearer ' + serviceRole,\n\t\t},\n\t\tmethod: 'GET',\n\t\turi: `${credentials.host}/rest/v1/`,\n\t\tjson: true,\n\t};\n\n\treturn await this.helpers.request(options);\n}\n\nexport function mapPairedItemsFrom<T>(iterable: Iterable<T> | ArrayLike<T>): IPairedItemData[] {\n\treturn Array.from(iterable, (_, i) => i).map((index) => {\n\t\treturn {\n\t\t\titem: index,\n\t\t};\n\t});\n}\n"],"mappings":"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","names":[]}
@@ -79,6 +79,7 @@ const rowFields = [
79
79
  type: "options",
80
80
  description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
81
81
  typeOptions: {
82
+ loadOptionsDependsOn: ["useCustomSchema", "schema"],
82
83
  loadOptionsMethod: "getTables"
83
84
  },
84
85
  required: true,