@noatgnu/cupcake-mint-chocolate 1.2.6 → 1.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -725,7 +725,7 @@ class WebRTCSignallingService {
|
|
|
725
725
|
console.error('No authentication token available');
|
|
726
726
|
return;
|
|
727
727
|
}
|
|
728
|
-
const wsUrl = `${this.baseUrl}/
|
|
728
|
+
const wsUrl = `${this.baseUrl}/ccmc/webrtc/${sessionId}/?token=${token}`;
|
|
729
729
|
this.ws = webSocket({
|
|
730
730
|
url: wsUrl,
|
|
731
731
|
openObserver: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noatgnu-cupcake-mint-chocolate.mjs","sources":["../../../projects/cupcake-mint-chocolate/src/lib/cupcake-mint-chocolate.ts","../../../projects/cupcake-mint-chocolate/src/lib/models/enums.ts","../../../projects/cupcake-mint-chocolate/src/lib/models/webrtc.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/notification.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/message-thread.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/message.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/thread-participant.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/communication-websocket.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/webrtc-signalling.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/webrtc.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/index.ts","../../../projects/cupcake-mint-chocolate/src/public-api.ts","../../../projects/cupcake-mint-chocolate/src/noatgnu-cupcake-mint-chocolate.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'ccmc-cupcake-mint-chocolate',\n imports: [],\n template: `\n <p>\n cupcake-mint-chocolate works!\n </p>\n `,\n styles: ``\n})\nexport class CupcakeMintChocolate {\n\n}\n","export enum NotificationType {\r\n SYSTEM = 'system',\r\n MAINTENANCE = 'maintenance',\r\n INVENTORY = 'inventory',\r\n BILLING = 'billing',\r\n PROJECT = 'project',\r\n PROTOCOL = 'protocol',\r\n DOCUMENT = 'document',\r\n USER = 'user'\r\n}\r\n\r\nexport const NotificationTypeLabels: Record<NotificationType, string> = {\r\n [NotificationType.SYSTEM]: 'System',\r\n [NotificationType.MAINTENANCE]: 'Maintenance',\r\n [NotificationType.INVENTORY]: 'Inventory',\r\n [NotificationType.BILLING]: 'Billing',\r\n [NotificationType.PROJECT]: 'Project',\r\n [NotificationType.PROTOCOL]: 'Protocol',\r\n [NotificationType.DOCUMENT]: 'Document',\r\n [NotificationType.USER]: 'User'\r\n};\r\n\r\nexport enum NotificationPriority {\r\n LOW = 'low',\r\n NORMAL = 'normal',\r\n HIGH = 'high',\r\n URGENT = 'urgent'\r\n}\r\n\r\nexport const NotificationPriorityLabels: Record<NotificationPriority, string> = {\r\n [NotificationPriority.LOW]: 'Low',\r\n [NotificationPriority.NORMAL]: 'Normal',\r\n [NotificationPriority.HIGH]: 'High',\r\n [NotificationPriority.URGENT]: 'Urgent'\r\n};\r\n\r\nexport enum DeliveryStatus {\r\n PENDING = 'pending',\r\n SENT = 'sent',\r\n DELIVERED = 'delivered',\r\n FAILED = 'failed',\r\n READ = 'read'\r\n}\r\n\r\nexport const DeliveryStatusLabels: Record<DeliveryStatus, string> = {\r\n [DeliveryStatus.PENDING]: 'Pending',\r\n [DeliveryStatus.SENT]: 'Sent',\r\n [DeliveryStatus.DELIVERED]: 'Delivered',\r\n [DeliveryStatus.FAILED]: 'Failed',\r\n [DeliveryStatus.READ]: 'Read'\r\n};\r\n\r\nexport enum MessageType {\r\n DIRECT = 'direct',\r\n THREAD = 'thread',\r\n BROADCAST = 'broadcast',\r\n SYSTEM = 'system'\r\n}\r\n\r\nexport const MessageTypeLabels: Record<MessageType, string> = {\r\n [MessageType.DIRECT]: 'Direct Message',\r\n [MessageType.THREAD]: 'Thread Reply',\r\n [MessageType.BROADCAST]: 'Broadcast',\r\n [MessageType.SYSTEM]: 'System Message'\r\n};","import { BaseTimestampedModel } from './base';\r\n\r\nexport enum WebRTCSessionType {\r\n VIDEO_CALL = 'video_call',\r\n AUDIO_CALL = 'audio_call',\r\n SCREEN_SHARE = 'screen_share',\r\n DATA_CHANNEL = 'data_channel'\r\n}\r\n\r\nexport enum WebRTCSessionStatus {\r\n WAITING = 'waiting',\r\n ACTIVE = 'active',\r\n ENDED = 'ended'\r\n}\r\n\r\nexport enum PeerRole {\r\n HOST = 'host',\r\n VIEWER = 'viewer',\r\n PARTICIPANT = 'participant'\r\n}\r\n\r\nexport enum PeerConnectionState {\r\n CONNECTING = 'connecting',\r\n CONNECTED = 'connected',\r\n DISCONNECTED = 'disconnected',\r\n FAILED = 'failed'\r\n}\r\n\r\nexport enum SignalType {\r\n OFFER = 'offer',\r\n ANSWER = 'answer',\r\n ICE_CANDIDATE = 'ice_candidate',\r\n CHECK = 'check'\r\n}\r\n\r\nexport interface WebRTCSession extends BaseTimestampedModel {\r\n id: string;\r\n thread?: string;\r\n sessionType: WebRTCSessionType;\r\n sessionStatus: WebRTCSessionStatus;\r\n initiatedBy: number;\r\n participants: number[];\r\n startedAt: string;\r\n endedAt?: string;\r\n}\r\n\r\nexport interface WebRTCPeer extends BaseTimestampedModel {\r\n id: string;\r\n session: string;\r\n user: number;\r\n channelId: string;\r\n peerRole: PeerRole;\r\n connectionState: PeerConnectionState;\r\n hasVideo: boolean;\r\n hasAudio: boolean;\r\n hasScreenShare: boolean;\r\n joinedAt: string;\r\n lastSeenAt: string;\r\n}\r\n\r\nexport interface WebRTCSignal extends BaseTimestampedModel {\r\n id: string;\r\n session: string;\r\n fromPeer: string;\r\n toPeer?: string;\r\n signalType: SignalType;\r\n signalData: any;\r\n delivered: boolean;\r\n}\r\n\r\nexport interface PeerInfo {\r\n id: string;\r\n userId: number;\r\n username: string;\r\n peerRole: PeerRole;\r\n connectionState: PeerConnectionState;\r\n hasVideo: boolean;\r\n hasAudio: boolean;\r\n hasScreenShare: boolean;\r\n}\r\n\r\nexport interface WebRTCMessage {\r\n type: 'connection.established' | 'check.response' | 'peer.check' | 'offer' | 'answer' | 'ice_candidate' | 'peer.state_update' | 'error';\r\n message?: string;\r\n peerId?: string;\r\n sessionId?: string;\r\n userId?: number;\r\n username?: string;\r\n fromPeerId?: string;\r\n fromUserId?: number;\r\n fromUsername?: string;\r\n toPeerId?: string;\r\n sdp?: RTCSessionDescriptionInit;\r\n candidate?: RTCIceCandidateInit;\r\n peers?: PeerInfo[];\r\n peerRole?: PeerRole;\r\n connectionState?: PeerConnectionState;\r\n hasVideo?: boolean;\r\n hasAudio?: boolean;\r\n hasScreenShare?: boolean;\r\n iceServers?: RTCIceServer[];\r\n}\r\n\r\nexport interface WebRTCConfig {\r\n iceServers: RTCIceServer[];\r\n iceCandidatePoolSize?: number;\r\n iceTransportPolicy?: RTCIceTransportPolicy;\r\n bundlePolicy?: RTCBundlePolicy;\r\n rtcpMuxPolicy?: RTCRtcpMuxPolicy;\r\n}\r\n\r\nexport interface MediaConstraintsConfig {\r\n video?: boolean | MediaTrackConstraints;\r\n audio?: boolean | MediaTrackConstraints;\r\n}\r\n\r\nexport interface PeerConnection {\r\n peerId: string;\r\n userId: number;\r\n username: string;\r\n pc: RTCPeerConnection;\r\n dataChannel?: RTCDataChannel;\r\n stream?: MediaStream;\r\n role: PeerRole;\r\n offered: boolean;\r\n answered: boolean;\r\n connected: boolean;\r\n queuedCandidates: RTCIceCandidate[];\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@noatgnu/cupcake-core';\r\n\r\nimport {\r\n Notification,\r\n NotificationCreateRequest,\r\n NotificationUpdateRequest,\r\n MarkNotificationReadRequest,\r\n BulkNotificationActionRequest,\r\n NotificationType,\r\n NotificationPriority,\r\n DeliveryStatus,\r\n PaginatedResponse,\r\n NotificationQueryParams\r\n} from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NotificationService extends BaseApiService {\r\n\r\n /**\r\n * Get all notifications with optional filtering\r\n */\r\n getNotifications(params?: NotificationQueryParams): Observable<PaginatedResponse<Notification>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<Notification>>(`${this.apiUrl}/notifications/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single notification by ID\r\n */\r\n getNotification(id: string): Observable<Notification> {\r\n return this.get<Notification>(`${this.apiUrl}/notifications/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new notification\r\n */\r\n createNotification(notification: NotificationCreateRequest): Observable<Notification> {\r\n return this.post<Notification>(`${this.apiUrl}/notifications/`, notification);\r\n }\r\n\r\n /**\r\n * Update an existing notification\r\n */\r\n updateNotification(id: string, notification: NotificationUpdateRequest): Observable<Notification> {\r\n return this.put<Notification>(`${this.apiUrl}/notifications/${id}/`, notification);\r\n }\r\n\r\n /**\r\n * Partially update a notification\r\n */\r\n patchNotification(id: string, notification: Partial<NotificationUpdateRequest>): Observable<Notification> {\r\n return this.patch<Notification>(`${this.apiUrl}/notifications/${id}/`, notification);\r\n }\r\n\r\n /**\r\n * Delete a notification\r\n */\r\n deleteNotification(id: string): Observable<void> {\r\n return this.delete<void>(`${this.apiUrl}/notifications/${id}/`);\r\n }\r\n\r\n /**\r\n * Mark a notification as read/unread\r\n */\r\n markNotificationRead(id: string, request: MarkNotificationReadRequest): Observable<Notification> {\r\n return this.post<Notification>(`${this.apiUrl}/notifications/${id}/mark_read/`, request);\r\n }\r\n\r\n\r\n /**\r\n * Get unread notifications for current user\r\n */\r\n getUnreadNotifications(): Observable<PaginatedResponse<Notification>> {\r\n return this.get<PaginatedResponse<Notification>>(`${this.apiUrl}/notifications/unread/`);\r\n }\r\n\r\n /**\r\n * Get notification statistics for current user\r\n */\r\n getNotificationStats(): Observable<{\r\n total: number;\r\n unread: number;\r\n byType: { [key: string]: number };\r\n byPriority: { [key: string]: number };\r\n }> {\r\n return this.get<{\r\n total: number;\r\n unread: number;\r\n byType: { [key: string]: number };\r\n byPriority: { [key: string]: number };\r\n }>(`${this.apiUrl}/notifications/stats/`);\r\n }\r\n\r\n /**\r\n * Mark all notifications as read for current user\r\n */\r\n markAllNotificationsRead(): Observable<{ success: boolean; message: string }> {\r\n return this.post<{ success: boolean; message: string }>(`${this.apiUrl}/notifications/mark_all_read/`, {});\r\n }\r\n\r\n /**\r\n * Search notifications by title or message\r\n */\r\n searchNotifications(query: string): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ search: query });\r\n }\r\n\r\n /**\r\n * Get notifications by type\r\n */\r\n getNotificationsByType(type: NotificationType): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ notificationType: type });\r\n }\r\n\r\n /**\r\n * Get notifications by priority\r\n */\r\n getNotificationsByPriority(priority: NotificationPriority): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ priority });\r\n }\r\n\r\n /**\r\n * Get notifications by sender\r\n */\r\n getNotificationsBySender(senderId: number): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ sender: senderId });\r\n }\r\n\r\n /**\r\n * Get notifications by delivery status\r\n */\r\n getNotificationsByStatus(status: DeliveryStatus): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ deliveryStatus: status });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@noatgnu/cupcake-core';\r\n\r\nimport {\r\n MessageThread,\r\n MessageThreadCreateRequest,\r\n MessageThreadUpdateRequest,\r\n ThreadParticipantRequest,\r\n ThreadSearchRequest,\r\n ThreadParticipant,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface MessageThreadQueryParams {\r\n search?: string;\r\n isPrivate?: boolean;\r\n isArchived?: boolean;\r\n creator?: number;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MessageThreadService extends BaseApiService {\r\n\r\n /**\r\n * Get all message threads with optional filtering\r\n */\r\n getMessageThreads(params?: MessageThreadQueryParams): Observable<PaginatedResponse<MessageThread>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<MessageThread>>(`${this.apiUrl}/threads/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single message thread by ID\r\n */\r\n getMessageThread(id: string): Observable<MessageThread> {\r\n return this.get<MessageThread>(`${this.apiUrl}/threads/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new message thread\r\n */\r\n createMessageThread(thread: MessageThreadCreateRequest): Observable<MessageThread> {\r\n return this.post<MessageThread>(`${this.apiUrl}/threads/`, thread);\r\n }\r\n\r\n /**\r\n * Update an existing message thread\r\n */\r\n updateMessageThread(id: string, thread: MessageThreadUpdateRequest): Observable<MessageThread> {\r\n return this.put<MessageThread>(`${this.apiUrl}/threads/${id}/`, thread);\r\n }\r\n\r\n /**\r\n * Partially update a message thread\r\n */\r\n patchMessageThread(id: string, thread: Partial<MessageThreadUpdateRequest>): Observable<MessageThread> {\r\n return this.patch<MessageThread>(`${this.apiUrl}/threads/${id}/`, thread);\r\n }\r\n\r\n /**\r\n * Delete a message thread\r\n */\r\n deleteMessageThread(id: string): Observable<void> {\r\n return this.delete<void>(`${this.apiUrl}/threads/${id}/`);\r\n }\r\n\r\n /**\r\n * Add participant to a thread\r\n */\r\n addParticipant(id: string, request: { username: string }): Observable<{ message: string; participant: ThreadParticipant }> {\r\n return this.post<{ message: string; participant: ThreadParticipant }>(`${this.apiUrl}/threads/${id}/add_participant/`, request);\r\n }\r\n\r\n /**\r\n * Remove participant from a thread\r\n */\r\n removeParticipant(id: string, request: { username: string }): Observable<{ message: string }> {\r\n return this.post<{ message: string }>(`${this.apiUrl}/threads/${id}/remove_participant/`, request);\r\n }\r\n\r\n /**\r\n * Get thread participants\r\n */\r\n getParticipants(id: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.get<PaginatedResponse<ThreadParticipant>>(`${this.apiUrl}/threads/${id}/participants/`);\r\n }\r\n\r\n /**\r\n * Archive/unarchive a thread (toggles state)\r\n */\r\n toggleArchiveThread(id: string): Observable<{ message: string; isArchived: boolean }> {\r\n return this.post<{ message: string; isArchived: boolean }>(`${this.apiUrl}/threads/${id}/archive/`, {});\r\n }\r\n\r\n /**\r\n * Mark thread as read for current user\r\n */\r\n markThreadAsRead(id: string): Observable<{ success: boolean; message: string }> {\r\n return this.post<{ success: boolean; message: string }>(`${this.apiUrl}/threads/${id}/mark_read/`, {});\r\n }\r\n\r\n\r\n /**\r\n * Search message threads by title or description\r\n */\r\n searchMessageThreads(query: string): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ search: query });\r\n }\r\n\r\n /**\r\n * Get private threads only\r\n */\r\n getPrivateThreads(): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ isPrivate: true });\r\n }\r\n\r\n /**\r\n * Get public threads only\r\n */\r\n getPublicThreads(): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ isPrivate: false });\r\n }\r\n\r\n /**\r\n * Get archived threads\r\n */\r\n getArchivedThreads(): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ isArchived: true });\r\n }\r\n\r\n /**\r\n * Get active threads (non-archived)\r\n */\r\n getActiveThreads(): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ isArchived: false });\r\n }\r\n\r\n /**\r\n * Get threads created by a specific user\r\n */\r\n getThreadsByCreator(creatorId: number): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ creator: creatorId });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@noatgnu/cupcake-core';\r\n\r\nimport {\r\n Message,\r\n MessageCreateRequest,\r\n MessageUpdateRequest,\r\n MessageSearchRequest,\r\n MessageType,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface MessageQueryParams {\r\n search?: string;\r\n thread?: string;\r\n messageType?: MessageType;\r\n sender?: number;\r\n isDeleted?: boolean;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MessageService extends BaseApiService {\r\n\r\n /**\r\n * Get all messages with optional filtering\r\n */\r\n getMessages(params?: MessageQueryParams): Observable<PaginatedResponse<Message>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<Message>>(`${this.apiUrl}/messages/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single message by ID\r\n */\r\n getMessage(id: string): Observable<Message> {\r\n return this.get<Message>(`${this.apiUrl}/messages/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new message\r\n */\r\n createMessage(message: MessageCreateRequest): Observable<Message> {\r\n return this.post<Message>(`${this.apiUrl}/messages/`, message);\r\n }\r\n\r\n /**\r\n * Update an existing message\r\n */\r\n updateMessage(id: string, message: MessageUpdateRequest): Observable<Message> {\r\n return this.put<Message>(`${this.apiUrl}/messages/${id}/`, message);\r\n }\r\n\r\n /**\r\n * Partially update a message\r\n */\r\n patchMessage(id: string, message: Partial<MessageUpdateRequest>): Observable<Message> {\r\n return this.patch<Message>(`${this.apiUrl}/messages/${id}/`, message);\r\n }\r\n\r\n /**\r\n * Delete a message (soft delete)\r\n */\r\n deleteMessage(id: string): Observable<Message> {\r\n return this.delete<Message>(`${this.apiUrl}/messages/${id}/`);\r\n }\r\n\r\n\r\n /**\r\n * Get messages in a specific thread\r\n */\r\n getThreadMessages(threadId: string, params?: Omit<MessageQueryParams, 'thread'>): Observable<PaginatedResponse<Message>> {\r\n const queryParams = { ...params, thread: threadId };\r\n return this.getMessages(queryParams);\r\n }\r\n\r\n /**\r\n * Search messages by content\r\n */\r\n searchMessages(query: string, threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { search: query };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Get messages by sender\r\n */\r\n getMessagesBySender(senderId: number, threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { sender: senderId };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Get messages by type\r\n */\r\n getMessagesByType(messageType: MessageType, threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { messageType };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Get deleted messages (for moderation)\r\n */\r\n getDeletedMessages(threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { isDeleted: true };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Get active messages (non-deleted)\r\n */\r\n getActiveMessages(threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { isDeleted: false };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Reply to a message\r\n */\r\n replyToMessage(parentMessageId: string, content: string, threadId: string): Observable<Message> {\r\n const message: MessageCreateRequest = {\r\n thread: threadId,\r\n content,\r\n replyTo: parentMessageId\r\n };\r\n return this.createMessage(message);\r\n }\r\n}","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport {\r\n ThreadParticipant,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface ThreadParticipantQueryParams {\r\n thread?: string;\r\n isModerator?: boolean;\r\n notificationsEnabled?: boolean;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ThreadParticipantService {\r\n private http = inject(HttpClient);\r\n private apiUrl = '/api'; // This should be configurable\r\n\r\n /**\r\n * Get all thread participants with optional filtering\r\n */\r\n getThreadParticipants(params?: ThreadParticipantQueryParams): Observable<PaginatedResponse<ThreadParticipant>> {\r\n let httpParams = new HttpParams();\r\n \r\n if (params) {\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n httpParams = httpParams.set(key, value.toString());\r\n }\r\n });\r\n }\r\n\r\n return this.http.get<PaginatedResponse<ThreadParticipant>>(`${this.apiUrl}/thread-participants/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single thread participant by ID\r\n */\r\n getThreadParticipant(id: number): Observable<ThreadParticipant> {\r\n return this.http.get<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/`);\r\n }\r\n\r\n /**\r\n * Update thread participant settings\r\n */\r\n updateThreadParticipant(id: number, updates: { isModerator?: boolean; notificationsEnabled?: boolean }): Observable<ThreadParticipant> {\r\n return this.http.patch<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/`, updates);\r\n }\r\n\r\n /**\r\n * Update participant's last read timestamp\r\n */\r\n updateLastRead(id: number): Observable<ThreadParticipant> {\r\n return this.http.post<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/update_last_read/`, {});\r\n }\r\n\r\n /**\r\n * Get participants for a specific thread\r\n */\r\n getParticipantsForThread(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId });\r\n }\r\n\r\n /**\r\n * Get moderators for a specific thread\r\n */\r\n getModeratorsForThread(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId, isModerator: true });\r\n }\r\n\r\n /**\r\n * Get non-moderator participants for a specific thread\r\n */\r\n getRegularParticipantsForThread(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId, isModerator: false });\r\n }\r\n\r\n /**\r\n * Get participants with notifications enabled for a specific thread\r\n */\r\n getNotificationEnabledParticipants(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId, notificationsEnabled: true });\r\n }\r\n\r\n /**\r\n * Get participants with notifications disabled for a specific thread\r\n */\r\n getNotificationDisabledParticipants(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId, notificationsEnabled: false });\r\n }\r\n\r\n /**\r\n * Toggle moderator status for a participant\r\n */\r\n toggleModeratorStatus(id: number): Observable<ThreadParticipant> {\r\n return this.http.post<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/toggle_moderator/`, {});\r\n }\r\n\r\n /**\r\n * Toggle notifications for a participant\r\n */\r\n toggleNotifications(id: number): Observable<ThreadParticipant> {\r\n return this.http.post<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/toggle_notifications/`, {});\r\n }\r\n\r\n /**\r\n * Leave a thread (for current user)\r\n */\r\n leaveThread(threadId: string): Observable<{ success: boolean; message: string }> {\r\n return this.http.post<{ success: boolean; message: string }>(`${this.apiUrl}/thread-participants/leave_thread/`, { thread: threadId });\r\n }\r\n\r\n /**\r\n * Get threads where current user is participant\r\n */\r\n getMyParticipations(): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.http.get<PaginatedResponse<ThreadParticipant>>(`${this.apiUrl}/thread-participants/my_participations/`);\r\n }\r\n\r\n /**\r\n * Get threads where current user is moderator\r\n */\r\n getMyModerations(): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.http.get<PaginatedResponse<ThreadParticipant>>(`${this.apiUrl}/thread-participants/my_moderations/`);\r\n }\r\n}","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\n\r\nimport { NotificationType, NotificationPriority, MessageType } from '../models';\r\n\r\nexport interface NewNotificationEvent {\r\n type: 'notification.new';\r\n notificationId: string;\r\n title: string;\r\n message: string;\r\n notificationType: NotificationType;\r\n priority: NotificationPriority;\r\n data: {\r\n alertType?: string;\r\n quantity?: number;\r\n link?: string;\r\n [key: string]: string | number | boolean | undefined;\r\n };\r\n timestamp: string;\r\n}\r\n\r\nexport interface NewMessageEvent {\r\n type: 'message.new';\r\n threadId: string;\r\n messageId: string;\r\n senderId: number;\r\n senderUsername: string;\r\n content: string;\r\n messageType: MessageType;\r\n timestamp: string;\r\n}\r\n\r\nexport interface ThreadUpdateEvent {\r\n type: 'thread.update';\r\n threadId: string;\r\n action: string;\r\n message: string;\r\n timestamp: string;\r\n}\r\n\r\nexport interface NotificationUpdateEvent {\r\n type: 'notification.update';\r\n notificationId: string;\r\n status: string;\r\n timestamp: string;\r\n}\r\n\r\nexport interface ConnectionEstablishedEvent {\r\n type: 'ccmc.connection.established';\r\n message: string;\r\n userId: number;\r\n username: string;\r\n}\r\n\r\nexport interface ThreadSubscriptionConfirmedEvent {\r\n type: 'thread.subscription.confirmed';\r\n threadId: string;\r\n}\r\n\r\nexport interface ThreadSubscriptionDeniedEvent {\r\n type: 'thread.subscription.denied';\r\n threadId: string;\r\n error: string;\r\n}\r\n\r\nexport interface ThreadUnsubscriptionConfirmedEvent {\r\n type: 'thread.unsubscription.confirmed';\r\n threadId: string;\r\n}\r\n\r\nexport interface NotificationMarkedReadEvent {\r\n type: 'notification.marked_read';\r\n notificationId: string;\r\n}\r\n\r\nexport interface PongEvent {\r\n type: 'pong';\r\n}\r\n\r\nexport type WebSocketIncomingMessage =\r\n | NewNotificationEvent\r\n | NewMessageEvent\r\n | ThreadUpdateEvent\r\n | NotificationUpdateEvent\r\n | ConnectionEstablishedEvent\r\n | ThreadSubscriptionConfirmedEvent\r\n | ThreadSubscriptionDeniedEvent\r\n | ThreadUnsubscriptionConfirmedEvent\r\n | NotificationMarkedReadEvent\r\n | PongEvent;\r\n\r\nexport interface SubscribeThreadMessage {\r\n type: 'subscribe_thread';\r\n thread_id: string;\r\n}\r\n\r\nexport interface UnsubscribeThreadMessage {\r\n type: 'unsubscribe_thread';\r\n thread_id: string;\r\n}\r\n\r\nexport interface MarkNotificationReadMessage {\r\n type: 'mark_notification_read';\r\n notification_id: string;\r\n}\r\n\r\nexport interface PingMessage {\r\n type: 'ping';\r\n}\r\n\r\nexport type WebSocketOutgoingMessage =\r\n | SubscribeThreadMessage\r\n | UnsubscribeThreadMessage\r\n | MarkNotificationReadMessage\r\n | PingMessage;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CommunicationWebSocketService implements OnDestroy {\r\n private socket: WebSocket | null = null;\r\n private reconnectAttempts = 0;\r\n private maxReconnectAttempts = 5;\r\n private reconnectDelay = 3000;\r\n private reconnectTimer: number | null = null;\r\n\r\n private messageSubject = new Subject<WebSocketIncomingMessage>();\r\n private connectionStateSubject = new BehaviorSubject<'disconnected' | 'connecting' | 'connected'>('disconnected');\r\n\r\n public connectionState$ = this.connectionStateSubject.asObservable();\r\n public messages$ = this.messageSubject.asObservable();\r\n\r\n public newNotifications$: Observable<NewNotificationEvent> = this.messages$.pipe(\r\n filter((msg): msg is NewNotificationEvent => msg.type === 'notification.new')\r\n );\r\n\r\n public newMessages$: Observable<NewMessageEvent> = this.messages$.pipe(\r\n filter((msg): msg is NewMessageEvent => msg.type === 'message.new')\r\n );\r\n\r\n public threadUpdates$: Observable<ThreadUpdateEvent> = this.messages$.pipe(\r\n filter((msg): msg is ThreadUpdateEvent => msg.type === 'thread.update')\r\n );\r\n\r\n public notificationUpdates$: Observable<NotificationUpdateEvent> = this.messages$.pipe(\r\n filter((msg): msg is NotificationUpdateEvent => msg.type === 'notification.update')\r\n );\r\n\r\n connect(wsBaseUrl: string, token?: string): void {\r\n if (this.socket && this.socket.readyState === WebSocket.OPEN) {\r\n console.log('WebSocket already connected');\r\n return;\r\n }\r\n\r\n this.connectionStateSubject.next('connecting');\r\n\r\n const fullUrl = `${wsBaseUrl.replace(/\\/$/, '')}/ccmc/communications/`;\r\n const url = token ? `${fullUrl}?token=${token}` : fullUrl;\r\n this.socket = new WebSocket(url);\r\n\r\n this.socket.onopen = () => {\r\n console.log('CCMC WebSocket connected');\r\n this.connectionStateSubject.next('connected');\r\n this.reconnectAttempts = 0;\r\n };\r\n\r\n this.socket.onmessage = (event) => {\r\n try {\r\n const message = JSON.parse(event.data) as WebSocketIncomingMessage;\r\n this.messageSubject.next(message);\r\n\r\n if (message.type === 'ccmc.connection.established') {\r\n console.log('CCMC connection established:', message);\r\n }\r\n } catch (error) {\r\n console.error('Error parsing WebSocket message:', error);\r\n }\r\n };\r\n\r\n this.socket.onerror = (error) => {\r\n console.error('CCMC WebSocket error:', error);\r\n };\r\n\r\n this.socket.onclose = (event) => {\r\n console.log('CCMC WebSocket closed:', event.code, event.reason);\r\n this.connectionStateSubject.next('disconnected');\r\n\r\n if (this.reconnectAttempts < this.maxReconnectAttempts) {\r\n this.scheduleReconnect(wsBaseUrl, token);\r\n }\r\n };\r\n }\r\n\r\n private scheduleReconnect(wsBaseUrl: string, token?: string): void {\r\n this.reconnectAttempts++;\r\n const delay = this.reconnectDelay * this.reconnectAttempts;\r\n\r\n console.log(`Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);\r\n\r\n this.reconnectTimer = setTimeout(() => {\r\n this.connect(wsBaseUrl, token);\r\n }, delay);\r\n }\r\n\r\n disconnect(): void {\r\n if (this.reconnectTimer) {\r\n clearTimeout(this.reconnectTimer);\r\n this.reconnectTimer = null;\r\n }\r\n\r\n if (this.socket) {\r\n this.socket.close();\r\n this.socket = null;\r\n }\r\n\r\n this.connectionStateSubject.next('disconnected');\r\n this.reconnectAttempts = 0;\r\n }\r\n\r\n subscribeToThread(threadId: string): void {\r\n const message: SubscribeThreadMessage = {\r\n type: 'subscribe_thread',\r\n thread_id: threadId\r\n };\r\n this.send(message);\r\n }\r\n\r\n unsubscribeFromThread(threadId: string): void {\r\n const message: UnsubscribeThreadMessage = {\r\n type: 'unsubscribe_thread',\r\n thread_id: threadId\r\n };\r\n this.send(message);\r\n }\r\n\r\n markNotificationAsRead(notificationId: string): void {\r\n const message: MarkNotificationReadMessage = {\r\n type: 'mark_notification_read',\r\n notification_id: notificationId\r\n };\r\n this.send(message);\r\n }\r\n\r\n ping(): void {\r\n const message: PingMessage = { type: 'ping' };\r\n this.send(message);\r\n }\r\n\r\n private send(message: WebSocketOutgoingMessage): void {\r\n if (this.socket && this.socket.readyState === WebSocket.OPEN) {\r\n this.socket.send(JSON.stringify(message));\r\n } else {\r\n console.warn('Cannot send message: WebSocket not connected');\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.disconnect();\r\n }\r\n\r\n isConnected(): boolean {\r\n return this.socket !== null && this.socket.readyState === WebSocket.OPEN;\r\n }\r\n\r\n getConnectionState(): 'disconnected' | 'connecting' | 'connected' {\r\n return this.connectionStateSubject.value;\r\n }\r\n}\r\n","import { Injectable, NgZone, inject } from '@angular/core';\r\nimport { webSocket, WebSocketSubject } from 'rxjs/webSocket';\r\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\r\nimport { AuthService, CUPCAKE_CORE_CONFIG } from '@noatgnu/cupcake-core';\r\nimport {\r\n WebRTCMessage,\r\n PeerInfo,\r\n PeerRole,\r\n PeerConnectionState\r\n} from '../models/webrtc';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WebRTCSignallingService {\r\n private ws?: WebSocketSubject<WebRTCMessage>;\r\n private wsSubscription?: Subscription;\r\n private baseUrl: string = '';\r\n\r\n private _connected = new BehaviorSubject<boolean>(false);\r\n private _peerId = new BehaviorSubject<string | null>(null);\r\n private _sessionId = new BehaviorSubject<string | null>(null);\r\n private _peers = new BehaviorSubject<PeerInfo[]>([]);\r\n private _messages = new Subject<WebRTCMessage>();\r\n private _iceServers = new BehaviorSubject<RTCIceServer[]>([]);\r\n\r\n connected$ = this._connected.asObservable();\r\n peerId$ = this._peerId.asObservable();\r\n sessionId$ = this._sessionId.asObservable();\r\n peers$ = this._peers.asObservable();\r\n messages$ = this._messages.asObservable();\r\n iceServers$ = this._iceServers.asObservable();\r\n\r\n private config = inject(CUPCAKE_CORE_CONFIG);\r\n\r\n constructor(\r\n private authService: AuthService,\r\n private zone: NgZone\r\n ) {\r\n this.baseUrl = this.getBaseUrl();\r\n }\r\n\r\n private getBaseUrl(): string {\r\n if (this.config && this.config.websocketUrl) {\r\n return this.config.websocketUrl;\r\n }\r\n if (this.config && this.config.apiUrl) {\r\n const apiUrl = this.config.apiUrl.replace(/^https?:\\/\\//, '');\r\n const protocol = this.config.apiUrl.startsWith('https') ? 'wss:' : 'ws:';\r\n return `${protocol}//${apiUrl}`;\r\n }\r\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\r\n const host = window.location.host;\r\n return `${protocol}//${host}`;\r\n }\r\n\r\n connect(sessionId: string): void {\r\n this.disconnect();\r\n\r\n const token = this.authService.getAccessToken();\r\n if (!token) {\r\n console.error('No authentication token available');\r\n return;\r\n }\r\n\r\n const wsUrl = `${this.baseUrl}/ws/ccmc/webrtc/${sessionId}/?token=${token}`;\r\n\r\n this.ws = webSocket<WebRTCMessage>({\r\n url: wsUrl,\r\n openObserver: {\r\n next: () => {\r\n console.log('WebRTC signalling connection opened');\r\n this.zone.run(() => {\r\n this._connected.next(true);\r\n });\r\n }\r\n },\r\n closeObserver: {\r\n next: () => {\r\n console.log('WebRTC signalling connection closed');\r\n this.zone.run(() => {\r\n this._connected.next(false);\r\n this._peerId.next(null);\r\n });\r\n }\r\n },\r\n deserializer: msg => {\r\n try {\r\n return JSON.parse(msg.data);\r\n } catch (e) {\r\n console.error('Error parsing WebSocket message:', e);\r\n return msg.data;\r\n }\r\n }\r\n });\r\n\r\n this.wsSubscription = this.ws.subscribe({\r\n next: (message: WebRTCMessage) => {\r\n this.zone.run(() => {\r\n this.handleMessage(message);\r\n });\r\n },\r\n error: (error) => {\r\n console.error('WebRTC signalling error:', error);\r\n this.zone.run(() => {\r\n this._connected.next(false);\r\n });\r\n\r\n setTimeout(() => {\r\n if (this._sessionId.value) {\r\n console.log('Attempting to reconnect...');\r\n this.connect(this._sessionId.value);\r\n }\r\n }, 5000);\r\n },\r\n complete: () => {\r\n console.log('WebRTC signalling connection completed');\r\n this.zone.run(() => {\r\n this._connected.next(false);\r\n });\r\n }\r\n });\r\n }\r\n\r\n disconnect(): void {\r\n if (this.wsSubscription) {\r\n this.wsSubscription.unsubscribe();\r\n this.wsSubscription = undefined;\r\n }\r\n\r\n if (this.ws) {\r\n this.ws.complete();\r\n this.ws = undefined;\r\n }\r\n\r\n this._connected.next(false);\r\n this._peerId.next(null);\r\n this._sessionId.next(null);\r\n this._peers.next([]);\r\n }\r\n\r\n sendCheck(peerRole: PeerRole = PeerRole.PARTICIPANT): void {\r\n this.send({\r\n type: 'check',\r\n peerRole: peerRole\r\n } as any);\r\n }\r\n\r\n sendOffer(toPeerId: string, sdp: RTCSessionDescriptionInit): void {\r\n this.send({\r\n type: 'offer',\r\n toPeerId: toPeerId,\r\n sdp: sdp\r\n } as any);\r\n }\r\n\r\n sendAnswer(toPeerId: string, sdp: RTCSessionDescriptionInit): void {\r\n this.send({\r\n type: 'answer',\r\n toPeerId: toPeerId,\r\n sdp: sdp\r\n } as any);\r\n }\r\n\r\n sendIceCandidate(toPeerId: string, candidate: RTCIceCandidateInit): void {\r\n this.send({\r\n type: 'ice_candidate',\r\n toPeerId: toPeerId,\r\n candidate: candidate\r\n } as any);\r\n }\r\n\r\n sendPeerState(\r\n connectionState?: PeerConnectionState,\r\n hasVideo?: boolean,\r\n hasAudio?: boolean,\r\n hasScreenShare?: boolean\r\n ): void {\r\n this.send({\r\n type: 'peer_state',\r\n connectionState,\r\n hasVideo,\r\n hasAudio,\r\n hasScreenShare\r\n } as any);\r\n }\r\n\r\n private send(message: any): void {\r\n if (!this.ws) {\r\n console.error('WebSocket not connected');\r\n return;\r\n }\r\n\r\n try {\r\n this.ws.next(message);\r\n } catch (error) {\r\n console.error('Error sending message:', error);\r\n }\r\n }\r\n\r\n private handleMessage(message: WebRTCMessage): void {\r\n switch (message.type) {\r\n case 'connection.established':\r\n this.handleConnectionEstablished(message);\r\n break;\r\n\r\n case 'check.response':\r\n this.handleCheckResponse(message);\r\n break;\r\n\r\n case 'peer.check':\r\n case 'offer':\r\n case 'answer':\r\n case 'ice_candidate':\r\n case 'peer.state_update':\r\n this._messages.next(message);\r\n break;\r\n\r\n case 'error':\r\n console.error('WebRTC signalling error:', message.message);\r\n break;\r\n\r\n default:\r\n console.warn('Unknown message type:', message.type);\r\n }\r\n }\r\n\r\n private handleConnectionEstablished(message: WebRTCMessage): void {\r\n if (message.peerId) {\r\n this._peerId.next(message.peerId);\r\n }\r\n if (message.sessionId) {\r\n this._sessionId.next(message.sessionId);\r\n }\r\n if (message.iceServers) {\r\n this._iceServers.next(message.iceServers);\r\n }\r\n console.log('WebRTC signalling connection established:', message);\r\n }\r\n\r\n private handleCheckResponse(message: WebRTCMessage): void {\r\n if (message.peers) {\r\n this._peers.next(message.peers);\r\n console.log('Received peer list:', message.peers);\r\n }\r\n }\r\n\r\n get peerId(): string | null {\r\n return this._peerId.value;\r\n }\r\n\r\n get sessionId(): string | null {\r\n return this._sessionId.value;\r\n }\r\n\r\n get connected(): boolean {\r\n return this._connected.value;\r\n }\r\n\r\n get peers(): PeerInfo[] {\r\n return this._peers.value;\r\n }\r\n\r\n get iceServers(): RTCIceServer[] {\r\n return this._iceServers.value;\r\n }\r\n}\r\n","import { Injectable, NgZone } from '@angular/core';\r\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\r\nimport { WebRTCSignallingService } from './webrtc-signalling';\r\nimport {\r\n WebRTCMessage,\r\n PeerConnection,\r\n PeerInfo,\r\n PeerRole,\r\n PeerConnectionState,\r\n WebRTCConfig,\r\n MediaConstraintsConfig\r\n} from '../models/webrtc';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WebRTCService {\r\n private peerConnections: Map<string, PeerConnection> = new Map();\r\n private localStream?: MediaStream;\r\n private signallingSubscription?: Subscription;\r\n\r\n private _localStreamReady = new BehaviorSubject<boolean>(false);\r\n private _remoteStreams = new BehaviorSubject<Map<string, MediaStream>>(new Map());\r\n private _connectionState = new BehaviorSubject<'disconnected' | 'connecting' | 'connected'>('disconnected');\r\n private _activePeers = new BehaviorSubject<PeerInfo[]>([]);\r\n\r\n localStreamReady$ = this._localStreamReady.asObservable();\r\n remoteStreams$ = this._remoteStreams.asObservable();\r\n connectionState$ = this._connectionState.asObservable();\r\n activePeers$ = this._activePeers.asObservable();\r\n\r\n private defaultConfig: WebRTCConfig = {\r\n iceServers: [\r\n { urls: 'stun:stun.l.google.com:19302' },\r\n { urls: 'stun:stun1.l.google.com:19302' }\r\n ],\r\n iceCandidatePoolSize: 10,\r\n iceTransportPolicy: 'all',\r\n bundlePolicy: 'max-bundle',\r\n rtcpMuxPolicy: 'require'\r\n };\r\n\r\n private defaultMediaConstraints: MediaConstraintsConfig = {\r\n video: {\r\n width: { ideal: 1280 },\r\n height: { ideal: 720 },\r\n frameRate: { ideal: 30 }\r\n },\r\n audio: true\r\n };\r\n\r\n constructor(\r\n private signalling: WebRTCSignallingService,\r\n private zone: NgZone\r\n ) {}\r\n\r\n async startSession(\r\n sessionId: string,\r\n role: PeerRole = PeerRole.PARTICIPANT,\r\n enableVideo: boolean = true,\r\n enableAudio: boolean = true\r\n ): Promise<void> {\r\n this._connectionState.next('connecting');\r\n\r\n if (role === PeerRole.HOST || enableVideo || enableAudio) {\r\n await this.startLocalMedia(enableVideo, enableAudio);\r\n }\r\n\r\n this.signalling.connect(sessionId);\r\n\r\n this.signallingSubscription = this.signalling.messages$.subscribe({\r\n next: (message) => {\r\n this.handleSignallingMessage(message);\r\n }\r\n });\r\n\r\n setTimeout(() => {\r\n this.signalling.sendCheck(role);\r\n }, 1000);\r\n\r\n this.signalling.peers$.subscribe(peers => {\r\n this._activePeers.next(peers);\r\n });\r\n }\r\n\r\n async startLocalMedia(enableVideo: boolean = true, enableAudio: boolean = true): Promise<void> {\r\n try {\r\n const constraints: MediaConstraintsConfig = {\r\n video: enableVideo ? this.defaultMediaConstraints.video : false,\r\n audio: enableAudio ? this.defaultMediaConstraints.audio : false\r\n };\r\n\r\n this.localStream = await navigator.mediaDevices.getUserMedia(constraints);\r\n this._localStreamReady.next(true);\r\n\r\n this.updatePeerState(\r\n undefined,\r\n enableVideo,\r\n enableAudio,\r\n false\r\n );\r\n\r\n console.log('Local media started:', this.localStream);\r\n } catch (error) {\r\n console.error('Error accessing media devices:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n async startScreenShare(): Promise<void> {\r\n try {\r\n const screenStream = await (navigator.mediaDevices as any).getDisplayMedia({\r\n video: true,\r\n audio: false\r\n });\r\n\r\n if (this.localStream) {\r\n this.localStream.getTracks().forEach(track => track.stop());\r\n }\r\n\r\n this.localStream = screenStream;\r\n this._localStreamReady.next(true);\r\n\r\n this.replaceTracksInAllPeers();\r\n\r\n this.updatePeerState(undefined, false, false, true);\r\n\r\n screenStream.getVideoTracks()[0].addEventListener('ended', () => {\r\n this.stopScreenShare();\r\n });\r\n\r\n console.log('Screen sharing started');\r\n } catch (error) {\r\n console.error('Error starting screen share:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n stopScreenShare(): void {\r\n if (this.localStream) {\r\n this.localStream.getTracks().forEach(track => track.stop());\r\n this.localStream = undefined;\r\n this._localStreamReady.next(false);\r\n }\r\n\r\n this.updatePeerState(undefined, false, false, false);\r\n\r\n console.log('Screen sharing stopped');\r\n }\r\n\r\n endSession(): void {\r\n this.peerConnections.forEach((conn, peerId) => {\r\n this.closePeerConnection(peerId);\r\n });\r\n\r\n if (this.localStream) {\r\n this.localStream.getTracks().forEach(track => track.stop());\r\n this.localStream = undefined;\r\n this._localStreamReady.next(false);\r\n }\r\n\r\n if (this.signallingSubscription) {\r\n this.signallingSubscription.unsubscribe();\r\n }\r\n\r\n this.signalling.disconnect();\r\n\r\n this._connectionState.next('disconnected');\r\n this._remoteStreams.next(new Map());\r\n this._activePeers.next([]);\r\n\r\n console.log('WebRTC session ended');\r\n }\r\n\r\n private async handleSignallingMessage(message: WebRTCMessage): Promise<void> {\r\n try {\r\n switch (message.type) {\r\n case 'peer.check':\r\n if (message.fromPeerId) {\r\n await this.handlePeerCheck(message.fromPeerId, message.fromUserId!, message.fromUsername!, message.peerRole!);\r\n }\r\n break;\r\n\r\n case 'offer':\r\n if (message.fromPeerId && message.sdp) {\r\n await this.handleOffer(message.fromPeerId, message.fromUserId!, message.fromUsername!, message.sdp);\r\n }\r\n break;\r\n\r\n case 'answer':\r\n if (message.fromPeerId && message.sdp) {\r\n await this.handleAnswer(message.fromPeerId, message.sdp);\r\n }\r\n break;\r\n\r\n case 'ice_candidate':\r\n if (message.fromPeerId && message.candidate) {\r\n await this.handleIceCandidate(message.fromPeerId, message.candidate);\r\n }\r\n break;\r\n\r\n case 'peer.state_update':\r\n this.handlePeerStateUpdate(message);\r\n break;\r\n }\r\n } catch (error) {\r\n console.error('Error handling signalling message:', error);\r\n }\r\n }\r\n\r\n private async handlePeerCheck(peerId: string, userId: number, username: string, role: PeerRole): Promise<void> {\r\n if (!this.peerConnections.has(peerId)) {\r\n console.log(`New peer discovered: ${username} (${peerId}) as ${role}`);\r\n\r\n const pc = await this.createPeerConnection(peerId, userId, username, role);\r\n\r\n const shouldInitiate = this.shouldInitiateConnection(role);\r\n\r\n if (shouldInitiate) {\r\n const offer = await pc.createOffer();\r\n await pc.setLocalDescription(offer);\r\n\r\n if (pc.localDescription) {\r\n this.signalling.sendOffer(peerId, pc.localDescription);\r\n\r\n const connection = this.peerConnections.get(peerId);\r\n if (connection) {\r\n connection.offered = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async handleOffer(peerId: string, userId: number, username: string, sdp: RTCSessionDescriptionInit): Promise<void> {\r\n let pc: RTCPeerConnection;\r\n\r\n if (!this.peerConnections.has(peerId)) {\r\n pc = await this.createPeerConnection(peerId, userId, username, PeerRole.PARTICIPANT);\r\n } else {\r\n pc = this.peerConnections.get(peerId)!.pc;\r\n }\r\n\r\n await pc.setRemoteDescription(new RTCSessionDescription(sdp));\r\n\r\n const answer = await pc.createAnswer();\r\n await pc.setLocalDescription(answer);\r\n\r\n if (pc.localDescription) {\r\n this.signalling.sendAnswer(peerId, pc.localDescription);\r\n\r\n const connection = this.peerConnections.get(peerId);\r\n if (connection) {\r\n connection.answered = true;\r\n }\r\n }\r\n\r\n const connection = this.peerConnections.get(peerId);\r\n if (connection && connection.queuedCandidates.length > 0) {\r\n await Promise.all(\r\n connection.queuedCandidates.map(candidate => pc.addIceCandidate(candidate))\r\n );\r\n connection.queuedCandidates = [];\r\n }\r\n }\r\n\r\n private async handleAnswer(peerId: string, sdp: RTCSessionDescriptionInit): Promise<void> {\r\n const connection = this.peerConnections.get(peerId);\r\n if (!connection) {\r\n console.warn(`Received answer from unknown peer: ${peerId}`);\r\n return;\r\n }\r\n\r\n await connection.pc.setRemoteDescription(new RTCSessionDescription(sdp));\r\n\r\n if (connection.queuedCandidates.length > 0) {\r\n await Promise.all(\r\n connection.queuedCandidates.map(candidate => connection.pc.addIceCandidate(candidate))\r\n );\r\n connection.queuedCandidates = [];\r\n }\r\n }\r\n\r\n private async handleIceCandidate(peerId: string, candidate: RTCIceCandidateInit): Promise<void> {\r\n const connection = this.peerConnections.get(peerId);\r\n if (!connection) {\r\n console.warn(`Received ICE candidate from unknown peer: ${peerId}`);\r\n return;\r\n }\r\n\r\n const iceCandidate = new RTCIceCandidate(candidate);\r\n\r\n if (connection.pc.remoteDescription) {\r\n await connection.pc.addIceCandidate(iceCandidate);\r\n } else {\r\n connection.queuedCandidates.push(iceCandidate);\r\n }\r\n }\r\n\r\n private handlePeerStateUpdate(message: WebRTCMessage): void {\r\n console.log('Peer state update:', message);\r\n }\r\n\r\n private async createPeerConnection(\r\n peerId: string,\r\n userId: number,\r\n username: string,\r\n role: PeerRole\r\n ): Promise<RTCPeerConnection> {\r\n const iceServers = this.signalling.iceServers;\r\n const config: WebRTCConfig = iceServers.length > 0\r\n ? { ...this.defaultConfig, iceServers }\r\n : this.defaultConfig;\r\n\r\n const pc = new RTCPeerConnection(config);\r\n\r\n const dataChannel = pc.createDataChannel('data', { ordered: true });\r\n this.setupDataChannelHandlers(dataChannel, peerId);\r\n\r\n if (this.localStream) {\r\n this.localStream.getTracks().forEach(track => {\r\n pc.addTrack(track, this.localStream!);\r\n });\r\n }\r\n\r\n this.setupPeerConnectionHandlers(pc, peerId);\r\n\r\n const connection: PeerConnection = {\r\n peerId,\r\n userId,\r\n username,\r\n pc,\r\n dataChannel,\r\n role,\r\n offered: false,\r\n answered: false,\r\n connected: false,\r\n queuedCandidates: []\r\n };\r\n\r\n this.peerConnections.set(peerId, connection);\r\n\r\n console.log(`Created peer connection for ${username} (${peerId})`);\r\n\r\n return pc;\r\n }\r\n\r\n private setupPeerConnectionHandlers(pc: RTCPeerConnection, peerId: string): void {\r\n pc.onicecandidate = (event) => {\r\n if (event.candidate) {\r\n this.signalling.sendIceCandidate(peerId, event.candidate.toJSON());\r\n }\r\n };\r\n\r\n pc.ontrack = (event) => {\r\n console.log(`Received track from peer ${peerId}:`, event.track.kind);\r\n\r\n this.zone.run(() => {\r\n const stream = event.streams[0];\r\n const connection = this.peerConnections.get(peerId);\r\n if (connection) {\r\n connection.stream = stream;\r\n }\r\n\r\n const streams = this._remoteStreams.value;\r\n streams.set(peerId, stream);\r\n this._remoteStreams.next(streams);\r\n });\r\n };\r\n\r\n pc.onconnectionstatechange = () => {\r\n console.log(`Connection state with peer ${peerId}: ${pc.connectionState}`);\r\n\r\n this.zone.run(() => {\r\n const connection = this.peerConnections.get(peerId);\r\n if (!connection) return;\r\n\r\n if (pc.connectionState === 'connected') {\r\n connection.connected = true;\r\n this._connectionState.next('connected');\r\n } else if (pc.connectionState === 'failed' || pc.connectionState === 'disconnected') {\r\n this.closePeerConnection(peerId);\r\n }\r\n });\r\n };\r\n\r\n pc.ondatachannel = (event) => {\r\n const receivedChannel = event.channel;\r\n this.setupDataChannelHandlers(receivedChannel, peerId);\r\n\r\n const connection = this.peerConnections.get(peerId);\r\n if (connection) {\r\n connection.dataChannel = receivedChannel;\r\n }\r\n };\r\n }\r\n\r\n private setupDataChannelHandlers(dataChannel: RTCDataChannel, peerId: string): void {\r\n dataChannel.onopen = () => {\r\n console.log(`Data channel opened with peer ${peerId}`);\r\n };\r\n\r\n dataChannel.onmessage = (event) => {\r\n console.log(`Data received from peer ${peerId}:`, event.data);\r\n };\r\n\r\n dataChannel.onclose = () => {\r\n console.log(`Data channel closed with peer ${peerId}`);\r\n };\r\n\r\n dataChannel.onerror = (error) => {\r\n console.error(`Data channel error with peer ${peerId}:`, error);\r\n };\r\n }\r\n\r\n private closePeerConnection(peerId: string): void {\r\n const connection = this.peerConnections.get(peerId);\r\n if (!connection) return;\r\n\r\n connection.pc.close();\r\n this.peerConnections.delete(peerId);\r\n\r\n const streams = this._remoteStreams.value;\r\n streams.delete(peerId);\r\n this._remoteStreams.next(streams);\r\n\r\n console.log(`Closed peer connection with ${peerId}`);\r\n }\r\n\r\n private shouldInitiateConnection(peerRole: PeerRole): boolean {\r\n const myPeers = Array.from(this.peerConnections.values());\r\n const iAmHost = myPeers.some(p => p.role === PeerRole.HOST);\r\n\r\n return iAmHost && peerRole !== PeerRole.HOST;\r\n }\r\n\r\n private replaceTracksInAllPeers(): void {\r\n if (!this.localStream) return;\r\n\r\n this.peerConnections.forEach((connection) => {\r\n const senders = connection.pc.getSenders();\r\n\r\n this.localStream!.getTracks().forEach(track => {\r\n const sender = senders.find(s => s.track?.kind === track.kind);\r\n\r\n if (sender) {\r\n sender.replaceTrack(track).catch(error => {\r\n console.error(`Error replacing ${track.kind} track:`, error);\r\n });\r\n } else {\r\n connection.pc.addTrack(track, this.localStream!);\r\n }\r\n });\r\n });\r\n }\r\n\r\n private updatePeerState(\r\n connectionState?: PeerConnectionState,\r\n hasVideo?: boolean,\r\n hasAudio?: boolean,\r\n hasScreenShare?: boolean\r\n ): void {\r\n this.signalling.sendPeerState(connectionState, hasVideo, hasAudio, hasScreenShare);\r\n }\r\n\r\n get localMediaStream(): MediaStream | undefined {\r\n return this.localStream;\r\n }\r\n\r\n get isConnected(): boolean {\r\n return this._connectionState.value === 'connected';\r\n }\r\n\r\n get activePeerConnections(): PeerConnection[] {\r\n return Array.from(this.peerConnections.values());\r\n }\r\n}\r\n","// Communication and messaging services\r\nexport * from './notification';\r\nexport * from './message-thread';\r\nexport * from './message';\r\nexport * from './thread-participant';\r\nexport * from './communication-websocket';\r\nexport * from './webrtc-signalling';\r\nexport * from './webrtc';","/*\n * Public API Surface of cupcake-mint-chocolate\n */\n\nexport * from './lib/cupcake-mint-chocolate';\n\nexport * from './lib/models';\n\nexport * from './lib/services';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.WebRTCSignallingService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"noatgnu-cupcake-mint-chocolate.mjs","sources":["../../../projects/cupcake-mint-chocolate/src/lib/cupcake-mint-chocolate.ts","../../../projects/cupcake-mint-chocolate/src/lib/models/enums.ts","../../../projects/cupcake-mint-chocolate/src/lib/models/webrtc.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/notification.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/message-thread.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/message.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/thread-participant.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/communication-websocket.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/webrtc-signalling.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/webrtc.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/index.ts","../../../projects/cupcake-mint-chocolate/src/public-api.ts","../../../projects/cupcake-mint-chocolate/src/noatgnu-cupcake-mint-chocolate.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'ccmc-cupcake-mint-chocolate',\n imports: [],\n template: `\n <p>\n cupcake-mint-chocolate works!\n </p>\n `,\n styles: ``\n})\nexport class CupcakeMintChocolate {\n\n}\n","export enum NotificationType {\r\n SYSTEM = 'system',\r\n MAINTENANCE = 'maintenance',\r\n INVENTORY = 'inventory',\r\n BILLING = 'billing',\r\n PROJECT = 'project',\r\n PROTOCOL = 'protocol',\r\n DOCUMENT = 'document',\r\n USER = 'user'\r\n}\r\n\r\nexport const NotificationTypeLabels: Record<NotificationType, string> = {\r\n [NotificationType.SYSTEM]: 'System',\r\n [NotificationType.MAINTENANCE]: 'Maintenance',\r\n [NotificationType.INVENTORY]: 'Inventory',\r\n [NotificationType.BILLING]: 'Billing',\r\n [NotificationType.PROJECT]: 'Project',\r\n [NotificationType.PROTOCOL]: 'Protocol',\r\n [NotificationType.DOCUMENT]: 'Document',\r\n [NotificationType.USER]: 'User'\r\n};\r\n\r\nexport enum NotificationPriority {\r\n LOW = 'low',\r\n NORMAL = 'normal',\r\n HIGH = 'high',\r\n URGENT = 'urgent'\r\n}\r\n\r\nexport const NotificationPriorityLabels: Record<NotificationPriority, string> = {\r\n [NotificationPriority.LOW]: 'Low',\r\n [NotificationPriority.NORMAL]: 'Normal',\r\n [NotificationPriority.HIGH]: 'High',\r\n [NotificationPriority.URGENT]: 'Urgent'\r\n};\r\n\r\nexport enum DeliveryStatus {\r\n PENDING = 'pending',\r\n SENT = 'sent',\r\n DELIVERED = 'delivered',\r\n FAILED = 'failed',\r\n READ = 'read'\r\n}\r\n\r\nexport const DeliveryStatusLabels: Record<DeliveryStatus, string> = {\r\n [DeliveryStatus.PENDING]: 'Pending',\r\n [DeliveryStatus.SENT]: 'Sent',\r\n [DeliveryStatus.DELIVERED]: 'Delivered',\r\n [DeliveryStatus.FAILED]: 'Failed',\r\n [DeliveryStatus.READ]: 'Read'\r\n};\r\n\r\nexport enum MessageType {\r\n DIRECT = 'direct',\r\n THREAD = 'thread',\r\n BROADCAST = 'broadcast',\r\n SYSTEM = 'system'\r\n}\r\n\r\nexport const MessageTypeLabels: Record<MessageType, string> = {\r\n [MessageType.DIRECT]: 'Direct Message',\r\n [MessageType.THREAD]: 'Thread Reply',\r\n [MessageType.BROADCAST]: 'Broadcast',\r\n [MessageType.SYSTEM]: 'System Message'\r\n};","import { BaseTimestampedModel } from './base';\r\n\r\nexport enum WebRTCSessionType {\r\n VIDEO_CALL = 'video_call',\r\n AUDIO_CALL = 'audio_call',\r\n SCREEN_SHARE = 'screen_share',\r\n DATA_CHANNEL = 'data_channel'\r\n}\r\n\r\nexport enum WebRTCSessionStatus {\r\n WAITING = 'waiting',\r\n ACTIVE = 'active',\r\n ENDED = 'ended'\r\n}\r\n\r\nexport enum PeerRole {\r\n HOST = 'host',\r\n VIEWER = 'viewer',\r\n PARTICIPANT = 'participant'\r\n}\r\n\r\nexport enum PeerConnectionState {\r\n CONNECTING = 'connecting',\r\n CONNECTED = 'connected',\r\n DISCONNECTED = 'disconnected',\r\n FAILED = 'failed'\r\n}\r\n\r\nexport enum SignalType {\r\n OFFER = 'offer',\r\n ANSWER = 'answer',\r\n ICE_CANDIDATE = 'ice_candidate',\r\n CHECK = 'check'\r\n}\r\n\r\nexport interface WebRTCSession extends BaseTimestampedModel {\r\n id: string;\r\n thread?: string;\r\n sessionType: WebRTCSessionType;\r\n sessionStatus: WebRTCSessionStatus;\r\n initiatedBy: number;\r\n participants: number[];\r\n startedAt: string;\r\n endedAt?: string;\r\n}\r\n\r\nexport interface WebRTCPeer extends BaseTimestampedModel {\r\n id: string;\r\n session: string;\r\n user: number;\r\n channelId: string;\r\n peerRole: PeerRole;\r\n connectionState: PeerConnectionState;\r\n hasVideo: boolean;\r\n hasAudio: boolean;\r\n hasScreenShare: boolean;\r\n joinedAt: string;\r\n lastSeenAt: string;\r\n}\r\n\r\nexport interface WebRTCSignal extends BaseTimestampedModel {\r\n id: string;\r\n session: string;\r\n fromPeer: string;\r\n toPeer?: string;\r\n signalType: SignalType;\r\n signalData: any;\r\n delivered: boolean;\r\n}\r\n\r\nexport interface PeerInfo {\r\n id: string;\r\n userId: number;\r\n username: string;\r\n peerRole: PeerRole;\r\n connectionState: PeerConnectionState;\r\n hasVideo: boolean;\r\n hasAudio: boolean;\r\n hasScreenShare: boolean;\r\n}\r\n\r\nexport interface WebRTCMessage {\r\n type: 'connection.established' | 'check.response' | 'peer.check' | 'offer' | 'answer' | 'ice_candidate' | 'peer.state_update' | 'error';\r\n message?: string;\r\n peerId?: string;\r\n sessionId?: string;\r\n userId?: number;\r\n username?: string;\r\n fromPeerId?: string;\r\n fromUserId?: number;\r\n fromUsername?: string;\r\n toPeerId?: string;\r\n sdp?: RTCSessionDescriptionInit;\r\n candidate?: RTCIceCandidateInit;\r\n peers?: PeerInfo[];\r\n peerRole?: PeerRole;\r\n connectionState?: PeerConnectionState;\r\n hasVideo?: boolean;\r\n hasAudio?: boolean;\r\n hasScreenShare?: boolean;\r\n iceServers?: RTCIceServer[];\r\n}\r\n\r\nexport interface WebRTCConfig {\r\n iceServers: RTCIceServer[];\r\n iceCandidatePoolSize?: number;\r\n iceTransportPolicy?: RTCIceTransportPolicy;\r\n bundlePolicy?: RTCBundlePolicy;\r\n rtcpMuxPolicy?: RTCRtcpMuxPolicy;\r\n}\r\n\r\nexport interface MediaConstraintsConfig {\r\n video?: boolean | MediaTrackConstraints;\r\n audio?: boolean | MediaTrackConstraints;\r\n}\r\n\r\nexport interface PeerConnection {\r\n peerId: string;\r\n userId: number;\r\n username: string;\r\n pc: RTCPeerConnection;\r\n dataChannel?: RTCDataChannel;\r\n stream?: MediaStream;\r\n role: PeerRole;\r\n offered: boolean;\r\n answered: boolean;\r\n connected: boolean;\r\n queuedCandidates: RTCIceCandidate[];\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@noatgnu/cupcake-core';\r\n\r\nimport {\r\n Notification,\r\n NotificationCreateRequest,\r\n NotificationUpdateRequest,\r\n MarkNotificationReadRequest,\r\n BulkNotificationActionRequest,\r\n NotificationType,\r\n NotificationPriority,\r\n DeliveryStatus,\r\n PaginatedResponse,\r\n NotificationQueryParams\r\n} from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NotificationService extends BaseApiService {\r\n\r\n /**\r\n * Get all notifications with optional filtering\r\n */\r\n getNotifications(params?: NotificationQueryParams): Observable<PaginatedResponse<Notification>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<Notification>>(`${this.apiUrl}/notifications/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single notification by ID\r\n */\r\n getNotification(id: string): Observable<Notification> {\r\n return this.get<Notification>(`${this.apiUrl}/notifications/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new notification\r\n */\r\n createNotification(notification: NotificationCreateRequest): Observable<Notification> {\r\n return this.post<Notification>(`${this.apiUrl}/notifications/`, notification);\r\n }\r\n\r\n /**\r\n * Update an existing notification\r\n */\r\n updateNotification(id: string, notification: NotificationUpdateRequest): Observable<Notification> {\r\n return this.put<Notification>(`${this.apiUrl}/notifications/${id}/`, notification);\r\n }\r\n\r\n /**\r\n * Partially update a notification\r\n */\r\n patchNotification(id: string, notification: Partial<NotificationUpdateRequest>): Observable<Notification> {\r\n return this.patch<Notification>(`${this.apiUrl}/notifications/${id}/`, notification);\r\n }\r\n\r\n /**\r\n * Delete a notification\r\n */\r\n deleteNotification(id: string): Observable<void> {\r\n return this.delete<void>(`${this.apiUrl}/notifications/${id}/`);\r\n }\r\n\r\n /**\r\n * Mark a notification as read/unread\r\n */\r\n markNotificationRead(id: string, request: MarkNotificationReadRequest): Observable<Notification> {\r\n return this.post<Notification>(`${this.apiUrl}/notifications/${id}/mark_read/`, request);\r\n }\r\n\r\n\r\n /**\r\n * Get unread notifications for current user\r\n */\r\n getUnreadNotifications(): Observable<PaginatedResponse<Notification>> {\r\n return this.get<PaginatedResponse<Notification>>(`${this.apiUrl}/notifications/unread/`);\r\n }\r\n\r\n /**\r\n * Get notification statistics for current user\r\n */\r\n getNotificationStats(): Observable<{\r\n total: number;\r\n unread: number;\r\n byType: { [key: string]: number };\r\n byPriority: { [key: string]: number };\r\n }> {\r\n return this.get<{\r\n total: number;\r\n unread: number;\r\n byType: { [key: string]: number };\r\n byPriority: { [key: string]: number };\r\n }>(`${this.apiUrl}/notifications/stats/`);\r\n }\r\n\r\n /**\r\n * Mark all notifications as read for current user\r\n */\r\n markAllNotificationsRead(): Observable<{ success: boolean; message: string }> {\r\n return this.post<{ success: boolean; message: string }>(`${this.apiUrl}/notifications/mark_all_read/`, {});\r\n }\r\n\r\n /**\r\n * Search notifications by title or message\r\n */\r\n searchNotifications(query: string): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ search: query });\r\n }\r\n\r\n /**\r\n * Get notifications by type\r\n */\r\n getNotificationsByType(type: NotificationType): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ notificationType: type });\r\n }\r\n\r\n /**\r\n * Get notifications by priority\r\n */\r\n getNotificationsByPriority(priority: NotificationPriority): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ priority });\r\n }\r\n\r\n /**\r\n * Get notifications by sender\r\n */\r\n getNotificationsBySender(senderId: number): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ sender: senderId });\r\n }\r\n\r\n /**\r\n * Get notifications by delivery status\r\n */\r\n getNotificationsByStatus(status: DeliveryStatus): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ deliveryStatus: status });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@noatgnu/cupcake-core';\r\n\r\nimport {\r\n MessageThread,\r\n MessageThreadCreateRequest,\r\n MessageThreadUpdateRequest,\r\n ThreadParticipantRequest,\r\n ThreadSearchRequest,\r\n ThreadParticipant,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface MessageThreadQueryParams {\r\n search?: string;\r\n isPrivate?: boolean;\r\n isArchived?: boolean;\r\n creator?: number;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MessageThreadService extends BaseApiService {\r\n\r\n /**\r\n * Get all message threads with optional filtering\r\n */\r\n getMessageThreads(params?: MessageThreadQueryParams): Observable<PaginatedResponse<MessageThread>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<MessageThread>>(`${this.apiUrl}/threads/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single message thread by ID\r\n */\r\n getMessageThread(id: string): Observable<MessageThread> {\r\n return this.get<MessageThread>(`${this.apiUrl}/threads/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new message thread\r\n */\r\n createMessageThread(thread: MessageThreadCreateRequest): Observable<MessageThread> {\r\n return this.post<MessageThread>(`${this.apiUrl}/threads/`, thread);\r\n }\r\n\r\n /**\r\n * Update an existing message thread\r\n */\r\n updateMessageThread(id: string, thread: MessageThreadUpdateRequest): Observable<MessageThread> {\r\n return this.put<MessageThread>(`${this.apiUrl}/threads/${id}/`, thread);\r\n }\r\n\r\n /**\r\n * Partially update a message thread\r\n */\r\n patchMessageThread(id: string, thread: Partial<MessageThreadUpdateRequest>): Observable<MessageThread> {\r\n return this.patch<MessageThread>(`${this.apiUrl}/threads/${id}/`, thread);\r\n }\r\n\r\n /**\r\n * Delete a message thread\r\n */\r\n deleteMessageThread(id: string): Observable<void> {\r\n return this.delete<void>(`${this.apiUrl}/threads/${id}/`);\r\n }\r\n\r\n /**\r\n * Add participant to a thread\r\n */\r\n addParticipant(id: string, request: { username: string }): Observable<{ message: string; participant: ThreadParticipant }> {\r\n return this.post<{ message: string; participant: ThreadParticipant }>(`${this.apiUrl}/threads/${id}/add_participant/`, request);\r\n }\r\n\r\n /**\r\n * Remove participant from a thread\r\n */\r\n removeParticipant(id: string, request: { username: string }): Observable<{ message: string }> {\r\n return this.post<{ message: string }>(`${this.apiUrl}/threads/${id}/remove_participant/`, request);\r\n }\r\n\r\n /**\r\n * Get thread participants\r\n */\r\n getParticipants(id: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.get<PaginatedResponse<ThreadParticipant>>(`${this.apiUrl}/threads/${id}/participants/`);\r\n }\r\n\r\n /**\r\n * Archive/unarchive a thread (toggles state)\r\n */\r\n toggleArchiveThread(id: string): Observable<{ message: string; isArchived: boolean }> {\r\n return this.post<{ message: string; isArchived: boolean }>(`${this.apiUrl}/threads/${id}/archive/`, {});\r\n }\r\n\r\n /**\r\n * Mark thread as read for current user\r\n */\r\n markThreadAsRead(id: string): Observable<{ success: boolean; message: string }> {\r\n return this.post<{ success: boolean; message: string }>(`${this.apiUrl}/threads/${id}/mark_read/`, {});\r\n }\r\n\r\n\r\n /**\r\n * Search message threads by title or description\r\n */\r\n searchMessageThreads(query: string): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ search: query });\r\n }\r\n\r\n /**\r\n * Get private threads only\r\n */\r\n getPrivateThreads(): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ isPrivate: true });\r\n }\r\n\r\n /**\r\n * Get public threads only\r\n */\r\n getPublicThreads(): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ isPrivate: false });\r\n }\r\n\r\n /**\r\n * Get archived threads\r\n */\r\n getArchivedThreads(): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ isArchived: true });\r\n }\r\n\r\n /**\r\n * Get active threads (non-archived)\r\n */\r\n getActiveThreads(): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ isArchived: false });\r\n }\r\n\r\n /**\r\n * Get threads created by a specific user\r\n */\r\n getThreadsByCreator(creatorId: number): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ creator: creatorId });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@noatgnu/cupcake-core';\r\n\r\nimport {\r\n Message,\r\n MessageCreateRequest,\r\n MessageUpdateRequest,\r\n MessageSearchRequest,\r\n MessageType,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface MessageQueryParams {\r\n search?: string;\r\n thread?: string;\r\n messageType?: MessageType;\r\n sender?: number;\r\n isDeleted?: boolean;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MessageService extends BaseApiService {\r\n\r\n /**\r\n * Get all messages with optional filtering\r\n */\r\n getMessages(params?: MessageQueryParams): Observable<PaginatedResponse<Message>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<Message>>(`${this.apiUrl}/messages/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single message by ID\r\n */\r\n getMessage(id: string): Observable<Message> {\r\n return this.get<Message>(`${this.apiUrl}/messages/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new message\r\n */\r\n createMessage(message: MessageCreateRequest): Observable<Message> {\r\n return this.post<Message>(`${this.apiUrl}/messages/`, message);\r\n }\r\n\r\n /**\r\n * Update an existing message\r\n */\r\n updateMessage(id: string, message: MessageUpdateRequest): Observable<Message> {\r\n return this.put<Message>(`${this.apiUrl}/messages/${id}/`, message);\r\n }\r\n\r\n /**\r\n * Partially update a message\r\n */\r\n patchMessage(id: string, message: Partial<MessageUpdateRequest>): Observable<Message> {\r\n return this.patch<Message>(`${this.apiUrl}/messages/${id}/`, message);\r\n }\r\n\r\n /**\r\n * Delete a message (soft delete)\r\n */\r\n deleteMessage(id: string): Observable<Message> {\r\n return this.delete<Message>(`${this.apiUrl}/messages/${id}/`);\r\n }\r\n\r\n\r\n /**\r\n * Get messages in a specific thread\r\n */\r\n getThreadMessages(threadId: string, params?: Omit<MessageQueryParams, 'thread'>): Observable<PaginatedResponse<Message>> {\r\n const queryParams = { ...params, thread: threadId };\r\n return this.getMessages(queryParams);\r\n }\r\n\r\n /**\r\n * Search messages by content\r\n */\r\n searchMessages(query: string, threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { search: query };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Get messages by sender\r\n */\r\n getMessagesBySender(senderId: number, threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { sender: senderId };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Get messages by type\r\n */\r\n getMessagesByType(messageType: MessageType, threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { messageType };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Get deleted messages (for moderation)\r\n */\r\n getDeletedMessages(threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { isDeleted: true };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Get active messages (non-deleted)\r\n */\r\n getActiveMessages(threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { isDeleted: false };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Reply to a message\r\n */\r\n replyToMessage(parentMessageId: string, content: string, threadId: string): Observable<Message> {\r\n const message: MessageCreateRequest = {\r\n thread: threadId,\r\n content,\r\n replyTo: parentMessageId\r\n };\r\n return this.createMessage(message);\r\n }\r\n}","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport {\r\n ThreadParticipant,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface ThreadParticipantQueryParams {\r\n thread?: string;\r\n isModerator?: boolean;\r\n notificationsEnabled?: boolean;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ThreadParticipantService {\r\n private http = inject(HttpClient);\r\n private apiUrl = '/api'; // This should be configurable\r\n\r\n /**\r\n * Get all thread participants with optional filtering\r\n */\r\n getThreadParticipants(params?: ThreadParticipantQueryParams): Observable<PaginatedResponse<ThreadParticipant>> {\r\n let httpParams = new HttpParams();\r\n \r\n if (params) {\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n httpParams = httpParams.set(key, value.toString());\r\n }\r\n });\r\n }\r\n\r\n return this.http.get<PaginatedResponse<ThreadParticipant>>(`${this.apiUrl}/thread-participants/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single thread participant by ID\r\n */\r\n getThreadParticipant(id: number): Observable<ThreadParticipant> {\r\n return this.http.get<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/`);\r\n }\r\n\r\n /**\r\n * Update thread participant settings\r\n */\r\n updateThreadParticipant(id: number, updates: { isModerator?: boolean; notificationsEnabled?: boolean }): Observable<ThreadParticipant> {\r\n return this.http.patch<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/`, updates);\r\n }\r\n\r\n /**\r\n * Update participant's last read timestamp\r\n */\r\n updateLastRead(id: number): Observable<ThreadParticipant> {\r\n return this.http.post<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/update_last_read/`, {});\r\n }\r\n\r\n /**\r\n * Get participants for a specific thread\r\n */\r\n getParticipantsForThread(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId });\r\n }\r\n\r\n /**\r\n * Get moderators for a specific thread\r\n */\r\n getModeratorsForThread(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId, isModerator: true });\r\n }\r\n\r\n /**\r\n * Get non-moderator participants for a specific thread\r\n */\r\n getRegularParticipantsForThread(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId, isModerator: false });\r\n }\r\n\r\n /**\r\n * Get participants with notifications enabled for a specific thread\r\n */\r\n getNotificationEnabledParticipants(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId, notificationsEnabled: true });\r\n }\r\n\r\n /**\r\n * Get participants with notifications disabled for a specific thread\r\n */\r\n getNotificationDisabledParticipants(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId, notificationsEnabled: false });\r\n }\r\n\r\n /**\r\n * Toggle moderator status for a participant\r\n */\r\n toggleModeratorStatus(id: number): Observable<ThreadParticipant> {\r\n return this.http.post<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/toggle_moderator/`, {});\r\n }\r\n\r\n /**\r\n * Toggle notifications for a participant\r\n */\r\n toggleNotifications(id: number): Observable<ThreadParticipant> {\r\n return this.http.post<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/toggle_notifications/`, {});\r\n }\r\n\r\n /**\r\n * Leave a thread (for current user)\r\n */\r\n leaveThread(threadId: string): Observable<{ success: boolean; message: string }> {\r\n return this.http.post<{ success: boolean; message: string }>(`${this.apiUrl}/thread-participants/leave_thread/`, { thread: threadId });\r\n }\r\n\r\n /**\r\n * Get threads where current user is participant\r\n */\r\n getMyParticipations(): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.http.get<PaginatedResponse<ThreadParticipant>>(`${this.apiUrl}/thread-participants/my_participations/`);\r\n }\r\n\r\n /**\r\n * Get threads where current user is moderator\r\n */\r\n getMyModerations(): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.http.get<PaginatedResponse<ThreadParticipant>>(`${this.apiUrl}/thread-participants/my_moderations/`);\r\n }\r\n}","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\n\r\nimport { NotificationType, NotificationPriority, MessageType } from '../models';\r\n\r\nexport interface NewNotificationEvent {\r\n type: 'notification.new';\r\n notificationId: string;\r\n title: string;\r\n message: string;\r\n notificationType: NotificationType;\r\n priority: NotificationPriority;\r\n data: {\r\n alertType?: string;\r\n quantity?: number;\r\n link?: string;\r\n [key: string]: string | number | boolean | undefined;\r\n };\r\n timestamp: string;\r\n}\r\n\r\nexport interface NewMessageEvent {\r\n type: 'message.new';\r\n threadId: string;\r\n messageId: string;\r\n senderId: number;\r\n senderUsername: string;\r\n content: string;\r\n messageType: MessageType;\r\n timestamp: string;\r\n}\r\n\r\nexport interface ThreadUpdateEvent {\r\n type: 'thread.update';\r\n threadId: string;\r\n action: string;\r\n message: string;\r\n timestamp: string;\r\n}\r\n\r\nexport interface NotificationUpdateEvent {\r\n type: 'notification.update';\r\n notificationId: string;\r\n status: string;\r\n timestamp: string;\r\n}\r\n\r\nexport interface ConnectionEstablishedEvent {\r\n type: 'ccmc.connection.established';\r\n message: string;\r\n userId: number;\r\n username: string;\r\n}\r\n\r\nexport interface ThreadSubscriptionConfirmedEvent {\r\n type: 'thread.subscription.confirmed';\r\n threadId: string;\r\n}\r\n\r\nexport interface ThreadSubscriptionDeniedEvent {\r\n type: 'thread.subscription.denied';\r\n threadId: string;\r\n error: string;\r\n}\r\n\r\nexport interface ThreadUnsubscriptionConfirmedEvent {\r\n type: 'thread.unsubscription.confirmed';\r\n threadId: string;\r\n}\r\n\r\nexport interface NotificationMarkedReadEvent {\r\n type: 'notification.marked_read';\r\n notificationId: string;\r\n}\r\n\r\nexport interface PongEvent {\r\n type: 'pong';\r\n}\r\n\r\nexport type WebSocketIncomingMessage =\r\n | NewNotificationEvent\r\n | NewMessageEvent\r\n | ThreadUpdateEvent\r\n | NotificationUpdateEvent\r\n | ConnectionEstablishedEvent\r\n | ThreadSubscriptionConfirmedEvent\r\n | ThreadSubscriptionDeniedEvent\r\n | ThreadUnsubscriptionConfirmedEvent\r\n | NotificationMarkedReadEvent\r\n | PongEvent;\r\n\r\nexport interface SubscribeThreadMessage {\r\n type: 'subscribe_thread';\r\n thread_id: string;\r\n}\r\n\r\nexport interface UnsubscribeThreadMessage {\r\n type: 'unsubscribe_thread';\r\n thread_id: string;\r\n}\r\n\r\nexport interface MarkNotificationReadMessage {\r\n type: 'mark_notification_read';\r\n notification_id: string;\r\n}\r\n\r\nexport interface PingMessage {\r\n type: 'ping';\r\n}\r\n\r\nexport type WebSocketOutgoingMessage =\r\n | SubscribeThreadMessage\r\n | UnsubscribeThreadMessage\r\n | MarkNotificationReadMessage\r\n | PingMessage;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CommunicationWebSocketService implements OnDestroy {\r\n private socket: WebSocket | null = null;\r\n private reconnectAttempts = 0;\r\n private maxReconnectAttempts = 5;\r\n private reconnectDelay = 3000;\r\n private reconnectTimer: number | null = null;\r\n\r\n private messageSubject = new Subject<WebSocketIncomingMessage>();\r\n private connectionStateSubject = new BehaviorSubject<'disconnected' | 'connecting' | 'connected'>('disconnected');\r\n\r\n public connectionState$ = this.connectionStateSubject.asObservable();\r\n public messages$ = this.messageSubject.asObservable();\r\n\r\n public newNotifications$: Observable<NewNotificationEvent> = this.messages$.pipe(\r\n filter((msg): msg is NewNotificationEvent => msg.type === 'notification.new')\r\n );\r\n\r\n public newMessages$: Observable<NewMessageEvent> = this.messages$.pipe(\r\n filter((msg): msg is NewMessageEvent => msg.type === 'message.new')\r\n );\r\n\r\n public threadUpdates$: Observable<ThreadUpdateEvent> = this.messages$.pipe(\r\n filter((msg): msg is ThreadUpdateEvent => msg.type === 'thread.update')\r\n );\r\n\r\n public notificationUpdates$: Observable<NotificationUpdateEvent> = this.messages$.pipe(\r\n filter((msg): msg is NotificationUpdateEvent => msg.type === 'notification.update')\r\n );\r\n\r\n connect(wsBaseUrl: string, token?: string): void {\r\n if (this.socket && this.socket.readyState === WebSocket.OPEN) {\r\n console.log('WebSocket already connected');\r\n return;\r\n }\r\n\r\n this.connectionStateSubject.next('connecting');\r\n\r\n const fullUrl = `${wsBaseUrl.replace(/\\/$/, '')}/ccmc/communications/`;\r\n const url = token ? `${fullUrl}?token=${token}` : fullUrl;\r\n this.socket = new WebSocket(url);\r\n\r\n this.socket.onopen = () => {\r\n console.log('CCMC WebSocket connected');\r\n this.connectionStateSubject.next('connected');\r\n this.reconnectAttempts = 0;\r\n };\r\n\r\n this.socket.onmessage = (event) => {\r\n try {\r\n const message = JSON.parse(event.data) as WebSocketIncomingMessage;\r\n this.messageSubject.next(message);\r\n\r\n if (message.type === 'ccmc.connection.established') {\r\n console.log('CCMC connection established:', message);\r\n }\r\n } catch (error) {\r\n console.error('Error parsing WebSocket message:', error);\r\n }\r\n };\r\n\r\n this.socket.onerror = (error) => {\r\n console.error('CCMC WebSocket error:', error);\r\n };\r\n\r\n this.socket.onclose = (event) => {\r\n console.log('CCMC WebSocket closed:', event.code, event.reason);\r\n this.connectionStateSubject.next('disconnected');\r\n\r\n if (this.reconnectAttempts < this.maxReconnectAttempts) {\r\n this.scheduleReconnect(wsBaseUrl, token);\r\n }\r\n };\r\n }\r\n\r\n private scheduleReconnect(wsBaseUrl: string, token?: string): void {\r\n this.reconnectAttempts++;\r\n const delay = this.reconnectDelay * this.reconnectAttempts;\r\n\r\n console.log(`Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);\r\n\r\n this.reconnectTimer = setTimeout(() => {\r\n this.connect(wsBaseUrl, token);\r\n }, delay);\r\n }\r\n\r\n disconnect(): void {\r\n if (this.reconnectTimer) {\r\n clearTimeout(this.reconnectTimer);\r\n this.reconnectTimer = null;\r\n }\r\n\r\n if (this.socket) {\r\n this.socket.close();\r\n this.socket = null;\r\n }\r\n\r\n this.connectionStateSubject.next('disconnected');\r\n this.reconnectAttempts = 0;\r\n }\r\n\r\n subscribeToThread(threadId: string): void {\r\n const message: SubscribeThreadMessage = {\r\n type: 'subscribe_thread',\r\n thread_id: threadId\r\n };\r\n this.send(message);\r\n }\r\n\r\n unsubscribeFromThread(threadId: string): void {\r\n const message: UnsubscribeThreadMessage = {\r\n type: 'unsubscribe_thread',\r\n thread_id: threadId\r\n };\r\n this.send(message);\r\n }\r\n\r\n markNotificationAsRead(notificationId: string): void {\r\n const message: MarkNotificationReadMessage = {\r\n type: 'mark_notification_read',\r\n notification_id: notificationId\r\n };\r\n this.send(message);\r\n }\r\n\r\n ping(): void {\r\n const message: PingMessage = { type: 'ping' };\r\n this.send(message);\r\n }\r\n\r\n private send(message: WebSocketOutgoingMessage): void {\r\n if (this.socket && this.socket.readyState === WebSocket.OPEN) {\r\n this.socket.send(JSON.stringify(message));\r\n } else {\r\n console.warn('Cannot send message: WebSocket not connected');\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.disconnect();\r\n }\r\n\r\n isConnected(): boolean {\r\n return this.socket !== null && this.socket.readyState === WebSocket.OPEN;\r\n }\r\n\r\n getConnectionState(): 'disconnected' | 'connecting' | 'connected' {\r\n return this.connectionStateSubject.value;\r\n }\r\n}\r\n","import { Injectable, NgZone, inject } from '@angular/core';\r\nimport { webSocket, WebSocketSubject } from 'rxjs/webSocket';\r\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\r\nimport { AuthService, CUPCAKE_CORE_CONFIG } from '@noatgnu/cupcake-core';\r\nimport {\r\n WebRTCMessage,\r\n PeerInfo,\r\n PeerRole,\r\n PeerConnectionState\r\n} from '../models/webrtc';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WebRTCSignallingService {\r\n private ws?: WebSocketSubject<WebRTCMessage>;\r\n private wsSubscription?: Subscription;\r\n private baseUrl: string = '';\r\n\r\n private _connected = new BehaviorSubject<boolean>(false);\r\n private _peerId = new BehaviorSubject<string | null>(null);\r\n private _sessionId = new BehaviorSubject<string | null>(null);\r\n private _peers = new BehaviorSubject<PeerInfo[]>([]);\r\n private _messages = new Subject<WebRTCMessage>();\r\n private _iceServers = new BehaviorSubject<RTCIceServer[]>([]);\r\n\r\n connected$ = this._connected.asObservable();\r\n peerId$ = this._peerId.asObservable();\r\n sessionId$ = this._sessionId.asObservable();\r\n peers$ = this._peers.asObservable();\r\n messages$ = this._messages.asObservable();\r\n iceServers$ = this._iceServers.asObservable();\r\n\r\n private config = inject(CUPCAKE_CORE_CONFIG);\r\n\r\n constructor(\r\n private authService: AuthService,\r\n private zone: NgZone\r\n ) {\r\n this.baseUrl = this.getBaseUrl();\r\n }\r\n\r\n private getBaseUrl(): string {\r\n if (this.config && this.config.websocketUrl) {\r\n return this.config.websocketUrl;\r\n }\r\n if (this.config && this.config.apiUrl) {\r\n const apiUrl = this.config.apiUrl.replace(/^https?:\\/\\//, '');\r\n const protocol = this.config.apiUrl.startsWith('https') ? 'wss:' : 'ws:';\r\n return `${protocol}//${apiUrl}`;\r\n }\r\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\r\n const host = window.location.host;\r\n return `${protocol}//${host}`;\r\n }\r\n\r\n connect(sessionId: string): void {\r\n this.disconnect();\r\n\r\n const token = this.authService.getAccessToken();\r\n if (!token) {\r\n console.error('No authentication token available');\r\n return;\r\n }\r\n\r\n const wsUrl = `${this.baseUrl}/ccmc/webrtc/${sessionId}/?token=${token}`;\r\n\r\n this.ws = webSocket<WebRTCMessage>({\r\n url: wsUrl,\r\n openObserver: {\r\n next: () => {\r\n console.log('WebRTC signalling connection opened');\r\n this.zone.run(() => {\r\n this._connected.next(true);\r\n });\r\n }\r\n },\r\n closeObserver: {\r\n next: () => {\r\n console.log('WebRTC signalling connection closed');\r\n this.zone.run(() => {\r\n this._connected.next(false);\r\n this._peerId.next(null);\r\n });\r\n }\r\n },\r\n deserializer: msg => {\r\n try {\r\n return JSON.parse(msg.data);\r\n } catch (e) {\r\n console.error('Error parsing WebSocket message:', e);\r\n return msg.data;\r\n }\r\n }\r\n });\r\n\r\n this.wsSubscription = this.ws.subscribe({\r\n next: (message: WebRTCMessage) => {\r\n this.zone.run(() => {\r\n this.handleMessage(message);\r\n });\r\n },\r\n error: (error) => {\r\n console.error('WebRTC signalling error:', error);\r\n this.zone.run(() => {\r\n this._connected.next(false);\r\n });\r\n\r\n setTimeout(() => {\r\n if (this._sessionId.value) {\r\n console.log('Attempting to reconnect...');\r\n this.connect(this._sessionId.value);\r\n }\r\n }, 5000);\r\n },\r\n complete: () => {\r\n console.log('WebRTC signalling connection completed');\r\n this.zone.run(() => {\r\n this._connected.next(false);\r\n });\r\n }\r\n });\r\n }\r\n\r\n disconnect(): void {\r\n if (this.wsSubscription) {\r\n this.wsSubscription.unsubscribe();\r\n this.wsSubscription = undefined;\r\n }\r\n\r\n if (this.ws) {\r\n this.ws.complete();\r\n this.ws = undefined;\r\n }\r\n\r\n this._connected.next(false);\r\n this._peerId.next(null);\r\n this._sessionId.next(null);\r\n this._peers.next([]);\r\n }\r\n\r\n sendCheck(peerRole: PeerRole = PeerRole.PARTICIPANT): void {\r\n this.send({\r\n type: 'check',\r\n peerRole: peerRole\r\n } as any);\r\n }\r\n\r\n sendOffer(toPeerId: string, sdp: RTCSessionDescriptionInit): void {\r\n this.send({\r\n type: 'offer',\r\n toPeerId: toPeerId,\r\n sdp: sdp\r\n } as any);\r\n }\r\n\r\n sendAnswer(toPeerId: string, sdp: RTCSessionDescriptionInit): void {\r\n this.send({\r\n type: 'answer',\r\n toPeerId: toPeerId,\r\n sdp: sdp\r\n } as any);\r\n }\r\n\r\n sendIceCandidate(toPeerId: string, candidate: RTCIceCandidateInit): void {\r\n this.send({\r\n type: 'ice_candidate',\r\n toPeerId: toPeerId,\r\n candidate: candidate\r\n } as any);\r\n }\r\n\r\n sendPeerState(\r\n connectionState?: PeerConnectionState,\r\n hasVideo?: boolean,\r\n hasAudio?: boolean,\r\n hasScreenShare?: boolean\r\n ): void {\r\n this.send({\r\n type: 'peer_state',\r\n connectionState,\r\n hasVideo,\r\n hasAudio,\r\n hasScreenShare\r\n } as any);\r\n }\r\n\r\n private send(message: any): void {\r\n if (!this.ws) {\r\n console.error('WebSocket not connected');\r\n return;\r\n }\r\n\r\n try {\r\n this.ws.next(message);\r\n } catch (error) {\r\n console.error('Error sending message:', error);\r\n }\r\n }\r\n\r\n private handleMessage(message: WebRTCMessage): void {\r\n switch (message.type) {\r\n case 'connection.established':\r\n this.handleConnectionEstablished(message);\r\n break;\r\n\r\n case 'check.response':\r\n this.handleCheckResponse(message);\r\n break;\r\n\r\n case 'peer.check':\r\n case 'offer':\r\n case 'answer':\r\n case 'ice_candidate':\r\n case 'peer.state_update':\r\n this._messages.next(message);\r\n break;\r\n\r\n case 'error':\r\n console.error('WebRTC signalling error:', message.message);\r\n break;\r\n\r\n default:\r\n console.warn('Unknown message type:', message.type);\r\n }\r\n }\r\n\r\n private handleConnectionEstablished(message: WebRTCMessage): void {\r\n if (message.peerId) {\r\n this._peerId.next(message.peerId);\r\n }\r\n if (message.sessionId) {\r\n this._sessionId.next(message.sessionId);\r\n }\r\n if (message.iceServers) {\r\n this._iceServers.next(message.iceServers);\r\n }\r\n console.log('WebRTC signalling connection established:', message);\r\n }\r\n\r\n private handleCheckResponse(message: WebRTCMessage): void {\r\n if (message.peers) {\r\n this._peers.next(message.peers);\r\n console.log('Received peer list:', message.peers);\r\n }\r\n }\r\n\r\n get peerId(): string | null {\r\n return this._peerId.value;\r\n }\r\n\r\n get sessionId(): string | null {\r\n return this._sessionId.value;\r\n }\r\n\r\n get connected(): boolean {\r\n return this._connected.value;\r\n }\r\n\r\n get peers(): PeerInfo[] {\r\n return this._peers.value;\r\n }\r\n\r\n get iceServers(): RTCIceServer[] {\r\n return this._iceServers.value;\r\n }\r\n}\r\n","import { Injectable, NgZone } from '@angular/core';\r\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\r\nimport { WebRTCSignallingService } from './webrtc-signalling';\r\nimport {\r\n WebRTCMessage,\r\n PeerConnection,\r\n PeerInfo,\r\n PeerRole,\r\n PeerConnectionState,\r\n WebRTCConfig,\r\n MediaConstraintsConfig\r\n} from '../models/webrtc';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WebRTCService {\r\n private peerConnections: Map<string, PeerConnection> = new Map();\r\n private localStream?: MediaStream;\r\n private signallingSubscription?: Subscription;\r\n\r\n private _localStreamReady = new BehaviorSubject<boolean>(false);\r\n private _remoteStreams = new BehaviorSubject<Map<string, MediaStream>>(new Map());\r\n private _connectionState = new BehaviorSubject<'disconnected' | 'connecting' | 'connected'>('disconnected');\r\n private _activePeers = new BehaviorSubject<PeerInfo[]>([]);\r\n\r\n localStreamReady$ = this._localStreamReady.asObservable();\r\n remoteStreams$ = this._remoteStreams.asObservable();\r\n connectionState$ = this._connectionState.asObservable();\r\n activePeers$ = this._activePeers.asObservable();\r\n\r\n private defaultConfig: WebRTCConfig = {\r\n iceServers: [\r\n { urls: 'stun:stun.l.google.com:19302' },\r\n { urls: 'stun:stun1.l.google.com:19302' }\r\n ],\r\n iceCandidatePoolSize: 10,\r\n iceTransportPolicy: 'all',\r\n bundlePolicy: 'max-bundle',\r\n rtcpMuxPolicy: 'require'\r\n };\r\n\r\n private defaultMediaConstraints: MediaConstraintsConfig = {\r\n video: {\r\n width: { ideal: 1280 },\r\n height: { ideal: 720 },\r\n frameRate: { ideal: 30 }\r\n },\r\n audio: true\r\n };\r\n\r\n constructor(\r\n private signalling: WebRTCSignallingService,\r\n private zone: NgZone\r\n ) {}\r\n\r\n async startSession(\r\n sessionId: string,\r\n role: PeerRole = PeerRole.PARTICIPANT,\r\n enableVideo: boolean = true,\r\n enableAudio: boolean = true\r\n ): Promise<void> {\r\n this._connectionState.next('connecting');\r\n\r\n if (role === PeerRole.HOST || enableVideo || enableAudio) {\r\n await this.startLocalMedia(enableVideo, enableAudio);\r\n }\r\n\r\n this.signalling.connect(sessionId);\r\n\r\n this.signallingSubscription = this.signalling.messages$.subscribe({\r\n next: (message) => {\r\n this.handleSignallingMessage(message);\r\n }\r\n });\r\n\r\n setTimeout(() => {\r\n this.signalling.sendCheck(role);\r\n }, 1000);\r\n\r\n this.signalling.peers$.subscribe(peers => {\r\n this._activePeers.next(peers);\r\n });\r\n }\r\n\r\n async startLocalMedia(enableVideo: boolean = true, enableAudio: boolean = true): Promise<void> {\r\n try {\r\n const constraints: MediaConstraintsConfig = {\r\n video: enableVideo ? this.defaultMediaConstraints.video : false,\r\n audio: enableAudio ? this.defaultMediaConstraints.audio : false\r\n };\r\n\r\n this.localStream = await navigator.mediaDevices.getUserMedia(constraints);\r\n this._localStreamReady.next(true);\r\n\r\n this.updatePeerState(\r\n undefined,\r\n enableVideo,\r\n enableAudio,\r\n false\r\n );\r\n\r\n console.log('Local media started:', this.localStream);\r\n } catch (error) {\r\n console.error('Error accessing media devices:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n async startScreenShare(): Promise<void> {\r\n try {\r\n const screenStream = await (navigator.mediaDevices as any).getDisplayMedia({\r\n video: true,\r\n audio: false\r\n });\r\n\r\n if (this.localStream) {\r\n this.localStream.getTracks().forEach(track => track.stop());\r\n }\r\n\r\n this.localStream = screenStream;\r\n this._localStreamReady.next(true);\r\n\r\n this.replaceTracksInAllPeers();\r\n\r\n this.updatePeerState(undefined, false, false, true);\r\n\r\n screenStream.getVideoTracks()[0].addEventListener('ended', () => {\r\n this.stopScreenShare();\r\n });\r\n\r\n console.log('Screen sharing started');\r\n } catch (error) {\r\n console.error('Error starting screen share:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n stopScreenShare(): void {\r\n if (this.localStream) {\r\n this.localStream.getTracks().forEach(track => track.stop());\r\n this.localStream = undefined;\r\n this._localStreamReady.next(false);\r\n }\r\n\r\n this.updatePeerState(undefined, false, false, false);\r\n\r\n console.log('Screen sharing stopped');\r\n }\r\n\r\n endSession(): void {\r\n this.peerConnections.forEach((conn, peerId) => {\r\n this.closePeerConnection(peerId);\r\n });\r\n\r\n if (this.localStream) {\r\n this.localStream.getTracks().forEach(track => track.stop());\r\n this.localStream = undefined;\r\n this._localStreamReady.next(false);\r\n }\r\n\r\n if (this.signallingSubscription) {\r\n this.signallingSubscription.unsubscribe();\r\n }\r\n\r\n this.signalling.disconnect();\r\n\r\n this._connectionState.next('disconnected');\r\n this._remoteStreams.next(new Map());\r\n this._activePeers.next([]);\r\n\r\n console.log('WebRTC session ended');\r\n }\r\n\r\n private async handleSignallingMessage(message: WebRTCMessage): Promise<void> {\r\n try {\r\n switch (message.type) {\r\n case 'peer.check':\r\n if (message.fromPeerId) {\r\n await this.handlePeerCheck(message.fromPeerId, message.fromUserId!, message.fromUsername!, message.peerRole!);\r\n }\r\n break;\r\n\r\n case 'offer':\r\n if (message.fromPeerId && message.sdp) {\r\n await this.handleOffer(message.fromPeerId, message.fromUserId!, message.fromUsername!, message.sdp);\r\n }\r\n break;\r\n\r\n case 'answer':\r\n if (message.fromPeerId && message.sdp) {\r\n await this.handleAnswer(message.fromPeerId, message.sdp);\r\n }\r\n break;\r\n\r\n case 'ice_candidate':\r\n if (message.fromPeerId && message.candidate) {\r\n await this.handleIceCandidate(message.fromPeerId, message.candidate);\r\n }\r\n break;\r\n\r\n case 'peer.state_update':\r\n this.handlePeerStateUpdate(message);\r\n break;\r\n }\r\n } catch (error) {\r\n console.error('Error handling signalling message:', error);\r\n }\r\n }\r\n\r\n private async handlePeerCheck(peerId: string, userId: number, username: string, role: PeerRole): Promise<void> {\r\n if (!this.peerConnections.has(peerId)) {\r\n console.log(`New peer discovered: ${username} (${peerId}) as ${role}`);\r\n\r\n const pc = await this.createPeerConnection(peerId, userId, username, role);\r\n\r\n const shouldInitiate = this.shouldInitiateConnection(role);\r\n\r\n if (shouldInitiate) {\r\n const offer = await pc.createOffer();\r\n await pc.setLocalDescription(offer);\r\n\r\n if (pc.localDescription) {\r\n this.signalling.sendOffer(peerId, pc.localDescription);\r\n\r\n const connection = this.peerConnections.get(peerId);\r\n if (connection) {\r\n connection.offered = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async handleOffer(peerId: string, userId: number, username: string, sdp: RTCSessionDescriptionInit): Promise<void> {\r\n let pc: RTCPeerConnection;\r\n\r\n if (!this.peerConnections.has(peerId)) {\r\n pc = await this.createPeerConnection(peerId, userId, username, PeerRole.PARTICIPANT);\r\n } else {\r\n pc = this.peerConnections.get(peerId)!.pc;\r\n }\r\n\r\n await pc.setRemoteDescription(new RTCSessionDescription(sdp));\r\n\r\n const answer = await pc.createAnswer();\r\n await pc.setLocalDescription(answer);\r\n\r\n if (pc.localDescription) {\r\n this.signalling.sendAnswer(peerId, pc.localDescription);\r\n\r\n const connection = this.peerConnections.get(peerId);\r\n if (connection) {\r\n connection.answered = true;\r\n }\r\n }\r\n\r\n const connection = this.peerConnections.get(peerId);\r\n if (connection && connection.queuedCandidates.length > 0) {\r\n await Promise.all(\r\n connection.queuedCandidates.map(candidate => pc.addIceCandidate(candidate))\r\n );\r\n connection.queuedCandidates = [];\r\n }\r\n }\r\n\r\n private async handleAnswer(peerId: string, sdp: RTCSessionDescriptionInit): Promise<void> {\r\n const connection = this.peerConnections.get(peerId);\r\n if (!connection) {\r\n console.warn(`Received answer from unknown peer: ${peerId}`);\r\n return;\r\n }\r\n\r\n await connection.pc.setRemoteDescription(new RTCSessionDescription(sdp));\r\n\r\n if (connection.queuedCandidates.length > 0) {\r\n await Promise.all(\r\n connection.queuedCandidates.map(candidate => connection.pc.addIceCandidate(candidate))\r\n );\r\n connection.queuedCandidates = [];\r\n }\r\n }\r\n\r\n private async handleIceCandidate(peerId: string, candidate: RTCIceCandidateInit): Promise<void> {\r\n const connection = this.peerConnections.get(peerId);\r\n if (!connection) {\r\n console.warn(`Received ICE candidate from unknown peer: ${peerId}`);\r\n return;\r\n }\r\n\r\n const iceCandidate = new RTCIceCandidate(candidate);\r\n\r\n if (connection.pc.remoteDescription) {\r\n await connection.pc.addIceCandidate(iceCandidate);\r\n } else {\r\n connection.queuedCandidates.push(iceCandidate);\r\n }\r\n }\r\n\r\n private handlePeerStateUpdate(message: WebRTCMessage): void {\r\n console.log('Peer state update:', message);\r\n }\r\n\r\n private async createPeerConnection(\r\n peerId: string,\r\n userId: number,\r\n username: string,\r\n role: PeerRole\r\n ): Promise<RTCPeerConnection> {\r\n const iceServers = this.signalling.iceServers;\r\n const config: WebRTCConfig = iceServers.length > 0\r\n ? { ...this.defaultConfig, iceServers }\r\n : this.defaultConfig;\r\n\r\n const pc = new RTCPeerConnection(config);\r\n\r\n const dataChannel = pc.createDataChannel('data', { ordered: true });\r\n this.setupDataChannelHandlers(dataChannel, peerId);\r\n\r\n if (this.localStream) {\r\n this.localStream.getTracks().forEach(track => {\r\n pc.addTrack(track, this.localStream!);\r\n });\r\n }\r\n\r\n this.setupPeerConnectionHandlers(pc, peerId);\r\n\r\n const connection: PeerConnection = {\r\n peerId,\r\n userId,\r\n username,\r\n pc,\r\n dataChannel,\r\n role,\r\n offered: false,\r\n answered: false,\r\n connected: false,\r\n queuedCandidates: []\r\n };\r\n\r\n this.peerConnections.set(peerId, connection);\r\n\r\n console.log(`Created peer connection for ${username} (${peerId})`);\r\n\r\n return pc;\r\n }\r\n\r\n private setupPeerConnectionHandlers(pc: RTCPeerConnection, peerId: string): void {\r\n pc.onicecandidate = (event) => {\r\n if (event.candidate) {\r\n this.signalling.sendIceCandidate(peerId, event.candidate.toJSON());\r\n }\r\n };\r\n\r\n pc.ontrack = (event) => {\r\n console.log(`Received track from peer ${peerId}:`, event.track.kind);\r\n\r\n this.zone.run(() => {\r\n const stream = event.streams[0];\r\n const connection = this.peerConnections.get(peerId);\r\n if (connection) {\r\n connection.stream = stream;\r\n }\r\n\r\n const streams = this._remoteStreams.value;\r\n streams.set(peerId, stream);\r\n this._remoteStreams.next(streams);\r\n });\r\n };\r\n\r\n pc.onconnectionstatechange = () => {\r\n console.log(`Connection state with peer ${peerId}: ${pc.connectionState}`);\r\n\r\n this.zone.run(() => {\r\n const connection = this.peerConnections.get(peerId);\r\n if (!connection) return;\r\n\r\n if (pc.connectionState === 'connected') {\r\n connection.connected = true;\r\n this._connectionState.next('connected');\r\n } else if (pc.connectionState === 'failed' || pc.connectionState === 'disconnected') {\r\n this.closePeerConnection(peerId);\r\n }\r\n });\r\n };\r\n\r\n pc.ondatachannel = (event) => {\r\n const receivedChannel = event.channel;\r\n this.setupDataChannelHandlers(receivedChannel, peerId);\r\n\r\n const connection = this.peerConnections.get(peerId);\r\n if (connection) {\r\n connection.dataChannel = receivedChannel;\r\n }\r\n };\r\n }\r\n\r\n private setupDataChannelHandlers(dataChannel: RTCDataChannel, peerId: string): void {\r\n dataChannel.onopen = () => {\r\n console.log(`Data channel opened with peer ${peerId}`);\r\n };\r\n\r\n dataChannel.onmessage = (event) => {\r\n console.log(`Data received from peer ${peerId}:`, event.data);\r\n };\r\n\r\n dataChannel.onclose = () => {\r\n console.log(`Data channel closed with peer ${peerId}`);\r\n };\r\n\r\n dataChannel.onerror = (error) => {\r\n console.error(`Data channel error with peer ${peerId}:`, error);\r\n };\r\n }\r\n\r\n private closePeerConnection(peerId: string): void {\r\n const connection = this.peerConnections.get(peerId);\r\n if (!connection) return;\r\n\r\n connection.pc.close();\r\n this.peerConnections.delete(peerId);\r\n\r\n const streams = this._remoteStreams.value;\r\n streams.delete(peerId);\r\n this._remoteStreams.next(streams);\r\n\r\n console.log(`Closed peer connection with ${peerId}`);\r\n }\r\n\r\n private shouldInitiateConnection(peerRole: PeerRole): boolean {\r\n const myPeers = Array.from(this.peerConnections.values());\r\n const iAmHost = myPeers.some(p => p.role === PeerRole.HOST);\r\n\r\n return iAmHost && peerRole !== PeerRole.HOST;\r\n }\r\n\r\n private replaceTracksInAllPeers(): void {\r\n if (!this.localStream) return;\r\n\r\n this.peerConnections.forEach((connection) => {\r\n const senders = connection.pc.getSenders();\r\n\r\n this.localStream!.getTracks().forEach(track => {\r\n const sender = senders.find(s => s.track?.kind === track.kind);\r\n\r\n if (sender) {\r\n sender.replaceTrack(track).catch(error => {\r\n console.error(`Error replacing ${track.kind} track:`, error);\r\n });\r\n } else {\r\n connection.pc.addTrack(track, this.localStream!);\r\n }\r\n });\r\n });\r\n }\r\n\r\n private updatePeerState(\r\n connectionState?: PeerConnectionState,\r\n hasVideo?: boolean,\r\n hasAudio?: boolean,\r\n hasScreenShare?: boolean\r\n ): void {\r\n this.signalling.sendPeerState(connectionState, hasVideo, hasAudio, hasScreenShare);\r\n }\r\n\r\n get localMediaStream(): MediaStream | undefined {\r\n return this.localStream;\r\n }\r\n\r\n get isConnected(): boolean {\r\n return this._connectionState.value === 'connected';\r\n }\r\n\r\n get activePeerConnections(): PeerConnection[] {\r\n return Array.from(this.peerConnections.values());\r\n }\r\n}\r\n","// Communication and messaging services\r\nexport * from './notification';\r\nexport * from './message-thread';\r\nexport * from './message';\r\nexport * from './thread-participant';\r\nexport * from './communication-websocket';\r\nexport * from './webrtc-signalling';\r\nexport * from './webrtc';","/*\n * Public API Surface of cupcake-mint-chocolate\n */\n\nexport * from './lib/cupcake-mint-chocolate';\n\nexport * from './lib/models';\n\nexport * from './lib/services';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.WebRTCSignallingService"],"mappings":";;;;;;;;;MAYa,oBAAoB,CAAA;uGAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPrB;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAVhC,SAAS;+BACE,6BAA6B,EAAA,OAAA,EAC9B,EAAE,EAAA,QAAA,EACD;;;;AAIT,EAAA,CAAA,EAAA;;;ICTS;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,gBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EATW,gBAAgB,KAAhB,gBAAgB,GAAA,EAAA,CAAA,CAAA;AAWrB,MAAM,sBAAsB,GAAqC;AACtE,IAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG,QAAQ;AACnC,IAAA,CAAC,gBAAgB,CAAC,WAAW,GAAG,aAAa;AAC7C,IAAA,CAAC,gBAAgB,CAAC,SAAS,GAAG,WAAW;AACzC,IAAA,CAAC,gBAAgB,CAAC,OAAO,GAAG,SAAS;AACrC,IAAA,CAAC,gBAAgB,CAAC,OAAO,GAAG,SAAS;AACrC,IAAA,CAAC,gBAAgB,CAAC,QAAQ,GAAG,UAAU;AACvC,IAAA,CAAC,gBAAgB,CAAC,QAAQ,GAAG,UAAU;AACvC,IAAA,CAAC,gBAAgB,CAAC,IAAI,GAAG;;IAGf;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,oBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EALW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;AAOzB,MAAM,0BAA0B,GAAyC;AAC9E,IAAA,CAAC,oBAAoB,CAAC,GAAG,GAAG,KAAK;AACjC,IAAA,CAAC,oBAAoB,CAAC,MAAM,GAAG,QAAQ;AACvC,IAAA,CAAC,oBAAoB,CAAC,IAAI,GAAG,MAAM;AACnC,IAAA,CAAC,oBAAoB,CAAC,MAAM,GAAG;;IAGrB;AAAZ,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EANW,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;AAQnB,MAAM,oBAAoB,GAAmC;AAClE,IAAA,CAAC,cAAc,CAAC,OAAO,GAAG,SAAS;AACnC,IAAA,CAAC,cAAc,CAAC,IAAI,GAAG,MAAM;AAC7B,IAAA,CAAC,cAAc,CAAC,SAAS,GAAG,WAAW;AACvC,IAAA,CAAC,cAAc,CAAC,MAAM,GAAG,QAAQ;AACjC,IAAA,CAAC,cAAc,CAAC,IAAI,GAAG;;IAGb;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EALW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AAOhB,MAAM,iBAAiB,GAAgC;AAC5D,IAAA,CAAC,WAAW,CAAC,MAAM,GAAG,gBAAgB;AACtC,IAAA,CAAC,WAAW,CAAC,MAAM,GAAG,cAAc;AACpC,IAAA,CAAC,WAAW,CAAC,SAAS,GAAG,WAAW;AACpC,IAAA,CAAC,WAAW,CAAC,MAAM,GAAG;;;IC7DZ;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,iBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,iBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,iBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC/B,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;IAOjB;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA;IAMnB;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,QAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,QAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC7B,CAAC,EAJW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;IAMR;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,mBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EALW,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA;IAOnB;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EALW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;;ACRhB,MAAO,mBAAoB,SAAQ,cAAc,CAAA;AAErD;;AAEG;AACH,IAAA,gBAAgB,CAAC,MAAgC,EAAA;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AAC/C,QAAA,OAAO,IAAI,CAAC,GAAG,CAAkC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,eAAA,CAAiB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3G;AAEA;;AAEG;AACH,IAAA,eAAe,CAAC,EAAU,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAe,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,eAAA,EAAkB,EAAE,CAAA,CAAA,CAAG,CAAC;IACtE;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,YAAuC,EAAA;AACxD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAe,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,eAAA,CAAiB,EAAE,YAAY,CAAC;IAC/E;AAEA;;AAEG;IACH,kBAAkB,CAAC,EAAU,EAAE,YAAuC,EAAA;AACpE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAe,GAAG,IAAI,CAAC,MAAM,CAAA,eAAA,EAAkB,EAAE,CAAA,CAAA,CAAG,EAAE,YAAY,CAAC;IACpF;AAEA;;AAEG;IACH,iBAAiB,CAAC,EAAU,EAAE,YAAgD,EAAA;AAC5E,QAAA,OAAO,IAAI,CAAC,KAAK,CAAe,GAAG,IAAI,CAAC,MAAM,CAAA,eAAA,EAAkB,EAAE,CAAA,CAAA,CAAG,EAAE,YAAY,CAAC;IACtF;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,EAAU,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,MAAM,CAAO,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,eAAA,EAAkB,EAAE,CAAA,CAAA,CAAG,CAAC;IACjE;AAEA;;AAEG;IACH,oBAAoB,CAAC,EAAU,EAAE,OAAoC,EAAA;AACnE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAe,GAAG,IAAI,CAAC,MAAM,CAAA,eAAA,EAAkB,EAAE,CAAA,WAAA,CAAa,EAAE,OAAO,CAAC;IAC1F;AAGA;;AAEG;IACH,sBAAsB,GAAA;QACpB,OAAO,IAAI,CAAC,GAAG,CAAkC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,sBAAA,CAAwB,CAAC;IAC1F;AAEA;;AAEG;IACH,oBAAoB,GAAA;QAMlB,OAAO,IAAI,CAAC,GAAG,CAKZ,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,qBAAA,CAAuB,CAAC;IAC3C;AAEA;;AAEG;IACH,wBAAwB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAwC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,6BAAA,CAA+B,EAAE,EAAE,CAAC;IAC5G;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,KAAa,EAAA;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACjD;AAEA;;AAEG;AACH,IAAA,sBAAsB,CAAC,IAAsB,EAAA;QAC3C,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAC1D;AAEA;;AAEG;AACH,IAAA,0BAA0B,CAAC,QAA8B,EAAA;QACvD,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5C;AAEA;;AAEG;AACH,IAAA,wBAAwB,CAAC,QAAgB,EAAA;QACvC,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACpD;AAEA;;AAEG;AACH,IAAA,wBAAwB,CAAC,MAAsB,EAAA;QAC7C,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IAC1D;uGArHW,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACQK,MAAO,oBAAqB,SAAQ,cAAc,CAAA;AAEtD;;AAEG;AACH,IAAA,iBAAiB,CAAC,MAAiC,EAAA;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AAC/C,QAAA,OAAO,IAAI,CAAC,GAAG,CAAmC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,SAAA,CAAW,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACtG;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAU,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAgB,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,SAAA,EAAY,EAAE,CAAA,CAAA,CAAG,CAAC;IACjE;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,MAAkC,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAgB,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,SAAA,CAAW,EAAE,MAAM,CAAC;IACpE;AAEA;;AAEG;IACH,mBAAmB,CAAC,EAAU,EAAE,MAAkC,EAAA;AAChE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAgB,GAAG,IAAI,CAAC,MAAM,CAAA,SAAA,EAAY,EAAE,CAAA,CAAA,CAAG,EAAE,MAAM,CAAC;IACzE;AAEA;;AAEG;IACH,kBAAkB,CAAC,EAAU,EAAE,MAA2C,EAAA;AACxE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAgB,GAAG,IAAI,CAAC,MAAM,CAAA,SAAA,EAAY,EAAE,CAAA,CAAA,CAAG,EAAE,MAAM,CAAC;IAC3E;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,EAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,MAAM,CAAO,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,SAAA,EAAY,EAAE,CAAA,CAAA,CAAG,CAAC;IAC3D;AAEA;;AAEG;IACH,cAAc,CAAC,EAAU,EAAE,OAA6B,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAsD,GAAG,IAAI,CAAC,MAAM,CAAA,SAAA,EAAY,EAAE,CAAA,iBAAA,CAAmB,EAAE,OAAO,CAAC;IACjI;AAEA;;AAEG;IACH,iBAAiB,CAAC,EAAU,EAAE,OAA6B,EAAA;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAsB,GAAG,IAAI,CAAC,MAAM,CAAA,SAAA,EAAY,EAAE,CAAA,oBAAA,CAAsB,EAAE,OAAO,CAAC;IACpG;AAEA;;AAEG;AACH,IAAA,eAAe,CAAC,EAAU,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAuC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,SAAA,EAAY,EAAE,CAAA,cAAA,CAAgB,CAAC;IACrG;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,EAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,IAAI,CAA2C,GAAG,IAAI,CAAC,MAAM,CAAA,SAAA,EAAY,EAAE,CAAA,SAAA,CAAW,EAAE,EAAE,CAAC;IACzG;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAU,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAwC,GAAG,IAAI,CAAC,MAAM,CAAA,SAAA,EAAY,EAAE,CAAA,WAAA,CAAa,EAAE,EAAE,CAAC;IACxG;AAGA;;AAEG;AACH,IAAA,oBAAoB,CAAC,KAAa,EAAA;QAChC,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAClD;AAEA;;AAEG;IACH,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACpD;AAEA;;AAEG;IACH,gBAAgB,GAAA;QACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACrD;AAEA;;AAEG;IACH,kBAAkB,GAAA;QAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACrD;AAEA;;AAEG;IACH,gBAAgB,GAAA;QACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACtD;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,SAAiB,EAAA;QACnC,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACvD;uGAzHW,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACCK,MAAO,cAAe,SAAQ,cAAc,CAAA;AAEhD;;AAEG;AACH,IAAA,WAAW,CAAC,MAA2B,EAAA;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AAC/C,QAAA,OAAO,IAAI,CAAC,GAAG,CAA6B,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,UAAA,CAAY,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACjG;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,EAAU,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAU,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA,CAAG,CAAC;IAC5D;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,OAA6B,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAU,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,UAAA,CAAY,EAAE,OAAO,CAAC;IAChE;AAEA;;AAEG;IACH,aAAa,CAAC,EAAU,EAAE,OAA6B,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAU,GAAG,IAAI,CAAC,MAAM,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA,CAAG,EAAE,OAAO,CAAC;IACrE;AAEA;;AAEG;IACH,YAAY,CAAC,EAAU,EAAE,OAAsC,EAAA;AAC7D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAU,GAAG,IAAI,CAAC,MAAM,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA,CAAG,EAAE,OAAO,CAAC;IACvE;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,EAAU,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAU,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA,CAAG,CAAC;IAC/D;AAGA;;AAEG;IACH,iBAAiB,CAAC,QAAgB,EAAE,MAA2C,EAAA;QAC7E,MAAM,WAAW,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;AACnD,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;IACtC;AAEA;;AAEG;IACH,cAAc,CAAC,KAAa,EAAE,QAAiB,EAAA;AAC7C,QAAA,MAAM,MAAM,GAAuB,EAAE,MAAM,EAAE,KAAK,EAAE;QACpD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,CAAC,MAAM,GAAG,QAAQ;QAC1B;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC;AAEA;;AAEG;IACH,mBAAmB,CAAC,QAAgB,EAAE,QAAiB,EAAA;AACrD,QAAA,MAAM,MAAM,GAAuB,EAAE,MAAM,EAAE,QAAQ,EAAE;QACvD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,CAAC,MAAM,GAAG,QAAQ;QAC1B;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC;AAEA;;AAEG;IACH,iBAAiB,CAAC,WAAwB,EAAE,QAAiB,EAAA;AAC3D,QAAA,MAAM,MAAM,GAAuB,EAAE,WAAW,EAAE;QAClD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,CAAC,MAAM,GAAG,QAAQ;QAC1B;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,QAAiB,EAAA;AAClC,QAAA,MAAM,MAAM,GAAuB,EAAE,SAAS,EAAE,IAAI,EAAE;QACtD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,CAAC,MAAM,GAAG,QAAQ;QAC1B;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,QAAiB,EAAA;AACjC,QAAA,MAAM,MAAM,GAAuB,EAAE,SAAS,EAAE,KAAK,EAAE;QACvD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,CAAC,MAAM,GAAG,QAAQ;QAC1B;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,eAAuB,EAAE,OAAe,EAAE,QAAgB,EAAA;AACvE,QAAA,MAAM,OAAO,GAAyB;AACpC,YAAA,MAAM,EAAE,QAAQ;YAChB,OAAO;AACP,YAAA,OAAO,EAAE;SACV;AACD,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IACpC;uGAvHW,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCLY,wBAAwB,CAAA;AAC3B,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC;AAExB;;AAEG;AACH,IAAA,qBAAqB,CAAC,MAAqC,EAAA;AACzD,QAAA,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE;QAEjC,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;gBAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACzC,oBAAA,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACpD;AACF,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAuC,GAAG,IAAI,CAAC,MAAM,CAAA,qBAAA,CAAuB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3H;AAEA;;AAEG;AACH,IAAA,oBAAoB,CAAC,EAAU,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAoB,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,qBAAA,EAAwB,EAAE,CAAA,CAAA,CAAG,CAAC;IACtF;AAEA;;AAEG;IACH,uBAAuB,CAAC,EAAU,EAAE,OAAkE,EAAA;AACpG,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAoB,CAAA,EAAG,IAAI,CAAC,MAAM,wBAAwB,EAAE,CAAA,CAAA,CAAG,EAAE,OAAO,CAAC;IACjG;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,EAAU,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAoB,CAAA,EAAG,IAAI,CAAC,MAAM,wBAAwB,EAAE,CAAA,kBAAA,CAAoB,EAAE,EAAE,CAAC;IAC5G;AAEA;;AAEG;AACH,IAAA,wBAAwB,CAAC,QAAgB,EAAA;QACvC,OAAO,IAAI,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACzD;AAEA;;AAEG;AACH,IAAA,sBAAsB,CAAC,QAAgB,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC5E;AAEA;;AAEG;AACH,IAAA,+BAA+B,CAAC,QAAgB,EAAA;AAC9C,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC7E;AAEA;;AAEG;AACH,IAAA,kCAAkC,CAAC,QAAgB,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;IACrF;AAEA;;AAEG;AACH,IAAA,mCAAmC,CAAC,QAAgB,EAAA;AAClD,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC;IACtF;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,EAAU,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAoB,CAAA,EAAG,IAAI,CAAC,MAAM,wBAAwB,EAAE,CAAA,kBAAA,CAAoB,EAAE,EAAE,CAAC;IAC5G;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,EAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAoB,CAAA,EAAG,IAAI,CAAC,MAAM,wBAAwB,EAAE,CAAA,sBAAA,CAAwB,EAAE,EAAE,CAAC;IAChH;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,QAAgB,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAwC,GAAG,IAAI,CAAC,MAAM,CAAA,kCAAA,CAAoC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACxI;AAEA;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAuC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,uCAAA,CAAyC,CAAC;IACrH;AAEA;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAuC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,oCAAA,CAAsC,CAAC;IAClH;uGA9GW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA;;2FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCoGY,6BAA6B,CAAA;IAChC,MAAM,GAAqB,IAAI;IAC/B,iBAAiB,GAAG,CAAC;IACrB,oBAAoB,GAAG,CAAC;IACxB,cAAc,GAAG,IAAI;IACrB,cAAc,GAAkB,IAAI;AAEpC,IAAA,cAAc,GAAG,IAAI,OAAO,EAA4B;AACxD,IAAA,sBAAsB,GAAG,IAAI,eAAe,CAA8C,cAAc,CAAC;AAE1G,IAAA,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE;AAC7D,IAAA,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAE9C,iBAAiB,GAAqC,IAAI,CAAC,SAAS,CAAC,IAAI,CAC9E,MAAM,CAAC,CAAC,GAAG,KAAkC,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAC9E;IAEM,YAAY,GAAgC,IAAI,CAAC,SAAS,CAAC,IAAI,CACpE,MAAM,CAAC,CAAC,GAAG,KAA6B,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC,CACpE;IAEM,cAAc,GAAkC,IAAI,CAAC,SAAS,CAAC,IAAI,CACxE,MAAM,CAAC,CAAC,GAAG,KAA+B,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC,CACxE;IAEM,oBAAoB,GAAwC,IAAI,CAAC,SAAS,CAAC,IAAI,CACpF,MAAM,CAAC,CAAC,GAAG,KAAqC,GAAG,CAAC,IAAI,KAAK,qBAAqB,CAAC,CACpF;IAED,OAAO,CAAC,SAAiB,EAAE,KAAc,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;AAC5D,YAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;YAC1C;QACF;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC;AAE9C,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA,qBAAA,CAAuB;AACtE,QAAA,MAAM,GAAG,GAAG,KAAK,GAAG,CAAA,EAAG,OAAO,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,GAAG,OAAO;QACzD,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC;AAEhC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAK;AACxB,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;AACvC,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7C,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC;AAC5B,QAAA,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,KAAK,KAAI;AAChC,YAAA,IAAI;gBACF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAA6B;AAClE,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;AAEjC,gBAAA,IAAI,OAAO,CAAC,IAAI,KAAK,6BAA6B,EAAE;AAClD,oBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,OAAO,CAAC;gBACtD;YACF;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;YAC1D;AACF,QAAA,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AAC9B,YAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;AAC/C,QAAA,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AAC9B,YAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;AAC/D,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC;YAEhD,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACtD,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC;YAC1C;AACF,QAAA,CAAC;IACH;IAEQ,iBAAiB,CAAC,SAAiB,EAAE,KAAc,EAAA;QACzD,IAAI,CAAC,iBAAiB,EAAE;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB;AAE1D,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,gBAAA,EAAmB,KAAK,CAAA,YAAA,EAAe,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,oBAAoB,CAAA,CAAA,CAAG,CAAC;AAE1G,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAK;AACpC,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;QAChC,CAAC,EAAE,KAAK,CAAC;IACX;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AACjC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACpB;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC;AAChD,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC;IAC5B;AAEA,IAAA,iBAAiB,CAAC,QAAgB,EAAA;AAChC,QAAA,MAAM,OAAO,GAA2B;AACtC,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,SAAS,EAAE;SACZ;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACpB;AAEA,IAAA,qBAAqB,CAAC,QAAgB,EAAA;AACpC,QAAA,MAAM,OAAO,GAA6B;AACxC,YAAA,IAAI,EAAE,oBAAoB;AAC1B,YAAA,SAAS,EAAE;SACZ;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACpB;AAEA,IAAA,sBAAsB,CAAC,cAAsB,EAAA;AAC3C,QAAA,MAAM,OAAO,GAAgC;AAC3C,YAAA,IAAI,EAAE,wBAAwB;AAC9B,YAAA,eAAe,EAAE;SAClB;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACpB;IAEA,IAAI,GAAA;AACF,QAAA,MAAM,OAAO,GAAgB,EAAE,IAAI,EAAE,MAAM,EAAE;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACpB;AAEQ,IAAA,IAAI,CAAC,OAAiC,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;AAC5D,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3C;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC;QAC9D;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE;IACnB;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;IAC1E;IAEA,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK;IAC1C;uGAnJW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cAF5B,MAAM,EAAA,CAAA;;2FAEP,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCzGY,uBAAuB,CAAA;AAsBxB,IAAA,WAAA;AACA,IAAA,IAAA;AAtBF,IAAA,EAAE;AACF,IAAA,cAAc;IACd,OAAO,GAAW,EAAE;AAEpB,IAAA,UAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAChD,IAAA,OAAO,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AAClD,IAAA,UAAU,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AACrD,IAAA,MAAM,GAAG,IAAI,eAAe,CAAa,EAAE,CAAC;AAC5C,IAAA,SAAS,GAAG,IAAI,OAAO,EAAiB;AACxC,IAAA,WAAW,GAAG,IAAI,eAAe,CAAiB,EAAE,CAAC;AAE7D,IAAA,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AAC3C,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AACrC,IAAA,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AAC3C,IAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AACnC,IAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AACzC,IAAA,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AAErC,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAE5C,WAAA,CACU,WAAwB,EACxB,IAAY,EAAA;QADZ,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,IAAI,GAAJ,IAAI;AAEZ,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;IAClC;IAEQ,UAAU,GAAA;QAChB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC3C,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY;QACjC;QACA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACrC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,KAAK;AACxE,YAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,EAAA,EAAK,MAAM,EAAE;QACjC;AACA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,GAAG,MAAM,GAAG,KAAK;AACvE,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;AACjC,QAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,EAAA,EAAK,IAAI,EAAE;IAC/B;AAEA,IAAA,OAAO,CAAC,SAAiB,EAAA;QACvB,IAAI,CAAC,UAAU,EAAE;QAEjB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;QAC/C,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC;YAClD;QACF;QAEA,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,aAAA,EAAgB,SAAS,CAAA,QAAA,EAAW,KAAK,CAAA,CAAE;AAExE,QAAA,IAAI,CAAC,EAAE,GAAG,SAAS,CAAgB;AACjC,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,YAAY,EAAE;gBACZ,IAAI,EAAE,MAAK;AACT,oBAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC;AAClD,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,wBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,oBAAA,CAAC,CAAC;gBACJ;AACD,aAAA;AACD,YAAA,aAAa,EAAE;gBACb,IAAI,EAAE,MAAK;AACT,oBAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC;AAClD,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,wBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,wBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,oBAAA,CAAC,CAAC;gBACJ;AACD,aAAA;YACD,YAAY,EAAE,GAAG,IAAG;AAClB,gBAAA,IAAI;oBACF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC7B;gBAAE,OAAO,CAAC,EAAE;AACV,oBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,CAAC,CAAC;oBACpD,OAAO,GAAG,CAAC,IAAI;gBACjB;YACF;AACD,SAAA,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;AACtC,YAAA,IAAI,EAAE,CAAC,OAAsB,KAAI;AAC/B,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,oBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7B,gBAAA,CAAC,CAAC;YACJ,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;AAChD,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,gBAAA,CAAC,CAAC;gBAEF,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACzB,wBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;wBACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;oBACrC;gBACF,CAAC,EAAE,IAAI,CAAC;YACV,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC;AACrD,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,gBAAA,CAAC,CAAC;YACJ;AACD,SAAA,CAAC;IACJ;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS;QACjC;AAEA,QAAA,IAAI,IAAI,CAAC,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,EAAE,GAAG,SAAS;QACrB;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACtB;AAEA,IAAA,SAAS,CAAC,QAAA,GAAqB,QAAQ,CAAC,WAAW,EAAA;QACjD,IAAI,CAAC,IAAI,CAAC;AACR,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,QAAQ,EAAE;AACJ,SAAA,CAAC;IACX;IAEA,SAAS,CAAC,QAAgB,EAAE,GAA8B,EAAA;QACxD,IAAI,CAAC,IAAI,CAAC;AACR,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,GAAG,EAAE;AACC,SAAA,CAAC;IACX;IAEA,UAAU,CAAC,QAAgB,EAAE,GAA8B,EAAA;QACzD,IAAI,CAAC,IAAI,CAAC;AACR,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,GAAG,EAAE;AACC,SAAA,CAAC;IACX;IAEA,gBAAgB,CAAC,QAAgB,EAAE,SAA8B,EAAA;QAC/D,IAAI,CAAC,IAAI,CAAC;AACR,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,SAAS,EAAE;AACL,SAAA,CAAC;IACX;AAEA,IAAA,aAAa,CACX,eAAqC,EACrC,QAAkB,EAClB,QAAkB,EAClB,cAAwB,EAAA;QAExB,IAAI,CAAC,IAAI,CAAC;AACR,YAAA,IAAI,EAAE,YAAY;YAClB,eAAe;YACf,QAAQ;YACR,QAAQ;YACR;AACM,SAAA,CAAC;IACX;AAEQ,IAAA,IAAI,CAAC,OAAY,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC;YACxC;QACF;AAEA,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;QACvB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;QAChD;IACF;AAEQ,IAAA,aAAa,CAAC,OAAsB,EAAA;AAC1C,QAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,YAAA,KAAK,wBAAwB;AAC3B,gBAAA,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC;gBACzC;AAEF,YAAA,KAAK,gBAAgB;AACnB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;gBACjC;AAEF,YAAA,KAAK,YAAY;AACjB,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,eAAe;AACpB,YAAA,KAAK,mBAAmB;AACtB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC5B;AAEF,YAAA,KAAK,OAAO;gBACV,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,OAAO,CAAC,OAAO,CAAC;gBAC1D;AAEF,YAAA;gBACE,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,IAAI,CAAC;;IAEzD;AAEQ,IAAA,2BAA2B,CAAC,OAAsB,EAAA;AACxD,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC;AACA,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACzC;AACA,QAAA,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC3C;AACA,QAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,OAAO,CAAC;IACnE;AAEQ,IAAA,mBAAmB,CAAC,OAAsB,EAAA;AAChD,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,OAAO,CAAC,KAAK,CAAC;QACnD;IACF;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;IAC3B;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK;IAC9B;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK;IAC9B;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;IAC1B;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK;IAC/B;uGA3PW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA;;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCGY,aAAa,CAAA;AAoCd,IAAA,UAAA;AACA,IAAA,IAAA;AApCF,IAAA,eAAe,GAAgC,IAAI,GAAG,EAAE;AACxD,IAAA,WAAW;AACX,IAAA,sBAAsB;AAEtB,IAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;IACvD,cAAc,GAAG,IAAI,eAAe,CAA2B,IAAI,GAAG,EAAE,CAAC;AACzE,IAAA,gBAAgB,GAAG,IAAI,eAAe,CAA8C,cAAc,CAAC;AACnG,IAAA,YAAY,GAAG,IAAI,eAAe,CAAa,EAAE,CAAC;AAE1D,IAAA,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACzD,IAAA,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AACnD,IAAA,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AACvD,IAAA,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAEvC,IAAA,aAAa,GAAiB;AACpC,QAAA,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,8BAA8B,EAAE;YACxC,EAAE,IAAI,EAAE,+BAA+B;AACxC,SAAA;AACD,QAAA,oBAAoB,EAAE,EAAE;AACxB,QAAA,kBAAkB,EAAE,KAAK;AACzB,QAAA,YAAY,EAAE,YAAY;AAC1B,QAAA,aAAa,EAAE;KAChB;AAEO,IAAA,uBAAuB,GAA2B;AACxD,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AACtB,YAAA,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;AACtB,YAAA,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE;AACvB,SAAA;AACD,QAAA,KAAK,EAAE;KACR;IAED,WAAA,CACU,UAAmC,EACnC,IAAY,EAAA;QADZ,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,IAAI,GAAJ,IAAI;IACX;AAEH,IAAA,MAAM,YAAY,CAChB,SAAiB,EACjB,IAAA,GAAiB,QAAQ,CAAC,WAAW,EACrC,WAAA,GAAuB,IAAI,EAC3B,cAAuB,IAAI,EAAA;AAE3B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;QAExC,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,WAAW,IAAI,WAAW,EAAE;YACxD,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC;QACtD;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC;QAElC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC;AAChE,YAAA,IAAI,EAAE,CAAC,OAAO,KAAI;AAChB,gBAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;YACvC;AACD,SAAA,CAAC;QAEF,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;QACjC,CAAC,EAAE,IAAI,CAAC;QAER,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;AACvC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,eAAe,CAAC,cAAuB,IAAI,EAAE,cAAuB,IAAI,EAAA;AAC5E,QAAA,IAAI;AACF,YAAA,MAAM,WAAW,GAA2B;AAC1C,gBAAA,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,GAAG,KAAK;AAC/D,gBAAA,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,GAAG;aAC3D;AAED,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC;AACzE,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YAEjC,IAAI,CAAC,eAAe,CAClB,SAAS,EACT,WAAW,EACX,WAAW,EACX,KAAK,CACN;YAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,WAAW,CAAC;QACvD;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACtD,YAAA,MAAM,KAAK;QACb;IACF;AAEA,IAAA,MAAM,gBAAgB,GAAA;AACpB,QAAA,IAAI;YACF,MAAM,YAAY,GAAG,MAAO,SAAS,CAAC,YAAoB,CAAC,eAAe,CAAC;AACzE,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;AAEF,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7D;AAEA,YAAA,IAAI,CAAC,WAAW,GAAG,YAAY;AAC/B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YAEjC,IAAI,CAAC,uBAAuB,EAAE;YAE9B,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AAEnD,YAAA,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;gBAC9D,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;QACvC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;AACpD,YAAA,MAAM,KAAK;QACb;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AAC3D,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QACpC;QAEA,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAEpD,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACvC;IAEA,UAAU,GAAA;QACR,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,KAAI;AAC5C,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;AAClC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AAC3D,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QACpC;AAEA,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;QAC3C;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;AAE5B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;AAE1B,QAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACrC;IAEQ,MAAM,uBAAuB,CAAC,OAAsB,EAAA;AAC1D,QAAA,IAAI;AACF,YAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,gBAAA,KAAK,YAAY;AACf,oBAAA,IAAI,OAAO,CAAC,UAAU,EAAE;wBACtB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAW,EAAE,OAAO,CAAC,YAAa,EAAE,OAAO,CAAC,QAAS,CAAC;oBAC/G;oBACA;AAEF,gBAAA,KAAK,OAAO;oBACV,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE;wBACrC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAW,EAAE,OAAO,CAAC,YAAa,EAAE,OAAO,CAAC,GAAG,CAAC;oBACrG;oBACA;AAEF,gBAAA,KAAK,QAAQ;oBACX,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE;AACrC,wBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC;oBAC1D;oBACA;AAEF,gBAAA,KAAK,eAAe;oBAClB,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE;AAC3C,wBAAA,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC;oBACtE;oBACA;AAEF,gBAAA,KAAK,mBAAmB;AACtB,oBAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;oBACnC;;QAEN;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;QAC5D;IACF;IAEQ,MAAM,eAAe,CAAC,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,IAAc,EAAA;QAC5F,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACrC,OAAO,CAAC,GAAG,CAAC,CAAA,qBAAA,EAAwB,QAAQ,CAAA,EAAA,EAAK,MAAM,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE,CAAC;AAEtE,YAAA,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC;YAE1E,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;YAE1D,IAAI,cAAc,EAAE;AAClB,gBAAA,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,WAAW,EAAE;AACpC,gBAAA,MAAM,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAEnC,gBAAA,IAAI,EAAE,CAAC,gBAAgB,EAAE;oBACvB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC;oBAEtD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;oBACnD,IAAI,UAAU,EAAE;AACd,wBAAA,UAAU,CAAC,OAAO,GAAG,IAAI;oBAC3B;gBACF;YACF;QACF;IACF;IAEQ,MAAM,WAAW,CAAC,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,GAA8B,EAAA;AACxG,QAAA,IAAI,EAAqB;QAEzB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACrC,YAAA,EAAE,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC;QACtF;aAAO;YACL,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,EAAE;QAC3C;QAEA,MAAM,EAAE,CAAC,oBAAoB,CAAC,IAAI,qBAAqB,CAAC,GAAG,CAAC,CAAC;AAE7D,QAAA,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,EAAE;AACtC,QAAA,MAAM,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC;AAEpC,QAAA,IAAI,EAAE,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC;YAEvD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;YACnD,IAAI,UAAU,EAAE;AACd,gBAAA,UAAU,CAAC,QAAQ,GAAG,IAAI;YAC5B;QACF;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QACnD,IAAI,UAAU,IAAI,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;YACxD,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAC5E;AACD,YAAA,UAAU,CAAC,gBAAgB,GAAG,EAAE;QAClC;IACF;AAEQ,IAAA,MAAM,YAAY,CAAC,MAAc,EAAE,GAA8B,EAAA;QACvE,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QACnD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,sCAAsC,MAAM,CAAA,CAAE,CAAC;YAC5D;QACF;AAEA,QAAA,MAAM,UAAU,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAExE,IAAI,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1C,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,IAAI,UAAU,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CACvF;AACD,YAAA,UAAU,CAAC,gBAAgB,GAAG,EAAE;QAClC;IACF;AAEQ,IAAA,MAAM,kBAAkB,CAAC,MAAc,EAAE,SAA8B,EAAA;QAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QACnD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,6CAA6C,MAAM,CAAA,CAAE,CAAC;YACnE;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC;AAEnD,QAAA,IAAI,UAAU,CAAC,EAAE,CAAC,iBAAiB,EAAE;YACnC,MAAM,UAAU,CAAC,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC;QACnD;aAAO;AACL,YAAA,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;QAChD;IACF;AAEQ,IAAA,qBAAqB,CAAC,OAAsB,EAAA;AAClD,QAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAC5C;IAEQ,MAAM,oBAAoB,CAChC,MAAc,EACd,MAAc,EACd,QAAgB,EAChB,IAAc,EAAA;AAEd,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU;AAC7C,QAAA,MAAM,MAAM,GAAiB,UAAU,CAAC,MAAM,GAAG;cAC7C,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU;AACrC,cAAE,IAAI,CAAC,aAAa;AAEtB,QAAA,MAAM,EAAE,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC;AAExC,QAAA,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnE,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAC;AAElD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,IAAG;gBAC3C,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,WAAY,CAAC;AACvC,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,IAAI,CAAC,2BAA2B,CAAC,EAAE,EAAE,MAAM,CAAC;AAE5C,QAAA,MAAM,UAAU,GAAmB;YACjC,MAAM;YACN,MAAM;YACN,QAAQ;YACR,EAAE;YACF,WAAW;YACX,IAAI;AACJ,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,gBAAgB,EAAE;SACnB;QAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;QAE5C,OAAO,CAAC,GAAG,CAAC,CAAA,4BAAA,EAA+B,QAAQ,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,CAAG,CAAC;AAElE,QAAA,OAAO,EAAE;IACX;IAEQ,2BAA2B,CAAC,EAAqB,EAAE,MAAc,EAAA;AACvE,QAAA,EAAE,CAAC,cAAc,GAAG,CAAC,KAAK,KAAI;AAC5B,YAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACpE;AACF,QAAA,CAAC;AAED,QAAA,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AACrB,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,yBAAA,EAA4B,MAAM,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;AAEpE,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;gBACjB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;gBACnD,IAAI,UAAU,EAAE;AACd,oBAAA,UAAU,CAAC,MAAM,GAAG,MAAM;gBAC5B;AAEA,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK;AACzC,gBAAA,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;AAC3B,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;AACnC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,EAAE,CAAC,uBAAuB,GAAG,MAAK;YAChC,OAAO,CAAC,GAAG,CAAC,CAAA,2BAAA,EAA8B,MAAM,CAAA,EAAA,EAAK,EAAE,CAAC,eAAe,CAAA,CAAE,CAAC;AAE1E,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;gBACjB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AACnD,gBAAA,IAAI,CAAC,UAAU;oBAAE;AAEjB,gBAAA,IAAI,EAAE,CAAC,eAAe,KAAK,WAAW,EAAE;AACtC,oBAAA,UAAU,CAAC,SAAS,GAAG,IAAI;AAC3B,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;gBACzC;AAAO,qBAAA,IAAI,EAAE,CAAC,eAAe,KAAK,QAAQ,IAAI,EAAE,CAAC,eAAe,KAAK,cAAc,EAAE;AACnF,oBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;gBAClC;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,EAAE,CAAC,aAAa,GAAG,CAAC,KAAK,KAAI;AAC3B,YAAA,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO;AACrC,YAAA,IAAI,CAAC,wBAAwB,CAAC,eAAe,EAAE,MAAM,CAAC;YAEtD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;YACnD,IAAI,UAAU,EAAE;AACd,gBAAA,UAAU,CAAC,WAAW,GAAG,eAAe;YAC1C;AACF,QAAA,CAAC;IACH;IAEQ,wBAAwB,CAAC,WAA2B,EAAE,MAAc,EAAA;AAC1E,QAAA,WAAW,CAAC,MAAM,GAAG,MAAK;AACxB,YAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAA,CAAE,CAAC;AACxD,QAAA,CAAC;AAED,QAAA,WAAW,CAAC,SAAS,GAAG,CAAC,KAAK,KAAI;YAChC,OAAO,CAAC,GAAG,CAAC,CAAA,wBAAA,EAA2B,MAAM,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC,IAAI,CAAC;AAC/D,QAAA,CAAC;AAED,QAAA,WAAW,CAAC,OAAO,GAAG,MAAK;AACzB,YAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAA,CAAE,CAAC;AACxD,QAAA,CAAC;AAED,QAAA,WAAW,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;YAC9B,OAAO,CAAC,KAAK,CAAC,CAAA,6BAAA,EAAgC,MAAM,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AACjE,QAAA,CAAC;IACH;AAEQ,IAAA,mBAAmB,CAAC,MAAc,EAAA;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AACnD,QAAA,IAAI,CAAC,UAAU;YAAE;AAEjB,QAAA,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;AACrB,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;AAEnC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK;AACzC,QAAA,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;AAEjC,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAA,CAAE,CAAC;IACtD;AAEQ,IAAA,wBAAwB,CAAC,QAAkB,EAAA;AACjD,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;AACzD,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;AAE3D,QAAA,OAAO,OAAO,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI;IAC9C;IAEQ,uBAAuB,GAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;QAEvB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;YAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE;YAE1C,IAAI,CAAC,WAAY,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,IAAG;gBAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;gBAE9D,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;wBACvC,OAAO,CAAC,KAAK,CAAC,CAAA,gBAAA,EAAmB,KAAK,CAAC,IAAI,CAAA,OAAA,CAAS,EAAE,KAAK,CAAC;AAC9D,oBAAA,CAAC,CAAC;gBACJ;qBAAO;oBACL,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,WAAY,CAAC;gBAClD;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,eAAe,CACrB,eAAqC,EACrC,QAAkB,EAClB,QAAkB,EAClB,cAAwB,EAAA;AAExB,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC;IACpF;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,KAAK,WAAW;IACpD;AAEA,IAAA,IAAI,qBAAqB,GAAA;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;IAClD;uGA3cW,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACfD;;ACAA;;AAEG;;ACFH;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noatgnu/cupcake-mint-chocolate",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.7",
|
|
4
4
|
"description": "An extension for cupcake-core that provides additional api and interfaces for managing notifications and messaging.",
|
|
5
5
|
"author": "Toan Phung",
|
|
6
6
|
"license": "MIT",
|