import { integrationScope as scope } from "../types" import type { IntegrationAccountRequirement, IntegrationScopeRequirement, TriggerDefinition, } from "../types" /** * Builds equivalent OAuth and personal-access-token trigger requirements. * * @param requiredScope - Least-privilege provider scope expression. */ function airtableAccount( requiredScope: IntegrationScopeRequirement, ): IntegrationAccountRequirement<"airtable"> { return { connectionOptions: [ { connectionMethodId: "oauth", requiredScopes: [requiredScope], }, { connectionMethodId: "personal-access-token", requiredScopes: [requiredScope], }, ], serviceId: "airtable", } } const AIRTABLE_RECORD_ACCOUNT = airtableAccount( scope.and("data.records:read", "webhook:manage"), ) const AIRTABLE_SCHEMA_ACCOUNT = airtableAccount( scope.and("schema.bases:read", "webhook:manage"), ) const AIRTABLE_BASE_EVENT_ACCOUNT = airtableAccount( scope.and("data.records:read", "schema.bases:read", "webhook:manage"), ) export const airtableTriggerDefinitions = { airtableBaseEvent: { account: AIRTABLE_BASE_EVENT_ACCOUNT, type: "airtable.base.event", }, airtableFieldCreated: { account: AIRTABLE_SCHEMA_ACCOUNT, type: "airtable.field.created", }, airtableFieldDeleted: { account: AIRTABLE_SCHEMA_ACCOUNT, type: "airtable.field.deleted", }, airtableFieldUpdated: { account: AIRTABLE_SCHEMA_ACCOUNT, type: "airtable.field.updated", }, airtableRecordCreated: { account: AIRTABLE_RECORD_ACCOUNT, type: "airtable.record.created", }, airtableRecordDeleted: { account: AIRTABLE_RECORD_ACCOUNT, type: "airtable.record.deleted", }, airtableRecordMovedIntoView: { account: AIRTABLE_RECORD_ACCOUNT, type: "airtable.record.movedIntoView", }, airtableRecordMovedOutOfView: { account: AIRTABLE_RECORD_ACCOUNT, type: "airtable.record.movedOutOfView", }, airtableRecordUpdated: { account: AIRTABLE_RECORD_ACCOUNT, type: "airtable.record.updated", }, airtableTableCreated: { account: AIRTABLE_SCHEMA_ACCOUNT, type: "airtable.table.created", }, airtableTableDeleted: { account: AIRTABLE_SCHEMA_ACCOUNT, type: "airtable.table.deleted", }, airtableTableUpdated: { account: AIRTABLE_SCHEMA_ACCOUNT, type: "airtable.table.updated", }, } as const satisfies Record