Skip to main content
Glama
DealCreateStrategy.ts2.47 kB
import type { AttioRecord } from '../../../types/attio.js'; import type { CreateStrategy, CreateStrategyParams, } from './BaseCreateStrategy.js'; import { applyDealDefaultsWithValidation, validateDealInput, } from '../../../config/deal-defaults.js'; import { convertAttributeFormats } from '../../../utils/attribute-format-helpers.js'; import { createObjectRecord as createObjectRecordApi } from '../../../objects/records/index.js'; import { getDealDefaults } from '../../../config/deal-defaults.js'; import { debug } from '../../../utils/logger.js'; export class DealCreateStrategy implements CreateStrategy { async create(params: CreateStrategyParams): Promise<AttioRecord> { let dealData = { ...(params.values as Record<string, unknown>) }; // Run input validation for warnings/suggestions parity (non-blocking) try { validateDealInput(dealData); } catch { // Validation warnings are non-blocking, continue with creation } // Apply format conversions (transforms associated_company string to proper array format) dealData = convertAttributeFormats('deals', dealData); // Validate + apply configured defaults (proactive stage validation) const dealValidation = await applyDealDefaultsWithValidation( dealData, false ); dealData = dealValidation.dealData; // Log validation warnings for debugging (create operations are less strict about user warnings) if (dealValidation.warnings.length > 0) { debug('DealCreateStrategy', 'Deal validation warnings during create', { warnings: dealValidation.warnings, }); } try { return (await createObjectRecordApi( 'deals', dealData )) as unknown as AttioRecord; } catch (error: unknown) { const msg = error instanceof Error ? error.message : String(error); // Retry with default stage if stage validation still fails if (msg.includes('Cannot find Status') && dealData['stage']) { const defaults = getDealDefaults(); let fallback = { ...dealData }; // assign default if provided in config if (defaults.stage) fallback['stage'] = defaults.stage; // Apply format conversions to fallback data as well fallback = convertAttributeFormats('deals', fallback); return (await createObjectRecordApi( 'deals', fallback )) as unknown as AttioRecord; } throw error; } } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kesslerio/attio-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server