@azure/web-pubsub-client 1.0.4-alpha.20251126.1 → 1.0.4-alpha.20251128.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/models/index.d.ts +15 -0
- package/dist/browser/models/index.d.ts.map +1 -1
- package/dist/browser/models/index.js.map +1 -1
- package/dist/browser/models/messages.d.ts +28 -2
- package/dist/browser/models/messages.d.ts.map +1 -1
- package/dist/browser/models/messages.js.map +1 -1
- package/dist/browser/protocols/jsonProtocolBase.d.ts.map +1 -1
- package/dist/browser/protocols/jsonProtocolBase.js +7 -0
- package/dist/browser/protocols/jsonProtocolBase.js.map +1 -1
- package/dist/browser/webPubSubClient.d.ts +10 -3
- package/dist/browser/webPubSubClient.d.ts.map +1 -1
- package/dist/browser/webPubSubClient.js +79 -14
- package/dist/browser/webPubSubClient.js.map +1 -1
- package/dist/commonjs/models/index.d.ts +15 -0
- package/dist/commonjs/models/index.d.ts.map +1 -1
- package/dist/commonjs/models/index.js.map +1 -1
- package/dist/commonjs/models/messages.d.ts +28 -2
- package/dist/commonjs/models/messages.d.ts.map +1 -1
- package/dist/commonjs/models/messages.js.map +1 -1
- package/dist/commonjs/protocols/jsonProtocolBase.d.ts.map +1 -1
- package/dist/commonjs/protocols/jsonProtocolBase.js +7 -0
- package/dist/commonjs/protocols/jsonProtocolBase.js.map +1 -1
- package/dist/commonjs/webPubSubClient.d.ts +10 -3
- package/dist/commonjs/webPubSubClient.d.ts.map +1 -1
- package/dist/commonjs/webPubSubClient.js +79 -14
- package/dist/commonjs/webPubSubClient.js.map +1 -1
- package/dist/esm/models/index.d.ts +15 -0
- package/dist/esm/models/index.d.ts.map +1 -1
- package/dist/esm/models/index.js.map +1 -1
- package/dist/esm/models/messages.d.ts +28 -2
- package/dist/esm/models/messages.d.ts.map +1 -1
- package/dist/esm/models/messages.js.map +1 -1
- package/dist/esm/protocols/jsonProtocolBase.d.ts.map +1 -1
- package/dist/esm/protocols/jsonProtocolBase.js +7 -0
- package/dist/esm/protocols/jsonProtocolBase.js.map +1 -1
- package/dist/esm/webPubSubClient.d.ts +10 -3
- package/dist/esm/webPubSubClient.d.ts.map +1 -1
- package/dist/esm/webPubSubClient.js +79 -14
- package/dist/esm/webPubSubClient.js.map +1 -1
- package/dist/react-native/models/index.d.ts +15 -0
- package/dist/react-native/models/index.d.ts.map +1 -1
- package/dist/react-native/models/index.js.map +1 -1
- package/dist/react-native/models/messages.d.ts +28 -2
- package/dist/react-native/models/messages.d.ts.map +1 -1
- package/dist/react-native/models/messages.js.map +1 -1
- package/dist/react-native/protocols/jsonProtocolBase.d.ts.map +1 -1
- package/dist/react-native/protocols/jsonProtocolBase.js +7 -0
- package/dist/react-native/protocols/jsonProtocolBase.js.map +1 -1
- package/dist/react-native/webPubSubClient.d.ts +10 -3
- package/dist/react-native/webPubSubClient.d.ts.map +1 -1
- package/dist/react-native/webPubSubClient.js +79 -14
- package/dist/react-native/webPubSubClient.js.map +1 -1
- package/package.json +1 -1
|
@@ -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":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,mBAAmB,GACnB,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,GAClB,UAAU,CAAC;
|
|
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,
|
|
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":"AAAA,uCAAuC;AACvC,kCAAkC;
|
|
1
|
+
{"version":3,"file":"jsonProtocolBase.js","sourceRoot":"","sources":["../../../src/protocols/jsonProtocolBase.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAalC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,2HAA2H;IAC3H,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,aAA8D,CAAC;IACpF,IAAI,aAA+B,CAAC;IAEpC,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnC,IAAI,YAAY,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACvC,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,WAAW,EAAsB,CAAC;QAC9E,CAAC;aAAM,IAAI,YAAY,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACjD,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,cAAc,EAAyB,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,qBAAqB;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;SAAM,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3C,IAAI,YAAY,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,QAA6B,CAAC,CAAC;YAC3F,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAsB,CAAC;QAC1F,CAAC;aAAM,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,QAA6B,CAAC,CAAC;YAC3F,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,aAAa,GAAG;gBACd,GAAG,aAAa;gBAChB,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,YAAY;aACE,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,qBAAqB;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;SAAM,IAAI,YAAY,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACvC,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,KAAK,EAAgB,CAAC;IAClE,CAAC;SAAM,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxC,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,MAAM,EAAiB,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,qBAAqB;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAyB;IACpD,IAAI,IAAS,CAAC;IACd,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,IAAI,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAmB,CAAC;YAC1F,MAAM;QACR,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,IAAI,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAoB,CAAC;YAC5F,MAAM;QACR,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,IAAI,GAAG;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;aAChC,CAAC;YACnB,MAAM;QACR,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,IAAI,GAAG;gBACL,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;gBAChD,MAAM,EAAE,OAAO,CAAC,MAAM;aACJ,CAAC;YACrB,MAAM;QACR,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,IAAI,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAqB,CAAC;YAClF,MAAM;QACR,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAc,CAAC;YACpC,MAAM;QACR,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAwCD,SAAS,UAAU,CAAC,IAA6B,EAAE,QAA2B;IAC5E,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAS,EAAE,QAAgB;IAC/C,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAc,CAAC;IACxB,CAAC;SAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,IAAiB,CAAC;IAC3B,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAc,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAgB,CAAC;IAC1F,CAAC;SAAM,CAAC;QACN,qBAAqB;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC","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
|
|
21
|
+
private readonly _keepAliveTimeoutInMs;
|
|
22
|
+
private readonly _keepAliveIntervalInMs;
|
|
22
23
|
private readonly _emitter;
|
|
23
24
|
private _state;
|
|
24
25
|
private _isStopping;
|
|
25
|
-
private
|
|
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
|
|
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":"AASA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,EAEb,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,YAAY,EAEb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAKV,iBAAiB,
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
81
|
-
this.
|
|
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
|
-
|
|
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
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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
|
-
|
|
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.
|
|
525
|
-
}, this.
|
|
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;
|