From dd16c2b99d9db7362695e18da4bc72db641738c0 Mon Sep 17 00:00:00 2001
From: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Date: Fri, 29 Aug 2025 17:42:15 +0530
Subject: [PATCH] refactor: small improvements for cal ai (#23444)
* refactor: small improvements follow up
* fix: add docs
---
apps/web/public/static/locales/en/common.json | 2 +-
.../retellAI/services/AgentService.ts | 25 ++++----------
.../components/AgentConfigurationSheet.tsx | 3 +-
packages/lib/formatPhoneNumber.ts | 2 +-
.../repository/PrismaApiKeyRepository.ts | 33 +++++++++++++++++++
.../viewer/workflows/update.handler.ts | 5 ++-
6 files changed, 47 insertions(+), 23 deletions(-)
diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json
index eacfeff2bf..4cebb6a1a5 100644
--- a/apps/web/public/static/locales/en/common.json
+++ b/apps/web/public/static/locales/en/common.json
@@ -817,7 +817,7 @@
"delete_phone_number_confirmation": "Are you sure you want to delete this phone number? This action cannot be undone.",
"yes_delete_phone_number": "Yes, delete phone number",
"phone_number_info_tooltip": "The number you are trying to import must be in E.164 format (+country code followed by the number, with no spaces or special characters), e.g. +1234567890",
- "termination_uri_info_tooltip": "The termination uri to uniquely identify your elastic SIP trunk. This is used for outbound calls. For Twilio elastic SIP trunks it always ends with .pstn.twilio.com.",
+ "termination_uri_info_tooltip": "The termination URI to uniquely identify your elastic SIP trunk. This is used for outbound calls. For Twilio elastic SIP trunks it always ends with .pstn.twilio.com.",
"sip_trunk_username_info_tooltip": "The username used to authenticate the SIP trunk.",
"sip_trunk_password_info_tooltip": "The password used to authenticate the SIP trunk.",
"nickname_info_tooltip": "Nickname of the number. This is for your reference only.",
diff --git a/packages/features/calAIPhone/providers/retellAI/services/AgentService.ts b/packages/features/calAIPhone/providers/retellAI/services/AgentService.ts
index b10c822f65..283477d20a 100644
--- a/packages/features/calAIPhone/providers/retellAI/services/AgentService.ts
+++ b/packages/features/calAIPhone/providers/retellAI/services/AgentService.ts
@@ -1,10 +1,9 @@
import { v4 as uuidv4 } from "uuid";
-import { generateUniqueAPIKey as generateHashedApiKey } from "@calcom/ee/api-keys/lib/apiKeys";
import { timeZoneSchema } from "@calcom/lib/dayjs/timeZone.schema";
import { HttpError } from "@calcom/lib/http-error";
import logger from "@calcom/lib/logger";
-import prisma from "@calcom/prisma";
+import { PrismaApiKeyRepository } from "@calcom/lib/server/repository/PrismaApiKeyRepository";
import type {
AIPhoneServiceUpdateModelParams,
@@ -27,24 +26,12 @@ export class AgentService {
) {}
private async createApiKey({ userId, teamId }: { userId: number; teamId?: number }) {
- const [hashedApiKey, apiKey] = generateHashedApiKey();
- await prisma.apiKey.create({
- data: {
- id: uuidv4(),
- userId,
- teamId,
- // And here we pass a null to expiresAt if never expires is true
- expiresAt: null,
- hashedKey: hashedApiKey,
- note: `Cal AI Phone API Key for agent ${userId} ${teamId ? `for team ${teamId}` : ""}`,
- },
+ return await PrismaApiKeyRepository.createApiKey({
+ userId,
+ teamId,
+ expiresAt: null,
+ note: `Cal AI Phone API Key for agent ${userId} ${teamId ? `for team ${teamId}` : ""}`,
});
-
- const apiKeyPrefix = process.env.API_KEY_PREFIX ?? "cal_";
-
- const prefixedApiKey = `${apiKeyPrefix}${apiKey}`;
-
- return prefixedApiKey;
}
async getAgent(agentId: string): Promise