@azure/web-pubsub-client 1.0.4-alpha.20251125.1 → 1.0.4-alpha.20251127.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.
Files changed (53) hide show
  1. package/dist/browser/models/index.d.ts +15 -0
  2. package/dist/browser/models/index.d.ts.map +1 -1
  3. package/dist/browser/models/index.js.map +1 -1
  4. package/dist/browser/models/messages.d.ts +28 -2
  5. package/dist/browser/models/messages.d.ts.map +1 -1
  6. package/dist/browser/models/messages.js.map +1 -1
  7. package/dist/browser/protocols/jsonProtocolBase.d.ts.map +1 -1
  8. package/dist/browser/protocols/jsonProtocolBase.js +7 -0
  9. package/dist/browser/protocols/jsonProtocolBase.js.map +1 -1
  10. package/dist/browser/webPubSubClient.d.ts +10 -3
  11. package/dist/browser/webPubSubClient.d.ts.map +1 -1
  12. package/dist/browser/webPubSubClient.js +79 -14
  13. package/dist/browser/webPubSubClient.js.map +1 -1
  14. package/dist/commonjs/models/index.d.ts +15 -0
  15. package/dist/commonjs/models/index.d.ts.map +1 -1
  16. package/dist/commonjs/models/index.js.map +1 -1
  17. package/dist/commonjs/models/messages.d.ts +28 -2
  18. package/dist/commonjs/models/messages.d.ts.map +1 -1
  19. package/dist/commonjs/models/messages.js.map +1 -1
  20. package/dist/commonjs/protocols/jsonProtocolBase.d.ts.map +1 -1
  21. package/dist/commonjs/protocols/jsonProtocolBase.js +7 -0
  22. package/dist/commonjs/protocols/jsonProtocolBase.js.map +1 -1
  23. package/dist/commonjs/webPubSubClient.d.ts +10 -3
  24. package/dist/commonjs/webPubSubClient.d.ts.map +1 -1
  25. package/dist/commonjs/webPubSubClient.js +79 -14
  26. package/dist/commonjs/webPubSubClient.js.map +1 -1
  27. package/dist/esm/models/index.d.ts +15 -0
  28. package/dist/esm/models/index.d.ts.map +1 -1
  29. package/dist/esm/models/index.js.map +1 -1
  30. package/dist/esm/models/messages.d.ts +28 -2
  31. package/dist/esm/models/messages.d.ts.map +1 -1
  32. package/dist/esm/models/messages.js.map +1 -1
  33. package/dist/esm/protocols/jsonProtocolBase.d.ts.map +1 -1
  34. package/dist/esm/protocols/jsonProtocolBase.js +7 -0
  35. package/dist/esm/protocols/jsonProtocolBase.js.map +1 -1
  36. package/dist/esm/webPubSubClient.d.ts +10 -3
  37. package/dist/esm/webPubSubClient.d.ts.map +1 -1
  38. package/dist/esm/webPubSubClient.js +79 -14
  39. package/dist/esm/webPubSubClient.js.map +1 -1
  40. package/dist/react-native/models/index.d.ts +15 -0
  41. package/dist/react-native/models/index.d.ts.map +1 -1
  42. package/dist/react-native/models/index.js.map +1 -1
  43. package/dist/react-native/models/messages.d.ts +28 -2
  44. package/dist/react-native/models/messages.d.ts.map +1 -1
  45. package/dist/react-native/models/messages.js.map +1 -1
  46. package/dist/react-native/protocols/jsonProtocolBase.d.ts.map +1 -1
  47. package/dist/react-native/protocols/jsonProtocolBase.js +7 -0
  48. package/dist/react-native/protocols/jsonProtocolBase.js.map +1 -1
  49. package/dist/react-native/webPubSubClient.d.ts +10 -3
  50. package/dist/react-native/webPubSubClient.d.ts.map +1 -1
  51. package/dist/react-native/webPubSubClient.js +79 -14
  52. package/dist/react-native/webPubSubClient.js.map +1 -1
  53. package/package.json +3 -3
@@ -25,6 +25,21 @@ export interface WebPubSubClientOptions {
25
25
  * The retry options for reconnection. Only available when autoReconnect is true.
26
26
  */
27
27
  reconnectRetryOptions?: WebPubSubRetryOptions;
28
+ /**
29
+ * The idle timeout in milliseconds used to detect half-open connections when no data or pong has
30
+ * been received. Default is 120000ms (120 seconds). Set to 0 to disable this timeout check. Must
31
+ * be greater than or equal to 0. We recommend keeping this value comfortably larger than
32
+ * `keepAliveIntervalInMs` (for example 3x) so that probes have time to run before the timeout
33
+ * closes the socket.
34
+ */
35
+ keepAliveTimeoutInMs?: number;
36
+ /**
37
+ * The interval in milliseconds at which to send keep-alive ping messages to the runtime. Default
38
+ * is 20000ms (20 seconds). Set to 0 to disable client-initiated keep-alive pings. Must be greater
39
+ * than or equal to 0. We recommend choosing a value that is lower than `keepAliveTimeoutInMs`
40
+ * (again, about 3x lower) so the timeout only triggers when multiple pings fail.
41
+ */
42
+ keepAliveIntervalInMs?: number;
28
43
  }
