@royaltics/ui 1.9.9 → 2.0.1

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/README.socket.md CHANGED
@@ -1,126 +1,108 @@
1
1
  # @royaltics/ui - WebSocket Store & Hooks
2
2
 
3
- The WebSocket system has been refactored to use a global `Zustand` store, entirely removing the need for a `<WebSocketProviderContext>` React wrapper. This allows you to initialize socket connections anywhere in your application (even outside of React components) and strictly ties connections to the `socket.io-client` lifecycle.
3
+ The WebSocket system provides a global `Zustand` store for managing connections and subscriptions, removing the need for local state management or complex context providers. It's designed for high-performance SaaS applications with automatic resubscription and flexible configuration.
4
4
 
5
5
  ## 1. Global Socket Initialization
6
- To initialize your socket connection globally, call `initSocketOptions`. You should only do this once, typically in your application's entry file or authentication hook.
6
+
7
+ ### Via `SocketProvider` (Recommended)
8
+ The `SocketProvider` is the most scalable way to initialize the socket in React. It automatically handles connection lifecycle based on props.
9
+
10
+ ```tsx
11
+ import { SocketProvider } from '@royaltics/ui/socket';
12
+
13
+ export const App = ({ userToken }) => {
14
+ return (
15
+ <SocketProvider
16
+ socketUrl="https://api.example.com"
17
+ token={userToken}
18
+ path="/ws" // Optional, default: /ws
19
+ transports={['websocket']} // Optional, default: ['websocket']
20
+ >
21
+ <MainLayout />
22
+ </SocketProvider>
23
+ );
24
+ };
25
+ ```
26
+
27
+ ### Via `initSocketOptions` (Imperative)
28
+ If you need to initialize the socket outside of a React component (e.g., in a service or interceptor):
7
29
 
8
30
  ```tsx
9
- import { initSocketOptions } from '@royaltics/ui/hooks';
31
+ import { initSocketOptions } from '@royaltics/ui/socket';
10
32
 
11
- // Call this when the user logs in or app initializes
12
33
  initSocketOptions({
13
34
  socketUrl: 'https://socket.example.com',
14
35
  token: 'YOUR_AUTH_TOKEN_HERE',
15
- options: {
16
- // Standard socket.io ManagerOptions & SocketOptions
17
- reconnection: true,
18
- reconnectionAttempts: 5,
19
- },
20
- onAuthError: (err) => {
21
- // Triggered when socket.io 'connect_error' is fired.
22
- // You can implement token refreshing mechanisms and then re-call `initSocketOptions({ ...newConfig })`
23
- console.error("Socket authentication failed", err);
24
- }
36
+ path: '/ws',
37
+ onAuthError: (err) => console.error("Socket Auth failed", err)
25
38
  });
26
39
  ```
27
- *Note: If you call `initSocketOptions` with an empty `socketUrl` or `token`, it will automatically disconnect the socket.*
28
40
 
29
- ## 2. Reading Global Socket State
30
- You can read the socket connection status directly using the `useSocketStore` hook anywhere in your component tree.
41
+ ## 2. Managing Subscriptions
42
+
43
+ The system features an **Auto-Resubscription** engine. When you subscribe to a topic, the store keeps track of it. If the connection drops and reconnects, the store will automatically re-emit the subscription events.
44
+
45
+ ### `useSocketSubscription`
46
+ Designed for NestJS-compatible @SubscribeMessage handlers. It manages the full lifecycle (subscribe on mount, unsubscribe on unmount).
31
47
 
32
48
  ```tsx
33
- import { useSocketState } from '@royaltics/ui/socket';
49
+ import { useSocketSubscription } from '@royaltics/ui/socket';
34
50
 
35
- export const ConnectionStatus = () => {
36
- // You can read the status ('connected', 'disconnected', 'error', 'connecting')
37
- const { status, isConnected } = useSocketState();
51
+ export const ChatRoom = ({ roomId }) => {
52
+ // Sends { rooms: [roomId] } to 'subscribe' event
53
+ useSocketSubscription(`room-${roomId}`, [roomId]);
38
54
 
39
- return <div>Socket is {isConnected ? 'Online' : 'Offline'}</div>
55
+ return <div>Room: {roomId}</div>;
40
56
  }
41
57
  ```
42
58
 
43
- ## 3. Emitting Events
44
- The store gives you direct access to the `emit` function, completely sidestepping standard React context constraints.
59
+ ## 3. Emitting & Listening
60
+
61
+ ### `useSocketState`
62
+ Read connection status and access the raw `emit` function.
45
63
 
