UNPKG

21.1 kBTypeScriptView Raw
1import { ITransaction } from './i-transaction.js';
2import { StompConfig } from './stomp-config.js';
3import { StompHeaders } from './stomp-headers.js';
4import { StompSubscription } from './stomp-subscription.js';
5import { ActivationState, closeEventCallbackType, debugFnType, frameCallbackType, IPublishParams, IStompSocket, messageCallbackType, wsErrorCallbackType } from './types.js';
6import { Versions } from './versions.js';
7/**
8 * STOMP Client Class.
9 *
10 * Part of `@stomp/stompjs`.
11 */
12export declare class Client {
13 /**
14 * The URL for the STOMP broker to connect to.
15 * Typically like `"ws://broker.329broker.com:15674/ws"` or `"wss://broker.329broker.com:15674/ws"`.
16 *
17 * Only one of this or [Client#webSocketFactory]{@link Client#webSocketFactory} need to be set.
18 * If both are set, [Client#webSocketFactory]{@link Client#webSocketFactory} will be used.
19 *
20 * If your environment does not support WebSockets natively, please refer to
21 * [Polyfills]{@link https://stomp-js.github.io/guide/stompjs/rx-stomp/ng2-stompjs/pollyfils-for-stompjs-v5.html}.
22 */
23 brokerURL: string | undefined;
24 /**
25 * STOMP versions to attempt during STOMP handshake. By default, versions `1.2`, `1.1`, and `1.0` are attempted.
26 *
27 * Example:
28 * ```javascript
29 * // Try only versions 1.1 and 1.0
30 * client.stompVersions = new Versions(['1.1', '1.0'])
31 * ```
32 */
33 stompVersions: Versions;
34 /**
35 * This function should return a WebSocket or a similar (e.g. SockJS) object.
36 * If your environment does not support WebSockets natively, please refer to
37 * [Polyfills]{@link https://stomp-js.github.io/guide/stompjs/rx-stomp/ng2-stompjs/pollyfils-for-stompjs-v5.html}.
38 * If your STOMP Broker supports WebSockets, prefer setting [Client#brokerURL]{@link Client#brokerURL}.
39 *
40 * If both this and [Client#brokerURL]{@link Client#brokerURL} are set, this will be used.
41 *
42 * Example:
43 * ```javascript
44 * // use a WebSocket
45 * client.webSocketFactory= function () {
46 * return new WebSocket("wss://broker.329broker.com:15674/ws");
47 * };
48 *
49 * // Typical usage with SockJS
50 * client.webSocketFactory= function () {
51 * return new SockJS("http://broker.329broker.com/stomp");
52 * };
53 * ```
54 */
55 webSocketFactory: (() => IStompSocket) | undefined;
56 /**
57 * Will retry if Stomp connection is not established in specified milliseconds.
58 * Default 0, which switches off automatic reconnection.
59 */
60 connectionTimeout: number;
61 private _connectionWatcher;
62 /**
63 * automatically reconnect with delay in milliseconds, set to 0 to disable.
64 */
65 reconnectDelay: number;
66 /**
67 * Incoming heartbeat interval in milliseconds. Set to 0 to disable.
68 */
69 heartbeatIncoming: number;
70 /**
71 * Outgoing heartbeat interval in milliseconds. Set to 0 to disable.
72 */
73 heartbeatOutgoing: number;
74 /**
75 * This switches on a non-standard behavior while sending WebSocket packets.
76 * It splits larger (text) packets into chunks of [maxWebSocketChunkSize]{@link Client#maxWebSocketChunkSize}.
77 * Only Java Spring brokers seem to support this mode.
78 *
79 * WebSockets, by itself, split large (text) packets,
80 * so it is not needed with a truly compliant STOMP/WebSocket broker.
81 * Setting it for such a broker will cause large messages to fail.
82 *
83 * `false` by default.
84 *
85 * Binary frames are never split.
86 */
87 splitLargeFrames: boolean;
88 /**
89 * See [splitLargeFrames]{@link Client#splitLargeFrames}.
90 * This has no effect if [splitLargeFrames]{@link Client#splitLargeFrames} is `false`.
91 */
92 maxWebSocketChunkSize: number;
93 /**
94 * Usually the
95 * [type of WebSocket frame]{@link https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send#Parameters}
96 * is automatically decided by type of the payload.
97 * Default is `false`, which should work with all compliant brokers.
98 *
99 * Set this flag to force binary frames.
100 */
101 forceBinaryWSFrames: boolean;
102 /**
103 * A bug in ReactNative chops a string on occurrence of a NULL.
104 * See issue [https://github.com/stomp-js/stompjs/issues/89]{@link https://github.com/stomp-js/stompjs/issues/89}.
105 * This makes incoming WebSocket messages invalid STOMP packets.
106 * Setting this flag attempts to reverse the damage by appending a NULL.
107 * If the broker splits a large message into multiple WebSocket messages,
108 * this flag will cause data loss and abnormal termination of connection.
109 *
110 * This is not an ideal solution, but a stop gap until the underlying issue is fixed at ReactNative library.
111 */
112 appendMissingNULLonIncoming: boolean;
113 /**
114 * Underlying WebSocket instance, READONLY.
115 */
116 get webSocket(): IStompSocket | undefined;
117 /**
118 * Connection headers, important keys - `login`, `passcode`, `host`.
119 * Though STOMP 1.2 standard marks these keys to be present, check your broker documentation for
120 * details specific to your broker.
121 */
122 connectHeaders: StompHeaders;
123 /**
124 * Disconnection headers.
125 */
126 get disconnectHeaders(): StompHeaders;
127 set disconnectHeaders(value: StompHeaders);
128 private _disconnectHeaders;
129 /**
130 * This function will be called for any unhandled messages.
131 * It is useful for receiving messages sent to RabbitMQ temporary queues.
132 *
133 * It can also get invoked with stray messages while the server is processing
134 * a request to [Client#unsubscribe]{@link Client#unsubscribe}
135 * from an endpoint.
136 *
137 * The actual {@link IMessage} will be passed as parameter to the callback.
138 */
139 onUnhandledMessage: messageCallbackType;
140 /**
141 * STOMP brokers can be requested to notify when an operation is actually completed.
142 * Prefer using [Client#watchForReceipt]{@link Client#watchForReceipt}. See
143 * [Client#watchForReceipt]{@link Client#watchForReceipt} for examples.
144 *
145 * The actual {@link IFrame} will be passed as parameter to the callback.
146 */
147 onUnhandledReceipt: frameCallbackType;
148 /**
149 * Will be invoked if {@link IFrame} of an unknown type is received from the STOMP broker.
150 *
151 * The actual {@link IFrame} will be passed as parameter to the callback.
152 */
153 onUnhandledFrame: frameCallbackType;
154 /**
155 * `true` if there is an active connection to STOMP Broker
156 */
157 get connected(): boolean;
158 /**
159 * Callback, invoked on before a connection to the STOMP broker.
160 *
161 * You can change options on the client, which will impact the immediate connecting.
162 * It is valid to call [Client#decativate]{@link Client#deactivate} in this callback.
163 *
164 * As of version 5.1, this callback can be
165 * [async](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)
166 * (i.e., it can return a
167 * [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)).
168 * In that case, connect will be called only after the Promise is resolved.
169 * This can be used to reliably fetch credentials, access token etc. from some other service
170 * in an asynchronous way.
171 */
172 beforeConnect: () => void | Promise<void>;
173 /**
174 * Callback, invoked on every successful connection to the STOMP broker.
175 *
176 * The actual {@link IFrame} will be passed as parameter to the callback.
177 * Sometimes clients will like to use headers from this frame.
178 */
179 onConnect: frameCallbackType;
180 /**
181 * Callback, invoked on every successful disconnection from the STOMP broker. It will not be invoked if
182 * the STOMP broker disconnected due to an error.
183 *
184 * The actual Receipt {@link IFrame} acknowledging the DISCONNECT will be passed as parameter to the callback.
185 *
186 * The way STOMP protocol is designed, the connection may close/terminate without the client
187 * receiving the Receipt {@link IFrame} acknowledging the DISCONNECT.
188 * You might find [Client#onWebSocketClose]{@link Client#onWebSocketClose} more appropriate to watch
189 * STOMP broker disconnects.
190 */
191 onDisconnect: frameCallbackType;
192 /**
193 * Callback, invoked on an ERROR frame received from the STOMP Broker.
194 * A compliant STOMP Broker will close the connection after this type of frame.
195 * Please check broker specific documentation for exact behavior.
196 *
197 * The actual {@link IFrame} will be passed as parameter to the callback.
198 */
199 onStompError: frameCallbackType;
200 /**
201 * Callback, invoked when underlying WebSocket is closed.
202 *
203 * Actual [CloseEvent]{@link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent}
204 * is passed as parameter to the callback.
205 */
206 onWebSocketClose: closeEventCallbackType;
207 /**
208 * Callback, invoked when underlying WebSocket raises an error.
209 *
210 * Actual [Event]{@link https://developer.mozilla.org/en-US/docs/Web/API/Event}
211 * is passed as parameter to the callback.
212 */
213 onWebSocketError: wsErrorCallbackType;
214 /**
215 * Set it to log the actual raw communication with the broker.
216 * When unset, it logs headers of the parsed frames.
217 *
218 * Changes effect from the next broker reconnect.
219 *
220 * **Caution: this assumes that frames only have valid UTF8 strings.**
221 */
222 logRawCommunication: boolean;
223 /**
224 * By default, debug messages are discarded. To log to `console` following can be used:
225 *
226 * ```javascript
227 * client.debug = function(str) {
228 * console.log(str);
229 * };
230 * ```
231 *
232 * Currently this method does not support levels of log. Be aware that the
233 * output can be quite verbose
234 * and may contain sensitive information (like passwords, tokens etc.).
235 */
236 debug: debugFnType;
237 /**
238 * Browsers do not immediately close WebSockets when `.close` is issued.
239 * This may cause reconnection to take a significantly long time in case
240 * of some types of failures.
241 * In case of incoming heartbeat failure, this experimental flag instructs
242 * the library to discard the socket immediately
243 * (even before it is actually closed).
244 */
245 discardWebsocketOnCommFailure: boolean;
246 /**
247 * version of STOMP protocol negotiated with the server, READONLY
248 */
249 get connectedVersion(): string | undefined;
250 private _stompHandler;
251 /**
252 * if the client is active (connected or going to reconnect)
253 */
254 get active(): boolean;
255 /**
256 * It will be called on state change.
257 *
258 * When deactivating, it may go from ACTIVE to INACTIVE without entering DEACTIVATING.
259 */
260 onChangeState: (state: ActivationState) => void;
261 private _changeState;
262 /**
263 * Activation state.
264 *
265 * It will usually be ACTIVE or INACTIVE.
266 * When deactivating, it may go from ACTIVE to INACTIVE without entering DEACTIVATING.
267 */
268 state: ActivationState;
269 private _reconnector;
270 /**
271 * Create an instance.
272 */
273 constructor(conf?: StompConfig);
274 /**
275 * Update configuration.
276 */
277 configure(conf: StompConfig): void;
278 /**
279 * Initiate the connection with the broker.
280 * If the connection breaks, as per [Client#reconnectDelay]{@link Client#reconnectDelay},
281 * it will keep trying to reconnect.
282 *
283 * Call [Client#deactivate]{@link Client#deactivate} to disconnect and stop reconnection attempts.
284 */
285 activate(): void;
286 private _connect;
287 private _createWebSocket;
288 private _schedule_reconnect;
289 /**
290 * Disconnect if connected and stop auto reconnect loop.
291 * Appropriate callbacks will be invoked if there is an underlying STOMP connection.
292 *
293 * This call is async. It will resolve immediately if there is no underlying active websocket,
294 * otherwise, it will resolve after the underlying websocket is properly disposed of.
295 *
296 * It is not an error to invoke this method more than once.
297 * Each of those would resolve on completion of deactivation.
298 *
299 * To reactivate, you can call [Client#activate]{@link Client#activate}.
300 *
301 * Experimental: pass `force: true` to immediately discard the underlying connection.
302 * This mode will skip both the STOMP and the Websocket shutdown sequences.
303 * In some cases, browsers take a long time in the Websocket shutdown
304 * if the underlying connection had gone stale.
305 * Using this mode can speed up.
306 * When this mode is used, the actual Websocket may linger for a while
307 * and the broker may not realize that the connection is no longer in use.
308 *
309 * It is possible to invoke this method initially without the `force` option
310 * and subsequently, say after a wait, with the `force` option.
311 */
312 deactivate(options?: {
313 force?: boolean;
314 }): Promise<void>;
315 /**
316 * Force disconnect if there is an active connection by directly closing the underlying WebSocket.
317 * This is different from a normal disconnect where a DISCONNECT sequence is carried out with the broker.
318 * After forcing disconnect, automatic reconnect will be attempted.
319 * To stop further reconnects call [Client#deactivate]{@link Client#deactivate} as well.
320 */
321 forceDisconnect(): void;
322 private _disposeStompHandler;
323 /**
324 * Send a message to a named destination. Refer to your STOMP broker documentation for types
325 * and naming of destinations.
326 *
327 * STOMP protocol specifies and suggests some headers and also allows broker-specific headers.
328 *
329 * `body` must be String.
330 * You will need to covert the payload to string in case it is not string (e.g. JSON).
331 *
332 * To send a binary message body, use `binaryBody` parameter. It should be a
333 * [Uint8Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array).
334 * Sometimes brokers may not support binary frames out of the box.
335 * Please check your broker documentation.
336 *
337 * `content-length` header is automatically added to the STOMP Frame sent to the broker.
338 * Set `skipContentLengthHeader` to indicate that `content-length` header should not be added.
339 * For binary messages, `content-length` header is always added.
340 *
341 * Caution: The broker will, most likely, report an error and disconnect
342 * if the message body has NULL octet(s) and `content-length` header is missing.
343 *
344 * ```javascript
345 * client.publish({destination: "/queue/test", headers: {priority: 9}, body: "Hello, STOMP"});
346 *
347 * // Only destination is mandatory parameter
348 * client.publish({destination: "/queue/test", body: "Hello, STOMP"});
349 *
350 * // Skip content-length header in the frame to the broker
351 * client.publish({"/queue/test", body: "Hello, STOMP", skipContentLengthHeader: true});
352 *
353 * var binaryData = generateBinaryData(); // This need to be of type Uint8Array
354 * // setting content-type header is not mandatory, however a good practice
355 * client.publish({destination: '/topic/special', binaryBody: binaryData,
356 * headers: {'content-type': 'application/octet-stream'}});
357 * ```
358 */
359 publish(params: IPublishParams): void;
360 private _checkConnection;
361 /**
362 * STOMP brokers may carry out operation asynchronously and allow requesting for acknowledgement.
363 * To request an acknowledgement, a `receipt` header needs to be sent with the actual request.
364 * The value (say receipt-id) for this header needs to be unique for each use.
365 * Typically, a sequence, a UUID, a random number or a combination may be used.
366 *
367 * A complaint broker will send a RECEIPT frame when an operation has actually been completed.
368 * The operation needs to be matched based on the value of the receipt-id.
369 *
370 * This method allows watching for a receipt and invoking the callback
371 * when the corresponding receipt has been received.
372 *
373 * The actual {@link IFrame} will be passed as parameter to the callback.
374 *
375 * Example:
376 * ```javascript
377 * // Subscribing with acknowledgement
378 * let receiptId = randomText();
379 *
380 * client.watchForReceipt(receiptId, function() {
381 * // Will be called after server acknowledges
382 * });
383 *
384 * client.subscribe(TEST.destination, onMessage, {receipt: receiptId});
385 *
386 *
387 * // Publishing with acknowledgement
388 * receiptId = randomText();
389 *
390 * client.watchForReceipt(receiptId, function() {
391 * // Will be called after server acknowledges
392 * });
393 * client.publish({destination: TEST.destination, headers: {receipt: receiptId}, body: msg});
394 * ```
395 */
396 watchForReceipt(receiptId: string, callback: frameCallbackType): void;
397 /**
398 * Subscribe to a STOMP Broker location. The callback will be invoked for each
399 * received message with the {@link IMessage} as argument.
400 *
401 * Note: The library will generate a unique ID if there is none provided in the headers.
402 * To use your own ID, pass it using the `headers` argument.
403 *
404 * ```javascript
405 * callback = function(message) {
406 * // called when the client receives a STOMP message from the server
407 * if (message.body) {
408 * alert("got message with body " + message.body)
409 * } else {
410 * alert("got empty message");
411 * }
412 * });
413 *
414 * var subscription = client.subscribe("/queue/test", callback);
415 *
416 * // Explicit subscription id
417 * var mySubId = 'my-subscription-id-001';
418 * var subscription = client.subscribe(destination, callback, { id: mySubId });
419 * ```
420 */
421 subscribe(destination: string, callback: messageCallbackType, headers?: StompHeaders): StompSubscription;
422 /**
423 * It is preferable to unsubscribe from a subscription by calling
424 * `unsubscribe()` directly on {@link StompSubscription} returned by `client.subscribe()`:
425 *
426 * ```javascript
427 * var subscription = client.subscribe(destination, onmessage);
428 * // ...
429 * subscription.unsubscribe();
430 * ```
431 *
432 * See: https://stomp.github.com/stomp-specification-1.2.html#UNSUBSCRIBE UNSUBSCRIBE Frame
433 */
434 unsubscribe(id: string, headers?: StompHeaders): void;
435 /**
436 * Start a transaction, the returned {@link ITransaction} has methods - [commit]{@link ITransaction#commit}
437 * and [abort]{@link ITransaction#abort}.
438 *
439 * `transactionId` is optional, if not passed the library will generate it internally.
440 */
441 begin(transactionId?: string): ITransaction;
442 /**
443 * Commit a transaction.
444 *
445 * It is preferable to commit a transaction by calling [commit]{@link ITransaction#commit} directly on
446 * {@link ITransaction} returned by [client.begin]{@link Client#begin}.
447 *
448 * ```javascript
449 * var tx = client.begin(txId);
450 * //...
451 * tx.commit();
452 * ```
453 */
454 commit(transactionId: string): void;
455 /**
456 * Abort a transaction.
457 * It is preferable to abort a transaction by calling [abort]{@link ITransaction#abort} directly on
458 * {@link ITransaction} returned by [client.begin]{@link Client#begin}.
459 *
460 * ```javascript
461 * var tx = client.begin(txId);
462 * //...
463 * tx.abort();
464 * ```
465 */
466 abort(transactionId: string): void;
467 /**
468 * ACK a message. It is preferable to acknowledge a message by calling [ack]{@link IMessage#ack} directly
469 * on the {@link IMessage} handled by a subscription callback:
470 *
471 * ```javascript
472 * var callback = function (message) {
473 * // process the message
474 * // acknowledge it
475 * message.ack();
476 * };
477 * client.subscribe(destination, callback, {'ack': 'client'});
478 * ```
479 */
480 ack(messageId: string, subscriptionId: string, headers?: StompHeaders): void;
481 /**
482 * NACK a message. It is preferable to acknowledge a message by calling [nack]{@link IMessage#nack} directly
483 * on the {@link IMessage} handled by a subscription callback:
484 *
485 * ```javascript
486 * var callback = function (message) {
487 * // process the message
488 * // an error occurs, nack it
489 * message.nack();
490 * };
491 * client.subscribe(destination, callback, {'ack': 'client'});
492 * ```
493 */
494 nack(messageId: string, subscriptionId: string, headers?: StompHeaders): void;
495}
496
\No newline at end of file