29
44
  /**
30
45
  * The retry options
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAyOlC,cAAc,eAAe,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport type { WebPubSubClientProtocol } from \"../protocols/index.js\";\nimport type { DisconnectedMessage, GroupDataMessage, ServerDataMessage } from \"./messages.js\";\n\n/**\n * The client options\n */\nexport interface WebPubSubClientOptions {\n /**\n * The subprotocol\n */\n protocol?: WebPubSubClientProtocol;\n /**\n * Whether to auto reconnect after connection is dropped and not recoverable\n */\n autoReconnect?: boolean;\n /**\n * Whether to enable restoring group after reconnecting\n */\n autoRejoinGroups?: boolean;\n /**\n * The retry options for operations like joining group and sending messages\n */\n messageRetryOptions?: WebPubSubRetryOptions;\n /**\n * The retry options for reconnection. Only available when autoReconnect is true.\n */\n reconnectRetryOptions?: WebPubSubRetryOptions;\n}\n\n/**\n * The retry options\n */\nexport interface WebPubSubRetryOptions {\n /**\n * Number of times the operation needs to be retried in case\n * of retryable error. Default: 3.\n */\n maxRetries?: number;\n /**\n * Amount of time to wait in milliseconds before making the\n * next attempt. Default: `1000 milliseconds`.\n * When `mode` option is set to `Exponential`,\n * this is used to compute the exponentially increasing delays between retries.\n */\n retryDelayInMs?: number;\n /**\n * Denotes the maximum delay between retries\n * that the retry attempts will be capped at. Applicable only when performing exponential retry.\n */\n maxRetryDelayInMs?: number;\n /**\n * Denotes which retry mode to apply. If undefined, defaults to `Fixed`\n */\n mode?: RetryMode;\n}\n\n/**\n * Describes the Retry Mode type\n */\nexport type RetryMode = \"Exponential\" | \"Fixed\";\n\n/**\n * The start options\n */\nexport interface StartOptions {\n /**\n * The abort signal\n */\n abortSignal?: AbortSignalLike;\n}\n\n/**\n * Join group operation options\n */\nexport interface JoinGroupOptions {\n /**\n * The optional ackId. If not specified, client will generate one.\n */\n ackId?: number;\n /**\n * The abort signal\n */\n abortSignal?: AbortSignalLike;\n}\n\n/**\n * Leave group operation options\n */\nexport interface LeaveGroupOptions {\n /**\n * The optional ackId. If not specified, client will generate one.\n */\n ackId?: number;\n /**\n * The abort signal\n */\n abortSignal?: AbortSignalLike;\n}\n\n/**\n * Send to group operation options\n */\nexport interface SendToGroupOptions {\n /**\n * Whether the message needs to echo to sender\n */\n noEcho?: boolean;\n /**\n * If true, the message won't contains ackId. No AckMessage will be returned from the service.\n */\n fireAndForget?: boolean;\n /**\n * The optional ackId. If not specified, client will generate one.\n */\n ackId?: number;\n /**\n * The abort signal\n */\n abortSignal?: AbortSignalLike;\n}\n\n/**\n * Send event operation options\n */\nexport interface SendEventOptions {\n /**\n * If true, the message won't contains ackId. No AckMessage will be returned from the service.\n */\n fireAndForget?: boolean;\n /**\n * The optional ackId. If not specified, client will generate one.\n */\n ackId?: number;\n /**\n * The abort signal\n */\n abortSignal?: AbortSignalLike;\n}\n\n/**\n * Parameter of OnConnected callback\n */\nexport interface OnConnectedArgs {\n /**\n * The connection id\n */\n connectionId: string;\n /**\n * The user id of the client connection\n */\n userId: string;\n}\n\n/**\n * Parameter of OnDisconnected callback\n */\nexport interface OnDisconnectedArgs {\n /**\n * The connection id\n */\n connectionId?: string;\n /**\n * The disconnected message\n */\n message?: DisconnectedMessage;\n}\n\n/**\n * Parameter of OnStopped callback\n */\nexport interface OnStoppedArgs {}\n\n/**\n * Parameter of OnDataMessage callback\n */\nexport interface OnServerDataMessageArgs {\n /**\n * The data message\n */\n message: ServerDataMessage;\n}\n\n/**\n * Parameter of OnGroupDataMessage callback\n */\nexport interface OnGroupDataMessageArgs {\n /**\n * The group data message\n */\n message: GroupDataMessage;\n}\n\n/**\n * Parameter of RejoinGroupFailed callback\n */\nexport interface OnRejoinGroupFailedArgs {\n /**\n * The group name\n */\n group: string;\n /**\n * The failure error\n */\n error: Error;\n}\n\n/**\n * The ack result\n */\nexport interface WebPubSubResult {\n /**\n * The ack message from the service. If the message is fire-and-forget, this will be undefined.\n */\n ackId?: number;\n /**\n * Whether the message is duplicated.\n */\n isDuplicated: boolean;\n}\n\n/**\n * The start options\n */\nexport interface GetClientAccessUrlOptions {\n /**\n * The abort signal\n */\n abortSignal?: AbortSignalLike;\n}\n\nexport * from \"./messages.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAwPlC,cAAc,eAAe,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport type { WebPubSubClientProtocol } from \"../protocols/index.js\";\nimport type { DisconnectedMessage, GroupDataMessage, ServerDataMessage } from \"./messages.js\";\n\n/**\n * The client options\n */\nexport interface WebPubSubClientOptions {\n /**\n * The subprotocol\n */\n protocol?: WebPubSubClientProtocol;\n /**\n * Whether to auto reconnect after connection is dropped and not recoverable\n */\n autoReconnect?: boolean;\n /**\n * Whether to enable restoring group after reconnecting\n */\n autoRejoinGroups?: boolean;\n /**\n * The retry options for operations like joining group and sending messages\n */\n messageRetryOptions?: WebPubSubRetryOptions;\n /**\n * The retry options for reconnection. Only available when autoReconnect is true.\n */\n reconnectRetryOptions?: WebPubSubRetryOptions;\n /**\n * The idle timeout in milliseconds used to detect half-open connections when no data or pong has\n * been received. Default is 120000ms (120 seconds). Set to 0 to disable this timeout check. Must\n * be greater than or equal to 0. We recommend keeping this value comfortably larger than\n * `keepAliveIntervalInMs` (for example 3x) so that probes have time to run before the timeout\n * closes the socket.\n */\n keepAliveTimeoutInMs?: number;\n /**\n * The interval in milliseconds at which to send keep-alive ping messages to the runtime. Default\n * is 20000ms (20 seconds). Set to 0 to disable client-initiated keep-alive pings. Must be greater\n * than or equal to 0. We recommend choosing a value that is lower than `keepAliveTimeoutInMs`\n * (again, about 3x lower) so the timeout only triggers when multiple pings fail.\n */\n keepAliveIntervalInMs?: number;\n}\n\n/**\n * The retry options\n */\nexport interface WebPubSubRetryOptions {\n /**\n * Number of times the operation needs to be retried in case\n * of retryable error. Default: 3.\n */\n maxRetries?: number;\n /**\n * Amount of time to wait in milliseconds before making the\n * next attempt. Default: `1000 milliseconds`.\n * When `mode` option is set to `Exponential`,\n * this is used to compute the exponentially increasing delays between retries.\n */\n retryDelayInMs?: number;\n /**\n * Denotes the maximum delay between retries\n * that the retry attempts will be capped at. Applicable only when performing exponential retry.\n */\n maxRetryDelayInMs?: number;\n /**\n * Denotes which retry mode to apply. If undefined, defaults to `Fixed`\n */\n mode?: RetryMode;\n}\n\n/**\n * Describes the Retry Mode type\n */\nexport type RetryMode = \"Exponential\" | \"Fixed\";\n\n/**\n * The start options\n */\nexport interface StartOptions {\n /**\n * The abort signal\n */\n abortSignal?: AbortSignalLike;\n}\n\n/**\n * Join group operation options\n */\nexport interface JoinGroupOptions {\n /**\n * The optional ackId. If not specified, client will generate one.\n */\n ackId?: number;\n /**\n * The abort signal\n */\n abortSignal?: AbortSignalLike;\n}\n\n/**\n * Leave group operation options\n */\nexport interface LeaveGroupOptions {\n /**\n * The optional ackId. If not specified, client will generate one.\n */\n ackId?: number;\n /**\n * The abort signal\n */\n abortSignal?: AbortSignalLike;\n}\n\n/**\n * Send to group operation options\n */\nexport interface SendToGroupOptions {\n /**\n * Whether the message needs to echo to sender\n */\n noEcho?: boolean;\n /**\n * If true, the message won't contains ackId. No AckMessage will be returned from the service.\n */\n fireAndForget?: boolean;\n /**\n * The optional ackId. If not specified, client will generate one.\n */\n ackId?: number;\n /**\n * The abort signal\n */\n abortSignal?: AbortSignalLike;\n}\n\n/**\n * Send event operation options\n */\nexport interface SendEventOptions {\n /**\n * If true, the message won't contains ackId. No AckMessage will be returned from the service.\n */\n fireAndForget?: boolean;\n /**\n * The optional ackId. If not specified, client will generate one.\n */\n ackId?: number;\n /**\n * The abort signal\n */\n abortSignal?: AbortSignalLike;\n}\n\n/**\n * Parameter of OnConnected callback\n */\nexport interface OnConnectedArgs {\n /**\n * The connection id\n */\n connectionId: string;\n /**\n * The user id of the client connection\n */\n userId: string;\n}\n\n/**\n * Parameter of OnDisconnected callback\n */\nexport interface OnDisconnectedArgs {\n /**\n * The connection id\n */\n connectionId?: string;\n /**\n * The disconnected message\n */\n message?: DisconnectedMessage;\n}\n\n/**\n * Parameter of OnStopped callback\n */\nexport interface OnStoppedArgs {}\n\n/**\n * Parameter of OnDataMessage callback\n */\nexport interface OnServerDataMessageArgs {\n /**\n * The data message\n */\n message: ServerDataMessage;\n}\n\n/**\n * Parameter of OnGroupDataMessage callback\n */\nexport interface OnGroupDataMessageArgs {\n /**\n * The group data message\n */\n message: GroupDataMessage;\n}\n\n/**\n * Parameter of RejoinGroupFailed callback\n */\nexport interface OnRejoinGroupFailedArgs {\n /**\n * The group name\n */\n group: string;\n /**\n * The failure error\n */\n error: Error;\n}\n\n/**\n * The ack result\n */\nexport interface WebPubSubResult {\n /**\n * The ack message from the service. If the message is fire-and-forget, this will be undefined.\n */\n ackId?: number;\n /**\n * Whether the message is duplicated.\n */\n isDuplicated: boolean;\n}\n\n/**\n * The start options\n */\nexport interface GetClientAccessUrlOptions {\n /**\n * The abort signal\n */\n abortSignal?: AbortSignalLike;\n}\n\nexport * from \"./messages.js\";\n"]}
@@ -2,7 +2,7 @@ import type { JSONTypes } from "../webPubSubClient.js";
2
2
  /**
3
3
  * The web pubsub message
4
4
  */
