Files
2026-07-13 13:34:48 +08:00

143 lines
3.9 KiB
TypeScript

import { z, IntegrationDefinition } from '@botpress/sdk'
import {
createRecordInputSchema,
createRecordOutputSchema,
createTableInputSchema,
createTableOutputSchema,
getTableRecordsInputSchema,
getTableRecordsOutputSchema,
updateRecordInputSchema,
updateRecordOutputSchema,
updateTableInputSchema,
updateTableOutputSchema,
listRecordsInputSchema,
listRecordsOutputSchema,
} from './src/misc/custom-schemas'
export default new IntegrationDefinition({
name: 'airtable',
title: 'Airtable',
description:
'Access and manage Airtable data to allow your chatbot to retrieve details, update records, and organize information.',
version: '3.0.2',
readme: 'hub.md',
icon: 'icon.svg',
configuration: {
identifier: {
linkTemplateScript: 'linkTemplate.vrl',
},
schema: z.object({}),
},
channels: {},
user: {
tags: {},
},
actions: {
getTableRecords: {
title: 'Get Table Records',
description: 'Get Records of the Table',
input: {
schema: getTableRecordsInputSchema,
},
output: {
schema: getTableRecordsOutputSchema,
},
},
createTable: {
title: 'Create Table',
description: 'Creates a new table and returns the schema for the newly created table.',
input: {
schema: createTableInputSchema,
},
output: {
schema: createTableOutputSchema,
},
},
updateTable: {
title: 'Update Table',
description: 'Updates the name, description, and/or date dependency settings of a table.',
input: {
schema: updateTableInputSchema,
},
output: {
schema: updateTableOutputSchema,
},
},
createRecord: {
title: 'Create Record',
description: 'Create a record',
input: {
schema: createRecordInputSchema,
},
output: {
schema: createRecordOutputSchema,
},
},
updateRecord: {
title: 'Update Record',
description: 'Updates a single record.',
input: {
schema: updateRecordInputSchema,
},
output: {
schema: updateRecordOutputSchema,
},
},
listRecords: {
title: 'List Records',
description: 'List records in a table.',
input: {
schema: listRecordsInputSchema,
},
output: {
schema: listRecordsOutputSchema,
},
},
},
events: {},
states: {
oAuthCredentials: {
type: 'integration',
schema: z.object({
accessToken: z.string().secret().describe('The OAuth access token'),
refreshToken: z.string().secret().describe('The rotating OAuth refresh token'),
expiresAt: z.string().datetime().describe('The timestamp of when the access token expires'),
refreshExpiresAt: z.string().datetime().describe('The timestamp of when the refresh token expires'),
scopes: z.array(z.string()).describe('The scopes granted to the token'),
}),
},
manualCredentials: {
type: 'integration',
schema: z.object({
personalAccessToken: z.string().secret().describe('The Airtable Personal Access Token'),
}),
},
oauthPkce: {
type: 'integration',
schema: z.object({
codeVerifier: z.string().describe('The PKCE code verifier paired with the in-flight authorization request'),
createdAt: z.string().datetime().describe('The timestamp of when the code verifier was issued'),
}),
},
configuration: {
type: 'integration',
schema: z.object({
baseId: z.string().describe('The selected Airtable base ID'),
endpointUrl: z.string().optional().describe('Optional override for the Airtable API endpoint'),
}),
},
},
secrets: {
CLIENT_ID: {
description: 'The client ID of the Airtable OAuth app.',
},
CLIENT_SECRET: {
description: 'The client secret of the Airtable OAuth app.',
},
},
attributes: {
category: 'Project Management',
repo: 'botpress',
},
})