diff --git a/packages/cli/src/credentials/oauth2Credential.api.ts b/packages/cli/src/credentials/oauth2Credential.api.ts index 4614a435c2..5c04dfd541 100644 --- a/packages/cli/src/credentials/oauth2Credential.api.ts +++ b/packages/cli/src/credentials/oauth2Credential.api.ts @@ -16,7 +16,6 @@ import { IDataObject, } from 'n8n-workflow'; import { resolve as pathResolve } from 'path'; -import querystring from 'querystring'; import { Db, ICredentialsDb, ResponseHelper } from '..'; import { RESPONSE_ERROR_MESSAGES } from '../constants'; @@ -141,11 +140,14 @@ oauth2CredentialController.get( // if scope uses comma, change it as the library always return then with spaces if ((get(oauthCredentials, 'scope') as string).includes(',')) { - const data = querystring.parse(returnUri.split('?')[1]); - data.scope = get(oauthCredentials, 'scope') as string; - returnUri = `${get(oauthCredentials, 'authUrl', '') as string}?${querystring.stringify( - data, - )}`; + // const data = new URLSearchParams(returnUri.split('?')[1]); + // data.set('scope', get(oauthCredentials, 'scope') as string); + // returnUri = `${get(oauthCredentials, 'authUrl', '') as string}?${data.toString()}`; + + const data = returnUri.split('?')[1]; + const scope = get(oauthCredentials, 'scope') as string; + const percentEncoded = [data, `scope=${encodeURIComponent(scope)}`].join('&'); + returnUri = `${get(oauthCredentials, 'authUrl', '') as string}?${percentEncoded}`; } if (authQueryParameters) { diff --git a/packages/nodes-base/nodes/Jira/JiraTrigger.node.ts b/packages/nodes-base/nodes/Jira/JiraTrigger.node.ts index e517bf58c0..bbc4772bc9 100644 --- a/packages/nodes-base/nodes/Jira/JiraTrigger.node.ts +++ b/packages/nodes-base/nodes/Jira/JiraTrigger.node.ts @@ -11,8 +11,6 @@ import { import { allEvents, eventExists, getId, jiraSoftwareCloudApiRequest } from './GenericFunctions'; -import * as queryString from 'querystring'; - export class JiraTrigger implements INodeType { description: INodeTypeDescription = { displayName: 'Jira Trigger', @@ -450,7 +448,8 @@ export class JiraTrigger implements INodeType { } if (Object.keys(parameters).length) { - body.url = `${body.url}?${queryString.unescape(queryString.stringify(parameters))}`; + const params = new URLSearchParams(parameters).toString(); + body.url = `${body.url}?${decodeURIComponent(params)}`; } const responseData = await jiraSoftwareCloudApiRequest.call(this, endpoint, 'POST', body); diff --git a/packages/nodes-base/nodes/TravisCi/GenericFunctions.ts b/packages/nodes-base/nodes/TravisCi/GenericFunctions.ts index eef2d2c019..ae41695097 100644 --- a/packages/nodes-base/nodes/TravisCi/GenericFunctions.ts +++ b/packages/nodes-base/nodes/TravisCi/GenericFunctions.ts @@ -11,8 +11,6 @@ import { IDataObject, NodeApiError, NodeOperationError } from 'n8n-workflow'; import { get } from 'lodash'; -import querystring from 'querystring'; - export async function travisciApiRequest( this: IHookFunctions | IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, method: string, @@ -71,7 +69,8 @@ export async function travisciApiRequestAllItems( responseData = await travisciApiRequest.call(this, method, resource, body, query); const path = get(responseData, '@pagination.next.@href'); if (path !== undefined) { - query = querystring.parse(path); + const parsedPath = new URLSearchParams(path); + query = Object.fromEntries(parsedPath); } returnData.push.apply(returnData, responseData[propertyName]); } while (responseData['@pagination']['is_last'] !== true);