5
- export type WebPubSubMessage = GroupDataMessage | ServerDataMessage | JoinGroupMessage | LeaveGroupMessage | ConnectedMessage | DisconnectedMessage | SendToGroupMessage | SendEventMessage | SequenceAckMessage | AckMessage;
5
+ export type WebPubSubMessage = GroupDataMessage | ServerDataMessage | JoinGroupMessage | LeaveGroupMessage | ConnectedMessage | DisconnectedMessage | SendToGroupMessage | SendEventMessage | SequenceAckMessage | PingMessage | AckMessage | PongMessage;
6
6
  /**
7
7
  * The common of web pubsub message
8
8
  */
@@ -17,6 +17,10 @@ export type DownstreamMessageType =
17
17
  * Type for AckMessage
18
18
  */
19
19
  "ack"
20
+ /**
21
+ * Type for PongMessage
22
+ */
23
+ | "pong"
20
24
  /**
21
25
  * Type for ConnectedMessage
22
26
  */
@@ -56,7 +60,11 @@ export type UpstreamMessageType =
56
60
  /**
57
61
  * Type for SequenceAckMessage
58
62
  */
59
- | "sequenceAck";
63
+ | "sequenceAck"
64
+ /**
65
+ * Type for PingMessage
66
+ */
67
+ | "ping";
60
68
  /**
61
69
  * The ack message
62
70
  */
@@ -78,6 +86,15 @@ export interface AckMessage extends WebPubSubMessageBase {
78
86
  */
79
87
  error?: AckMessageError;
80
88
  }
89
+ /**
90
+ * The pong message
91
+ */
92
+ export interface PongMessage extends WebPubSubMessageBase {
93
+ /**
94
+ * Message type
95
+ */
96
+ readonly kind: "pong";
97
+ }
81
98
  /**
82
99
  * Error detail in AckMessage
83
100
  */
@@ -276,6 +293,15 @@ export interface SequenceAckMessage extends WebPubSubMessageBase {
276
293
  */
277
294
  sequenceId: number;
278
295
  }
