Skip to content

Commit

Permalink
Add Aircall integration (#255)
Browse files Browse the repository at this point in the history
* Add Aircall integration

* Add helper tooltip for Aircall connector

* Add post connect logic for aircall integration

---------

Co-authored-by: Rodrigo Arze Leon <[email protected]>
  • Loading branch information
Rodri77 and Rodrigo Arze Leon authored Feb 11, 2025
1 parent 40d5c5a commit 55d469e
Show file tree
Hide file tree
Showing 12 changed files with 195 additions and 0 deletions.
2 changes: 2 additions & 0 deletions apps/app-config/connectors/connectors.def.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// generated by _generateConnectorLists.ts. Do not modify by hand
import {default as connectorAircall} from '@openint/connector-aircall/def'
import {default as connectorAirtable} from '@openint/connector-airtable/def'
import {default as connectorApollo} from '@openint/connector-apollo/def'
import {default as connectorBeancount} from '@openint/connector-beancount/def'
Expand Down Expand Up @@ -54,6 +55,7 @@ import {default as connectorYodlee} from '@openint/connector-yodlee/def'
import {default as connectorZohodesk} from '@openint/connector-zohodesk/def'

export const defConnectors = {
aircall: connectorAircall,
airtable: connectorAirtable,
apollo: connectorApollo,
beancount: connectorBeancount,
Expand Down
8 changes: 8 additions & 0 deletions apps/app-config/connectors/connectors.merged.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
// generated by _generateConnectorLists.ts. Do not modify by hand
import {default as connectorAircall_def} from '@openint/connector-aircall/def'
import {default as connectorAircall_server} from '@openint/connector-aircall/server'
import {default as connectorAirtable_def} from '@openint/connector-airtable/def'
import {default as connectorAirtable_server} from '@openint/connector-airtable/server'
import {default as connectorApollo_def} from '@openint/connector-apollo/def'
Expand Down Expand Up @@ -104,6 +106,11 @@ import {default as connectorYodlee_server} from '@openint/connector-yodlee/serve
import {default as connectorZohodesk_def} from '@openint/connector-zohodesk/def'
import {default as connectorZohodesk_server} from '@openint/connector-zohodesk/server'

const connectorAircall = {
...connectorAircall_def,
...connectorAircall_server,
}

const connectorAirtable = {
...connectorAirtable_def,
...connectorAirtable_server,
Expand Down Expand Up @@ -368,6 +375,7 @@ const connectorZohodesk = {
}

export const mergedConnectors = {
aircall: connectorAircall,
airtable: connectorAirtable,
apollo: connectorApollo,
beancount: connectorBeancount,
Expand Down
2 changes: 2 additions & 0 deletions apps/app-config/connectors/connectors.server.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// generated by _generateConnectorLists.ts. Do not modify by hand
import {default as connectorAircall} from '@openint/connector-aircall/server'
import {default as connectorAirtable} from '@openint/connector-airtable/server'
import {default as connectorApollo} from '@openint/connector-apollo/server'
import {default as connectorBeancount} from '@openint/connector-beancount/server'
Expand Down Expand Up @@ -52,6 +53,7 @@ import {default as connectorYodlee} from '@openint/connector-yodlee/server'
import {default as connectorZohodesk} from '@openint/connector-zohodesk/server'

export const serverConnectors = {
aircall: connectorAircall,
airtable: connectorAirtable,
apollo: connectorApollo,
beancount: connectorBeancount,
Expand Down
9 changes: 9 additions & 0 deletions apps/app-config/connectors/meta.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
// generated by _generateConnectorLists.ts. Do not modify by hand

module.exports = [
{
name: 'aircall',
dirName: 'connector-aircall',
varName: 'connectorAircall',
imports: {
def: '@openint/connector-aircall/def',
server: '@openint/connector-aircall/server',
},
},
{
name: 'airtable',
dirName: 'connector-airtable',
Expand Down
1 change: 1 addition & 0 deletions apps/app-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"dependencies": {
"@clerk/nextjs": "5.6.0",
"@openint/cdk": "workspace:*",
"@openint/connector-aircall": "workspace:*",
"@openint/connector-airtable": "workspace:*",
"@openint/connector-alphavantage": "workspace:*",
"@openint/connector-apollo": "workspace:*",
Expand Down
18 changes: 18 additions & 0 deletions apps/web/public/_assets/logo-aircall.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 33 additions & 0 deletions connectors/connector-aircall/def.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import type {ConnectorDef, ConnectorSchemas} from '@openint/cdk'
import {connHelpers, zId} from '@openint/cdk'
import {R, z} from '@openint/util'

export const AIRCALL_ENTITY_NAMES = ['call', 'contact'] as const

export const aircallSchema = {
name: z.literal('aircall'),
connectionSettings: z.object({apiId: z.string(), apiToken: z.string()}),
sourceOutputEntities: R.mapToObj(AIRCALL_ENTITY_NAMES, (e) => [
e,
z.unknown().optional(),
]),
connectOutput: z.object({
providerConfigKey: zId('ccfg'),
connectionId: zId('conn'),
}),
} satisfies ConnectorSchemas

export const aircallHelpers = connHelpers(aircallSchema)

export const aircallDef = {
name: 'aircall',
schemas: aircallSchema,
metadata: {
displayName: 'Aircall',
stage: 'beta',
verticals: ['crm'],
logoUrl: '/_assets/logo-aircall.svg',
},
} satisfies ConnectorDef<typeof aircallSchema>

export default aircallDef
4 changes: 4 additions & 0 deletions connectors/connector-aircall/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// codegen:start {preset: barrel, include: "./{*.{ts,tsx},*/index.{ts,tsx}}", exclude: "./**/*.{d,spec,test,fixture,gen,node}.{ts,tsx}"}
export * from './def'
export * from './server'
// codegen:end
12 changes: 12 additions & 0 deletions connectors/connector-aircall/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "@openint/connector-aircall",
"version": "0.0.0",
"private": true,
"module": "./index.ts",
"dependencies": {
"@openint/cdk": "workspace:*",
"@openint/util": "workspace:*",
"@opensdks/runtime": "^0.0.19",
"@opensdks/sdk-greenhouse": "^0.0.8"
}
}
65 changes: 65 additions & 0 deletions connectors/connector-aircall/server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import {initGreenhouseSDK, type greenhouseTypes} from '@opensdks/sdk-greenhouse'
import type {ConnectorServer} from '@openint/cdk'
import {type aircallSchema} from './def'

export type AircallSDK = ReturnType<typeof initGreenhouseSDK>

export type AircallTypes = greenhouseTypes

export type AircallObjectType = AircallTypes['components']['schemas']

export const aircallServer = {
newInstance: ({settings}) => {
// Aircall auth requires api_id and api_token
const aircall = initGreenhouseSDK({
auth: {
basic: {
username: `${settings.apiId}:${settings.apiToken}`,
password: '',
},
},
})
return aircall
},
postConnect: async (connectOutput, _, context) => {
// Encoding credentials:
const apiId = context.connection?.settings.apiId
const apiToken = context.connection?.settings.apiToken
const encodedCredentials = Buffer.from(`${apiId}:${apiToken}`).toString(
'base64',
)

const headers = {
Authorization: `Basic ${encodedCredentials}`,
}

try {
const response = await fetch('https://api.aircall.io/v1/ping', {
method: 'GET',
headers,
})

// Check if the response was successful
if (!response.ok) {
console.error(
`HTTP error! status: ${response.status} - ${response.statusText}`,
)
}

const body = await response.text()
console.log('Response from Aircall Ping:', body)
} catch (error) {
console.error('Error during fetch:', error)
}

return {
connectionExternalId: connectOutput.connectionId,
providerConfigKey: connectOutput.providerConfigKey,
}
},
} satisfies ConnectorServer<
typeof aircallSchema,
ReturnType<typeof initGreenhouseSDK>
>

export default aircallServer
23 changes: 23 additions & 0 deletions packages/engine-frontend/hocs/WithConnectorConnect.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,29 @@ export const WithConnectorConnect = ({
</TooltipProvider>
</div>
)}
{ccfg.connector.name === 'aircall' && (
<div className="relative inline-block">
<TooltipProvider delayDuration={0}>
<Tooltip>
<TooltipTrigger asChild>
<InfoIcon className="h-5 w-5 cursor-help text-gray-500" />
</TooltipTrigger>
<TooltipContent side="right">
<p className="max-w-[300px] italic">
Generate your API ID and Token with{' '}
<a
href="https://developer.aircall.io/tutorials/basic-authentication/"
className="font-bold underline"
target="_blank"
rel="noopener noreferrer">
these instructions
</a>{' '}
</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>
</div>
)}
</div>
</DialogTitle>
{debug && (
Expand Down
18 changes: 18 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 55d469e

Please sign in to comment.