@sudobility/wildduck_client 2.3.0 → 2.3.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.md CHANGED
@@ -9,8 +9,10 @@ TypeScript client library for the WildDuck email API with React and React Native
9
9
 
10
10
  - ✅ **Complete Type Safety** - Full TypeScript support with comprehensive type definitions
11
11
  - ✅ **React Integration** - Built-in hooks using @tanstack/react-query for optimal data fetching
12
+ - ✅ **Real-time WebSocket Support** - Optional WebSocket connections for instant updates (v2.3.0+)
12
13
  - ✅ **Crypto Authentication** - SIWE (Sign-in with Ethereum) and traditional password authentication
13
14
  - ✅ **Comprehensive API** - User, mailbox, message, address, filter, and autoreply management
15
+ - ✅ **React Native Compatible** - Works seamlessly in both React JS and React Native (0.64+)
14
16
  - ✅ **Development Mode** - Mock data for testing without a live server
15
17
  - ✅ **Integration Tests** - Full test coverage with real WildDuck server testing
16
18
  - ✅ **Cloudflare Worker Support** - Optional worker URL configuration for proxying requests
@@ -216,6 +218,50 @@ See [docs/GAP_ANALYSIS.md](./docs/GAP_ANALYSIS.md) for a comprehensive breakdown
216
218
 
217
219
  For detailed documentation on all hooks, see [docs/HOOKS_DOCUMENTATION.md](./docs/HOOKS_DOCUMENTATION.md).
218
220
 
221
+ ## WebSocket Real-time Support
222
+
223
+ Since v2.3.0, all hooks support optional WebSocket connections for real-time updates.
224
+
225
+ ### Quick Start
226
+
227
+ ```tsx
228
+ import { WebSocketProvider } from '@sudobility/wildduck_client';
229
+
230
+ function App() {
231
+ return (
232
+ <WebSocketProvider
233
+ enabled={true}
234
+ config={{ url: 'ws://your-server.com/ws' }}
235
+ >
236
+ <YourApp />
237
+ </WebSocketProvider>
238
+ );
239
+ }
240
+
241
+ // Enable WebSocket in any hook
242
+ const { mailboxes } = useWildduckMailboxes(
243
+ networkClient,
244
+ config,
245
+ wildduckUserAuth,
246
+ false,
247
+ { enableWebSocket: true } // ← Enable real-time updates
248
+ );
249
+ ```
250
+
251
+ ### Features
252
+
253
+ - **Automatic reconnection** with exponential backoff
254
+ - **Per-user connections** - one WebSocket per authenticated user
255
+ - **Seamless fallback** to REST API if WebSocket unavailable
256
+ - **React Query integration** - automatic cache updates
257
+ - **Event-driven updates** - mailboxes, messages, filters, settings, autoreply
258
+
259
+ ### Documentation
260
+
261
+ - **[Complete WebSocket Guide](./docs/WEBSOCKET.md)** - Setup, configuration, API reference
262
+ - **[Usage Examples](./docs/examples/WEBSOCKET_EXAMPLES.md)** - Real-world code examples
263
+ - **[React Native Compatibility](./docs/REACT_NATIVE_COMPATIBILITY.md)** - Mobile support guide
264
+
219
265
  ## Development
220
266
 
221
267
  ### Setup
