import {z} from 'zod' export type GetApiV30ProjectsProjectIdConversationcounterArgs = {Accept?: ('application/json' | 'application/hal+json' | 'application/xml' | 'text/xml' | 'text/csv') | undefined, projectId: string, year: number, month?: number | undefined, nonConversational?: boolean | undefined, channel?: ('facebook' | 'alexa' | 'slack' | 'generic' | 'inject' | 'rest' | 'realtime' | 'socket' | 'adminconsole' | 'webchat2' | 'dialogflow' | 'twilio' | 'twilio-sms' | 'line' | 'intercom' | 'microsoftBotFramework' | 'microsoftTeams' | 'sunshineConversations' | 'admin-webchat' | 'avaya' | 'nonConversational' | 'voiceGateway2' | 'amazonLex' | 'workplace' | 'webhook' | 'abstractRest' | 'userlike' | 'ringCentralEngage' | 'audioCodes' | 'bandwidth' | 'whatsapp' | 'eightByEight' | 'genesysBotConnector' | 'niceCXOne' | 'agentAssistVoice' | 'webchat3' | 'niceCXOneAAH' | 'zoomContactCenter' | 'mcpServer') | undefined}; export type GetApiV30ProjectsProjectIdConversationcounterOptions = {baseUrl?: string | undefined, APIKeyHeader?: string | undefined, fetch?: typeof fetch | undefined}; export const getApiV30ProjectsProjectIdConversationcounterResponse = z.object({items: z.array(z.object({conversations: z.number().optional(), day: z.number().optional(), month: z.number().optional(), year: z.number().optional(), perChannel: z.array(z.object({channel: z.string().optional(), conversations: z.number().optional()})).optional()})).optional()}); 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 Conversation Counter Metrics for a Project * * GET /v3.0/projects/{projectId}/conversationcounter * * Also accepts auth: APIKeyQueryParam, CXoneTokenHeader, OAuth2 */ export const getApiV30ProjectsProjectIdConversationcounter = async (args: GetApiV30ProjectsProjectIdConversationcounterArgs, options?: GetApiV30ProjectsProjectIdConversationcounterOptions) => { const {baseUrl = "https://api-trial.cognigy.ai/testing", fetch: fetchFn = fetch, APIKeyHeader} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.Accept != null) headers.set("Accept", String(args.Accept)) if (args.year != null) query.append("year", String(args.year)) if (args.month != null) query.append("month", String(args.month)) if (args.nonConversational != null) query.append("nonConversational", String(args.nonConversational)) if (args.channel != null) query.append("channel", String(args.channel)) if (APIKeyHeader !== undefined) headers.set("X-API-Key", APIKeyHeader) const url = `${baseUrl.replace(/\/+$/, '')}/v3.0/projects/${encodeURIComponent(String(args.projectId))}/conversationcounter${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(getApiV30ProjectsProjectIdConversationcounterResponse, await res.json()) };