@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.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +106 -91
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +113 -90
- package/dist/index.js.map +1 -1
- package/dist/src/components/Whiteboard/index.d.ts.map +1 -1
- package/dist/src/context/WhiteboardContext.d.ts.map +1 -1
- package/dist/src/utils/socket-utility.d.ts +6 -1
- package/dist/src/utils/socket-utility.d.ts.map +1 -1
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/socket-utility.esm.js +168 -0
- package/dist/utils/socket-utility.esm.js.map +1 -0
- package/dist/utils/socket-utility.js +177 -0
- package/dist/utils/socket-utility.js.map +1 -0
- package/dist/utils/src/components/Shapes/Arrow.d.ts +11 -0
- package/dist/utils/src/components/Shapes/Arrow.d.ts.map +1 -0
- package/dist/utils/src/components/Shapes/Ellipse.d.ts +11 -0
- package/dist/utils/src/components/Shapes/Ellipse.d.ts.map +1 -0
- package/dist/utils/src/components/Shapes/ErasedShape.d.ts +11 -0
- package/dist/utils/src/components/Shapes/ErasedShape.d.ts.map +1 -0
- package/dist/utils/src/components/Shapes/FreehandDrawing.d.ts +11 -0
- package/dist/utils/src/components/Shapes/FreehandDrawing.d.ts.map +1 -0
- package/dist/utils/src/components/Shapes/Line.d.ts +11 -0
- package/dist/utils/src/components/Shapes/Line.d.ts.map +1 -0
- package/dist/utils/src/components/Shapes/Rectangle.d.ts +11 -0
- package/dist/utils/src/components/Shapes/Rectangle.d.ts.map +1 -0
- package/dist/utils/src/components/Whiteboard/Board.d.ts +15 -0
- package/dist/utils/src/components/Whiteboard/Board.d.ts.map +1 -0
- package/dist/utils/src/components/Whiteboard/Toolbar.d.ts +21 -0
- package/dist/utils/src/components/Whiteboard/Toolbar.d.ts.map +1 -0
- package/dist/utils/src/components/Whiteboard/index.d.ts +11 -0
- package/dist/utils/src/components/Whiteboard/index.d.ts.map +1 -0
- package/dist/utils/src/context/WhiteboardContext.d.ts +128 -0
- package/dist/utils/src/context/WhiteboardContext.d.ts.map +1 -0
- package/dist/utils/src/hooks/useCapture.d.ts +4 -0
- package/dist/utils/src/hooks/useCapture.d.ts.map +1 -0
- package/dist/utils/src/hooks/useCollaborativeWhiteboard.d.ts +27 -0
- package/dist/utils/src/hooks/useCollaborativeWhiteboard.d.ts.map +1 -0
- package/dist/utils/src/lib/utils.d.ts +3 -0
- package/dist/utils/src/lib/utils.d.ts.map +1 -0
- package/dist/utils/src/types/index.d.ts +123 -0
- package/dist/utils/src/types/index.d.ts.map +1 -0
- package/dist/utils/src/utils/compression.d.ts +14 -0
- package/dist/utils/src/utils/compression.d.ts.map +1 -0
- package/dist/utils/src/utils/socket-utility.d.ts +11 -0
- package/dist/utils/src/utils/socket-utility.d.ts.map +1 -0
- 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,
|
|
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":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAEhF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAgB,MAAM,UAAU,CAAC;AAEhI,KAAK,gBAAgB,GACjB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,uBAAuB,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,2BAA2B,CAAC;IAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAAC,mBAAmB,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAwhB7I,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3C,kBAAkB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IACpD,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;IAC/C,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAClC,cAAc,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,KAAK,IAAI,CAAC;IACvE,cAAc,EAAE,CAAC,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9E,gBAAgB,EAAE,CAAC,eAAe,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAIF,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAogB7F,CAAC;AAEF,eAAO,MAAM,aAAa,6BAMzB,CAAC"}
|
|
@@ -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":"
|
|
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":"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"}
|
|
@@ -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"}
|