Skip to main content
Glama
UpdateOrchestrator.ts3.27 kB
/** * UpdateOrchestrator - Strategy pattern orchestration for updates * * Extracted from UniversalUpdateService to separate concerns. * Delegates to resource-specific update strategies. * * @see Issue #984 - Modularize UniversalUpdateService (831→220 lines) */ import { UniversalResourceType } from '@/handlers/tool-configs/universal/types.js'; import type { AttioRecord } from '@/types/attio.js'; import { debug } from '@/utils/logger.js'; /** * Context for update orchestration */ export interface UpdateContext { /** Resource type being updated */ resourceType: UniversalResourceType; /** ID of the record to update */ recordId: string; /** Sanitized values to update */ sanitizedValues: Record<string, unknown>; /** Optional object slug for records/deals */ objectSlug?: string; } /** * UpdateOrchestrator - Delegates updates to resource-specific strategies */ export class UpdateOrchestrator { /** * Dispatch update to appropriate strategy based on resource type * * @param context - Update context with resource type, record ID, values, and options * @returns Updated record from Attio API * @throws Error if resource type is unsupported */ static async executeUpdate(context: UpdateContext): Promise<AttioRecord> { const { resourceType, recordId, sanitizedValues, objectSlug } = context; debug('UpdateOrchestrator', 'Dispatching update', { resourceType, recordId, objectSlug, fieldCount: Object.keys(sanitizedValues).length, }); switch (resourceType) { case UniversalResourceType.COMPANIES: { const { CompanyUpdateStrategy } = await import( './strategies/CompanyUpdateStrategy.js' ); return new CompanyUpdateStrategy().update( recordId, sanitizedValues, resourceType ); } case UniversalResourceType.LISTS: { const { ListUpdateStrategy } = await import( './strategies/ListUpdateStrategy.js' ); return new ListUpdateStrategy().update( recordId, sanitizedValues, resourceType ); } case UniversalResourceType.PEOPLE: { const { PersonUpdateStrategy } = await import( './strategies/PersonUpdateStrategy.js' ); return new PersonUpdateStrategy().update( recordId, sanitizedValues, resourceType ); } case UniversalResourceType.RECORDS: case UniversalResourceType.DEALS: { const { RecordUpdateStrategy } = await import( './strategies/RecordUpdateStrategy.js' ); return new RecordUpdateStrategy().update( recordId, sanitizedValues, resourceType, { objectSlug: objectSlug || 'records' } ); } case UniversalResourceType.TASKS: { const { TaskUpdateStrategy } = await import( './strategies/TaskUpdateStrategy.js' ); return new TaskUpdateStrategy().update( recordId, sanitizedValues, resourceType ); } default: { throw new Error( `Unsupported resource type for update: ${resourceType}` ); } } } }

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