@larksuiteoapi/node-sdk 1.23.0 → 1.24.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/es/index.js CHANGED
@@ -18,6 +18,8 @@ import identity from 'lodash.identity';
18
18
  import pickBy from 'lodash.pickby';
19
19
  import fs from 'fs';
20
20
  import merge from 'lodash.merge';
21
+ import qs from 'querystring';
22
+ import WebSocket from 'ws';
21
23
 
22
24
  /******************************************************************************
23
25
  Copyright (c) Microsoft Corporation.
@@ -57146,10 +57148,11 @@ class EventDispatcher {
57146
57148
  });
57147
57149
  return this;
57148
57150
  }
57149
- invoke(data) {
57151
+ invoke(data, params) {
57150
57152
  var _a, _b;
57151
57153
  return __awaiter(this, void 0, void 0, function* () {
57152
- if (!((_a = this.requestHandle) === null || _a === void 0 ? void 0 : _a.checkIsEventValidated(data))) {
57154
+ const needCheck = get(params, 'needCheck', true);
57155
+ if (needCheck && !((_a = this.requestHandle) === null || _a === void 0 ? void 0 : _a.checkIsEventValidated(data))) {
57153
57156
  this.logger.warn('verification failed event');
57154
57157
  return undefined;
57155
57158
  }
@@ -57442,4 +57445,1100 @@ var messageCard = /*#__PURE__*/Object.freeze({
57442
57445
  defaultCard: defaultCard
57443
57446
  });
57444
57447
 
