Files
botpress--botpress/integrations/attio/src/setup/setup.ts
T
2026-07-13 13:34:48 +08:00

77 lines
2.5 KiB
TypeScript

import * as sdk from '@botpress/sdk'
import { AttioApiClient } from '../attio-api'
import * as bp from '.botpress'
export const register: bp.IntegrationProps['register'] = async ({ ctx, client, webhookUrl, logger }) => {
try {
const accessToken = ctx.configuration.accessToken
const attioClient = new AttioApiClient(accessToken)
// Test the connection using the API client
logger.forBot().info('Testing connection to Attio...')
await attioClient.testConnection()
logger.forBot().info('Connection to Attio successful')
// Check if webhooks already exist
logger.forBot().info('Checking if webhooks already exist...')
const { state } = await client.getOrSetState({
name: 'attioIntegrationInfo',
type: 'integration',
id: ctx.integrationId,
payload: {
attioWebhookId: '',
},
})
if (!state.payload.attioWebhookId) {
logger.forBot().info('Webhooks do not exist. Creating webhooks...')
const webhookResp = await attioClient.createWebhook({
data: {
target_url: webhookUrl,
subscriptions: [
{ event_type: 'record.created', filter: null },
{ event_type: 'record.updated', filter: null },
{ event_type: 'record.deleted', filter: null },
],
},
})
const attioWebhookId = String(webhookResp.data.id.webhook_id)
await client.setState({
type: 'integration',
name: 'attioIntegrationInfo',
id: ctx.integrationId,
payload: { attioWebhookId },
})
}
logger.forBot().info('Webhooks created')
} catch (thrown) {
const error = thrown instanceof Error ? thrown : new Error(String(thrown))
throw new sdk.RuntimeError(error.message)
}
}
export const unregister: bp.IntegrationProps['unregister'] = async ({ ctx, client, logger }) => {
try {
const accessToken = ctx.configuration.accessToken
const attioClient = new AttioApiClient(accessToken)
const stateAttioIntegrationInfo = await client.getState({
id: ctx.integrationId,
name: 'attioIntegrationInfo',
type: 'integration',
})
const { state } = stateAttioIntegrationInfo
const { attioWebhookId } = state.payload
if (attioWebhookId) {
await attioClient.deleteWebhook(attioWebhookId)
logger.forBot().info('Webhook successfully deleted')
}
} catch (thrown) {
const error = thrown instanceof Error ? thrown : new Error(String(thrown))
throw new sdk.RuntimeError(error.message)
}
}