import {z} from 'zod' export type GetApiBetaConversationsConversationIdActivitylogArgs = {conversationId: number}; export type GetApiBetaConversationsConversationIdActivitylogOptions = {baseUrl?: string | undefined, ApiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const conversationAssignedActivityType = z.object({}); export const conversationAutoreplySentActivityType = z.object({}); export const conversationClaimedActivityType = z.object({}); export const conversationClosedActivityType = z.object({}); export const conversationCreatedByAgentActivityType = z.object({}); export const conversationCreatedByCustomerActivityType = z.object({}); export const conversationEndUserReplacedActivityType = z.object({}); export const conversationLanguageUpdatedActivityType = z.object({}); export const conversationOfferAcceptedActivityType = z.object({}); export const conversationOfferRejectedActivityType = z.object({}); export const conversationOfferTimeoutActivityType = z.object({}); export const conversationOfferedActivityType = z.object({}); export const conversationPendingActivityType = z.object({}); export const conversationRatedActivityType = z.object({}); export const conversationRatingCancelledActivityType = z.object({}); export const conversationRatingOfferedActivityType = z.object({}); export const conversationRatingScheduledActivityType = z.object({}); export const conversationRatingUnscheduledActivityType = z.object({}); export const conversationReopenedActivityType = z.object({}); export const conversationReservedType = z.object({}); export const conversationTranscriptionEndedActivityType = z.object({}); export const conversationTranscriptionStartedActivityType = z.object({}); export const conversationUnassignedActivityType = z.object({}); export const followupAddedActivityType = z.object({}); export const followupExpiredActivityType = z.object({}); export const followupRemovedActivityType = z.object({}); export const messageAddedByAgentActivityType = z.object({}); export const messageAddedByCustomerActivityType = z.object({}); export const noteAddedActivityType = z.object({}); export const tagAddedActivityType = z.object({}); export const tagRemovedActivityType = z.object({}); export const transferFailedActivityType = z.object({}); export const transferInitiatedActivityType = z.object({}); export const transferSuccessfulActivityType = z.object({}); export const unknownActivityType = z.object({}); export const deprecatedActivityLogType = z.union([conversationAssignedActivityType, conversationAutoreplySentActivityType, conversationClaimedActivityType, conversationClosedActivityType, conversationCreatedByAgentActivityType, conversationCreatedByCustomerActivityType, conversationEndUserReplacedActivityType, conversationLanguageUpdatedActivityType, conversationOfferAcceptedActivityType, conversationOfferRejectedActivityType, conversationOfferTimeoutActivityType, conversationOfferedActivityType, conversationPendingActivityType, conversationRatedActivityType, conversationRatingCancelledActivityType, conversationRatingOfferedActivityType, conversationRatingScheduledActivityType, conversationRatingUnscheduledActivityType, conversationReopenedActivityType, conversationReservedType, conversationTranscriptionEndedActivityType, conversationTranscriptionStartedActivityType, conversationUnassignedActivityType, followupAddedActivityType, followupExpiredActivityType, followupRemovedActivityType, messageAddedByAgentActivityType, messageAddedByCustomerActivityType, noteAddedActivityType, tagAddedActivityType, tagRemovedActivityType, transferFailedActivityType, transferInitiatedActivityType, transferSuccessfulActivityType, unknownActivityType]); export const activityLogUser = z.object({id: z.string(), name: z.string().optional(), email: z.string().optional(), phoneNumber: z.string().optional()}); export const conversationAssignedAttribute = z.object({agentId: z.string(), agentName: z.string().optional()}); export const conversationAutoReplySentAttribute = z.object({templateName: z.string()}); export const conversationChannelChangedAttribute = z.object({channelReference: z.string()}); export const conversationClaimedAttribute = z.object({claimedFromLabel: z.string().optional(), claimedFromType: z.string().optional()}); export const conversationCreatedAttribute = z.object({subject: z.string().optional()}); export const mapAttributeValue = z.record(z.string(), z.union([z.array(z.string()), z.string()])); export const conversationCustomAttributesUpdatedAttribute = z.object({updatedAttributeIds: z.array(z.string()).optional(), updatedAttributeValues: mapAttributeValue}); export const conversationEndUserReplacedAttribute = z.object({oldUser: activityLogUser, newUser: activityLogUser}); export const conversationLanguageUpdatedAttribute = z.object({language: z.string()}); export const conversationLinkedAttribute = z.object({child: z.number().int(), parent: z.number().int(), linkType: z.string()}); export const conversationOfferedAttribute = z.object({agentNames: z.array(z.string()).optional(), queueLabel: z.string().optional()}); export const conversationRatedAttribute = z.object({agent: activityLogUser.optional(), score: z.number().int().optional(), message: z.string().optional()}); export const conversationRatingNotOfferedAttribute = z.object({evaluationFilters: z.string().optional()}); export const conversationRatingOfferedAttribute = z.object({agent: activityLogUser, user: activityLogUser}); export const conversationRatingScheduledAttribute = z.object({ratingScheduledTime: z.string()}); export const conversationReservedAttribute = z.object({agent: activityLogUser, queueId: z.string(), queueName: z.string(), reservationType: z.string(), validUntil: z.string()}); export const conversationResolvedStateToggledAttribute = z.object({isResolved: z.boolean()}); export const conversationSubjectUpdatedAttribute = z.object({oldSubject: z.string(), newSubject: z.string()}); export const conversationTranscriptionEndedAttribute = z.object({isSuccessful: z.boolean(), failureReason: z.string().optional()}); export const conversationTransferredAttribute = z.object({transferType: z.string(), destinationType: z.string(), destinationId: z.string(), destinationLabel: z.string().optional(), reason: z.string().optional()}); export const conversationUnassignedAttribute = z.object({agent: activityLogUser}); export const messageAddedAttribute = z.object({messageId: z.string(), fromEndpoint: z.string().optional(), avatarUrl: z.string().optional()}); export const messageRedactedAttribute = z.object({messageId: z.string(), wasTextRedacted: z.boolean(), numberOfDeletedFiles: z.number().int()}); export const noteAddedAttribute = z.object({message: z.string(), avatarUrl: z.string().optional()}); export const tagAddedAttribute = z.object({tag: z.string()}); export const tagRemovedAttribute = z.object({tag: z.string()}); export const activityLogAttribute = z.union([conversationAssignedAttribute, conversationAutoReplySentAttribute, conversationChannelChangedAttribute, conversationClaimedAttribute, conversationCreatedAttribute, conversationCustomAttributesUpdatedAttribute, conversationEndUserReplacedAttribute, conversationLanguageUpdatedAttribute, conversationLinkedAttribute, conversationOfferedAttribute, conversationRatedAttribute, conversationRatingNotOfferedAttribute, conversationRatingOfferedAttribute, conversationRatingScheduledAttribute, conversationReservedAttribute, conversationResolvedStateToggledAttribute, conversationSubjectUpdatedAttribute, conversationTranscriptionEndedAttribute, conversationTransferredAttribute, conversationUnassignedAttribute, messageAddedAttribute, messageRedactedAttribute, noteAddedAttribute, tagAddedAttribute, tagRemovedAttribute]); export const activityLogEntry = z.object({id: z.string(), conversationId: z.number().int(), activityTimestamp: z.string(), activityType: deprecatedActivityLogType, _type: z.string(), author: activityLogUser.optional(), attributes: activityLogAttribute.optional()}); export const getActivityLogOutput = z.object({data: z.array(activityLogEntry).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 }; /** * List activity log * * GET /beta/conversations/{conversationId}/activitylog */ export const getApiBetaConversationsConversationIdActivitylog = async (args: GetApiBetaConversationsConversationIdActivitylogArgs, options?: GetApiBetaConversationsConversationIdActivitylogOptions) => { const {baseUrl = "https://dev.dixa.io", fetch: fetchFn = fetch, ApiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (ApiKeyAuth !== undefined) headers.set("Authorization", ApiKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/beta/conversations/${encodeURIComponent(String(args.conversationId))}/activitylog${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(getActivityLogOutput, await res.json()) };