import { ID } from './Conversation'; import { QueueRoutingPolicy } from './Routing'; export declare const CONVERSATION_QUEUES_COLLECTION = "conversation_queues"; export type QueueSlaTransferBehavior = 'preserve' | 'restart' | 'recalculate'; export type ConversationQueueSlaConfig = { enabled: false; policyId?: never; policyVersion?: never; onTransferIn?: never; } | { enabled: true; policyId: ID; policyVersion: number; onTransferIn: QueueSlaTransferBehavior; }; /** * distribution: * visibility follows shared, manual_pull or exclusive routing semantics. * all_current: * all authorized queue members can see current queue conversations. */ export type QueueMemberAudienceMode = 'distribution' | 'all_current' | 'none'; export type QueueSupervisorAudienceMode = 'all_current' | 'sla_only' | 'escalations_only' | 'none'; export interface ConversationQueueAudienceConfig { members: { mode: QueueMemberAudienceMode; requireActiveParticipation: boolean; includeResolved: boolean; }; supervisors: { mode: QueueSupervisorAudienceMode; includeResolved: boolean; }; } export interface ConversationQueueInfo { id: ID; name: string; color?: string; enabled: boolean; } /** * Conversation routing, supervision and reporting boundary. * Groups only provide user membership; they never own conversations. */ export interface ConversationQueue { id: ID; spaceId: ID; name: string; description?: string; color?: string; enabled: boolean; /** * Higher values are evaluated first when multiple queues match. */ priority: number; memberGroupIds: ID[]; supervisorGroupIds: ID[]; routing: QueueRoutingPolicy; sla: ConversationQueueSlaConfig; audience: ConversationQueueAudienceConfig; version: number; createdAt: Date; createdByUserId?: ID; updatedAt: Date; updatedByUserId?: ID; } /** * Editable Queue definition sent by clients. * * It excludes id, version and audit fields controlled by the backend. Nested * routing, SLA and audience objects use full-replacement semantics. */ export interface ConversationQueueDefinitionInput { name: string; description?: string; color?: string; enabled: boolean; priority: number; memberGroupIds: ID[]; supervisorGroupIds: ID[]; routing: QueueRoutingPolicy; sla: ConversationQueueSlaConfig; audience: ConversationQueueAudienceConfig; } /** * Creates a Queue. commandId makes retries idempotent. The backend assigns * queue id, version and audit fields. */ export interface CreateConversationQueueRequest { commandId: ID; spaceId: ID; definition: ConversationQueueDefinitionInput; } /** * Replaces the editable definition of an existing Queue. * * expectedVersion is the version loaded by the client; it is not incremented * by the client. The backend rejects stale writes and returns the updated * ConversationQueue with its new version and audit fields. */ export interface UpdateConversationQueueRequest { commandId: ID; spaceId: ID; queueId: ID; expectedVersion: number; definition: ConversationQueueDefinitionInput; }