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> { diff --git a/packages/features/ee/workflows/components/AgentConfigurationSheet.tsx b/packages/features/ee/workflows/components/AgentConfigurationSheet.tsx index b919485c4a..f2404c9408 100644 --- a/packages/features/ee/workflows/components/AgentConfigurationSheet.tsx +++ b/packages/features/ee/workflows/components/AgentConfigurationSheet.tsx @@ -934,12 +934,13 @@ export function AgentConfigurationSheet({ {t("learn_how_to_get_your_terminator")}

- {/*TODO: Create a doc and link to it */} diff --git a/packages/lib/formatPhoneNumber.ts b/packages/lib/formatPhoneNumber.ts index 0c3c89be09..1fcf66110c 100644 --- a/packages/lib/formatPhoneNumber.ts +++ b/packages/lib/formatPhoneNumber.ts @@ -1,4 +1,4 @@ -import { parsePhoneNumberWithError } from "libphonenumber-js"; +import { parsePhoneNumberWithError } from "libphonenumber-js/max"; export const formatPhoneNumber = (phoneNumber: string) => { const parsedPhoneNumber = parsePhoneNumberWithError(phoneNumber); diff --git a/packages/lib/server/repository/PrismaApiKeyRepository.ts b/packages/lib/server/repository/PrismaApiKeyRepository.ts index 9e2da8dfa1..11382f8d26 100644 --- a/packages/lib/server/repository/PrismaApiKeyRepository.ts +++ b/packages/lib/server/repository/PrismaApiKeyRepository.ts @@ -1,3 +1,6 @@ +import { v4 as uuidv4 } from "uuid"; + +import { generateUniqueAPIKey as generateHashedApiKey } from "@calcom/ee/api-keys/lib/apiKeys"; import prisma from "@calcom/prisma"; export class PrismaApiKeyRepository { @@ -25,4 +28,34 @@ export class PrismaApiKeyRepository { return true; }); } + + static async createApiKey({ + userId, + teamId, + note, + expiresAt, + }: { + userId: number; + teamId?: number; + note?: string; + expiresAt?: Date | null; + }) { + const [hashedApiKey, apiKey] = generateHashedApiKey(); + await prisma.apiKey.create({ + data: { + id: uuidv4(), + userId, + teamId, + expiresAt, + hashedKey: hashedApiKey, + note: note, + }, + }); + + const apiKeyPrefix = process.env.API_KEY_PREFIX ?? "cal_"; + + const prefixedApiKey = `${apiKeyPrefix}${apiKey}`; + + return prefixedApiKey; + } } diff --git a/packages/trpc/server/routers/viewer/workflows/update.handler.ts b/packages/trpc/server/routers/viewer/workflows/update.handler.ts index 50aab6dc7e..ae36040444 100755 --- a/packages/trpc/server/routers/viewer/workflows/update.handler.ts +++ b/packages/trpc/server/routers/viewer/workflows/update.handler.ts @@ -803,7 +803,10 @@ export const updateHandler = async ({ ctx, input }: UpdateOptions) => { if (externalToolErrors.length > 0) { log.error(`Agent tool update errors for workflow ${id}:`, externalToolErrors); - throw new Error(`${externalToolErrors.join("; ")}`); + throw new TRPCError({ + code: "INTERNAL_SERVER_ERROR", + message: externalToolErrors.join("; "), + }); } }