Files
calendar/packages/features/calAIPhone/providers/retellAI/RetellAIPhoneServiceProviderFactory.ts
T
02c86d0268 feat: cal ai self serve architecture #1 (#22919)
* feat: cal ai self serve architecture

* chore: add package

* chore: update evnet controller

* refactor: improvements

* chore: rename

* chore: type error and naming

* chore: just set it to nul

* chore: just set it to nul

* chore: some more improvements

* chore: packate version

* fix: API v2

* chore: change name of files

* chore: add select

* chore: add missing teamId

* chore: save progress

* refactor: split into multiple services

* refactor: make schema provider agonistic

* chore: improvements

* chore:

* chore: remove duplicate files

* chore: semicolon

* chore: formatting

* refactor: logging and error handling

* chore: rename variable

* refactor: use trpc error

* chore: replace with HttpError

* chore: remove from option

* We need the enum and not just the type

---------

Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
2025-08-08 15:57:13 +00:00

59 lines
2.2 KiB
TypeScript

import logger from "@calcom/lib/logger";
import type {
AIPhoneServiceProvider,
AIPhoneServiceProviderFactory,
AIPhoneServiceProviderConfig,
AIPhoneServiceProviderType,
} from "../../interfaces/AIPhoneService.interface";
import { PrismaAgentRepositoryAdapter } from "../adapters/PrismaAgentRepositoryAdapter";
import { PrismaPhoneNumberRepositoryAdapter } from "../adapters/PrismaPhoneNumberRepositoryAdapter";
import { PrismaTransactionAdapter } from "../adapters/PrismaTransactionAdapter";
import { RetellAIPhoneServiceProvider } from "./RetellAIPhoneServiceProvider";
import { RetellSDKClient } from "./RetellSDKClient";
export class RetellAIPhoneServiceProviderFactory
implements AIPhoneServiceProviderFactory<AIPhoneServiceProviderType.RETELL_AI>
{
create(config: AIPhoneServiceProviderConfig): AIPhoneServiceProvider<AIPhoneServiceProviderType.RETELL_AI> {
const log =
config.enableLogging !== false
? logger.getSubLogger({ prefix: ["RetellAIPhoneServiceProvider:"] })
: undefined;
const sdkClient = new RetellSDKClient(log);
const agentRepository = new PrismaAgentRepositoryAdapter();
const phoneNumberRepository = new PrismaPhoneNumberRepositoryAdapter();
const transactionManager = new PrismaTransactionAdapter();
return new RetellAIPhoneServiceProvider(
sdkClient,
agentRepository,
phoneNumberRepository,
transactionManager
);
}
static createWithConfig(config?: {
enableLogging?: boolean;
logger?: ReturnType<typeof logger.getSubLogger>;
}): AIPhoneServiceProvider<AIPhoneServiceProviderType.RETELL_AI> {
const enableLogging = config?.enableLogging ?? true;
const log = enableLogging
? config?.logger || logger.getSubLogger({ prefix: ["RetellAIPhoneServiceProvider:"] })
: undefined;
const sdkClient = new RetellSDKClient(log);
const agentRepository = new PrismaAgentRepositoryAdapter();
const phoneNumberRepository = new PrismaPhoneNumberRepositoryAdapter();
const transactionManager = new PrismaTransactionAdapter();
return new RetellAIPhoneServiceProvider(
sdkClient,
agentRepository,
phoneNumberRepository,
transactionManager
);
}
}