@sudobility/wildduck_client 2.1.3 → 2.3.0
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/hooks/useWildduckAutoReply.d.ts +5 -2
- package/dist/hooks/useWildduckAutoReply.d.ts.map +1 -1
- package/dist/hooks/useWildduckAutoReply.js +84 -3
- package/dist/hooks/useWildduckAutoReply.js.map +1 -1
- package/dist/hooks/useWildduckFilters.d.ts +5 -2
- package/dist/hooks/useWildduckFilters.d.ts.map +1 -1
- package/dist/hooks/useWildduckFilters.js +100 -3
- package/dist/hooks/useWildduckFilters.js.map +1 -1
- package/dist/hooks/useWildduckMailboxes.d.ts +5 -2
- package/dist/hooks/useWildduckMailboxes.d.ts.map +1 -1
- package/dist/hooks/useWildduckMailboxes.js +102 -3
- package/dist/hooks/useWildduckMailboxes.js.map +1 -1
- package/dist/hooks/useWildduckMessages.d.ts +4 -1
- package/dist/hooks/useWildduckMessages.d.ts.map +1 -1
- package/dist/hooks/useWildduckMessages.js +148 -3
- package/dist/hooks/useWildduckMessages.js.map +1 -1
- package/dist/hooks/useWildduckSettings.d.ts +10 -7
- package/dist/hooks/useWildduckSettings.d.ts.map +1 -1
- package/dist/hooks/useWildduckSettings.js +105 -34
- package/dist/hooks/useWildduckSettings.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/network/wildduck-client.d.ts +3 -3
- package/dist/network/wildduck-client.d.ts.map +1 -1
- package/dist/network/wildduck-client.js +12 -6
- package/dist/network/wildduck-client.js.map +1 -1
- package/dist/websocket/client.d.ts +50 -0
- package/dist/websocket/client.d.ts.map +1 -0
- package/dist/websocket/client.js +370 -0
- package/dist/websocket/client.js.map +1 -0
- package/dist/websocket/constants.d.ts +82 -0
- package/dist/websocket/constants.d.ts.map +1 -0
- package/dist/websocket/constants.js +82 -0
- package/dist/websocket/constants.js.map +1 -0
- package/dist/websocket/index.d.ts +8 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +6 -0
- package/dist/websocket/index.js.map +1 -0
- package/dist/websocket/protocol.d.ts +18 -0
- package/dist/websocket/protocol.d.ts.map +1 -0
- package/dist/websocket/protocol.js +165 -0
- package/dist/websocket/protocol.js.map +1 -0
- package/dist/websocket/provider.d.ts +20 -0
- package/dist/websocket/provider.d.ts.map +1 -0
- package/dist/websocket/provider.js +129 -0
- package/dist/websocket/provider.js.map +1 -0
- package/dist/websocket/types.d.ts +111 -0
- package/dist/websocket/types.d.ts.map +1 -0
- package/dist/websocket/types.js +8 -0
- package/dist/websocket/types.js.map +1 -0
- package/dist/websocket/useWebSocket.d.ts +3 -0
- package/dist/websocket/useWebSocket.d.ts.map +1 -0
- package/dist/websocket/useWebSocket.js +5 -0
- package/dist/websocket/useWebSocket.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export declare const DEFAULT_CONFIG: {
|
|
2
|
+
readonly reconnect: true;
|
|
3
|
+
readonly reconnectDelay: 1000;
|
|
4
|
+
readonly maxReconnectDelay: 32000;
|
|
5
|
+
readonly reconnectAttempts: 0;
|
|
6
|
+
readonly autoSubscribe: true;
|
|
7
|
+
readonly debug: false;
|
|
8
|
+
readonly pingInterval: 0;
|
|
9
|
+
readonly pongTimeout: 5000;
|
|
10
|
+
};
|
|
11
|
+
export declare const CLOSE_CODES: {
|
|
12
|
+
readonly NORMAL: 1000;
|
|
13
|
+
readonly GOING_AWAY: 1001;
|
|
14
|
+
readonly PROTOCOL_ERROR: 1002;
|
|
15
|
+
readonly UNSUPPORTED_DATA: 1003;
|
|
16
|
+
readonly NO_STATUS: 1005;
|
|
17
|
+
readonly ABNORMAL: 1006;
|
|
18
|
+
readonly INVALID_DATA: 1007;
|
|
19
|
+
readonly POLICY_VIOLATION: 1008;
|
|
20
|
+
readonly MESSAGE_TOO_BIG: 1009;
|
|
21
|
+
readonly MANDATORY_EXTENSION: 1010;
|
|
22
|
+
readonly INTERNAL_ERROR: 1011;
|
|
23
|
+
readonly SERVICE_RESTART: 1012;
|
|
24
|
+
readonly TRY_AGAIN_LATER: 1013;
|
|
25
|
+
readonly BAD_GATEWAY: 1014;
|
|
26
|
+
readonly TLS_HANDSHAKE: 1015;
|
|
27
|
+
};
|
|
28
|
+
export declare const CUSTOM_CLOSE_CODES: {
|
|
29
|
+
readonly USER_DISCONNECT: 4000;
|
|
30
|
+
readonly TOKEN_EXPIRED: 4001;
|
|
31
|
+
readonly AUTH_FAILED: 4002;
|
|
32
|
+
readonly MAX_RECONNECTS: 4003;
|
|
33
|
+
readonly SERVER_DISCONNECT: 4004;
|
|
34
|
+
};
|
|
35
|
+
export declare const DISCONNECT_REASONS: {
|
|
36
|
+
readonly SERVER_SHUTDOWN: "server_shutdown";
|
|
37
|
+
readonly TIMEOUT: "timeout";
|
|
38
|
+
readonly TOKEN_EXPIRED: "token_expired";
|
|
39
|
+
};
|
|
40
|
+
export declare const MESSAGE_CODES: {
|
|
41
|
+
readonly OK: 200;
|
|
42
|
+
readonly BAD_REQUEST: 400;
|
|
43
|
+
readonly UNAUTHORIZED: 401;
|
|
44
|
+
readonly FORBIDDEN: 403;
|
|
45
|
+
readonly NOT_FOUND: 404;
|
|
46
|
+
readonly INTERNAL_ERROR: 500;
|
|
47
|
+
readonly SERVICE_UNAVAILABLE: 503;
|
|
48
|
+
};
|
|
49
|
+
export declare const RECONNECT_BACKOFF_MULTIPLIER = 2;
|
|
50
|
+
export declare const CONNECTION_TIMEOUT = 10000;
|
|
51
|
+
export declare const MESSAGE_TIMEOUT = 5000;
|
|
52
|
+
export declare const CLEANUP_DELAY = 5000;
|
|
53
|
+
export declare const CHANNELS: {
|
|
54
|
+
readonly MAILBOXES: "mailboxes";
|
|
55
|
+
readonly MESSAGES: "messages";
|
|
56
|
+
readonly SETTINGS: "settings";
|
|
57
|
+
readonly FILTERS: "filters";
|
|
58
|
+
readonly AUTOREPLY: "autoreply";
|
|
59
|
+
};
|
|
60
|
+
export declare const EVENTS: {
|
|
61
|
+
readonly CONNECTED: "connected";
|
|
62
|
+
readonly DISCONNECTED: "disconnected";
|
|
63
|
+
readonly RECONNECTING: "reconnecting";
|
|
64
|
+
readonly ERROR: "error";
|
|
65
|
+
readonly DATA: "data";
|
|
66
|
+
readonly UPDATE: "update";
|
|
67
|
+
readonly STATE_CHANGE: "stateChange";
|
|
68
|
+
};
|
|
69
|
+
export declare const MESSAGE_TYPES: {
|
|
70
|
+
readonly SUBSCRIBE: "subscribe";
|
|
71
|
+
readonly UNSUBSCRIBE: "unsubscribe";
|
|
72
|
+
readonly FETCH: "fetch";
|
|
73
|
+
readonly DATA: "data";
|
|
74
|
+
readonly UPDATE: "update";
|
|
75
|
+
readonly DISCONNECT: "disconnect";
|
|
76
|
+
};
|
|
77
|
+
export declare const UPDATE_EVENTS: {
|
|
78
|
+
readonly CREATED: "created";
|
|
79
|
+
readonly UPDATED: "updated";
|
|
80
|
+
readonly DELETED: "deleted";
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/websocket/constants.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,cAAc;;;;;;;;;CAwBjB,CAAC;AAMX,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;CA6Cd,CAAC;AAKX,eAAO,MAAM,kBAAkB;;;;;;CAerB,CAAC;AAKX,eAAO,MAAM,kBAAkB;;;;CASrB,CAAC;AAKX,eAAO,MAAM,aAAa;;;;;;;;CAqBhB,CAAC;AAKX,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAK9C,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAKxC,eAAO,MAAM,eAAe,OAAO,CAAC;AAKpC,eAAO,MAAM,aAAa,OAAO,CAAC;AAKlC,eAAO,MAAM,QAAQ;;;;;;CAMX,CAAC;AAKX,eAAO,MAAM,MAAM;;;;;;;;CAQT,CAAC;AAKX,eAAO,MAAM,aAAa;;;;;;;CAUhB,CAAC;AAKX,eAAO,MAAM,aAAa;;;;CAIhB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export const DEFAULT_CONFIG = {
|
|
2
|
+
reconnect: true,
|
|
3
|
+
reconnectDelay: 1000,
|
|
4
|
+
maxReconnectDelay: 32000,
|
|
5
|
+
reconnectAttempts: 0,
|
|
6
|
+
autoSubscribe: true,
|
|
7
|
+
debug: false,
|
|
8
|
+
pingInterval: 0,
|
|
9
|
+
pongTimeout: 5000,
|
|
10
|
+
};
|
|
11
|
+
export const CLOSE_CODES = {
|
|
12
|
+
NORMAL: 1000,
|
|
13
|
+
GOING_AWAY: 1001,
|
|
14
|
+
PROTOCOL_ERROR: 1002,
|
|
15
|
+
UNSUPPORTED_DATA: 1003,
|
|
16
|
+
NO_STATUS: 1005,
|
|
17
|
+
ABNORMAL: 1006,
|
|
18
|
+
INVALID_DATA: 1007,
|
|
19
|
+
POLICY_VIOLATION: 1008,
|
|
20
|
+
MESSAGE_TOO_BIG: 1009,
|
|
21
|
+
MANDATORY_EXTENSION: 1010,
|
|
22
|
+
INTERNAL_ERROR: 1011,
|
|
23
|
+
SERVICE_RESTART: 1012,
|
|
24
|
+
TRY_AGAIN_LATER: 1013,
|
|
25
|
+
BAD_GATEWAY: 1014,
|
|
26
|
+
TLS_HANDSHAKE: 1015,
|
|
27
|
+
};
|
|
28
|
+
export const CUSTOM_CLOSE_CODES = {
|
|
29
|
+
USER_DISCONNECT: 4000,
|
|
30
|
+
TOKEN_EXPIRED: 4001,
|
|
31
|
+
AUTH_FAILED: 4002,
|
|
32
|
+
MAX_RECONNECTS: 4003,
|
|
33
|
+
SERVER_DISCONNECT: 4004,
|
|
34
|
+
};
|
|
35
|
+
export const DISCONNECT_REASONS = {
|
|
36
|
+
SERVER_SHUTDOWN: "server_shutdown",
|
|
37
|
+
TIMEOUT: "timeout",
|
|
38
|
+
TOKEN_EXPIRED: "token_expired",
|
|
39
|
+
};
|
|
40
|
+
export const MESSAGE_CODES = {
|
|
41
|
+
OK: 200,
|
|
42
|
+
BAD_REQUEST: 400,
|
|
43
|
+
UNAUTHORIZED: 401,
|
|
44
|
+
FORBIDDEN: 403,
|
|
45
|
+
NOT_FOUND: 404,
|
|
46
|
+
INTERNAL_ERROR: 500,
|
|
47
|
+
SERVICE_UNAVAILABLE: 503,
|
|
48
|
+
};
|
|
49
|
+
export const RECONNECT_BACKOFF_MULTIPLIER = 2;
|
|
50
|
+
export const CONNECTION_TIMEOUT = 10000;
|
|
51
|
+
export const MESSAGE_TIMEOUT = 5000;
|
|
52
|
+
export const CLEANUP_DELAY = 5000;
|
|
53
|
+
export const CHANNELS = {
|
|
54
|
+
MAILBOXES: "mailboxes",
|
|
55
|
+
MESSAGES: "messages",
|
|
56
|
+
SETTINGS: "settings",
|
|
57
|
+
FILTERS: "filters",
|
|
58
|
+
AUTOREPLY: "autoreply",
|
|
59
|
+
};
|
|
60
|
+
export const EVENTS = {
|
|
61
|
+
CONNECTED: "connected",
|
|
62
|
+
DISCONNECTED: "disconnected",
|
|
63
|
+
RECONNECTING: "reconnecting",
|
|
64
|
+
ERROR: "error",
|
|
65
|
+
DATA: "data",
|
|
66
|
+
UPDATE: "update",
|
|
67
|
+
STATE_CHANGE: "stateChange",
|
|
68
|
+
};
|
|
69
|
+
export const MESSAGE_TYPES = {
|
|
70
|
+
SUBSCRIBE: "subscribe",
|
|
71
|
+
UNSUBSCRIBE: "unsubscribe",
|
|
72
|
+
FETCH: "fetch",
|
|
73
|
+
DATA: "data",
|
|
74
|
+
UPDATE: "update",
|
|
75
|
+
DISCONNECT: "disconnect",
|
|
76
|
+
};
|
|
77
|
+
export const UPDATE_EVENTS = {
|
|
78
|
+
CREATED: "created",
|
|
79
|
+
UPDATED: "updated",
|
|
80
|
+
DELETED: "deleted",
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/websocket/constants.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,cAAc,GAAG;IAE5B,SAAS,EAAE,IAAI;IAGf,cAAc,EAAE,IAAI;IAGpB,iBAAiB,EAAE,KAAK;IAGxB,iBAAiB,EAAE,CAAC;IAGpB,aAAa,EAAE,IAAI;IAGnB,KAAK,EAAE,KAAK;IAGZ,YAAY,EAAE,CAAC;IAGf,WAAW,EAAE,IAAI;CACT,CAAC;AAMX,MAAM,CAAC,MAAM,WAAW,GAAG;IAEzB,MAAM,EAAE,IAAI;IAGZ,UAAU,EAAE,IAAI;IAGhB,cAAc,EAAE,IAAI;IAGpB,gBAAgB,EAAE,IAAI;IAGtB,SAAS,EAAE,IAAI;IAGf,QAAQ,EAAE,IAAI;IAGd,YAAY,EAAE,IAAI;IAGlB,gBAAgB,EAAE,IAAI;IAGtB,eAAe,EAAE,IAAI;IAGrB,mBAAmB,EAAE,IAAI;IAGzB,cAAc,EAAE,IAAI;IAGpB,eAAe,EAAE,IAAI;IAGrB,eAAe,EAAE,IAAI;IAGrB,WAAW,EAAE,IAAI;IAGjB,aAAa,EAAE,IAAI;CACX,CAAC;AAKX,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAEhC,eAAe,EAAE,IAAI;IAGrB,aAAa,EAAE,IAAI;IAGnB,WAAW,EAAE,IAAI;IAGjB,cAAc,EAAE,IAAI;IAGpB,iBAAiB,EAAE,IAAI;CACf,CAAC;AAKX,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAEhC,eAAe,EAAE,iBAAiB;IAGlC,OAAO,EAAE,SAAS;IAGlB,aAAa,EAAE,eAAe;CACtB,CAAC;AAKX,MAAM,CAAC,MAAM,aAAa,GAAG;IAE3B,EAAE,EAAE,GAAG;IAGP,WAAW,EAAE,GAAG;IAGhB,YAAY,EAAE,GAAG;IAGjB,SAAS,EAAE,GAAG;IAGd,SAAS,EAAE,GAAG;IAGd,cAAc,EAAE,GAAG;IAGnB,mBAAmB,EAAE,GAAG;CAChB,CAAC;AAKX,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAK9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAKxC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAKpC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAKlC,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;CACd,CAAC;AAKX,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE,WAAW;IACtB,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,aAAa;CACnB,CAAC;AAKX,MAAM,CAAC,MAAM,aAAa,GAAG;IAE3B,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,aAAa;IAC1B,KAAK,EAAE,OAAO;IAGd,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;CAChB,CAAC;AAKX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACV,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { WildduckWebSocketClient } from "./client";
|
|
2
|
+
export { WebSocketProvider, useWebSocketContext } from "./provider";
|
|
3
|
+
export type { WebSocketContextValue, WebSocketProviderProps } from "./provider";
|
|
4
|
+
export { useWebSocket } from "./useWebSocket";
|
|
5
|
+
export type { WebSocketConfig, WebSocketReadyState, ConnectionState, ChannelName, ClientMessageType, ServerMessageType, SubscriptionParams, MailboxesSubscriptionParams, MessagesSubscriptionParams, SettingsSubscriptionParams, FiltersSubscriptionParams, AutoReplySubscriptionParams, FetchParams, ClientMessage, ServerMessage, ServerResponseData, SubscriptionResponse, FetchResponse, UpdateEventData, SubscriptionState, WebSocketEventMap, EventListener, IWebSocketClient, ReconnectionOptions, } from "./types";
|
|
6
|
+
export { DEFAULT_CONFIG, CLOSE_CODES, CUSTOM_CLOSE_CODES, DISCONNECT_REASONS, MESSAGE_CODES, CHANNELS, EVENTS, MESSAGE_TYPES, UPDATE_EVENTS, } from "./constants";
|
|
7
|
+
export { buildSubscribeMessage, buildUnsubscribeMessage, buildFetchMessage, parseServerMessage, serializeClientMessage, isErrorMessage, isDisconnectMessage, isDataMessage, isUpdateMessage, extractResponseData, extractError, getDisconnectReason, createMockSuccessResponse, createMockErrorResponse, createMockUpdateMessage, createMockDisconnectMessage, } from "./protocol";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/websocket/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAGnD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,WAAW,EACX,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,MAAM,EACN,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { WildduckWebSocketClient } from "./client";
|
|
2
|
+
export { WebSocketProvider, useWebSocketContext } from "./provider";
|
|
3
|
+
export { useWebSocket } from "./useWebSocket";
|
|
4
|
+
export { DEFAULT_CONFIG, CLOSE_CODES, CUSTOM_CLOSE_CODES, DISCONNECT_REASONS, MESSAGE_CODES, CHANNELS, EVENTS, MESSAGE_TYPES, UPDATE_EVENTS, } from "./constants";
|
|
5
|
+
export { buildSubscribeMessage, buildUnsubscribeMessage, buildFetchMessage, parseServerMessage, serializeClientMessage, isErrorMessage, isDisconnectMessage, isDataMessage, isUpdateMessage, extractResponseData, extractError, getDisconnectReason, createMockSuccessResponse, createMockErrorResponse, createMockUpdateMessage, createMockDisconnectMessage, } from "./protocol";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/websocket/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAGnD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA+B9C,OAAO,EACL,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,MAAM,EACN,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ChannelName, ClientMessage, FetchParams, ServerMessage, ServerResponseData, SubscriptionParams } from "./types";
|
|
2
|
+
export declare function buildSubscribeMessage(channel: ChannelName, params: SubscriptionParams): ClientMessage;
|
|
3
|
+
export declare function buildUnsubscribeMessage(channel: ChannelName): ClientMessage;
|
|
4
|
+
export declare function buildFetchMessage(channel: ChannelName, params: FetchParams): ClientMessage;
|
|
5
|
+
export declare function parseServerMessage(data: string | ArrayBuffer | Blob): ServerMessage;
|
|
6
|
+
export declare function isErrorMessage(message: ServerMessage): boolean;
|
|
7
|
+
export declare function isDisconnectMessage(message: ServerMessage): boolean;
|
|
8
|
+
export declare function isDataMessage(message: ServerMessage): boolean;
|
|
9
|
+
export declare function isUpdateMessage(message: ServerMessage): boolean;
|
|
10
|
+
export declare function extractResponseData(message: ServerMessage): ServerResponseData;
|
|
11
|
+
export declare function extractError(message: ServerMessage): Error;
|
|
12
|
+
export declare function serializeClientMessage(message: ClientMessage): string;
|
|
13
|
+
export declare function getDisconnectReason(message: ServerMessage): string;
|
|
14
|
+
export declare function createMockSuccessResponse(channel: ChannelName, data: Record<string, any>): ServerMessage;
|
|
15
|
+
export declare function createMockErrorResponse(channel: ChannelName, code: number, error: string, message: string): ServerMessage;
|
|
16
|
+
export declare function createMockUpdateMessage(channel: ChannelName, data: Record<string, any>): ServerMessage;
|
|
17
|
+
export declare function createMockDisconnectMessage(reason: string): ServerMessage;
|
|
18
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/websocket/protocol.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EAEb,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAUjB,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,kBAAkB,GACzB,aAAa,CAMf;AAQD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAM3E;AASD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,WAAW,GAClB,aAAa,CAMf;AASD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,GAChC,aAAa,CAgCf;AAwDD,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAK9D;AAQD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAEnE;AAQD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAE7D;AAQD,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAE/D;AAQD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,GACrB,kBAAkB,CAEpB;AAQD,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,KAAK,CAW1D;AAQD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAErE;AAQD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAMlE;AASD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,aAAa,CAYf;AAWD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,aAAa,CAaf;AASD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,aAAa,CAYf;AAQD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAYzE"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { MESSAGE_CODES, MESSAGE_TYPES } from "./constants";
|
|
2
|
+
export function buildSubscribeMessage(channel, params) {
|
|
3
|
+
return {
|
|
4
|
+
type: MESSAGE_TYPES.SUBSCRIBE,
|
|
5
|
+
channel,
|
|
6
|
+
data: params,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export function buildUnsubscribeMessage(channel) {
|
|
10
|
+
return {
|
|
11
|
+
type: MESSAGE_TYPES.UNSUBSCRIBE,
|
|
12
|
+
channel,
|
|
13
|
+
data: {},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function buildFetchMessage(channel, params) {
|
|
17
|
+
return {
|
|
18
|
+
type: MESSAGE_TYPES.FETCH,
|
|
19
|
+
channel,
|
|
20
|
+
data: params,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function parseServerMessage(data) {
|
|
24
|
+
let jsonString;
|
|
25
|
+
if (typeof data === "string") {
|
|
26
|
+
jsonString = data;
|
|
27
|
+
}
|
|
28
|
+
else if (data instanceof ArrayBuffer) {
|
|
29
|
+
const decoder = new TextDecoder("utf-8");
|
|
30
|
+
jsonString = decoder.decode(data);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
throw new Error("Blob data type not supported. Server should send text messages.");
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const parsed = JSON.parse(jsonString);
|
|
37
|
+
if (!isValidServerMessage(parsed)) {
|
|
38
|
+
throw new Error("Invalid server message structure");
|
|
39
|
+
}
|
|
40
|
+
return parsed;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (error instanceof SyntaxError) {
|
|
44
|
+
throw new Error(`Failed to parse server message: ${error.message}`);
|
|
45
|
+
}
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function isValidServerMessage(obj) {
|
|
50
|
+
if (!obj || typeof obj !== "object") {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (typeof obj.type !== "string" ||
|
|
54
|
+
typeof obj.channel !== "string" ||
|
|
55
|
+
typeof obj.data !== "object" ||
|
|
56
|
+
obj.data === null) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
const validTypes = [
|
|
60
|
+
MESSAGE_TYPES.DATA,
|
|
61
|
+
MESSAGE_TYPES.UPDATE,
|
|
62
|
+
MESSAGE_TYPES.DISCONNECT,
|
|
63
|
+
];
|
|
64
|
+
if (!validTypes.includes(obj.type)) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (typeof obj.data.code !== "number" ||
|
|
68
|
+
typeof obj.data.response !== "object" ||
|
|
69
|
+
obj.data.response === null) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
if (typeof obj.data.response.success !== "boolean") {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
export function isErrorMessage(message) {
|
|
78
|
+
return (!message.data.response.success ||
|
|
79
|
+
message.data.code >= MESSAGE_CODES.BAD_REQUEST);
|
|
80
|
+
}
|
|
81
|
+
export function isDisconnectMessage(message) {
|
|
82
|
+
return message.type === MESSAGE_TYPES.DISCONNECT;
|
|
83
|
+
}
|
|
84
|
+
export function isDataMessage(message) {
|
|
85
|
+
return message.type === MESSAGE_TYPES.DATA;
|
|
86
|
+
}
|
|
87
|
+
export function isUpdateMessage(message) {
|
|
88
|
+
return message.type === MESSAGE_TYPES.UPDATE;
|
|
89
|
+
}
|
|
90
|
+
export function extractResponseData(message) {
|
|
91
|
+
return message.data.response;
|
|
92
|
+
}
|
|
93
|
+
export function extractError(message) {
|
|
94
|
+
const response = message.data.response;
|
|
95
|
+
const code = message.data.code;
|
|
96
|
+
const errorName = response.error || "Unknown Error";
|
|
97
|
+
const errorMessage = response.message || `WebSocket error (code: ${code})`;
|
|
98
|
+
const error = new Error(`${errorName}: ${errorMessage}`);
|
|
99
|
+
error.code = code;
|
|
100
|
+
error.errorName = errorName;
|
|
101
|
+
return error;
|
|
102
|
+
}
|
|
103
|
+
export function serializeClientMessage(message) {
|
|
104
|
+
return JSON.stringify(message);
|
|
105
|
+
}
|
|
106
|
+
export function getDisconnectReason(message) {
|
|
107
|
+
if (!isDisconnectMessage(message)) {
|
|
108
|
+
return "unknown";
|
|
109
|
+
}
|
|
110
|
+
return message.data.response.reason || "unknown";
|
|
111
|
+
}
|
|
112
|
+
export function createMockSuccessResponse(channel, data) {
|
|
113
|
+
return {
|
|
114
|
+
type: MESSAGE_TYPES.DATA,
|
|
115
|
+
channel,
|
|
116
|
+
data: {
|
|
117
|
+
code: MESSAGE_CODES.OK,
|
|
118
|
+
response: {
|
|
119
|
+
success: true,
|
|
120
|
+
...data,
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
export function createMockErrorResponse(channel, code, error, message) {
|
|
126
|
+
return {
|
|
127
|
+
type: MESSAGE_TYPES.DATA,
|
|
128
|
+
channel,
|
|
129
|
+
data: {
|
|
130
|
+
code,
|
|
131
|
+
response: {
|
|
132
|
+
success: false,
|
|
133
|
+
error,
|
|
134
|
+
message,
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
export function createMockUpdateMessage(channel, data) {
|
|
140
|
+
return {
|
|
141
|
+
type: MESSAGE_TYPES.UPDATE,
|
|
142
|
+
channel,
|
|
143
|
+
data: {
|
|
144
|
+
code: MESSAGE_CODES.OK,
|
|
145
|
+
response: {
|
|
146
|
+
success: true,
|
|
147
|
+
...data,
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
export function createMockDisconnectMessage(reason) {
|
|
153
|
+
return {
|
|
154
|
+
type: MESSAGE_TYPES.DISCONNECT,
|
|
155
|
+
channel: "system",
|
|
156
|
+
data: {
|
|
157
|
+
code: MESSAGE_CODES.OK,
|
|
158
|
+
response: {
|
|
159
|
+
success: true,
|
|
160
|
+
reason,
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/websocket/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React, { type ReactNode } from "react";
|
|
2
|
+
import type { WildduckUserAuth } from "@sudobility/types";
|
|
3
|
+
import { WildduckWebSocketClient } from "./client";
|
|
4
|
+
import type { ConnectionState, WebSocketConfig } from "./types";
|
|
5
|
+
export interface WebSocketContextValue {
|
|
6
|
+
getClient: (auth: WildduckUserAuth) => WildduckWebSocketClient | null;
|
|
7
|
+
isEnabled: boolean;
|
|
8
|
+
isConnected: (userId: string) => boolean;
|
|
9
|
+
connect: (auth: WildduckUserAuth) => Promise<void>;
|
|
10
|
+
disconnect: (userId: string) => void;
|
|
11
|
+
getConnectionState: (userId: string) => ConnectionState;
|
|
12
|
+
}
|
|
13
|
+
export interface WebSocketProviderProps {
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
config: WebSocketConfig;
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function WebSocketProvider({ children, config, enabled, }: WebSocketProviderProps): React.ReactElement;
|
|
19
|
+
export declare function useWebSocketContext(): WebSocketContextValue;
|
|
20
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/websocket/provider.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAEZ,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA4BhE,MAAM,WAAW,qBAAqB;IAQpC,SAAS,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,uBAAuB,GAAG,IAAI,CAAC;IAKtE,SAAS,EAAE,OAAO,CAAC;IAQnB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAQzC,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAQnD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAQrC,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,eAAe,CAAC;CACzD;AAUD,MAAM,WAAW,sBAAsB;IAErC,QAAQ,EAAE,SAAS,CAAC;IAGpB,MAAM,EAAE,eAAe,CAAC;IAGxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAWD,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,MAAM,EACN,OAAe,GAChB,EAAE,sBAAsB,GAAG,KAAK,CAAC,YAAY,CAsL7C;AAQD,wBAAgB,mBAAmB,IAAI,qBAAqB,CAW3D"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import React, { createContext, useCallback, useContext, useEffect, useRef, } from "react";
|
|
2
|
+
import { WildduckWebSocketClient } from "./client";
|
|
3
|
+
import { CLEANUP_DELAY } from "./constants";
|
|
4
|
+
const WebSocketContext = createContext(null);
|
|
5
|
+
export function WebSocketProvider({ children, config, enabled = false, }) {
|
|
6
|
+
const connectionsRef = useRef(new Map());
|
|
7
|
+
const getClient = useCallback((auth) => {
|
|
8
|
+
if (!enabled) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const userId = auth.userId;
|
|
12
|
+
const connection = connectionsRef.current.get(userId);
|
|
13
|
+
if (connection) {
|
|
14
|
+
return connection.client;
|
|
15
|
+
}
|
|
16
|
+
const client = new WildduckWebSocketClient(config);
|
|
17
|
+
connectionsRef.current.set(userId, {
|
|
18
|
+
client,
|
|
19
|
+
auth,
|
|
20
|
+
refCount: 0,
|
|
21
|
+
cleanupTimer: null,
|
|
22
|
+
state: "disconnected",
|
|
23
|
+
});
|
|
24
|
+
client.on("stateChange", (_oldState, newState) => {
|
|
25
|
+
const conn = connectionsRef.current.get(userId);
|
|
26
|
+
if (conn) {
|
|
27
|
+
conn.state = newState;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return client;
|
|
31
|
+
}, [enabled, config]);
|
|
32
|
+
const isConnected = useCallback((userId) => {
|
|
33
|
+
const connection = connectionsRef.current.get(userId);
|
|
34
|
+
return connection?.client.isConnected ?? false;
|
|
35
|
+
}, []);
|
|
36
|
+
const getConnectionState = useCallback((userId) => {
|
|
37
|
+
const connection = connectionsRef.current.get(userId);
|
|
38
|
+
return connection?.state ?? "disconnected";
|
|
39
|
+
}, []);
|
|
40
|
+
const connect = useCallback(async (auth) => {
|
|
41
|
+
if (!enabled) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const userId = auth.userId;
|
|
45
|
+
let connection = connectionsRef.current.get(userId);
|
|
46
|
+
if (!connection) {
|
|
47
|
+
const client = new WildduckWebSocketClient(config);
|
|
48
|
+
connection = {
|
|
49
|
+
client,
|
|
50
|
+
auth,
|
|
51
|
+
refCount: 0,
|
|
52
|
+
cleanupTimer: null,
|
|
53
|
+
state: "disconnected",
|
|
54
|
+
};
|
|
55
|
+
client.on("stateChange", (_oldState, newState) => {
|
|
56
|
+
const conn = connectionsRef.current.get(userId);
|
|
57
|
+
if (conn) {
|
|
58
|
+
conn.state = newState;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
connectionsRef.current.set(userId, connection);
|
|
62
|
+
}
|
|
63
|
+
if (connection.cleanupTimer) {
|
|
64
|
+
clearTimeout(connection.cleanupTimer);
|
|
65
|
+
connection.cleanupTimer = null;
|
|
66
|
+
}
|
|
67
|
+
connection.refCount++;
|
|
68
|
+
if (connection.state === "disconnected" ||
|
|
69
|
+
connection.state === "reconnecting") {
|
|
70
|
+
try {
|
|
71
|
+
await connection.client.connect({
|
|
72
|
+
userId: auth.userId,
|
|
73
|
+
accessToken: auth.accessToken,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
connection.refCount--;
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}, [enabled, config]);
|
|
82
|
+
const disconnect = useCallback((userId) => {
|
|
83
|
+
const connection = connectionsRef.current.get(userId);
|
|
84
|
+
if (!connection) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
connection.refCount = Math.max(0, connection.refCount - 1);
|
|
88
|
+
if (connection.refCount === 0 && !connection.cleanupTimer) {
|
|
89
|
+
connection.cleanupTimer = setTimeout(() => {
|
|
90
|
+
const conn = connectionsRef.current.get(userId);
|
|
91
|
+
if (conn && conn.refCount === 0) {
|
|
92
|
+
conn.client.disconnect();
|
|
93
|
+
conn.client.removeAllListeners();
|
|
94
|
+
connectionsRef.current.delete(userId);
|
|
95
|
+
}
|
|
96
|
+
}, CLEANUP_DELAY);
|
|
97
|
+
}
|
|
98
|
+
}, []);
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
return () => {
|
|
101
|
+
for (const connection of connectionsRef.current.values()) {
|
|
102
|
+
if (connection.cleanupTimer) {
|
|
103
|
+
clearTimeout(connection.cleanupTimer);
|
|
104
|
+
}
|
|
105
|
+
connection.client.disconnect();
|
|
106
|
+
connection.client.removeAllListeners();
|
|
107
|
+
}
|
|
108
|
+
connectionsRef.current.clear();
|
|
109
|
+
};
|
|
110
|
+
}, []);
|
|
111
|
+
const contextValue = {
|
|
112
|
+
getClient,
|
|
113
|
+
isEnabled: enabled,
|
|
114
|
+
isConnected,
|
|
115
|
+
connect,
|
|
116
|
+
disconnect,
|
|
117
|
+
getConnectionState,
|
|
118
|
+
};
|
|
119
|
+
return (React.createElement(WebSocketContext.Provider, { value: contextValue }, children));
|
|
120
|
+
}
|
|
121
|
+
export function useWebSocketContext() {
|
|
122
|
+
const context = useContext(WebSocketContext);
|
|
123
|
+
if (!context) {
|
|
124
|
+
throw new Error("useWebSocketContext must be used within a WebSocketProvider. " +
|
|
125
|
+
"Wrap your app with <WebSocketProvider> to use WebSocket features.");
|
|
126
|
+
}
|
|
127
|
+
return context;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/websocket/provider.tsx"],"names":[],"mappings":"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"}
|