46
64
  ```tsx
47
65
  import { useSocketState } from '@royaltics/ui/socket';
48
66
 
49
67
  export const ChatInput = () => {
50
- // Destructure what you need!
51
- const { emit, isConnected } = useSocketState();
68
+ const { emit, isConnected, status } = useSocketState();
52
69
 
53
70
  const sendMessage = () => {
54
71
  if (!isConnected) return;
55
- emit('chat:message', { text: 'Hello, world!' });
72
+ emit('chat:message', { text: 'Hello!' });
56
73
  };
57
74
 
58
- return <button onClick={sendMessage}>Send</button>;
75
+ return <button disabled={status !== 'connected'} onClick={sendMessage}>Send</button>;
59
76
  };
60
77
  ```
61
78
 
62
- ### `setToken(token)`
63
- If you only need to update the authentication token without changing the `socketUrl` or other options, you can use `setToken`. This will automatically disconnect the current socket and reconnect with the new token.
64
-
65
- ```tsx
66
- import { useSocketState } from '@royaltics/ui/socket';
67
-
68
- export const ProfileSettings = () => {
69
- const { setToken } = useSocketState();
70
-
71
- const handleSessionRefresh = (newToken: string) => {
72
- setToken(newToken);
73
- };
74
-
75
- return <button onClick={() => handleSessionRefresh('NEW_TOKEN')}>Refresh Socket Token</button>;
76
- };
77
- ```
78
-
79
- ## 4. Tree-Shaking & Bundle Optimization
80
- To ensure that `socket.io-client` is only bundled when you actually use WebSockets, the socket logic is isolated in `@royaltics/ui/socket`.
81
-
82
- > [!IMPORTANT]
83
- > Do **NOT** import socket hooks from `@royaltics/ui/hooks`. Always use the dedicated entry point:
84
- > `import { useSocketState } from '@royaltics/ui/socket';`
85
-
86
- ## 5. Listening to Events
87
- We provide two tailored hooks for listening to specific Socket.io events and managing standard React lifecycles.
88
-
89
- ### `useSocketEvent`
90
- Used for managing a single distinct event listener.
79
+ ### `useSocketEvent`
80
+ Handle specific incoming events.
91
81
 
92
82
  ```tsx
93
83
  import { useSocketEvent } from '@royaltics/ui/socket';
94
84
 
95
85
  export const NotificationToast = () => {
96
- // Automatically binds/unbinds on mount/unmount
97
86
  useSocketEvent('notification:new', (data) => {
98
- console.log('Got new notification', data);
87
+ console.log('New notification:', data);
99
88
  });
100
89
 
101
90
  return null;
102
91
  }
103
92
  ```
104
93
 
105
- ### `useSocketEvents`
106
- Used when a component needs to mount a dense array of closely related events. You can easily toggle individual events using the `enabled` flag.
94
+ ## 4. Advanced Configuration
95
+
96
+ ### `setToken(token)`
97
+ Update the authentication token without resetting the entire configuration.
107
98
 
108
99
  ```tsx
109
- import { useSocketEvents } from '@royaltics/ui/socket';
110
-
111
- export const ChatRoom = () => {
112
- useSocketEvents([
113
- {
114
- event: 'chat:message',
115
- onData: (message) => console.log('New Message:', message)
116
- },
117
- {
118
- event: 'chat:typing',
119
- enabled: false, // You can toggle this dynamically!
120
- onData: (user) => console.log(`${user} is typing...`)
121
- }
122
- ]);
123
-
124
- return <div>Chat UI</div>
125
- }
100
+ const { setToken } = useSocketState();
101
+ setToken('NEW_JWT_TOKEN');
126
102
  ```
103
+
104
+ ### SaaS Scalability
105
+ The store allows overriding the subscription event name (default: `'subscribe'`) and handles multi-transport fallbacks if needed.
106
+
107
+ > [!TIP]
108
+ > Always prefer `SocketProvider` for React applications to ensure the socket state is strictly synced with your authentication state.
@@ -1,20 +1,31 @@
1
1
  import { Socket, ManagerOptions, SocketOptions } from 'socket.io-client';
2
2
  export type SocketStatus = 'disconnected' | 'connecting' | 'connected' | 'error';