57445
- export { AESCipher, AppType, CAppTicket, CTenantAccessToken, CardActionHandler, Client, Domain, EventDispatcher, LoggerLevel, adaptDefault, adaptExpress, adaptKoa, adaptKoaRouter, defaultHttpInstance, generateChallenge, messageCard, withAll, withHelpDeskCredential, withTenantKey, withTenantToken, withUserAccessToken };
57448
+ // @ts-nocheck
57449
+ /*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
57450
+ const $protobuf = require("protobufjs/minimal");
57451
+
57452
+ $protobuf.util.Long = undefined;
57453
+ $protobuf.configure();
57454
+
57455
+ // Common aliases
57456
+ const $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
57457
+
57458
+ // Exported root namespace
57459
+ const $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
57460
+
57461
+ const pbbp2 = $root.pbbp2 = (() => {
57462
+ /**
57463
+ * Namespace pbbp2.
57464
+ * @exports pbbp2
57465
+ * @namespace
57466
+ */
57467
+ const pbbp2 = {};
57468
+
57469
+ pbbp2.Header = (function() {
57470
+
57471
+ /**
57472
+ * Properties of a Header.
57473
+ * @memberof pbbp2
57474
+ * @interface IHeader
57475
+ * @property {string} key Header key
57476
+ * @property {string} value Header value
57477
+ */
57478
+
57479
+ /**
57480
+ * Constructs a new Header.
57481
+ * @memberof pbbp2
57482
+ * @classdesc Represents a Header.
57483
+ * @implements IHeader
57484
+ * @constructor
57485
+ * @param {pbbp2.IHeader=} [properties] Properties to set
57486
+ */
57487
+ function Header(properties) {
57488
+ if (properties)
57489
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
57490
+ if (properties[keys[i]] != null)
57491
+ this[keys[i]] = properties[keys[i]];
57492
+ }
57493
+
57494
+ /**
57495
+ * Header key.
57496
+ * @member {string} key
57497
+ * @memberof pbbp2.Header
57498
+ * @instance
57499
+ */
57500
+ Header.prototype.key = "";
57501
+
57502
+ /**
57503
+ * Header value.
57504
+ * @member {string} value
57505
+ * @memberof pbbp2.Header
57506
+ * @instance
57507
+ */
57508
+ Header.prototype.value = "";
57509
+
57510
+ /**
57511
+ * Creates a new Header instance using the specified properties.
57512
+ * @function create
57513
+ * @memberof pbbp2.Header
57514
+ * @static
57515
+ * @param {pbbp2.IHeader=} [properties] Properties to set
57516
+ * @returns {pbbp2.Header} Header instance
57517
+ */
57518
+ Header.create = function create(properties) {
57519
+ return new Header(properties);
57520
+ };
57521
+
57522
+ /**
57523
+ * Encodes the specified Header message. Does not implicitly {@link pbbp2.Header.verify|verify} messages.
57524
+ * @function encode
57525
+ * @memberof pbbp2.Header
57526
+ * @static
57527
+ * @param {pbbp2.IHeader} message Header message or plain object to encode
57528
+ * @param {$protobuf.Writer} [writer] Writer to encode to
57529
+ * @returns {$protobuf.Writer} Writer
57530
+ */
57531
+ Header.encode = function encode(message, writer) {
57532
+ if (!writer)
57533
+ writer = $Writer.create();
57534
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.key);
57535
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.value);
57536
+ return writer;
57537
+ };
57538
+
57539
+ /**
57540
+ * Encodes the specified Header message, length delimited. Does not implicitly {@link pbbp2.Header.verify|verify} messages.
57541
+ * @function encodeDelimited
57542
+ * @memberof pbbp2.Header
57543
+ * @static
57544
+ * @param {pbbp2.IHeader} message Header message or plain object to encode
57545
+ * @param {$protobuf.Writer} [writer] Writer to encode to
57546
+ * @returns {$protobuf.Writer} Writer
57547
+ */
57548
+ Header.encodeDelimited = function encodeDelimited(message, writer) {
57549
+ return this.encode(message, writer).ldelim();
57550
+ };
57551
+
57552
+ /**
57553
+ * Decodes a Header message from the specified reader or buffer.
57554
+ * @function decode
57555
+ * @memberof pbbp2.Header
57556
+ * @static
57557
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
57558
+ * @param {number} [length] Message length if known beforehand
57559
+ * @returns {pbbp2.Header} Header
57560
+ * @throws {Error} If the payload is not a reader or valid buffer
57561
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
57562
+ */
57563
+ Header.decode = function decode(reader, length) {
57564
+ if (!(reader instanceof $Reader))
57565
+ reader = $Reader.create(reader);
57566
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.pbbp2.Header();
57567
+ while (reader.pos < end) {
57568
+ let tag = reader.uint32();
57569
+ switch (tag >>> 3) {
57570
+ case 1: {
57571
+ message.key = reader.string();
57572
+ break;
57573
+ }
57574
+ case 2: {
57575
+ message.value = reader.string();
57576
+ break;
57577
+ }
57578
+ default:
57579
+ reader.skipType(tag & 7);
57580
+ break;
57581
+ }
57582
+ }
57583
+ if (!message.hasOwnProperty("key"))
57584
+ throw $util.ProtocolError("missing required 'key'", { instance: message });
57585
+ if (!message.hasOwnProperty("value"))
57586
+ throw $util.ProtocolError("missing required 'value'", { instance: message });
57587
+ return message;
57588
+ };
57589
+
57590
+ /**
57591
+ * Decodes a Header message from the specified reader or buffer, length delimited.
57592
+ * @function decodeDelimited
57593
+ * @memberof pbbp2.Header
57594
+ * @static
57595
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
57596
+ * @returns {pbbp2.Header} Header
57597
+ * @throws {Error} If the payload is not a reader or valid buffer
57598
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
57599
+ */
57600
+ Header.decodeDelimited = function decodeDelimited(reader) {
57601
+ if (!(reader instanceof $Reader))
57602
+ reader = new $Reader(reader);
57603
+ return this.decode(reader, reader.uint32());
57604
+ };
57605
+
57606
+ /**
57607
+ * Verifies a Header message.
57608
+ * @function verify
57609
+ * @memberof pbbp2.Header
57610
+ * @static
57611
+ * @param {Object.<string,*>} message Plain object to verify
57612
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
57613
+ */
57614
+ Header.verify = function verify(message) {
57615
+ if (typeof message !== "object" || message === null)
57616
+ return "object expected";
57617
+ if (!$util.isString(message.key))
57618
+ return "key: string expected";
57619
+ if (!$util.isString(message.value))
57620
+ return "value: string expected";
57621
+ return null;
57622
+ };
57623
+
57624
+ /**
57625
+ * Creates a Header message from a plain object. Also converts values to their respective internal types.
57626
+ * @function fromObject
57627
+ * @memberof pbbp2.Header
57628
+ * @static
57629
+ * @param {Object.<string,*>} object Plain object
57630
+ * @returns {pbbp2.Header} Header
57631
+ */
57632
+ Header.fromObject = function fromObject(object) {
57633
+ if (object instanceof $root.pbbp2.Header)
57634
+ return object;
57635
+ let message = new $root.pbbp2.Header();
57636
+ if (object.key != null)
57637
+ message.key = String(object.key);
57638
+ if (object.value != null)
57639
+ message.value = String(object.value);
57640
+ return message;
57641
+ };
57642
+
57643
+ /**
57644
+ * Creates a plain object from a Header message. Also converts values to other types if specified.
57645
+ * @function toObject
57646
+ * @memberof pbbp2.Header
57647
+ * @static
57648
+ * @param {pbbp2.Header} message Header
57649
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
57650
+ * @returns {Object.<string,*>} Plain object
57651
+ */
57652
+ Header.toObject = function toObject(message, options) {
57653
+ if (!options)
57654
+ options = {};
57655
+ let object = {};
57656
+ if (options.defaults) {
57657
+ object.key = "";
57658
+ object.value = "";
57659
+ }
57660
+ if (message.key != null && message.hasOwnProperty("key"))
57661
+ object.key = message.key;
57662
+ if (message.value != null && message.hasOwnProperty("value"))
57663
+ object.value = message.value;
57664
+ return object;
57665
+ };
57666
+
57667
+ /**
57668
+ * Converts this Header to JSON.
57669
+ * @function toJSON
57670
+ * @memberof pbbp2.Header
57671
+ * @instance
57672
+ * @returns {Object.<string,*>} JSON object
57673
+ */
57674
+ Header.prototype.toJSON = function toJSON() {
57675
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
57676
+ };
57677
+
57678
+ /**
57679
+ * Gets the default type url for Header
57680
+ * @function getTypeUrl
57681
+ * @memberof pbbp2.Header
57682
+ * @static
57683
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
57684
+ * @returns {string} The default type url
57685
+ */
57686
+ Header.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
57687
+ if (typeUrlPrefix === undefined) {
57688
+ typeUrlPrefix = "type.googleapis.com";
57689
+ }
57690
+ return typeUrlPrefix + "/pbbp2.Header";
57691
+ };
57692
+
57693
+ return Header;
57694
+ })();
57695
+
57696
+ pbbp2.Frame = (function() {
57697
+
57698
+ /**
57699
+ * Properties of a Frame.
57700
+ * @memberof pbbp2
57701
+ * @interface IFrame
57702
+ * @property {number} SeqID Frame SeqID
57703
+ * @property {number} LogID Frame LogID
57704
+ * @property {number} service Frame service
57705
+ * @property {number} method Frame method
57706
+ * @property {Array.<pbbp2.IHeader>|null} [headers] Frame headers
57707
+ * @property {string|null} [payloadEncoding] Frame payloadEncoding
57708
+ * @property {string|null} [payloadType] Frame payloadType
57709
+ * @property {Uint8Array|null} [payload] Frame payload
57710
+ * @property {string|null} [LogIDNew] Frame LogIDNew
57711
+ */
57712
+
57713
+ /**
57714
+ * Constructs a new Frame.
57715
+ * @memberof pbbp2
57716
+ * @classdesc Represents a Frame.
57717
+ * @implements IFrame
57718
+ * @constructor
57719
+ * @param {pbbp2.IFrame=} [properties] Properties to set
57720
+ */
57721
+ function Frame(properties) {
57722
+ this.headers = [];
57723
+ if (properties)
57724
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
57725
+ if (properties[keys[i]] != null)
57726
+ this[keys[i]] = properties[keys[i]];
57727
+ }
57728
+
57729
+ /**
57730
+ * Frame SeqID.
57731
+ * @member {number} SeqID
57732
+ * @memberof pbbp2.Frame
57733
+ * @instance
57734
+ */
57735
+ Frame.prototype.SeqID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
57736
+
57737
+ /**
57738
+ * Frame LogID.
57739
+ * @member {number} LogID
57740
+ * @memberof pbbp2.Frame
57741
+ * @instance
57742
+ */
57743
+ Frame.prototype.LogID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
57744
+
57745
+ /**
57746
+ * Frame service.
57747
+ * @member {number} service
57748
+ * @memberof pbbp2.Frame
57749
+ * @instance
57750
+ */
57751
+ Frame.prototype.service = 0;
57752
+
57753
+ /**
57754
+ * Frame method.
57755
+ * @member {number} method
57756
+ * @memberof pbbp2.Frame
57757
+ * @instance
57758
+ */
57759
+ Frame.prototype.method = 0;
57760
+
57761
+ /**
57762
+ * Frame headers.
57763
+ * @member {Array.<pbbp2.IHeader>} headers
57764
+ * @memberof pbbp2.Frame
57765
+ * @instance
57766
+ */
57767
+ Frame.prototype.headers = $util.emptyArray;
57768
+
57769
+ /**
57770
+ * Frame payloadEncoding.
57771
+ * @member {string} payloadEncoding
57772
+ * @memberof pbbp2.Frame
57773
+ * @instance
57774
+ */
57775
+ Frame.prototype.payloadEncoding = "";
57776
+
57777
+ /**
57778
+ * Frame payloadType.
57779
+ * @member {string} payloadType
57780
+ * @memberof pbbp2.Frame
57781
+ * @instance
57782
+ */
57783
+ Frame.prototype.payloadType = "";
57784
+
57785
+ /**
57786
+ * Frame payload.
57787
+ * @member {Uint8Array} payload
57788
+ * @memberof pbbp2.Frame
57789
+ * @instance
57790
+ */
57791
+ Frame.prototype.payload = $util.newBuffer([]);
57792
+
57793
+ /**
57794
+ * Frame LogIDNew.
57795
+ * @member {string} LogIDNew
57796
+ * @memberof pbbp2.Frame
57797
+ * @instance
57798
+ */
57799
+ Frame.prototype.LogIDNew = "";
57800
+
57801
+ /**
57802
+ * Creates a new Frame instance using the specified properties.
57803
+ * @function create
57804
+ * @memberof pbbp2.Frame
57805
+ * @static
57806
+ * @param {pbbp2.IFrame=} [properties] Properties to set
57807
+ * @returns {pbbp2.Frame} Frame instance
57808
+ */
57809
+ Frame.create = function create(properties) {
57810
+ return new Frame(properties);
57811
+ };
57812
+
57813
+ /**
57814
+ * Encodes the specified Frame message. Does not implicitly {@link pbbp2.Frame.verify|verify} messages.
57815
+ * @function encode
57816
+ * @memberof pbbp2.Frame
57817
+ * @static
57818
+ * @param {pbbp2.IFrame} message Frame message or plain object to encode
57819
+ * @param {$protobuf.Writer} [writer] Writer to encode to
57820
+ * @returns {$protobuf.Writer} Writer
57821
+ */
57822
+ Frame.encode = function encode(message, writer) {
57823
+ if (!writer)
57824
+ writer = $Writer.create();
57825
+ writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.SeqID);
57826
+ writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.LogID);
57827
+ writer.uint32(/* id 3, wireType 0 =*/24).int32(message.service);
57828
+ writer.uint32(/* id 4, wireType 0 =*/32).int32(message.method);
57829
+ if (message.headers != null && message.headers.length)
57830
+ for (let i = 0; i < message.headers.length; ++i)
57831
+ $root.pbbp2.Header.encode(message.headers[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
57832
+ if (message.payloadEncoding != null && Object.hasOwnProperty.call(message, "payloadEncoding"))
57833
+ writer.uint32(/* id 6, wireType 2 =*/50).string(message.payloadEncoding);
57834
+ if (message.payloadType != null && Object.hasOwnProperty.call(message, "payloadType"))
57835
+ writer.uint32(/* id 7, wireType 2 =*/58).string(message.payloadType);
57836
+ if (message.payload != null && Object.hasOwnProperty.call(message, "payload"))
57837
+ writer.uint32(/* id 8, wireType 2 =*/66).bytes(message.payload);
57838
+ if (message.LogIDNew != null && Object.hasOwnProperty.call(message, "LogIDNew"))
57839
+ writer.uint32(/* id 9, wireType 2 =*/74).string(message.LogIDNew);
57840
+ return writer;
57841
+ };
57842
+
57843
+ /**
57844
+ * Encodes the specified Frame message, length delimited. Does not implicitly {@link pbbp2.Frame.verify|verify} messages.
57845
+ * @function encodeDelimited
57846
+ * @memberof pbbp2.Frame
57847
+ * @static
57848
+ * @param {pbbp2.IFrame} message Frame message or plain object to encode
57849
+ * @param {$protobuf.Writer} [writer] Writer to encode to
57850
+ * @returns {$protobuf.Writer} Writer
57851
+ */
57852
+ Frame.encodeDelimited = function encodeDelimited(message, writer) {
57853
+ return this.encode(message, writer).ldelim();
57854
+ };
57855
+
57856
+ /**
57857
+ * Decodes a Frame message from the specified reader or buffer.
57858
+ * @function decode
57859
+ * @memberof pbbp2.Frame
57860
+ * @static
57861
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
57862
+ * @param {number} [length] Message length if known beforehand
57863
+ * @returns {pbbp2.Frame} Frame
57864
+ * @throws {Error} If the payload is not a reader or valid buffer
57865
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
57866
+ */
57867
+ Frame.decode = function decode(reader, length) {
57868
+ if (!(reader instanceof $Reader))
57869
+ reader = $Reader.create(reader);
57870
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.pbbp2.Frame();
57871
+ while (reader.pos < end) {
57872
+ let tag = reader.uint32();
57873
+ switch (tag >>> 3) {
57874
+ case 1: {
57875
+ message.SeqID = reader.uint64();
57876
+ break;
57877
+ }
57878
+ case 2: {
57879
+ message.LogID = reader.uint64();
57880
+ break;
57881
+ }
57882
+ case 3: {
57883
+ message.service = reader.int32();
57884
+ break;
57885
+ }
57886
+ case 4: {
57887
+ message.method = reader.int32();
57888
+ break;
57889
+ }
57890
+ case 5: {
57891
+ if (!(message.headers && message.headers.length))
57892
+ message.headers = [];
57893
+ message.headers.push($root.pbbp2.Header.decode(reader, reader.uint32()));
57894
+ break;
57895
+ }
57896
+ case 6: {
57897
+ message.payloadEncoding = reader.string();
57898
+ break;
57899
+ }
57900
+ case 7: {
57901
+ message.payloadType = reader.string();
57902
+ break;
57903
+ }
57904
+ case 8: {
57905
+ message.payload = reader.bytes();
57906
+ break;
57907
+ }
57908
+ case 9: {
57909
+ message.LogIDNew = reader.string();
57910
+ break;
57911
+ }
57912
+ default:
57913
+ reader.skipType(tag & 7);
57914
+ break;
57915
+ }
57916
+ }
57917
+ if (!message.hasOwnProperty("SeqID"))
57918
+ throw $util.ProtocolError("missing required 'SeqID'", { instance: message });
57919
+ if (!message.hasOwnProperty("LogID"))
57920
+ throw $util.ProtocolError("missing required 'LogID'", { instance: message });
57921
+ if (!message.hasOwnProperty("service"))
57922
+ throw $util.ProtocolError("missing required 'service'", { instance: message });
57923
+ if (!message.hasOwnProperty("method"))
57924
+ throw $util.ProtocolError("missing required 'method'", { instance: message });
57925
+ return message;
57926
+ };
57927
+
57928
+ /**
57929
+ * Decodes a Frame message from the specified reader or buffer, length delimited.
57930
+ * @function decodeDelimited
57931
+ * @memberof pbbp2.Frame
57932
+ * @static
57933
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
57934
+ * @returns {pbbp2.Frame} Frame
57935
+ * @throws {Error} If the payload is not a reader or valid buffer
57936
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
57937
+ */
57938
+ Frame.decodeDelimited = function decodeDelimited(reader) {
57939
+ if (!(reader instanceof $Reader))
57940
+ reader = new $Reader(reader);
57941
+ return this.decode(reader, reader.uint32());
57942
+ };
57943
+
57944
+ /**
57945
+ * Verifies a Frame message.
57946
+ * @function verify
57947
+ * @memberof pbbp2.Frame
57948
+ * @static
57949
+ * @param {Object.<string,*>} message Plain object to verify
57950
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
57951
+ */
57952
+ Frame.verify = function verify(message) {
57953
+ if (typeof message !== "object" || message === null)
57954
+ return "object expected";
57955
+ if (!$util.isInteger(message.SeqID) && !(message.SeqID && $util.isInteger(message.SeqID.low) && $util.isInteger(message.SeqID.high)))
57956
+ return "SeqID: integer|Long expected";
57957
+ if (!$util.isInteger(message.LogID) && !(message.LogID && $util.isInteger(message.LogID.low) && $util.isInteger(message.LogID.high)))
57958
+ return "LogID: integer|Long expected";
57959
+ if (!$util.isInteger(message.service))
57960
+ return "service: integer expected";
57961
+ if (!$util.isInteger(message.method))
57962
+ return "method: integer expected";
57963
+ if (message.headers != null && message.hasOwnProperty("headers")) {
57964
+ if (!Array.isArray(message.headers))
57965
+ return "headers: array expected";
57966
+ for (let i = 0; i < message.headers.length; ++i) {
57967
+ let error = $root.pbbp2.Header.verify(message.headers[i]);
57968
+ if (error)
57969
+ return "headers." + error;
57970
+ }
57971
+ }
57972
+ if (message.payloadEncoding != null && message.hasOwnProperty("payloadEncoding"))
57973
+ if (!$util.isString(message.payloadEncoding))
57974
+ return "payloadEncoding: string expected";
57975
+ if (message.payloadType != null && message.hasOwnProperty("payloadType"))
57976
+ if (!$util.isString(message.payloadType))
57977
+ return "payloadType: string expected";
57978
+ if (message.payload != null && message.hasOwnProperty("payload"))
57979
+ if (!(message.payload && typeof message.payload.length === "number" || $util.isString(message.payload)))
57980
+ return "payload: buffer expected";
57981
+ if (message.LogIDNew != null && message.hasOwnProperty("LogIDNew"))
57982
+ if (!$util.isString(message.LogIDNew))
57983
+ return "LogIDNew: string expected";
57984
+ return null;
57985
+ };
57986
+
57987
+ /**
57988
+ * Creates a Frame message from a plain object. Also converts values to their respective internal types.
57989
+ * @function fromObject
57990
+ * @memberof pbbp2.Frame
57991
+ * @static
57992
+ * @param {Object.<string,*>} object Plain object
57993
+ * @returns {pbbp2.Frame} Frame
57994
+ */
57995
+ Frame.fromObject = function fromObject(object) {
57996
+ if (object instanceof $root.pbbp2.Frame)
57997
+ return object;
57998
+ let message = new $root.pbbp2.Frame();
57999
+ if (object.SeqID != null)
58000
+ if ($util.Long)
58001
+ (message.SeqID = $util.Long.fromValue(object.SeqID)).unsigned = true;
58002
+ else if (typeof object.SeqID === "string")
58003
+ message.SeqID = parseInt(object.SeqID, 10);
58004
+ else if (typeof object.SeqID === "number")
58005
+ message.SeqID = object.SeqID;
58006
+ else if (typeof object.SeqID === "object")
58007
+ message.SeqID = new $util.LongBits(object.SeqID.low >>> 0, object.SeqID.high >>> 0).toNumber(true);
58008
+ if (object.LogID != null)
58009
+ if ($util.Long)
58010
+ (message.LogID = $util.Long.fromValue(object.LogID)).unsigned = true;
58011
+ else if (typeof object.LogID === "string")
58012
+ message.LogID = parseInt(object.LogID, 10);
58013
+ else if (typeof object.LogID === "number")
58014
+ message.LogID = object.LogID;
58015
+ else if (typeof object.LogID === "object")
58016
+ message.LogID = new $util.LongBits(object.LogID.low >>> 0, object.LogID.high >>> 0).toNumber(true);
58017
+ if (object.service != null)
58018
+ message.service = object.service | 0;
58019
+ if (object.method != null)
58020
+ message.method = object.method | 0;
58021
+ if (object.headers) {
58022
+ if (!Array.isArray(object.headers))
58023
+ throw TypeError(".pbbp2.Frame.headers: array expected");
58024
+ message.headers = [];
58025
+ for (let i = 0; i < object.headers.length; ++i) {
58026
+ if (typeof object.headers[i] !== "object")
58027
+ throw TypeError(".pbbp2.Frame.headers: object expected");
58028
+ message.headers[i] = $root.pbbp2.Header.fromObject(object.headers[i]);
58029
+ }
58030
+ }
58031
+ if (object.payloadEncoding != null)
58032
+ message.payloadEncoding = String(object.payloadEncoding);
58033
+ if (object.payloadType != null)
58034
+ message.payloadType = String(object.payloadType);
58035
+ if (object.payload != null)
58036
+ if (typeof object.payload === "string")
58037
+ $util.base64.decode(object.payload, message.payload = $util.newBuffer($util.base64.length(object.payload)), 0);
58038
+ else if (object.payload.length >= 0)
58039
+ message.payload = object.payload;
58040
+ if (object.LogIDNew != null)
58041
+ message.LogIDNew = String(object.LogIDNew);
58042
+ return message;
58043
+ };
58044
+
58045
+ /**
58046
+ * Creates a plain object from a Frame message. Also converts values to other types if specified.
58047
+ * @function toObject
58048
+ * @memberof pbbp2.Frame
58049
+ * @static
58050
+ * @param {pbbp2.Frame} message Frame
58051
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
58052
+ * @returns {Object.<string,*>} Plain object
58053
+ */
58054
+ Frame.toObject = function toObject(message, options) {
58055
+ if (!options)
58056
+ options = {};
58057
+ let object = {};
58058
+ if (options.arrays || options.defaults)
58059
+ object.headers = [];
58060
+ if (options.defaults) {
58061
+ if ($util.Long) {
58062
+ let long = new $util.Long(0, 0, true);
58063
+ object.SeqID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
58064
+ } else
58065
+ object.SeqID = options.longs === String ? "0" : 0;
58066
+ if ($util.Long) {
58067
+ let long = new $util.Long(0, 0, true);
58068
+ object.LogID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
58069
+ } else
58070
+ object.LogID = options.longs === String ? "0" : 0;
58071
+ object.service = 0;
58072
+ object.method = 0;
58073
+ object.payloadEncoding = "";
58074
+ object.payloadType = "";
58075
+ if (options.bytes === String)
58076
+ object.payload = "";
58077
+ else {
58078
+ object.payload = [];
58079
+ if (options.bytes !== Array)
58080
+ object.payload = $util.newBuffer(object.payload);
58081
+ }
58082
+ object.LogIDNew = "";
58083
+ }
58084
+ if (message.SeqID != null && message.hasOwnProperty("SeqID"))
58085
+ if (typeof message.SeqID === "number")
58086
+ object.SeqID = options.longs === String ? String(message.SeqID) : message.SeqID;
58087
+ else
58088
+ object.SeqID = options.longs === String ? $util.Long.prototype.toString.call(message.SeqID) : options.longs === Number ? new $util.LongBits(message.SeqID.low >>> 0, message.SeqID.high >>> 0).toNumber(true) : message.SeqID;
58089
+ if (message.LogID != null && message.hasOwnProperty("LogID"))
58090
+ if (typeof message.LogID === "number")
58091
+ object.LogID = options.longs === String ? String(message.LogID) : message.LogID;
58092
+ else
58093
+ object.LogID = options.longs === String ? $util.Long.prototype.toString.call(message.LogID) : options.longs === Number ? new $util.LongBits(message.LogID.low >>> 0, message.LogID.high >>> 0).toNumber(true) : message.LogID;
58094
+ if (message.service != null && message.hasOwnProperty("service"))
58095
+ object.service = message.service;
58096
+ if (message.method != null && message.hasOwnProperty("method"))
58097
+ object.method = message.method;
58098
+ if (message.headers && message.headers.length) {
58099
+ object.headers = [];
58100
+ for (let j = 0; j < message.headers.length; ++j)
58101
+ object.headers[j] = $root.pbbp2.Header.toObject(message.headers[j], options);
58102
+ }
58103
+ if (message.payloadEncoding != null && message.hasOwnProperty("payloadEncoding"))
58104
+ object.payloadEncoding = message.payloadEncoding;
58105
+ if (message.payloadType != null && message.hasOwnProperty("payloadType"))
58106
+ object.payloadType = message.payloadType;
58107
+ if (message.payload != null && message.hasOwnProperty("payload"))
58108
+ object.payload = options.bytes === String ? $util.base64.encode(message.payload, 0, message.payload.length) : options.bytes === Array ? Array.prototype.slice.call(message.payload) : message.payload;
58109
+ if (message.LogIDNew != null && message.hasOwnProperty("LogIDNew"))
58110
+ object.LogIDNew = message.LogIDNew;
58111
+ return object;
58112
+ };
58113
+
58114
+ /**
58115
+ * Converts this Frame to JSON.
58116
+ * @function toJSON
58117
+ * @memberof pbbp2.Frame
58118
+ * @instance
58119
+ * @returns {Object.<string,*>} JSON object
58120
+ */
58121
+ Frame.prototype.toJSON = function toJSON() {
58122
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
58123
+ };
58124
+
58125
+ /**
58126
+ * Gets the default type url for Frame
58127
+ * @function getTypeUrl
58128
+ * @memberof pbbp2.Frame
58129
+ * @static
58130
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
58131
+ * @returns {string} The default type url
58132
+ */
58133
+ Frame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
58134
+ if (typeUrlPrefix === undefined) {
58135
+ typeUrlPrefix = "type.googleapis.com";
58136
+ }
58137
+ return typeUrlPrefix + "/pbbp2.Frame";
58138
+ };
58139
+
58140
+ return Frame;
58141
+ })();
58142
+
58143
+ return pbbp2;
58144
+ })();
58145
+
58146
+ const decode = (buffer) => {
58147
+ return pbbp2.Frame.decode(buffer);
58148
+ };
58149
+
58150
+ class WSConfig {
58151
+ constructor() {
58152
+ this.client = {
58153
+ appId: '',
58154
+ appSecret: '',
58155
+ domain: Domain.Feishu,
58156
+ };
58157
+ this.ws = {
58158
+ connectUrl: '',
58159
+ pingInterval: 120,
58160
+ reconnectCount: -1,
58161
+ reconnectInterval: 120,
58162
+ reconnectNonce: 30,
58163
+ deviceId: '',
58164
+ serviceId: '',
58165
+ autoReconnect: true
58166
+ };
58167
+ this.wsInstance = null;
58168
+ }
58169
+ updateClient(clientConfig) {
58170
+ Object.assign(this.client, clientConfig);
58171
+ }
58172
+ updateWs(WSConfig) {
58173
+ Object.assign(this.ws, WSConfig);
58174
+ }
58175
+ getClient(key) {
58176
+ if (key === undefined) {
58177
+ return this.client;
58178
+ }
58179
+ return this.client[key];
58180
+ }
58181
+ getWS(key) {
58182
+ if (key === undefined) {
58183
+ return this.ws;
58184
+ }
58185
+ return this.ws[key];
58186
+ }
58187
+ get wsConfigUrl() {
58188
+ return `${this.getClient("domain")}/callback/ws/endpoint`;
58189
+ }
58190
+ setWSInstance(wsInstance) {
58191
+ this.wsInstance = wsInstance;
58192
+ }
58193
+ getWSInstance() {
58194
+ return this.wsInstance;
58195
+ }
58196
+ }
58197
+
58198
+ class DataCache {
58199
+ constructor(params) {
58200
+ this.cache = new Map();
58201
+ this.logger = params.logger;
58202
+ this.clearAtInterval();
58203
+ }
58204
+ mergeData(params) {
58205
+ const { message_id, sum, seq, trace_id, data } = params;
58206
+ const cache = this.cache.get(message_id);
58207
+ if (!cache) {
58208
+ const buffer = new Array(sum).fill(undefined);
58209
+ buffer[seq] = data;
58210
+ this.cache.set(message_id, {
58211
+ buffer,
58212
+ trace_id,
58213
+ message_id,
58214
+ create_time: Date.now()
58215
+ });
58216
+ }
58217
+ else {
58218
+ cache.buffer[seq] = data;
58219
+ }
58220
+ const mergedCache = this.cache.get(message_id);
58221
+ if (mergedCache === null || mergedCache === void 0 ? void 0 : mergedCache.buffer.every(item => !!item)) {
58222
+ const mergedBuffer = mergedCache.buffer.reduce((acc, cur) => {
58223
+ const combined = new Uint8Array(acc.byteLength + cur.byteLength);
58224
+ combined.set(acc, 0);
58225
+ combined.set(cur, acc.length);
58226
+ return combined;
58227
+ }, new Uint8Array([]));
58228
+ const string = new TextDecoder("utf-8").decode(mergedBuffer);
58229
+ const data = JSON.parse(string);
58230
+ this.deleteCache(message_id);
58231
+ return data;
58232
+ }
58233
+ return null;
58234
+ }
58235
+ deleteCache(message_id) {
58236
+ this.cache.delete(message_id);
58237
+ }
58238
+ clearAtInterval() {
58239
+ // magic number,10s expired
58240
+ const clearIntervalMs = 10000;
58241
+ setInterval(() => {
58242
+ const now = Date.now();
58243
+ this.cache.forEach((value, key) => {
58244
+ var _a;
58245
+ const { create_time, trace_id, message_id } = value;
58246
+ if (now - create_time > clearIntervalMs) {
58247
+ (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug(`${message_id} event data is deleted as expired, trace_id: ${trace_id}`);
58248
+ this.deleteCache(key);
58249
+ }
58250
+ });
58251
+ }, clearIntervalMs);
58252
+ }
58253
+ }
58254
+
58255
+ var ErrorCode;
58256
+ (function (ErrorCode) {
58257
+ ErrorCode[ErrorCode["ok"] = 0] = "ok";
58258
+ ErrorCode[ErrorCode["system_busy"] = 1] = "system_busy";
58259
+ ErrorCode[ErrorCode["forbidden"] = 403] = "forbidden";
58260
+ ErrorCode[ErrorCode["auth_failed"] = 514] = "auth_failed";
58261
+ ErrorCode[ErrorCode["internal_error"] = 1000040343] = "internal_error";
58262
+ ErrorCode[ErrorCode["exceed_conn_limit"] = 1000040350] = "exceed_conn_limit";
58263
+ })(ErrorCode || (ErrorCode = {}));
58264
+ var FrameType;
58265
+ (function (FrameType) {
58266
+ FrameType[FrameType["control"] = 0] = "control";
58267
+ FrameType[FrameType["data"] = 1] = "data";
58268
+ })(FrameType || (FrameType = {}));
58269
+ var HeaderKey;
58270
+ (function (HeaderKey) {
58271
+ HeaderKey["type"] = "type";
58272
+ HeaderKey["message_id"] = "message_id";
58273
+ HeaderKey["sum"] = "sum";
58274
+ HeaderKey["seq"] = "seq";
58275
+ HeaderKey["trace_id"] = "trace_id";
58276
+ HeaderKey["biz_rt"] = "biz_rt";
58277
+ HeaderKey["handshake_status"] = "handshake-status";
58278
+ HeaderKey["handshake_msg"] = "handshake-msg";
58279
+ HeaderKey["handshake_autherrcode"] = "handshake-autherrcode";
58280
+ })(HeaderKey || (HeaderKey = {}));
58281
+ var MessageType;
58282
+ (function (MessageType) {
58283
+ MessageType["event"] = "event";
58284
+ MessageType["card"] = "card";
58285
+ MessageType["ping"] = "ping";
58286
+ MessageType["pong"] = "pong";
58287
+ })(MessageType || (MessageType = {}));
58288
+
58289
+ class WSClient {
58290
+ constructor(params) {
58291
+ this.wsConfig = new WSConfig();
58292
+ const { appId, appSecret, domain = Domain.Feishu, httpInstance = defaultHttpInstance, loggerLevel = LoggerLevel.info, logger = defaultLogger, autoReconnect = true } = params;
58293
+ this.logger = new LoggerProxy(loggerLevel, logger);
58294
+ assert(!appId, () => this.logger.error('appId is needed'));
58295
+ assert(!appSecret, () => this.logger.error('appSecret is needed'));
58296
+ this.dataCache = new DataCache({ logger: this.logger });
58297
+ this.httpInstance = httpInstance;
58298
+ this.wsConfig.updateClient({
58299
+ appId,
58300
+ appSecret,
58301
+ domain: formatDomain(domain),
58302
+ });
58303
+ this.wsConfig.updateWs({
58304
+ autoReconnect
58305
+ });
58306
+ }
58307
+ pullConnectConfig() {
58308
+ return __awaiter(this, void 0, void 0, function* () {
58309
+ const { appId, appSecret } = this.wsConfig.getClient();
58310
+ try {
58311
+ const { code, data: { URL, ClientConfig }, msg } = yield this.httpInstance.request({
58312
+ method: "post",
58313
+ url: this.wsConfig.wsConfigUrl,
58314
+ data: {
58315
+ AppID: appId,
58316
+ AppSecret: appSecret
58317
+ },
58318
+ // consumed by gateway
58319
+ headers: {
58320
+ "locale": "zh",
58321
+ }
58322
+ });
58323
+ if (code !== ErrorCode.ok) {
58324
+ this.logger.error('[ws]', `code: ${code}, ${code === ErrorCode.system_busy ? msg : 'system busy'}`);
58325
+ if (code === ErrorCode.system_busy || code === ErrorCode.internal_error) {
58326
+ return false;
58327
+ }
58328
+ }
58329
+ const { device_id, service_id } = qs.parse(URL);
58330
+ this.wsConfig.updateWs({
58331
+ connectUrl: URL,
58332
+ deviceId: device_id,
58333
+ serviceId: service_id,
58334
+ pingInterval: ClientConfig.PingInterval,
58335
+ reconnectCount: ClientConfig.ReconnectCount,
58336
+ reconnectInterval: ClientConfig.ReconnectInterval,
58337
+ reconnectNonce: ClientConfig.ReconnectNonce
58338
+ });
58339
+ this.logger.debug('[ws]', `get connect config success, ws url: ${URL}`);
58340
+ return true;
58341
+ }
58342
+ catch (e) {
58343
+ this.logger.error('[ws]', get(e, 'message', 'system busy'));
58344
+ return false;
58345
+ }
58346
+ });
58347
+ }
58348
+ connect() {
58349
+ const connectUrl = this.wsConfig.getWS('connectUrl');
58350
+ const wsInstance = new WebSocket(connectUrl);
58351
+ return new Promise((resolve) => {
58352
+ wsInstance.on('open', () => {
58353
+ this.logger.debug('[ws]', 'ws connect success');
58354
+ this.wsConfig.setWSInstance(wsInstance);
58355
+ this.pingLoop();
58356
+ resolve(true);
58357
+ });
58358
+ wsInstance.on('error', () => {
58359
+ this.logger.error('[ws]', 'ws connect failed');
58360
+ resolve(false);
58361
+ });
58362
+ });
58363
+ }
58364
+ reConnect(isStart = false) {
58365
+ return __awaiter(this, void 0, void 0, function* () {
58366
+ const tryConnect = () => {
58367
+ return this.pullConnectConfig()
58368
+ .then(isSuccess => isSuccess ? this.connect() : Promise.resolve(false))
58369
+ .then(isSuccess => {
58370
+ if (isSuccess) {
58371
+ this.communicate();
58372
+ return Promise.resolve(true);
58373
+ }
58374
+ return Promise.resolve(false);
58375
+ });
58376
+ };
58377
+ if (isStart) {
58378
+ const isSuccess = yield tryConnect();
58379
+ if (!isSuccess) {
58380
+ this.logger.error('[ws]', 'connect failed');
58381
+ yield this.reConnect();
58382
+ }
58383
+ this.logger.info('[ws]', 'ws client ready');
58384
+ return;
58385
+ }
58386
+ const wsInstance = this.wsConfig.getWSInstance();
58387
+ const { autoReconnect, reconnectNonce, reconnectCount, reconnectInterval } = this.wsConfig.getWS();
58388
+ if (!autoReconnect) {
58389
+ return;
58390
+ }
58391
+ this.logger.info('[ws]', 'reconnect');
58392
+ if (wsInstance) {
58393
+ wsInstance === null || wsInstance === void 0 ? void 0 : wsInstance.terminate();
58394
+ }
58395
+ this.wsConfig.setWSInstance(null);
58396
+ setTimeout(() => __awaiter(this, void 0, void 0, function* () {
58397
+ (function loopReConnect(count) {
58398
+ return __awaiter(this, void 0, void 0, function* () {
58399
+ count++;
58400
+ const isSuccess = yield tryConnect();
58401
+ // if reconnectCount < 0, the reconnect time is infinite
58402
+ if (isSuccess) {
58403
+ this.logger.debug('[ws]', 'reconnect success');
58404
+ return;
58405
+ }
58406
+ this.logger.info('ws', `unable to connect to the server after trying ${count} times")`);
58407
+ if (reconnectCount >= 0 && count >= reconnectCount) {
58408
+ return;
58409
+ }
58410
+ setTimeout(() => {
58411
+ loopReConnect.bind(this)(count);
58412
+ }, reconnectInterval);
58413
+ });
58414
+ }).bind(this)(0);
58415
+ }), reconnectNonce ? reconnectNonce * Math.random() : 0);
58416
+ });
58417
+ }
58418
+ pingLoop() {
58419
+ const { serviceId, pingInterval } = this.wsConfig.getWS();
58420
+ const wsInstance = this.wsConfig.getWSInstance();
58421
+ if ((wsInstance === null || wsInstance === void 0 ? void 0 : wsInstance.readyState) === WebSocket.OPEN) {
58422
+ const frame = {
58423
+ headers: [{
58424
+ key: HeaderKey.type,
58425
+ value: MessageType.ping
58426
+ }],
58427
+ service: Number(serviceId),
58428
+ method: FrameType.control,
58429
+ SeqID: 0,
58430
+ LogID: 0
58431
+ };
58432
+ this.sendMessage(frame);
58433
+ this.logger.trace('[ws]', 'ping success');
58434
+ }
58435
+ setTimeout(this.pingLoop.bind(this), pingInterval);
58436
+ }
58437
+ communicate() {
58438
+ const wsInstance = this.wsConfig.getWSInstance();
58439
+ wsInstance === null || wsInstance === void 0 ? void 0 : wsInstance.on('message', (buffer) => __awaiter(this, void 0, void 0, function* () {
58440
+ const data = decode(buffer);
58441
+ const { method } = data;
58442
+ if (method === FrameType.control) {
58443
+ yield this.handleControlData(data);
58444
+ }
58445
+ if (method === FrameType.data) {
58446
+ yield this.handleEventData(data);
58447
+ }
58448
+ }));
58449
+ wsInstance === null || wsInstance === void 0 ? void 0 : wsInstance.on('error', (e) => {
58450
+ this.logger.error('[ws]', 'ws error');
58451
+ });
58452
+ wsInstance === null || wsInstance === void 0 ? void 0 : wsInstance.on('close', () => {
58453
+ this.logger.debug('[ws]', 'client closed');
58454
+ this.reConnect();
58455
+ });
58456
+ }
58457
+ handleControlData(data) {
58458
+ var _a;
58459
+ return __awaiter(this, void 0, void 0, function* () {
58460
+ const type = (_a = data.headers.find(item => item.key === HeaderKey.type)) === null || _a === void 0 ? void 0 : _a.value;
58461
+ const payload = data.payload;
58462
+ if (type === MessageType.ping) {
58463
+ return;
58464
+ }
58465
+ if (type === MessageType.pong && payload) {
58466
+ this.logger.trace('[ws]', 'receive pong');
58467
+ const dataString = new TextDecoder("utf-8").decode(payload);
58468
+ const { PingInterval, ReconnectCount, ReconnectInterval, ReconnectNonce } = JSON.parse(dataString);
58469
+ this.wsConfig.updateWs({
58470
+ pingInterval: PingInterval,
58471
+ reconnectCount: ReconnectCount,
58472
+ reconnectInterval: ReconnectInterval,
58473
+ reconnectNonce: ReconnectNonce,
58474
+ });
58475
+ this.logger.trace('[ws]', 'update wsConfig with pong data');
58476
+ }
58477
+ });
58478
+ }
58479
+ handleEventData(data) {
58480
+ var _a;
58481
+ return __awaiter(this, void 0, void 0, function* () {
58482
+ const headers = data.headers.reduce((acc, cur) => {
58483
+ acc[cur.key] = cur.value;
58484
+ return acc;
58485
+ }, {});
58486
+ const { message_id, sum, seq, type, trace_id } = headers;
58487
+ const payload = data.payload;
58488
+ if (type !== MessageType.event) {
58489
+ return;
58490
+ }
58491
+ const mergedData = this.dataCache.mergeData({
58492
+ message_id,
58493
+ sum: Number(sum),
58494
+ seq: Number(seq),
58495
+ trace_id,
58496
+ data: payload
58497
+ });
58498
+ if (!mergedData) {
58499
+ return;
58500
+ }
58501
+ this.logger.debug('[ws]', `receive message, message_type: ${type}; message_id: ${message_id}; trace_id: ${trace_id}; data: ${mergedData.data}`);
58502
+ const startTime = Date.now();
58503
+ yield ((_a = this.eventDispatcher) === null || _a === void 0 ? void 0 : _a.invoke(mergedData, { needCheck: false }));
58504
+ const endTime = Date.now();
58505
+ this.sendMessage(Object.assign(Object.assign({}, data), { headers: [...data.headers, { key: HeaderKey.biz_rt, value: String(startTime - endTime) }], payload: new TextEncoder().encode(JSON.stringify({
58506
+ // http code
58507
+ code: 200
58508
+ })) }));
58509
+ });
58510
+ }
58511
+ sendMessage(data) {
58512
+ var _a;
58513
+ const wsInstance = this.wsConfig.getWSInstance();
58514
+ if ((wsInstance === null || wsInstance === void 0 ? void 0 : wsInstance.readyState) === WebSocket.OPEN) {
58515
+ const resp = pbbp2.Frame.encode(data).finish();
58516
+ (_a = this.wsConfig.getWSInstance()) === null || _a === void 0 ? void 0 : _a.send(resp, (err) => {
58517
+ if (err) {
58518
+ this.logger.error('[ws]', 'send data failed');
58519
+ }
58520
+ });
58521
+ }
58522
+ }
58523
+ start(params) {
58524
+ return __awaiter(this, void 0, void 0, function* () {
58525
+ this.logger.info('[ws]', `receive events through persistent connection only available in self-build & Feishu app, Configured in:
58526
+ Developer Console(开发者后台)
58527
+ ->
58528
+ Events and Callbacks(事件配置)
58529
+ ->
58530
+ Mode of event subscription(配置订阅方式)
58531
+ ->
58532
+ Receive events through persistent connection(使用长连接接收事件)`);
58533
+ const { eventDispatcher } = params;
58534
+ if (!eventDispatcher) {
58535
+ this.logger.warn('[ws]', 'client need to start with a eventDispatcher');
58536
+ return;
58537
+ }
58538
+ this.eventDispatcher = eventDispatcher;
58539
+ this.reConnect(true);
58540
+ });
58541
+ }
58542
+ }
58543
+
58544
+ export { AESCipher, AppType, CAppTicket, CTenantAccessToken, CardActionHandler, Client, Domain, EventDispatcher, LoggerLevel, WSClient, adaptDefault, adaptExpress, adaptKoa, adaptKoaRouter, defaultHttpInstance, generateChallenge, messageCard, withAll, withHelpDeskCredential, withTenantKey, withTenantToken, withUserAccessToken };