@ngenux/ngage-whiteboarding 1.0.8 → 1.0.9

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.
Files changed (49) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.esm.js +106 -91
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +113 -90
  6. package/dist/index.js.map +1 -1
  7. package/dist/src/components/Whiteboard/index.d.ts.map +1 -1
  8. package/dist/src/context/WhiteboardContext.d.ts.map +1 -1
  9. package/dist/src/utils/socket-utility.d.ts +6 -1
  10. package/dist/src/utils/socket-utility.d.ts.map +1 -1
  11. package/dist/utils/index.d.ts +13 -0
  12. package/dist/utils/index.d.ts.map +1 -0
  13. package/dist/utils/socket-utility.esm.js +168 -0
  14. package/dist/utils/socket-utility.esm.js.map +1 -0
  15. package/dist/utils/socket-utility.js +177 -0
  16. package/dist/utils/socket-utility.js.map +1 -0
  17. package/dist/utils/src/components/Shapes/Arrow.d.ts +11 -0
  18. package/dist/utils/src/components/Shapes/Arrow.d.ts.map +1 -0
  19. package/dist/utils/src/components/Shapes/Ellipse.d.ts +11 -0
  20. package/dist/utils/src/components/Shapes/Ellipse.d.ts.map +1 -0
  21. package/dist/utils/src/components/Shapes/ErasedShape.d.ts +11 -0
  22. package/dist/utils/src/components/Shapes/ErasedShape.d.ts.map +1 -0
  23. package/dist/utils/src/components/Shapes/FreehandDrawing.d.ts +11 -0
  24. package/dist/utils/src/components/Shapes/FreehandDrawing.d.ts.map +1 -0
  25. package/dist/utils/src/components/Shapes/Line.d.ts +11 -0
  26. package/dist/utils/src/components/Shapes/Line.d.ts.map +1 -0
  27. package/dist/utils/src/components/Shapes/Rectangle.d.ts +11 -0
  28. package/dist/utils/src/components/Shapes/Rectangle.d.ts.map +1 -0
  29. package/dist/utils/src/components/Whiteboard/Board.d.ts +15 -0
  30. package/dist/utils/src/components/Whiteboard/Board.d.ts.map +1 -0
  31. package/dist/utils/src/components/Whiteboard/Toolbar.d.ts +21 -0
  32. package/dist/utils/src/components/Whiteboard/Toolbar.d.ts.map +1 -0
  33. package/dist/utils/src/components/Whiteboard/index.d.ts +11 -0
  34. package/dist/utils/src/components/Whiteboard/index.d.ts.map +1 -0
  35. package/dist/utils/src/context/WhiteboardContext.d.ts +128 -0
  36. package/dist/utils/src/context/WhiteboardContext.d.ts.map +1 -0
  37. package/dist/utils/src/hooks/useCapture.d.ts +4 -0
  38. package/dist/utils/src/hooks/useCapture.d.ts.map +1 -0
  39. package/dist/utils/src/hooks/useCollaborativeWhiteboard.d.ts +27 -0
  40. package/dist/utils/src/hooks/useCollaborativeWhiteboard.d.ts.map +1 -0
  41. package/dist/utils/src/lib/utils.d.ts +3 -0
  42. package/dist/utils/src/lib/utils.d.ts.map +1 -0
  43. package/dist/utils/src/types/index.d.ts +123 -0
  44. package/dist/utils/src/types/index.d.ts.map +1 -0
  45. package/dist/utils/src/utils/compression.d.ts +14 -0
  46. package/dist/utils/src/utils/compression.d.ts.map +1 -0
  47. package/dist/utils/src/utils/socket-utility.d.ts +11 -0
  48. package/dist/utils/src/utils/socket-utility.d.ts.map +1 -0
  49. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Whiteboard/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAUjF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA4hBhD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Whiteboard/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAUjF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAmiBhD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"WhiteboardContext.d.ts","sourceRoot":"","sources":["../../../src/context/WhiteboardContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WhiteboardContext.d.ts","sourceRoot":"","sources":["../../../src/context/WhiteboardContext.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,11 @@
1
+ import { Socket } from 'socket.io-client';
1
2
  import { CompressedData } from '@/types';
2
3
  export declare const onSend: (roomId: string, data: CompressedData, webSocketUrl?: string) => void;
3
- export declare const onReceive: (roomId: string, callback: (data: CompressedData) => void, webSocketUrl?: string) => void;
4
+ export declare const onReceive: (roomId: string, callback: (data: CompressedData) => void, webSocketUrl?: string, onRoomJoined?: () => void) => void;
4
5
  export declare const leaveRoom: (roomId: string) => void;
5
6
  export declare const disconnectSocket: () => void;
7
+ export declare const isSocketConnected: () => boolean;
8
+ export declare const getSocket: () => Socket | null;
9
+ export declare const onSocketStatusChange: (callback: (isConnected: boolean) => void) => (() => void);
10
+ export declare const waitForSocket: (webSocketUrl?: string, timeoutMs?: number) => Promise<void>;
6
11
  //# sourceMappingURL=socket-utility.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"socket-utility.d.ts","sourceRoot":"","sources":["../../../src/utils/socket-utility.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAsEzC,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,EAAE,MAAM,cAAc,EAAE,eAAe,MAAM,KAAG,IA6BpF,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,EAAE,eAAe,MAAM,KAAG,IAc3G,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,IAO1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,IAQnC,CAAC"}
1
+ {"version":3,"file":"socket-utility.d.ts","sourceRoot":"","sources":["../../../src/utils/socket-utility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA8DzC,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,EAAE,MAAM,cAAc,EAAE,eAAe,MAAM,KAAG,IA6BpF,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,EAAE,eAAe,MAAM,EAAE,eAAe,MAAM,IAAI,KAAG,IAoBtI,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,IAO1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,IAOnC,CAAC;AAGF,eAAO,MAAM,iBAAiB,QAAO,OAEpC,CAAC;AAGF,eAAO,MAAM,SAAS,QAAO,MAAM,GAAG,IAErC,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAC/B,UAAU,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,KACvC,CAAC,MAAM,IAAI,CASb,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,eAAe,MAAM,EAAE,YAAW,MAAa,KAAG,OAAO,CAAC,IAAI,CAsB3F,CAAC"}
@@ -0,0 +1,13 @@
1
+ import './src/styles.css';
2
+ import { Whiteboard } from './src/components/Whiteboard';
3
+ import { WhiteboardProvider } from './src/context/WhiteboardContext';
4
+ import { useCapture } from './src/hooks/useCapture';
5
+ import { cn } from './src/lib/utils';
6
+ export { Whiteboard, WhiteboardProvider, useCapture as useWhiteboardStream, cn };
7
+ export type { WhiteboardProps } from './src/components/Whiteboard/index';
8
+ export type { ShapeProps, ToolType, StrokeStyle, WhiteboardState, DrawingAction, CompressedData } from './src/types';
9
+ export interface WhiteboardProviderProps {
10
+ children: React.ReactNode;
11
+ webSocketUrl?: string;
12
+ }
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.tsx"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,IAAI,mBAAmB,EAAE,EAAE,EAAE,CAAC;AAGjF,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,YAAY,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,eAAe,EACf,aAAa,EACb,cAAc,EACf,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,168 @@
1
+ import { io } from 'socket.io-client';
2
+
3
+ let socket = null;
4
+ const joinedRooms = new Set();
5
+ const setupCallbacks = new Map();
6
+ let currentWebSocketUrl = undefined;
7
+ // Initialize socket connection
8
+ const initializeSocket = (webSocketUrl) => {
9
+ // Use provided webSocketUrl or fallback to environment variable for backward compatibility
10
+ const socketServerUrl = webSocketUrl || import.meta.env?.VITE_WEBSOCKET_URL || "";
11
+ // If URL has changed or socket doesn't exist, create new connection
12
+ if (!socket || (webSocketUrl && currentWebSocketUrl !== webSocketUrl)) {
13
+ // Disconnect existing socket if URL changed
14
+ if (socket && currentWebSocketUrl !== webSocketUrl) {
15
+ socket.disconnect();
16
+ socket = null;
17
+ joinedRooms.clear();
18
+ setupCallbacks.clear();
19
+ }
20
+ currentWebSocketUrl = webSocketUrl;
21
+ console.log('[SOCKET] Using socket server URL:', socketServerUrl);
22
+ if (!socketServerUrl) {
23
+ console.error('[SOCKET] No socket server URL provided');
24
+ }
25
+ socket = io(socketServerUrl, {
26
+ transports: ['websocket'],
27
+ reconnection: true,
28
+ reconnectionAttempts: 5,
29
+ reconnectionDelay: 1000,
30
+ });
31
+ socket.on('connect', () => {
32
+ console.log('[SOCKET] Connected to server');
33
+ // Re-join all rooms after reconnection
34
+ joinedRooms.forEach(roomId => {
35
+ socket.emit('join-room', roomId);
36
+ console.log('[SOCKET] Re-joined room:', roomId);
37
+ });
38
+ });
39
+ socket.on('disconnect', () => {
40
+ console.log('[SOCKET] Disconnected from server');
41
+ });
42
+ socket.on('connect_error', (error) => {
43
+ console.error('[SOCKET] Connection error:', error);
44
+ });
45
+ // Set up the global receive-message listener once
46
+ socket.on('receive-message', (message) => {
47
+ const callback = setupCallbacks.get(message.roomId);
48
+ if (callback) {
49
+ console.log('[SOCKET] Received message from room:', message.roomId, {
50
+ compression: message.data.compressionType,
51
+ originalSize: message.data.originalSize,
52
+ compressedSize: message.data.compressedSize,
53
+ from: message.from
54
+ });
55
+ callback(message.data);
56
+ }
57
+ });
58
+ }
59
+ return socket;
60
+ };
61
+ const onSend = (roomId, data, webSocketUrl) => {
62
+ const socketInstance = initializeSocket(webSocketUrl);
63
+ // Check if socket is connected before sending
64
+ if (!socketInstance.connected) {
65
+ console.warn('[SOCKET] Socket not connected, cannot send message');
66
+ return;
67
+ }
68
+ const message = {
69
+ roomId,
70
+ data,
71
+ timestamp: Date.now(),
72
+ };
73
+ console.log('[SOCKET] Sending message to room:', roomId, {
74
+ compression: data.compressionType,
75
+ originalSize: data.originalSize,
76
+ compressedSize: data.compressedSize,
77
+ connected: socketInstance.connected,
78
+ socketId: socketInstance.id,
79
+ });
80
+ try {
81
+ socketInstance.emit('send-message', message);
82
+ console.log('[SOCKET] Message sent successfully');
83
+ }
84
+ catch (error) {
85
+ console.error('[SOCKET] Error sending message:', error);
86
+ }
87
+ };
88
+ const onReceive = (roomId, callback, webSocketUrl) => {
89
+ const socketInstance = initializeSocket(webSocketUrl);
90
+ // Store the callback for this room
91
+ setupCallbacks.set(roomId, callback);
92
+ // Only join the room if we haven't already
93
+ if (!joinedRooms.has(roomId)) {
94
+ socketInstance.emit('join-room', roomId);
95
+ joinedRooms.add(roomId);
96
+ console.log('[SOCKET] Joined room:', roomId);
97
+ }
98
+ else {
99
+ console.log('[SOCKET] Already in room:', roomId);
100
+ }
101
+ };
102
+ const leaveRoom = (roomId) => {
103
+ if (socket && joinedRooms.has(roomId)) {
104
+ socket.emit('leave-room', roomId);
105
+ joinedRooms.delete(roomId);
106
+ setupCallbacks.delete(roomId);
107
+ console.log('[SOCKET] Left room:', roomId);
108
+ }
109
+ };
110
+ const disconnectSocket = () => {
111
+ if (socket) {
112
+ socket.disconnect();
113
+ socket = null;
114
+ joinedRooms.clear();
115
+ setupCallbacks.clear();
116
+ console.log('[SOCKET] Socket disconnected and cleaned up');
117
+ }
118
+ };
119
+ // Get current socket connection status
120
+ const isSocketConnected = () => {
121
+ return socket?.connected ?? false;
122
+ };
123
+ // Get current socket instance
124
+ const getSocket = () => {
125
+ return socket;
126
+ };
127
+ // Subscribe to connection status changes
128
+ const onSocketStatusChange = (callback) => {
129
+ const socketInstance = socket || initializeSocket();
130
+ const handleConnect = () => callback(true);
131
+ const handleDisconnect = () => callback(false);
132
+ socketInstance.on('connect', handleConnect);
133
+ socketInstance.on('disconnect', handleDisconnect);
134
+ // Return unsubscribe function
135
+ return () => {
136
+ socketInstance.off('connect', handleConnect);
137
+ socketInstance.off('disconnect', handleDisconnect);
138
+ };
139
+ };
140
+ const waitForSocket = (webSocketUrl, timeoutMs = 5000) => {
141
+ return new Promise((resolve) => {
142
+ const socketInstance = initializeSocket(webSocketUrl);
143
+ // If already connected, resolve immediately
144
+ if (socketInstance.connected) {
145
+ console.log('[SOCKET] Socket already connected, resolving immediately');
146
+ resolve();
147
+ return;
148
+ }
149
+ console.log('[SOCKET] Waiting for socket connection (timeout: ' + timeoutMs + 'ms)');
150
+ // Listen for connect event
151
+ const handleConnect = () => {
152
+ console.log('[SOCKET] Socket connection established');
153
+ socketInstance.off('connect', handleConnect);
154
+ clearTimeout(timeoutHandle);
155
+ resolve();
156
+ };
157
+ socketInstance.on('connect', handleConnect);
158
+ // Safety net: resolve after timeout regardless
159
+ const timeoutHandle = setTimeout(() => {
160
+ console.log('[SOCKET] Connection timeout reached - resolving anyway (safety net)');
161
+ socketInstance.off('connect', handleConnect);
162
+ resolve();
163
+ }, timeoutMs);
164
+ });
165
+ };
166
+
167
+ export { disconnectSocket, getSocket, isSocketConnected, leaveRoom, onReceive, onSend, onSocketStatusChange, waitForSocket };
168
+ //# sourceMappingURL=socket-utility.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket-utility.esm.js","sources":["../../../src/utils/socket-utility.ts"],"sourcesContent":["import { io, Socket } from 'socket.io-client';\r\nimport { CompressedData } from '@/types';\r\n\r\nlet socket: Socket | null = null;\r\nconst joinedRooms = new Set<string>();\r\nconst setupCallbacks = new Map<string, (data: CompressedData) => void>();\r\nlet currentWebSocketUrl: string | undefined = undefined;\r\n\r\n// Initialize socket connection\r\nconst initializeSocket = (webSocketUrl?: string): Socket => {\r\n // Use provided webSocketUrl or fallback to environment variable for backward compatibility\r\n const socketServerUrl = webSocketUrl || import.meta.env?.VITE_WEBSOCKET_URL || \"\";\r\n \r\n // If URL has changed or socket doesn't exist, create new connection\r\n if (!socket || (webSocketUrl && currentWebSocketUrl !== webSocketUrl)) {\r\n // Disconnect existing socket if URL changed\r\n if (socket && currentWebSocketUrl !== webSocketUrl) {\r\n socket.disconnect();\r\n socket = null;\r\n joinedRooms.clear();\r\n setupCallbacks.clear();\r\n }\r\n \r\n currentWebSocketUrl = webSocketUrl;\r\n console.log('[SOCKET] Using socket server URL:', socketServerUrl);\r\n\r\n if (!socketServerUrl) {\r\n console.error('[SOCKET] No socket server URL provided');\r\n }\r\n\r\n socket = io(socketServerUrl, {\r\n transports: ['websocket'],\r\n reconnection: true,\r\n reconnectionAttempts: 5,\r\n reconnectionDelay: 1000,\r\n });\r\n\r\n socket.on('connect', () => {\r\n console.log('[SOCKET] Connected to server');\r\n // Re-join all rooms after reconnection\r\n joinedRooms.forEach(roomId => {\r\n socket!.emit('join-room', roomId);\r\n console.log('[SOCKET] Re-joined room:', roomId);\r\n });\r\n });\r\n\r\n socket.on('disconnect', () => {\r\n console.log('[SOCKET] Disconnected from server');\r\n });\r\n\r\n socket.on('connect_error', (error) => {\r\n console.error('[SOCKET] Connection error:', error);\r\n });\r\n\r\n // Set up the global receive-message listener once\r\n socket.on('receive-message', (message: { roomId: string; data: CompressedData; timestamp: number; from: string }) => {\r\n const callback = setupCallbacks.get(message.roomId);\r\n if (callback) {\r\n console.log('[SOCKET] Received message from room:', message.roomId, {\r\n compression: message.data.compressionType,\r\n originalSize: message.data.originalSize,\r\n compressedSize: message.data.compressedSize,\r\n from: message.from\r\n });\r\n callback(message.data);\r\n }\r\n });\r\n }\r\n return socket;\r\n};\r\n\r\nexport const onSend = (roomId: string, data: CompressedData, webSocketUrl?: string): void => {\r\n const socketInstance = initializeSocket(webSocketUrl);\r\n\r\n // Check if socket is connected before sending\r\n if (!socketInstance.connected) {\r\n console.warn('[SOCKET] Socket not connected, cannot send message');\r\n return;\r\n }\r\n\r\n const message = {\r\n roomId,\r\n data,\r\n timestamp: Date.now(),\r\n };\r\n\r\n console.log('[SOCKET] Sending message to room:', roomId, {\r\n compression: data.compressionType,\r\n originalSize: data.originalSize,\r\n compressedSize: data.compressedSize,\r\n connected: socketInstance.connected,\r\n socketId: socketInstance.id,\r\n });\r\n\r\n try {\r\n socketInstance.emit('send-message', message);\r\n console.log('[SOCKET] Message sent successfully');\r\n } catch (error) {\r\n console.error('[SOCKET] Error sending message:', error);\r\n }\r\n};\r\n\r\nexport const onReceive = (roomId: string, callback: (data: CompressedData) => void, webSocketUrl?: string): void => {\r\n const socketInstance = initializeSocket(webSocketUrl);\r\n\r\n // Store the callback for this room\r\n setupCallbacks.set(roomId, callback);\r\n\r\n // Only join the room if we haven't already\r\n if (!joinedRooms.has(roomId)) {\r\n socketInstance.emit('join-room', roomId);\r\n joinedRooms.add(roomId);\r\n console.log('[SOCKET] Joined room:', roomId);\r\n } else {\r\n console.log('[SOCKET] Already in room:', roomId);\r\n }\r\n};\r\n\r\nexport const leaveRoom = (roomId: string): void => {\r\n if (socket && joinedRooms.has(roomId)) {\r\n socket.emit('leave-room', roomId);\r\n joinedRooms.delete(roomId);\r\n setupCallbacks.delete(roomId);\r\n console.log('[SOCKET] Left room:', roomId);\r\n }\r\n};\r\n\r\nexport const disconnectSocket = (): void => {\r\n if (socket) {\r\n socket.disconnect();\r\n socket = null;\r\n joinedRooms.clear();\r\n setupCallbacks.clear();\r\n console.log('[SOCKET] Socket disconnected and cleaned up');\r\n }\r\n};\r\n\r\n// Get current socket connection status\r\nexport const isSocketConnected = (): boolean => {\r\n return socket?.connected ?? false;\r\n};\r\n\r\n// Get current socket instance\r\nexport const getSocket = (): Socket | null => {\r\n return socket;\r\n};\r\n\r\n// Subscribe to connection status changes\r\nexport const onSocketStatusChange = (\r\n callback: (isConnected: boolean) => void\r\n): (() => void) => {\r\n const socketInstance = socket || initializeSocket();\r\n \r\n const handleConnect = () => callback(true);\r\n const handleDisconnect = () => callback(false);\r\n \r\n socketInstance.on('connect', handleConnect);\r\n socketInstance.on('disconnect', handleDisconnect);\r\n \r\n // Return unsubscribe function\r\n return () => {\r\n socketInstance.off('connect', handleConnect);\r\n socketInstance.off('disconnect', handleDisconnect);\r\n };\r\n};\r\n\r\nexport const waitForSocket = (webSocketUrl?: string, timeoutMs: number = 5000): Promise<void> => {\r\n return new Promise((resolve) => {\r\n const socketInstance = initializeSocket(webSocketUrl);\r\n \r\n // If already connected, resolve immediately\r\n if (socketInstance.connected) {\r\n console.log('[SOCKET] Socket already connected, resolving immediately');\r\n resolve();\r\n return;\r\n }\r\n\r\n console.log('[SOCKET] Waiting for socket connection (timeout: ' + timeoutMs + 'ms)');\r\n \r\n // Listen for connect event\r\n const handleConnect = () => {\r\n console.log('[SOCKET] Socket connection established');\r\n socketInstance.off('connect', handleConnect);\r\n clearTimeout(timeoutHandle);\r\n resolve();\r\n };\r\n\r\n socketInstance.on('connect', handleConnect);\r\n\r\n // Safety net: resolve after timeout regardless\r\n const timeoutHandle = setTimeout(() => {\r\n console.log('[SOCKET] Connection timeout reached - resolving anyway (safety net)');\r\n socketInstance.off('connect', handleConnect);\r\n resolve();\r\n }, timeoutMs);\r\n });\r\n}; "],"names":[],"mappings":";;AAGA,IAAI,MAAM,GAAkB,IAAI,CAAC;AACjC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;AACtC,MAAM,cAAc,GAAG,IAAI,GAAG,EAA0C,CAAC;AACzE,IAAI,mBAAmB,GAAuB,SAAS,CAAC;AAExD;AACA,MAAM,gBAAgB,GAAG,CAAC,YAAqB,KAAY;;AAEzD,IAAA,MAAM,eAAe,GAAG,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,IAAI,EAAE,CAAC;;IAGlF,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,mBAAmB,KAAK,YAAY,CAAC,EAAE;;AAErE,QAAA,IAAI,MAAM,IAAI,mBAAmB,KAAK,YAAY,EAAE;YAClD,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,GAAG,IAAI,CAAC;YACd,WAAW,CAAC,KAAK,EAAE,CAAC;YACpB,cAAc,CAAC,KAAK,EAAE,CAAC;SACxB;QAED,mBAAmB,GAAG,YAAY,CAAC;AACnC,QAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,eAAe,CAAC,CAAC;QAElE,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;SACzD;AAED,QAAA,MAAM,GAAG,EAAE,CAAC,eAAe,EAAE;YAC3B,UAAU,EAAE,CAAC,WAAW,CAAC;AACzB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,oBAAoB,EAAE,CAAC;AACvB,YAAA,iBAAiB,EAAE,IAAI;AACxB,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAK;AACxB,YAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;;AAE5C,YAAA,WAAW,CAAC,OAAO,CAAC,MAAM,IAAG;AAC3B,gBAAA,MAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAClC,gBAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;AAClD,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAK;AAC3B,YAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,KAAI;AACnC,YAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;;QAGH,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,OAAkF,KAAI;YAClH,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,QAAQ,EAAE;gBACZ,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,OAAO,CAAC,MAAM,EAAE;AAClE,oBAAA,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe;AACzC,oBAAA,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;AACvC,oBAAA,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc;oBAC3C,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC,CAAC;AACH,gBAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACxB;AACH,SAAC,CAAC,CAAC;KACJ;AACD,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEW,MAAA,MAAM,GAAG,CAAC,MAAc,EAAE,IAAoB,EAAE,YAAqB,KAAU;AAC1F,IAAA,MAAM,cAAc,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;;AAGtD,IAAA,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;AAC7B,QAAA,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACnE,OAAO;KACR;AAED,IAAA,MAAM,OAAO,GAAG;QACd,MAAM;QACN,IAAI;AACJ,QAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AAEF,IAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,MAAM,EAAE;QACvD,WAAW,EAAE,IAAI,CAAC,eAAe;QACjC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,SAAS,EAAE,cAAc,CAAC,SAAS;QACnC,QAAQ,EAAE,cAAc,CAAC,EAAE;AAC5B,KAAA,CAAC,CAAC;AAEH,IAAA,IAAI;AACF,QAAA,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAC7C,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;KACnD;IAAC,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;KACzD;AACH,EAAE;AAEW,MAAA,SAAS,GAAG,CAAC,MAAc,EAAE,QAAwC,EAAE,YAAqB,KAAU;AACjH,IAAA,MAAM,cAAc,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;;AAGtD,IAAA,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;;IAGrC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC5B,QAAA,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACzC,QAAA,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACxB,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;KAC9C;SAAM;AACL,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;KAClD;AACH,EAAE;AAEW,MAAA,SAAS,GAAG,CAAC,MAAc,KAAU;IAChD,IAAI,MAAM,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACrC,QAAA,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAClC,QAAA,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC3B,QAAA,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;KAC5C;AACH,EAAE;AAEK,MAAM,gBAAgB,GAAG,MAAW;IACzC,IAAI,MAAM,EAAE;QACV,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,GAAG,IAAI,CAAC;QACd,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,cAAc,CAAC,KAAK,EAAE,CAAC;AACvB,QAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;KAC5D;AACH,EAAE;AAEF;AACO,MAAM,iBAAiB,GAAG,MAAc;AAC7C,IAAA,OAAO,MAAM,EAAE,SAAS,IAAI,KAAK,CAAC;AACpC,EAAE;AAEF;AACO,MAAM,SAAS,GAAG,MAAoB;AAC3C,IAAA,OAAO,MAAM,CAAC;AAChB,EAAE;AAEF;AACa,MAAA,oBAAoB,GAAG,CAClC,QAAwC,KACxB;AAChB,IAAA,MAAM,cAAc,GAAG,MAAM,IAAI,gBAAgB,EAAE,CAAC;IAEpD,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;AAE/C,IAAA,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC5C,IAAA,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;;AAGlD,IAAA,OAAO,MAAK;AACV,QAAA,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC7C,QAAA,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;AACrD,KAAC,CAAC;AACJ,EAAE;AAEW,MAAA,aAAa,GAAG,CAAC,YAAqB,EAAE,SAAA,GAAoB,IAAI,KAAmB;AAC9F,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,QAAA,MAAM,cAAc,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;;AAGtD,QAAA,IAAI,cAAc,CAAC,SAAS,EAAE;AAC5B,YAAA,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;AACxE,YAAA,OAAO,EAAE,CAAC;YACV,OAAO;SACR;QAED,OAAO,CAAC,GAAG,CAAC,mDAAmD,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC;;QAGrF,MAAM,aAAa,GAAG,MAAK;AACzB,YAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AACtD,YAAA,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAC7C,YAAY,CAAC,aAAa,CAAC,CAAC;AAC5B,YAAA,OAAO,EAAE,CAAC;AACZ,SAAC,CAAC;AAEF,QAAA,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;;AAG5C,QAAA,MAAM,aAAa,GAAG,UAAU,CAAC,MAAK;AACpC,YAAA,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;AACnF,YAAA,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC7C,YAAA,OAAO,EAAE,CAAC;SACX,EAAE,SAAS,CAAC,CAAC;AAChB,KAAC,CAAC,CAAC;AACL;;;;"}
@@ -0,0 +1,177 @@
1
+ 'use strict';
2
+
3
+ var socket_ioClient = require('socket.io-client');
4
+
5
+ let socket = null;
6
+ const joinedRooms = new Set();
7
+ const setupCallbacks = new Map();
8
+ let currentWebSocketUrl = undefined;
9
+ // Initialize socket connection
10
+ const initializeSocket = (webSocketUrl) => {
11
+ // Use provided webSocketUrl or fallback to environment variable for backward compatibility
12
+ const socketServerUrl = webSocketUrl || undefined?.VITE_WEBSOCKET_URL || "";
13
+ // If URL has changed or socket doesn't exist, create new connection
14
+ if (!socket || (webSocketUrl && currentWebSocketUrl !== webSocketUrl)) {
15
+ // Disconnect existing socket if URL changed
16
+ if (socket && currentWebSocketUrl !== webSocketUrl) {
17
+ socket.disconnect();
18
+ socket = null;
19
+ joinedRooms.clear();
20
+ setupCallbacks.clear();
21
+ }
22
+ currentWebSocketUrl = webSocketUrl;
23
+ console.log('[SOCKET] Using socket server URL:', socketServerUrl);
24
+ if (!socketServerUrl) {
25
+ console.error('[SOCKET] No socket server URL provided');
26
+ }
27
+ socket = socket_ioClient.io(socketServerUrl, {
28
+ transports: ['websocket'],
29
+ reconnection: true,
30
+ reconnectionAttempts: 5,
31
+ reconnectionDelay: 1000,
32
+ });
33
+ socket.on('connect', () => {
34
+ console.log('[SOCKET] Connected to server');
35
+ // Re-join all rooms after reconnection
36
+ joinedRooms.forEach(roomId => {
37
+ socket.emit('join-room', roomId);
38
+ console.log('[SOCKET] Re-joined room:', roomId);
39
+ });
40
+ });
41
+ socket.on('disconnect', () => {
42
+ console.log('[SOCKET] Disconnected from server');
43
+ });
44
+ socket.on('connect_error', (error) => {
45
+ console.error('[SOCKET] Connection error:', error);
46
+ });
47
+ // Set up the global receive-message listener once
48
+ socket.on('receive-message', (message) => {
49
+ const callback = setupCallbacks.get(message.roomId);
50
+ if (callback) {
51
+ console.log('[SOCKET] Received message from room:', message.roomId, {
52
+ compression: message.data.compressionType,
53
+ originalSize: message.data.originalSize,
54
+ compressedSize: message.data.compressedSize,
55
+ from: message.from
56
+ });
57
+ callback(message.data);
58
+ }
59
+ });
60
+ }
61
+ return socket;
62
+ };
63
+ const onSend = (roomId, data, webSocketUrl) => {
64
+ const socketInstance = initializeSocket(webSocketUrl);
65
+ // Check if socket is connected before sending
66
+ if (!socketInstance.connected) {
67
+ console.warn('[SOCKET] Socket not connected, cannot send message');
68
+ return;
69
+ }
70
+ const message = {
71
+ roomId,
72
+ data,
73
+ timestamp: Date.now(),
74
+ };
75
+ console.log('[SOCKET] Sending message to room:', roomId, {
76
+ compression: data.compressionType,
77
+ originalSize: data.originalSize,
78
+ compressedSize: data.compressedSize,
79
+ connected: socketInstance.connected,
80
+ socketId: socketInstance.id,
81
+ });
82
+ try {
83
+ socketInstance.emit('send-message', message);
84
+ console.log('[SOCKET] Message sent successfully');
85
+ }
86
+ catch (error) {
87
+ console.error('[SOCKET] Error sending message:', error);
88
+ }
89
+ };
90
+ const onReceive = (roomId, callback, webSocketUrl) => {
91
+ const socketInstance = initializeSocket(webSocketUrl);
92
+ // Store the callback for this room
93
+ setupCallbacks.set(roomId, callback);
94
+ // Only join the room if we haven't already
95
+ if (!joinedRooms.has(roomId)) {
96
+ socketInstance.emit('join-room', roomId);
97
+ joinedRooms.add(roomId);
98
+ console.log('[SOCKET] Joined room:', roomId);
99
+ }
100
+ else {
101
+ console.log('[SOCKET] Already in room:', roomId);
102
+ }
103
+ };
104
+ const leaveRoom = (roomId) => {
105
+ if (socket && joinedRooms.has(roomId)) {
106
+ socket.emit('leave-room', roomId);
107
+ joinedRooms.delete(roomId);
108
+ setupCallbacks.delete(roomId);
109
+ console.log('[SOCKET] Left room:', roomId);
110
+ }
111
+ };
112
+ const disconnectSocket = () => {
113
+ if (socket) {
114
+ socket.disconnect();
115
+ socket = null;
116
+ joinedRooms.clear();
117
+ setupCallbacks.clear();
118
+ console.log('[SOCKET] Socket disconnected and cleaned up');
119
+ }
120
+ };
121
+ // Get current socket connection status
122
+ const isSocketConnected = () => {
123
+ return socket?.connected ?? false;
124
+ };
125
+ // Get current socket instance
126
+ const getSocket = () => {
127
+ return socket;
128
+ };
129
+ // Subscribe to connection status changes
130
+ const onSocketStatusChange = (callback) => {
131
+ const socketInstance = socket || initializeSocket();
132
+ const handleConnect = () => callback(true);
133
+ const handleDisconnect = () => callback(false);
134
+ socketInstance.on('connect', handleConnect);
135
+ socketInstance.on('disconnect', handleDisconnect);
136
+ // Return unsubscribe function
137
+ return () => {
138
+ socketInstance.off('connect', handleConnect);
139
+ socketInstance.off('disconnect', handleDisconnect);
140
+ };
141
+ };
142
+ const waitForSocket = (webSocketUrl, timeoutMs = 5000) => {
143
+ return new Promise((resolve) => {
144
+ const socketInstance = initializeSocket(webSocketUrl);
145
+ // If already connected, resolve immediately
146
+ if (socketInstance.connected) {
147
+ console.log('[SOCKET] Socket already connected, resolving immediately');
148
+ resolve();
149
+ return;
150
+ }
151
+ console.log('[SOCKET] Waiting for socket connection (timeout: ' + timeoutMs + 'ms)');
152
+ // Listen for connect event
153
+ const handleConnect = () => {
154
+ console.log('[SOCKET] Socket connection established');
155
+ socketInstance.off('connect', handleConnect);
156
+ clearTimeout(timeoutHandle);
157
+ resolve();
158
+ };
159
+ socketInstance.on('connect', handleConnect);
160
+ // Safety net: resolve after timeout regardless
161
+ const timeoutHandle = setTimeout(() => {
162
+ console.log('[SOCKET] Connection timeout reached - resolving anyway (safety net)');
163
+ socketInstance.off('connect', handleConnect);
164
+ resolve();
165
+ }, timeoutMs);
166
+ });
167
+ };
168
+
169
+ exports.disconnectSocket = disconnectSocket;
170
+ exports.getSocket = getSocket;
171
+ exports.isSocketConnected = isSocketConnected;
172
+ exports.leaveRoom = leaveRoom;
173
+ exports.onReceive = onReceive;
174
+ exports.onSend = onSend;
175
+ exports.onSocketStatusChange = onSocketStatusChange;
176
+ exports.waitForSocket = waitForSocket;
177
+ //# sourceMappingURL=socket-utility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket-utility.js","sources":["../../../src/utils/socket-utility.ts"],"sourcesContent":["import { io, Socket } from 'socket.io-client';\r\nimport { CompressedData } from '@/types';\r\n\r\nlet socket: Socket | null = null;\r\nconst joinedRooms = new Set<string>();\r\nconst setupCallbacks = new Map<string, (data: CompressedData) => void>();\r\nlet currentWebSocketUrl: string | undefined = undefined;\r\n\r\n// Initialize socket connection\r\nconst initializeSocket = (webSocketUrl?: string): Socket => {\r\n // Use provided webSocketUrl or fallback to environment variable for backward compatibility\r\n const socketServerUrl = webSocketUrl || import.meta.env?.VITE_WEBSOCKET_URL || \"\";\r\n \r\n // If URL has changed or socket doesn't exist, create new connection\r\n if (!socket || (webSocketUrl && currentWebSocketUrl !== webSocketUrl)) {\r\n // Disconnect existing socket if URL changed\r\n if (socket && currentWebSocketUrl !== webSocketUrl) {\r\n socket.disconnect();\r\n socket = null;\r\n joinedRooms.clear();\r\n setupCallbacks.clear();\r\n }\r\n \r\n currentWebSocketUrl = webSocketUrl;\r\n console.log('[SOCKET] Using socket server URL:', socketServerUrl);\r\n\r\n if (!socketServerUrl) {\r\n console.error('[SOCKET] No socket server URL provided');\r\n }\r\n\r\n socket = io(socketServerUrl, {\r\n transports: ['websocket'],\r\n reconnection: true,\r\n reconnectionAttempts: 5,\r\n reconnectionDelay: 1000,\r\n });\r\n\r\n socket.on('connect', () => {\r\n console.log('[SOCKET] Connected to server');\r\n // Re-join all rooms after reconnection\r\n joinedRooms.forEach(roomId => {\r\n socket!.emit('join-room', roomId);\r\n console.log('[SOCKET] Re-joined room:', roomId);\r\n });\r\n });\r\n\r\n socket.on('disconnect', () => {\r\n console.log('[SOCKET] Disconnected from server');\r\n });\r\n\r\n socket.on('connect_error', (error) => {\r\n console.error('[SOCKET] Connection error:', error);\r\n });\r\n\r\n // Set up the global receive-message listener once\r\n socket.on('receive-message', (message: { roomId: string; data: CompressedData; timestamp: number; from: string }) => {\r\n const callback = setupCallbacks.get(message.roomId);\r\n if (callback) {\r\n console.log('[SOCKET] Received message from room:', message.roomId, {\r\n compression: message.data.compressionType,\r\n originalSize: message.data.originalSize,\r\n compressedSize: message.data.compressedSize,\r\n from: message.from\r\n });\r\n callback(message.data);\r\n }\r\n });\r\n }\r\n return socket;\r\n};\r\n\r\nexport const onSend = (roomId: string, data: CompressedData, webSocketUrl?: string): void => {\r\n const socketInstance = initializeSocket(webSocketUrl);\r\n\r\n // Check if socket is connected before sending\r\n if (!socketInstance.connected) {\r\n console.warn('[SOCKET] Socket not connected, cannot send message');\r\n return;\r\n }\r\n\r\n const message = {\r\n roomId,\r\n data,\r\n timestamp: Date.now(),\r\n };\r\n\r\n console.log('[SOCKET] Sending message to room:', roomId, {\r\n compression: data.compressionType,\r\n originalSize: data.originalSize,\r\n compressedSize: data.compressedSize,\r\n connected: socketInstance.connected,\r\n socketId: socketInstance.id,\r\n });\r\n\r\n try {\r\n socketInstance.emit('send-message', message);\r\n console.log('[SOCKET] Message sent successfully');\r\n } catch (error) {\r\n console.error('[SOCKET] Error sending message:', error);\r\n }\r\n};\r\n\r\nexport const onReceive = (roomId: string, callback: (data: CompressedData) => void, webSocketUrl?: string): void => {\r\n const socketInstance = initializeSocket(webSocketUrl);\r\n\r\n // Store the callback for this room\r\n setupCallbacks.set(roomId, callback);\r\n\r\n // Only join the room if we haven't already\r\n if (!joinedRooms.has(roomId)) {\r\n socketInstance.emit('join-room', roomId);\r\n joinedRooms.add(roomId);\r\n console.log('[SOCKET] Joined room:', roomId);\r\n } else {\r\n console.log('[SOCKET] Already in room:', roomId);\r\n }\r\n};\r\n\r\nexport const leaveRoom = (roomId: string): void => {\r\n if (socket && joinedRooms.has(roomId)) {\r\n socket.emit('leave-room', roomId);\r\n joinedRooms.delete(roomId);\r\n setupCallbacks.delete(roomId);\r\n console.log('[SOCKET] Left room:', roomId);\r\n }\r\n};\r\n\r\nexport const disconnectSocket = (): void => {\r\n if (socket) {\r\n socket.disconnect();\r\n socket = null;\r\n joinedRooms.clear();\r\n setupCallbacks.clear();\r\n console.log('[SOCKET] Socket disconnected and cleaned up');\r\n }\r\n};\r\n\r\n// Get current socket connection status\r\nexport const isSocketConnected = (): boolean => {\r\n return socket?.connected ?? false;\r\n};\r\n\r\n// Get current socket instance\r\nexport const getSocket = (): Socket | null => {\r\n return socket;\r\n};\r\n\r\n// Subscribe to connection status changes\r\nexport const onSocketStatusChange = (\r\n callback: (isConnected: boolean) => void\r\n): (() => void) => {\r\n const socketInstance = socket || initializeSocket();\r\n \r\n const handleConnect = () => callback(true);\r\n const handleDisconnect = () => callback(false);\r\n \r\n socketInstance.on('connect', handleConnect);\r\n socketInstance.on('disconnect', handleDisconnect);\r\n \r\n // Return unsubscribe function\r\n return () => {\r\n socketInstance.off('connect', handleConnect);\r\n socketInstance.off('disconnect', handleDisconnect);\r\n };\r\n};\r\n\r\nexport const waitForSocket = (webSocketUrl?: string, timeoutMs: number = 5000): Promise<void> => {\r\n return new Promise((resolve) => {\r\n const socketInstance = initializeSocket(webSocketUrl);\r\n \r\n // If already connected, resolve immediately\r\n if (socketInstance.connected) {\r\n console.log('[SOCKET] Socket already connected, resolving immediately');\r\n resolve();\r\n return;\r\n }\r\n\r\n console.log('[SOCKET] Waiting for socket connection (timeout: ' + timeoutMs + 'ms)');\r\n \r\n // Listen for connect event\r\n const handleConnect = () => {\r\n console.log('[SOCKET] Socket connection established');\r\n socketInstance.off('connect', handleConnect);\r\n clearTimeout(timeoutHandle);\r\n resolve();\r\n };\r\n\r\n socketInstance.on('connect', handleConnect);\r\n\r\n // Safety net: resolve after timeout regardless\r\n const timeoutHandle = setTimeout(() => {\r\n console.log('[SOCKET] Connection timeout reached - resolving anyway (safety net)');\r\n socketInstance.off('connect', handleConnect);\r\n resolve();\r\n }, timeoutMs);\r\n });\r\n}; "],"names":["io"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { ShapeProps } from '@/types';
3
+ interface ArrowProps {
4
+ shapeProps: ShapeProps;
5
+ isSelected: boolean;
6
+ onSelect: () => void;
7
+ onUpdate: (shape: ShapeProps) => void;
8
+ }
9
+ export declare const Arrow: React.FC<ArrowProps>;
10
+ export {};
11
+ //# sourceMappingURL=Arrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Arrow.d.ts","sourceRoot":"","sources":["../../../../../src/components/Shapes/Arrow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,UAAU,UAAU;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAED,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAwHrC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { ShapeProps } from '@/types';
3
+ interface EllipseProps {
4
+ shapeProps: ShapeProps;
5
+ isSelected: boolean;
6
+ onSelect: () => void;
7
+ onUpdate: (shape: ShapeProps) => void;
8
+ }
9
+ export declare const Ellipse: React.FC<EllipseProps>;
10
+ export {};
11
+ //# sourceMappingURL=Ellipse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ellipse.d.ts","sourceRoot":"","sources":["../../../../../src/components/Shapes/Ellipse.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAe,MAAM,SAAS,CAAC;AAElD,UAAU,YAAY;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAkBD,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA0H1C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { ShapeProps } from '@/types';
3
+ interface ErasedShapeProps {
4
+ shapeProps: ShapeProps;
5
+ isSelected: boolean;
6
+ onSelect: () => void;
7
+ onUpdate: (shape: ShapeProps) => void;
8
+ }
9
+ export declare const ErasedShape: React.FC<ErasedShapeProps>;
10
+ export {};
11
+ //# sourceMappingURL=ErasedShape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErasedShape.d.ts","sourceRoot":"","sources":["../../../../../src/components/Shapes/ErasedShape.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,UAAU,gBAAgB;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA4TlD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { ShapeProps } from '@/types';
3
+ interface FreehandDrawingProps {
4
+ shapeProps: ShapeProps;
5
+ isSelected: boolean;
6
+ onSelect: () => void;
7
+ onUpdate: (shape: ShapeProps) => void;
8
+ }
9
+ export declare const FreehandDrawing: React.FC<FreehandDrawingProps>;
10
+ export {};
11
+ //# sourceMappingURL=FreehandDrawing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FreehandDrawing.d.ts","sourceRoot":"","sources":["../../../../../src/components/Shapes/FreehandDrawing.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAe,MAAM,SAAS,CAAC;AAElD,UAAU,oBAAoB;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAkBD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAyH1D,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { ShapeProps } from '@/types';
3
+ interface LineProps {
4
+ shapeProps: ShapeProps;
5
+ isSelected: boolean;
6
+ onSelect: () => void;
7
+ onUpdate: (shape: ShapeProps) => void;
8
+ }
9
+ export declare const Line: React.FC<LineProps>;
10
+ export {};
11
+ //# sourceMappingURL=Line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Line.d.ts","sourceRoot":"","sources":["../../../../../src/components/Shapes/Line.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAe,MAAM,SAAS,CAAC;AAElD,UAAU,SAAS;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAkBD,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA0HpC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { ShapeProps } from '@/types';
3
+ interface RectangleProps {
4
+ shapeProps: ShapeProps;
5
+ isSelected: boolean;
6
+ onSelect: () => void;
7
+ onUpdate: (shape: ShapeProps) => void;
8
+ }
9
+ export declare const Rectangle: React.FC<RectangleProps>;
10
+ export {};
11
+ //# sourceMappingURL=Rectangle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rectangle.d.ts","sourceRoot":"","sources":["../../../../../src/components/Shapes/Rectangle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAe,MAAM,SAAS,CAAC;AAElD,UAAU,cAAc;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAkBD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA0H9C,CAAC"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { DrawingAction } from '../../types';
3
+ interface BoardProps {
4
+ roomId?: string;
5
+ queueAction?: (action: DrawingAction) => void;
6
+ hasToolAccess?: boolean;
7
+ }
8
+ export interface BoardRef {
9
+ exportAsImage: (format: 'png' | 'jpeg') => void;
10
+ exportAsPDF: () => void;
11
+ getStageDataURL: (format: 'png' | 'jpeg') => string;
12
+ }
13
+ export declare const Board: React.MemoExoticComponent<React.ForwardRefExoticComponent<BoardProps & React.RefAttributes<BoardRef>>>;
14
+ export {};
15
+ //# sourceMappingURL=Board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Board.d.ts","sourceRoot":"","sources":["../../../../../src/components/Whiteboard/Board.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6F,MAAM,OAAO,CAAC;AAGlH,OAAO,EAAqB,aAAa,EAAgB,MAAM,aAAa,CAAC;AAU7E,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,aAAa,EAAE,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC;IAChD,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,eAAe,EAAE,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,KAAK,MAAM,CAAC;CACrD;AA+2BD,eAAO,MAAM,KAAK,wGAOhB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { DrawingAction } from '@/types';
3
+ interface ToolbarProps {
4
+ queueAction?: (action: DrawingAction) => void;
5
+ handleExportImage?: (format: 'png' | 'jpeg') => void;
6
+ handleExportPDF?: () => void;
7
+ handleClear?: () => void;
8
+ handleLockToggle?: () => void;
9
+ handleAllowedUsersChange?: (users: string[]) => void;
10
+ isAdmin?: boolean;
11
+ hasToolAccess?: boolean;
12
+ isGloballyUnlocked?: boolean;
13
+ shouldBeOpenByDefault?: boolean;
14
+ disableBackgroundChange?: boolean;
15
+ hasVideoBackground?: boolean;
16
+ }
17
+ export declare const TopToolbar: React.FC<ToolbarProps>;
18
+ export declare const LeftSidebar: React.FC<ToolbarProps>;
19
+ export declare const Toolbar: React.FC<ToolbarProps>;
20
+ export {};
21
+ //# sourceMappingURL=Toolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../../../../src/components/Whiteboard/Toolbar.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAyB,MAAM,SAAS,CAAC;AAE/D,UAAU,YAAY;IACpB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC;IACrD,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAID,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAwM7C,CAAC;AAGF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAob9C,CAAC;AAGF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAE1C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export interface WhiteboardProps {
3
+ roomId: string;
4
+ isAdmin?: boolean;
5
+ allowedUsers?: string[];
6
+ userId: string;
7
+ transparentBackground?: boolean;
8
+ videoStream?: MediaStream;
9
+ }
10
+ export declare const Whiteboard: React.FC<WhiteboardProps>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/Whiteboard/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAUjF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAwiBhD,CAAC"}