From e2e695205a3634b2f8e9a6306d66cce732171e9b Mon Sep 17 00:00:00 2001 From: Bryan Frimin Date: Tue, 3 Feb 2026 07:56:46 +0100 Subject: [PATCH] Fix n8n use legacy API Signed-off-by: Bryan Frimin --- .../n8n-node/nodes/Probo/GenericFunctions.ts | 70 +++++++++++++++++-- .../actions/organization/getAll.operation.ts | 41 +++++++---- 2 files changed, 92 insertions(+), 19 deletions(-) diff --git a/packages/n8n-node/nodes/Probo/GenericFunctions.ts b/packages/n8n-node/nodes/Probo/GenericFunctions.ts index f114b5b3d..511fd25c6 100644 --- a/packages/n8n-node/nodes/Probo/GenericFunctions.ts +++ b/packages/n8n-node/nodes/Probo/GenericFunctions.ts @@ -7,9 +7,16 @@ import type { } from 'n8n-workflow'; import { NodeApiError } from 'n8n-workflow'; -export async function proboApiRequest( +type ApiRequestFn = ( this: IExecuteFunctions | IHookFunctions, query: string, + variables?: IDataObject, +) => Promise; + +async function proboGraphqlRequest( + this: IExecuteFunctions | IHookFunctions, + apiPath: string, + query: string, variables: IDataObject = {}, ): Promise { const credentials = await this.getCredentials('proboApi'); @@ -21,7 +28,7 @@ export async function proboApiRequest( const options: IHttpRequestOptions = { method: 'POST', baseURL: `${credentials.server}`, - url: '/api/console/v1/graphql', + url: apiPath, headers: { Authorization: `Bearer ${credentials.apiKey}`, 'Content-Type': 'application/json', @@ -52,8 +59,25 @@ export async function proboApiRequest( } } -export async function proboApiRequestAllItems( +export async function proboApiRequest( + this: IExecuteFunctions | IHookFunctions, + query: string, + variables: IDataObject = {}, +): Promise { + return proboGraphqlRequest.call(this, '/api/console/v1/graphql', query, variables); +} + +export async function proboConnectApiRequest( + this: IExecuteFunctions | IHookFunctions, + query: string, + variables: IDataObject = {}, +): Promise { + return proboGraphqlRequest.call(this, '/api/connect/v1/graphql', query, variables); +} + +async function proboGraphqlRequestAllItems( this: IExecuteFunctions, + requestFn: ApiRequestFn, query: string, variables: IDataObject, getConnection: (response: IDataObject) => IDataObject | undefined, @@ -80,7 +104,7 @@ export async function proboApiRequestAllItems( requestVariables.after = cursor; } - const responseData = await proboApiRequest.call(this, query, requestVariables); + const responseData = await requestFn.call(this, query, requestVariables); const connection = getConnection(responseData); if (connection?.edges) { @@ -103,3 +127,41 @@ export async function proboApiRequestAllItems( return items; } + +export async function proboApiRequestAllItems( + this: IExecuteFunctions, + query: string, + variables: IDataObject, + getConnection: (response: IDataObject) => IDataObject | undefined, + returnAll: boolean = true, + limit: number = 0, +): Promise { + return proboGraphqlRequestAllItems.call( + this, + proboApiRequest, + query, + variables, + getConnection, + returnAll, + limit, + ); +} + +export async function proboConnectApiRequestAllItems( + this: IExecuteFunctions, + query: string, + variables: IDataObject, + getConnection: (response: IDataObject) => IDataObject | undefined, + returnAll: boolean = true, + limit: number = 0, +): Promise { + return proboGraphqlRequestAllItems.call( + this, + proboConnectApiRequest, + query, + variables, + getConnection, + returnAll, + limit, + ); +} diff --git a/packages/n8n-node/nodes/Probo/actions/organization/getAll.operation.ts b/packages/n8n-node/nodes/Probo/actions/organization/getAll.operation.ts index b4247f89c..732180c23 100644 --- a/packages/n8n-node/nodes/Probo/actions/organization/getAll.operation.ts +++ b/packages/n8n-node/nodes/Probo/actions/organization/getAll.operation.ts @@ -1,5 +1,5 @@ import type { INodeProperties, IExecuteFunctions, INodeExecutionData, IDataObject } from 'n8n-workflow'; -import { proboApiRequestAllItems } from '../../GenericFunctions'; +import { proboConnectApiRequestAllItems } from '../../GenericFunctions'; export const description: INodeProperties[] = [ { @@ -44,19 +44,21 @@ export async function execute( const query = ` query GetOrganizations($first: Int, $after: CursorKey) { viewer { - organizations(first: $first, after: $after) { + memberships(first: $first, after: $after) { edges { node { - id - name - description - websiteUrl - email - headquarterAddress - logoUrl - horizontalLogoUrl - createdAt - updatedAt + organization { + id + name + description + websiteUrl + email + headquarterAddress + logoUrl + horizontalLogoUrl + createdAt + updatedAt + } } } pageInfo { @@ -68,19 +70,28 @@ export async function execute( } `; - const organizations = await proboApiRequestAllItems.call( + const memberships = await proboConnectApiRequestAllItems.call( this, query, {}, - (response) => { + (response: IDataObject) => { const data = response?.data as IDataObject | undefined; const viewer = data?.viewer as IDataObject | undefined; - return viewer?.organizations as IDataObject | undefined; + return viewer?.memberships as IDataObject | undefined; }, returnAll, limit, ); + const organizationMap = new Map(); + for (const membership of memberships) { + const org = membership.organization as IDataObject | undefined; + if (org && org.id) { + organizationMap.set(org.id as string, org); + } + } + const organizations = Array.from(organizationMap.values()); + return { json: { organizations }, pairedItem: { item: itemIndex },