snapreq 0.0.8 → 0.0.10
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 +8 -5
- package/build/capabilities.d.ts +17 -17
- package/build/capabilities.d.ts.map +1 -1
- package/build/control.d.ts +12 -0
- package/build/control.d.ts.map +1 -0
- package/build/control.js +27 -0
- package/build/errors.d.ts +16 -16
- package/build/errors.d.ts.map +1 -1
- package/build/headers.d.ts +6 -6
- package/build/headers.d.ts.map +1 -1
- package/build/request.d.ts +15 -15
- package/build/request.d.ts.map +1 -1
- package/build/response.d.ts +27 -17
- package/build/response.d.ts.map +1 -1
- package/build/response.js +26 -2
- package/build/retry.d.ts +38 -37
- package/build/retry.d.ts.map +1 -1
- package/build/retry.js +40 -34
- package/build/snap-req.d.ts +116 -153
- package/build/snap-req.d.ts.map +1 -1
- package/build/snap-req.js +57 -102
- package/build/transports/fetch-transport.d.ts +10 -4
- package/build/transports/fetch-transport.d.ts.map +1 -1
- package/build/transports/fetch-transport.js +58 -12
- package/build/transports/fetch.d.ts.map +1 -1
- package/build/transports/node-transport.d.ts +23 -22
- package/build/transports/node-transport.d.ts.map +1 -1
- package/build/transports/node-transport.js +45 -10
- package/build/transports/proxy-bounce-transport.d.ts +4 -4
- package/build/transports/proxy-bounce-transport.d.ts.map +1 -1
- package/build/transports/select.d.ts +21 -21
- package/build/transports/select.d.ts.map +1 -1
- package/build/transports/xhr-transport.d.ts +2 -2
- package/build/transports/xhr-transport.d.ts.map +1 -1
- package/build/transports/xhr.d.ts.map +1 -1
- package/build/websocket/websocket-channel.d.ts +33 -22
- package/build/websocket/websocket-channel.d.ts.map +1 -1
- package/build/websocket/websocket-channel.js +27 -11
- package/build/websocket/websocket-client.d.ts +136 -65
- package/build/websocket/websocket-client.d.ts.map +1 -1
- package/build/websocket/websocket-client.js +221 -66
- package/build/websocket/websocket-connection.d.ts +19 -16
- package/build/websocket/websocket-connection.d.ts.map +1 -1
- package/build/websocket/websocket-connection.js +11 -3
- package/build/websocket.d.ts.map +1 -1
- package/package.json +6 -3
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import SnapReqWebSocketConnection from "./websocket-connection.js";
|
|
2
|
+
import SnapReqWebSocketChannel from "./websocket-channel.js";
|
|
1
3
|
/**
|
|
2
4
|
* A small WebSocket client that mirrors simple HTTP-style calls and channel
|
|
3
5
|
* subscriptions over `globalThis.WebSocket`, so the same code runs on web, Expo
|
|
@@ -9,56 +11,19 @@
|
|
|
9
11
|
* `json()`.
|
|
10
12
|
*/
|
|
11
13
|
export default class SnapReqWebSocketClient {
|
|
12
|
-
/**
|
|
13
|
-
* @param {object} args - Options object.
|
|
14
|
-
* @param {string} args.url - Full WebSocket URL, e.g. `ws://localhost:3006/websocket`.
|
|
15
|
-
* @param {boolean} [args.autoReconnect] - Enable auto-reconnect with exponential backoff.
|
|
16
|
-
* @param {boolean} [args.debug] - Whether to log debug output.
|
|
17
|
-
* @param {{getIsOnline?: () => boolean | Promise<boolean>, subscribe?: (callback: (isOnline: boolean) => void) => (() => void) | {remove: () => void}}} [args.networkMonitor] - Optional online-state adapter. When provided, auto-reconnect can wait for the network to report online before reconnecting, and open sockets are closed when the monitor reports offline.
|
|
18
|
-
* @param {number[]} [args.reconnectDelays] - Backoff delays in ms (default: [1000, 2000, 4000, 8000, 15000]).
|
|
19
|
-
* @param {{get: () => string | null | undefined | Promise<string | null | undefined>, set: (sessionId: string) => void | Promise<void>, clear: () => void | Promise<void>}} [args.sessionStore] - Optional sessionId persistence hook surviving reloads (localStorage, a cookie, SQLite, etc.).
|
|
20
|
-
* @param {(value: any) => any} [args.deserialize] - Optional transform applied to a response body inside `response.json()`. Lets an app re-hydrate its own wire format. Defaults to identity.
|
|
21
|
-
*/
|
|
22
|
-
constructor({ autoReconnect, debug, deserialize, networkMonitor, reconnectDelays, sessionStore, url }?: {
|
|
23
|
-
url: string;
|
|
24
|
-
autoReconnect?: boolean;
|
|
25
|
-
debug?: boolean;
|
|
26
|
-
networkMonitor?: {
|
|
27
|
-
getIsOnline?: () => boolean | Promise<boolean>;
|
|
28
|
-
subscribe?: (callback: (isOnline: boolean) => void) => (() => void) | {
|
|
29
|
-
remove: () => void;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
reconnectDelays?: number[];
|
|
33
|
-
sessionStore?: {
|
|
34
|
-
get: () => string | null | undefined | Promise<string | null | undefined>;
|
|
35
|
-
set: (sessionId: string) => void | Promise<void>;
|
|
36
|
-
clear: () => void | Promise<void>;
|
|
37
|
-
};
|
|
38
|
-
deserialize?: (value: any) => any;
|
|
39
|
-
});
|
|
40
|
-
/** @type {Map<string, {reject: (error: unknown) => void, resolve: (response: SnapReqWebSocketResponse) => void}>} */
|
|
41
|
-
pendingRequests: Map<string, {
|
|
42
|
-
reject: (error: unknown) => void;
|
|
43
|
-
resolve: (response: SnapReqWebSocketResponse) => void;
|
|
44
|
-
}>;
|
|
45
|
-
/** @type {Map<string, {reject: (error: unknown) => void, resolve: (value?: void) => void}>} */
|
|
46
|
-
pendingSubscriptions: Map<string, {
|
|
47
|
-
reject: (error: unknown) => void;
|
|
48
|
-
resolve: (value?: void) => void;
|
|
49
|
-
}>;
|
|
50
|
-
/** @type {Map<string, {callbacks: Set<(payload: any) => void>, channel: string, params: Record<string, any> | undefined, ready: Promise<void>}>} */
|
|
51
|
-
listeners: Map<string, {
|
|
52
|
-
callbacks: Set<(payload: any) => void>;
|
|
53
|
-
channel: string;
|
|
54
|
-
params: Record<string, any> | undefined;
|
|
55
|
-
ready: Promise<void>;
|
|
56
|
-
}>;
|
|
57
14
|
/** @type {(value: any) => any} */
|
|
58
15
|
_deserialize: (value: any) => any;
|
|
59
16
|
/** @type {boolean} */
|
|
60
17
|
autoReconnect: boolean;
|
|
61
18
|
debug: boolean;
|
|
19
|
+
/** @type {typeof globalThis.WebSocket} */
|
|
20
|
+
_WebSocket: typeof globalThis.WebSocket;
|
|
21
|
+
/** @type {boolean} */
|
|
22
|
+
_unref: boolean;
|
|
23
|
+
/** @type {number} - ms between liveness pings; 0 disables the heartbeat. */
|
|
24
|
+
_heartbeatIntervalMs: number;
|
|
25
|
+
/** @type {ReturnType<typeof setInterval> | null} */
|
|
26
|
+
_heartbeatTimer: ReturnType<typeof setInterval> | null;
|
|
62
27
|
/** @type {number | null} */
|
|
63
28
|
disconnectedSince: number | null;
|
|
64
29
|
/** @type {number} */
|
|
@@ -116,6 +81,63 @@ export default class SnapReqWebSocketClient {
|
|
|
116
81
|
};
|
|
117
82
|
/** @type {boolean} */
|
|
118
83
|
_waitingForOnline: boolean;
|
|
84
|
+
/** @type {number} - Operations currently depending on the shared in-flight connect. */
|
|
85
|
+
_connectWaiters: number;
|
|
86
|
+
/** @type {WeakSet<object>} - Sockets whose terminal lifecycle has already been processed. */
|
|
87
|
+
_closedSockets: WeakSet<object>;
|
|
88
|
+
socket: WebSocket;
|
|
89
|
+
connectPromise: Promise<any>;
|
|
90
|
+
/** @type {Map<string, {reject: (error: unknown) => void, resolve: (response: SnapReqWebSocketResponse) => void}>} */
|
|
91
|
+
pendingRequests: Map<string, {
|
|
92
|
+
reject: (error: unknown) => void;
|
|
93
|
+
resolve: (response: SnapReqWebSocketResponse) => void;
|
|
94
|
+
}>;
|
|
95
|
+
/** @type {Map<string, {reject: (error: unknown) => void, resolve: (value?: void) => void}>} */
|
|
96
|
+
pendingSubscriptions: Map<string, {
|
|
97
|
+
reject: (error: unknown) => void;
|
|
98
|
+
resolve: (value?: void) => void;
|
|
99
|
+
}>;
|
|
100
|
+
/** @type {Map<string, {callbacks: Set<(payload: any) => void>, channel: string, params: Record<string, any> | undefined, ready: Promise<void>}>} */
|
|
101
|
+
listeners: Map<string, {
|
|
102
|
+
callbacks: Set<(payload: any) => void>;
|
|
103
|
+
channel: string;
|
|
104
|
+
params: Record<string, any> | undefined;
|
|
105
|
+
ready: Promise<void>;
|
|
106
|
+
}>;
|
|
107
|
+
/**
|
|
108
|
+
* @param {object} args - Options object.
|
|
109
|
+
* @param {string} args.url - Full WebSocket URL, e.g. `ws://localhost:3006/websocket`.
|
|
110
|
+
* @param {boolean} [args.autoReconnect] - Enable auto-reconnect with exponential backoff.
|
|
111
|
+
* @param {boolean} [args.debug] - Whether to log debug output.
|
|
112
|
+
* @param {{getIsOnline?: () => boolean | Promise<boolean>, subscribe?: (callback: (isOnline: boolean) => void) => (() => void) | {remove: () => void}}} [args.networkMonitor] - Optional online-state adapter. When provided, auto-reconnect can wait for the network to report online before reconnecting, and open sockets are closed when the monitor reports offline.
|
|
113
|
+
* @param {number[]} [args.reconnectDelays] - Backoff delays in ms (default: [1000, 2000, 4000, 8000, 15000]).
|
|
114
|
+
* @param {{get: () => string | null | undefined | Promise<string | null | undefined>, set: (sessionId: string) => void | Promise<void>, clear: () => void | Promise<void>}} [args.sessionStore] - Optional sessionId persistence hook surviving reloads (localStorage, a cookie, SQLite, etc.).
|
|
115
|
+
* @param {(value: any) => any} [args.deserialize] - Optional transform applied to a response body inside `response.json()`. Lets an app re-hydrate its own wire format. Defaults to identity.
|
|
116
|
+
* @param {typeof globalThis.WebSocket} [args.webSocketImplementation] - WebSocket constructor to use instead of `globalThis.WebSocket`. Inject Node's `ws` here to get real WS ping/pong heartbeats and socket `unref` (the browser/undici global exposes neither).
|
|
117
|
+
* @param {number} [args.heartbeatIntervalMs] - When > 0 and the WebSocket implementation supports `.ping()` (Node `ws`), send a protocol ping every this-many ms and drop the socket if the peer did not pong since the previous ping (so a vanished peer is noticed within ~2× this interval). Default 0 (disabled).
|
|
118
|
+
* @param {boolean} [args.unref] - When the underlying socket exposes `unref()` (Node `ws`), unref it so an idle connection can never keep the process/event loop alive on its own. Best-effort no-op on browser/undici. Default false.
|
|
119
|
+
*/
|
|
120
|
+
constructor({ autoReconnect, debug, deserialize, heartbeatIntervalMs, networkMonitor, reconnectDelays, sessionStore, unref, url, webSocketImplementation }?: {
|
|
121
|
+
url: string;
|
|
122
|
+
autoReconnect?: boolean;
|
|
123
|
+
debug?: boolean;
|
|
124
|
+
networkMonitor?: {
|
|
125
|
+
getIsOnline?: () => boolean | Promise<boolean>;
|
|
126
|
+
subscribe?: (callback: (isOnline: boolean) => void) => (() => void) | {
|
|
127
|
+
remove: () => void;
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
reconnectDelays?: number[];
|
|
131
|
+
sessionStore?: {
|
|
132
|
+
get: () => string | null | undefined | Promise<string | null | undefined>;
|
|
133
|
+
set: (sessionId: string) => void | Promise<void>;
|
|
134
|
+
clear: () => void | Promise<void>;
|
|
135
|
+
};
|
|
136
|
+
deserialize?: (value: any) => any;
|
|
137
|
+
webSocketImplementation?: typeof globalThis.WebSocket;
|
|
138
|
+
heartbeatIntervalMs?: number;
|
|
139
|
+
unref?: boolean;
|
|
140
|
+
});
|
|
119
141
|
/** @returns {boolean} - Whether the socket is open. */
|
|
120
142
|
isOpen(): boolean;
|
|
121
143
|
/** @returns {boolean} - Whether the session is ready for app messages. */
|
|
@@ -124,11 +146,13 @@ export default class SnapReqWebSocketClient {
|
|
|
124
146
|
* Opens a 1:1 connection of the given type against the server. Requires the
|
|
125
147
|
* socket to already be connected (call `connect()` first).
|
|
126
148
|
* @param {string} connectionType - Name the server registered the class under.
|
|
127
|
-
* @param {{params?: Record<string, any>, onConnect?: () => void, onMessage?: (body: any) => void, onDisconnect?: () => void, onResume?: () => void, onClose?: (reason: string) => void}} [options] - Connection options.
|
|
149
|
+
* @param {{params?: Record<string, any>, timeoutMs?: number, signal?: AbortSignal, onConnect?: () => void, onMessage?: (body: any) => void, onDisconnect?: () => void, onResume?: () => void, onClose?: (reason: string) => void}} [options] - Connection options.
|
|
128
150
|
* @returns {SnapReqWebSocketConnection} - The connection handle.
|
|
129
151
|
*/
|
|
130
152
|
openConnection(connectionType: string, options?: {
|
|
131
153
|
params?: Record<string, any>;
|
|
154
|
+
timeoutMs?: number;
|
|
155
|
+
signal?: AbortSignal;
|
|
132
156
|
onConnect?: () => void;
|
|
133
157
|
onMessage?: (body: any) => void;
|
|
134
158
|
onDisconnect?: () => void;
|
|
@@ -145,12 +169,14 @@ export default class SnapReqWebSocketClient {
|
|
|
145
169
|
* Subscribes to a named channel. If the socket is not yet open, the
|
|
146
170
|
* subscription is queued and sent once a connection is established.
|
|
147
171
|
* @param {string} channelType - Name the server registered the channel under.
|
|
148
|
-
* @param {{params?: Record<string, any>, lastEventId?: string, onMessage?: (body: any) => void, onDisconnect?: () => void, onResume?: () => void, onClose?: (reason: string) => void}} [options] - Subscription options.
|
|
172
|
+
* @param {{params?: Record<string, any>, lastEventId?: string, timeoutMs?: number, signal?: AbortSignal, onMessage?: (body: any) => void, onDisconnect?: () => void, onResume?: () => void, onClose?: (reason: string) => void}} [options] - Subscription options.
|
|
149
173
|
* @returns {SnapReqWebSocketChannel} - The subscription handle.
|
|
150
174
|
*/
|
|
151
175
|
subscribeChannel(channelType: string, options?: {
|
|
152
176
|
params?: Record<string, any>;
|
|
153
177
|
lastEventId?: string;
|
|
178
|
+
timeoutMs?: number;
|
|
179
|
+
signal?: AbortSignal;
|
|
154
180
|
onMessage?: (body: any) => void;
|
|
155
181
|
onDisconnect?: () => void;
|
|
156
182
|
onResume?: () => void;
|
|
@@ -189,16 +215,28 @@ export default class SnapReqWebSocketClient {
|
|
|
189
215
|
/**
|
|
190
216
|
* Ensures a WebSocket connection is open. Auto-reconnect and online gating are
|
|
191
217
|
* enabled by default.
|
|
192
|
-
* @param {{autoReconnect?: boolean, waitForOnline?: boolean, resetReconnectState?: boolean}} [options] - Connect options.
|
|
218
|
+
* @param {{autoReconnect?: boolean, waitForOnline?: boolean, resetReconnectState?: boolean, timeoutMs?: number, signal?: AbortSignal}} [options] - Connect options.
|
|
193
219
|
* @returns {Promise<void>} - Resolves once connected and the session is ready.
|
|
194
220
|
*/
|
|
195
|
-
connect({ autoReconnect, waitForOnline, resetReconnectState }?: {
|
|
221
|
+
connect({ autoReconnect, waitForOnline, resetReconnectState, timeoutMs, signal }?: {
|
|
222
|
+
autoReconnect?: boolean;
|
|
223
|
+
waitForOnline?: boolean;
|
|
224
|
+
resetReconnectState?: boolean;
|
|
225
|
+
timeoutMs?: number;
|
|
226
|
+
signal?: AbortSignal;
|
|
227
|
+
}): Promise<void>;
|
|
228
|
+
/**
|
|
229
|
+
* @param {object} [options] - Internal connect options.
|
|
230
|
+
* @param {boolean} [options.autoReconnect] - Whether reconnect remains enabled.
|
|
231
|
+
* @param {boolean} [options.waitForOnline] - Whether to honor the online gate.
|
|
232
|
+
* @param {boolean} [options.resetReconnectState] - Whether to reset backoff state.
|
|
233
|
+
* @returns {Promise<void>} - Opens the socket and waits for session readiness.
|
|
234
|
+
*/
|
|
235
|
+
_connect({ autoReconnect, waitForOnline, resetReconnectState }?: {
|
|
196
236
|
autoReconnect?: boolean;
|
|
197
237
|
waitForOnline?: boolean;
|
|
198
238
|
resetReconnectState?: boolean;
|
|
199
239
|
}): Promise<void>;
|
|
200
|
-
connectPromise: Promise<any>;
|
|
201
|
-
socket: WebSocket;
|
|
202
240
|
/**
|
|
203
241
|
* Closes the WebSocket and clears pending state.
|
|
204
242
|
* @returns {Promise<void>} - Resolves once closed.
|
|
@@ -219,20 +257,24 @@ export default class SnapReqWebSocketClient {
|
|
|
219
257
|
* Performs a POST request over the WebSocket.
|
|
220
258
|
* @param {string} path - Path.
|
|
221
259
|
* @param {any} [body] - Request body.
|
|
222
|
-
* @param {{headers?: Record<string, string
|
|
260
|
+
* @param {{headers?: Record<string, string>, timeoutMs?: number, signal?: AbortSignal}} [options] - Request options such as headers and operation controls.
|
|
223
261
|
* @returns {Promise<SnapReqWebSocketResponse>} - The response.
|
|
224
262
|
*/
|
|
225
263
|
post(path: string, body?: any, options?: {
|
|
226
264
|
headers?: Record<string, string>;
|
|
265
|
+
timeoutMs?: number;
|
|
266
|
+
signal?: AbortSignal;
|
|
227
267
|
}): Promise<SnapReqWebSocketResponse>;
|
|
228
268
|
/**
|
|
229
269
|
* Performs a GET request over the WebSocket.
|
|
230
270
|
* @param {string} path - Path.
|
|
231
|
-
* @param {{headers?: Record<string, string
|
|
271
|
+
* @param {{headers?: Record<string, string>, timeoutMs?: number, signal?: AbortSignal}} [options] - Request options such as headers and operation controls.
|
|
232
272
|
* @returns {Promise<SnapReqWebSocketResponse>} - The response.
|
|
233
273
|
*/
|
|
234
274
|
get(path: string, options?: {
|
|
235
275
|
headers?: Record<string, string>;
|
|
276
|
+
timeoutMs?: number;
|
|
277
|
+
signal?: AbortSignal;
|
|
236
278
|
}): Promise<SnapReqWebSocketResponse>;
|
|
237
279
|
/**
|
|
238
280
|
* Subscribes to a channel for server-sent events.
|
|
@@ -253,26 +295,30 @@ export default class SnapReqWebSocketClient {
|
|
|
253
295
|
/**
|
|
254
296
|
* Subscribes to a channel for server-sent events with optional params.
|
|
255
297
|
* @param {string} channel - Channel name.
|
|
256
|
-
* @param {{lastEventId?: string, params?: Record<string, any
|
|
298
|
+
* @param {{lastEventId?: string, params?: Record<string, any>, timeoutMs?: number, signal?: AbortSignal}} options - Subscription options.
|
|
257
299
|
* @param {(payload: any, message?: Record<string, any>) => void} callback - Callback function.
|
|
258
300
|
* @returns {(() => void) & {ready: Promise<void>}} - Unsubscribe function with readiness promise.
|
|
259
301
|
*/
|
|
260
302
|
subscribe(channel: string, options: {
|
|
261
303
|
lastEventId?: string;
|
|
262
304
|
params?: Record<string, any>;
|
|
305
|
+
timeoutMs?: number;
|
|
306
|
+
signal?: AbortSignal;
|
|
263
307
|
}, callback: (payload: any, message?: Record<string, any>) => void): (() => void) & {
|
|
264
308
|
ready: Promise<void>;
|
|
265
309
|
};
|
|
266
310
|
/**
|
|
267
311
|
* Subscribes to a channel and waits until the server acknowledges it.
|
|
268
312
|
* @param {string} channel - Channel name.
|
|
269
|
-
* @param {{lastEventId?: string, params?: Record<string, any
|
|
313
|
+
* @param {{lastEventId?: string, params?: Record<string, any>, timeoutMs?: number, signal?: AbortSignal}} options - Subscription options.
|
|
270
314
|
* @param {(payload: any, message?: Record<string, any>) => void} callback - Callback function.
|
|
271
315
|
* @returns {Promise<(() => void) & {ready: Promise<void>}>} - Ready unsubscribe handle.
|
|
272
316
|
*/
|
|
273
317
|
subscribeAndWait(channel: string, options: {
|
|
274
318
|
lastEventId?: string;
|
|
275
319
|
params?: Record<string, any>;
|
|
320
|
+
timeoutMs?: number;
|
|
321
|
+
signal?: AbortSignal;
|
|
276
322
|
}, callback: (payload: any, message?: Record<string, any>) => void): Promise<(() => void) & {
|
|
277
323
|
ready: Promise<void>;
|
|
278
324
|
}>;
|
|
@@ -282,11 +328,15 @@ export default class SnapReqWebSocketClient {
|
|
|
282
328
|
* @param {object} [options] - Options object.
|
|
283
329
|
* @param {any} [options.body] - Request body.
|
|
284
330
|
* @param {Record<string, string>} [options.headers] - Header list.
|
|
331
|
+
* @param {number} [options.timeoutMs] - Deadline for connect/session readiness and the response.
|
|
332
|
+
* @param {AbortSignal} [options.signal] - Cancels only this pending request.
|
|
285
333
|
* @returns {Promise<SnapReqWebSocketResponse>} - The response.
|
|
286
334
|
*/
|
|
287
|
-
request(method: string, path: string, { body, headers }?: {
|
|
335
|
+
request(method: string, path: string, { body, headers, timeoutMs, signal }?: {
|
|
288
336
|
body?: any;
|
|
289
337
|
headers?: Record<string, string>;
|
|
338
|
+
timeoutMs?: number;
|
|
339
|
+
signal?: AbortSignal;
|
|
290
340
|
}): Promise<SnapReqWebSocketResponse>;
|
|
291
341
|
/**
|
|
292
342
|
* @param {MessageEvent<any>} event - Event payload.
|
|
@@ -304,7 +354,30 @@ export default class SnapReqWebSocketClient {
|
|
|
304
354
|
* enabled.
|
|
305
355
|
* @returns {void}
|
|
306
356
|
*/
|
|
307
|
-
|
|
357
|
+
/**
|
|
358
|
+
* Starts the protocol-level liveness heartbeat and applies socket unref, both
|
|
359
|
+
* best-effort: only the Node `ws` implementation exposes `.ping()`/`.on("pong")`
|
|
360
|
+
* and an unref-able `_socket`, so on browser/undici these are no-ops. The
|
|
361
|
+
* heartbeat lets a client notice a peer that silently went away; unref (plus
|
|
362
|
+
* the unref'd timers) ensures neither the socket nor these timers keep the
|
|
363
|
+
* process/event loop alive on their own once nothing else is pending.
|
|
364
|
+
* @returns {void}
|
|
365
|
+
*/
|
|
366
|
+
_startSocketKeepalive(): void;
|
|
367
|
+
/**
|
|
368
|
+
* Stops the liveness heartbeat timer. Safe to call repeatedly.
|
|
369
|
+
* @returns {void}
|
|
370
|
+
*/
|
|
371
|
+
_stopSocketKeepalive(): void;
|
|
372
|
+
/**
|
|
373
|
+
* Processes one socket's terminal lifecycle exactly once.
|
|
374
|
+
* @param {object} socket - Socket that closed or is being torn down.
|
|
375
|
+
* @param {unknown} [error] - Failure propagated to pending operations.
|
|
376
|
+
* @param {boolean} [allowReconnect] - Whether this close may schedule reconnect.
|
|
377
|
+
* @returns {void}
|
|
378
|
+
*/
|
|
379
|
+
_handleSocketClose(socket: object, error?: unknown, allowReconnect?: boolean): void;
|
|
380
|
+
onClose: (event: any) => void;
|
|
308
381
|
/**
|
|
309
382
|
* @param {Record<string, any>} payload - Payload data.
|
|
310
383
|
* @returns {void}
|
|
@@ -344,12 +417,7 @@ export default class SnapReqWebSocketClient {
|
|
|
344
417
|
_resetSessionReadyState(error?: unknown): void;
|
|
345
418
|
}
|
|
346
419
|
/** A response to a request made over the WebSocket transport. */
|
|
347
|
-
export class SnapReqWebSocketResponse {
|
|
348
|
-
/**
|
|
349
|
-
* @param {object} message - The response message.
|
|
350
|
-
* @param {(value: any) => any} [deserialize] - Transform applied to the parsed body in `json()`. Defaults to identity.
|
|
351
|
-
*/
|
|
352
|
-
constructor(message: object, deserialize?: (value: any) => any);
|
|
420
|
+
export declare class SnapReqWebSocketResponse {
|
|
353
421
|
body: any;
|
|
354
422
|
headers: Record<string, any>;
|
|
355
423
|
id: string | number;
|
|
@@ -357,9 +425,12 @@ export class SnapReqWebSocketResponse {
|
|
|
357
425
|
statusMessage: string;
|
|
358
426
|
type: string;
|
|
359
427
|
_deserialize: (value: any) => any;
|
|
428
|
+
/**
|
|
429
|
+
* @param {object} message - The response message.
|
|
430
|
+
* @param {(value: any) => any} [deserialize] - Transform applied to the parsed body in `json()`. Defaults to identity.
|
|
431
|
+
*/
|
|
432
|
+
constructor(message: object, deserialize?: (value: any) => any);
|
|
360
433
|
/** @returns {any} - The parsed (and optionally deserialized) JSON body. */
|
|
361
434
|
json(): any;
|
|
362
435
|
}
|
|
363
|
-
import SnapReqWebSocketConnection from "./websocket-connection.js";
|
|
364
|
-
import SnapReqWebSocketChannel from "./websocket-channel.js";
|
|
365
436
|
//# sourceMappingURL=websocket-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-client.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-client.js"],"names":[],"mappings":"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"}
|