@@ -0,0 +1,26 @@
1
+ import React from "react";
2
+ import type { WildduckUserAuth } from "@sudobility/types";
3
+ import type { ConnectionState } from "../websocket/types";
4
+ export interface WebSocketStatusProps {
5
+ wildduckUserAuth: WildduckUserAuth | null;
6
+ showReconnectCount?: boolean;
7
+ showDetails?: boolean;
8
+ className?: string;
9
+ style?: React.CSSProperties;
10
+ renderStatus?: (state: ConnectionState, reconnectAttempt: number) => React.ReactNode;
11
+ }
12
+ export declare function WebSocketStatus({ wildduckUserAuth, showReconnectCount, showDetails, className, style, renderStatus, }: WebSocketStatusProps): React.ReactElement | null;
13
+ export interface WebSocketStatusBadgeProps {
14
+ wildduckUserAuth: WildduckUserAuth | null;
15
+ size?: number;
16
+ className?: string;
17
+ style?: React.CSSProperties;
18
+ }
19
+ export declare function WebSocketStatusBadge({ wildduckUserAuth, size, className, style, }: WebSocketStatusBadgeProps): React.ReactElement | null;
20
+ export interface WebSocketStatsProps {
21
+ wildduckUserAuth: WildduckUserAuth | null;
22
+ className?: string;
23
+ style?: React.CSSProperties;
24
+ }
25
+ export declare function WebSocketStats({ wildduckUserAuth, className, style, }: WebSocketStatsProps): React.ReactElement | null;
26
+ //# sourceMappingURL=WebSocketStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketStatus.d.ts","sourceRoot":"","sources":["../../src/components/WebSocketStatus.tsx"],"names":[],"mappings":"AAOA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IAEnC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAG1C,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAG7B,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAG5B,YAAY,CAAC,EAAE,CACb,KAAK,EAAE,eAAe,EACtB,gBAAgB,EAAE,MAAM,KACrB,KAAK,CAAC,SAAS,CAAC;CACtB;AAUD,wBAAgB,eAAe,CAAC,EAC9B,gBAAgB,EAChB,kBAAyB,EACzB,WAAmB,EACnB,SAAc,EACd,KAAK,EACL,YAAY,GACb,EAAE,oBAAoB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAwJlD;AAKD,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,gBAAgB,EAChB,IAAQ,EACR,SAAc,EACd,KAAK,GACN,EAAE,yBAAyB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAyDvD;AAKD,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,wBAAgB,cAAc,CAAC,EAC7B,gBAAgB,EAChB,SAAc,EACd,KAAK,GACN,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CA+DjD"}
@@ -0,0 +1,187 @@
1
+ import React, { useEffect, useState } from "react";
2
+ import { useWebSocket } from "../websocket/useWebSocket";
3
+ export function WebSocketStatus({ wildduckUserAuth, showReconnectCount = true, showDetails = false, className = "", style, renderStatus, }) {
4
+ const wsContext = useWebSocket();
5
+ const [connectionState, setConnectionState] = useState("disconnected");
6
+ const [reconnectAttempt, setReconnectAttempt] = useState(0);
7
+ const [reconnectDelay, setReconnectDelay] = useState(0);
8
+ const [lastError, setLastError] = useState(null);
9
+ useEffect(() => {
10
+ if (!wsContext || !wildduckUserAuth) {
11
+ return;
12
+ }
13
+ const client = wsContext.getClient(wildduckUserAuth);
14
+ if (!client) {
15
+ return;
16
+ }
17
+ setConnectionState(client.state);
18
+ setReconnectAttempt(client.reconnectAttempt);
19
+ const handleStateChange = (_oldState, newState) => {
20
+ setConnectionState(newState);
21
+ if (newState === "connected") {
22
+ setLastError(null);
23
+ setReconnectAttempt(0);
24
+ }
25
+ };
26
+ const handleReconnecting = (attempt, delay) => {
27
+ setReconnectAttempt(attempt);
28
+ setReconnectDelay(delay);
29
+ };
30
+ const handleError = (error) => {
31
+ setLastError(error.message);
32
+ };
33
+ client.on("stateChange", handleStateChange);
34
+ client.on("reconnecting", handleReconnecting);
35
+ client.on("error", handleError);
36
+ return () => {
37
+ client.off("stateChange", handleStateChange);
38
+ client.off("reconnecting", handleReconnecting);
39
+ client.off("error", handleError);
40
+ };
41
+ }, [wsContext, wildduckUserAuth]);
42
+ if (!wsContext || !wildduckUserAuth) {
43
+ return null;
44
+ }
45
+ if (renderStatus) {
46
+ return React.createElement(React.Fragment, null, renderStatus(connectionState, reconnectAttempt));
47
+ }
48
+ const statusConfig = {
49
+ disconnected: { color: "#6c757d", text: "Offline", emoji: "⚫" },
50
+ connecting: { color: "#ffc107", text: "Connecting...", emoji: "🟡" },
51
+ connected: { color: "#28a745", text: "Live", emoji: "🟢" },
52
+ reconnecting: {
53
+ color: "#fd7e14",
54
+ text: "Reconnecting...",
55
+ emoji: "🟠",
56
+ },
57
+ disconnecting: { color: "#dc3545", text: "Disconnecting...", emoji: "🔴" },
58
+ };
59
+ const { color, text } = statusConfig[connectionState];
60
+ return (React.createElement("div", { className: `websocket-status ${className}`, style: {
61
+ display: "flex",
62
+ alignItems: "center",
63
+ gap: "8px",
64
+ padding: "4px 12px",
65
+ borderRadius: "16px",
66
+ backgroundColor: "rgba(0, 0, 0, 0.05)",
67
+ fontSize: "14px",
68
+ ...style,
69
+ } },
70
+ React.createElement("span", { className: "status-dot", style: {
71
+ display: "inline-block",
72
+ width: "8px",
73
+ height: "8px",
74
+ borderRadius: "50%",
75
+ backgroundColor: color,
76
+ }, title: text }),
77
+ React.createElement("span", { className: "status-text", style: { fontWeight: 500 } }, text),
78
+ showReconnectCount &&
79
+ connectionState === "reconnecting" &&
80
+ reconnectAttempt > 0 && (React.createElement("span", { className: "reconnect-info", style: { fontSize: "12px", color: "#6c757d" } },
81
+ "(attempt ",
82
+ reconnectAttempt,
83
+ ")")),
84
+ showDetails && (React.createElement("div", { className: "status-details", style: {
85
+ fontSize: "12px",
86
+ color: "#6c757d",
87
+ marginLeft: "8px",
88
+ } },
89
+ connectionState === "reconnecting" && reconnectDelay > 0 && (React.createElement("span", null,
90
+ "Retry in ",
91
+ Math.round(reconnectDelay / 1000),
92
+ "s")),
93
+ lastError && connectionState !== "connected" && (React.createElement("span", { title: lastError }, " | Error"))))));
94
+ }
95
+ export function WebSocketStatusBadge({ wildduckUserAuth, size = 8, className = "", style, }) {
96
+ const wsContext = useWebSocket();
97
+ const [connectionState, setConnectionState] = useState("disconnected");
98
+ useEffect(() => {
99
+ if (!wsContext || !wildduckUserAuth) {
100
+ return;
101
+ }
102
+ const client = wsContext.getClient(wildduckUserAuth);
103
+ if (!client) {
104
+ return;
105
+ }
106
+ setConnectionState(client.state);
107
+ const handleStateChange = (_oldState, newState) => {
108
+ setConnectionState(newState);
109
+ };
110
+ client.on("stateChange", handleStateChange);
111
+ return () => {
112
+ client.off("stateChange", handleStateChange);
113
+ };
114
+ }, [wsContext, wildduckUserAuth]);
115
+ if (!wsContext || !wildduckUserAuth) {
116
+ return null;
117
+ }
118
+ const colorMap = {
119
+ disconnected: "#6c757d",
120
+ connecting: "#ffc107",
121
+ connected: "#28a745",
122
+ reconnecting: "#fd7e14",
123
+ disconnecting: "#dc3545",
124
+ };
125
+ return (React.createElement("span", { className: `websocket-status-badge ${className}`, style: {
126
+ display: "inline-block",
127
+ width: `${size}px`,
128
+ height: `${size}px`,
129
+ borderRadius: "50%",
130
+ backgroundColor: colorMap[connectionState],
131
+ ...style,
132
+ }, title: connectionState }));
133
+ }
134
+ export function WebSocketStats({ wildduckUserAuth, className = "", style, }) {
135
+ const wsContext = useWebSocket();
136
+ const [stats, setStats] = useState({
137
+ state: "disconnected",
138
+ reconnectAttempt: 0,
139
+ subscriptions: 0,
140
+ });
141
+ useEffect(() => {
142
+ if (!wsContext || !wildduckUserAuth) {
143
+ return;
144
+ }
145
+ const client = wsContext.getClient(wildduckUserAuth);
146
+ if (!client) {
147
+ return;
148
+ }
149
+ const updateStats = () => {
150
+ setStats({
151
+ state: client.state,
152
+ reconnectAttempt: client.reconnectAttempt,
153
+ subscriptions: client.subscriptions.size,
154
+ });
155
+ };
156
+ updateStats();
157
+ const handleStateChange = () => updateStats();
158
+ const handleReconnecting = () => updateStats();
159
+ client.on("stateChange", handleStateChange);
160
+ client.on("reconnecting", handleReconnecting);
161
+ return () => {
162
+ client.off("stateChange", handleStateChange);
163
+ client.off("reconnecting", handleReconnecting);
164
+ };
165
+ }, [wsContext, wildduckUserAuth]);
166
+ if (!wsContext || !wildduckUserAuth) {
167
+ return null;
168
+ }
169
+ return (React.createElement("div", { className: `websocket-stats ${className}`, style: {
170
+ padding: "8px",
171
+ fontSize: "12px",
172
+ fontFamily: "monospace",
173
+ backgroundColor: "rgba(0, 0, 0, 0.05)",
174
+ borderRadius: "4px",
175
+ ...style,
176
+ } },
177
+ React.createElement("div", null,
178
+ "State: ",
179
+ stats.state),
180
+ React.createElement("div", null,
181
+ "Subscriptions: ",
182
+ stats.subscriptions),
183
+ stats.reconnectAttempt > 0 && (React.createElement("div", null,
184
+ "Reconnect attempts: ",
185
+ stats.reconnectAttempt))));
186
+ }
187
+ //# sourceMappingURL=WebSocketStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketStatus.js","sourceRoot":"","sources":["../../src/components/WebSocketStatus.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { WebSocketStatus, WebSocketStatusBadge, WebSocketStats, type WebSocketStatusProps, type WebSocketStatusBadgeProps, type WebSocketStatsProps, } from "./WebSocketStatus";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { WebSocketStatus, WebSocketStatusBadge, WebSocketStats, } from "./WebSocketStatus";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,cAAc,GAIf,MAAM,mBAAmB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export * from "./utils";
2
2
  export * from "./hooks";
3
3
  export * from "./network";
4
4
  export * from "./websocket";
5
+ export * from "./components";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAG1B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAG1B,cAAc,aAAa,CAAC;AAG5B,cAAc,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -2,4 +2,5 @@ export * from "./utils";
2
2
  export * from "./hooks";
3
3
  export * from "./network";
4
4
  export * from "./websocket";
5
+ export * from "./components";
5
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAG1B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAG1B,cAAc,aAAa,CAAC;AAG5B,cAAc,cAAc,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/wildduck_client",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "React and React Native compatible client library for WildDuck email API with TypeScript support",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",