import {z} from 'zod' export type GetApiV2PearlPearlIdSettingsArgs = {pearlId: string}; export type GetApiV2PearlPearlIdSettingsOptions = {baseUrl?: string | undefined, bearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const eProjectType = z.number().int(); export const eAgentInteractionType = z.number().int(); export const eDataSettingsGroup = z.number().int(); export const eStateDataType = z.number().int(); export const optionChoice = z.object({value: z.string().nullable().optional(), code: z.string().nullable().optional()}); export const dataSettingsApiView = z.object({id: z.string().nullable().optional(), name: z.string().nullable().optional(), group: eDataSettingsGroup.optional(), type: eStateDataType.optional(), isList: z.boolean().optional(), description: z.string().nullable().optional(), value: z.string().nullable().optional(), options: z.array(optionChoice).nullable().optional(), required: z.boolean().optional(), readOnly: z.boolean().optional()}); export const agentConfigToAddApi = z.object({name: z.string().nullable().optional(), voiceId: z.string().nullable().optional()}); export const eBrainModelType = z.number().int(); export const vocabularyEntry = z.object({word: z.string().nullable().optional(), pronunciations: z.array(z.string()).nullable().optional()}); export const transferCallSettingsApi = z.object({transferCallPhoneNumber: z.string().nullable().optional(), triggerDescription: z.string().nullable().optional(), warmTransferMessage: z.string().nullable().optional()}); export const sMSTemplateApi = z.object({body: z.string().nullable().optional(), triggerDescription: z.string().nullable().optional()}); export const emailProvider = z.number().int(); export const smtpSettings = z.object({id: z.string().nullable().optional(), provider: emailProvider.nullable().optional(), smtpServer: z.string().nullable().optional(), port: z.number().int().nullable().optional(), enableSsl: z.boolean().nullable().optional(), senderEmail: z.string().nullable().optional(), senderPassword: z.string().nullable().optional(), displayName: z.string().nullable().optional()}); export const emailTemplateApi = z.object({subject: z.string().nullable().optional(), body: z.string().nullable().optional(), triggerDescription: z.string().nullable().optional(), smtpSettings: smtpSettings.nullable().optional()}); export const aPIMethod = z.number().int(); export const aPIDataSchemaPropertyApi = z.object({key: z.string().nullable().optional(), variableId: z.string().nullable().optional(), type: eStateDataType.nullable().optional(), value: z.string().nullable().optional(), required: z.boolean().optional()}); export const aPISettingsApi = z.object({name: z.string().nullable().optional(), method: aPIMethod.optional(), endpointUrl: z.string().nullable().optional(), body: z.array(aPIDataSchemaPropertyApi).nullable().optional(), headers: z.record(z.string(), z.string()).nullable().optional(), triggerDescription: z.string().nullable().optional(), description: z.string().nullable().optional(), outputBody: z.array(aPIDataSchemaPropertyApi).nullable().optional(), credentialId: z.string().nullable().optional()}); export const ePredefinedCallLabelColors = z.number().int(); export const callLabelApi = z.object({id: z.string().nullable().optional(), name: z.string().nullable().optional(), description: z.string().nullable().optional(), color: ePredefinedCallLabelColors.optional()}); export const emailEndCallTemplateApi = z.object({to: z.array(z.string()).nullable().optional(), cc: z.array(z.string()).nullable().optional(), subject: z.string().nullable().optional(), body: z.string().nullable().optional(), triggerDescription: z.string().nullable().optional(), smtpSettings: smtpSettings.nullable().optional()}); export const callEndNotificationApi = z.object({apiSettings: aPISettingsApi.nullable().optional(), emailTemplate: emailEndCallTemplateApi.nullable().optional(), indicatorTagsIds: z.array(z.string()).nullable().optional()}); export const pearlSettingsApi = z.object({agents: z.array(agentConfigToAddApi).nullable().optional(), agentPersonality: z.string().nullable().optional(), timeZone: z.string().nullable().optional(), modelType: eBrainModelType.nullable().optional(), companyName: z.string().nullable().optional(), companyDescription: z.string().nullable().optional(), knowledgeBase: z.string().nullable().optional(), memory: z.boolean().nullable().optional(), speechRecognitionKeywords: z.array(vocabularyEntry).nullable().optional(), openingSentence: z.string().nullable().optional(), flowScript: z.string().nullable().optional(), transferCallSettings: z.array(transferCallSettingsApi).nullable().optional(), smsSettings: z.array(sMSTemplateApi).nullable().optional(), emailSettings: z.array(emailTemplateApi).nullable().optional(), apiSettings: z.array(aPISettingsApi).nullable().optional(), successDescription: z.string().nullable().optional(), indicatorTags: z.array(callLabelApi).nullable().optional(), notifications: z.array(callEndNotificationApi).nullable().optional()}); export const eTranscriptOptions = z.number().int(); export const inboundVoiceSettingsApi = z.object({totalAgents: z.number().int().optional(), transcriptOptions: eTranscriptOptions.optional(), callWebhookUrl: z.string().nullable().optional(), phoneNumberId: z.string().nullable().optional(), recordingOptions: z.boolean().optional(), isStopRecordingAfterTransferCall: z.boolean().nullable().optional(), waitingSentence: z.string().nullable().optional(), isSayQueueDetails: z.boolean().optional()}); export const dayOfWeek = z.number().int(); export const dayWorkingHours = z.object({day: dayOfWeek.optional(), start: z.string().optional(), end: z.string().optional()}); export const eRecordingTrack = z.number().int(); export const eMinimumRetryIntervalHours = z.number().int(); export const outboundVoiceSettingsApi = z.object({totalAgents: z.number().int().optional(), transcriptOptions: eTranscriptOptions.optional(), budgetTotal: z.number().int().nullable().optional(), timeZone: z.string().nullable().optional(), callingHours: z.array(dayWorkingHours).nullable().optional(), callWebhookUrl: z.string().nullable().optional(), leadWebhookUrl: z.string().nullable().optional(), phoneNumberId: z.string().nullable().optional(), recordingTrack: eRecordingTrack.optional(), isStopRecordingAfterTransferCall: z.boolean().nullable().optional(), maximumCallAttempts: z.number().int().optional(), minimumRetryIntervalHours: eMinimumRetryIntervalHours.optional(), voiceMail: z.string().nullable().optional(), bypassIVRInstruction: z.string().nullable().optional(), ringDuration: z.number().int().nullable().optional(), callTimeout: z.number().int().nullable().optional()}); export const simplePearlFlowApiView = z.object({name: z.string().nullable().optional(), type: eProjectType.optional(), agentType: eAgentInteractionType.optional(), variables: z.array(dataSettingsApiView).nullable().optional(), pearl: pearlSettingsApi.nullable().optional(), inbound: inboundVoiceSettingsApi.nullable().optional(), outbound: outboundVoiceSettingsApi.nullable().optional()}); export const eNodeTypeApi = z.number().int(); export const eTransitionApiResult = z.number().int(); export const transitionApi = z.object({name: z.string().nullable().optional(), toNodeId: z.string().nullable().optional(), apiResult: eTransitionApiResult.nullable().optional()}); export const nodeAPISettingsApi = z.object({name: z.string().nullable().optional(), method: aPIMethod.optional(), endpointUrl: z.string().nullable().optional(), body: z.array(aPIDataSchemaPropertyApi).nullable().optional(), headers: z.record(z.string(), z.string()).nullable().optional(), description: z.string().nullable().optional(), outputBody: z.array(aPIDataSchemaPropertyApi).nullable().optional(), credentialId: z.string().nullable().optional()}); export const nodeSMSTemplateApi = z.object({body: z.string().nullable().optional()}); export const nodeEmailTemplateApi = z.object({to: z.array(z.string()).nullable().optional(), cc: z.array(z.string()).nullable().optional(), subject: z.string().nullable().optional(), body: z.string().nullable().optional(), smtpSettings: smtpSettings.nullable().optional()}); export const nodeApi: z.ZodType = z.object({nodeId: z.string().nullable().optional(), name: z.string().nullable().optional(), nodeType: eNodeTypeApi.optional(), transitions: z.array(transitionApi).nullable().optional(), script: z.string().nullable().optional(), instructions: z.string().nullable().optional(), apiSettings: nodeAPISettingsApi.nullable().optional(), smsSettings: nodeSMSTemplateApi.nullable().optional(), emailSettings: nodeEmailTemplateApi.nullable().optional(), transferCallSettings: transferCallSettingsApi.nullable().optional(), handOffAction: z.array(z.lazy(() => nodeApi)).nullable().optional(), postCallActions: z.array(z.lazy(() => nodeApi)).nullable().optional()}); export const advancedVoicePearlApi = z.object({agentPersonality: z.string().nullable().optional(), timeZone: z.string().nullable().optional(), modelType: eBrainModelType.nullable().optional(), companyName: z.string().nullable().optional(), companyDescription: z.string().nullable().optional(), generalInstructions: z.string().nullable().optional(), knowledgeBase: z.string().nullable().optional(), memory: z.boolean().nullable().optional(), successDescription: z.string().nullable().optional(), indicatorTags: z.array(callLabelApi).nullable().optional(), nodes: z.array(nodeApi).nullable().optional(), agents: z.array(agentConfigToAddApi).nullable().optional(), speechRecognitionKeywords: z.array(vocabularyEntry).nullable().optional()}); export const advancedVoicePearlFlowApiView = z.object({name: z.string().nullable().optional(), type: eProjectType.optional(), agentType: eAgentInteractionType.optional(), variables: z.array(dataSettingsApiView).nullable().optional(), pearl: advancedVoicePearlApi.nullable().optional(), inbound: inboundVoiceSettingsApi.nullable().optional(), outbound: outboundVoiceSettingsApi.nullable().optional()}); export const advancedTextPearlApi = z.object({agentPersonality: z.string().nullable().optional(), timeZone: z.string().nullable().optional(), modelType: eBrainModelType.nullable().optional(), companyName: z.string().nullable().optional(), companyDescription: z.string().nullable().optional(), generalInstructions: z.string().nullable().optional(), knowledgeBase: z.string().nullable().optional(), memory: z.boolean().nullable().optional(), successDescription: z.string().nullable().optional(), indicatorTags: z.array(callLabelApi).nullable().optional(), nodes: z.array(nodeApi).nullable().optional(), agentName: z.string().nullable().optional()}); export const inactivityFollowUp = z.object({delayMinutes: z.number().int().optional(), message: z.string().nullable().optional()}); export const inboundTextSettingsApi = z.object({totalAgents: z.number().int().optional(), transcriptOptions: eTranscriptOptions.optional(), callWebhookUrl: z.string().nullable().optional(), textChannelId: z.string().nullable().optional(), maxTurns: z.number().int().nullable().optional(), autoCloseAfterInactivityHours: z.number().int().nullable().optional(), inactivityFollowUps: z.array(inactivityFollowUp).nullable().optional()}); export const outboundTextSettingsApi = z.object({totalAgents: z.number().int().optional(), transcriptOptions: eTranscriptOptions.optional(), budgetTotal: z.number().int().nullable().optional(), timeZone: z.string().nullable().optional(), callingHours: z.array(dayWorkingHours).nullable().optional(), callWebhookUrl: z.string().nullable().optional(), leadWebhookUrl: z.string().nullable().optional(), textChannelId: z.string().nullable().optional(), maxTurns: z.number().int().nullable().optional(), autoCloseAfterInactivityHours: z.number().int().nullable().optional(), inactivityFollowUps: z.array(inactivityFollowUp).nullable().optional()}); export const advancedTextPearlFlowApiView = z.object({name: z.string().nullable().optional(), type: eProjectType.optional(), agentType: eAgentInteractionType.optional(), variables: z.array(dataSettingsApiView).nullable().optional(), pearl: advancedTextPearlApi.nullable().optional(), inbound: inboundTextSettingsApi.nullable().optional(), outbound: outboundTextSettingsApi.nullable().optional()}); export const getApiV2PearlPearlIdSettingsResponse = z.union([simplePearlFlowApiView, advancedVoicePearlFlowApiView, advancedTextPearlFlowApiView]); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get Pearl Settings * * GET /v2/Pearl/{pearlId}/Settings */ export const getApiV2PearlPearlIdSettings = async (args: GetApiV2PearlPearlIdSettingsArgs, options?: GetApiV2PearlPearlIdSettingsOptions) => { const {baseUrl = "https://api.nlpearl.ai", fetch: fetchFn = fetch, bearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (bearerAuth !== undefined) headers.set('authorization', `Bearer ${bearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/v2/Pearl/${encodeURIComponent(String(args.pearlId))}/Settings${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiV2PearlPearlIdSettingsResponse, await res.json()) };