From b115a5f7d794d2ac4371f709c9d5903720a5cbc2 Mon Sep 17 00:00:00 2001 From: Amadeo Pellicce Date: Wed, 6 Nov 2024 13:15:27 -0800 Subject: [PATCH 1/5] WIP --- .../components/ConnectionPortal.tsx | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/engine-frontend/components/ConnectionPortal.tsx b/packages/engine-frontend/components/ConnectionPortal.tsx index ae388fbc..65fec75d 100644 --- a/packages/engine-frontend/components/ConnectionPortal.tsx +++ b/packages/engine-frontend/components/ConnectionPortal.tsx @@ -79,6 +79,30 @@ export function ConnectionPortal({className}: ConnectionPortalProps) { category.connectorConfigs.includes(c.connectorConfig), ), })) + + // TODO: add list interations filtering and + // show integrations instead of connectors in children + + // const listIntegrationsRes = _trpcReact.listConfiguredIntegrations.useQuery({ + // connector_config_ids: connectorConfigs.map((ccfg) => ccfg.id), + // search_text: searchText, + // }) + // const ints = listIntegrationsRes.data?.items + // .map((int) => ({ + // ...int, + // ccfg: connectorConfigs.find( + // (ccfg) => ccfg.id === int.connector_config_id, + // )!, + // })) + // .filter((int) => { + // if (int.connector_name === 'google') { + // // these are nested integrations within a connector i.e. int_google_gmail + // // so we only want to show those enabled in the integrations list of the connector config + // return int.ccfg.integrations.some((i) => int.id.includes(i)) + // } + // return true + // }) + const connectionCount = connections.length const tabConfig = [ From 4946cf8ef2e81f234ea2a25cebf04341877ec63f Mon Sep 17 00:00:00 2001 From: Amadeo Pellicce Date: Wed, 6 Nov 2024 16:14:22 -0800 Subject: [PATCH 2/5] filtering integrations server side --- connectors/connector-google/server.ts | 65 ++++++++++--------- .../engine-backend/router/connectorRouter.ts | 8 ++- .../components/ConnectionPortal.tsx | 2 + .../components/IntegrationSearch.tsx | 27 ++++---- 4 files changed, 55 insertions(+), 47 deletions(-) diff --git a/connectors/connector-google/server.ts b/connectors/connector-google/server.ts index 439de510..c44e7d0a 100644 --- a/connectors/connector-google/server.ts +++ b/connectors/connector-google/server.ts @@ -72,37 +72,44 @@ export const googleServer = { } return {} }, - // eslint-disable-next-line @typescript-eslint/require-await - async listIntegrations() { + // @ts-expect-error + async listIntegrations(params: { + ccfg: {integrations: Record} + }) { + console.debug('Google listIntegrations', params) + const integrationsToFilter = params?.ccfg?.integrations ?? {} + + const integrations = [ + { + id: 'drive', + name: 'Google Drive', + // TODO: Differ oauth scope use in Connect based on which integration + raw_data: {} as any, + verticals: ['file-storage'], + updated_at: new Date().toISOString(), + logo_url: '/_assets/logo-google-drive.svg', + }, + { + id: 'gmail', + name: 'Gmail', + raw_data: {} as any, + verticals: ['email'], + updated_at: new Date().toISOString(), + logo_url: '/_assets/logo-google-gmail.svg', + }, + { + id: 'calendar', + name: 'Google Calendar', + raw_data: {} as any, + verticals: ['calendar'], + updated_at: new Date().toISOString(), + logo_url: '/_assets/logo-google-calendar.svg', + }, + ].filter((int) => integrationsToFilter[int.id]?.enabled === true) + return { has_next_page: false, - items: [ - { - id: 'drive', - name: 'Google Drive', - // TODO: Differ oauth scope use in Connect based on which integration - raw_data: {} as any, - verticals: ['file-storage'], - updated_at: new Date().toISOString(), - logo_url: '/_assets/logo-google-drive.svg', - }, - { - id: 'gmail', - name: 'Gmail', - raw_data: {} as any, - verticals: ['email'], - updated_at: new Date().toISOString(), - logo_url: '/_assets/logo-google-gmail.svg', - }, - { - id: 'calendar', - name: 'Google Calendar', - raw_data: {} as any, - verticals: ['calendar'], - updated_at: new Date().toISOString(), - logo_url: '/_assets/logo-google-calendar.svg', - }, - ], + items: integrations, next_cursor: null, } }, diff --git a/packages/engine-backend/router/connectorRouter.ts b/packages/engine-backend/router/connectorRouter.ts index 8d1a8ed2..71530293 100644 --- a/packages/engine-backend/router/connectorRouter.ts +++ b/packages/engine-backend/router/connectorRouter.ts @@ -1,5 +1,5 @@ import {zodToOas31Schema} from '@opensdks/util-zod' -import {extractId, metaForConnector, zId, zVerticalKey} from '@openint/cdk' +import {extractId, Id, metaForConnector, zId, zVerticalKey} from '@openint/cdk' import type {RouterMeta} from '@openint/trpc' import {getProtectedContext, TRPCError} from '@openint/trpc' import {R, z} from '@openint/util' @@ -130,6 +130,7 @@ const _connectorRouter = trpc.router({ zPaginationParams.extend({ name: z.string(), search_text: z.string().nullish(), + ccfg: z.object({}).passthrough().optional(), }), ) // TODO: Add deterministic type for the output here @@ -138,7 +139,7 @@ const _connectorRouter = trpc.router({ items: z.array(zIntegration), }), ) - .query(({ctx, input: {name, ...params}}) => { + .query(async ({ctx, input: {name, ccfg, ...params}}) => { const connector = ctx.connectorMap[name] if (!connector) { throw new TRPCError({ @@ -147,7 +148,7 @@ const _connectorRouter = trpc.router({ }) } if (connector.listIntegrations) { - return connector.listIntegrations(params).then((res) => ({ + return connector.listIntegrations({ccfg, ...params}).then((res) => ({ ...res, items: res.items.map((item) => ({ ...item, @@ -215,6 +216,7 @@ export const connectorRouter = trpc.mergeRouters( .listConnectorIntegrations({ name: extractId(ccfg.id)[1], search_text: input.search_text, + ccfg, }) .then((res) => ({ ...res, diff --git a/packages/engine-frontend/components/ConnectionPortal.tsx b/packages/engine-frontend/components/ConnectionPortal.tsx index d1e1d537..e0b26c18 100644 --- a/packages/engine-frontend/components/ConnectionPortal.tsx +++ b/packages/engine-frontend/components/ConnectionPortal.tsx @@ -83,6 +83,8 @@ export function ConnectionPortal({className}: ConnectionPortalProps) { // TODO: add list interations filtering and // show integrations instead of connectors in children + // https://openintdev.slack.com/archives/C060G4MDZ0Q/p1730843474762009?thread_ts=1730841954.696109&cid=C060G4MDZ0Q + // const listIntegrationsRes = _trpcReact.listConfiguredIntegrations.useQuery({ // connector_config_ids: connectorConfigs.map((ccfg) => ccfg.id), // search_text: searchText, diff --git a/packages/engine-frontend/components/IntegrationSearch.tsx b/packages/engine-frontend/components/IntegrationSearch.tsx index 640ef83f..b9abc209 100644 --- a/packages/engine-frontend/components/IntegrationSearch.tsx +++ b/packages/engine-frontend/components/IntegrationSearch.tsx @@ -34,21 +34,18 @@ export function IntegrationSearch({ connector_config_ids: connectorConfigs.map((ccfg) => ccfg.id), search_text: searchText, }) - const ints = listIntegrationsRes.data?.items - .map((int) => ({ - ...int, - ccfg: connectorConfigs.find( - (ccfg) => ccfg.id === int.connector_config_id, - )!, - })) - .filter((int) => { - if (int.connector_name === 'google') { - // these are nested integrations within a connector i.e. int_google_gmail - // so we only want to show those enabled in the integrations list of the connector config - return int.ccfg.integrations.some((i) => int.id.includes(i)) - } - return true - }) + const ints = listIntegrationsRes.data?.items.map((int) => ({ + ...int, + ccfg: connectorConfigs.find((ccfg) => ccfg.id === int.connector_config_id)!, + })) + // .filter((int) => { + // if (int.connector_name === 'google') { + // // these are nested integrations within a connector i.e. int_google_gmail + // // so we only want to show those enabled in the integrations list of the connector config + // return int.ccfg.integrations.some((i) => int.id.includes(i)) + // } + // return true + // }) const categories = Array.from( new Set(connectorConfigs.flatMap((ccfg) => ccfg.verticals)), From 889669439e5d092c3f68aaf4615cd3d47e420ec9 Mon Sep 17 00:00:00 2001 From: Amadeo Pellicce Date: Wed, 6 Nov 2024 18:36:44 -0800 Subject: [PATCH 3/5] removing commented out code --- packages/engine-frontend/components/IntegrationSearch.tsx | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/engine-frontend/components/IntegrationSearch.tsx b/packages/engine-frontend/components/IntegrationSearch.tsx index b9abc209..113e59de 100644 --- a/packages/engine-frontend/components/IntegrationSearch.tsx +++ b/packages/engine-frontend/components/IntegrationSearch.tsx @@ -38,14 +38,6 @@ export function IntegrationSearch({ ...int, ccfg: connectorConfigs.find((ccfg) => ccfg.id === int.connector_config_id)!, })) - // .filter((int) => { - // if (int.connector_name === 'google') { - // // these are nested integrations within a connector i.e. int_google_gmail - // // so we only want to show those enabled in the integrations list of the connector config - // return int.ccfg.integrations.some((i) => int.id.includes(i)) - // } - // return true - // }) const categories = Array.from( new Set(connectorConfigs.flatMap((ccfg) => ccfg.verticals)), From e366ff0e1a0675732bb442973fd39d0a3a5b1c48 Mon Sep 17 00:00:00 2001 From: Amadeo Pellicce Date: Wed, 6 Nov 2024 18:37:34 -0800 Subject: [PATCH 4/5] ditto --- .../components/ConnectionPortal.tsx | 25 ------------------- 1 file changed, 25 deletions(-) diff --git a/packages/engine-frontend/components/ConnectionPortal.tsx b/packages/engine-frontend/components/ConnectionPortal.tsx index e0b26c18..198bf770 100644 --- a/packages/engine-frontend/components/ConnectionPortal.tsx +++ b/packages/engine-frontend/components/ConnectionPortal.tsx @@ -80,31 +80,6 @@ export function ConnectionPortal({className}: ConnectionPortalProps) { ), })) - // TODO: add list interations filtering and - // show integrations instead of connectors in children - - // https://openintdev.slack.com/archives/C060G4MDZ0Q/p1730843474762009?thread_ts=1730841954.696109&cid=C060G4MDZ0Q - - // const listIntegrationsRes = _trpcReact.listConfiguredIntegrations.useQuery({ - // connector_config_ids: connectorConfigs.map((ccfg) => ccfg.id), - // search_text: searchText, - // }) - // const ints = listIntegrationsRes.data?.items - // .map((int) => ({ - // ...int, - // ccfg: connectorConfigs.find( - // (ccfg) => ccfg.id === int.connector_config_id, - // )!, - // })) - // .filter((int) => { - // if (int.connector_name === 'google') { - // // these are nested integrations within a connector i.e. int_google_gmail - // // so we only want to show those enabled in the integrations list of the connector config - // return int.ccfg.integrations.some((i) => int.id.includes(i)) - // } - // return true - // }) - const connectionCount = connections.length const tabConfig = [ From 4a8da887389baa7ea9b6c58490a037472dcc628a Mon Sep 17 00:00:00 2001 From: Amadeo Pellicce Date: Thu, 7 Nov 2024 11:29:32 -0800 Subject: [PATCH 5/5] lints --- connectors/connector-google/server.ts | 10 +++------- packages/engine-backend/router/connectorRouter.ts | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/connectors/connector-google/server.ts b/connectors/connector-google/server.ts index c44e7d0a..773704a4 100644 --- a/connectors/connector-google/server.ts +++ b/connectors/connector-google/server.ts @@ -72,12 +72,8 @@ export const googleServer = { } return {} }, - // @ts-expect-error - async listIntegrations(params: { - ccfg: {integrations: Record} - }) { - console.debug('Google listIntegrations', params) - const integrationsToFilter = params?.ccfg?.integrations ?? {} + async listIntegrations(params: unknown) { + const integrationsToFilter = (params as any)?.ccfg?.integrations ?? {} const integrations = [ { @@ -105,7 +101,7 @@ export const googleServer = { updated_at: new Date().toISOString(), logo_url: '/_assets/logo-google-calendar.svg', }, - ].filter((int) => integrationsToFilter[int.id]?.enabled === true) + ].filter((int) => integrationsToFilter[int.id]?.enabled === true) as any return { has_next_page: false, diff --git a/packages/engine-backend/router/connectorRouter.ts b/packages/engine-backend/router/connectorRouter.ts index 71530293..9fafefcb 100644 --- a/packages/engine-backend/router/connectorRouter.ts +++ b/packages/engine-backend/router/connectorRouter.ts @@ -1,5 +1,5 @@ import {zodToOas31Schema} from '@opensdks/util-zod' -import {extractId, Id, metaForConnector, zId, zVerticalKey} from '@openint/cdk' +import {extractId, metaForConnector, zId, zVerticalKey} from '@openint/cdk' import type {RouterMeta} from '@openint/trpc' import {getProtectedContext, TRPCError} from '@openint/trpc' import {R, z} from '@openint/util'