* 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>
59 lines
2.2 KiB
TypeScript
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
|
|
);
|
|
}
|
|
}
|