3
+ export interface SubscriptionData {
4
+ rooms: string[];
5
+ [key: string]: any;
6
+ }
7
+ export interface SocketStoreConfig {
8
+ url: string;
9
+ token: string;
10
+ path?: string;
11
+ transports?: ('websocket' | 'polling')[];
12
+ options?: Partial<ManagerOptions & SocketOptions>;
13
+ onAuthError?: (err: Error) => void;
14
+ subscriptionEvent?: string;
15
+ }
3
16
  export interface SocketStoreState {
4
17
  socket: Socket | null;
5
18
  status: SocketStatus;
6
19
  isConnected: boolean;
7
- config: {
8
- url: string;
9
- token: string;
10
- options?: Partial<ManagerOptions & SocketOptions>;
11
- onAuthError?: (err: Error) => void;
12
- } | null;
13
- connect: (url: string, token: string, extraOptions?: Partial<ManagerOptions & SocketOptions>, onAuthError?: (err: Error) => void) => void;
20
+ config: SocketStoreConfig | null;
21
+ subscriptions: Map<string, SubscriptionData>;
22
+ connect: (config: SocketStoreConfig) => void;
14
23
  disconnect: () => void;
15
24
  setToken: (token: string) => void;
16
25
  emit: (event: string, ...args: any[]) => void;
17
26
  off: (event: string, callback?: (...args: any[]) => void) => void;
27
+ subscribe: (id: string, data: SubscriptionData, event?: string) => void;
28
+ unsubscribe: (id: string, event?: string) => void;
18
29
  }
