import { airtableTriggerDefinitions as triggerDefinitions } from "@automate.ax/catalog/triggers/airtable" import { type IntegrationAccountReference } from "../../automation/integrations" import { createTrigger } from "../../automation/create-trigger" /** Options shared by Airtable base-wide and schema triggers. */ export interface AirtableBaseTriggerOptions { /** Airtable account binding that can access and manage webhooks for the base. */ account?: string | IntegrationAccountReference<"airtable"> /** Stable Airtable base ID. */ baseId: string } /** Options shared by Airtable table record triggers. */ export interface AirtableTableTriggerOptions { /** Airtable account binding that can access and manage webhooks for the base. */ account?: string | IntegrationAccountReference<"airtable"> /** Stable Airtable base ID. */ baseId: string /** Stable Airtable table ID. */ tableId: string } /** Options shared by Airtable view membership triggers. */ export interface AirtableViewTriggerOptions { /** Airtable account binding that can access and manage webhooks for the base. */ account?: string | IntegrationAccountReference<"airtable"> /** Stable Airtable base ID. */ baseId: string /** Stable Airtable view ID. */ viewId: string } /** Starts an automation for every data, field, or table transaction in a base. */ export const onAirtableBaseEvent = createTrigger( triggerDefinitions.airtableBaseEvent, baseTriggerConfig, ) /** Starts an automation when Airtable creates a table in a base. */ export const onAirtableTableCreated = createTrigger( triggerDefinitions.airtableTableCreated, baseTriggerConfig, ) /** Starts an automation when Airtable updates a table's metadata. */ export const onAirtableTableUpdated = createTrigger( triggerDefinitions.airtableTableUpdated, baseTriggerConfig, ) /** Starts an automation when Airtable deletes a table from a base. */ export const onAirtableTableDeleted = createTrigger( triggerDefinitions.airtableTableDeleted, baseTriggerConfig, ) /** Starts an automation when Airtable creates a field in a base. */ export const onAirtableFieldCreated = createTrigger( triggerDefinitions.airtableFieldCreated, baseTriggerConfig, ) /** Starts an automation when Airtable updates a field definition. */ export const onAirtableFieldUpdated = createTrigger( triggerDefinitions.airtableFieldUpdated, baseTriggerConfig, ) /** Starts an automation when Airtable deletes a field from a base. */ export const onAirtableFieldDeleted = createTrigger( triggerDefinitions.airtableFieldDeleted, baseTriggerConfig, ) /** * Starts an automation when Airtable creates a record in one table. * * @param options - Static Airtable account, base, and table selection. */ export const onAirtableRecordCreated = createTrigger( triggerDefinitions.airtableRecordCreated, (options: AirtableTableTriggerOptions) => ({ account: options.account, baseId: options.baseId, scopeId: options.tableId, scopeType: "table", }), ) /** * Starts an automation when Airtable updates a record in one table. * * @param options - Static Airtable account, base, and table selection. */ export const onAirtableRecordUpdated = createTrigger( triggerDefinitions.airtableRecordUpdated, (options: AirtableTableTriggerOptions) => ({ account: options.account, baseId: options.baseId, scopeId: options.tableId, scopeType: "table", }), ) /** * Starts an automation when Airtable deletes a record from one table. * * @param options - Static Airtable account, base, and table selection. */ export const onAirtableRecordDeleted = createTrigger( triggerDefinitions.airtableRecordDeleted, (options: AirtableTableTriggerOptions) => ({ account: options.account, baseId: options.baseId, scopeId: options.tableId, scopeType: "table", }), ) /** * Starts an automation when a record becomes visible in one Airtable view. * * @param options - Static Airtable account, base, and view selection. */ export const onAirtableRecordMovedIntoView = createTrigger( triggerDefinitions.airtableRecordMovedIntoView, (options: AirtableViewTriggerOptions) => ({ account: options.account, baseId: options.baseId, scopeId: options.viewId, scopeType: "view", }), ) /** * Starts an automation when a record stops being visible in one Airtable view. * * @param options - Static Airtable account, base, and view selection. */ export const onAirtableRecordMovedOutOfView = createTrigger( triggerDefinitions.airtableRecordMovedOutOfView, (options: AirtableViewTriggerOptions) => ({ account: options.account, baseId: options.baseId, scopeId: options.viewId, scopeType: "view", }), ) /** * Maps author-facing base trigger options to the provider source scope. * * @param options - Static Airtable account and base selection. */ function baseTriggerConfig(options: AirtableBaseTriggerOptions) { return { account: options.account, baseId: options.baseId, scopeId: options.baseId, scopeType: "base" as const, } }