n8n-nodes-base 1.86.1 → 1.88.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/credentials/HttpBearerAuth.credentials.js +63 -0
- package/dist/credentials/HttpBearerAuth.credentials.js.map +1 -0
- package/dist/credentials/MicrosoftAzureCosmosDbSharedKeyApi.credentials.js +109 -0
- package/dist/credentials/MicrosoftAzureCosmosDbSharedKeyApi.credentials.js.map +1 -0
- package/dist/credentials/SalesforceJwtApi.credentials.js +60 -0
- package/dist/credentials/SalesforceJwtApi.credentials.js.map +1 -1
- package/dist/known/credentials.json +11 -0
- package/dist/known/nodes.json +4 -0
- package/dist/nodes/Brevo/__schema__/v1.0.0/contact/getAll.json +1 -9
- package/dist/nodes/Dropbox/__schema__/v1.0.0/file/download.json +2 -5
- package/dist/nodes/EmailReadImap/v2/utils.js +4 -1
- package/dist/nodes/EmailReadImap/v2/utils.js.map +1 -1
- package/dist/nodes/Form/Form.node.js +2 -2
- package/dist/nodes/Form/Form.node.js.map +1 -1
- package/dist/nodes/Form/v2/FormTriggerV2.node.js +2 -2
- package/dist/nodes/Form/v2/FormTriggerV2.node.js.map +1 -1
- package/dist/nodes/Google/Analytics/__schema__/v2.0.0/report/get.json +2 -2
- package/dist/nodes/Google/Calendar/__schema__/v1.3.0/event/getAll.json +7 -1
- package/dist/nodes/Google/Firebase/CloudFirestore/__schema__/v1.1.0/document/get.json +1 -13
- package/dist/nodes/Google/Gmail/__schema__/v2.1.0/message/get.json +1 -7
- package/dist/nodes/Google/Gmail/__schema__/v2.1.0/message/getAll.json +1 -7
- package/dist/nodes/Google/Gmail/__schema__/v2.1.0/thread/get.json +4 -4
- package/dist/nodes/Google/YouTube/__schema__/v1.0.0/video/get.json +1 -35
- package/dist/nodes/Google/YouTube/__schema__/v1.0.0/video/rate.json +9 -0
- package/dist/nodes/HaloPSA/__schema__/v1.0.0/client/getAll.json +147 -1
- package/dist/nodes/Hubspot/__schema__/v2.1.0/company/getAll.json +1 -4
- package/dist/nodes/Hubspot/__schema__/v2.1.0/contact/search.json +4 -1
- package/dist/nodes/Hubspot/__schema__/v2.1.0/deal/getAll.json +1 -52
- package/dist/nodes/Hubspot/__schema__/v2.1.0/deal/search.json +5 -2
- package/dist/nodes/Hubspot/__schema__/v2.1.0/ticket/get.json +1 -258
- package/dist/nodes/ItemLists/__schema__/v3.0.0/itemList/limit.json +9 -0
- package/dist/nodes/Jira/__schema__/v1.0.0/issue/get.json +84 -1
- package/dist/nodes/Jira/__schema__/v1.0.0/issue/getAll.json +4 -565
- package/dist/nodes/Lemlist/__schema__/v2.0.0/campaign/getAll.json +1 -10
- package/dist/nodes/Linear/__schema__/v1.0.0/issue/create.json +12 -1
- package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.node.js +87 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.node.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.node.json +18 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.svg +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/common.js +163 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/common.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/Container.resource.js +141 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/Container.resource.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/create.operation.js +166 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/create.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/delete.operation.js +40 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/delete.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/get.operation.js +47 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/get.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/getAll.operation.js +47 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/getAll.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/index.js +42 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/index.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/Item.resource.js +210 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/Item.resource.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/create.operation.js +72 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/create.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/delete.operation.js +64 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/delete.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/get.operation.js +77 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/get.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/getAll.operation.js +48 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/getAll.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/query.operation.js +102 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/query.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/update.operation.js +83 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/update.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/constants.js +52 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/constants.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/errorHandler.js +108 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/errorHandler.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/interfaces.js +17 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/interfaces.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/utils.js +200 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/utils.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/methods/index.js +39 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/methods/index.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/methods/listSearch.js +75 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/methods/listSearch.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/transport/index.js +43 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/transport/index.js.map +1 -0
- package/dist/nodes/Microsoft/OneDrive/__schema__/v1.0.0/file/download.json +92 -1
- package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/folderMessage/getAll.json +3 -81
- package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/message/get.json +28 -1
- package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/message/getAll.json +82 -1
- package/dist/nodes/Nasa/__schema__/v1.0.0/donkiSolarFlare/get.json +4 -1
- package/dist/nodes/Notion/__schema__/v2.2.0/databasePage/create.json +1 -4
- package/dist/nodes/Notion/__schema__/v2.2.0/databasePage/getAll.json +1 -4
- package/dist/nodes/Odoo/__schema__/v1.0.0/custom/get.json +1 -4
- package/dist/nodes/Odoo/__schema__/v1.0.0/custom/getAll.json +4 -1
- package/dist/nodes/Odoo/__schema__/v1.0.0/opportunity/getAll.json +1 -4
- package/dist/nodes/Phantombuster/__schema__/v1.0.0/agent/getOutput.json +1 -10
- package/dist/nodes/Pipedrive/__schema__/v1.0.0/person/search.json +12 -1
- package/dist/nodes/Salesforce/__schema__/v1.0.0/customObject/getAll.json +2 -2
- package/dist/nodes/Salesforce/__schema__/v1.0.0/opportunity/getAll.json +4 -1
- package/dist/nodes/Salesforce/__schema__/v1.0.0/search/query.json +1 -4
- package/dist/nodes/ServiceNow/__schema__/v1.0.0/tableRecord/getAll.json +1 -4
- package/dist/nodes/Slack/__schema__/v2.3.0/channel/history.json +4 -44
- package/dist/nodes/Ssh/__schema__/v1.0.0/command/execute.json +1 -4
- package/dist/nodes/Supabase/__schema__/v1.0.0/row/delete.json +7 -1
- package/dist/nodes/Telegram/__schema__/v1.2.0/chat/get.json +1 -10
- package/dist/nodes/Telegram/__schema__/v1.2.0/chat/member.json +1 -4
- package/dist/nodes/Transform/Summarize/utils.js +1 -1
- package/dist/nodes/Transform/Summarize/utils.js.map +1 -1
- package/dist/nodes/Trello/__schema__/v1.0.0/list/getAll.json +1 -4
- package/dist/nodes/Trello/__schema__/v1.0.0/list/getCards.json +4 -7
- package/dist/nodes/Twitter/__schema__/v2.0.0/tweet/search.json +1 -4
- package/dist/nodes/Wait/Wait.node.js +2 -2
- package/dist/nodes/Wait/Wait.node.js.map +1 -1
- package/dist/nodes/Webhook/error.d.ts +8 -0
- package/dist/nodes/Webhook/utils.d.ts +32 -0
- package/dist/nodes/Webhook/utils.js +13 -0
- package/dist/nodes/Webhook/utils.js.map +1 -1
- package/dist/nodes/Wordpress/__schema__/v1.0.0/post/getAll.json +9 -1
- package/dist/nodes/Zoho/__schema__/v1.0.0/contact/getAll.json +1 -15
- package/dist/test/nodes/FakeCredentialsMap.js +36 -0
- package/dist/test/nodes/FakeCredentialsMap.js.map +1 -1
- package/dist/test/nodes/Helpers.js +1 -1
- package/dist/test/nodes/Helpers.js.map +1 -1
- package/dist/types/credentials.json +3 -1
- package/dist/types/nodes.json +6 -5
- package/package.json +12 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../nodes/Webhook/utils.ts"],"sourcesContent":["import basicAuth from 'basic-auth';\nimport jwt from 'jsonwebtoken';\nimport { NodeOperationError } from 'n8n-workflow';\nimport type {\n\tIWebhookFunctions,\n\tINodeExecutionData,\n\tIDataObject,\n\tICredentialDataDecryptedObject,\n} from 'n8n-workflow';\n\nimport { WebhookAuthorizationError } from './error';\nimport { formatPrivateKey } from '../../utils/utilities';\n\nexport type WebhookParameters = {\n\thttpMethod: string | string[];\n\tresponseMode: string;\n\tresponseData: string;\n\tresponseCode?: number; //typeVersion <= 1.1\n\toptions?: {\n\t\tresponseData?: string;\n\t\tresponseCode?: {\n\t\t\tvalues?: {\n\t\t\t\tresponseCode: number;\n\t\t\t\tcustomCode?: number;\n\t\t\t};\n\t\t};\n\t\tnoResponseBody?: boolean;\n\t};\n};\n\nexport const getResponseCode = (parameters: WebhookParameters) => {\n\tif (parameters.responseCode) {\n\t\treturn parameters.responseCode;\n\t}\n\tconst responseCodeOptions = parameters.options;\n\tif (responseCodeOptions?.responseCode?.values) {\n\t\tconst { responseCode, customCode } = responseCodeOptions.responseCode.values;\n\n\t\tif (customCode) {\n\t\t\treturn customCode;\n\t\t}\n\n\t\treturn responseCode;\n\t}\n\treturn 200;\n};\n\nexport const getResponseData = (parameters: WebhookParameters) => {\n\tconst { responseData, responseMode, options } = parameters;\n\tif (responseData) return responseData;\n\n\tif (responseMode === 'onReceived') {\n\t\tconst data = options?.responseData;\n\t\tif (data) return data;\n\t}\n\n\tif (options?.noResponseBody) return 'noData';\n\n\treturn undefined;\n};\n\nexport const configuredOutputs = (parameters: WebhookParameters) => {\n\tconst httpMethod = parameters.httpMethod;\n\n\tif (!Array.isArray(httpMethod))\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: 'main',\n\t\t\t\tdisplayName: httpMethod,\n\t\t\t},\n\t\t];\n\n\tconst outputs = httpMethod.map((method) => {\n\t\treturn {\n\t\t\ttype: 'main',\n\t\t\tdisplayName: method,\n\t\t};\n\t});\n\n\treturn outputs;\n};\n\nexport const setupOutputConnection = (\n\tctx: IWebhookFunctions,\n\tmethod: string,\n\tadditionalData: {\n\t\tjwtPayload?: IDataObject;\n\t},\n) => {\n\tconst httpMethod = ctx.getNodeParameter('httpMethod', []) as string[] | string;\n\tlet webhookUrl = ctx.getNodeWebhookUrl('default') as string;\n\tconst executionMode = ctx.getMode() === 'manual' ? 'test' : 'production';\n\n\tif (executionMode === 'test') {\n\t\twebhookUrl = webhookUrl.replace('/webhook/', '/webhook-test/');\n\t}\n\n\t// multi methods could be set in settings of node, so we need to check if it's an array\n\tif (!Array.isArray(httpMethod)) {\n\t\treturn (outputData: INodeExecutionData): INodeExecutionData[][] => {\n\t\t\toutputData.json.webhookUrl = webhookUrl;\n\t\t\toutputData.json.executionMode = executionMode;\n\t\t\tif (additionalData?.jwtPayload) {\n\t\t\t\toutputData.json.jwtPayload = additionalData.jwtPayload;\n\t\t\t}\n\t\t\treturn [[outputData]];\n\t\t};\n\t}\n\n\tconst outputIndex = httpMethod.indexOf(method.toUpperCase());\n\tconst outputs: INodeExecutionData[][] = httpMethod.map(() => []);\n\n\treturn (outputData: INodeExecutionData): INodeExecutionData[][] => {\n\t\toutputData.json.webhookUrl = webhookUrl;\n\t\toutputData.json.executionMode = executionMode;\n\t\tif (additionalData?.jwtPayload) {\n\t\t\toutputData.json.jwtPayload = additionalData.jwtPayload;\n\t\t}\n\t\toutputs[outputIndex] = [outputData];\n\t\treturn outputs;\n\t};\n};\n\nexport const isIpWhitelisted = (\n\twhitelist: string | string[] | undefined,\n\tips: string[],\n\tip?: string,\n) => {\n\tif (whitelist === undefined || whitelist === '') {\n\t\treturn true;\n\t}\n\n\tif (!Array.isArray(whitelist)) {\n\t\twhitelist = whitelist.split(',').map((entry) => entry.trim());\n\t}\n\n\tfor (const address of whitelist) {\n\t\tif (ip && ip.includes(address)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ips.some((entry) => entry.includes(address))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n\nexport const checkResponseModeConfiguration = (context: IWebhookFunctions) => {\n\tconst responseMode = context.getNodeParameter('responseMode', 'onReceived') as string;\n\tconst connectedNodes = context.getChildNodes(context.getNode().name);\n\n\tconst isRespondToWebhookConnected = connectedNodes.some(\n\t\t(node) => node.type === 'n8n-nodes-base.respondToWebhook',\n\t);\n\n\tif (!isRespondToWebhookConnected && responseMode === 'responseNode') {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error('No Respond to Webhook node found in the workflow'),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'Insert a Respond to Webhook node to your workflow to respond to the webhook or choose another option for the “Respond” parameter',\n\t\t\t},\n\t\t);\n\t}\n\n\tif (isRespondToWebhookConnected && responseMode !== 'responseNode') {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error('Webhook node not correctly configured'),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'Set the “Respond” parameter to “Using Respond to Webhook Node” or remove the Respond to Webhook node',\n\t\t\t},\n\t\t);\n\t}\n};\n\nexport async function validateWebhookAuthentication(\n\tctx: IWebhookFunctions,\n\tauthPropertyName: string,\n) {\n\tconst authentication = ctx.getNodeParameter(authPropertyName) as string;\n\tif (authentication === 'none') return;\n\n\tconst req = ctx.getRequestObject();\n\tconst headers = ctx.getHeaderData();\n\n\tif (authentication === 'basicAuth') {\n\t\t// Basic authorization is needed to call webhook\n\t\tlet expectedAuth: ICredentialDataDecryptedObject | undefined;\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<ICredentialDataDecryptedObject>('httpBasicAuth');\n\t\t} catch {}\n\n\t\tif (expectedAuth === undefined || !expectedAuth.user || !expectedAuth.password) {\n\t\t\t// Data is not defined on node so can not authenticate\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\n\t\tconst providedAuth = basicAuth(req);\n\t\t// Authorization data is missing\n\t\tif (!providedAuth) throw new WebhookAuthorizationError(401);\n\n\t\tif (providedAuth.name !== expectedAuth.user || providedAuth.pass !== expectedAuth.password) {\n\t\t\t// Provided authentication data is wrong\n\t\t\tthrow new WebhookAuthorizationError(403);\n\t\t}\n\t} else if (authentication === 'headerAuth') {\n\t\t// Special header with value is needed to call webhook\n\t\tlet expectedAuth: ICredentialDataDecryptedObject | undefined;\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<ICredentialDataDecryptedObject>('httpHeaderAuth');\n\t\t} catch {}\n\n\t\tif (expectedAuth === undefined || !expectedAuth.name || !expectedAuth.value) {\n\t\t\t// Data is not defined on node so can not authenticate\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\t\tconst headerName = (expectedAuth.name as string).toLowerCase();\n\t\tconst expectedValue = expectedAuth.value as string;\n\n\t\tif (\n\t\t\t!headers.hasOwnProperty(headerName) ||\n\t\t\t(headers as IDataObject)[headerName] !== expectedValue\n\t\t) {\n\t\t\t// Provided authentication data is wrong\n\t\t\tthrow new WebhookAuthorizationError(403);\n\t\t}\n\t} else if (authentication === 'jwtAuth') {\n\t\tlet expectedAuth;\n\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<{\n\t\t\t\tkeyType: 'passphrase' | 'pemKey';\n\t\t\t\tpublicKey: string;\n\t\t\t\tsecret: string;\n\t\t\t\talgorithm: jwt.Algorithm;\n\t\t\t}>('jwtAuth');\n\t\t} catch {}\n\n\t\tif (expectedAuth === undefined) {\n\t\t\t// Data is not defined on node so can not authenticate\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\n\t\tconst authHeader = req.headers.authorization;\n\t\tconst token = authHeader?.split(' ')[1];\n\n\t\tif (!token) {\n\t\t\tthrow new WebhookAuthorizationError(401, 'No token provided');\n\t\t}\n\n\t\tlet secretOrPublicKey;\n\n\t\tif (expectedAuth.keyType === 'passphrase') {\n\t\t\tsecretOrPublicKey = expectedAuth.secret;\n\t\t} else {\n\t\t\tsecretOrPublicKey = formatPrivateKey(expectedAuth.publicKey, true);\n\t\t}\n\n\t\ttry {\n\t\t\treturn jwt.verify(token, secretOrPublicKey, {\n\t\t\t\talgorithms: [expectedAuth.algorithm],\n\t\t\t}) as IDataObject;\n\t\t} catch (error) {\n\t\t\tthrow new WebhookAuthorizationError(403, error.message);\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAsB;AACtB,0BAAgB;AAChB,0BAAmC;AAQnC,mBAA0C;AAC1C,uBAAiC;AAmB1B,MAAM,kBAAkB,CAAC,eAAkC;AACjE,MAAI,WAAW,cAAc;AAC5B,WAAO,WAAW;AAAA,EACnB;AACA,QAAM,sBAAsB,WAAW;AACvC,MAAI,qBAAqB,cAAc,QAAQ;AAC9C,UAAM,EAAE,cAAc,WAAW,IAAI,oBAAoB,aAAa;AAEtE,QAAI,YAAY;AACf,aAAO;AAAA,IACR;AAEA,WAAO;AAAA,EACR;AACA,SAAO;AACR;AAEO,MAAM,kBAAkB,CAAC,eAAkC;AACjE,QAAM,EAAE,cAAc,cAAc,QAAQ,IAAI;AAChD,MAAI,aAAc,QAAO;AAEzB,MAAI,iBAAiB,cAAc;AAClC,UAAM,OAAO,SAAS;AACtB,QAAI,KAAM,QAAO;AAAA,EAClB;AAEA,MAAI,SAAS,eAAgB,QAAO;AAEpC,SAAO;AACR;AAEO,MAAM,oBAAoB,CAAC,eAAkC;AACnE,QAAM,aAAa,WAAW;AAE9B,MAAI,CAAC,MAAM,QAAQ,UAAU;AAC5B,WAAO;AAAA,MACN;AAAA,QACC,MAAM;AAAA,QACN,aAAa;AAAA,MACd;AAAA,IACD;AAED,QAAM,UAAU,WAAW,IAAI,CAAC,WAAW;AAC1C,WAAO;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,EACD,CAAC;AAED,SAAO;AACR;AAEO,MAAM,wBAAwB,CACpC,KACA,QACA,mBAGI;AACJ,QAAM,aAAa,IAAI,iBAAiB,cAAc,CAAC,CAAC;AACxD,MAAI,aAAa,IAAI,kBAAkB,SAAS;AAChD,QAAM,gBAAgB,IAAI,QAAQ,MAAM,WAAW,SAAS;AAE5D,MAAI,kBAAkB,QAAQ;AAC7B,iBAAa,WAAW,QAAQ,aAAa,gBAAgB;AAAA,EAC9D;AAGA,MAAI,CAAC,MAAM,QAAQ,UAAU,GAAG;AAC/B,WAAO,CAAC,eAA2D;AAClE,iBAAW,KAAK,aAAa;AAC7B,iBAAW,KAAK,gBAAgB;AAChC,UAAI,gBAAgB,YAAY;AAC/B,mBAAW,KAAK,aAAa,eAAe;AAAA,MAC7C;AACA,aAAO,CAAC,CAAC,UAAU,CAAC;AAAA,IACrB;AAAA,EACD;AAEA,QAAM,cAAc,WAAW,QAAQ,OAAO,YAAY,CAAC;AAC3D,QAAM,UAAkC,WAAW,IAAI,MAAM,CAAC,CAAC;AAE/D,SAAO,CAAC,eAA2D;AAClE,eAAW,KAAK,aAAa;AAC7B,eAAW,KAAK,gBAAgB;AAChC,QAAI,gBAAgB,YAAY;AAC/B,iBAAW,KAAK,aAAa,eAAe;AAAA,IAC7C;AACA,YAAQ,WAAW,IAAI,CAAC,UAAU;AAClC,WAAO;AAAA,EACR;AACD;AAEO,MAAM,kBAAkB,CAC9B,WACA,KACA,OACI;AACJ,MAAI,cAAc,UAAa,cAAc,IAAI;AAChD,WAAO;AAAA,EACR;AAEA,MAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC9B,gBAAY,UAAU,MAAM,GAAG,EAAE,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC;AAAA,EAC7D;AAEA,aAAW,WAAW,WAAW;AAChC,QAAI,MAAM,GAAG,SAAS,OAAO,GAAG;AAC/B,aAAO;AAAA,IACR;AAEA,QAAI,IAAI,KAAK,CAAC,UAAU,MAAM,SAAS,OAAO,CAAC,GAAG;AACjD,aAAO;AAAA,IACR;AAAA,EACD;AAEA,SAAO;AACR;AAEO,MAAM,iCAAiC,CAAC,YAA+B;AAC7E,QAAM,eAAe,QAAQ,iBAAiB,gBAAgB,YAAY;AAC1E,QAAM,iBAAiB,QAAQ,cAAc,QAAQ,QAAQ,EAAE,IAAI;AAEnE,QAAM,8BAA8B,eAAe;AAAA,IAClD,CAAC,SAAS,KAAK,SAAS;AAAA,EACzB;AAEA,MAAI,CAAC,+BAA+B,iBAAiB,gBAAgB;AACpE,UAAM,IAAI;AAAA,MACT,QAAQ,QAAQ;AAAA,MAChB,IAAI,MAAM,kDAAkD;AAAA,MAC5D;AAAA,QACC,aACC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AAEA,MAAI,+BAA+B,iBAAiB,gBAAgB;AACnE,UAAM,IAAI;AAAA,MACT,QAAQ,QAAQ;AAAA,MAChB,IAAI,MAAM,uCAAuC;AAAA,MACjD;AAAA,QACC,aACC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;AAEA,eAAsB,8BACrB,KACA,kBACC;AACD,QAAM,iBAAiB,IAAI,iBAAiB,gBAAgB;AAC5D,MAAI,mBAAmB,OAAQ;AAE/B,QAAM,MAAM,IAAI,iBAAiB;AACjC,QAAM,UAAU,IAAI,cAAc;AAElC,MAAI,mBAAmB,aAAa;AAEnC,QAAI;AACJ,QAAI;AACH,qBAAe,MAAM,IAAI,eAA+C,eAAe;AAAA,IACxF,QAAQ;AAAA,IAAC;AAET,QAAI,iBAAiB,UAAa,CAAC,aAAa,QAAQ,CAAC,aAAa,UAAU;AAE/E,YAAM,IAAI,uCAA0B,KAAK,yCAAyC;AAAA,IACnF;AAEA,UAAM,mBAAe,kBAAAA,SAAU,GAAG;AAElC,QAAI,CAAC,aAAc,OAAM,IAAI,uCAA0B,GAAG;AAE1D,QAAI,aAAa,SAAS,aAAa,QAAQ,aAAa,SAAS,aAAa,UAAU;AAE3F,YAAM,IAAI,uCAA0B,GAAG;AAAA,IACxC;AAAA,EACD,WAAW,mBAAmB,cAAc;AAE3C,QAAI;AACJ,QAAI;AACH,qBAAe,MAAM,IAAI,eAA+C,gBAAgB;AAAA,IACzF,QAAQ;AAAA,IAAC;AAET,QAAI,iBAAiB,UAAa,CAAC,aAAa,QAAQ,CAAC,aAAa,OAAO;AAE5E,YAAM,IAAI,uCAA0B,KAAK,yCAAyC;AAAA,IACnF;AACA,UAAM,aAAc,aAAa,KAAgB,YAAY;AAC7D,UAAM,gBAAgB,aAAa;AAEnC,QACC,CAAC,QAAQ,eAAe,UAAU,KACjC,QAAwB,UAAU,MAAM,eACxC;AAED,YAAM,IAAI,uCAA0B,GAAG;AAAA,IACxC;AAAA,EACD,WAAW,mBAAmB,WAAW;AACxC,QAAI;AAEJ,QAAI;AACH,qBAAe,MAAM,IAAI,eAKtB,SAAS;AAAA,IACb,QAAQ;AAAA,IAAC;AAET,QAAI,iBAAiB,QAAW;AAE/B,YAAM,IAAI,uCAA0B,KAAK,yCAAyC;AAAA,IACnF;AAEA,UAAM,aAAa,IAAI,QAAQ;AAC/B,UAAM,QAAQ,YAAY,MAAM,GAAG,EAAE,CAAC;AAEtC,QAAI,CAAC,OAAO;AACX,YAAM,IAAI,uCAA0B,KAAK,mBAAmB;AAAA,IAC7D;AAEA,QAAI;AAEJ,QAAI,aAAa,YAAY,cAAc;AAC1C,0BAAoB,aAAa;AAAA,IAClC,OAAO;AACN,8BAAoB,mCAAiB,aAAa,WAAW,IAAI;AAAA,IAClE;AAEA,QAAI;AACH,aAAO,oBAAAC,QAAI,OAAO,OAAO,mBAAmB;AAAA,QAC3C,YAAY,CAAC,aAAa,SAAS;AAAA,MACpC,CAAC;AAAA,IACF,SAAS,OAAO;AACf,YAAM,IAAI,uCAA0B,KAAK,MAAM,OAAO;AAAA,IACvD;AAAA,EACD;AACD;","names":["basicAuth","jwt"]}
|
|
1
|
+
{"version":3,"sources":["../../../nodes/Webhook/utils.ts"],"sourcesContent":["import basicAuth from 'basic-auth';\nimport jwt from 'jsonwebtoken';\nimport { NodeOperationError } from 'n8n-workflow';\nimport type {\n\tIWebhookFunctions,\n\tINodeExecutionData,\n\tIDataObject,\n\tICredentialDataDecryptedObject,\n} from 'n8n-workflow';\n\nimport { WebhookAuthorizationError } from './error';\nimport { formatPrivateKey } from '../../utils/utilities';\n\nexport type WebhookParameters = {\n\thttpMethod: string | string[];\n\tresponseMode: string;\n\tresponseData: string;\n\tresponseCode?: number; //typeVersion <= 1.1\n\toptions?: {\n\t\tresponseData?: string;\n\t\tresponseCode?: {\n\t\t\tvalues?: {\n\t\t\t\tresponseCode: number;\n\t\t\t\tcustomCode?: number;\n\t\t\t};\n\t\t};\n\t\tnoResponseBody?: boolean;\n\t};\n};\n\nexport const getResponseCode = (parameters: WebhookParameters) => {\n\tif (parameters.responseCode) {\n\t\treturn parameters.responseCode;\n\t}\n\tconst responseCodeOptions = parameters.options;\n\tif (responseCodeOptions?.responseCode?.values) {\n\t\tconst { responseCode, customCode } = responseCodeOptions.responseCode.values;\n\n\t\tif (customCode) {\n\t\t\treturn customCode;\n\t\t}\n\n\t\treturn responseCode;\n\t}\n\treturn 200;\n};\n\nexport const getResponseData = (parameters: WebhookParameters) => {\n\tconst { responseData, responseMode, options } = parameters;\n\tif (responseData) return responseData;\n\n\tif (responseMode === 'onReceived') {\n\t\tconst data = options?.responseData;\n\t\tif (data) return data;\n\t}\n\n\tif (options?.noResponseBody) return 'noData';\n\n\treturn undefined;\n};\n\nexport const configuredOutputs = (parameters: WebhookParameters) => {\n\tconst httpMethod = parameters.httpMethod;\n\n\tif (!Array.isArray(httpMethod))\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: 'main',\n\t\t\t\tdisplayName: httpMethod,\n\t\t\t},\n\t\t];\n\n\tconst outputs = httpMethod.map((method) => {\n\t\treturn {\n\t\t\ttype: 'main',\n\t\t\tdisplayName: method,\n\t\t};\n\t});\n\n\treturn outputs;\n};\n\nexport const setupOutputConnection = (\n\tctx: IWebhookFunctions,\n\tmethod: string,\n\tadditionalData: {\n\t\tjwtPayload?: IDataObject;\n\t},\n) => {\n\tconst httpMethod = ctx.getNodeParameter('httpMethod', []) as string[] | string;\n\tlet webhookUrl = ctx.getNodeWebhookUrl('default') as string;\n\tconst executionMode = ctx.getMode() === 'manual' ? 'test' : 'production';\n\n\tif (executionMode === 'test') {\n\t\twebhookUrl = webhookUrl.replace('/webhook/', '/webhook-test/');\n\t}\n\n\t// multi methods could be set in settings of node, so we need to check if it's an array\n\tif (!Array.isArray(httpMethod)) {\n\t\treturn (outputData: INodeExecutionData): INodeExecutionData[][] => {\n\t\t\toutputData.json.webhookUrl = webhookUrl;\n\t\t\toutputData.json.executionMode = executionMode;\n\t\t\tif (additionalData?.jwtPayload) {\n\t\t\t\toutputData.json.jwtPayload = additionalData.jwtPayload;\n\t\t\t}\n\t\t\treturn [[outputData]];\n\t\t};\n\t}\n\n\tconst outputIndex = httpMethod.indexOf(method.toUpperCase());\n\tconst outputs: INodeExecutionData[][] = httpMethod.map(() => []);\n\n\treturn (outputData: INodeExecutionData): INodeExecutionData[][] => {\n\t\toutputData.json.webhookUrl = webhookUrl;\n\t\toutputData.json.executionMode = executionMode;\n\t\tif (additionalData?.jwtPayload) {\n\t\t\toutputData.json.jwtPayload = additionalData.jwtPayload;\n\t\t}\n\t\toutputs[outputIndex] = [outputData];\n\t\treturn outputs;\n\t};\n};\n\nexport const isIpWhitelisted = (\n\twhitelist: string | string[] | undefined,\n\tips: string[],\n\tip?: string,\n) => {\n\tif (whitelist === undefined || whitelist === '') {\n\t\treturn true;\n\t}\n\n\tif (!Array.isArray(whitelist)) {\n\t\twhitelist = whitelist.split(',').map((entry) => entry.trim());\n\t}\n\n\tfor (const address of whitelist) {\n\t\tif (ip && ip.includes(address)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ips.some((entry) => entry.includes(address))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n\nexport const checkResponseModeConfiguration = (context: IWebhookFunctions) => {\n\tconst responseMode = context.getNodeParameter('responseMode', 'onReceived') as string;\n\tconst connectedNodes = context.getChildNodes(context.getNode().name);\n\n\tconst isRespondToWebhookConnected = connectedNodes.some(\n\t\t(node) => node.type === 'n8n-nodes-base.respondToWebhook',\n\t);\n\n\tif (!isRespondToWebhookConnected && responseMode === 'responseNode') {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error('No Respond to Webhook node found in the workflow'),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'Insert a Respond to Webhook node to your workflow to respond to the webhook or choose another option for the “Respond” parameter',\n\t\t\t},\n\t\t);\n\t}\n\n\tif (isRespondToWebhookConnected && responseMode !== 'responseNode') {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error('Webhook node not correctly configured'),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'Set the “Respond” parameter to “Using Respond to Webhook Node” or remove the Respond to Webhook node',\n\t\t\t},\n\t\t);\n\t}\n};\n\nexport async function validateWebhookAuthentication(\n\tctx: IWebhookFunctions,\n\tauthPropertyName: string,\n) {\n\tconst authentication = ctx.getNodeParameter(authPropertyName) as string;\n\tif (authentication === 'none') return;\n\n\tconst req = ctx.getRequestObject();\n\tconst headers = ctx.getHeaderData();\n\n\tif (authentication === 'basicAuth') {\n\t\t// Basic authorization is needed to call webhook\n\t\tlet expectedAuth: ICredentialDataDecryptedObject | undefined;\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<ICredentialDataDecryptedObject>('httpBasicAuth');\n\t\t} catch {}\n\n\t\tif (expectedAuth === undefined || !expectedAuth.user || !expectedAuth.password) {\n\t\t\t// Data is not defined on node so can not authenticate\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\n\t\tconst providedAuth = basicAuth(req);\n\t\t// Authorization data is missing\n\t\tif (!providedAuth) throw new WebhookAuthorizationError(401);\n\n\t\tif (providedAuth.name !== expectedAuth.user || providedAuth.pass !== expectedAuth.password) {\n\t\t\t// Provided authentication data is wrong\n\t\t\tthrow new WebhookAuthorizationError(403);\n\t\t}\n\t} else if (authentication === 'bearerAuth') {\n\t\tlet expectedAuth: ICredentialDataDecryptedObject | undefined;\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<ICredentialDataDecryptedObject>('httpBearerAuth');\n\t\t} catch {}\n\n\t\tconst expectedToken = expectedAuth?.token as string;\n\t\tif (!expectedToken) {\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\n\t\tif (headers.authorization !== `Bearer ${expectedToken}`) {\n\t\t\tthrow new WebhookAuthorizationError(403);\n\t\t}\n\t} else if (authentication === 'headerAuth') {\n\t\t// Special header with value is needed to call webhook\n\t\tlet expectedAuth: ICredentialDataDecryptedObject | undefined;\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<ICredentialDataDecryptedObject>('httpHeaderAuth');\n\t\t} catch {}\n\n\t\tif (expectedAuth === undefined || !expectedAuth.name || !expectedAuth.value) {\n\t\t\t// Data is not defined on node so can not authenticate\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\t\tconst headerName = (expectedAuth.name as string).toLowerCase();\n\t\tconst expectedValue = expectedAuth.value as string;\n\n\t\tif (\n\t\t\t!headers.hasOwnProperty(headerName) ||\n\t\t\t(headers as IDataObject)[headerName] !== expectedValue\n\t\t) {\n\t\t\t// Provided authentication data is wrong\n\t\t\tthrow new WebhookAuthorizationError(403);\n\t\t}\n\t} else if (authentication === 'jwtAuth') {\n\t\tlet expectedAuth;\n\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<{\n\t\t\t\tkeyType: 'passphrase' | 'pemKey';\n\t\t\t\tpublicKey: string;\n\t\t\t\tsecret: string;\n\t\t\t\talgorithm: jwt.Algorithm;\n\t\t\t}>('jwtAuth');\n\t\t} catch {}\n\n\t\tif (expectedAuth === undefined) {\n\t\t\t// Data is not defined on node so can not authenticate\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\n\t\tconst authHeader = req.headers.authorization;\n\t\tconst token = authHeader?.split(' ')[1];\n\n\t\tif (!token) {\n\t\t\tthrow new WebhookAuthorizationError(401, 'No token provided');\n\t\t}\n\n\t\tlet secretOrPublicKey;\n\n\t\tif (expectedAuth.keyType === 'passphrase') {\n\t\t\tsecretOrPublicKey = expectedAuth.secret;\n\t\t} else {\n\t\t\tsecretOrPublicKey = formatPrivateKey(expectedAuth.publicKey, true);\n\t\t}\n\n\t\ttry {\n\t\t\treturn jwt.verify(token, secretOrPublicKey, {\n\t\t\t\talgorithms: [expectedAuth.algorithm],\n\t\t\t}) as IDataObject;\n\t\t} catch (error) {\n\t\t\tthrow new WebhookAuthorizationError(403, error.message);\n\t\t}\n\t}\n}\n"],"mappings":"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","names":["basicAuth","jwt"]}
|
|
@@ -225,6 +225,14 @@
|
|
|
225
225
|
"link": {
|
|
226
226
|
"type": "string"
|
|
227
227
|
},
|
|
228
|
+
"meta": {
|
|
229
|
+
"type": "object",
|
|
230
|
+
"properties": {
|
|
231
|
+
"footnotes": {
|
|
232
|
+
"type": "string"
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
},
|
|
228
236
|
"modified": {
|
|
229
237
|
"type": "string"
|
|
230
238
|
},
|
|
@@ -264,5 +272,5 @@
|
|
|
264
272
|
"type": "string"
|
|
265
273
|
}
|
|
266
274
|
},
|
|
267
|
-
"version":
|
|
275
|
+
"version": 2
|
|
268
276
|
}
|
|
@@ -154,20 +154,6 @@
|
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
},
|
|
157
|
-
"Tag": {
|
|
158
|
-
"type": "array",
|
|
159
|
-
"items": {
|
|
160
|
-
"type": "object",
|
|
161
|
-
"properties": {
|
|
162
|
-
"id": {
|
|
163
|
-
"type": "string"
|
|
164
|
-
},
|
|
165
|
-
"name": {
|
|
166
|
-
"type": "string"
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
},
|
|
171
157
|
"Unsubscribed_Mode": {
|
|
172
158
|
"type": "null"
|
|
173
159
|
},
|
|
@@ -175,5 +161,5 @@
|
|
|
175
161
|
"type": "null"
|
|
176
162
|
}
|
|
177
163
|
},
|
|
178
|
-
"version":
|
|
164
|
+
"version": 2
|
|
179
165
|
}
|
|
@@ -124,6 +124,12 @@ BQIDAQAB
|
|
|
124
124
|
},
|
|
125
125
|
baseUrl: "https://api.gong.io"
|
|
126
126
|
},
|
|
127
|
+
microsoftAzureCosmosDbSharedKeyApi: {
|
|
128
|
+
account: "n8n-us-east-account",
|
|
129
|
+
key: "I3rwpzP0XoFpNzJ7hRIUXjwgpD1qaVKi71NZBbk7oOHUXrbd80WAoIAAoRaT47W9hHO3b6us1yABACDbVdilag==",
|
|
130
|
+
database: "database_1",
|
|
131
|
+
baseUrl: "https://n8n-us-east-account.documents.azure.com/dbs/database_1"
|
|
132
|
+
},
|
|
127
133
|
microsoftEntraOAuth2Api: {
|
|
128
134
|
grantType: "authorizationCode",
|
|
129
135
|
authUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
|
|
@@ -218,6 +224,23 @@ BQIDAQAB
|
|
|
218
224
|
expires_in: 86400
|
|
219
225
|
}
|
|
220
226
|
},
|
|
227
|
+
youTubeOAuth2Api: {
|
|
228
|
+
grantType: "authorizationCode",
|
|
229
|
+
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
230
|
+
accessTokenUrl: "https://oauth2.googleapis.com/token",
|
|
231
|
+
clientId: "CLIENTID",
|
|
232
|
+
clientSecret: "CLIENTSECRET",
|
|
233
|
+
scope: "https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtubepartner https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtubepartner-channel-audit",
|
|
234
|
+
authQueryParameters: "access_type=offline&prompt=consent",
|
|
235
|
+
authentication: "body",
|
|
236
|
+
oauthTokenData: {
|
|
237
|
+
access_token: "ACCESSTOKEN",
|
|
238
|
+
refresh_token: "REFRESHTOKEN",
|
|
239
|
+
scope: "https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtubepartner https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtubepartner-channel-audit",
|
|
240
|
+
token_type: "bearer",
|
|
241
|
+
expires_in: 86400
|
|
242
|
+
}
|
|
243
|
+
},
|
|
221
244
|
notionApi: {
|
|
222
245
|
apiKey: "key123"
|
|
223
246
|
},
|
|
@@ -268,6 +291,19 @@ BQIDAQAB
|
|
|
268
291
|
},
|
|
269
292
|
discordWebhookApi: {
|
|
270
293
|
webhookUri: "https://discord.com/webhook"
|
|
294
|
+
},
|
|
295
|
+
salesforceOAuth2Api: {
|
|
296
|
+
grantType: "pkce",
|
|
297
|
+
environment: "production",
|
|
298
|
+
authUrl: "https://login.salesforce.com/services/oauth2/authorize",
|
|
299
|
+
accessTokenUrl: "https://login.salesforce.com/services/oauth2/token",
|
|
300
|
+
scope: "full refresh_token",
|
|
301
|
+
authQueryParameters: "",
|
|
302
|
+
authentication: "header",
|
|
303
|
+
oauthTokenData: {
|
|
304
|
+
access_token: "ACCESSTOKEN",
|
|
305
|
+
instance_url: "https://salesforce.instance"
|
|
306
|
+
}
|
|
271
307
|
}
|
|
272
308
|
};
|
|
273
309
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../test/nodes/FakeCredentialsMap.ts"],"sourcesContent":["// If your test needs data from credentials, you can add it here.\n// as JSON.stringify({ id: 'credentials_ID', name: 'credentials_name' }) for specific credentials\n// or as 'credentials_type' for all credentials of that type\n// expected keys for credentials can be found in packages/nodes-base/credentials/[credentials_type].credentials.ts\nexport const FAKE_CREDENTIALS_DATA = {\n\t[JSON.stringify({ id: '20', name: 'Airtable account' })]: {\n\t\tapiKey: 'key456',\n\t},\n\t[JSON.stringify({ id: 'G45TOKX5kBEraTr1', name: 'JWT Auth test PEM' })]: {\n\t\tkeyType: 'pemKey',\n\t\tprivateKey: `\n-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCfw0m1K+M1/6Tw\nCvLYDv0gmxa+reEdKBfT0/hfkkjFWqbMRo0f4CQ3PwrOavS+80PDy6nVL21BmGev\nw1bF7KXmqOzr+yKOUJ8A4u6vXUQKzVSFBqb2YZmZL1s7va9aaO6pVANTbmYHpTjh\nSBnBrXgidVOXNX1c+IG+OZZMiTFWg4lJTE9rvMbLh4o5FPwdZlA1rLAux4KXVNNr\nmE7T5/tsuikR06KMJS6V6YR4PZmTsy/3D2clADXDCtbUdEe0eBYoUmRLMhRL6umq\nh98Dsm5ZG+YB2dn0ThR/g7DPVwvmnrK2S5e4hpqFYxQ8V8pGx7dQLsc/utbvsn32\ndctGivkFAgMBAAECggEABDB0QdZtRlC2S/8VgBnghFbcwVJA6WlQOqM/y43D77zh\nS9D7yV6wxGwYRfJjCZDKcZtpECiGtmYfLeoy38zFSueaEtQKg23UxYqt1JZe/uOE\neFqEzUgg5XXq8AWY0AeZXoJP9gOalE++TpX76uq4EDtAXmIuL95qVIkhCk+8pfaR\navLcejnyYGSJAG1J9pXHNChXXDVPd7PrIa20A44osvusifVMlcIYM3qkv167ULzX\n4nu2hZwlNxGKtpVPldFY/qu5S7SdLo/2BQinrMSSKRSFihA4Uuod8GK0+UwjE4gO\nTD15bjqIcadlAYV6bn34sHnMU9hjhPB5NyXiINYdsQKBgQDNu0XFjYyAgwORaZYs\njVTJg+fQ9wM7xnlfxXCVb9eoOGF0blW9VjIEz8lLjmPlPFFVS+EPN0andHHqH4t5\nSQZVZxgNMcodWs8BJTVZUkXa+IljHXT1Vkb2zvtH96ADzs3c43+tNpmKhjG3XK1U\nrL/v8feU31nwQb7imOmYmzbHCQKBgQDGzJ/pRLByB24W6FRfHIItP81vVg5ckCXi\nsIhzHUdUmTdVbdAxeS6IW2oAc/IuksvmiZMLYsm+sIFFePJQrBsoD41R5VsFcJqE\no5x0DUzbOzqaV4HPOHDniibudyryZKnBvkXlCjyCv4iPKaFhH4T1aB+wdK4pJPo2\nfyABs2lFHQKBgQDHz6IFK+QREK3PdhA/twhpK65jWvUOAkbxyE3/JX/7xr6IGX02\nhdfQqoqj0midRMbto+OzJol9q+/TZs3MfysimR1X+0qE1iSExUGaPfjQomC1He/x\nM9l6bi7Jh+wmpp10cpQXhBb93jW9E8rYmWtVPNmsAn1UhlZBuCfwapd6GQKBgATM\nf7ezzsaR41huN0ssdv/8oErluucFG8UDGegddtFV+X34bqQjFrp36nEkW15AcOeZ\nvpDxy4js3dH9f2vvG6C172VgsffJphE5mdc7UvWf0mRTZHDKHf+Y2CO9gK3lPCvP\nGgTTYG6PjQ5XpOuhRSZfYxRxXJrlp5yVKQKhgBMJAoGBAMc6ktd0iqHAYCW3d9QP\ne618RiMlVIYZIUlLWAUQWQSf3linqMjo1rCbbI/lSxE216XwI/VBX50gg/Oy3aUl\nCibHHk2aKGlxVxe0Huv5gcjbZgVh1EMi4oxh4600IrWRH1Uz5AleXnheNiappKnA\nlOMhy99LXMlAOL7qOBnZHgrm\n-----END PRIVATE KEY-----\n\t\t`,\n\t\tpublicKey: `\n-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn8NJtSvjNf+k8Ary2A79\nIJsWvq3hHSgX09P4X5JIxVqmzEaNH+AkNz8Kzmr0vvNDw8up1S9tQZhnr8NWxeyl\n5qjs6/sijlCfAOLur11ECs1UhQam9mGZmS9bO72vWmjuqVQDU25mB6U44UgZwa14\nInVTlzV9XPiBvjmWTIkxVoOJSUxPa7zGy4eKORT8HWZQNaywLseCl1TTa5hO0+f7\nbLopEdOijCUulemEeD2Zk7Mv9w9nJQA1wwrW1HRHtHgWKFJkSzIUS+rpqoffA7Ju\nWRvmAdnZ9E4Uf4Owz1cL5p6ytkuXuIaahWMUPFfKRse3UC7HP7rW77J99nXLRor5\nBQIDAQAB\n-----END PUBLIC KEY-----\n\t\t`,\n\t\talgorithm: 'RS256',\n\t},\n\tairtableApi: {\n\t\tapiKey: 'key123',\n\t},\n\tazureStorageOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',\n\t\taccessTokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope: 'https://storage.azure.com/user_impersonation',\n\t\tauthQueryParameters: 'response_mode=query',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\ttoken_type: 'Bearer',\n\t\t\tscope: 'https://storage.azure.com/user_impersonation',\n\t\t\texpires_in: 4730,\n\t\t\text_expires_in: 4730,\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\tcallbackQueryString: {\n\t\t\t\tsession_state: 'SESSIONSTATE',\n\t\t\t},\n\t\t},\n\t\taccount: 'myaccount',\n\t\tbaseUrl: 'https://myaccount.blob.core.windows.net',\n\t},\n\tazureStorageSharedKeyApi: {\n\t\taccount: 'devstoreaccount1',\n\t\tkey: 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==',\n\t\tbaseUrl: 'https://myaccount.blob.core.windows.net',\n\t},\n\tgongApi: {\n\t\tbaseUrl: 'https://api.gong.io',\n\t\taccessKey: 'accessKey123',\n\t\taccessKeySecret: 'accessKeySecret123',\n\t},\n\tgongOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://app.gong.io/oauth2/authorize',\n\t\taccessTokenUrl: 'https://app.gong.io/oauth2/generate-customer-token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'api:calls:read:transcript api:provisioning:read api:workspaces:read api:meetings:user:delete api:crm:get-objects api:data-privacy:delete api:crm:schema api:flows:write api:crm:upload api:meetings:integration:status api:calls:read:extensive api:meetings:user:update api:integration-settings:write api:settings:scorecards:read api:stats:scorecards api:stats:interaction api:stats:user-actions api:crm:integration:delete api:calls:read:basic api:calls:read:media-url api:digital-interactions:write api:crm:integrations:read api:library:read api:data-privacy:read api:users:read api:logs:read api:calls:create api:meetings:user:create api:stats:user-actions:detailed api:settings:trackers:read api:crm:integration:register api:provisioning:read-write api:engagement-data:write api:permission-profile:read api:permission-profile:write api:flows:read api:crm-calls:manual-association:read',\n\t\tauthQueryParameters: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope:\n\t\t\t\t'api:calls:read:transcript api:provisioning:read api:workspaces:read api:meetings:user:delete api:crm:get-objects api:data-privacy:delete api:crm:schema api:flows:write api:crm:upload api:meetings:integration:status api:calls:read:extensive api:meetings:user:update api:integration-settings:write api:settings:scorecards:read api:stats:scorecards api:stats:interaction api:stats:user-actions api:crm:integration:delete api:calls:read:basic api:calls:read:media-url api:digital-interactions:write api:crm:integrations:read api:library:read api:data-privacy:read api:users:read api:logs:read api:calls:create api:meetings:user:create api:stats:user-actions:detailed api:settings:trackers:read api:crm:integration:register api:provisioning:read-write api:engagement-data:write api:permission-profile:read api:permission-profile:write api:flows:read api:crm-calls:manual-association:read',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t\tapi_base_url_for_customer: 'https://api.gong.io',\n\t\t},\n\t\tbaseUrl: 'https://api.gong.io',\n\t},\n\tmicrosoftEntraOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',\n\t\taccessTokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'openid offline_access AccessReview.ReadWrite.All Directory.ReadWrite.All NetworkAccessPolicy.ReadWrite.All DelegatedAdminRelationship.ReadWrite.All EntitlementManagement.ReadWrite.All User.ReadWrite.All Directory.AccessAsUser.All Sites.FullControl.All',\n\t\tauthQueryParameters: 'response_mode=query',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\ttoken_type: 'Bearer',\n\t\t\tscope:\n\t\t\t\t'AccessReview.ReadWrite.All DelegatedAdminRelationship.ReadWrite.All Directory.AccessAsUser.All Directory.Read.All Directory.ReadWrite.All EntitlementManagement.ReadWrite.All Group.ReadWrite.All NetworkAccessPolicy.ReadWrite.All openid Sites.FullControl.All User.DeleteRestore.All User.EnableDisableAccount.All User.Export.All User.Invite.All User.ManageIdentities.All User.Read User.Read.All User.ReadBasic.All User.ReadWrite User.ReadWrite.All User.RevokeSessions.All profile email',\n\t\t\texpires_in: 4822,\n\t\t\text_expires_in: 4822,\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tid_token: 'IDTOKEN',\n\t\t\tcallbackQueryString: {\n\t\t\t\tsession_state: 'SESSIONSTATE',\n\t\t\t},\n\t\t},\n\t},\n\tmicrosoftExcelOAuth2Api: {\n\t\tscope: 'openid',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'token',\n\t\t},\n\t},\n\tmicrosoftTeamsOAuth2Api: {\n\t\tscope: 'openid',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'token',\n\t\t},\n\t},\n\tn8nApi: {\n\t\tapiKey: 'key123',\n\t\tbaseUrl: 'https://test.app.n8n.cloud/api/v1',\n\t},\n\tnpmApi: {\n\t\taccessToken: 'fake-npm-access-token',\n\t\tregistryUrl: 'https://fake.npm.registry',\n\t},\n\ttotpApi: {\n\t\tlabel: 'GitHub:john-doe',\n\t\tsecret: 'BVDRSBXQB2ZEL5HE',\n\t},\n\taws: {\n\t\tregion: 'eu-central-1',\n\t\taccessKeyId: 'key',\n\t\tsecretAccessKey: 'secret',\n\t},\n\ttwitterOAuth2Api: {\n\t\tgrantType: 'pkce',\n\t\tauthUrl: 'https://twitter.com/i/oauth2/authorize',\n\t\taccessTokenUrl: 'https://api.twitter.com/2/oauth2/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'tweet.read users.read tweet.write tweet.moderate.write users.read follows.read follows.write offline.access like.read like.write dm.write dm.read list.read list.write',\n\t\tauthQueryParameters: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 7200,\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\tscope:\n\t\t\t\t'tweet.moderate.write follows.read offline.access list.write dm.read list.read tweet.write like.write like.read users.read dm.write tweet.read follows.write',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t},\n\t},\n\tjwtAuth: {\n\t\tkeyType: 'passphrase',\n\t\tsecret: 'baz',\n\t\talgorithm: 'HS256',\n\t},\n\ttelegramApi: {\n\t\taccessToken: 'testToken',\n\t\tbaseUrl: 'https://api.telegram.org',\n\t},\n\tgmailOAuth2: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://accounts.google.com/o/oauth2/v2/auth',\n\t\taccessTokenUrl: 'https://oauth2.googleapis.com/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'https://www.googleapis.com/auth/gmail.labels https://www.googleapis.com/auth/gmail.addons.current.action.compose https://www.googleapis.com/auth/gmail.addons.current.message.action https://mail.google.com/ https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/gmail.compose',\n\t\tauthQueryParameters: 'access_type=offline&prompt=consent',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope:\n\t\t\t\t'https://www.googleapis.com/auth/gmail.labels https://www.googleapis.com/auth/gmail.addons.current.action.compose https://www.googleapis.com/auth/gmail.addons.current.message.action https://mail.google.com/ https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/gmail.compose',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t},\n\t},\n\tnotionApi: {\n\t\tapiKey: 'key123',\n\t},\n\tphilipsHueOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tappId: 'APPID',\n\t\tauthUrl: 'https://api.meethue.com/v2/oauth2/authorize',\n\t\taccessTokenUrl: 'https://api.meethue.com/v2/oauth2/token',\n\t\tauthQueryParameters: 'appid=APPID',\n\t\tscope: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope: '',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t},\n\t},\n\tspotifyOAuth2Api: {\n\t\taccessTokenUrl: 'https://accounts.spotify.com/api/token',\n\t\tauthQueryParameters: '',\n\t\tauthUrl: 'https://accounts.spotify.com/authorize',\n\t\tauthentication: 'header',\n\t\tclientId: 'CLIENT_ID',\n\t\tclientSecret: 'CLIENT_SECRET',\n\t\tgrantType: 'authorizationCode',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESS_TOKEN',\n\t\t\texpires_in: 3600,\n\t\t\trefresh_token: 'REFRESH_TOKEN',\n\t\t\tscope:\n\t\t\t\t'playlist-read-private playlist-read-collaborative user-modify-playback-state user-library-read user-follow-read playlist-modify-private playlist-modify-public user-read-playback-state user-read-currently-playing user-read-recently-played',\n\t\t\ttoken_type: 'Bearer',\n\t\t},\n\t\tscope:\n\t\t\t'user-read-playback-state playlist-read-collaborative user-modify-playback-state playlist-modify-public user-read-currently-playing playlist-read-private user-read-recently-played playlist-modify-private user-library-read user-follow-read',\n\t\tserver: 'https://api.spotify.com/',\n\t},\n\tbaserowApi: {\n\t\thost: 'https://api.baserow.io',\n\t\tusername: 'nathan@n8n.io',\n\t\tpassword: 'fake-password',\n\t},\n\twordpressApi: {\n\t\turl: 'https://myblog.com',\n\t\tallowUnauthorizedCerts: false,\n\t\tusername: 'nodeqa',\n\t\tpassword: 'fake-password',\n\t},\n\tdiscordWebhookApi: {\n\t\twebhookUri: 'https://discord.com/webhook',\n\t},\n} as const;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../test/nodes/FakeCredentialsMap.ts"],"sourcesContent":["// If your test needs data from credentials, you can add it here.\n// as JSON.stringify({ id: 'credentials_ID', name: 'credentials_name' }) for specific credentials\n// or as 'credentials_type' for all credentials of that type\n// expected keys for credentials can be found in packages/nodes-base/credentials/[credentials_type].credentials.ts\nexport const FAKE_CREDENTIALS_DATA = {\n\t[JSON.stringify({ id: '20', name: 'Airtable account' })]: {\n\t\tapiKey: 'key456',\n\t},\n\t[JSON.stringify({ id: 'G45TOKX5kBEraTr1', name: 'JWT Auth test PEM' })]: {\n\t\tkeyType: 'pemKey',\n\t\tprivateKey: `\n-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCfw0m1K+M1/6Tw\nCvLYDv0gmxa+reEdKBfT0/hfkkjFWqbMRo0f4CQ3PwrOavS+80PDy6nVL21BmGev\nw1bF7KXmqOzr+yKOUJ8A4u6vXUQKzVSFBqb2YZmZL1s7va9aaO6pVANTbmYHpTjh\nSBnBrXgidVOXNX1c+IG+OZZMiTFWg4lJTE9rvMbLh4o5FPwdZlA1rLAux4KXVNNr\nmE7T5/tsuikR06KMJS6V6YR4PZmTsy/3D2clADXDCtbUdEe0eBYoUmRLMhRL6umq\nh98Dsm5ZG+YB2dn0ThR/g7DPVwvmnrK2S5e4hpqFYxQ8V8pGx7dQLsc/utbvsn32\ndctGivkFAgMBAAECggEABDB0QdZtRlC2S/8VgBnghFbcwVJA6WlQOqM/y43D77zh\nS9D7yV6wxGwYRfJjCZDKcZtpECiGtmYfLeoy38zFSueaEtQKg23UxYqt1JZe/uOE\neFqEzUgg5XXq8AWY0AeZXoJP9gOalE++TpX76uq4EDtAXmIuL95qVIkhCk+8pfaR\navLcejnyYGSJAG1J9pXHNChXXDVPd7PrIa20A44osvusifVMlcIYM3qkv167ULzX\n4nu2hZwlNxGKtpVPldFY/qu5S7SdLo/2BQinrMSSKRSFihA4Uuod8GK0+UwjE4gO\nTD15bjqIcadlAYV6bn34sHnMU9hjhPB5NyXiINYdsQKBgQDNu0XFjYyAgwORaZYs\njVTJg+fQ9wM7xnlfxXCVb9eoOGF0blW9VjIEz8lLjmPlPFFVS+EPN0andHHqH4t5\nSQZVZxgNMcodWs8BJTVZUkXa+IljHXT1Vkb2zvtH96ADzs3c43+tNpmKhjG3XK1U\nrL/v8feU31nwQb7imOmYmzbHCQKBgQDGzJ/pRLByB24W6FRfHIItP81vVg5ckCXi\nsIhzHUdUmTdVbdAxeS6IW2oAc/IuksvmiZMLYsm+sIFFePJQrBsoD41R5VsFcJqE\no5x0DUzbOzqaV4HPOHDniibudyryZKnBvkXlCjyCv4iPKaFhH4T1aB+wdK4pJPo2\nfyABs2lFHQKBgQDHz6IFK+QREK3PdhA/twhpK65jWvUOAkbxyE3/JX/7xr6IGX02\nhdfQqoqj0midRMbto+OzJol9q+/TZs3MfysimR1X+0qE1iSExUGaPfjQomC1He/x\nM9l6bi7Jh+wmpp10cpQXhBb93jW9E8rYmWtVPNmsAn1UhlZBuCfwapd6GQKBgATM\nf7ezzsaR41huN0ssdv/8oErluucFG8UDGegddtFV+X34bqQjFrp36nEkW15AcOeZ\nvpDxy4js3dH9f2vvG6C172VgsffJphE5mdc7UvWf0mRTZHDKHf+Y2CO9gK3lPCvP\nGgTTYG6PjQ5XpOuhRSZfYxRxXJrlp5yVKQKhgBMJAoGBAMc6ktd0iqHAYCW3d9QP\ne618RiMlVIYZIUlLWAUQWQSf3linqMjo1rCbbI/lSxE216XwI/VBX50gg/Oy3aUl\nCibHHk2aKGlxVxe0Huv5gcjbZgVh1EMi4oxh4600IrWRH1Uz5AleXnheNiappKnA\nlOMhy99LXMlAOL7qOBnZHgrm\n-----END PRIVATE KEY-----\n\t\t`,\n\t\tpublicKey: `\n-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn8NJtSvjNf+k8Ary2A79\nIJsWvq3hHSgX09P4X5JIxVqmzEaNH+AkNz8Kzmr0vvNDw8up1S9tQZhnr8NWxeyl\n5qjs6/sijlCfAOLur11ECs1UhQam9mGZmS9bO72vWmjuqVQDU25mB6U44UgZwa14\nInVTlzV9XPiBvjmWTIkxVoOJSUxPa7zGy4eKORT8HWZQNaywLseCl1TTa5hO0+f7\nbLopEdOijCUulemEeD2Zk7Mv9w9nJQA1wwrW1HRHtHgWKFJkSzIUS+rpqoffA7Ju\nWRvmAdnZ9E4Uf4Owz1cL5p6ytkuXuIaahWMUPFfKRse3UC7HP7rW77J99nXLRor5\nBQIDAQAB\n-----END PUBLIC KEY-----\n\t\t`,\n\t\talgorithm: 'RS256',\n\t},\n\tairtableApi: {\n\t\tapiKey: 'key123',\n\t},\n\tazureStorageOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',\n\t\taccessTokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope: 'https://storage.azure.com/user_impersonation',\n\t\tauthQueryParameters: 'response_mode=query',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\ttoken_type: 'Bearer',\n\t\t\tscope: 'https://storage.azure.com/user_impersonation',\n\t\t\texpires_in: 4730,\n\t\t\text_expires_in: 4730,\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\tcallbackQueryString: {\n\t\t\t\tsession_state: 'SESSIONSTATE',\n\t\t\t},\n\t\t},\n\t\taccount: 'myaccount',\n\t\tbaseUrl: 'https://myaccount.blob.core.windows.net',\n\t},\n\tazureStorageSharedKeyApi: {\n\t\taccount: 'devstoreaccount1',\n\t\tkey: 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==',\n\t\tbaseUrl: 'https://myaccount.blob.core.windows.net',\n\t},\n\tgongApi: {\n\t\tbaseUrl: 'https://api.gong.io',\n\t\taccessKey: 'accessKey123',\n\t\taccessKeySecret: 'accessKeySecret123',\n\t},\n\tgongOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://app.gong.io/oauth2/authorize',\n\t\taccessTokenUrl: 'https://app.gong.io/oauth2/generate-customer-token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'api:calls:read:transcript api:provisioning:read api:workspaces:read api:meetings:user:delete api:crm:get-objects api:data-privacy:delete api:crm:schema api:flows:write api:crm:upload api:meetings:integration:status api:calls:read:extensive api:meetings:user:update api:integration-settings:write api:settings:scorecards:read api:stats:scorecards api:stats:interaction api:stats:user-actions api:crm:integration:delete api:calls:read:basic api:calls:read:media-url api:digital-interactions:write api:crm:integrations:read api:library:read api:data-privacy:read api:users:read api:logs:read api:calls:create api:meetings:user:create api:stats:user-actions:detailed api:settings:trackers:read api:crm:integration:register api:provisioning:read-write api:engagement-data:write api:permission-profile:read api:permission-profile:write api:flows:read api:crm-calls:manual-association:read',\n\t\tauthQueryParameters: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope:\n\t\t\t\t'api:calls:read:transcript api:provisioning:read api:workspaces:read api:meetings:user:delete api:crm:get-objects api:data-privacy:delete api:crm:schema api:flows:write api:crm:upload api:meetings:integration:status api:calls:read:extensive api:meetings:user:update api:integration-settings:write api:settings:scorecards:read api:stats:scorecards api:stats:interaction api:stats:user-actions api:crm:integration:delete api:calls:read:basic api:calls:read:media-url api:digital-interactions:write api:crm:integrations:read api:library:read api:data-privacy:read api:users:read api:logs:read api:calls:create api:meetings:user:create api:stats:user-actions:detailed api:settings:trackers:read api:crm:integration:register api:provisioning:read-write api:engagement-data:write api:permission-profile:read api:permission-profile:write api:flows:read api:crm-calls:manual-association:read',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t\tapi_base_url_for_customer: 'https://api.gong.io',\n\t\t},\n\t\tbaseUrl: 'https://api.gong.io',\n\t},\n\tmicrosoftAzureCosmosDbSharedKeyApi: {\n\t\taccount: 'n8n-us-east-account',\n\t\tkey: 'I3rwpzP0XoFpNzJ7hRIUXjwgpD1qaVKi71NZBbk7oOHUXrbd80WAoIAAoRaT47W9hHO3b6us1yABACDbVdilag==',\n\t\tdatabase: 'database_1',\n\t\tbaseUrl: 'https://n8n-us-east-account.documents.azure.com/dbs/database_1',\n\t},\n\tmicrosoftEntraOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',\n\t\taccessTokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'openid offline_access AccessReview.ReadWrite.All Directory.ReadWrite.All NetworkAccessPolicy.ReadWrite.All DelegatedAdminRelationship.ReadWrite.All EntitlementManagement.ReadWrite.All User.ReadWrite.All Directory.AccessAsUser.All Sites.FullControl.All',\n\t\tauthQueryParameters: 'response_mode=query',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\ttoken_type: 'Bearer',\n\t\t\tscope:\n\t\t\t\t'AccessReview.ReadWrite.All DelegatedAdminRelationship.ReadWrite.All Directory.AccessAsUser.All Directory.Read.All Directory.ReadWrite.All EntitlementManagement.ReadWrite.All Group.ReadWrite.All NetworkAccessPolicy.ReadWrite.All openid Sites.FullControl.All User.DeleteRestore.All User.EnableDisableAccount.All User.Export.All User.Invite.All User.ManageIdentities.All User.Read User.Read.All User.ReadBasic.All User.ReadWrite User.ReadWrite.All User.RevokeSessions.All profile email',\n\t\t\texpires_in: 4822,\n\t\t\text_expires_in: 4822,\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tid_token: 'IDTOKEN',\n\t\t\tcallbackQueryString: {\n\t\t\t\tsession_state: 'SESSIONSTATE',\n\t\t\t},\n\t\t},\n\t},\n\tmicrosoftExcelOAuth2Api: {\n\t\tscope: 'openid',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'token',\n\t\t},\n\t},\n\tmicrosoftTeamsOAuth2Api: {\n\t\tscope: 'openid',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'token',\n\t\t},\n\t},\n\tn8nApi: {\n\t\tapiKey: 'key123',\n\t\tbaseUrl: 'https://test.app.n8n.cloud/api/v1',\n\t},\n\tnpmApi: {\n\t\taccessToken: 'fake-npm-access-token',\n\t\tregistryUrl: 'https://fake.npm.registry',\n\t},\n\ttotpApi: {\n\t\tlabel: 'GitHub:john-doe',\n\t\tsecret: 'BVDRSBXQB2ZEL5HE',\n\t},\n\taws: {\n\t\tregion: 'eu-central-1',\n\t\taccessKeyId: 'key',\n\t\tsecretAccessKey: 'secret',\n\t},\n\ttwitterOAuth2Api: {\n\t\tgrantType: 'pkce',\n\t\tauthUrl: 'https://twitter.com/i/oauth2/authorize',\n\t\taccessTokenUrl: 'https://api.twitter.com/2/oauth2/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'tweet.read users.read tweet.write tweet.moderate.write users.read follows.read follows.write offline.access like.read like.write dm.write dm.read list.read list.write',\n\t\tauthQueryParameters: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 7200,\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\tscope:\n\t\t\t\t'tweet.moderate.write follows.read offline.access list.write dm.read list.read tweet.write like.write like.read users.read dm.write tweet.read follows.write',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t},\n\t},\n\tjwtAuth: {\n\t\tkeyType: 'passphrase',\n\t\tsecret: 'baz',\n\t\talgorithm: 'HS256',\n\t},\n\ttelegramApi: {\n\t\taccessToken: 'testToken',\n\t\tbaseUrl: 'https://api.telegram.org',\n\t},\n\tgmailOAuth2: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://accounts.google.com/o/oauth2/v2/auth',\n\t\taccessTokenUrl: 'https://oauth2.googleapis.com/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'https://www.googleapis.com/auth/gmail.labels https://www.googleapis.com/auth/gmail.addons.current.action.compose https://www.googleapis.com/auth/gmail.addons.current.message.action https://mail.google.com/ https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/gmail.compose',\n\t\tauthQueryParameters: 'access_type=offline&prompt=consent',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope:\n\t\t\t\t'https://www.googleapis.com/auth/gmail.labels https://www.googleapis.com/auth/gmail.addons.current.action.compose https://www.googleapis.com/auth/gmail.addons.current.message.action https://mail.google.com/ https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/gmail.compose',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t},\n\t},\n\tyouTubeOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://accounts.google.com/o/oauth2/v2/auth',\n\t\taccessTokenUrl: 'https://oauth2.googleapis.com/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtubepartner https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtubepartner-channel-audit',\n\t\tauthQueryParameters: 'access_type=offline&prompt=consent',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope:\n\t\t\t\t'https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtubepartner https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtubepartner-channel-audit',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t},\n\t},\n\tnotionApi: {\n\t\tapiKey: 'key123',\n\t},\n\tphilipsHueOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tappId: 'APPID',\n\t\tauthUrl: 'https://api.meethue.com/v2/oauth2/authorize',\n\t\taccessTokenUrl: 'https://api.meethue.com/v2/oauth2/token',\n\t\tauthQueryParameters: 'appid=APPID',\n\t\tscope: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope: '',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t},\n\t},\n\tspotifyOAuth2Api: {\n\t\taccessTokenUrl: 'https://accounts.spotify.com/api/token',\n\t\tauthQueryParameters: '',\n\t\tauthUrl: 'https://accounts.spotify.com/authorize',\n\t\tauthentication: 'header',\n\t\tclientId: 'CLIENT_ID',\n\t\tclientSecret: 'CLIENT_SECRET',\n\t\tgrantType: 'authorizationCode',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESS_TOKEN',\n\t\t\texpires_in: 3600,\n\t\t\trefresh_token: 'REFRESH_TOKEN',\n\t\t\tscope:\n\t\t\t\t'playlist-read-private playlist-read-collaborative user-modify-playback-state user-library-read user-follow-read playlist-modify-private playlist-modify-public user-read-playback-state user-read-currently-playing user-read-recently-played',\n\t\t\ttoken_type: 'Bearer',\n\t\t},\n\t\tscope:\n\t\t\t'user-read-playback-state playlist-read-collaborative user-modify-playback-state playlist-modify-public user-read-currently-playing playlist-read-private user-read-recently-played playlist-modify-private user-library-read user-follow-read',\n\t\tserver: 'https://api.spotify.com/',\n\t},\n\tbaserowApi: {\n\t\thost: 'https://api.baserow.io',\n\t\tusername: 'nathan@n8n.io',\n\t\tpassword: 'fake-password',\n\t},\n\twordpressApi: {\n\t\turl: 'https://myblog.com',\n\t\tallowUnauthorizedCerts: false,\n\t\tusername: 'nodeqa',\n\t\tpassword: 'fake-password',\n\t},\n\tdiscordWebhookApi: {\n\t\twebhookUri: 'https://discord.com/webhook',\n\t},\n\tsalesforceOAuth2Api: {\n\t\tgrantType: 'pkce',\n\t\tenvironment: 'production',\n\t\tauthUrl: 'https://login.salesforce.com/services/oauth2/authorize',\n\t\taccessTokenUrl: 'https://login.salesforce.com/services/oauth2/token',\n\t\tscope: 'full refresh_token',\n\t\tauthQueryParameters: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\tinstance_url: 'https://salesforce.instance',\n\t\t},\n\t},\n} as const;\n"],"mappings":"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","names":[]}
|
|
@@ -110,7 +110,7 @@ const equalityTest = async (testData) => {
|
|
|
110
110
|
delete binary.data.data;
|
|
111
111
|
delete binary.data.directory;
|
|
112
112
|
}
|
|
113
|
-
if (json
|
|
113
|
+
if (json?.error instanceof Error) {
|
|
114
114
|
json.error = JSON.parse(
|
|
115
115
|
JSON.stringify(json.error, ["message", "name", "description", "context"])
|
|
116
116
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../test/nodes/Helpers.ts"],"sourcesContent":["import { Container } from '@n8n/di';\nimport { readFileSync, readdirSync, mkdtempSync } from 'fs';\nimport { get } from 'lodash';\nimport { isEmpty } from 'lodash';\nimport { BinaryDataService, constructExecutionMetaData } from 'n8n-core';\nimport type {\n\tIDataObject,\n\tIExecuteFunctions,\n\tIGetNodeParameterOptions,\n\tINode,\n\tIRun,\n\tIWorkflowBase,\n\tWorkflowTestData,\n} from 'n8n-workflow';\nimport { ApplicationError } from 'n8n-workflow';\nimport nock from 'nock';\nimport { tmpdir } from 'os';\nimport path from 'path';\n\nimport { executeWorkflow } from './ExecuteWorkflow';\nimport { LoadNodesAndCredentials } from './load-nodes-and-credentials';\n\nconst baseDir = path.resolve(__dirname, '../..');\n\nexport const readJsonFileSync = <T = any>(filePath: string) =>\n\tJSON.parse(readFileSync(path.join(baseDir, filePath), 'utf-8')) as T;\n\nconst loadNodesAndCredentials = new LoadNodesAndCredentials(baseDir);\nContainer.set(LoadNodesAndCredentials, loadNodesAndCredentials);\n\nbeforeAll(async () => await loadNodesAndCredentials.init());\nbeforeEach(() => nock.disableNetConnect());\n\nexport function createTemporaryDir(prefix = 'n8n') {\n\treturn mkdtempSync(path.join(tmpdir(), prefix));\n}\n\nexport async function initBinaryDataService() {\n\tconst binaryDataService = new BinaryDataService();\n\tawait binaryDataService.init({\n\t\tmode: 'default',\n\t\tavailableModes: ['default'],\n\t\tlocalStoragePath: createTemporaryDir(),\n\t});\n\tContainer.set(BinaryDataService, binaryDataService);\n}\n\nexport function getResultNodeData(result: IRun, testData: WorkflowTestData) {\n\treturn Object.keys(testData.output.nodeData).map((nodeName) => {\n\t\tconst error = result.data.resultData.error;\n\t\t// If there was an error running the workflow throw it for easier debugging\n\t\t// and to surface all issues\n\t\tif (error?.cause) throw error.cause;\n\t\tif (error) throw error;\n\n\t\tif (result.data.resultData.runData[nodeName] === undefined) {\n\t\t\t// log errors from other nodes\n\t\t\tObject.keys(result.data.resultData.runData).forEach((key) => {\n\t\t\t\tconst error = result.data.resultData.runData[key][0]?.error;\n\t\t\t\tif (error) {\n\t\t\t\t\tconsole.log(`Node ${key}\\n`, error);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthrow new ApplicationError(`Data for node \"${nodeName}\" is missing!`, { level: 'warning' });\n\t\t}\n\t\tconst resultData = result.data.resultData.runData[nodeName].map((nodeData) => {\n\t\t\tif (nodeData.data === undefined) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn nodeData.data.main[0]!.map((entry) => {\n\t\t\t\tif (entry.binary && isEmpty(entry.binary)) delete entry.binary;\n\t\t\t\tdelete entry.pairedItem;\n\t\t\t\treturn entry;\n\t\t\t});\n\t\t});\n\t\treturn {\n\t\t\tnodeName,\n\t\t\tresultData,\n\t\t};\n\t});\n}\n\nexport const equalityTest = async (testData: WorkflowTestData) => {\n\t// execute workflow\n\tconst { result } = await executeWorkflow(testData);\n\n\t// check if result node data matches expected test data\n\tconst resultNodeData = getResultNodeData(result, testData);\n\tresultNodeData.forEach(({ nodeName, resultData }) => {\n\t\tconst msg = `Equality failed for \"${testData.description}\" at node \"${nodeName}\"`;\n\t\tresultData.forEach((item) => {\n\t\t\titem?.forEach(({ binary, json }) => {\n\t\t\t\tif (binary) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tdelete binary.data.data;\n\t\t\t\t\tdelete binary.data.directory;\n\t\t\t\t}\n\n\t\t\t\t// Convert errors to JSON so tests can compare\n\t\t\t\tif (json.error instanceof Error) {\n\t\t\t\t\tjson.error = JSON.parse(\n\t\t\t\t\t\tJSON.stringify(json.error, ['message', 'name', 'description', 'context']),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn expect(resultData, msg).toEqual(testData.output.nodeData[nodeName]);\n\t});\n\n\texpect(result.finished || result.status === 'waiting').toEqual(true);\n};\n\nconst preparePinData = (pinData: IDataObject) => {\n\tconst returnData = Object.keys(pinData).reduce(\n\t\t(acc, key) => {\n\t\t\tconst data = pinData[key] as IDataObject[];\n\t\t\tacc[key] = [data];\n\t\t\treturn acc;\n\t\t},\n\t\t{} as {\n\t\t\t[key: string]: IDataObject[][];\n\t\t},\n\t);\n\treturn returnData;\n};\n\nexport const workflowToTests = (workflowFiles: string[]) => {\n\tconst testCases: WorkflowTestData[] = [];\n\tfor (const filePath of workflowFiles) {\n\t\tconst description = filePath.replace('.json', '');\n\t\tconst workflowData = readJsonFileSync<IWorkflowBase & Pick<WorkflowTestData, 'trigger'>>(\n\t\t\tfilePath,\n\t\t);\n\t\tconst testDir = path.join(baseDir, path.dirname(filePath));\n\t\tworkflowData.nodes.forEach((node) => {\n\t\t\tif (node.parameters) {\n\t\t\t\tnode.parameters = JSON.parse(\n\t\t\t\t\tJSON.stringify(node.parameters).replace(/\"C:\\\\\\\\Test\\\\\\\\(.*)\"/, `\"${testDir}/$1\"`),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\tif (workflowData.pinData === undefined) {\n\t\t\tthrow new ApplicationError('Workflow data does not contain pinData', { level: 'warning' });\n\t\t}\n\n\t\tconst nodeData = preparePinData(workflowData.pinData);\n\t\tdelete workflowData.pinData;\n\n\t\tconst { trigger } = workflowData;\n\t\tdelete workflowData.trigger;\n\n\t\tconst input = { workflowData };\n\t\tconst output = { nodeData };\n\n\t\ttestCases.push({ description, input, output, trigger });\n\t}\n\treturn testCases;\n};\n\nexport const testWorkflows = (workflows: string[]) => {\n\tconst tests = workflowToTests(workflows);\n\n\tfor (const testData of tests) {\n\t\ttest(testData.description, async () => await equalityTest(testData));\n\t}\n};\n\nexport const getWorkflowFilenames = (dirname: string) => {\n\tconst workflows: string[] = [];\n\n\tconst filenames = readdirSync(dirname);\n\tconst testFolder = dirname.split(`${path.sep}nodes-base${path.sep}`)[1];\n\tfilenames.forEach((file) => {\n\t\tif (file.endsWith('.json')) {\n\t\t\tworkflows.push(path.join(testFolder, file));\n\t\t}\n\t});\n\n\treturn workflows;\n};\n\nexport const createMockExecuteFunction = <T = IExecuteFunctions>(\n\tnodeParameters: IDataObject,\n\tnodeMock: INode,\n\tcontinueBool = false,\n) => {\n\tconst fakeExecuteFunction = {\n\t\tgetNodeParameter(\n\t\t\tparameterName: string,\n\t\t\t_itemIndex: number,\n\t\t\tfallbackValue?: IDataObject | undefined,\n\t\t\toptions?: IGetNodeParameterOptions | undefined,\n\t\t) {\n\t\t\tconst parameter = options?.extractValue ? `${parameterName}.value` : parameterName;\n\t\t\treturn get(nodeParameters, parameter, fallbackValue);\n\t\t},\n\t\tgetNode() {\n\t\t\treturn nodeMock;\n\t\t},\n\t\tcontinueOnFail() {\n\t\t\treturn continueBool;\n\t\t},\n\t\thelpers: {\n\t\t\tconstructExecutionMetaData,\n\t\t},\n\t} as unknown as T;\n\treturn fakeExecuteFunction;\n};\n"],"mappings":"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","names":["import_lodash","path","nock","error"]}
|
|
1
|
+
{"version":3,"sources":["../../../test/nodes/Helpers.ts"],"sourcesContent":["import { Container } from '@n8n/di';\nimport { readFileSync, readdirSync, mkdtempSync } from 'fs';\nimport { get } from 'lodash';\nimport { isEmpty } from 'lodash';\nimport { BinaryDataService, constructExecutionMetaData } from 'n8n-core';\nimport type {\n\tIDataObject,\n\tIExecuteFunctions,\n\tIGetNodeParameterOptions,\n\tINode,\n\tIRun,\n\tIWorkflowBase,\n\tWorkflowTestData,\n} from 'n8n-workflow';\nimport { ApplicationError } from 'n8n-workflow';\nimport nock from 'nock';\nimport { tmpdir } from 'os';\nimport path from 'path';\n\nimport { executeWorkflow } from './ExecuteWorkflow';\nimport { LoadNodesAndCredentials } from './load-nodes-and-credentials';\n\nconst baseDir = path.resolve(__dirname, '../..');\n\nexport const readJsonFileSync = <T = any>(filePath: string) =>\n\tJSON.parse(readFileSync(path.join(baseDir, filePath), 'utf-8')) as T;\n\nconst loadNodesAndCredentials = new LoadNodesAndCredentials(baseDir);\nContainer.set(LoadNodesAndCredentials, loadNodesAndCredentials);\n\nbeforeAll(async () => await loadNodesAndCredentials.init());\nbeforeEach(() => nock.disableNetConnect());\n\nexport function createTemporaryDir(prefix = 'n8n') {\n\treturn mkdtempSync(path.join(tmpdir(), prefix));\n}\n\nexport async function initBinaryDataService() {\n\tconst binaryDataService = new BinaryDataService();\n\tawait binaryDataService.init({\n\t\tmode: 'default',\n\t\tavailableModes: ['default'],\n\t\tlocalStoragePath: createTemporaryDir(),\n\t});\n\tContainer.set(BinaryDataService, binaryDataService);\n}\n\nexport function getResultNodeData(result: IRun, testData: WorkflowTestData) {\n\treturn Object.keys(testData.output.nodeData).map((nodeName) => {\n\t\tconst error = result.data.resultData.error;\n\t\t// If there was an error running the workflow throw it for easier debugging\n\t\t// and to surface all issues\n\t\tif (error?.cause) throw error.cause;\n\t\tif (error) throw error;\n\n\t\tif (result.data.resultData.runData[nodeName] === undefined) {\n\t\t\t// log errors from other nodes\n\t\t\tObject.keys(result.data.resultData.runData).forEach((key) => {\n\t\t\t\tconst error = result.data.resultData.runData[key][0]?.error;\n\t\t\t\tif (error) {\n\t\t\t\t\tconsole.log(`Node ${key}\\n`, error);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthrow new ApplicationError(`Data for node \"${nodeName}\" is missing!`, { level: 'warning' });\n\t\t}\n\t\tconst resultData = result.data.resultData.runData[nodeName].map((nodeData) => {\n\t\t\tif (nodeData.data === undefined) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn nodeData.data.main[0]!.map((entry) => {\n\t\t\t\tif (entry.binary && isEmpty(entry.binary)) delete entry.binary;\n\t\t\t\tdelete entry.pairedItem;\n\t\t\t\treturn entry;\n\t\t\t});\n\t\t});\n\t\treturn {\n\t\t\tnodeName,\n\t\t\tresultData,\n\t\t};\n\t});\n}\n\nexport const equalityTest = async (testData: WorkflowTestData) => {\n\t// execute workflow\n\tconst { result } = await executeWorkflow(testData);\n\n\t// check if result node data matches expected test data\n\tconst resultNodeData = getResultNodeData(result, testData);\n\tresultNodeData.forEach(({ nodeName, resultData }) => {\n\t\tconst msg = `Equality failed for \"${testData.description}\" at node \"${nodeName}\"`;\n\t\tresultData.forEach((item) => {\n\t\t\titem?.forEach(({ binary, json }) => {\n\t\t\t\tif (binary) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tdelete binary.data.data;\n\t\t\t\t\tdelete binary.data.directory;\n\t\t\t\t}\n\n\t\t\t\t// Convert errors to JSON so tests can compare\n\t\t\t\tif (json?.error instanceof Error) {\n\t\t\t\t\tjson.error = JSON.parse(\n\t\t\t\t\t\tJSON.stringify(json.error, ['message', 'name', 'description', 'context']),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn expect(resultData, msg).toEqual(testData.output.nodeData[nodeName]);\n\t});\n\n\texpect(result.finished || result.status === 'waiting').toEqual(true);\n};\n\nconst preparePinData = (pinData: IDataObject) => {\n\tconst returnData = Object.keys(pinData).reduce(\n\t\t(acc, key) => {\n\t\t\tconst data = pinData[key] as IDataObject[];\n\t\t\tacc[key] = [data];\n\t\t\treturn acc;\n\t\t},\n\t\t{} as {\n\t\t\t[key: string]: IDataObject[][];\n\t\t},\n\t);\n\treturn returnData;\n};\n\nexport const workflowToTests = (workflowFiles: string[]) => {\n\tconst testCases: WorkflowTestData[] = [];\n\tfor (const filePath of workflowFiles) {\n\t\tconst description = filePath.replace('.json', '');\n\t\tconst workflowData = readJsonFileSync<IWorkflowBase & Pick<WorkflowTestData, 'trigger'>>(\n\t\t\tfilePath,\n\t\t);\n\t\tconst testDir = path.join(baseDir, path.dirname(filePath));\n\t\tworkflowData.nodes.forEach((node) => {\n\t\t\tif (node.parameters) {\n\t\t\t\tnode.parameters = JSON.parse(\n\t\t\t\t\tJSON.stringify(node.parameters).replace(/\"C:\\\\\\\\Test\\\\\\\\(.*)\"/, `\"${testDir}/$1\"`),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\tif (workflowData.pinData === undefined) {\n\t\t\tthrow new ApplicationError('Workflow data does not contain pinData', { level: 'warning' });\n\t\t}\n\n\t\tconst nodeData = preparePinData(workflowData.pinData);\n\t\tdelete workflowData.pinData;\n\n\t\tconst { trigger } = workflowData;\n\t\tdelete workflowData.trigger;\n\n\t\tconst input = { workflowData };\n\t\tconst output = { nodeData };\n\n\t\ttestCases.push({ description, input, output, trigger });\n\t}\n\treturn testCases;\n};\n\nexport const testWorkflows = (workflows: string[]) => {\n\tconst tests = workflowToTests(workflows);\n\n\tfor (const testData of tests) {\n\t\ttest(testData.description, async () => await equalityTest(testData));\n\t}\n};\n\nexport const getWorkflowFilenames = (dirname: string) => {\n\tconst workflows: string[] = [];\n\n\tconst filenames = readdirSync(dirname);\n\tconst testFolder = dirname.split(`${path.sep}nodes-base${path.sep}`)[1];\n\tfilenames.forEach((file) => {\n\t\tif (file.endsWith('.json')) {\n\t\t\tworkflows.push(path.join(testFolder, file));\n\t\t}\n\t});\n\n\treturn workflows;\n};\n\nexport const createMockExecuteFunction = <T = IExecuteFunctions>(\n\tnodeParameters: IDataObject,\n\tnodeMock: INode,\n\tcontinueBool = false,\n) => {\n\tconst fakeExecuteFunction = {\n\t\tgetNodeParameter(\n\t\t\tparameterName: string,\n\t\t\t_itemIndex: number,\n\t\t\tfallbackValue?: IDataObject | undefined,\n\t\t\toptions?: IGetNodeParameterOptions | undefined,\n\t\t) {\n\t\t\tconst parameter = options?.extractValue ? `${parameterName}.value` : parameterName;\n\t\t\treturn get(nodeParameters, parameter, fallbackValue);\n\t\t},\n\t\tgetNode() {\n\t\t\treturn nodeMock;\n\t\t},\n\t\tcontinueOnFail() {\n\t\t\treturn continueBool;\n\t\t},\n\t\thelpers: {\n\t\t\tconstructExecutionMetaData,\n\t\t},\n\t} as unknown as T;\n\treturn fakeExecuteFunction;\n};\n"],"mappings":"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","names":["import_lodash","path","nock","error"]}
|
|
@@ -145,6 +145,7 @@
|
|
|
145
145
|
{"name":"highLevelOAuth2Api","extends":["oAuth2Api"],"displayName":"HighLevel OAuth2 API","documentationUrl":"highLevel","properties":[{"displayName":"Grant Type","name":"grantType","type":"hidden","default":"authorizationCode"},{"displayName":"Authorization URL","name":"authUrl","type":"options","default":"https://marketplace.leadconnectorhq.com/oauth/chooselocation","required":true,"options":[{"name":"White-Label","value":"https://marketplace.leadconnectorhq.com/oauth/chooselocation"},{"name":"Standard","value":"https://marketplace.gohighlevel.com/oauth/chooselocation"}]},{"displayName":"Scope","name":"scope","type":"string","hint":"Separate scopes by space, scopes needed for node: 'locations.readonly contacts.readonly contacts.write opportunities.readonly opportunities.write users.readonly'","default":"","required":true},{"displayName":"Access Token URL","name":"accessTokenUrl","type":"hidden","default":"https://services.leadconnectorhq.com/oauth/token"},{"displayName":"Auth URI Query Parameters","name":"authQueryParameters","type":"hidden","default":""},{"displayName":"Authentication","name":"authentication","type":"hidden","default":"body"},{"displayName":"Make sure your credentials include the required OAuth scopes for all actions this node performs.","name":"notice","type":"notice","default":"","displayOptions":{"hideOnCloud":true}}],"iconUrl":"icons/n8n-nodes-base/dist/credentials/icons/highLevel.svg","supportedNodes":["highLevel"]},
|
|
146
146
|
{"name":"homeAssistantApi","displayName":"Home Assistant API","documentationUrl":"homeAssistant","properties":[{"displayName":"Host","name":"host","type":"string","default":""},{"displayName":"Port","name":"port","type":"number","default":8123},{"displayName":"SSL","name":"ssl","type":"boolean","default":false},{"displayName":"Access Token","name":"accessToken","type":"string","typeOptions":{"password":true},"default":""}],"supportedNodes":["homeAssistant"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/HomeAssistant/homeAssistant.svg"},
|
|
147
147
|
{"name":"httpBasicAuth","displayName":"Basic Auth","documentationUrl":"httpRequest","genericAuth":true,"icon":"node:n8n-nodes-base.httpRequest","properties":[{"displayName":"User","name":"user","type":"string","default":""},{"displayName":"Password","name":"password","type":"string","typeOptions":{"password":true},"default":""}],"supportedNodes":["formTrigger","graphql","httpRequest","pipedriveTrigger","wait","webhook"]},
|
|
148
|
+
{"name":"httpBearerAuth","displayName":"Bearer Auth","documentationUrl":"httpRequest","genericAuth":true,"icon":"node:n8n-nodes-base.httpRequest","properties":[{"displayName":"Bearer Token","name":"token","type":"string","typeOptions":{"password":true},"default":""},{"displayName":"This credential uses the \"Authorization\" header. To use a custom header, use a \"Custom Auth\" credential instead","name":"useCustomAuth","type":"notice","default":""}],"authenticate":{"type":"generic","properties":{"headers":{"Authorization":"Bearer ={{$credentials.token}}"}}},"supportedNodes":[]},
|
|
148
149
|
{"name":"httpDigestAuth","displayName":"Digest Auth","documentationUrl":"httpRequest","genericAuth":true,"icon":"node:n8n-nodes-base.httpRequest","properties":[{"displayName":"User","name":"user","type":"string","default":""},{"displayName":"Password","name":"password","type":"string","typeOptions":{"password":true},"default":""}],"supportedNodes":["graphql","httpRequest"]},
|
|
149
150
|
{"name":"httpHeaderAuth","displayName":"Header Auth","documentationUrl":"httpRequest","genericAuth":true,"icon":"node:n8n-nodes-base.httpRequest","properties":[{"displayName":"Name","name":"name","type":"string","default":""},{"displayName":"Value","name":"value","type":"string","typeOptions":{"password":true},"default":""},{"displayName":"To send multiple headers, use a \"Custom Auth\" credential instead","name":"useCustomAuth","type":"notice","default":""}],"authenticate":{"type":"generic","properties":{"headers":{"={{$credentials.name}}":"={{$credentials.value}}"}}},"supportedNodes":["graphql","httpRequest","wait","webhook"]},
|
|
150
151
|
{"name":"httpCustomAuth","displayName":"Custom Auth","documentationUrl":"httpRequest","genericAuth":true,"icon":"node:n8n-nodes-base.httpRequest","properties":[{"displayName":"JSON","name":"json","type":"json","required":true,"description":"Use json to specify authentication values for headers, body and qs.","placeholder":"{ \"headers\": { \"key\" : \"value\" }, \"body\": { \"key\": \"value\" }, \"qs\": { \"key\": \"value\" } }","default":""}],"supportedNodes":["graphql"]},
|
|
@@ -201,6 +202,7 @@
|
|
|
201
202
|
{"name":"mediumOAuth2Api","extends":["oAuth2Api"],"displayName":"Medium OAuth2 API","documentationUrl":"medium","properties":[{"displayName":"Grant Type","name":"grantType","type":"hidden","default":"authorizationCode"},{"displayName":"Authorization URL","name":"authUrl","type":"hidden","default":"https://medium.com/m/oauth/authorize","required":true},{"displayName":"Access Token URL","name":"accessTokenUrl","type":"hidden","default":"https://medium.com/v1/tokens","required":true},{"displayName":"Scope","name":"scope","type":"hidden","default":"basicProfile,publishPost,listPublications"},{"displayName":"Client ID","name":"clientId","type":"string","default":"","required":true},{"displayName":"Client Secret","name":"clientSecret","type":"string","typeOptions":{"password":true},"default":"","required":true},{"displayName":"Auth URI Query Parameters","name":"authQueryParameters","type":"hidden","default":""},{"displayName":"Authentication","name":"authentication","type":"hidden","default":"body"}],"supportedNodes":["medium"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Medium/medium.png"},
|
|
202
203
|
{"name":"metabaseApi","displayName":"Metabase API","documentationUrl":"metabase","properties":[{"displayName":"Session Token","name":"sessionToken","type":"hidden","typeOptions":{"expirable":true},"default":""},{"displayName":"URL","name":"url","type":"string","default":""},{"displayName":"Username","name":"username","type":"string","default":""},{"displayName":"Password","name":"password","type":"string","typeOptions":{"password":true},"default":""}],"authenticate":{"type":"generic","properties":{"headers":{"X-Metabase-Session":"={{$credentials.sessionToken}}"}}},"test":{"request":{"baseURL":"={{$credentials?.url}}","url":"/api/user/current"}},"supportedNodes":["metabase"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Metabase/metabase.svg"},
|
|
203
204
|
{"name":"messageBirdApi","displayName":"MessageBird API","documentationUrl":"messageBird","properties":[{"displayName":"API Key","name":"accessKey","type":"string","typeOptions":{"password":true},"default":""}],"supportedNodes":["messageBird"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/MessageBird/messagebird.svg"},
|
|
205
|
+
{"name":"microsoftAzureCosmosDbSharedKeyApi","displayName":"Microsoft Azure Cosmos DB API","documentationUrl":"microsoftAzureCosmosdb","properties":[{"displayName":"Account","name":"account","default":"","description":"Account name","required":true,"type":"string"},{"displayName":"Key","name":"key","default":"","description":"Account key","required":true,"type":"string","typeOptions":{"password":true}},{"displayName":"Database","name":"database","default":"","description":"Database name","required":true,"type":"string"}],"test":{"request":{"baseURL":"=https://{{ $credentials.account }}.documents.azure.com/dbs/{{ $credentials.database }}","url":"/colls"}},"supportedNodes":["azureCosmosDb"],"iconUrl":{"light":"icons/n8n-nodes-base/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.svg","dark":"icons/n8n-nodes-base/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.svg"},"authenticate":{}},
|
|
204
206
|
{"name":"microsoftAzureMonitorOAuth2Api","displayName":"Microsoft Azure Monitor OAuth2 API","extends":["oAuth2Api"],"documentationUrl":"microsoftazuremonitor","httpRequestNode":{"name":"Microsoft Azure Monitor","docsUrl":"https://learn.microsoft.com/en-us/azure/azure-monitor/logs/api/request-format","apiBaseUrlPlaceholder":"https://api.loganalytics.azure.com/v1/workspaces/[workspace_id]/query"},"properties":[{"displayName":"Grant Type","name":"grantType","type":"options","options":[{"name":"Authorization Code","value":"authorizationCode"},{"name":"Client Credentials","value":"clientCredentials"}],"default":"authorizationCode"},{"displayName":"Tenant ID","required":true,"name":"tenantId","type":"string","default":""},{"displayName":"Resource","name":"resource","type":"options","options":[{"name":"Azure Log Analytics","value":"https://api.loganalytics.azure.com"},{"name":"Log Analytics","value":"https://api.loganalytics.io"},{"name":"Azure Monitor","value":"https://monitor.azure.com"},{"name":"Azure Management","value":"https://management.azure.com"}],"default":"https://api.loganalytics.azure.com"},{"displayName":"Authorization URL","name":"authUrl","type":"hidden","default":"=https://login.microsoftonline.com/{{$self[\"tenantId\"]}}/oauth2/authorize"},{"displayName":"Access Token URL","name":"accessTokenUrl","type":"hidden","default":"=https://login.microsoftonline.com/{{$self[\"tenantId\"]}}/oauth2/{{$self[\"grantType\"] === \"clientCredentials\" ? \"v2.0/\" : \"\"}}token"},{"displayName":"Auth URI Query Parameters","name":"authQueryParameters","type":"hidden","default":"={{$self[\"grantType\"] === \"clientCredentials\" ? \"\" : \"resource=\" + $self[\"resource\"]}}"},{"displayName":"Scope","name":"scope","type":"hidden","default":"={{$self[\"grantType\"] === \"clientCredentials\" ? $self[\"resource\"] + \"/.default\" : \"\"}}"},{"displayName":"Authentication","name":"authentication","type":"hidden","default":"body"}],"iconUrl":"icons/n8n-nodes-base/dist/credentials/icons/Microsoft.svg","supportedNodes":[]},
|
|
205
207
|
{"name":"microsoftDynamicsOAuth2Api","extends":["microsoftOAuth2Api"],"displayName":"Microsoft Dynamics OAuth2 API","documentationUrl":"microsoft","properties":[{"displayName":"Subdomain","name":"subdomain","type":"string","required":true,"placeholder":"organization","default":""},{"displayName":"Region","name":"region","type":"options","default":"crm.dynamics.com","options":[{"name":"Asia Pacific (APAC/ APJ)","value":"crm5.dynamics.com"},{"name":"Australia (OCE)","value":"crm6.dynamics.com"},{"name":"Canada (CAN)","value":"crm3.dynamics.com"},{"name":"China (CHN)","value":"crm.dynamics.cn"},{"name":"Europe, Middle East, Africa (EMEA/ EUR)","value":"crm4.dynamics.com"},{"name":"France (FRA)","value":"crm12.dynamics.com"},{"name":"Germany (GER)","value":"crm16.dynamics.com"},{"name":"India (IND)","value":"crm8.dynamics.com"},{"name":"Japan (JPN)","value":"crm7.dynamics.com"},{"name":"Microsoft Cloud Germany (DEU)","value":"crm.microsoftdynamics.de"},{"name":"North America (NAM)","value":"crm.dynamics.com"},{"name":"North America 2 (US Gov GCC)","value":"crm9.dynamics.com"},{"name":"South Africa (ZAF)","value":"crm14.dynamics.com"},{"name":"South America (LATAM/ SAM)","value":"crm2.dynamics.com"},{"name":"Switzerland (CHE)","value":"crm17.dynamics.com"},{"name":"United Arab Emirates (UAE)","value":"crm15.dynamics.com"},{"name":"United Kingdom (UK/ GBR)","value":"crm11.dynamics.com"},{"name":"United States Government Community Cloud (GCC High)","value":"crm.microsoftdynamics.us"}]},{"displayName":"Scope","name":"scope","type":"hidden","default":"=openid offline_access https://{{$self.subdomain}}.{{$self.region}}/.default"}],"supportedNodes":["microsoftDynamicsCrm"],"iconUrl":{"light":"icons/n8n-nodes-base/dist/nodes/Microsoft/Dynamics/microsoftDynamicsCrm.svg","dark":"icons/n8n-nodes-base/dist/nodes/Microsoft/Dynamics/microsoftDynamicsCrm.dark.svg"}},
|
|
206
208
|
{"name":"microsoftEntraOAuth2Api","displayName":"Microsoft Entra ID (Azure Active Directory) API","extends":["microsoftOAuth2Api"],"documentationUrl":"microsoftentra","properties":[{"displayName":"Custom Scopes","name":"customScopes","type":"boolean","default":false,"description":"Define custom scopes"},{"displayName":"The default scopes needed for the node to work are already set, If you change these the node may not function correctly.","name":"customScopesNotice","type":"notice","default":"","displayOptions":{"show":{"customScopes":[true]}}},{"displayName":"Enabled Scopes","name":"enabledScopes","type":"string","displayOptions":{"show":{"customScopes":[true]}},"default":"openid offline_access AccessReview.ReadWrite.All Directory.ReadWrite.All NetworkAccessPolicy.ReadWrite.All DelegatedAdminRelationship.ReadWrite.All EntitlementManagement.ReadWrite.All User.ReadWrite.All Directory.AccessAsUser.All Sites.FullControl.All GroupMember.ReadWrite.All","description":"Scopes that should be enabled"},{"displayName":"Scope","name":"scope","type":"hidden","default":"={{$self[\"customScopes\"] ? $self[\"enabledScopes\"] : \"openid offline_access AccessReview.ReadWrite.All Directory.ReadWrite.All NetworkAccessPolicy.ReadWrite.All DelegatedAdminRelationship.ReadWrite.All EntitlementManagement.ReadWrite.All User.ReadWrite.All Directory.AccessAsUser.All Sites.FullControl.All GroupMember.ReadWrite.All\"}}"}],"supportedNodes":["microsoftEntra"],"iconUrl":{"light":"icons/n8n-nodes-base/dist/nodes/Microsoft/Entra/microsoftEntra.svg","dark":"icons/n8n-nodes-base/dist/nodes/Microsoft/Entra/microsoftEntra.dark.svg"}},
|
|
@@ -279,7 +281,7 @@
|
|
|
279
281
|
{"name":"rocketchatApi","displayName":"Rocket API","documentationUrl":"rocketchat","properties":[{"displayName":"User ID","name":"userId","type":"string","default":""},{"displayName":"Auth Key","name":"authKey","type":"string","typeOptions":{"password":true},"default":""},{"displayName":"Domain","name":"domain","type":"string","default":"","placeholder":"https://n8n.rocket.chat"}],"authenticate":{"type":"generic","properties":{"headers":{"X-Auth-Token":"={{$credentials.authKey}}","X-User-Id":"={{$credentials.userId}}"}}},"test":{"request":{"baseURL":"={{$credentials.domain}}","url":"/api/v1/webdav.getMyAccounts"}},"supportedNodes":["rocketchat"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Rocketchat/rocketchat.svg"},
|
|
280
282
|
{"name":"rundeckApi","displayName":"Rundeck API","documentationUrl":"rundeck","properties":[{"displayName":"Url","name":"url","type":"string","default":"","placeholder":"http://127.0.0.1:4440"},{"displayName":"Token","name":"token","type":"string","typeOptions":{"password":true},"default":""}],"authenticate":{"type":"generic","properties":{"headers":{"user-agent":"n8n","X-Rundeck-Auth-Token":"={{$credentials?.token}}"}}},"test":{"request":{"baseURL":"={{$credentials.url}}","url":"/api/14/system/info","method":"GET"}},"supportedNodes":["rundeck"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Rundeck/rundeck.png"},
|
|
281
283
|
{"name":"s3","displayName":"S3","documentationUrl":"s3","properties":[{"displayName":"S3 Endpoint","name":"endpoint","type":"string","default":""},{"displayName":"Region","name":"region","type":"string","default":"us-east-1"},{"displayName":"Access Key ID","name":"accessKeyId","type":"string","default":""},{"displayName":"Secret Access Key","name":"secretAccessKey","type":"string","default":"","typeOptions":{"password":true}},{"displayName":"Force Path Style","name":"forcePathStyle","type":"boolean","default":false},{"displayName":"Ignore SSL Issues (Insecure)","name":"ignoreSSLIssues","type":"boolean","default":false,"description":"Whether to connect even if SSL certificate validation is not possible"}],"supportedNodes":["s3"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/S3/s3.png"},
|
|
282
|
-
{"name":"salesforceJwtApi","displayName":"Salesforce JWT API","documentationUrl":"salesforce","properties":[{"displayName":"Environment Type","name":"environment","type":"options","options":[{"name":"Production","value":"production"},{"name":"Sandbox","value":"sandbox"}],"default":"production"},{"displayName":"Client ID","name":"clientId","type":"string","default":"","required":true,"description":"Consumer Key from Salesforce Connected App"},{"displayName":"Username","name":"username","type":"string","default":"","required":true},{"displayName":"Private Key","name":"privateKey","type":"string","typeOptions":{"password":true},"default":"","required":true,"description":"Use the multiline editor. Make sure it is in standard PEM key format:<br />-----BEGIN PRIVATE KEY-----<br />KEY DATA GOES HERE<br />-----END PRIVATE KEY-----"}],"supportedNodes":["salesforce"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Salesforce/salesforce.svg"},
|
|
284
|
+
{"name":"salesforceJwtApi","displayName":"Salesforce JWT API","documentationUrl":"salesforce","properties":[{"displayName":"Environment Type","name":"environment","type":"options","options":[{"name":"Production","value":"production"},{"name":"Sandbox","value":"sandbox"}],"default":"production"},{"displayName":"Client ID","name":"clientId","type":"string","default":"","required":true,"description":"Consumer Key from Salesforce Connected App"},{"displayName":"Username","name":"username","type":"string","default":"","required":true},{"displayName":"Private Key","name":"privateKey","type":"string","typeOptions":{"password":true},"default":"","required":true,"description":"Use the multiline editor. Make sure it is in standard PEM key format:<br />-----BEGIN PRIVATE KEY-----<br />KEY DATA GOES HERE<br />-----END PRIVATE KEY-----"}],"test":{"request":{"baseURL":"={{$credentials?.environment === \"sandbox\" ? \"https://test.salesforce.com\" : \"https://login.salesforce.com\"}}","url":"/services/oauth2/userinfo","method":"GET"}},"supportedNodes":["salesforce"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Salesforce/salesforce.svg","authenticate":{}},
|
|
283
285
|
{"name":"salesforceOAuth2Api","extends":["oAuth2Api"],"displayName":"Salesforce OAuth2 API","documentationUrl":"salesforce","properties":[{"displayName":"Grant Type","name":"grantType","type":"hidden","default":"pkce"},{"displayName":"Environment Type","name":"environment","type":"options","options":[{"name":"Production","value":"production"},{"name":"Sandbox","value":"sandbox"}],"default":"production"},{"displayName":"Authorization URL","name":"authUrl","type":"hidden","required":true,"default":"={{ $self[\"environment\"] === \"sandbox\" ? \"https://test.salesforce.com/services/oauth2/authorize\" : \"https://login.salesforce.com/services/oauth2/authorize\" }}"},{"displayName":"Access Token URL","name":"accessTokenUrl","type":"hidden","required":true,"default":"={{ $self[\"environment\"] === \"sandbox\" ? \"https://test.salesforce.com/services/oauth2/token\" : \"https://login.salesforce.com/services/oauth2/token\" }}"},{"displayName":"Scope","name":"scope","type":"hidden","default":"full refresh_token"},{"displayName":"Auth URI Query Parameters","name":"authQueryParameters","type":"hidden","default":""},{"displayName":"Authentication","name":"authentication","type":"hidden","default":"header"}],"supportedNodes":["salesforce","salesforceTrigger"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Salesforce/salesforce.svg"},
|
|
284
286
|
{"name":"salesmateApi","displayName":"Salesmate API","documentationUrl":"salesmate","properties":[{"displayName":"Session Token","name":"sessionToken","type":"string","typeOptions":{"password":true},"default":""},{"displayName":"URL","name":"url","type":"string","default":"","placeholder":"n8n.salesmate.io"}],"supportedNodes":["salesmate"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Salesmate/salesmate.png"},
|
|
285
287
|
{"name":"seaTableApi","displayName":"SeaTable API","documentationUrl":"seaTable","properties":[{"displayName":"Environment","name":"environment","type":"options","default":"cloudHosted","options":[{"name":"Cloud-Hosted","value":"cloudHosted"},{"name":"Self-Hosted","value":"selfHosted"}]},{"displayName":"Self-Hosted Domain","name":"domain","type":"string","default":"","placeholder":"https://seatable.example.com","displayOptions":{"show":{"environment":["selfHosted"]}}},{"displayName":"API Token (of a Base)","name":"token","type":"string","description":"The API-Token of the SeaTable base you would like to use with n8n. n8n can only connect to one base at a time.","typeOptions":{"password":true},"default":""},{"displayName":"Timezone","name":"timezone","type":"options","default":"","description":"Seatable server's timezone","options":[{"value":"Europe/Andorra","name":"Europe/Andorra"},{"value":"Asia/Dubai","name":"Asia/Dubai"},{"value":"Asia/Kabul","name":"Asia/Kabul"},{"value":"America/Antigua","name":"America/Antigua"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"America/Anguilla","name":"America/Anguilla"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"Europe/Tirane","name":"Europe/Tirane"},{"value":"Asia/Yerevan","name":"Asia/Yerevan"},{"value":"Africa/Lagos","name":"Africa/Lagos"},{"value":"Africa/Luanda","name":"Africa/Luanda"},{"value":"Antarctica/Casey","name":"Antarctica/Casey"},{"value":"Antarctica/Davis","name":"Antarctica/Davis"},{"value":"Antarctica/DumontDUrville","name":"Antarctica/DumontDUrville"},{"value":"Antarctica/Mawson","name":"Antarctica/Mawson"},{"value":"Antarctica/McMurdo","name":"Antarctica/McMurdo"},{"value":"Antarctica/Palmer","name":"Antarctica/Palmer"},{"value":"Antarctica/Rothera","name":"Antarctica/Rothera"},{"value":"Antarctica/Syowa","name":"Antarctica/Syowa"},{"value":"Antarctica/Troll","name":"Antarctica/Troll"},{"value":"Antarctica/Vostok","name":"Antarctica/Vostok"},{"value":"Asia/Riyadh","name":"Asia/Riyadh"},{"value":"Asia/Urumqi","name":"Asia/Urumqi"},{"value":"Pacific/Auckland","name":"Pacific/Auckland"},{"value":"Pacific/Port_Moresby","name":"Pacific/Port_Moresby"},{"value":"America/Argentina/Buenos_Aires","name":"America/Argentina/Buenos_Aires"},{"value":"America/Argentina/Catamarca","name":"America/Argentina/Catamarca"},{"value":"America/Argentina/Cordoba","name":"America/Argentina/Cordoba"},{"value":"America/Argentina/Jujuy","name":"America/Argentina/Jujuy"},{"value":"America/Argentina/La_Rioja","name":"America/Argentina/La_Rioja"},{"value":"America/Argentina/Mendoza","name":"America/Argentina/Mendoza"},{"value":"America/Argentina/Rio_Gallegos","name":"America/Argentina/Rio_Gallegos"},{"value":"America/Argentina/Salta","name":"America/Argentina/Salta"},{"value":"America/Argentina/San_Juan","name":"America/Argentina/San_Juan"},{"value":"America/Argentina/San_Luis","name":"America/Argentina/San_Luis"},{"value":"America/Argentina/Tucuman","name":"America/Argentina/Tucuman"},{"value":"America/Argentina/Ushuaia","name":"America/Argentina/Ushuaia"},{"value":"Pacific/Pago_Pago","name":"Pacific/Pago_Pago"},{"value":"Europe/Vienna","name":"Europe/Vienna"},{"value":"Antarctica/Macquarie","name":"Antarctica/Macquarie"},{"value":"Australia/Adelaide","name":"Australia/Adelaide"},{"value":"Australia/Brisbane","name":"Australia/Brisbane"},{"value":"Australia/Broken_Hill","name":"Australia/Broken_Hill"},{"value":"Australia/Darwin","name":"Australia/Darwin"},{"value":"Australia/Eucla","name":"Australia/Eucla"},{"value":"Australia/Hobart","name":"Australia/Hobart"},{"value":"Australia/Lindeman","name":"Australia/Lindeman"},{"value":"Australia/Lord_Howe","name":"Australia/Lord_Howe"},{"value":"Australia/Melbourne","name":"Australia/Melbourne"},{"value":"Australia/Perth","name":"Australia/Perth"},{"value":"Australia/Sydney","name":"Australia/Sydney"},{"value":"America/Aruba","name":"America/Aruba"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"Europe/Helsinki","name":"Europe/Helsinki"},{"value":"Europe/Mariehamn","name":"Europe/Mariehamn"},{"value":"Asia/Baku","name":"Asia/Baku"},{"value":"Europe/Belgrade","name":"Europe/Belgrade"},{"value":"Europe/Sarajevo","name":"Europe/Sarajevo"},{"value":"America/Barbados","name":"America/Barbados"},{"value":"Asia/Dhaka","name":"Asia/Dhaka"},{"value":"Europe/Brussels","name":"Europe/Brussels"},{"value":"Africa/Abidjan","name":"Africa/Abidjan"},{"value":"Africa/Ouagadougou","name":"Africa/Ouagadougou"},{"value":"Europe/Sofia","name":"Europe/Sofia"},{"value":"Asia/Bahrain","name":"Asia/Bahrain"},{"value":"Asia/Qatar","name":"Asia/Qatar"},{"value":"Africa/Bujumbura","name":"Africa/Bujumbura"},{"value":"Africa/Maputo","name":"Africa/Maputo"},{"value":"Africa/Lagos","name":"Africa/Lagos"},{"value":"Africa/Porto-Novo","name":"Africa/Porto-Novo"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"America/St_Barthelemy","name":"America/St_Barthelemy"},{"value":"Atlantic/Bermuda","name":"Atlantic/Bermuda"},{"value":"Asia/Brunei","name":"Asia/Brunei"},{"value":"Asia/Kuching","name":"Asia/Kuching"},{"value":"America/La_Paz","name":"America/La_Paz"},{"value":"America/Kralendijk","name":"America/Kralendijk"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"America/Araguaina","name":"America/Araguaina"},{"value":"America/Bahia","name":"America/Bahia"},{"value":"America/Belem","name":"America/Belem"},{"value":"America/Boa_Vista","name":"America/Boa_Vista"},{"value":"America/Campo_Grande","name":"America/Campo_Grande"},{"value":"America/Cuiaba","name":"America/Cuiaba"},{"value":"America/Eirunepe","name":"America/Eirunepe"},{"value":"America/Fortaleza","name":"America/Fortaleza"},{"value":"America/Maceio","name":"America/Maceio"},{"value":"America/Manaus","name":"America/Manaus"},{"value":"America/Noronha","name":"America/Noronha"},{"value":"America/Porto_Velho","name":"America/Porto_Velho"},{"value":"America/Recife","name":"America/Recife"},{"value":"America/Rio_Branco","name":"America/Rio_Branco"},{"value":"America/Santarem","name":"America/Santarem"},{"value":"America/Sao_Paulo","name":"America/Sao_Paulo"},{"value":"America/Nassau","name":"America/Nassau"},{"value":"America/Toronto","name":"America/Toronto"},{"value":"Asia/Thimphu","name":"Asia/Thimphu"},{"value":"Africa/Gaborone","name":"Africa/Gaborone"},{"value":"Africa/Maputo","name":"Africa/Maputo"},{"value":"Europe/Minsk","name":"Europe/Minsk"},{"value":"America/Belize","name":"America/Belize"},{"value":"America/Atikokan","name":"America/Atikokan"},{"value":"America/Blanc-Sablon","name":"America/Blanc-Sablon"},{"value":"America/Cambridge_Bay","name":"America/Cambridge_Bay"},{"value":"America/Creston","name":"America/Creston"},{"value":"America/Dawson","name":"America/Dawson"},{"value":"America/Dawson_Creek","name":"America/Dawson_Creek"},{"value":"America/Edmonton","name":"America/Edmonton"},{"value":"America/Fort_Nelson","name":"America/Fort_Nelson"},{"value":"America/Glace_Bay","name":"America/Glace_Bay"},{"value":"America/Goose_Bay","name":"America/Goose_Bay"},{"value":"America/Halifax","name":"America/Halifax"},{"value":"America/Inuvik","name":"America/Inuvik"},{"value":"America/Iqaluit","name":"America/Iqaluit"},{"value":"America/Moncton","name":"America/Moncton"},{"value":"America/Nipigon","name":"America/Nipigon"},{"value":"America/Panama","name":"America/Panama"},{"value":"America/Pangnirtung","name":"America/Pangnirtung"},{"value":"America/Phoenix","name":"America/Phoenix"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"America/Rainy_River","name":"America/Rainy_River"},{"value":"America/Rankin_Inlet","name":"America/Rankin_Inlet"},{"value":"America/Regina","name":"America/Regina"},{"value":"America/Resolute","name":"America/Resolute"},{"value":"America/St_Johns","name":"America/St_Johns"},{"value":"America/Swift_Current","name":"America/Swift_Current"},{"value":"America/Thunder_Bay","name":"America/Thunder_Bay"},{"value":"America/Toronto","name":"America/Toronto"},{"value":"America/Vancouver","name":"America/Vancouver"},{"value":"America/Whitehorse","name":"America/Whitehorse"},{"value":"America/Winnipeg","name":"America/Winnipeg"},{"value":"America/Yellowknife","name":"America/Yellowknife"},{"value":"Asia/Yangon","name":"Asia/Yangon"},{"value":"Indian/Cocos","name":"Indian/Cocos"},{"value":"Africa/Kinshasa","name":"Africa/Kinshasa"},{"value":"Africa/Lagos","name":"Africa/Lagos"},{"value":"Africa/Lubumbashi","name":"Africa/Lubumbashi"},{"value":"Africa/Maputo","name":"Africa/Maputo"},{"value":"Africa/Bangui","name":"Africa/Bangui"},{"value":"Africa/Lagos","name":"Africa/Lagos"},{"value":"Africa/Brazzaville","name":"Africa/Brazzaville"},{"value":"Africa/Lagos","name":"Africa/Lagos"},{"value":"Europe/Zurich","name":"Europe/Zurich"},{"value":"Africa/Abidjan","name":"Africa/Abidjan"},{"value":"Pacific/Rarotonga","name":"Pacific/Rarotonga"},{"value":"America/Punta_Arenas","name":"America/Punta_Arenas"},{"value":"America/Santiago","name":"America/Santiago"},{"value":"Pacific/Easter","name":"Pacific/Easter"},{"value":"Africa/Douala","name":"Africa/Douala"},{"value":"Africa/Lagos","name":"Africa/Lagos"},{"value":"Asia/Shanghai","name":"Asia/Shanghai"},{"value":"Asia/Urumqi","name":"Asia/Urumqi"},{"value":"America/Bogota","name":"America/Bogota"},{"value":"America/Costa_Rica","name":"America/Costa_Rica"},{"value":"America/Havana","name":"America/Havana"},{"value":"Atlantic/Cape_Verde","name":"Atlantic/Cape_Verde"},{"value":"America/Curacao","name":"America/Curacao"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"Asia/Bangkok","name":"Asia/Bangkok"},{"value":"Indian/Christmas","name":"Indian/Christmas"},{"value":"Asia/Famagusta","name":"Asia/Famagusta"},{"value":"Asia/Nicosia","name":"Asia/Nicosia"},{"value":"Europe/Prague","name":"Europe/Prague"},{"value":"Europe/Berlin","name":"Europe/Berlin"},{"value":"Europe/Busingen","name":"Europe/Busingen"},{"value":"Europe/Zurich","name":"Europe/Zurich"},{"value":"Africa/Djibouti","name":"Africa/Djibouti"},{"value":"Africa/Nairobi","name":"Africa/Nairobi"},{"value":"Europe/Berlin","name":"Europe/Berlin"},{"value":"Europe/Copenhagen","name":"Europe/Copenhagen"},{"value":"America/Dominica","name":"America/Dominica"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"America/Santo_Domingo","name":"America/Santo_Domingo"},{"value":"Africa/Algiers","name":"Africa/Algiers"},{"value":"America/Guayaquil","name":"America/Guayaquil"},{"value":"Pacific/Galapagos","name":"Pacific/Galapagos"},{"value":"Europe/Tallinn","name":"Europe/Tallinn"},{"value":"Africa/Cairo","name":"Africa/Cairo"},{"value":"Africa/El_Aaiun","name":"Africa/El_Aaiun"},{"value":"Africa/Asmara","name":"Africa/Asmara"},{"value":"Africa/Nairobi","name":"Africa/Nairobi"},{"value":"Africa/Ceuta","name":"Africa/Ceuta"},{"value":"Atlantic/Canary","name":"Atlantic/Canary"},{"value":"Europe/Madrid","name":"Europe/Madrid"},{"value":"Africa/Addis_Ababa","name":"Africa/Addis_Ababa"},{"value":"Africa/Nairobi","name":"Africa/Nairobi"},{"value":"Europe/Helsinki","name":"Europe/Helsinki"},{"value":"Pacific/Fiji","name":"Pacific/Fiji"},{"value":"Atlantic/Stanley","name":"Atlantic/Stanley"},{"value":"Pacific/Chuuk","name":"Pacific/Chuuk"},{"value":"Pacific/Guadalcanal","name":"Pacific/Guadalcanal"},{"value":"Pacific/Kosrae","name":"Pacific/Kosrae"},{"value":"Pacific/Pohnpei","name":"Pacific/Pohnpei"},{"value":"Pacific/Port_Moresby","name":"Pacific/Port_Moresby"},{"value":"Atlantic/Faroe","name":"Atlantic/Faroe"},{"value":"Europe/Paris","name":"Europe/Paris"},{"value":"Africa/Lagos","name":"Africa/Lagos"},{"value":"Africa/Libreville","name":"Africa/Libreville"},{"value":"Europe/London","name":"Europe/London"},{"value":"America/Grenada","name":"America/Grenada"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"Asia/Tbilisi","name":"Asia/Tbilisi"},{"value":"America/Cayenne","name":"America/Cayenne"},{"value":"Europe/Guernsey","name":"Europe/Guernsey"},{"value":"Europe/London","name":"Europe/London"},{"value":"Africa/Abidjan","name":"Africa/Abidjan"},{"value":"Africa/Accra","name":"Africa/Accra"},{"value":"Europe/Gibraltar","name":"Europe/Gibraltar"},{"value":"America/Danmarkshavn","name":"America/Danmarkshavn"},{"value":"America/Nuuk","name":"America/Nuuk"},{"value":"America/Scoresbysund","name":"America/Scoresbysund"},{"value":"America/Thule","name":"America/Thule"},{"value":"Africa/Abidjan","name":"Africa/Abidjan"},{"value":"Africa/Banjul","name":"Africa/Banjul"},{"value":"Africa/Abidjan","name":"Africa/Abidjan"},{"value":"Africa/Conakry","name":"Africa/Conakry"},{"value":"America/Guadeloupe","name":"America/Guadeloupe"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"Africa/Lagos","name":"Africa/Lagos"},{"value":"Africa/Malabo","name":"Africa/Malabo"},{"value":"Europe/Athens","name":"Europe/Athens"},{"value":"Atlantic/South_Georgia","name":"Atlantic/South_Georgia"},{"value":"America/Guatemala","name":"America/Guatemala"},{"value":"Pacific/Guam","name":"Pacific/Guam"},{"value":"Africa/Bissau","name":"Africa/Bissau"},{"value":"America/Guyana","name":"America/Guyana"},{"value":"Asia/Hong_Kong","name":"Asia/Hong_Kong"},{"value":"America/Tegucigalpa","name":"America/Tegucigalpa"},{"value":"Europe/Belgrade","name":"Europe/Belgrade"},{"value":"Europe/Zagreb","name":"Europe/Zagreb"},{"value":"America/Port-au-Prince","name":"America/Port-au-Prince"},{"value":"Europe/Budapest","name":"Europe/Budapest"},{"value":"Asia/Jakarta","name":"Asia/Jakarta"},{"value":"Asia/Jayapura","name":"Asia/Jayapura"},{"value":"Asia/Makassar","name":"Asia/Makassar"},{"value":"Asia/Pontianak","name":"Asia/Pontianak"},{"value":"Europe/Dublin","name":"Europe/Dublin"},{"value":"Asia/Jerusalem","name":"Asia/Jerusalem"},{"value":"Europe/Isle_of_Man","name":"Europe/Isle_of_Man"},{"value":"Europe/London","name":"Europe/London"},{"value":"Asia/Kolkata","name":"Asia/Kolkata"},{"value":"Indian/Chagos","name":"Indian/Chagos"},{"value":"Asia/Baghdad","name":"Asia/Baghdad"},{"value":"Asia/Tehran","name":"Asia/Tehran"},{"value":"Africa/Abidjan","name":"Africa/Abidjan"},{"value":"Atlantic/Reykjavik","name":"Atlantic/Reykjavik"},{"value":"Europe/Rome","name":"Europe/Rome"},{"value":"Europe/Jersey","name":"Europe/Jersey"},{"value":"Europe/London","name":"Europe/London"},{"value":"America/Jamaica","name":"America/Jamaica"},{"value":"Asia/Amman","name":"Asia/Amman"},{"value":"Asia/Tokyo","name":"Asia/Tokyo"},{"value":"Africa/Nairobi","name":"Africa/Nairobi"},{"value":"Asia/Bishkek","name":"Asia/Bishkek"},{"value":"Asia/Bangkok","name":"Asia/Bangkok"},{"value":"Asia/Phnom_Penh","name":"Asia/Phnom_Penh"},{"value":"Pacific/Kanton","name":"Pacific/Kanton"},{"value":"Pacific/Kiritimati","name":"Pacific/Kiritimati"},{"value":"Pacific/Tarawa","name":"Pacific/Tarawa"},{"value":"Africa/Nairobi","name":"Africa/Nairobi"},{"value":"Indian/Comoro","name":"Indian/Comoro"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"America/St_Kitts","name":"America/St_Kitts"},{"value":"Asia/Pyongyang","name":"Asia/Pyongyang"},{"value":"Asia/Seoul","name":"Asia/Seoul"},{"value":"Asia/Kuwait","name":"Asia/Kuwait"},{"value":"Asia/Riyadh","name":"Asia/Riyadh"},{"value":"America/Cayman","name":"America/Cayman"},{"value":"America/Panama","name":"America/Panama"},{"value":"Asia/Almaty","name":"Asia/Almaty"},{"value":"Asia/Aqtau","name":"Asia/Aqtau"},{"value":"Asia/Aqtobe","name":"Asia/Aqtobe"},{"value":"Asia/Atyrau","name":"Asia/Atyrau"},{"value":"Asia/Oral","name":"Asia/Oral"},{"value":"Asia/Qostanay","name":"Asia/Qostanay"},{"value":"Asia/Qyzylorda","name":"Asia/Qyzylorda"},{"value":"Asia/Bangkok","name":"Asia/Bangkok"},{"value":"Asia/Vientiane","name":"Asia/Vientiane"},{"value":"Asia/Beirut","name":"Asia/Beirut"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"America/St_Lucia","name":"America/St_Lucia"},{"value":"Europe/Vaduz","name":"Europe/Vaduz"},{"value":"Europe/Zurich","name":"Europe/Zurich"},{"value":"Asia/Colombo","name":"Asia/Colombo"},{"value":"Africa/Monrovia","name":"Africa/Monrovia"},{"value":"Africa/Johannesburg","name":"Africa/Johannesburg"},{"value":"Africa/Maseru","name":"Africa/Maseru"},{"value":"Europe/Vilnius","name":"Europe/Vilnius"},{"value":"Europe/Brussels","name":"Europe/Brussels"},{"value":"Europe/Luxembourg","name":"Europe/Luxembourg"},{"value":"Europe/Riga","name":"Europe/Riga"},{"value":"Africa/Tripoli","name":"Africa/Tripoli"},{"value":"Africa/Casablanca","name":"Africa/Casablanca"},{"value":"Europe/Monaco","name":"Europe/Monaco"},{"value":"Europe/Paris","name":"Europe/Paris"},{"value":"Europe/Chisinau","name":"Europe/Chisinau"},{"value":"Europe/Belgrade","name":"Europe/Belgrade"},{"value":"Europe/Podgorica","name":"Europe/Podgorica"},{"value":"America/Marigot","name":"America/Marigot"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"Africa/Nairobi","name":"Africa/Nairobi"},{"value":"Indian/Antananarivo","name":"Indian/Antananarivo"},{"value":"Pacific/Kwajalein","name":"Pacific/Kwajalein"},{"value":"Pacific/Majuro","name":"Pacific/Majuro"},{"value":"Pacific/Tarawa","name":"Pacific/Tarawa"},{"value":"Europe/Belgrade","name":"Europe/Belgrade"},{"value":"Europe/Skopje","name":"Europe/Skopje"},{"value":"Africa/Abidjan","name":"Africa/Abidjan"},{"value":"Africa/Bamako","name":"Africa/Bamako"},{"value":"Asia/Yangon","name":"Asia/Yangon"},{"value":"Asia/Choibalsan","name":"Asia/Choibalsan"},{"value":"Asia/Hovd","name":"Asia/Hovd"},{"value":"Asia/Ulaanbaatar","name":"Asia/Ulaanbaatar"},{"value":"Asia/Macau","name":"Asia/Macau"},{"value":"Pacific/Guam","name":"Pacific/Guam"},{"value":"Pacific/Saipan","name":"Pacific/Saipan"},{"value":"America/Martinique","name":"America/Martinique"},{"value":"Africa/Abidjan","name":"Africa/Abidjan"},{"value":"Africa/Nouakchott","name":"Africa/Nouakchott"},{"value":"America/Montserrat","name":"America/Montserrat"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"Europe/Malta","name":"Europe/Malta"},{"value":"Indian/Mauritius","name":"Indian/Mauritius"},{"value":"Indian/Maldives","name":"Indian/Maldives"},{"value":"Africa/Blantyre","name":"Africa/Blantyre"},{"value":"Africa/Maputo","name":"Africa/Maputo"},{"value":"America/Bahia_Banderas","name":"America/Bahia_Banderas"},{"value":"America/Cancun","name":"America/Cancun"},{"value":"America/Chihuahua","name":"America/Chihuahua"},{"value":"America/Hermosillo","name":"America/Hermosillo"},{"value":"America/Matamoros","name":"America/Matamoros"},{"value":"America/Mazatlan","name":"America/Mazatlan"},{"value":"America/Merida","name":"America/Merida"},{"value":"America/Mexico_City","name":"America/Mexico_City"},{"value":"America/Monterrey","name":"America/Monterrey"},{"value":"America/Ojinaga","name":"America/Ojinaga"},{"value":"America/Tijuana","name":"America/Tijuana"},{"value":"Asia/Kuala_Lumpur","name":"Asia/Kuala_Lumpur"},{"value":"Asia/Kuching","name":"Asia/Kuching"},{"value":"Asia/Singapore","name":"Asia/Singapore"},{"value":"Africa/Maputo","name":"Africa/Maputo"},{"value":"Africa/Windhoek","name":"Africa/Windhoek"},{"value":"Pacific/Noumea","name":"Pacific/Noumea"},{"value":"Africa/Lagos","name":"Africa/Lagos"},{"value":"Africa/Niamey","name":"Africa/Niamey"},{"value":"Pacific/Norfolk","name":"Pacific/Norfolk"},{"value":"Africa/Lagos","name":"Africa/Lagos"},{"value":"America/Managua","name":"America/Managua"},{"value":"Europe/Amsterdam","name":"Europe/Amsterdam"},{"value":"Europe/Brussels","name":"Europe/Brussels"},{"value":"Europe/Berlin","name":"Europe/Berlin"},{"value":"Europe/Oslo","name":"Europe/Oslo"},{"value":"Asia/Kathmandu","name":"Asia/Kathmandu"},{"value":"Pacific/Nauru","name":"Pacific/Nauru"},{"value":"Pacific/Niue","name":"Pacific/Niue"},{"value":"Pacific/Auckland","name":"Pacific/Auckland"},{"value":"Pacific/Chatham","name":"Pacific/Chatham"},{"value":"Asia/Dubai","name":"Asia/Dubai"},{"value":"Asia/Muscat","name":"Asia/Muscat"},{"value":"America/Panama","name":"America/Panama"},{"value":"America/Lima","name":"America/Lima"},{"value":"Pacific/Gambier","name":"Pacific/Gambier"},{"value":"Pacific/Marquesas","name":"Pacific/Marquesas"},{"value":"Pacific/Tahiti","name":"Pacific/Tahiti"},{"value":"Pacific/Bougainville","name":"Pacific/Bougainville"},{"value":"Pacific/Port_Moresby","name":"Pacific/Port_Moresby"},{"value":"Asia/Manila","name":"Asia/Manila"},{"value":"Asia/Karachi","name":"Asia/Karachi"},{"value":"Europe/Warsaw","name":"Europe/Warsaw"},{"value":"America/Miquelon","name":"America/Miquelon"},{"value":"Pacific/Pitcairn","name":"Pacific/Pitcairn"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"Asia/Gaza","name":"Asia/Gaza"},{"value":"Asia/Hebron","name":"Asia/Hebron"},{"value":"Atlantic/Azores","name":"Atlantic/Azores"},{"value":"Atlantic/Madeira","name":"Atlantic/Madeira"},{"value":"Europe/Lisbon","name":"Europe/Lisbon"},{"value":"Pacific/Palau","name":"Pacific/Palau"},{"value":"America/Asuncion","name":"America/Asuncion"},{"value":"Asia/Qatar","name":"Asia/Qatar"},{"value":"Asia/Dubai","name":"Asia/Dubai"},{"value":"Indian/Reunion","name":"Indian/Reunion"},{"value":"Europe/Bucharest","name":"Europe/Bucharest"},{"value":"Europe/Belgrade","name":"Europe/Belgrade"},{"value":"Asia/Anadyr","name":"Asia/Anadyr"},{"value":"Asia/Barnaul","name":"Asia/Barnaul"},{"value":"Asia/Chita","name":"Asia/Chita"},{"value":"Asia/Irkutsk","name":"Asia/Irkutsk"},{"value":"Asia/Kamchatka","name":"Asia/Kamchatka"},{"value":"Asia/Khandyga","name":"Asia/Khandyga"},{"value":"Asia/Krasnoyarsk","name":"Asia/Krasnoyarsk"},{"value":"Asia/Magadan","name":"Asia/Magadan"},{"value":"Asia/Novokuznetsk","name":"Asia/Novokuznetsk"},{"value":"Asia/Novosibirsk","name":"Asia/Novosibirsk"},{"value":"Asia/Omsk","name":"Asia/Omsk"},{"value":"Asia/Sakhalin","name":"Asia/Sakhalin"},{"value":"Asia/Srednekolymsk","name":"Asia/Srednekolymsk"},{"value":"Asia/Tomsk","name":"Asia/Tomsk"},{"value":"Asia/Ust-Nera","name":"Asia/Ust-Nera"},{"value":"Asia/Vladivostok","name":"Asia/Vladivostok"},{"value":"Asia/Yakutsk","name":"Asia/Yakutsk"},{"value":"Asia/Yekaterinburg","name":"Asia/Yekaterinburg"},{"value":"Europe/Astrakhan","name":"Europe/Astrakhan"},{"value":"Europe/Kaliningrad","name":"Europe/Kaliningrad"},{"value":"Europe/Kirov","name":"Europe/Kirov"},{"value":"Europe/Moscow","name":"Europe/Moscow"},{"value":"Europe/Samara","name":"Europe/Samara"},{"value":"Europe/Saratov","name":"Europe/Saratov"},{"value":"Europe/Simferopol","name":"Europe/Simferopol"},{"value":"Europe/Ulyanovsk","name":"Europe/Ulyanovsk"},{"value":"Europe/Volgograd","name":"Europe/Volgograd"},{"value":"Africa/Kigali","name":"Africa/Kigali"},{"value":"Africa/Maputo","name":"Africa/Maputo"},{"value":"Asia/Riyadh","name":"Asia/Riyadh"},{"value":"Pacific/Guadalcanal","name":"Pacific/Guadalcanal"},{"value":"Asia/Dubai","name":"Asia/Dubai"},{"value":"Indian/Mahe","name":"Indian/Mahe"},{"value":"Africa/Khartoum","name":"Africa/Khartoum"},{"value":"Europe/Berlin","name":"Europe/Berlin"},{"value":"Europe/Stockholm","name":"Europe/Stockholm"},{"value":"Asia/Singapore","name":"Asia/Singapore"},{"value":"Africa/Abidjan","name":"Africa/Abidjan"},{"value":"Atlantic/St_Helena","name":"Atlantic/St_Helena"},{"value":"Europe/Belgrade","name":"Europe/Belgrade"},{"value":"Europe/Ljubljana","name":"Europe/Ljubljana"},{"value":"Arctic/Longyearbyen","name":"Arctic/Longyearbyen"},{"value":"Europe/Berlin","name":"Europe/Berlin"},{"value":"Europe/Bratislava","name":"Europe/Bratislava"},{"value":"Europe/Prague","name":"Europe/Prague"},{"value":"Africa/Abidjan","name":"Africa/Abidjan"},{"value":"Africa/Freetown","name":"Africa/Freetown"},{"value":"Europe/Rome","name":"Europe/Rome"},{"value":"Europe/San_Marino","name":"Europe/San_Marino"},{"value":"Africa/Abidjan","name":"Africa/Abidjan"},{"value":"Africa/Dakar","name":"Africa/Dakar"},{"value":"Africa/Mogadishu","name":"Africa/Mogadishu"},{"value":"Africa/Nairobi","name":"Africa/Nairobi"},{"value":"America/Paramaribo","name":"America/Paramaribo"},{"value":"Africa/Juba","name":"Africa/Juba"},{"value":"Africa/Sao_Tome","name":"Africa/Sao_Tome"},{"value":"America/El_Salvador","name":"America/El_Salvador"},{"value":"America/Lower_Princes","name":"America/Lower_Princes"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"Asia/Damascus","name":"Asia/Damascus"},{"value":"Africa/Johannesburg","name":"Africa/Johannesburg"},{"value":"Africa/Mbabane","name":"Africa/Mbabane"},{"value":"America/Grand_Turk","name":"America/Grand_Turk"},{"value":"Africa/Ndjamena","name":"Africa/Ndjamena"},{"value":"Asia/Dubai","name":"Asia/Dubai"},{"value":"Indian/Kerguelen","name":"Indian/Kerguelen"},{"value":"Indian/Maldives","name":"Indian/Maldives"},{"value":"Africa/Abidjan","name":"Africa/Abidjan"},{"value":"Africa/Lome","name":"Africa/Lome"},{"value":"Asia/Bangkok","name":"Asia/Bangkok"},{"value":"Asia/Dushanbe","name":"Asia/Dushanbe"},{"value":"Pacific/Fakaofo","name":"Pacific/Fakaofo"},{"value":"Asia/Dili","name":"Asia/Dili"},{"value":"Asia/Ashgabat","name":"Asia/Ashgabat"},{"value":"Africa/Tunis","name":"Africa/Tunis"},{"value":"Pacific/Tongatapu","name":"Pacific/Tongatapu"},{"value":"Europe/Istanbul","name":"Europe/Istanbul"},{"value":"America/Port_of_Spain","name":"America/Port_of_Spain"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"Pacific/Funafuti","name":"Pacific/Funafuti"},{"value":"Pacific/Tarawa","name":"Pacific/Tarawa"},{"value":"Asia/Taipei","name":"Asia/Taipei"},{"value":"Africa/Dar_es_Salaam","name":"Africa/Dar_es_Salaam"},{"value":"Africa/Nairobi","name":"Africa/Nairobi"},{"value":"Europe/Kyiv","name":"Europe/Kyiv"},{"value":"Europe/Simferopol","name":"Europe/Simferopol"},{"value":"Europe/Uzhgorod","name":"Europe/Uzhgorod"},{"value":"Europe/Zaporozhye","name":"Europe/Zaporozhye"},{"value":"Africa/Kampala","name":"Africa/Kampala"},{"value":"Africa/Nairobi","name":"Africa/Nairobi"},{"value":"Pacific/Honolulu","name":"Pacific/Honolulu"},{"value":"Pacific/Midway","name":"Pacific/Midway"},{"value":"Pacific/Pago_Pago","name":"Pacific/Pago_Pago"},{"value":"Pacific/Tarawa","name":"Pacific/Tarawa"},{"value":"Pacific/Wake","name":"Pacific/Wake"},{"value":"America/Adak","name":"America/Adak"},{"value":"America/Anchorage","name":"America/Anchorage"},{"value":"America/Boise","name":"America/Boise"},{"value":"America/Chicago","name":"America/Chicago"},{"value":"America/Denver","name":"America/Denver"},{"value":"America/Detroit","name":"America/Detroit"},{"value":"America/Indiana/Indianapolis","name":"America/Indiana/Indianapolis"},{"value":"America/Indiana/Knox","name":"America/Indiana/Knox"},{"value":"America/Indiana/Marengo","name":"America/Indiana/Marengo"},{"value":"America/Indiana/Petersburg","name":"America/Indiana/Petersburg"},{"value":"America/Indiana/Tell_City","name":"America/Indiana/Tell_City"},{"value":"America/Indiana/Vevay","name":"America/Indiana/Vevay"},{"value":"America/Indiana/Vincennes","name":"America/Indiana/Vincennes"},{"value":"America/Indiana/Winamac","name":"America/Indiana/Winamac"},{"value":"America/Juneau","name":"America/Juneau"},{"value":"America/Kentucky/Louisville","name":"America/Kentucky/Louisville"},{"value":"America/Kentucky/Monticello","name":"America/Kentucky/Monticello"},{"value":"America/Los_Angeles","name":"America/Los_Angeles"},{"value":"America/Menominee","name":"America/Menominee"},{"value":"America/Metlakatla","name":"America/Metlakatla"},{"value":"America/New_York","name":"America/New_York"},{"value":"America/Nome","name":"America/Nome"},{"value":"America/North_Dakota/Beulah","name":"America/North_Dakota/Beulah"},{"value":"America/North_Dakota/Center","name":"America/North_Dakota/Center"},{"value":"America/North_Dakota/New_Salem","name":"America/North_Dakota/New_Salem"},{"value":"America/Phoenix","name":"America/Phoenix"},{"value":"America/Sitka","name":"America/Sitka"},{"value":"America/Yakutat","name":"America/Yakutat"},{"value":"Pacific/Honolulu","name":"Pacific/Honolulu"},{"value":"America/Montevideo","name":"America/Montevideo"},{"value":"Asia/Samarkand","name":"Asia/Samarkand"},{"value":"Asia/Tashkent","name":"Asia/Tashkent"},{"value":"Europe/Rome","name":"Europe/Rome"},{"value":"Europe/Vatican","name":"Europe/Vatican"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"America/St_Vincent","name":"America/St_Vincent"},{"value":"America/Caracas","name":"America/Caracas"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"America/Tortola","name":"America/Tortola"},{"value":"America/Puerto_Rico","name":"America/Puerto_Rico"},{"value":"America/St_Thomas","name":"America/St_Thomas"},{"value":"Asia/Bangkok","name":"Asia/Bangkok"},{"value":"Asia/Ho_Chi_Minh","name":"Asia/Ho_Chi_Minh"},{"value":"Pacific/Efate","name":"Pacific/Efate"},{"value":"Pacific/Tarawa","name":"Pacific/Tarawa"},{"value":"Pacific/Wallis","name":"Pacific/Wallis"},{"value":"Pacific/Apia","name":"Pacific/Apia"},{"value":"Asia/Aden","name":"Asia/Aden"},{"value":"Asia/Riyadh","name":"Asia/Riyadh"},{"value":"Africa/Nairobi","name":"Africa/Nairobi"},{"value":"Indian/Mayotte","name":"Indian/Mayotte"},{"value":"Africa/Johannesburg","name":"Africa/Johannesburg"},{"value":"Africa/Lusaka","name":"Africa/Lusaka"},{"value":"Africa/Maputo","name":"Africa/Maputo"},{"value":"Africa/Harare","name":"Africa/Harare"},{"value":"Africa/Maputo","name":"Africa/Maputo"}]}],"test":{"request":{"baseURL":"={{$credentials?.domain || \"https://cloud.seatable.io\" }}","url":"/api/v2.1/dtable/app-access-token/","headers":{"Authorization":"={{\"Token \" + $credentials.token}}"}}},"supportedNodes":["seaTable","seaTableTrigger"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/SeaTable/seaTable.svg"},
|