diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index e19561635..4d3ebf949 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -66,8 +66,6 @@ services: JIRA_SERVICE_MGMT_TICKETING_CLIENT_SECRET: ${JIRA_SERVICE_MGMT_TICKETING_CLIENT_SECRET} LINEAR_TICKETING_CLIENT_ID: ${LINEAR_TICKETING_CLIENT_ID} LINEAR_TICKETING_CLIENT_SECRET: ${LINEAR_TICKETING_CLIENT_SECRET} - AFFINITY_CRM_CLIENT_ID: ${AFFINITY_CRM_CLIENT_ID} - AFFINITY_CRM_CLIENT_SECRET: ${AFFINITY_CRM_CLIENT_SECRET} ACCELO_CRM_CLIENT_ID: ${ACCELO_CRM_CLIENT_ID} ACCELO_CRM_CLIENT_SECRET: ${ACCELO_CRM_CLIENT_SECRET} ACCELO_CRM_SUBDOMAIN: ${ACCELO_CRM_SUBDOMAIN} @@ -77,13 +75,8 @@ services: CLOSE_CRM_CLIENT_SECRET: ${CLOSE_CRM_CLIENT_SECRET} COPPER_CRM_CLIENT_ID: ${COPPER_CRM_CLIENT_ID} COPPER_CRM_CLIENT_SECRET: ${COPPER_CRM_CLIENT_SECRET} - INSIGHTLY_CRM_CLIENT_ID: ${INSIGHTLY_CRM_CLIENT_ID} - INSIGHTLY_CRM_CLIENT_SECRET: ${INSIGHTLY_CRM_CLIENT_SECRET} KEAP_CRM_CLIENT_ID: ${KEAP_CRM_CLIENT_ID} KEAP_CRM_CLIENT_SECRET: ${KEAP_CRM_CLIENT_SECRET} - SUGARCRM_CRM_CLIENT_ID: ${SUGARCRM_CRM_CLIENT_ID} - SUGARCRM_CRM_CLIENT_SECRET: ${SUGARCRM_CRM_CLIENT_SECRET} - SUGARCRM_CRM_SUBDOMAIN: ${SUGARCRM_CRM_SUBDOMAIN} TEAMLEADER_CRM_CLIENT_ID: ${TEAMLEADER_CRM_CLIENT_ID} TEAMLEADER_CRM_CLIENT_SECRET: ${TEAMLEADER_CRM_CLIENT_SECRET} TEAMWORK_CRM_CLIENT_ID: ${TEAMWORK_CRM_CLIENT_ID} diff --git a/packages/api/src/@core/connections/accounting/services/freeagent/freeagent.service.ts b/packages/api/src/@core/connections/accounting/services/freeagent/freeagent.service.ts index 404f1c178..fc411d48a 100644 --- a/packages/api/src/@core/connections/accounting/services/freeagent/freeagent.service.ts +++ b/packages/api/src/@core/connections/accounting/services/freeagent/freeagent.service.ts @@ -94,7 +94,8 @@ export class FreeagentConnectionService data: { access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), - account_url: providersConfig['accounting']['freshagent'].apiUrl, + account_url: + providersConfig['accounting']['freshagent'].urls.apiUrl, expiration_timestamp: new Date( new Date().getTime() + Number(data.expires_in) * 1000, ), @@ -110,7 +111,8 @@ export class FreeagentConnectionService provider_slug: 'freeagent', vertical: 'accounting', token_type: 'oauth', - account_url: providersConfig['accounting']['freshagent'].apiUrl, + account_url: + providersConfig['accounting']['freshagent'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/accounting/services/freshbooks/freshbooks.service.ts b/packages/api/src/@core/connections/accounting/services/freshbooks/freshbooks.service.ts index f3c06c80d..23f0f5e22 100644 --- a/packages/api/src/@core/connections/accounting/services/freshbooks/freshbooks.service.ts +++ b/packages/api/src/@core/connections/accounting/services/freshbooks/freshbooks.service.ts @@ -93,7 +93,7 @@ export class FreshbooksConnectionService data: { access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), - account_url: providersConfig['accounting']['freshbooks'].apiUrl, + account_url: providersConfig['accounting']['freshbooks'].urls.apiUrl, expiration_timestamp: new Date( new Date().getTime() + Number(data.expires_in) * 1000, ), @@ -109,7 +109,7 @@ export class FreshbooksConnectionService provider_slug: 'freshbooks', vertical: 'accounting', token_type: 'oauth', - account_url: providersConfig['accounting']['freshbooks'].apiUrl, + account_url: providersConfig['accounting']['freshbooks'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/accounting/services/moneybird/moneybird.service.ts b/packages/api/src/@core/connections/accounting/services/moneybird/moneybird.service.ts index 7c6e158a8..4d2085d3a 100644 --- a/packages/api/src/@core/connections/accounting/services/moneybird/moneybird.service.ts +++ b/packages/api/src/@core/connections/accounting/services/moneybird/moneybird.service.ts @@ -94,7 +94,7 @@ export class MoneybirdConnectionService data: { access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), - account_url: providersConfig['accounting']['moneybird'].apiUrl, + account_url: providersConfig['accounting']['moneybird'].urls.apiUrl, expiration_timestamp: new Date( new Date().getTime() + Number(data.expires_in) * 1000, ), @@ -110,7 +110,7 @@ export class MoneybirdConnectionService provider_slug: 'moneybird', vertical: 'accounting', token_type: 'oauth', - account_url: providersConfig['accounting']['moneybird'].apiUrl, + account_url: providersConfig['accounting']['moneybird'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/accounting/services/pennylane/pennylane.service.ts b/packages/api/src/@core/connections/accounting/services/pennylane/pennylane.service.ts index 873f5c24c..af1827251 100644 --- a/packages/api/src/@core/connections/accounting/services/pennylane/pennylane.service.ts +++ b/packages/api/src/@core/connections/accounting/services/pennylane/pennylane.service.ts @@ -92,7 +92,7 @@ export class PennylaneConnectionService data: { access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), - account_url: providersConfig['accounting']['pennylane'].apiUrl, + account_url: providersConfig['accounting']['pennylane'].urls.apiUrl, expiration_timestamp: new Date( new Date().getTime() + Number(data.expires_in) * 1000, ), @@ -108,7 +108,7 @@ export class PennylaneConnectionService provider_slug: 'pennylane', vertical: 'accounting', token_type: 'oauth', - account_url: providersConfig['accounting']['pennylane'].apiUrl, + account_url: providersConfig['accounting']['pennylane'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/accounting/services/quickbooks/quickbooks.service.ts b/packages/api/src/@core/connections/accounting/services/quickbooks/quickbooks.service.ts index 34a3fca27..76b24e868 100644 --- a/packages/api/src/@core/connections/accounting/services/quickbooks/quickbooks.service.ts +++ b/packages/api/src/@core/connections/accounting/services/quickbooks/quickbooks.service.ts @@ -94,7 +94,7 @@ export class QuickbooksConnectionService data: { access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), - account_url: providersConfig['accounting']['quickbooks'].apiUrl, + account_url: providersConfig['accounting']['quickbooks'].urls.apiUrl, expiration_timestamp: new Date( new Date().getTime() + Number(data.expires_in) * 1000, ), @@ -110,7 +110,7 @@ export class QuickbooksConnectionService provider_slug: 'quickbooks', vertical: 'accounting', token_type: 'oauth', - account_url: providersConfig['accounting']['quickbooks'].apiUrl, + account_url: providersConfig['accounting']['quickbooks'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/accounting/services/sage/sage.service.ts b/packages/api/src/@core/connections/accounting/services/sage/sage.service.ts index 967bc4cff..f29cb1b03 100644 --- a/packages/api/src/@core/connections/accounting/services/sage/sage.service.ts +++ b/packages/api/src/@core/connections/accounting/services/sage/sage.service.ts @@ -93,7 +93,7 @@ export class SageConnectionService implements IAccountingConnectionService { data: { access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), - account_url: providersConfig['accounting']['sage'].apiUrl, + account_url: providersConfig['accounting']['sage'].urls.apiUrl, expiration_timestamp: new Date( new Date().getTime() + Number(data.expires_in) * 1000, ), @@ -109,7 +109,7 @@ export class SageConnectionService implements IAccountingConnectionService { provider_slug: 'sage', vertical: 'accounting', token_type: 'oauth', - account_url: providersConfig['accounting']['sage'].apiUrl, + account_url: providersConfig['accounting']['sage'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/accounting/services/wave_financial/wave_financial.service.ts b/packages/api/src/@core/connections/accounting/services/wave_financial/wave_financial.service.ts index 197e07086..80194129b 100644 --- a/packages/api/src/@core/connections/accounting/services/wave_financial/wave_financial.service.ts +++ b/packages/api/src/@core/connections/accounting/services/wave_financial/wave_financial.service.ts @@ -99,7 +99,7 @@ export class WaveFinancialConnectionService data: { access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), - account_url: providersConfig['accounting']['wave_financial'].apiUrl, + account_url: providersConfig['accounting']['wave_financial'].urls.apiUrl, expiration_timestamp: new Date( new Date().getTime() + Number(data.expires_in) * 1000, ), @@ -115,7 +115,7 @@ export class WaveFinancialConnectionService provider_slug: 'wave_financial', vertical: 'accounting', token_type: 'oauth', - account_url: providersConfig['accounting']['wave_financial'].apiUrl, + account_url: providersConfig['accounting']['wave_financial'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/crm/services/accelo/accelo.service.ts b/packages/api/src/@core/connections/crm/services/accelo/accelo.service.ts index 97ae8ed0d..d4c6a33ae 100644 --- a/packages/api/src/@core/connections/crm/services/accelo/accelo.service.ts +++ b/packages/api/src/@core/connections/crm/services/accelo/accelo.service.ts @@ -92,7 +92,7 @@ export class AcceloConnectionService implements ICrmConnectionService { const connection_token = uuidv4(); //get the right BASE URL API const BASE_API_URL = - CREDENTIALS.SUBDOMAIN + providersConfig['crm']['accelo'].apiUrl; + CREDENTIALS.SUBDOMAIN + providersConfig['crm']['accelo'].urls.apiUrl; if (isNotUnique) { // Update existing connection diff --git a/packages/api/src/@core/connections/crm/services/attio/attio.service.ts b/packages/api/src/@core/connections/crm/services/attio/attio.service.ts index 9d010e6cc..565d209e6 100644 --- a/packages/api/src/@core/connections/crm/services/attio/attio.service.ts +++ b/packages/api/src/@core/connections/crm/services/attio/attio.service.ts @@ -108,7 +108,7 @@ export class AttioConnectionService implements ICrmConnectionService { provider_slug: 'attio', vertical: 'crm', token_type: 'oauth', - account_url: providersConfig['crm']['attio'].apiUrl, + account_url: providersConfig['crm']['attio'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), status: 'valid', created_at: new Date(), diff --git a/packages/api/src/@core/connections/crm/services/capsule/capsule.service.ts b/packages/api/src/@core/connections/crm/services/capsule/capsule.service.ts index b1e78c49a..d49062919 100644 --- a/packages/api/src/@core/connections/crm/services/capsule/capsule.service.ts +++ b/packages/api/src/@core/connections/crm/services/capsule/capsule.service.ts @@ -94,7 +94,7 @@ export class CapsuleConnectionService implements ICrmConnectionService { data: { access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), - account_url: providersConfig['crm']['capsule'].apiUrl, + account_url: providersConfig['crm']['capsule'].urls.apiUrl, expiration_timestamp: new Date( new Date().getTime() + Number(data.expires_in) * 1000, ), @@ -110,7 +110,7 @@ export class CapsuleConnectionService implements ICrmConnectionService { provider_slug: 'capsule', vertical: 'crm', token_type: 'oauth', - account_url: providersConfig['crm']['capsule'].apiUrl, + account_url: providersConfig['crm']['capsule'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/crm/services/close/close.service.ts b/packages/api/src/@core/connections/crm/services/close/close.service.ts index 27d9ff709..57da7967c 100644 --- a/packages/api/src/@core/connections/crm/services/close/close.service.ts +++ b/packages/api/src/@core/connections/crm/services/close/close.service.ts @@ -98,7 +98,7 @@ export class CloseConnectionService implements ICrmConnectionService { data: { access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), - account_url: providersConfig['crm']['close'].apiUrl, + account_url: providersConfig['crm']['close'].urls.apiUrl, expiration_timestamp: new Date( new Date().getTime() + Number(data.expires_in) * 1000, ), @@ -114,7 +114,7 @@ export class CloseConnectionService implements ICrmConnectionService { provider_slug: 'close', vertical: 'crm', token_type: 'oauth', - account_url: providersConfig['crm']['close'].apiUrl, + account_url: providersConfig['crm']['close'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/crm/services/copper/copper.service.ts b/packages/api/src/@core/connections/crm/services/copper/copper.service.ts index c2cbf3eb9..42dfa4202 100644 --- a/packages/api/src/@core/connections/crm/services/copper/copper.service.ts +++ b/packages/api/src/@core/connections/crm/services/copper/copper.service.ts @@ -104,7 +104,7 @@ export class CopperConnectionService implements ICrmConnectionService { provider_slug: 'copper', vertical: 'crm', token_type: 'oauth', - account_url: providersConfig['crm']['copper'].apiUrl, + account_url: providersConfig['crm']['copper'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), status: 'valid', created_at: new Date(), diff --git a/packages/api/src/@core/connections/crm/services/hubspot/hubspot.service.ts b/packages/api/src/@core/connections/crm/services/hubspot/hubspot.service.ts index 41b04fa66..576a8c519 100644 --- a/packages/api/src/@core/connections/crm/services/hubspot/hubspot.service.ts +++ b/packages/api/src/@core/connections/crm/services/hubspot/hubspot.service.ts @@ -111,7 +111,7 @@ export class HubspotConnectionService implements ICrmConnectionService { provider_slug: 'hubspot', vertical: 'crm', token_type: 'oauth', - account_url: providersConfig['crm']['hubspot'].apiUrl, + account_url: providersConfig['crm']['hubspot'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/crm/services/keap/keap.service.ts b/packages/api/src/@core/connections/crm/services/keap/keap.service.ts index 4634b92b7..66772aa8a 100644 --- a/packages/api/src/@core/connections/crm/services/keap/keap.service.ts +++ b/packages/api/src/@core/connections/crm/services/keap/keap.service.ts @@ -108,7 +108,7 @@ export class KeapConnectionService implements ICrmConnectionService { provider_slug: 'keap', vertical: 'crm', token_type: 'oauth', - account_url: providersConfig['crm']['keap'].apiUrl, + account_url: providersConfig['crm']['keap'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/crm/services/pipedrive/pipedrive.service.ts b/packages/api/src/@core/connections/crm/services/pipedrive/pipedrive.service.ts index 6449aed72..e8eb337ec 100644 --- a/packages/api/src/@core/connections/crm/services/pipedrive/pipedrive.service.ts +++ b/packages/api/src/@core/connections/crm/services/pipedrive/pipedrive.service.ts @@ -108,7 +108,7 @@ export class PipedriveConnectionService implements ICrmConnectionService { provider_slug: 'pipedrive', vertical: 'crm', token_type: 'oauth', - account_url: providersConfig['crm']['pipedrive'].apiUrl, + account_url: providersConfig['crm']['pipedrive'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/crm/services/teamleader/teamleader.service.ts b/packages/api/src/@core/connections/crm/services/teamleader/teamleader.service.ts index da52623a7..48f09a133 100644 --- a/packages/api/src/@core/connections/crm/services/teamleader/teamleader.service.ts +++ b/packages/api/src/@core/connections/crm/services/teamleader/teamleader.service.ts @@ -94,7 +94,7 @@ export class TeamleaderConnectionService implements ICrmConnectionService { data: { access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), - account_url: providersConfig['crm']['teamleader'].apiUrl, + account_url: providersConfig['crm']['teamleader'].urls.apiUrl, expiration_timestamp: new Date( new Date().getTime() + Number(data.expires_in) * 1000, ), diff --git a/packages/api/src/@core/connections/crm/services/teamwork/teamwork.service.ts b/packages/api/src/@core/connections/crm/services/teamwork/teamwork.service.ts index dcc3060d5..efab60ab2 100644 --- a/packages/api/src/@core/connections/crm/services/teamwork/teamwork.service.ts +++ b/packages/api/src/@core/connections/crm/services/teamwork/teamwork.service.ts @@ -83,7 +83,7 @@ export class TeamworkConnectionService implements ICrmConnectionService { const connection_token = uuidv4(); //get the right BASE URL API const BASE_API_URL = - CREDENTIALS.SUBDOMAIN + providersConfig['crm']['teamwork'].apiUrl; + CREDENTIALS.SUBDOMAIN + providersConfig['crm']['teamwork'].urls.apiUrl; if (isNotUnique) { db_res = await this.prisma.connections.update({ diff --git a/packages/api/src/@core/connections/crm/services/zendesk/zendesk.service.ts b/packages/api/src/@core/connections/crm/services/zendesk/zendesk.service.ts index 422b55873..a57205c19 100644 --- a/packages/api/src/@core/connections/crm/services/zendesk/zendesk.service.ts +++ b/packages/api/src/@core/connections/crm/services/zendesk/zendesk.service.ts @@ -112,7 +112,7 @@ export class ZendeskConnectionService implements ICrmConnectionService { provider_slug: 'zendesk', vertical: 'crm', token_type: 'oauth', - account_url: providersConfig['crm']['zendesk'].apiUrl, + account_url: providersConfig['crm']['zendesk'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: data.refresh_token ? this.cryptoService.encrypt(data.refresh_token) diff --git a/packages/api/src/@core/connections/crm/services/zoho/zoho.service.ts b/packages/api/src/@core/connections/crm/services/zoho/zoho.service.ts index 0e122d873..57eb20088 100644 --- a/packages/api/src/@core/connections/crm/services/zoho/zoho.service.ts +++ b/packages/api/src/@core/connections/crm/services/zoho/zoho.service.ts @@ -134,7 +134,7 @@ export class ZohoConnectionService implements ICrmConnectionService { ), status: 'valid', created_at: new Date(), - account_url: apiDomain + providersConfig['crm']['zoho'].apiUrl, + account_url: apiDomain + providersConfig['crm']['zoho'].urls.apiUrl, }, }); } else { @@ -160,7 +160,7 @@ export class ZohoConnectionService implements ICrmConnectionService { linked_users: { connect: { id_linked_user: linkedUserId }, }, - account_url: apiDomain + providersConfig['crm']['zoho'].apiUrl, + account_url: apiDomain + providersConfig['crm']['zoho'].urls.apiUrl, }, }); } diff --git a/packages/api/src/@core/connections/ticketing/services/aha/aha.service.ts b/packages/api/src/@core/connections/ticketing/services/aha/aha.service.ts index 2297d4ec9..3a0f241c8 100644 --- a/packages/api/src/@core/connections/ticketing/services/aha/aha.service.ts +++ b/packages/api/src/@core/connections/ticketing/services/aha/aha.service.ts @@ -82,7 +82,7 @@ export class AhaConnectionService implements ITicketingConnectionService { const connection_token = uuidv4(); //get the right BASE URL API const BASE_API_URL = - CREDENTIALS.SUBDOMAIN + providersConfig['ticketing']['aha'].apiUrl; + CREDENTIALS.SUBDOMAIN + providersConfig['ticketing']['aha'].urls.apiUrl; if (isNotUnique) { db_res = await this.prisma.connections.update({ diff --git a/packages/api/src/@core/connections/ticketing/services/asana/asana.service.ts b/packages/api/src/@core/connections/ticketing/services/asana/asana.service.ts index df90bb82c..5d72478a2 100644 --- a/packages/api/src/@core/connections/ticketing/services/asana/asana.service.ts +++ b/packages/api/src/@core/connections/ticketing/services/asana/asana.service.ts @@ -96,7 +96,7 @@ export class AsanaConnectionService implements ITicketingConnectionService { data: { access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), - account_url: providersConfig['ticketing']['asana'].apiUrl, + account_url: providersConfig['ticketing']['asana'].urls.apiUrl, expiration_timestamp: new Date( new Date().getTime() + Number(data.expires_in) * 1000, ), @@ -112,7 +112,7 @@ export class AsanaConnectionService implements ITicketingConnectionService { provider_slug: 'asana', vertical: 'ticketing', token_type: 'oauth', - account_url: providersConfig['ticketing']['asana'].apiUrl, + account_url: providersConfig['ticketing']['asana'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/ticketing/services/clickup/clickup.service.ts b/packages/api/src/@core/connections/ticketing/services/clickup/clickup.service.ts index 666894fa5..b36c8df34 100644 --- a/packages/api/src/@core/connections/ticketing/services/clickup/clickup.service.ts +++ b/packages/api/src/@core/connections/ticketing/services/clickup/clickup.service.ts @@ -102,7 +102,7 @@ export class ClickupConnectionService implements ITicketingConnectionService { provider_slug: 'clickup', vertical: 'ticketing', token_type: 'oauth', - account_url: providersConfig['ticketing']['clickup'].apiUrl, + account_url: providersConfig['ticketing']['clickup'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: '', expiration_timestamp: '', diff --git a/packages/api/src/@core/connections/ticketing/services/front/front.service.ts b/packages/api/src/@core/connections/ticketing/services/front/front.service.ts index 89373c0f7..e1fb6381a 100644 --- a/packages/api/src/@core/connections/ticketing/services/front/front.service.ts +++ b/packages/api/src/@core/connections/ticketing/services/front/front.service.ts @@ -106,7 +106,7 @@ export class FrontConnectionService implements ITicketingConnectionService { provider_slug: 'front', vertical: 'ticketing', token_type: 'oauth', - account_url: providersConfig['ticketing']['front'].apiUrl, + account_url: providersConfig['ticketing']['front'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/ticketing/services/github/github.service.ts b/packages/api/src/@core/connections/ticketing/services/github/github.service.ts index 59e2be830..b668b1116 100644 --- a/packages/api/src/@core/connections/ticketing/services/github/github.service.ts +++ b/packages/api/src/@core/connections/ticketing/services/github/github.service.ts @@ -110,7 +110,7 @@ export class GithubConnectionService implements ITicketingConnectionService { connection_token: connection_token, provider_slug: 'github', vertical: 'ticketing', - account_url: providersConfig['ticketing']['github'].apiUrl, + account_url: providersConfig['ticketing']['github'].urls.apiUrl, token_type: 'oauth', access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), diff --git a/packages/api/src/@core/connections/ticketing/services/gitlab/gitlab.service.ts b/packages/api/src/@core/connections/ticketing/services/gitlab/gitlab.service.ts index 9e450c99e..f00ea7ab4 100644 --- a/packages/api/src/@core/connections/ticketing/services/gitlab/gitlab.service.ts +++ b/packages/api/src/@core/connections/ticketing/services/gitlab/gitlab.service.ts @@ -83,7 +83,7 @@ export class GitlabConnectionService implements ITicketingConnectionService { let db_res; const connection_token = uuidv4(); const BASE_API_URL = - CREDENTIALS.SUBDOMAIN + providersConfig['ticketing']['gitlab'].apiUrl; + CREDENTIALS.SUBDOMAIN + providersConfig['ticketing']['gitlab'].urls.apiUrl; if (isNotUnique) { db_res = await this.prisma.connections.update({ diff --git a/packages/api/src/@core/connections/ticketing/services/gorgias/gorgias.service.ts b/packages/api/src/@core/connections/ticketing/services/gorgias/gorgias.service.ts index bc6c89b6a..1d8d5bb8f 100644 --- a/packages/api/src/@core/connections/ticketing/services/gorgias/gorgias.service.ts +++ b/packages/api/src/@core/connections/ticketing/services/gorgias/gorgias.service.ts @@ -92,7 +92,7 @@ export class GorgiasConnectionService implements ITicketingConnectionService { //get the right BASE URL API const BASE_API_URL = - CREDENTIALS.SUBDOMAIN + providersConfig['ticketing']['gorgias'].apiUrl; + CREDENTIALS.SUBDOMAIN + providersConfig['ticketing']['gorgias'].urls.apiUrl; if (isNotUnique) { db_res = await this.prisma.connections.update({ diff --git a/packages/api/src/@core/connections/ticketing/services/linear/linear.service.ts b/packages/api/src/@core/connections/ticketing/services/linear/linear.service.ts index a16afa741..7ced77587 100644 --- a/packages/api/src/@core/connections/ticketing/services/linear/linear.service.ts +++ b/packages/api/src/@core/connections/ticketing/services/linear/linear.service.ts @@ -105,7 +105,7 @@ export class LinearConnectionService implements ITicketingConnectionService { provider_slug: 'linear', vertical: 'ticketing', token_type: 'oauth', - account_url: providersConfig['ticketing']['linear'].apiUrl, + account_url: providersConfig['ticketing']['linear'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: '', expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/ticketing/services/wrike/wrike.service.ts b/packages/api/src/@core/connections/ticketing/services/wrike/wrike.service.ts index 769decfc7..4bc527610 100644 --- a/packages/api/src/@core/connections/ticketing/services/wrike/wrike.service.ts +++ b/packages/api/src/@core/connections/ticketing/services/wrike/wrike.service.ts @@ -93,7 +93,7 @@ export class WrikeConnectionService implements ITicketingConnectionService { refresh_token: this.cryptoService.encrypt(data.refresh_token), account_url: `https://${data.host}` + - providersConfig['ticketing']['wriker'].apiUrl, + providersConfig['ticketing']['wriker'].urls.apiUrl, expiration_timestamp: new Date( new Date().getTime() + Number(data.expires_in) * 1000, ), @@ -111,7 +111,7 @@ export class WrikeConnectionService implements ITicketingConnectionService { token_type: 'oauth', account_url: `https://${data.host}` + - providersConfig['ticketing']['wriker'].apiUrl, + providersConfig['ticketing']['wriker'].urls.apiUrl, access_token: this.cryptoService.encrypt(data.access_token), refresh_token: this.cryptoService.encrypt(data.refresh_token), expiration_timestamp: new Date( diff --git a/packages/api/src/@core/connections/ticketing/services/zendesk/zendesk.service.ts b/packages/api/src/@core/connections/ticketing/services/zendesk/zendesk.service.ts index 80a03389f..d77c6abde 100644 --- a/packages/api/src/@core/connections/ticketing/services/zendesk/zendesk.service.ts +++ b/packages/api/src/@core/connections/ticketing/services/zendesk/zendesk.service.ts @@ -84,7 +84,7 @@ export class ZendeskConnectionService implements ITicketingConnectionService { const connection_token = uuidv4(); //get the right BASE URL API const BASE_API_URL = - CREDENTIALS.SUBDOMAIN + providersConfig['ticketing']['zendesk'].apiUrl; + CREDENTIALS.SUBDOMAIN + providersConfig['ticketing']['zendesk'].urls.apiUrl; if (isNotUnique) { db_res = await this.prisma.connections.update({ diff --git a/packages/api/src/@core/field-mapping/field-mapping.service.ts b/packages/api/src/@core/field-mapping/field-mapping.service.ts index 84c0eb709..0d4bc02b6 100644 --- a/packages/api/src/@core/field-mapping/field-mapping.service.ts +++ b/packages/api/src/@core/field-mapping/field-mapping.service.ts @@ -131,8 +131,10 @@ export class FieldMappingService { }); const provider = providersConfig[vertical][providerId.toLowerCase()]; //TODO: handle case where apiUrl is == "" or starts with "/" + if (!provider.urls.apiUrl || !provider.urls.customPropertiesUrl) + throw new Error('proivder urls are invalid'); const resp = await axios.get( - provider.apiUrl + provider.customPropertiesUrl, + provider.urls.apiUrl + provider.urls.customPropertiesUrl, { headers: { 'Content-Type': 'application/json', diff --git a/packages/api/src/@core/passthrough/passthrough.service.ts b/packages/api/src/@core/passthrough/passthrough.service.ts index 248f8e55d..44b2e88bf 100644 --- a/packages/api/src/@core/passthrough/passthrough.service.ts +++ b/packages/api/src/@core/passthrough/passthrough.service.ts @@ -42,7 +42,7 @@ export class PassthroughService { }, }); const intId = integrationId.toLowerCase(); - const providerUrl = providersConfig[vertical.toLowerCase()][intId].apiUrl; + const providerUrl = providersConfig[vertical.toLowerCase()][intId].urls.apiUrl; //TODO: handle case where apiUrl is == "" or starts with "/" const BASE_URL = `${providerUrl}${path}`; const connection = await this.prisma.connections.findFirst({ diff --git a/packages/shared/package.json b/packages/shared/package.json index 5c3d7499f..3f6166d87 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -35,8 +35,7 @@ "@nestjs/common": "^6.0.0" }, "dependencies": { - "dotenv": "^16.3.1", - "randomstring": "^1.3.0" + "dotenv": "^16.3.1" }, "devDependencies": { "@nestjs/common": "^10.0.0", diff --git a/packages/shared/src/authUrl.ts b/packages/shared/src/authUrl.ts index 94dda0ec7..b7d6c170f 100644 --- a/packages/shared/src/authUrl.ts +++ b/packages/shared/src/authUrl.ts @@ -1,7 +1,15 @@ -import { needsSubdomain, OAuth2AuthData, providerToType } from "./envConfig"; +import { OAuth2AuthData, providerToType } from "./envConfig"; import { AuthStrategy, providersConfig, ProviderConfig } from "./utils"; -import randomstring from "randomstring"; +const randomString = () => { + const charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + let result = ''; + for (let i = 0; i < length; i++) { + const randomIndex = Math.floor(Math.random() * charSet.length); + result += charSet[randomIndex]; + } + return result; +} interface AuthParams { projectId: string; linkedUserId: string; @@ -84,7 +92,8 @@ const handleOAuth2Url = async (input: HandleOAuth2Url) => { const clientId = data.CLIENT_ID; if (!clientId) throw new Error(`No client id for type ${type}`) - const { scopes, authBaseUrl: baseUrl } = config; + const { scopes, urls: urls } = config; + const { authBaseUrl: baseUrl } = urls; if(!baseUrl) throw new Error(`No authBaseUrl found for type ${type}`) @@ -114,7 +123,8 @@ const handleOAuth2Url = async (input: HandleOAuth2Url) => { params = `audience=api.atlassian.com&${params}&prompt=consent`; break; case "gorgias": - params = `&response_type=code&nonce=${randomstring.generate()}` + params = `&response_type=code&nonce=${randomString()}`; + break; default: // For most providers, response_type=code is common params += "&response_type=code"; diff --git a/packages/shared/src/envConfig.ts b/packages/shared/src/envConfig.ts index 89535d3c4..88e0e1e62 100644 --- a/packages/shared/src/envConfig.ts +++ b/packages/shared/src/envConfig.ts @@ -92,9 +92,9 @@ export function needsSubdomain(provider: string, vertical: string): boolean { const providerConfig = providersConfig[vertical][provider]; // Check if authBaseUrl and apiUrl start with a '/' - const authBaseUrlStartsWithSlash = providerConfig.authBaseUrl!.startsWith('/'); - const apiUrlStartsWithSlash = providerConfig.apiUrl!.startsWith('/'); - const apiUrlIsBlank = providerConfig.apiUrl! == ""; + const authBaseUrlStartsWithSlash = providerConfig.urls.authBaseUrl!.startsWith('/'); + const apiUrlStartsWithSlash = providerConfig.urls.apiUrl!.startsWith('/'); + const apiUrlIsBlank = providerConfig.urls.apiUrl! == ""; return authBaseUrlStartsWithSlash || apiUrlStartsWithSlash || apiUrlIsBlank; } diff --git a/packages/shared/src/utils.ts b/packages/shared/src/utils.ts index 03db82809..bbf69829e 100644 --- a/packages/shared/src/utils.ts +++ b/packages/shared/src/utils.ts @@ -299,7 +299,6 @@ export const providersConfig: ProvidersConfig = { scopes: '', urls: { docsUrl: "", - authBaseUrl: null, apiUrl: '', }, logoPath: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRcUYrYD8lnaFaDN93vwjHhksKJUG3rqlb1TCFC__oPBw&s', @@ -732,18 +731,24 @@ export const providersConfig: ProvidersConfig = { }, 'accounting': { 'pennylane': { - apiUrl: 'https://app.pennylane.com/api/external/v1', scopes: '', - authBaseUrl: 'https://app.pennylane.com/oauth/authorize', + urls: { + docsUrl: "", + apiUrl: 'https://app.pennylane.com/api/external/v1', + authBaseUrl: 'https://app.pennylane.com/oauth/authorize', + }, logoPath: 'https://cdn-images-1.medium.com/max/1200/1*wk7CNGik_1Szbt7s1fNZxA.png', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false, authStrategy: AuthStrategy.oauth2 }, 'freshbooks': { - apiUrl: 'https://api.freshbooks.com', scopes: '', - authBaseUrl: 'https://auth.freshbooks.com/oauth/authorize', + urls: { + docsUrl: "", + apiUrl: 'https://api.freshbooks.com', + authBaseUrl: 'https://auth.freshbooks.com/oauth/authorize', + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false, @@ -751,26 +756,35 @@ export const providersConfig: ProvidersConfig = { }, //todo 'clearbooks': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "", + authBaseUrl: '', + }, logoPath: 'https://s3-eu-west-1.amazonaws.com/clearbooks-marketing/media-centre/MediaCentre/clear-books/CMYK/icon/clear-books-icon-cmyk.png', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'freeagent': { - apiUrl: 'https://api.freeagent.com/v2', scopes: '', - authBaseUrl: 'https://api.freeagent.com/v2/approve_app', + urls: { + docsUrl: "", + apiUrl: 'https://api.freeagent.com/v2', + authBaseUrl: 'https://api.freeagent.com/v2/approve_app', + }, logoPath: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQU-fob0b9pBNQdm80usnYa2yWdagm3eeBDH-870vSmfg&s', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false, authStrategy: AuthStrategy.oauth2 }, 'sage': { - apiUrl: 'https://api.accounting.sage.com/v3.1', scopes: '', - authBaseUrl: 'https://www.sageone.com/oauth2/auth/central?filter=apiv3.1', + urls: { + docsUrl: "", + apiUrl: 'https://api.accounting.sage.com/v3.1', + authBaseUrl: 'https://www.sageone.com/oauth2/auth/central?filter=apiv3.1', + }, logoPath: 'https://upload.wikimedia.org/wikipedia/en/thumb/b/b7/Sage_Group_logo_2022.svg/2560px-Sage_Group_logo_2022.svg.png', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false, @@ -778,26 +792,35 @@ export const providersConfig: ProvidersConfig = { }, //todo 'sage_intacct': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: '', + authBaseUrl: '', + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, //todo 'microsoft_dynamics': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: '', + authBaseUrl: '', + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'moneybird': { - apiUrl: 'https://moneybird.com/api/v2', scopes: '', - authBaseUrl: 'https://moneybird.com/oauth/authorize', + urls: { + docsUrl: "", + apiUrl: 'https://moneybird.com/api/v2', + authBaseUrl: 'https://moneybird.com/oauth/authorize', + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false, @@ -805,9 +828,12 @@ export const providersConfig: ProvidersConfig = { }, //todo 'netsuite': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: '', + authBaseUrl: '', + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false @@ -826,17 +852,23 @@ export const providersConfig: ProvidersConfig = { }, //todo 'workday': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: '', + authBaseUrl: '', + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'wave_financial': { - apiUrl: 'https://gql.waveapps.com/graphql/public', scopes: '', - authBaseUrl: 'https://api.waveapps.com/oauth2/authorize/', + urls: { + docsUrl: "", + apiUrl: 'https://gql.waveapps.com/graphql/public', + authBaseUrl: 'https://api.waveapps.com/oauth2/authorize/', + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false, @@ -846,89 +878,111 @@ export const providersConfig: ProvidersConfig = { //TODO 'marketing_automation': { 'active_campaign': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'customerio': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'getresponse': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'hubspot_marketing_hub': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'keap': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'klaviyo': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'mailchimp': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'messagebird': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'podium': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'sendgrid': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'sendinblue': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false @@ -937,377 +991,471 @@ export const providersConfig: ProvidersConfig = { //TODO 'ats': { 'applicantstack': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'ashby': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'bamboohr': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'breezy': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'bullhorn': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'cats': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'clayhr': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'clockwork': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'comeet': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'cornerstone_talentlink': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'engage_ats': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'eploy': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'fountain': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'freshteam': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'greenhouse': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'greenhouse_job_boards': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'harbour_ats': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'homerun': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'hrcloud': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'icims': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'infinite_brassring': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'jazzhr': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'jobadder': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'jobscore': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'jobvite': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'lano': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'lever': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'occupop': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'oracle_fusion': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'oracle_taleo': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'personio_recruiting': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'pinpoint': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'polymer': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'recruiterflow': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'recruitive': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'sage_hr': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'sap_successfactors': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'smartrecruiters': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'talentlyft': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'talentreef': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'teamtailor': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'tellent': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'tribepad': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'ukg_pro_recruiting': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'workable': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'workday': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'zoho_recruit': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false @@ -1316,505 +1464,631 @@ export const providersConfig: ProvidersConfig = { //TODO 'hris': { '7shifts': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'adp_workforce_now': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'alexishr': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'alliancehcm': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'altera_payroll': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'bamboohr': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'breathe': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'ceridian_dayforce': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'charlie': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'charthop': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'clayhr': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'cyberark': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'deel': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'employment_hero': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'factorial': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'freshteam': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'google_workspace': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'gusto': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'hibob': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'hrcloud': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'hrpartner': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'humaans': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'humi': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'insperity_premier': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'active_campaign': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'intellli_hr': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'iris_cascade': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'jumpcloud': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'justworks': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'kallidus': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'keka': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'kenjo': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'lano': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'lucca': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'microsoft_entra_id': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'namely': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'nmbrs': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'officient': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'okta': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'onelogin': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'oracle_hcm': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'oyster_hr': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'paycaptain': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'paychex': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'paycor': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'payfit': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'paylocity': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'people_hr': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'personio': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'pingone': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'proliant': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'remote': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'sage_hr': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'sap_successfactors': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'sesame': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'square_payroll': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'trinet': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'trinet_hr_platform': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'ukg_pro': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'ukg_pro_workforce': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'ukg_ready': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'workday': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false }, 'zoho_people': { - apiUrl: '', scopes: '', - authBaseUrl: '', + urls: { + docsUrl: "", + apiUrl: "" + }, logoPath: 'https://play-lh.googleusercontent.com/EMobDJKabP1eY_63QHgPS_-TK3eRfxXaeOnERbcRaWAw573iaV74pXS9xOv997dRZtM', description: "Sync & Create contacts, deals, companies, notes, engagements, stages, tasks and users", active: false @@ -1850,9 +2124,12 @@ export const getDescription = (name: string): string | null => { type Provider = { name: string; - apiUrl: string; + urls: { + docsUrl: string; + apiUrl: string; + authBaseUrl?: string | null; + }; scopes: string; - authBaseUrl: string | null; logoPath: string; description?: string; }; @@ -1861,9 +2138,12 @@ export function providersArray(vertical: string): Provider[] { const activeProviders = getActiveProvidersForVertical(vertical); return Object.entries(activeProviders).map(([providerName, config]) => ({ name: providerName, - apiUrl: config.apiUrl, + urls: { + docsUrl: config.urls.docsUrl, + apiUrl: config.urls.apiUrl, + authBaseUrl: config.urls.authBaseUrl, + }, scopes: config.scopes, - authBaseUrl: config.authBaseUrl, logoPath: config.logoPath, description: config.description, }));