296
+ /**
297
+ * Ping message
298
+ */
299
+ export interface PingMessage extends WebPubSubMessageBase {
300
+ /**
301
+ * Message type
302
+ */
303
+ readonly kind: "ping";
304
+ }
279
305
  /**
280
306
  * The data type
281
307
  */
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/models/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/models/messages.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/models/messages.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { JSONTypes } from \"../webPubSubClient.js\";\n\n/**\n * The web pubsub message\n */\nexport type WebPubSubMessage =\n | GroupDataMessage\n | ServerDataMessage\n | JoinGroupMessage\n | LeaveGroupMessage\n | ConnectedMessage\n | DisconnectedMessage\n | SendToGroupMessage\n | SendEventMessage\n | SequenceAckMessage\n | AckMessage;\n\n/**\n * The common of web pubsub message\n */\nexport interface WebPubSubMessageBase {\n kind: DownstreamMessageType | UpstreamMessageType;\n}\n\n/**\n * Types for downstream messages\n */\nexport type DownstreamMessageType =\n /**\n * Type for AckMessage\n */\n | \"ack\"\n /**\n * Type for ConnectedMessage\n */\n | \"connected\"\n /**\n * Type for DisconnectedMessage\n */\n | \"disconnected\"\n /**\n * Type for GroupDataMessage\n */\n | \"groupData\"\n /**\n * Type for ServerDataMessage\n */\n | \"serverData\";\n\n/**\n * Types for upstream messages\n */\nexport type UpstreamMessageType =\n /**\n * Type for JoinGroupMessage\n */\n | \"joinGroup\"\n /**\n * Type for LeaveGroupMessage\n */\n | \"leaveGroup\"\n /**\n * Type for SendToGroupMessage\n */\n | \"sendToGroup\"\n /**\n * Type for SendEventMessage\n */\n | \"sendEvent\"\n /**\n * Type for SequenceAckMessage\n */\n | \"sequenceAck\";\n\n/**\n * The ack message\n */\nexport interface AckMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"ack\";\n /**\n * The correspending id\n */\n ackId: number;\n /**\n * Is operation success or not\n */\n success: boolean;\n /**\n * The error detail. Only available when success is false\n */\n error?: AckMessageError;\n}\n\n/**\n * Error detail in AckMessage\n */\nexport interface AckMessageError {\n /**\n * Error name\n */\n name: string;\n /**\n * Details error message\n */\n message: string;\n}\n\n/**\n * Connected message\n */\nexport interface ConnectedMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"connected\";\n /**\n * The connection id\n */\n connectionId: string;\n /**\n * The user id of the client connection\n */\n userId: string;\n /**\n * The reconnection token. Only available in reliable protocols.\n */\n reconnectionToken: string;\n}\n\n/**\n * Disconnected message\n */\nexport interface DisconnectedMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"disconnected\";\n /**\n * Reason of disconnection.\n */\n message: string;\n}\n\n/**\n * Group data message\n */\nexport interface GroupDataMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"groupData\";\n /**\n * The data type\n */\n dataType: WebPubSubDataType;\n /**\n * The data\n */\n data: JSONTypes | ArrayBuffer;\n /**\n * The sequence id of the data. Only available in reliable protocols\n */\n sequenceId?: number;\n /**\n * The name of group that the message come from.\n */\n group: string;\n /**\n * The user id of the sender\n */\n fromUserId: string;\n}\n\n/**\n * Server data message\n */\nexport interface ServerDataMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"serverData\";\n /**\n * The data type\n */\n dataType: WebPubSubDataType;\n /**\n * The data\n */\n data: JSONTypes | ArrayBuffer;\n /**\n * The sequence id of the data. Only available in reliable protocols\n */\n sequenceId?: number;\n}\n\n/**\n * Join group message\n */\nexport interface JoinGroupMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"joinGroup\";\n /**\n * The group to join\n */\n group: string;\n /**\n * Optional ack id. If specified, an AckMessage with success or not will be returned with the same ackId\n */\n ackId?: number;\n}\n\n/**\n * Leave group message\n */\nexport interface LeaveGroupMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"leaveGroup\";\n /**\n * The group to leave\n */\n group: string;\n /**\n * Optional ack id. If specified, an AckMessage with success or not will be returned with the same ackId\n */\n ackId?: number;\n}\n\n/**\n * Send custom event message\n */\nexport interface SendEventMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"sendEvent\";\n /**\n * Optional ack id. If specified, an AckMessage with success or not will be returned with the same ackId\n */\n ackId?: number;\n /**\n * The data type\n */\n dataType: WebPubSubDataType;\n /**\n * The data\n */\n data: JSONTypes | ArrayBuffer;\n /**\n * The event name\n */\n event: string;\n}\n\n/**\n * Send to group message\n */\nexport interface SendToGroupMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"sendToGroup\";\n /**\n * The group to send\n */\n group: string;\n /**\n * Optional ack id. If specified, an AckMessage with success or not will be returned with the same ackId\n */\n ackId?: number;\n /**\n * The data type\n */\n dataType: WebPubSubDataType;\n /**\n * The data\n */\n data: JSONTypes | ArrayBuffer;\n /**\n * Whether the message needs to echo to sender\n */\n noEcho: boolean;\n}\n\n/**\n * Sequence ack message\n */\nexport interface SequenceAckMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"sequenceAck\";\n /**\n * The sequence id\n */\n sequenceId: number;\n}\n\n/**\n * The data type\n */\nexport type WebPubSubDataType =\n /**\n * Binary type\n */\n | \"binary\"\n /**\n * Json type\n */\n | \"json\"\n /**\n * Text type\n */\n | \"text\"\n /**\n * Protobuf type\n */\n | \"protobuf\";\n"]}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/models/messages.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { JSONTypes } from \"../webPubSubClient.js\";\n\n/**\n * The web pubsub message\n */\nexport type WebPubSubMessage =\n | GroupDataMessage\n | ServerDataMessage\n | JoinGroupMessage\n | LeaveGroupMessage\n | ConnectedMessage\n | DisconnectedMessage\n | SendToGroupMessage\n | SendEventMessage\n | SequenceAckMessage\n | PingMessage\n | AckMessage\n | PongMessage;\n\n/**\n * The common of web pubsub message\n */\nexport interface WebPubSubMessageBase {\n kind: DownstreamMessageType | UpstreamMessageType;\n}\n\n/**\n * Types for downstream messages\n */\nexport type DownstreamMessageType =\n /**\n * Type for AckMessage\n */\n | \"ack\"\n /**\n * Type for PongMessage\n */\n | \"pong\"\n /**\n * Type for ConnectedMessage\n */\n | \"connected\"\n /**\n * Type for DisconnectedMessage\n */\n | \"disconnected\"\n /**\n * Type for GroupDataMessage\n */\n | \"groupData\"\n /**\n * Type for ServerDataMessage\n */\n | \"serverData\";\n\n/**\n * Types for upstream messages\n */\nexport type UpstreamMessageType =\n /**\n * Type for JoinGroupMessage\n */\n | \"joinGroup\"\n /**\n * Type for LeaveGroupMessage\n */\n | \"leaveGroup\"\n /**\n * Type for SendToGroupMessage\n */\n | \"sendToGroup\"\n /**\n * Type for SendEventMessage\n */\n | \"sendEvent\"\n /**\n * Type for SequenceAckMessage\n */\n | \"sequenceAck\"\n /**\n * Type for PingMessage\n */\n | \"ping\";\n\n/**\n * The ack message\n */\nexport interface AckMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"ack\";\n /**\n * The correspending id\n */\n ackId: number;\n /**\n * Is operation success or not\n */\n success: boolean;\n /**\n * The error detail. Only available when success is false\n */\n error?: AckMessageError;\n}\n\n/**\n * The pong message\n */\nexport interface PongMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"pong\";\n}\n\n/**\n * Error detail in AckMessage\n */\nexport interface AckMessageError {\n /**\n * Error name\n */\n name: string;\n /**\n * Details error message\n */\n message: string;\n}\n\n/**\n * Connected message\n */\nexport interface ConnectedMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"connected\";\n /**\n * The connection id\n */\n connectionId: string;\n /**\n * The user id of the client connection\n */\n userId: string;\n /**\n * The reconnection token. Only available in reliable protocols.\n */\n reconnectionToken: string;\n}\n\n/**\n * Disconnected message\n */\nexport interface DisconnectedMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"disconnected\";\n /**\n * Reason of disconnection.\n */\n message: string;\n}\n\n/**\n * Group data message\n */\nexport interface GroupDataMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"groupData\";\n /**\n * The data type\n */\n dataType: WebPubSubDataType;\n /**\n * The data\n */\n data: JSONTypes | ArrayBuffer;\n /**\n * The sequence id of the data. Only available in reliable protocols\n */\n sequenceId?: number;\n /**\n * The name of group that the message come from.\n */\n group: string;\n /**\n * The user id of the sender\n */\n fromUserId: string;\n}\n\n/**\n * Server data message\n */\nexport interface ServerDataMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"serverData\";\n /**\n * The data type\n */\n dataType: WebPubSubDataType;\n /**\n * The data\n */\n data: JSONTypes | ArrayBuffer;\n /**\n * The sequence id of the data. Only available in reliable protocols\n */\n sequenceId?: number;\n}\n\n/**\n * Join group message\n */\nexport interface JoinGroupMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"joinGroup\";\n /**\n * The group to join\n */\n group: string;\n /**\n * Optional ack id. If specified, an AckMessage with success or not will be returned with the same ackId\n */\n ackId?: number;\n}\n\n/**\n * Leave group message\n */\nexport interface LeaveGroupMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"leaveGroup\";\n /**\n * The group to leave\n */\n group: string;\n /**\n * Optional ack id. If specified, an AckMessage with success or not will be returned with the same ackId\n */\n ackId?: number;\n}\n\n/**\n * Send custom event message\n */\nexport interface SendEventMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"sendEvent\";\n /**\n * Optional ack id. If specified, an AckMessage with success or not will be returned with the same ackId\n */\n ackId?: number;\n /**\n * The data type\n */\n dataType: WebPubSubDataType;\n /**\n * The data\n */\n data: JSONTypes | ArrayBuffer;\n /**\n * The event name\n */\n event: string;\n}\n\n/**\n * Send to group message\n */\nexport interface SendToGroupMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"sendToGroup\";\n /**\n * The group to send\n */\n group: string;\n /**\n * Optional ack id. If specified, an AckMessage with success or not will be returned with the same ackId\n */\n ackId?: number;\n /**\n * The data type\n */\n dataType: WebPubSubDataType;\n /**\n * The data\n */\n data: JSONTypes | ArrayBuffer;\n /**\n * Whether the message needs to echo to sender\n */\n noEcho: boolean;\n}\n\n/**\n * Sequence ack message\n */\nexport interface SequenceAckMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"sequenceAck\";\n /**\n * The sequence id\n */\n sequenceId: number;\n}\n\n/**\n * Ping message\n */\nexport interface PingMessage extends WebPubSubMessageBase {\n /**\n * Message type\n */\n readonly kind: \"ping\";\n}\n\n/**\n * The data type\n */\nexport type WebPubSubDataType =\n /**\n * Binary type\n */\n | \"binary\"\n /**\n * Json type\n */\n | \"json\"\n /**\n * Text type\n */\n | \"text\"\n /**\n * Protobuf type\n */\n | \"protobuf\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"jsonProtocolBase.d.ts","sourceRoot":"","sources":["../../../src/protocols/jsonProtocolBase.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAOV,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAI/B,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAmDpE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA0C9D"}
1
+ {"version":3,"file":"jsonProtocolBase.d.ts","sourceRoot":"","sources":["../../../src/protocols/jsonProtocolBase.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAQV,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAI/B,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAqDpE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA8C9D"}
@@ -51,6 +51,9 @@ export function parseMessages(input) {
51
51
  else if (typedMessage.type === "ack") {
52
52
  returnMessage = { ...parsedMessage, kind: "ack" };
53
53
  }
54
+ else if (typedMessage.type === "pong") {
55
+ returnMessage = { ...parsedMessage, kind: "pong" };
56
+ }
54
57
  else {
55
58
  // Forward compatible
56
59
  return null;
@@ -93,6 +96,10 @@ export function writeMessage(message) {
93
96
  data = { type: "sequenceAck", sequenceId: message.sequenceId };
94
97
  break;
95
98
  }
99
+ case "ping": {
100
+ data = { type: "ping" };
101
+ break;
102
+ }
96
103
  default: {
97
104
  throw new Error(`Unsupported type: ${message.kind}`);
98
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jsonProtocolBase.js","sourceRoot":"","sources":["../../../src/protocols/jsonProtocolBase.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n AckMessage,\n ConnectedMessage,\n DisconnectedMessage,\n GroupDataMessage,\n ServerDataMessage,\n WebPubSubDataType,\n WebPubSubMessage,\n} from \"../models/messages.js\";\nimport type { JSONTypes } from \"../webPubSubClient.js\";\nimport { Buffer } from \"buffer\";\n\nexport function parseMessages(input: string): WebPubSubMessage | null {\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\n if (typeof input !== \"string\") {\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\n }\n\n if (!input) {\n throw new Error(\"No input\");\n }\n\n const parsedMessage = JSON.parse(input);\n const typedMessage = parsedMessage as { type: string; from: string; event: string };\n let returnMessage: WebPubSubMessage;\n\n if (typedMessage.type === \"system\") {\n if (typedMessage.event === \"connected\") {\n returnMessage = { ...parsedMessage, kind: \"connected\" } as ConnectedMessage;\n } else if (typedMessage.event === \"disconnected\") {\n returnMessage = { ...parsedMessage, kind: \"disconnected\" } as DisconnectedMessage;\n } else {\n // Forward compatible\n return null;\n }\n } else if (typedMessage.type === \"message\") {\n if (typedMessage.from === \"group\") {\n const data = parsePayload(parsedMessage.data, parsedMessage.dataType as WebPubSubDataType);\n if (data === null) {\n return null;\n }\n returnMessage = { ...parsedMessage, data: data, kind: \"groupData\" } as GroupDataMessage;\n } else if (typedMessage.from === \"server\") {\n const data = parsePayload(parsedMessage.data, parsedMessage.dataType as WebPubSubDataType);\n if (data === null) {\n return null;\n }\n returnMessage = {\n ...parsedMessage,\n data: data,\n kind: \"serverData\",\n } as ServerDataMessage;\n } else {\n // Forward compatible\n return null;\n }\n } else if (typedMessage.type === \"ack\") {\n returnMessage = { ...parsedMessage, kind: \"ack\" } as AckMessage;\n } else {\n // Forward compatible\n return null;\n }\n return returnMessage;\n}\n\nexport function writeMessage(message: WebPubSubMessage): string {\n let data: any;\n switch (message.kind) {\n case \"joinGroup\": {\n data = { type: \"joinGroup\", group: message.group, ackId: message.ackId } as JoinGroupData;\n break;\n }\n case \"leaveGroup\": {\n data = { type: \"leaveGroup\", group: message.group, ackId: message.ackId } as LeaveGroupData;\n break;\n }\n case \"sendEvent\": {\n data = {\n type: \"event\",\n event: message.event,\n ackId: message.ackId,\n dataType: message.dataType,\n data: getPayload(message.data, message.dataType),\n } as SendEventData;\n break;\n }\n case \"sendToGroup\": {\n data = {\n type: \"sendToGroup\",\n group: message.group,\n ackId: message.ackId,\n dataType: message.dataType,\n data: getPayload(message.data, message.dataType),\n noEcho: message.noEcho,\n } as SendToGroupData;\n break;\n }\n case \"sequenceAck\": {\n data = { type: \"sequenceAck\", sequenceId: message.sequenceId } as SequenceAckData;\n break;\n }\n default: {\n throw new Error(`Unsupported type: ${message.kind}`);\n }\n }\n\n return JSON.stringify(data);\n}\n\ninterface JoinGroupData {\n readonly type: \"joinGroup\";\n group: string;\n ackId?: number;\n}\n\ninterface LeaveGroupData {\n readonly type: \"leaveGroup\";\n group: string;\n ackId?: number;\n}\n\ninterface SendToGroupData {\n readonly type: \"sendToGroup\";\n group: string;\n ackId?: number;\n dataType: WebPubSubDataType;\n data: any;\n noEcho: boolean;\n}\n\ninterface SendEventData {\n readonly type: \"event\";\n ackId?: number;\n dataType: WebPubSubDataType;\n data: any;\n event: string;\n}\n\ninterface SequenceAckData {\n readonly type: \"sequenceAck\";\n sequenceId: number;\n}\n\nfunction getPayload(data: JSONTypes | ArrayBuffer, dataType: WebPubSubDataType): any {\n switch (dataType) {\n case \"text\": {\n if (typeof data !== \"string\") {\n throw new TypeError(\"Message must be a string.\");\n }\n return data;\n }\n case \"json\": {\n return data;\n }\n case \"binary\":\n case \"protobuf\": {\n if (data instanceof ArrayBuffer) {\n return Buffer.from(data).toString(\"base64\");\n }\n throw new TypeError(\"Message must be a ArrayBuffer\");\n }\n }\n}\n\nfunction parsePayload(data: any, dataType: string): JSONTypes | ArrayBuffer | null {\n if (dataType === \"text\") {\n if (typeof data !== \"string\") {\n throw new TypeError(\"Message must be a string when dataType is text\");\n }\n return data as string;\n } else if (dataType === \"json\") {\n return data as JSONTypes;\n } else if (dataType === \"binary\" || dataType === \"protobuf\") {\n const buf = Buffer.from(data as string, \"base64\");\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) as ArrayBuffer;\n } else {\n // Forward compatible\n return null;\n }\n}\n"]}
1
+ {"version":3,"file":"jsonProtocolBase.js","sourceRoot":"","sources":["../../../src/protocols/jsonProtocolBase.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n AckMessage,\n PongMessage,\n ConnectedMessage,\n DisconnectedMessage,\n GroupDataMessage,\n ServerDataMessage,\n WebPubSubDataType,\n WebPubSubMessage,\n} from \"../models/messages.js\";\nimport type { JSONTypes } from \"../webPubSubClient.js\";\nimport { Buffer } from \"buffer\";\n\nexport function parseMessages(input: string): WebPubSubMessage | null {\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\n if (typeof input !== \"string\") {\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\n }\n\n if (!input) {\n throw new Error(\"No input\");\n }\n\n const parsedMessage = JSON.parse(input);\n const typedMessage = parsedMessage as { type: string; from: string; event: string };\n let returnMessage: WebPubSubMessage;\n\n if (typedMessage.type === \"system\") {\n if (typedMessage.event === \"connected\") {\n returnMessage = { ...parsedMessage, kind: \"connected\" } as ConnectedMessage;\n } else if (typedMessage.event === \"disconnected\") {\n returnMessage = { ...parsedMessage, kind: \"disconnected\" } as DisconnectedMessage;\n } else {\n // Forward compatible\n return null;\n }\n } else if (typedMessage.type === \"message\") {\n if (typedMessage.from === \"group\") {\n const data = parsePayload(parsedMessage.data, parsedMessage.dataType as WebPubSubDataType);\n if (data === null) {\n return null;\n }\n returnMessage = { ...parsedMessage, data: data, kind: \"groupData\" } as GroupDataMessage;\n } else if (typedMessage.from === \"server\") {\n const data = parsePayload(parsedMessage.data, parsedMessage.dataType as WebPubSubDataType);\n if (data === null) {\n return null;\n }\n returnMessage = {\n ...parsedMessage,\n data: data,\n kind: \"serverData\",\n } as ServerDataMessage;\n } else {\n // Forward compatible\n return null;\n }\n } else if (typedMessage.type === \"ack\") {\n returnMessage = { ...parsedMessage, kind: \"ack\" } as AckMessage;\n } else if (typedMessage.type === \"pong\") {\n returnMessage = { ...parsedMessage, kind: \"pong\" } as PongMessage;\n } else {\n // Forward compatible\n return null;\n }\n return returnMessage;\n}\n\nexport function writeMessage(message: WebPubSubMessage): string {\n let data: any;\n switch (message.kind) {\n case \"joinGroup\": {\n data = { type: \"joinGroup\", group: message.group, ackId: message.ackId } as JoinGroupData;\n break;\n }\n case \"leaveGroup\": {\n data = { type: \"leaveGroup\", group: message.group, ackId: message.ackId } as LeaveGroupData;\n break;\n }\n case \"sendEvent\": {\n data = {\n type: \"event\",\n event: message.event,\n ackId: message.ackId,\n dataType: message.dataType,\n data: getPayload(message.data, message.dataType),\n } as SendEventData;\n break;\n }\n case \"sendToGroup\": {\n data = {\n type: \"sendToGroup\",\n group: message.group,\n ackId: message.ackId,\n dataType: message.dataType,\n data: getPayload(message.data, message.dataType),\n noEcho: message.noEcho,\n } as SendToGroupData;\n break;\n }\n case \"sequenceAck\": {\n data = { type: \"sequenceAck\", sequenceId: message.sequenceId } as SequenceAckData;\n break;\n }\n case \"ping\": {\n data = { type: \"ping\" } as PingData;\n break;\n }\n default: {\n throw new Error(`Unsupported type: ${message.kind}`);\n }\n }\n\n return JSON.stringify(data);\n}\n\ninterface JoinGroupData {\n readonly type: \"joinGroup\";\n group: string;\n ackId?: number;\n}\n\ninterface LeaveGroupData {\n readonly type: \"leaveGroup\";\n group: string;\n ackId?: number;\n}\n\ninterface SendToGroupData {\n readonly type: \"sendToGroup\";\n group: string;\n ackId?: number;\n dataType: WebPubSubDataType;\n data: any;\n noEcho: boolean;\n}\n\ninterface SendEventData {\n readonly type: \"event\";\n ackId?: number;\n dataType: WebPubSubDataType;\n data: any;\n event: string;\n}\n\ninterface SequenceAckData {\n readonly type: \"sequenceAck\";\n sequenceId: number;\n}\n\ninterface PingData {\n readonly type: \"ping\";\n}\n\nfunction getPayload(data: JSONTypes | ArrayBuffer, dataType: WebPubSubDataType): any {\n switch (dataType) {\n case \"text\": {\n if (typeof data !== \"string\") {\n throw new TypeError(\"Message must be a string.\");\n }\n return data;\n }\n case \"json\": {\n return data;\n }\n case \"binary\":\n case \"protobuf\": {\n if (data instanceof ArrayBuffer) {\n return Buffer.from(data).toString(\"base64\");\n }\n throw new TypeError(\"Message must be a ArrayBuffer\");\n }\n }\n}\n\nfunction parsePayload(data: any, dataType: string): JSONTypes | ArrayBuffer | null {\n if (dataType === \"text\") {\n if (typeof data !== \"string\") {\n throw new TypeError(\"Message must be a string when dataType is text\");\n }\n return data as string;\n } else if (dataType === \"json\") {\n return data as JSONTypes;\n } else if (dataType === \"binary\" || dataType === \"protobuf\") {\n const buf = Buffer.from(data as string, \"base64\");\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) as ArrayBuffer;\n } else {\n // Forward compatible\n return null;\n }\n}\n"]}
@@ -18,11 +18,13 @@ export declare class WebPubSubClient {
18
18
  private readonly _messageRetryPolicy;
19
19
  private readonly _reconnectRetryPolicy;
20
20
  private readonly _quickSequenceAckDiff;
21
- private readonly _activeTimeoutInMs;
21
+ private readonly _keepAliveTimeoutInMs;
22
+ private readonly _keepAliveIntervalInMs;
22
23
  private readonly _emitter;
23
24
  private _state;
24
25
  private _isStopping;
25
- private _activeKeepaliveTask;
26
+ private _pingKeepaliveTask;
27
+ private _timeoutMonitorTask;
26
28
  private _wsClient?;
27
29
  private _uri?;
28
30
  private _lastCloseEvent?;
@@ -31,6 +33,7 @@ export declare class WebPubSubClient {
31
33
  private _reconnectionToken?;
32
34
  private _isInitialConnected;
33
35
  private _sequenceAckTask?;
36
+ private _lastMessageReceived;
34
37
  /**
35
38
  * Create an instance of WebPubSubClient
36
39
  * @param clientAccessUrl - The uri to connect
@@ -54,6 +57,7 @@ export declare class WebPubSubClient {
54
57
  * Stop the client.
55
58
  */
56
59
  stop(): void;
60
+ private _disposeKeepaliveTasks;
57
61
  /**
58
62
  * Add handler for connected event
59
63
  * @param event - The event name
@@ -169,7 +173,10 @@ export declare class WebPubSubClient {
169
173
  private _handleConnectionCloseAndNoRecovery;
170
174
  private _autoReconnect;
171
175
  private _handleConnectionStopped;
172
- private _getActiveKeepaliveTask;
176
+ private _trySendPing;
177
+ private _checkKeepAliveTimeout;
178
+ private _getPingKeepaliveTask;
179
+ private _getTimeoutMonitorTask;
173
180
  private _sendMessage;
174
181
  private _sendMessageWithAckId;
175
182
  private _handleConnectionClose;
@@ -1 +1 @@
1
- {"version":3,"file":"webPubSubClient.d.ts","sourceRoot":"","sources":["../../src/webPubSubClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webPubSubClient.d.ts","sourceRoot":"","sources":["../../src/webPubSubClient.ts"],"names":[],"mappings":"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"}
@@ -28,11 +28,15 @@ export class WebPubSubClient {
28
28
  _messageRetryPolicy;
29
29
  _reconnectRetryPolicy;
30
30
  _quickSequenceAckDiff = 300;
31
- _activeTimeoutInMs = 20000;
31
+ // The timeout for keep alive
32
+ _keepAliveTimeoutInMs;
33
+ // The interval at which to send keep-alive ping messages to the runtime
34
+ _keepAliveIntervalInMs;
32
35
  _emitter = new EventEmitter();
33
36
  _state;
34
37
  _isStopping = false;
35
- _activeKeepaliveTask;
38
+ _pingKeepaliveTask;
39
+ _timeoutMonitorTask;
36
40
  // connection lifetime
37
41
  _wsClient;
38
42
  _uri;
@@ -42,6 +46,7 @@ export class WebPubSubClient {
42
46
  _reconnectionToken;
43
47
  _isInitialConnected = false;
44
48
  _sequenceAckTask;
49
+ _lastMessageReceived = Date.now();
45
50
  constructor(credential, options) {
46
51
  if (typeof credential === "string") {
47
52
  this._credential = { getClientAccessUrl: credential };
@@ -60,6 +65,8 @@ export class WebPubSubClient {
60
65
  this._groupMap = new Map();
61
66
  this._ackManager = new AckManager();
62
67
  this._sequenceId = new SequenceId();
68
+ this._keepAliveTimeoutInMs = this._options.keepAliveTimeoutInMs ?? 120000;
69
+ this._keepAliveIntervalInMs = this._options.keepAliveIntervalInMs ?? 20000;
63
70
  this._state = WebPubSubClientState.Stopped;
64
71
  }
65
72
  /**
@@ -77,8 +84,11 @@ export class WebPubSubClient {
77
84
  if (options) {
78
85
  abortSignal = options.abortSignal;
79
86
  }
80
- if (!this._activeKeepaliveTask) {
81
- this._activeKeepaliveTask = this._getActiveKeepaliveTask();
87
+ if (!this._pingKeepaliveTask && this._keepAliveIntervalInMs > 0) {
88
+ this._pingKeepaliveTask = this._getPingKeepaliveTask();
89
+ }
90
+ if (!this._timeoutMonitorTask && this._keepAliveTimeoutInMs > 0) {
91
+ this._timeoutMonitorTask = this._getTimeoutMonitorTask();
82
92
  }
83
93
  try {
84
94
  await this._startCore(abortSignal);
@@ -86,10 +96,7 @@ export class WebPubSubClient {
86
96
  catch (err) {
87
97
  // this two sentense should be set together. Consider client.stop() is called during _startCore()
88
98
  this._changeState(WebPubSubClientState.Stopped);
89
- if (this._activeKeepaliveTask) {
90
- this._activeKeepaliveTask.abort();
91
- this._activeKeepaliveTask = undefined;
92
- }
99
+ this._disposeKeepaliveTasks();
93
100
  this._isStopping = false;
94
101
  throw err;
95
102
  }
@@ -146,9 +153,16 @@ export class WebPubSubClient {
146
153
  else {
147
154
  this._isStopping = false;
148
155
  }
149
- if (this._activeKeepaliveTask) {
150
- this._activeKeepaliveTask.abort();
151
- this._activeKeepaliveTask = undefined;
156
+ this._disposeKeepaliveTasks();
157
+ }
158
+ _disposeKeepaliveTasks() {
159
+ if (this._pingKeepaliveTask) {
160
+ this._pingKeepaliveTask.abort();
161
+ this._pingKeepaliveTask = undefined;
162
+ }
163
+ if (this._timeoutMonitorTask) {
164
+ this._timeoutMonitorTask.abort();
165
+ this._timeoutMonitorTask = undefined;
152
166
  }
153
167
  }
154
168
  on(event, listener) {
@@ -314,6 +328,7 @@ export class WebPubSubClient {
314
328
  reject(new Error(`The client is stopped`));
315
329
  }
316
330
  logger.verbose("WebSocket connection has opened");
331
+ this._lastMessageReceived = Date.now(); // reset last message received time to avoid immediate keepalive timeout after a longer reconnection
317
332
  this._changeState(WebPubSubClientState.Connected);
318
333
  if (this._protocol.isReliableSubProtocol) {
319
334
  if (this._sequenceAckTask != null) {
@@ -419,6 +434,7 @@ export class WebPubSubClient {
419
434
  }
420
435
  this._safeEmitServerMessage(message);
421
436
  };
437
+ this._lastMessageReceived = Date.now();
422
438
  let messages;
423
439
  try {
424
440
  let convertedData;
@@ -444,6 +460,10 @@ export class WebPubSubClient {
444
460
  messages.forEach((message) => {
445
461
  try {
446
462
  switch (message.kind) {
463
+ case "pong": {
464
+ // handled in _lastMessageReceived
465
+ break;
466
+ }
447
467
  case "ack": {
448
468
  handleAckMessage(message);
449
469
  break;
@@ -517,12 +537,45 @@ export class WebPubSubClient {
517
537
  _handleConnectionStopped() {
518
538
  this._isStopping = false;
519
539
  this._state = WebPubSubClientState.Stopped;
540
+ this._disposeKeepaliveTasks();
520
541
  this._safeEmitStopped();
521
542
  }
522
- _getActiveKeepaliveTask() {
543
+ async _trySendPing() {
544
+ // skip during reconnection
545
+ if (this._state !== WebPubSubClientState.Connected || !this._wsClient?.isOpen()) {
546
+ return;
547
+ }
548
+ const message = {
549
+ kind: "ping",
550
+ };
551
+ try {
552
+ await this._sendMessage(message);
553
+ }
554
+ catch {
555
+ logger.warning("Failed to send keepalive message to the service");
556
+ }
557
+ }
558
+ async _checkKeepAliveTimeout() {
559
+ if (this._state !== WebPubSubClientState.Connected || !this._wsClient?.isOpen()) {
560
+ return;
561
+ }
562
+ const now = Date.now();
563
+ if (now - this._lastMessageReceived > this._keepAliveTimeoutInMs) {
564
+ logger.warning(`No messages received for ${now - this._lastMessageReceived} ms. Closing. The keep alive timeout is set to ${this._keepAliveTimeoutInMs} ms.`);
565
+ this._wsClient?.close();
566
+ }
567
+ }
568
+ _getPingKeepaliveTask() {
523
569
  return new AbortableTask(async () => {
524
- this._sequenceId.tryUpdate(0); // force update
525
- }, this._activeTimeoutInMs);
570
+ await this._trySendPing();
571
+ }, this._keepAliveIntervalInMs);
572
+ }
573
+ _getTimeoutMonitorTask() {
574
+ const timeout = this._keepAliveTimeoutInMs;
575
+ const checkInterval = Math.floor(timeout / 3);
576
+ return new AbortableTask(async () => {
577
+ await this._checkKeepAliveTimeout();
578
+ }, checkInterval);
526
579
  }
527
580
  async _sendMessage(message, abortSignal) {
528
581
  if (!this._wsClient || !this._wsClient.isOpen()) {
@@ -640,6 +693,18 @@ export class WebPubSubClient {
640
693
  if (clientOptions.protocol == null) {
641
694
  clientOptions.protocol = WebPubSubJsonReliableProtocol();
642
695
  }
696
+ if (clientOptions.keepAliveTimeoutInMs == null) {
697
+ clientOptions.keepAliveTimeoutInMs = 120000; // 120 seconds
698
+ }
699
+ if (clientOptions.keepAliveTimeoutInMs < 0) {
700
+ throw new RangeError("keepAliveTimeoutInMs must be greater than or equal to 0.");
701
+ }
702
+ if (clientOptions.keepAliveIntervalInMs == null) {
703
+ clientOptions.keepAliveIntervalInMs = 20000; // 20 seconds
704
+ }
705
+ if (clientOptions.keepAliveIntervalInMs < 0) {
706
+ throw new RangeError("keepAliveIntervalInMs must be greater than or equal to 0.");
707
+ }
643
708
  this._buildMessageRetryOptions(clientOptions);
644
709
  this._buildReconnectRetryOptions(clientOptions);
645
710
  return clientOptions;