19
30
  export interface SocketHookEvent<T = any> {
20
31
  event: string;
@@ -1 +1 @@
1
- {"version":3,"file":"socket-store.d.ts","sourceRoot":"","sources":["../../../src/core/socket/socket-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAM,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAEjF,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC;QAClD,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;KACtC,GAAG,IAAI,CAAC;IACT,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC;IAC1I,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC9C,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;CACrE;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,8CAgGrB,CAAC"}
1
+ {"version":3,"file":"socket-store.d.ts","sourceRoot":"","sources":["../../../src/core/socket/socket-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAM,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAEjF,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C,OAAO,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC9C,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;IAClE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,8CA6HrB,CAAC"}
@@ -5,31 +5,38 @@ export const socketStore = createStore((set, get) => ({
5
5
  status: 'disconnected',
6
6
  isConnected: false,
7
7
  config: null,
8
- connect: (url, token, extraOptions, onAuthError) => {
9
- let { socket } = get();
10
- // Prevent reconnecting if already connected to the same instance/token
8
+ subscriptions: new Map(),
9
+ connect: (config) => {
10
+ const { url, token, path = '/ws', transports = ['websocket'], options, onAuthError, subscriptionEvent = 'subscribe' } = config;
11
+ let { socket, subscriptions } = get();
12
+ // Prevent reconnecting if already connected to the same instance/token/path
11
13
  // @ts-ignore: uri is private but needed for caching check
12
- if (socket?.connected && socket.auth && socket.auth.token === token && socket.io.uri === url)
14
+ if (socket?.connected && socket.auth && socket.auth.token === token && socket.io.uri === url && socket.io.opts.path === path)
13
15
  return;
14
16
  // Clean up previous instance
15
17
  if (socket) {
16
18
  socket.removeAllListeners();
17
19
  socket.disconnect();
18
20
  }
19
- set({ status: 'connecting' });
21
+ set({ status: 'connecting', config });
20
22
  const newSocket = io(url, {
21
23
  auth: { token },
22
- path: "/ws",
23
- transports: ['websocket'],
24
+ path,
25
+ transports,
24
26
  reconnection: true,
25
27
  reconnectionDelay: 3000,
26
28
  reconnectionAttempts: 5,
27
29
  timeout: 10000,
28
30
  autoConnect: true,
29
- ...extraOptions
31
+ ...options
30
32
  });
31
33
  newSocket.on('connect', () => {
34
+ console.log('[Socket.IO] Connected to:', url);
32
35
  set({ status: 'connected', isConnected: true });
36
+ // Auto-resubscribe to all active topics
37
+ subscriptions.forEach((data) => {
38
+ newSocket.emit(subscriptionEvent, data);
39
+ });
33
40
  });
34
41
  newSocket.on('disconnect', (reason) => {
35
42
  console.log('[Socket.IO] Disconnected:', reason);
@@ -49,12 +56,12 @@ export const socketStore = createStore((set, get) => ({
49
56
  console.error('[Socket.IO] Socket error:', error);
50
57
  set({ status: 'error', isConnected: false });
51
58
  });
52
- set({ socket: newSocket, config: { url, token, options: extraOptions, onAuthError } });
59
+ set({ socket: newSocket });
53
60
  },
54
61
  setToken: (token) => {
55
62
  const { config, connect } = get();
56
63
  if (config && config.token !== token) {
57
- connect(config.url, token, config.options, config.onAuthError);
64
+ connect({ ...config, token });
58
65
  }
59
66
  },
60
67
  disconnect: () => {
@@ -84,6 +91,23 @@ export const socketStore = createStore((set, get) => ({
84
91
  socket.off(event);
85
92
  }
86
93
  }
94
+ },
95
+ subscribe: (id, data, event) => {
96
+ const { socket, subscriptions, config } = get();
97
+ const eventName = event || config?.subscriptionEvent || 'subscribe';
98
+ subscriptions.set(id, data);
99
+ if (socket?.connected) {
100
+ socket.emit(eventName, data);
101
+ }
102
+ },
103
+ unsubscribe: (id, event) => {
104
+ const { socket, subscriptions, config } = get();
105
+ const eventName = event || config?.subscriptionEvent || 'unsubscribe';
106
+ const data = subscriptions.get(id);
107
+ if (data && socket?.connected) {
108
+ socket.emit(eventName, data);
109
+ }
110
+ subscriptions.delete(id);
87
111
  }
88
112
  }));
89
113
  //# sourceMappingURL=socket-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"socket-store.js","sourceRoot":"","sources":["../../../src/core/socket/socket-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket-store.js","sourceRoot":"","sources":["../../../src/core/socket/socket-store.ts"],"names":[],"mappings":"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"}
@@ -3,11 +3,23 @@ import { SocketHookEvent } from './socket-store.js';
3
3
  export interface SocketOptionsProps {
4
4
  socketUrl?: string;
5
5
  token?: string;
6
+ path?: string;
7
+ transports?: ('websocket' | 'polling')[];
6
8
  options?: Partial<ManagerOptions & SocketOptions>;
9
+ subscriptionEvent?: string;
7
10
  onAuthError?: (error: Error) => void;
8
11
  }
9
- export declare const initSocketOptions: ({ socketUrl, token, options, onAuthError }: SocketOptionsProps) => void;
12
+ export declare const initSocketOptions: ({ socketUrl, token, path, transports, options, onAuthError, subscriptionEvent }: SocketOptionsProps) => void;
10
13
  export declare const useSocketState: () => import("./socket-store.js").SocketStoreState;
14
+ export declare const SocketProvider: ({ children, ...props }: SocketOptionsProps & {
15
+ children: React.ReactNode;
16
+ }) => import("react").ReactNode;
11
17
  export declare const useSocketEvent: <T = any>(event: string, callback: (...args: T[]) => void) => void;
12
18
  export declare const useSocketEvents: (events: SocketHookEvent[]) => void;
19
+ /**
20
+ * Hook to manage a socket subscription lifecycle.
21
+ * Automatically sends 'subscribe' on mount and 'unsubscribe' on unmount.
22
+ * Compatible with NestJS @SubscribeMessage('subscribe')
23
+ */
24
+ export declare const useSocketSubscription: (id: string, rooms: string[], extraData?: Record<string, any>, subscriptionEvent?: string) => void;
13
25
  //# sourceMappingURL=useSocketState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSocketState.d.ts","sourceRoot":"","sources":["../../../src/core/socket/useSocketState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAe,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACxC;AAED,eAAO,MAAM,iBAAiB,GAAI,4CAA4C,kBAAkB,SAM/F,CAAC;AAEF,eAAO,MAAM,cAAc,oDAE1B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,CAAC,GAAG,GAAG,EAAE,OAAO,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,SAUtF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ,eAAe,EAAE,SAkBxD,CAAC"}
1
+ {"version":3,"file":"useSocketState.d.ts","sourceRoot":"","sources":["../../../src/core/socket/useSocketState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAe,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACxC;AAED,eAAO,MAAM,iBAAiB,GAAI,iFAAiF,kBAAkB,SAcpI,CAAC;AAEF,eAAO,MAAM,cAAc,oDAE1B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,wBAAwB,kBAAkB,GAAG;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,8BAMxG,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,CAAC,GAAG,GAAG,EAAE,OAAO,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,SAUtF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ,eAAe,EAAE,SAkBxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,IAAI,MAAM,EAAE,OAAO,MAAM,EAAE,EAAE,YAAY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,oBAAoB,MAAM,SAW7H,CAAC"}
@@ -1,9 +1,17 @@
1
1
  import { useEffect } from 'react';
2
2
  import { useStore } from 'zustand';
3
3
  import { socketStore } from './socket-store.js';
4
- export const initSocketOptions = ({ socketUrl, token, options, onAuthError }) => {
4
+ export const initSocketOptions = ({ socketUrl, token, path, transports, options, onAuthError, subscriptionEvent }) => {
5
5
  if (socketUrl && token) {
6
- socketStore.getState().connect(socketUrl, token, options, onAuthError);
6
+ socketStore.getState().connect({
7
+ url: socketUrl,
8
+ token,
9
+ path,
10
+ transports,
11
+ options,
12
+ onAuthError,
13
+ subscriptionEvent
14
+ });
7
15
  }
8
16
  else {
9
17
  socketStore.getState().disconnect();
@@ -12,6 +20,12 @@ export const initSocketOptions = ({ socketUrl, token, options, onAuthError }) =>
12
20
  export const useSocketState = () => {
13
21
  return useStore(socketStore);
14
22
  };
23
+ export const SocketProvider = ({ children, ...props }) => {
24
+ useEffect(() => {
25
+ initSocketOptions(props);
26
+ }, [props.socketUrl, props.token, props.path, JSON.stringify(props.transports), JSON.stringify(props.options)]);
27
+ return children;
28
+ };
15
29
  export const useSocketEvent = (event, callback) => {
16
30
  const socket = useSocketState().socket;
17
31
  useEffect(() => {
@@ -39,4 +53,19 @@ export const useSocketEvents = (events) => {
39
53
  };
40
54
  }, [socket, events]);
41
55
  };
56
+ /**
57
+ * Hook to manage a socket subscription lifecycle.
58
+ * Automatically sends 'subscribe' on mount and 'unsubscribe' on unmount.
59
+ * Compatible with NestJS @SubscribeMessage('subscribe')
60
+ */
61
+ export const useSocketSubscription = (id, rooms, extraData, subscriptionEvent) => {
62
+ const { subscribe, unsubscribe, isConnected } = useSocketState();
63
+ useEffect(() => {
64
+ const data = { rooms, ...extraData };
65
+ subscribe(id, data, subscriptionEvent);
66
+ return () => {
67
+ unsubscribe(id, subscriptionEvent);
68
+ };
69
+ }, [id, JSON.stringify(rooms), JSON.stringify(extraData), isConnected, subscriptionEvent]);
70
+ };
42
71
  //# sourceMappingURL=useSocketState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSocketState.js","sourceRoot":"","sources":["../../../src/core/socket/useSocketState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AASjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAsB,EAAE,EAAE;IAChG,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACrB,WAAW,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACJ,WAAW,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IAC/B,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAU,KAAa,EAAE,QAAgC,EAAE,EAAE;IACvF,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,MAAM,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3B,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAyB,EAAE,EAAE;IACzD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,MAAM,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;QAE7D,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YACvC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACR,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;gBACvC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACzB,CAAC,CAAC"}
1
+ {"version":3,"file":"useSocketState.js","sourceRoot":"","sources":["../../../src/core/socket/useSocketState.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- interface ReducerDataActions<T> {
2
- __reset?: boolean | any;
3
- [key: string]: any;
4
- }
1
+ type ReducerDataActions<T> = Partial<T> & {
2
+ __reset?: boolean | Partial<T>;
3
+ };
5
4
  export declare const Reducer: <T>(state: T, data: ReducerDataActions<T>) => T;
6
5
  export {};
7
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reducers/index.ts"],"names":[],"mappings":"AAAA,UAAU,kBAAkB,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,kBAAkB,CAAC,CAAC,CAAC,KAAG,CAMlE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reducers/index.ts"],"names":[],"mappings":"AAAA,KAAK,kBAAkB,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG;IACtC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,kBAAkB,CAAC,CAAC,CAAC,KAAG,CAOlE,CAAC"}
@@ -1,7 +1,10 @@
1
1
  export const Reducer = (state, data) => {
2
+ if (data === undefined)
3
+ return undefined;
4
+ if (data === null)
5
+ return null;
2
6
  if (data.__reset) {
3
- //delete data._new;
4
- return typeof data.__reset === 'boolean' ? { __reset: undefined } : { ...data.__reset };
7
+ return typeof data.__reset === 'boolean' ? { __reset: undefined } : data.__reset;
5
8
  }
6
9
  return { ...state, ...data };
7
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reducers/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,KAAQ,EAAE,IAA2B,EAAK,EAAE;IACnE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,mBAAmB;QACnB,OAAO,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAO,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAO,CAAC;IACtG,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,EAAO,CAAC;AACtC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reducers/index.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,KAAQ,EAAE,IAA2B,EAAK,EAAE;IACnE,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAc,CAAC;IAC9C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAS,CAAC;IACpC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAY,CAAC;IAC/F,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,EAAO,CAAC;AACtC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@royaltics/ui",
3
- "version": "1.9.9",
3
+ "version": "2.0.1",
4
4
  "private": false,
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",