@onyx-p/imlib-web 1.7.5 → 1.7.7

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/index.umd.js CHANGED
@@ -105,11 +105,10 @@
105
105
  })(exports.SentStatus || (exports.SentStatus = {}));
106
106
  exports.ReceivedStatus = void 0;
107
107
  (function (ReceivedStatus) {
108
- ReceivedStatus[ReceivedStatus["READ"] = 1] = "READ";
109
- ReceivedStatus[ReceivedStatus["LISTENED"] = 2] = "LISTENED";
110
- ReceivedStatus[ReceivedStatus["DOWNLOADED"] = 4] = "DOWNLOADED";
111
- ReceivedStatus[ReceivedStatus["RETRIEVED"] = 8] = "RETRIEVED";
112
- ReceivedStatus[ReceivedStatus["UNREAD"] = 0] = "UNREAD";
108
+ ReceivedStatus[ReceivedStatus["IDLE"] = 0] = "IDLE";
109
+ ReceivedStatus[ReceivedStatus["RECEIVED"] = 1] = "RECEIVED";
110
+ ReceivedStatus[ReceivedStatus["READ"] = 2] = "READ";
111
+ ReceivedStatus[ReceivedStatus["LISTENED"] = 3] = "LISTENED";
113
112
  })(exports.ReceivedStatus || (exports.ReceivedStatus = {}));
114
113
  exports.NotificationLevel = void 0;
115
114
  (function (NotificationLevel) {
@@ -141,6 +140,8 @@
141
140
  Events["CONVERSATION"] = "CONVERSATION";
142
141
  Events["PUSH"] = "PUSH";
143
142
  Events["RECALL"] = "RECALL";
143
+ Events["ARRIVAL_RECEIPT_RECEIVED"] = "ARRIVAL_RECEIPT_RECEIVED";
144
+ Events["READ_RECEIPT_RECEIVED"] = "READ_RECEIPT_RECEIVED";
144
145
  })(exports.Events || (exports.Events = {}));
145
146
 
146
147
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -7688,6 +7689,9 @@
7688
7689
  return Object.keys(obj);
7689
7690
  };
7690
7691
  const filterNullProperty = object => {
7692
+ if (Array.isArray(object)) {
7693
+ return object.filter(item => isDef(item)).map(item => isObject(item) ? filterNullProperty(item) : item);
7694
+ }
7691
7695
  const to = {};
7692
7696
  Object.keys(object).forEach(key => {
7693
7697
  const value = object[key];
@@ -9490,6 +9494,10 @@
9490
9494
  CmdIds[CmdIds["DeletePrivateDialog"] = 1610682372] = "DeletePrivateDialog";
9491
9495
  CmdIds[CmdIds["DeleteGroupDialog"] = 1610747908] = "DeleteGroupDialog";
9492
9496
  CmdIds[CmdIds["GetDialogChangedStatus"] = 1610711094] = "GetDialogChangedStatus";
9497
+ CmdIds[CmdIds["SendGroupChatArrivalAck"] = 1610747952] = "SendGroupChatArrivalAck";
9498
+ CmdIds[CmdIds["SendGroupChatReadAck"] = 1610747953] = "SendGroupChatReadAck";
9499
+ CmdIds[CmdIds["SendPrivateChatArrivalAck"] = 1610682403] = "SendPrivateChatArrivalAck";
9500
+ CmdIds[CmdIds["SendPrivateChatReadAck"] = 1610682404] = "SendPrivateChatReadAck";
9493
9501
  CmdIds[CmdIds["HeartbeanResp"] = 268468225] = "HeartbeanResp";
9494
9502
  CmdIds[CmdIds["NewMessagePush"] = 1610711040] = "NewMessagePush";
9495
9503
  CmdIds[CmdIds["DialogChangedPush"] = 1610711096] = "DialogChangedPush";
@@ -14507,6 +14515,8 @@
14507
14515
  * @property {Long|null} [seqno] DialogMessage seqno
14508
14516
  * @property {string|null} [replyMarkup] DialogMessage replyMarkup
14509
14517
  * @property {string|null} [extra] DialogMessage extra
14518
+ * @property {boolean|null} [msgArrival] DialogMessage msgArrival
14519
+ * @property {boolean|null} [msgRead] DialogMessage msgRead
14510
14520
  */
14511
14521
 
14512
14522
  /**
@@ -14721,6 +14731,22 @@
14721
14731
  */
14722
14732
  DialogMessage.prototype.extra = "";
14723
14733
 
14734
+ /**
14735
+ * DialogMessage msgArrival.
14736
+ * @member {boolean} msgArrival
14737
+ * @memberof DialogMessage
14738
+ * @instance
14739
+ */
14740
+ DialogMessage.prototype.msgArrival = false;
14741
+
14742
+ /**
14743
+ * DialogMessage msgRead.
14744
+ * @member {boolean} msgRead
14745
+ * @memberof DialogMessage
14746
+ * @instance
14747
+ */
14748
+ DialogMessage.prototype.msgRead = false;
14749
+
14724
14750
  /**
14725
14751
  * Encodes the specified DialogMessage message. Does not implicitly {@link DialogMessage.verify|verify} messages.
14726
14752
  * @function encode
@@ -14757,6 +14783,8 @@
14757
14783
  if (message.seqno != null && Object.hasOwnProperty.call(message, "seqno")) writer.uint32(/* id 23, wireType 0 =*/184).int64(message.seqno);
14758
14784
  if (message.replyMarkup != null && Object.hasOwnProperty.call(message, "replyMarkup")) writer.uint32(/* id 24, wireType 2 =*/194).string(message.replyMarkup);
14759
14785
  if (message.extra != null && Object.hasOwnProperty.call(message, "extra")) writer.uint32(/* id 25, wireType 2 =*/202).string(message.extra);
14786
+ if (message.msgArrival != null && Object.hasOwnProperty.call(message, "msgArrival")) writer.uint32(/* id 26, wireType 0 =*/208).bool(message.msgArrival);
14787
+ if (message.msgRead != null && Object.hasOwnProperty.call(message, "msgRead")) writer.uint32(/* id 27, wireType 0 =*/216).bool(message.msgRead);
14760
14788
  return writer;
14761
14789
  };
14762
14790
 
@@ -14903,6 +14931,16 @@
14903
14931
  message.extra = reader.string();
14904
14932
  break;
14905
14933
  }
14934
+ case 26:
14935
+ {
14936
+ message.msgArrival = reader.bool();
14937
+ break;
14938
+ }
14939
+ case 27:
14940
+ {
14941
+ message.msgRead = reader.bool();
14942
+ break;
14943
+ }
14906
14944
  default:
14907
14945
  reader.skipType(tag & 7);
14908
14946
  break;
@@ -17598,6 +17636,304 @@
17598
17636
  };
17599
17637
  return NewMessageNotificationResp;
17600
17638
  })();
17639
+ $root$1.ChatMessage = (() => {
17640
+ /**
17641
+ * Properties of a ChatMessage.
17642
+ * @exports IChatMessage
17643
+ * @interface IChatMessage
17644
+ * @property {Long|null} [destId] ChatMessage destId
17645
+ * @property {Array.<Long>|null} [msgId] ChatMessage msgId
17646
+ */
17647
+
17648
+ /**
17649
+ * Constructs a new ChatMessage.
17650
+ * @exports ChatMessage
17651
+ * @classdesc Represents a ChatMessage.
17652
+ * @implements IChatMessage
17653
+ * @constructor
17654
+ * @param {IChatMessage=} [properties] Properties to set
17655
+ */
17656
+ function ChatMessage(properties) {
17657
+ this.msgId = [];
17658
+ if (properties) for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
17659
+ }
17660
+
17661
+ /**
17662
+ * ChatMessage destId.
17663
+ * @member {Long} destId
17664
+ * @memberof ChatMessage
17665
+ * @instance
17666
+ */
17667
+ ChatMessage.prototype.destId = $util$1.Long ? $util$1.Long.fromBits(0, 0, false) : 0;
17668
+
17669
+ /**
17670
+ * ChatMessage msgId.
17671
+ * @member {Array.<Long>} msgId
17672
+ * @memberof ChatMessage
17673
+ * @instance
17674
+ */
17675
+ ChatMessage.prototype.msgId = $util$1.emptyArray;
17676
+
17677
+ /**
17678
+ * Encodes the specified ChatMessage message. Does not implicitly {@link ChatMessage.verify|verify} messages.
17679
+ * @function encode
17680
+ * @memberof ChatMessage
17681
+ * @static
17682
+ * @param {IChatMessage} message ChatMessage message or plain object to encode
17683
+ * @param {$protobuf.Writer} [writer] Writer to encode to
17684
+ * @returns {$protobuf.Writer} Writer
17685
+ */
17686
+ ChatMessage.encode = function encode(message, writer) {
17687
+ if (!writer) writer = $Writer$1.create();
17688
+ if (message.destId != null && Object.hasOwnProperty.call(message, "destId")) writer.uint32(/* id 1, wireType 0 =*/8).int64(message.destId);
17689
+ if (message.msgId != null && message.msgId.length) {
17690
+ writer.uint32(/* id 2, wireType 2 =*/18).fork();
17691
+ for (let i = 0; i < message.msgId.length; ++i) writer.int64(message.msgId[i]);
17692
+ writer.ldelim();
17693
+ }
17694
+ return writer;
17695
+ };
17696
+
17697
+ /**
17698
+ * Decodes a ChatMessage message from the specified reader or buffer.
17699
+ * @function decode
17700
+ * @memberof ChatMessage
17701
+ * @static
17702
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
17703
+ * @param {number} [length] Message length if known beforehand
17704
+ * @returns {ChatMessage} ChatMessage
17705
+ * @throws {Error} If the payload is not a reader or valid buffer
17706
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
17707
+ */
17708
+ ChatMessage.decode = function decode(reader, length) {
17709
+ if (!(reader instanceof $Reader$1)) reader = $Reader$1.create(reader);
17710
+ let end = length === undefined ? reader.len : reader.pos + length,
17711
+ message = new $root$1.ChatMessage();
17712
+ while (reader.pos < end) {
17713
+ let tag = reader.uint32();
17714
+ switch (tag >>> 3) {
17715
+ case 1:
17716
+ {
17717
+ message.destId = reader.int64();
17718
+ break;
17719
+ }
17720
+ case 2:
17721
+ {
17722
+ if (!(message.msgId && message.msgId.length)) message.msgId = [];
17723
+ if ((tag & 7) === 2) {
17724
+ let end2 = reader.uint32() + reader.pos;
17725
+ while (reader.pos < end2) message.msgId.push(reader.int64());
17726
+ } else message.msgId.push(reader.int64());
17727
+ break;
17728
+ }
17729
+ default:
17730
+ reader.skipType(tag & 7);
17731
+ break;
17732
+ }
17733
+ }
17734
+ return message;
17735
+ };
17736
+
17737
+ /**
17738
+ * Gets the default type url for ChatMessage
17739
+ * @function getTypeUrl
17740
+ * @memberof ChatMessage
17741
+ * @static
17742
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
17743
+ * @returns {string} The default type url
17744
+ */
17745
+ ChatMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
17746
+ if (typeUrlPrefix === undefined) {
17747
+ typeUrlPrefix = "type.googleapis.com";
17748
+ }
17749
+ return typeUrlPrefix + "/ChatMessage";
17750
+ };
17751
+ return ChatMessage;
17752
+ })();
17753
+ const SendPrivateChatArrivalAckReq = $root$1.SendPrivateChatArrivalAckReq = (() => {
17754
+ /**
17755
+ * Properties of a SendPrivateChatArrivalAckReq.
17756
+ * @exports ISendPrivateChatArrivalAckReq
17757
+ * @interface ISendPrivateChatArrivalAckReq
17758
+ * @property {Array.<IChatMessage>|null} [chatMessage] SendPrivateChatArrivalAckReq chatMessage
17759
+ */
17760
+
17761
+ /**
17762
+ * Constructs a new SendPrivateChatArrivalAckReq.
17763
+ * @exports SendPrivateChatArrivalAckReq
17764
+ * @classdesc Represents a SendPrivateChatArrivalAckReq.
17765
+ * @implements ISendPrivateChatArrivalAckReq
17766
+ * @constructor
17767
+ * @param {ISendPrivateChatArrivalAckReq=} [properties] Properties to set
17768
+ */
17769
+ function SendPrivateChatArrivalAckReq(properties) {
17770
+ this.chatMessage = [];
17771
+ if (properties) for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
17772
+ }
17773
+
17774
+ /**
17775
+ * SendPrivateChatArrivalAckReq chatMessage.
17776
+ * @member {Array.<IChatMessage>} chatMessage
17777
+ * @memberof SendPrivateChatArrivalAckReq
17778
+ * @instance
17779
+ */
17780
+ SendPrivateChatArrivalAckReq.prototype.chatMessage = $util$1.emptyArray;
17781
+
17782
+ /**
17783
+ * Encodes the specified SendPrivateChatArrivalAckReq message. Does not implicitly {@link SendPrivateChatArrivalAckReq.verify|verify} messages.
17784
+ * @function encode
17785
+ * @memberof SendPrivateChatArrivalAckReq
17786
+ * @static
17787
+ * @param {ISendPrivateChatArrivalAckReq} message SendPrivateChatArrivalAckReq message or plain object to encode
17788
+ * @param {$protobuf.Writer} [writer] Writer to encode to
17789
+ * @returns {$protobuf.Writer} Writer
17790
+ */
17791
+ SendPrivateChatArrivalAckReq.encode = function encode(message, writer) {
17792
+ if (!writer) writer = $Writer$1.create();
17793
+ if (message.chatMessage != null && message.chatMessage.length) for (let i = 0; i < message.chatMessage.length; ++i) $root$1.ChatMessage.encode(message.chatMessage[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
17794
+ return writer;
17795
+ };
17796
+
17797
+ /**
17798
+ * Decodes a SendPrivateChatArrivalAckReq message from the specified reader or buffer.
17799
+ * @function decode
17800
+ * @memberof SendPrivateChatArrivalAckReq
17801
+ * @static
17802
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
17803
+ * @param {number} [length] Message length if known beforehand
17804
+ * @returns {SendPrivateChatArrivalAckReq} SendPrivateChatArrivalAckReq
17805
+ * @throws {Error} If the payload is not a reader or valid buffer
17806
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
17807
+ */
17808
+ SendPrivateChatArrivalAckReq.decode = function decode(reader, length) {
17809
+ if (!(reader instanceof $Reader$1)) reader = $Reader$1.create(reader);
17810
+ let end = length === undefined ? reader.len : reader.pos + length,
17811
+ message = new $root$1.SendPrivateChatArrivalAckReq();
17812
+ while (reader.pos < end) {
17813
+ let tag = reader.uint32();
17814
+ switch (tag >>> 3) {
17815
+ case 1:
17816
+ {
17817
+ if (!(message.chatMessage && message.chatMessage.length)) message.chatMessage = [];
17818
+ message.chatMessage.push($root$1.ChatMessage.decode(reader, reader.uint32()));
17819
+ break;
17820
+ }
17821
+ default:
17822
+ reader.skipType(tag & 7);
17823
+ break;
17824
+ }
17825
+ }
17826
+ return message;
17827
+ };
17828
+
17829
+ /**
17830
+ * Gets the default type url for SendPrivateChatArrivalAckReq
17831
+ * @function getTypeUrl
17832
+ * @memberof SendPrivateChatArrivalAckReq
17833
+ * @static
17834
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
17835
+ * @returns {string} The default type url
17836
+ */
17837
+ SendPrivateChatArrivalAckReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
17838
+ if (typeUrlPrefix === undefined) {
17839
+ typeUrlPrefix = "type.googleapis.com";
17840
+ }
17841
+ return typeUrlPrefix + "/SendPrivateChatArrivalAckReq";
17842
+ };
17843
+ return SendPrivateChatArrivalAckReq;
17844
+ })();
17845
+ const SendPrivateChatReadAckReq = $root$1.SendPrivateChatReadAckReq = (() => {
17846
+ /**
17847
+ * Properties of a SendPrivateChatReadAckReq.
17848
+ * @exports ISendPrivateChatReadAckReq
17849
+ * @interface ISendPrivateChatReadAckReq
17850
+ * @property {Array.<IChatMessage>|null} [chatMessage] SendPrivateChatReadAckReq chatMessage
17851
+ */
17852
+
17853
+ /**
17854
+ * Constructs a new SendPrivateChatReadAckReq.
17855
+ * @exports SendPrivateChatReadAckReq
17856
+ * @classdesc Represents a SendPrivateChatReadAckReq.
17857
+ * @implements ISendPrivateChatReadAckReq
17858
+ * @constructor
17859
+ * @param {ISendPrivateChatReadAckReq=} [properties] Properties to set
17860
+ */
17861
+ function SendPrivateChatReadAckReq(properties) {
17862
+ this.chatMessage = [];
17863
+ if (properties) for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
17864
+ }
17865
+
17866
+ /**
17867
+ * SendPrivateChatReadAckReq chatMessage.
17868
+ * @member {Array.<IChatMessage>} chatMessage
17869
+ * @memberof SendPrivateChatReadAckReq
17870
+ * @instance
17871
+ */
17872
+ SendPrivateChatReadAckReq.prototype.chatMessage = $util$1.emptyArray;
17873
+
17874
+ /**
17875
+ * Encodes the specified SendPrivateChatReadAckReq message. Does not implicitly {@link SendPrivateChatReadAckReq.verify|verify} messages.
17876
+ * @function encode
17877
+ * @memberof SendPrivateChatReadAckReq
17878
+ * @static
17879
+ * @param {ISendPrivateChatReadAckReq} message SendPrivateChatReadAckReq message or plain object to encode
17880
+ * @param {$protobuf.Writer} [writer] Writer to encode to
17881
+ * @returns {$protobuf.Writer} Writer
17882
+ */
17883
+ SendPrivateChatReadAckReq.encode = function encode(message, writer) {
17884
+ if (!writer) writer = $Writer$1.create();
17885
+ if (message.chatMessage != null && message.chatMessage.length) for (let i = 0; i < message.chatMessage.length; ++i) $root$1.ChatMessage.encode(message.chatMessage[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
17886
+ return writer;
17887
+ };
17888
+
17889
+ /**
17890
+ * Decodes a SendPrivateChatReadAckReq message from the specified reader or buffer.
17891
+ * @function decode
17892
+ * @memberof SendPrivateChatReadAckReq
17893
+ * @static
17894
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
17895
+ * @param {number} [length] Message length if known beforehand
17896
+ * @returns {SendPrivateChatReadAckReq} SendPrivateChatReadAckReq
17897
+ * @throws {Error} If the payload is not a reader or valid buffer
17898
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
17899
+ */
17900
+ SendPrivateChatReadAckReq.decode = function decode(reader, length) {
17901
+ if (!(reader instanceof $Reader$1)) reader = $Reader$1.create(reader);
17902
+ let end = length === undefined ? reader.len : reader.pos + length,
17903
+ message = new $root$1.SendPrivateChatReadAckReq();
17904
+ while (reader.pos < end) {
17905
+ let tag = reader.uint32();
17906
+ switch (tag >>> 3) {
17907
+ case 1:
17908
+ {
17909
+ if (!(message.chatMessage && message.chatMessage.length)) message.chatMessage = [];
17910
+ message.chatMessage.push($root$1.ChatMessage.decode(reader, reader.uint32()));
17911
+ break;
17912
+ }
17913
+ default:
17914
+ reader.skipType(tag & 7);
17915
+ break;
17916
+ }
17917
+ }
17918
+ return message;
17919
+ };
17920
+
17921
+ /**
17922
+ * Gets the default type url for SendPrivateChatReadAckReq
17923
+ * @function getTypeUrl
17924
+ * @memberof SendPrivateChatReadAckReq
17925
+ * @static
17926
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
17927
+ * @returns {string} The default type url
17928
+ */
17929
+ SendPrivateChatReadAckReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
17930
+ if (typeUrlPrefix === undefined) {
17931
+ typeUrlPrefix = "type.googleapis.com";
17932
+ }
17933
+ return typeUrlPrefix + "/SendPrivateChatReadAckReq";
17934
+ };
17935
+ return SendPrivateChatReadAckReq;
17936
+ })();
17601
17937
 
17602
17938
  /*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
17603
17939
 
@@ -18382,7 +18718,7 @@
18382
18718
  };
18383
18719
  return RecallGroupChatMessageReq;
18384
18720
  })();
18385
- const DeleteGroupChatDialogReq = $root.DeleteGroupChatDialogReq = (() => {
18721
+ $root.DeleteGroupChatDialogReq = (() => {
18386
18722
  /**
18387
18723
  * Properties of a DeleteGroupChatDialogReq.
18388
18724
  * @exports IDeleteGroupChatDialogReq
@@ -18472,6 +18808,319 @@
18472
18808
  };
18473
18809
  return DeleteGroupChatDialogReq;
18474
18810
  })();
18811
+ $root.GroupChatMessage = (() => {
18812
+ /**
18813
+ * Properties of a GroupChatMessage.
18814
+ * @exports IGroupChatMessage
18815
+ * @interface IGroupChatMessage
18816
+ * @property {Long|null} [groupId] GroupChatMessage groupId
18817
+ * @property {Long|null} [userId] GroupChatMessage userId
18818
+ * @property {Array.<Long>|null} [msgId] GroupChatMessage msgId
18819
+ */
18820
+
18821
+ /**
18822
+ * Constructs a new GroupChatMessage.
18823
+ * @exports GroupChatMessage
18824
+ * @classdesc Represents a GroupChatMessage.
18825
+ * @implements IGroupChatMessage
18826
+ * @constructor
18827
+ * @param {IGroupChatMessage=} [properties] Properties to set
18828
+ */
18829
+ function GroupChatMessage(properties) {
18830
+ this.msgId = [];
18831
+ if (properties) for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
18832
+ }
18833
+
18834
+ /**
18835
+ * GroupChatMessage groupId.
18836
+ * @member {Long} groupId
18837
+ * @memberof GroupChatMessage
18838
+ * @instance
18839
+ */
18840
+ GroupChatMessage.prototype.groupId = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;
18841
+
18842
+ /**
18843
+ * GroupChatMessage userId.
18844
+ * @member {Long} userId
18845
+ * @memberof GroupChatMessage
18846
+ * @instance
18847
+ */
18848
+ GroupChatMessage.prototype.userId = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;
18849
+
18850
+ /**
18851
+ * GroupChatMessage msgId.
18852
+ * @member {Array.<Long>} msgId
18853
+ * @memberof GroupChatMessage
18854
+ * @instance
18855
+ */
18856
+ GroupChatMessage.prototype.msgId = $util.emptyArray;
18857
+
18858
+ /**
18859
+ * Encodes the specified GroupChatMessage message. Does not implicitly {@link GroupChatMessage.verify|verify} messages.
18860
+ * @function encode
18861
+ * @memberof GroupChatMessage
18862
+ * @static
18863
+ * @param {IGroupChatMessage} message GroupChatMessage message or plain object to encode
18864
+ * @param {$protobuf.Writer} [writer] Writer to encode to
18865
+ * @returns {$protobuf.Writer} Writer
18866
+ */
18867
+ GroupChatMessage.encode = function encode(message, writer) {
18868
+ if (!writer) writer = $Writer.create();
18869
+ if (message.groupId != null && Object.hasOwnProperty.call(message, "groupId")) writer.uint32(/* id 1, wireType 0 =*/8).int64(message.groupId);
18870
+ if (message.userId != null && Object.hasOwnProperty.call(message, "userId")) writer.uint32(/* id 2, wireType 0 =*/16).int64(message.userId);
18871
+ if (message.msgId != null && message.msgId.length) {
18872
+ writer.uint32(/* id 3, wireType 2 =*/26).fork();
18873
+ for (let i = 0; i < message.msgId.length; ++i) writer.int64(message.msgId[i]);
18874
+ writer.ldelim();
18875
+ }
18876
+ return writer;
18877
+ };
18878
+
18879
+ /**
18880
+ * Decodes a GroupChatMessage message from the specified reader or buffer.
18881
+ * @function decode
18882
+ * @memberof GroupChatMessage
18883
+ * @static
18884
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
18885
+ * @param {number} [length] Message length if known beforehand
18886
+ * @returns {GroupChatMessage} GroupChatMessage
18887
+ * @throws {Error} If the payload is not a reader or valid buffer
18888
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
18889
+ */
18890
+ GroupChatMessage.decode = function decode(reader, length) {
18891
+ if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
18892
+ let end = length === undefined ? reader.len : reader.pos + length,
18893
+ message = new $root.GroupChatMessage();
18894
+ while (reader.pos < end) {
18895
+ let tag = reader.uint32();
18896
+ switch (tag >>> 3) {
18897
+ case 1:
18898
+ {
18899
+ message.groupId = reader.int64();
18900
+ break;
18901
+ }
18902
+ case 2:
18903
+ {
18904
+ message.userId = reader.int64();
18905
+ break;
18906
+ }
18907
+ case 3:
18908
+ {
18909
+ if (!(message.msgId && message.msgId.length)) message.msgId = [];
18910
+ if ((tag & 7) === 2) {
18911
+ let end2 = reader.uint32() + reader.pos;
18912
+ while (reader.pos < end2) message.msgId.push(reader.int64());
18913
+ } else message.msgId.push(reader.int64());
18914
+ break;
18915
+ }
18916
+ default:
18917
+ reader.skipType(tag & 7);
18918
+ break;
18919
+ }
18920
+ }
18921
+ return message;
18922
+ };
18923
+
18924
+ /**
18925
+ * Gets the default type url for GroupChatMessage
18926
+ * @function getTypeUrl
18927
+ * @memberof GroupChatMessage
18928
+ * @static
18929
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
18930
+ * @returns {string} The default type url
18931
+ */
18932
+ GroupChatMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
18933
+ if (typeUrlPrefix === undefined) {
18934
+ typeUrlPrefix = "type.googleapis.com";
18935
+ }
18936
+ return typeUrlPrefix + "/GroupChatMessage";
18937
+ };
18938
+ return GroupChatMessage;
18939
+ })();
18940
+ const SendGroupChatArrivalAckReq = $root.SendGroupChatArrivalAckReq = (() => {
18941
+ /**
18942
+ * Properties of a SendGroupChatArrivalAckReq.
18943
+ * @exports ISendGroupChatArrivalAckReq
18944
+ * @interface ISendGroupChatArrivalAckReq
18945
+ * @property {Array.<IGroupChatMessage>|null} [groupChatMessage] SendGroupChatArrivalAckReq groupChatMessage
18946
+ */
18947
+
18948
+ /**
18949
+ * Constructs a new SendGroupChatArrivalAckReq.
18950
+ * @exports SendGroupChatArrivalAckReq
18951
+ * @classdesc Represents a SendGroupChatArrivalAckReq.
18952
+ * @implements ISendGroupChatArrivalAckReq
18953
+ * @constructor
18954
+ * @param {ISendGroupChatArrivalAckReq=} [properties] Properties to set
18955
+ */
18956
+ function SendGroupChatArrivalAckReq(properties) {
18957
+ this.groupChatMessage = [];
18958
+ if (properties) for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
18959
+ }
18960
+
18961
+ /**
18962
+ * SendGroupChatArrivalAckReq groupChatMessage.
18963
+ * @member {Array.<IGroupChatMessage>} groupChatMessage
18964
+ * @memberof SendGroupChatArrivalAckReq
18965
+ * @instance
18966
+ */
18967
+ SendGroupChatArrivalAckReq.prototype.groupChatMessage = $util.emptyArray;
18968
+
18969
+ /**
18970
+ * Encodes the specified SendGroupChatArrivalAckReq message. Does not implicitly {@link SendGroupChatArrivalAckReq.verify|verify} messages.
18971
+ * @function encode
18972
+ * @memberof SendGroupChatArrivalAckReq
18973
+ * @static
18974
+ * @param {ISendGroupChatArrivalAckReq} message SendGroupChatArrivalAckReq message or plain object to encode
18975
+ * @param {$protobuf.Writer} [writer] Writer to encode to
18976
+ * @returns {$protobuf.Writer} Writer
18977
+ */
18978
+ SendGroupChatArrivalAckReq.encode = function encode(message, writer) {
18979
+ if (!writer) writer = $Writer.create();
18980
+ if (message.groupChatMessage != null && message.groupChatMessage.length) for (let i = 0; i < message.groupChatMessage.length; ++i) $root.GroupChatMessage.encode(message.groupChatMessage[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
18981
+ return writer;
18982
+ };
18983
+
18984
+ /**
18985
+ * Decodes a SendGroupChatArrivalAckReq message from the specified reader or buffer.
18986
+ * @function decode
18987
+ * @memberof SendGroupChatArrivalAckReq
18988
+ * @static
18989
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
18990
+ * @param {number} [length] Message length if known beforehand
18991
+ * @returns {SendGroupChatArrivalAckReq} SendGroupChatArrivalAckReq
18992
+ * @throws {Error} If the payload is not a reader or valid buffer
18993
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
18994
+ */
18995
+ SendGroupChatArrivalAckReq.decode = function decode(reader, length) {
18996
+ if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
18997
+ let end = length === undefined ? reader.len : reader.pos + length,
18998
+ message = new $root.SendGroupChatArrivalAckReq();
18999
+ while (reader.pos < end) {
19000
+ let tag = reader.uint32();
19001
+ switch (tag >>> 3) {
19002
+ case 1:
19003
+ {
19004
+ if (!(message.groupChatMessage && message.groupChatMessage.length)) message.groupChatMessage = [];
19005
+ message.groupChatMessage.push($root.GroupChatMessage.decode(reader, reader.uint32()));
19006
+ break;
19007
+ }
19008
+ default:
19009
+ reader.skipType(tag & 7);
19010
+ break;
19011
+ }
19012
+ }
19013
+ return message;
19014
+ };
19015
+
19016
+ /**
19017
+ * Gets the default type url for SendGroupChatArrivalAckReq
19018
+ * @function getTypeUrl
19019
+ * @memberof SendGroupChatArrivalAckReq
19020
+ * @static
19021
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
19022
+ * @returns {string} The default type url
19023
+ */
19024
+ SendGroupChatArrivalAckReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
19025
+ if (typeUrlPrefix === undefined) {
19026
+ typeUrlPrefix = "type.googleapis.com";
19027
+ }
19028
+ return typeUrlPrefix + "/SendGroupChatArrivalAckReq";
19029
+ };
19030
+ return SendGroupChatArrivalAckReq;
19031
+ })();
19032
+ const SendGroupChatReadAckReq = $root.SendGroupChatReadAckReq = (() => {
19033
+ /**
19034
+ * Properties of a SendGroupChatReadAckReq.
19035
+ * @exports ISendGroupChatReadAckReq
19036
+ * @interface ISendGroupChatReadAckReq
19037
+ * @property {Array.<IGroupChatMessage>|null} [groupChatMessage] SendGroupChatReadAckReq groupChatMessage
19038
+ */
19039
+
19040
+ /**
19041
+ * Constructs a new SendGroupChatReadAckReq.
19042
+ * @exports SendGroupChatReadAckReq
19043
+ * @classdesc Represents a SendGroupChatReadAckReq.
19044
+ * @implements ISendGroupChatReadAckReq
19045
+ * @constructor
19046
+ * @param {ISendGroupChatReadAckReq=} [properties] Properties to set
19047
+ */
19048
+ function SendGroupChatReadAckReq(properties) {
19049
+ this.groupChatMessage = [];
19050
+ if (properties) for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
19051
+ }
19052
+
19053
+ /**
19054
+ * SendGroupChatReadAckReq groupChatMessage.
19055
+ * @member {Array.<IGroupChatMessage>} groupChatMessage
19056
+ * @memberof SendGroupChatReadAckReq
19057
+ * @instance
19058
+ */
19059
+ SendGroupChatReadAckReq.prototype.groupChatMessage = $util.emptyArray;
19060
+
19061
+ /**
19062
+ * Encodes the specified SendGroupChatReadAckReq message. Does not implicitly {@link SendGroupChatReadAckReq.verify|verify} messages.
19063
+ * @function encode
19064
+ * @memberof SendGroupChatReadAckReq
19065
+ * @static
19066
+ * @param {ISendGroupChatReadAckReq} message SendGroupChatReadAckReq message or plain object to encode
19067
+ * @param {$protobuf.Writer} [writer] Writer to encode to
19068
+ * @returns {$protobuf.Writer} Writer
19069
+ */
19070
+ SendGroupChatReadAckReq.encode = function encode(message, writer) {
19071
+ if (!writer) writer = $Writer.create();
19072
+ if (message.groupChatMessage != null && message.groupChatMessage.length) for (let i = 0; i < message.groupChatMessage.length; ++i) $root.GroupChatMessage.encode(message.groupChatMessage[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
19073
+ return writer;
19074
+ };
19075
+
19076
+ /**
19077
+ * Decodes a SendGroupChatReadAckReq message from the specified reader or buffer.
19078
+ * @function decode
19079
+ * @memberof SendGroupChatReadAckReq
19080
+ * @static
19081
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
19082
+ * @param {number} [length] Message length if known beforehand
19083
+ * @returns {SendGroupChatReadAckReq} SendGroupChatReadAckReq
19084
+ * @throws {Error} If the payload is not a reader or valid buffer
19085
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
19086
+ */
19087
+ SendGroupChatReadAckReq.decode = function decode(reader, length) {
19088
+ if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
19089
+ let end = length === undefined ? reader.len : reader.pos + length,
19090
+ message = new $root.SendGroupChatReadAckReq();
19091
+ while (reader.pos < end) {
19092
+ let tag = reader.uint32();
19093
+ switch (tag >>> 3) {
19094
+ case 1:
19095
+ {
19096
+ if (!(message.groupChatMessage && message.groupChatMessage.length)) message.groupChatMessage = [];
19097
+ message.groupChatMessage.push($root.GroupChatMessage.decode(reader, reader.uint32()));
19098
+ break;
19099
+ }
19100
+ default:
19101
+ reader.skipType(tag & 7);
19102
+ break;
19103
+ }
19104
+ }
19105
+ return message;
19106
+ };
19107
+
19108
+ /**
19109
+ * Gets the default type url for SendGroupChatReadAckReq
19110
+ * @function getTypeUrl
19111
+ * @memberof SendGroupChatReadAckReq
19112
+ * @static
19113
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
19114
+ * @returns {string} The default type url
19115
+ */
19116
+ SendGroupChatReadAckReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
19117
+ if (typeUrlPrefix === undefined) {
19118
+ typeUrlPrefix = "type.googleapis.com";
19119
+ }
19120
+ return typeUrlPrefix + "/SendGroupChatReadAckReq";
19121
+ };
19122
+ return SendGroupChatReadAckReq;
19123
+ })();
18475
19124
 
18476
19125
  function extractConversationType(destId) {
18477
19126
  const longId = isString(destId) ? Long.fromString(destId) : destId;
@@ -18631,22 +19280,12 @@
18631
19280
  return reqPromise;
18632
19281
  };
18633
19282
  const deleteDialog = dialogId => {
18634
- let reqPromise;
18635
- if (extractConversationType(dialogId) == exports.ConversationType.GROUP) {
18636
- reqPromise = webSocketServer.send(CmdIds$1.DeleteGroupDialog, {
18637
- groupId: Long.fromString(dialogId)
18638
- }, {
18639
- encoder: DeleteGroupChatDialogReq,
18640
- decoder: BaseResp
18641
- });
18642
- } else {
18643
- reqPromise = webSocketServer.send(CmdIds$1.DeletePrivateDialog, {
18644
- destId: Long.fromString(dialogId)
18645
- }, {
18646
- encoder: DeletePrivateChatDialogReq,
18647
- decoder: BaseResp
18648
- });
18649
- }
19283
+ let reqPromise = webSocketServer.send(CmdIds$1.DeletePrivateDialog, {
19284
+ destId: Long.fromString(dialogId)
19285
+ }, {
19286
+ encoder: DeletePrivateChatDialogReq,
19287
+ decoder: BaseResp
19288
+ });
18650
19289
  return reqPromise;
18651
19290
  };
18652
19291
  const getDialogChangedStatus = offset => webSocketServer.send(CmdIds$1.GetDialogChangedStatus, {
@@ -18655,6 +19294,22 @@
18655
19294
  encoder: GetNewSettingDialogListReq,
18656
19295
  decoder: GetNewSettingDialogListResp
18657
19296
  });
19297
+ const sendGroupChatArrivalAck = params => webSocketServer.send(CmdIds$1.SendGroupChatArrivalAck, params, {
19298
+ encoder: SendGroupChatArrivalAckReq,
19299
+ decoder: BaseResp
19300
+ });
19301
+ const sendGroupChatReadAck = params => webSocketServer.send(CmdIds$1.SendGroupChatReadAck, params, {
19302
+ encoder: SendGroupChatReadAckReq,
19303
+ decoder: BaseResp
19304
+ });
19305
+ const sendPrivateChatArrivalAck = params => webSocketServer.send(CmdIds$1.SendPrivateChatArrivalAck, params, {
19306
+ encoder: SendPrivateChatArrivalAckReq,
19307
+ decoder: BaseResp
19308
+ });
19309
+ const sendPrivateChatReadAck = params => webSocketServer.send(CmdIds$1.SendPrivateChatReadAck, params, {
19310
+ encoder: SendPrivateChatReadAckReq,
19311
+ decoder: BaseResp
19312
+ });
18658
19313
 
18659
19314
  let milliDelta__ = 0;
18660
19315
  const synchronizeServerTime = async () => {
@@ -18886,6 +19541,12 @@
18886
19541
  REDPACKET: 0x10001040,
18887
19542
  TRANSFER: 0x10001030
18888
19543
  };
19544
+ const NotiMessageTypes = {
19545
+ GROUP_ARRIVAL_RECEIPT: 0x60020024,
19546
+ GROUP_READ_RECEIPT: 0x60020025,
19547
+ PRIVATE_ARRIVAL_RECEIPT: 0x6001000C,
19548
+ PRIVATE_READ_RECEIPT: 0x6001000D
19549
+ };
18889
19550
 
18890
19551
  function deepClone(obj) {
18891
19552
  if (!isDef(obj)) {
@@ -19598,13 +20259,13 @@
19598
20259
  destroyed() {},
19599
20260
  syncConversationStatus: function () {}
19600
20261
  };
19601
- let manager;
20262
+ let manager$1;
19602
20263
  var ConversationManager$1 = {
19603
20264
  create(appkey, currentUserId, updatedConversationFunc) {
19604
- manager = new ConversationManager(appkey, currentUserId, updatedConversationFunc);
20265
+ manager$1 = new ConversationManager(appkey, currentUserId, updatedConversationFunc);
19605
20266
  },
19606
20267
  get() {
19607
- return manager ?? nullConversationManager;
20268
+ return manager$1 ?? nullConversationManager;
19608
20269
  }
19609
20270
  };
19610
20271
 
@@ -19686,7 +20347,7 @@
19686
20347
  sentStatus: exports.SentStatus.SENT,
19687
20348
  receivedTime: getServerTime$1().toString(),
19688
20349
  isStatusMessage: messageInstance.isStatusMessage,
19689
- receivedStatus: exports.ReceivedStatus.READ,
20350
+ receivedStatus: dialogMessage.msgRead ? exports.ReceivedStatus.READ : dialogMessage.msgArrival ? exports.ReceivedStatus.RECEIVED : exports.ReceivedStatus.IDLE,
19690
20351
  disableNotification: localConversation?.notificationStatus === exports.NotificationStatus.OPEN || dialogMessage.srcId.toString() == accountStore.uid
19691
20352
  };
19692
20353
  if (receivedMessage.isStatusMessage && Long.fromNumber(getServerTime$1()).subtract(receivedMessage.sentTime).greaterThan(STATUSMESSAGE_ALIVE_TIMEMS)) {
@@ -19770,6 +20431,117 @@
19770
20431
  parseChatRecordMsgDetails: parseChatRecordMsgDetails$1
19771
20432
  };
19772
20433
 
20434
+ const UNREADMESSAGEUIDS_KEY = 'unreadMessageUids';
20435
+ class MessageReceiptManager {
20436
+ localStore;
20437
+ constructor(appkey, currentUserId) {
20438
+ const suffix = `receipt-${appkey}-${currentUserId}`;
20439
+ this.localStore = new AppStorage(suffix);
20440
+ }
20441
+ storeUnreadMessageUids(messageList) {
20442
+ const validMessages = messageList.filter(m => m.isCounted && m.messageDirection !== exports.MessageDirection.SEND);
20443
+ const messageUids = validMessages.map(m => m.messageUId);
20444
+ const existingUids = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
20445
+ const updatedUids = [...new Set([...existingUids, ...messageUids])];
20446
+ this.localStore.set(UNREADMESSAGEUIDS_KEY, updatedUids);
20447
+ }
20448
+ formatReceiptMessages(messages) {
20449
+ const privateMessages = [];
20450
+ const groupMessages = [];
20451
+ messages.forEach(m => {
20452
+ if (m.conversationType === exports.ConversationType.PRIVATE) {
20453
+ privateMessages.push(m);
20454
+ } else {
20455
+ groupMessages.push(m);
20456
+ }
20457
+ });
20458
+ const privateReceiptMessages = Object.entries(privateMessages.reduce((acc, msg) => {
20459
+ if (!acc[msg.targetId]) {
20460
+ acc[msg.targetId] = [];
20461
+ }
20462
+ acc[msg.targetId].push(msg.messageUId);
20463
+ return acc;
20464
+ }, {})).map(([conversationId, messageIds]) => ({
20465
+ destId: Long.fromString(conversationId),
20466
+ msgIds: messageIds
20467
+ }));
20468
+ const groupReceiptMessages = groupMessages.reduce((acc, msg) => {
20469
+ const existingGroup = acc.find(g => g.groupId.equals(Long.fromString(msg.targetId)) && g.userId.equals(Long.fromString(msg.senderUserId)));
20470
+ if (existingGroup) {
20471
+ existingGroup.msgIds.push(msg.messageUId);
20472
+ } else {
20473
+ acc.push({
20474
+ groupId: Long.fromString(msg.targetId),
20475
+ userId: Long.fromString(msg.senderUserId),
20476
+ msgIds: [msg.messageUId]
20477
+ });
20478
+ }
20479
+ return acc;
20480
+ }, []);
20481
+ return {
20482
+ privateReceiptMessages,
20483
+ groupReceiptMessages
20484
+ };
20485
+ }
20486
+ filterValidMessages(messageList) {
20487
+ return messageList.filter(m => m.isCounted && m.messageDirection !== exports.MessageDirection.SEND);
20488
+ }
20489
+ async sendArrivalReceipts(messageList) {
20490
+ this.storeUnreadMessageUids(messageList);
20491
+ const validMessages = this.filterValidMessages(messageList);
20492
+ const {
20493
+ privateReceiptMessages,
20494
+ groupReceiptMessages
20495
+ } = this.formatReceiptMessages(validMessages);
20496
+ if (privateReceiptMessages.length) {
20497
+ await sendPrivateChatArrivalAck({
20498
+ chatMessage: privateReceiptMessages
20499
+ });
20500
+ }
20501
+ if (groupReceiptMessages.length) {
20502
+ await sendGroupChatReadAck({
20503
+ groupChatMessage: groupReceiptMessages
20504
+ });
20505
+ }
20506
+ }
20507
+ async sendReadReceipts(messageList) {
20508
+ const storedUnreadUids = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
20509
+ const validMessages = this.filterValidMessages(messageList).filter(m => storedUnreadUids.includes(m.messageUId));
20510
+ try {
20511
+ const {
20512
+ privateReceiptMessages,
20513
+ groupReceiptMessages
20514
+ } = this.formatReceiptMessages(validMessages);
20515
+ if (privateReceiptMessages.length) {
20516
+ await sendPrivateChatReadAck({
20517
+ chatMessage: privateReceiptMessages
20518
+ });
20519
+ }
20520
+ if (groupReceiptMessages.length) {
20521
+ await sendGroupChatArrivalAck({
20522
+ groupChatMessage: groupReceiptMessages
20523
+ });
20524
+ }
20525
+ const latestUnreadUids = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
20526
+ const sentMessageUids = validMessages.map(m => m.messageUId);
20527
+ const remainingUids = latestUnreadUids.filter(uid => !sentMessageUids.includes(uid));
20528
+ this.localStore.set(UNREADMESSAGEUIDS_KEY, remainingUids);
20529
+ } catch (error) {
20530
+ console.error('发送已读回执失败:', error);
20531
+ throw error;
20532
+ }
20533
+ }
20534
+ }
20535
+ let manager;
20536
+ var MessageReceiptManager$1 = {
20537
+ create(appkey, currentUserId) {
20538
+ manager = new MessageReceiptManager(appkey, currentUserId);
20539
+ },
20540
+ get() {
20541
+ return manager;
20542
+ }
20543
+ };
20544
+
19773
20545
  class MessageLoader {
19774
20546
  watcher;
19775
20547
  pullingMsg = false;
@@ -19906,8 +20678,10 @@
19906
20678
  }
19907
20679
  });
19908
20680
  if (messages.length) {
19909
- this.watcher.batchMessage?.(messages);
20681
+ let normalMessages = this.handleReceiptMessages(messages);
20682
+ this.watcher.batchMessage?.(normalMessages);
19910
20683
  }
20684
+ MessageReceiptManager$1.get()?.sendArrivalReceipts(messages);
19911
20685
  if (done) {
19912
20686
  if (seqno.ge(this.serverMsgSeqno)) {
19913
20687
  this.serverMsgSeqno = seqno;
@@ -19926,6 +20700,39 @@
19926
20700
  }
19927
20701
  });
19928
20702
  }
20703
+ handleReceiptMessages(messages) {
20704
+ const normalMessages = [];
20705
+ const receiptnotificationMessages = [];
20706
+ messages.forEach(msg => {
20707
+ if (msg.messageType === NotiMessageTypes.GROUP_ARRIVAL_RECEIPT || msg.messageType === NotiMessageTypes.GROUP_READ_RECEIPT || msg.messageType === NotiMessageTypes.PRIVATE_ARRIVAL_RECEIPT || msg.messageType === NotiMessageTypes.PRIVATE_READ_RECEIPT) {
20708
+ receiptnotificationMessages.push(msg);
20709
+ } else {
20710
+ normalMessages.push(msg);
20711
+ }
20712
+ });
20713
+ const sentMessages = normalMessages.filter(m => m.messageDirection === exports.MessageDirection.SEND);
20714
+ receiptnotificationMessages.forEach(notiMsg => {
20715
+ const notiContent = notiMsg.content;
20716
+ const isArrivalReceipt = notiMsg.messageType === NotiMessageTypes.GROUP_ARRIVAL_RECEIPT || notiMsg.messageType === NotiMessageTypes.PRIVATE_ARRIVAL_RECEIPT;
20717
+ sentMessages.forEach(msg => {
20718
+ if (notiContent.msgIdList.includes(msg.messageUId)) {
20719
+ if (isArrivalReceipt) {
20720
+ msg.receivedStatus = exports.ReceivedStatus.RECEIVED;
20721
+ } else {
20722
+ msg.receivedStatus = exports.ReceivedStatus.READ;
20723
+ }
20724
+ }
20725
+ });
20726
+ this.watcher.onReceiptReceived?.({
20727
+ conversation: {
20728
+ conversationType: notiMsg.conversationType,
20729
+ targetId: notiMsg.targetId
20730
+ },
20731
+ messageUIdList: notiContent.msgIdList
20732
+ }, notiMsg.messageType === NotiMessageTypes.GROUP_ARRIVAL_RECEIPT || notiMsg.messageType === NotiMessageTypes.PRIVATE_ARRIVAL_RECEIPT ? 0 : 1);
20733
+ });
20734
+ return normalMessages;
20735
+ }
19929
20736
  isExistPersistedMessage(messageList) {
19930
20737
  return messageList.some(m => m.isPersited);
19931
20738
  }
@@ -19978,6 +20785,11 @@
19978
20785
 
19979
20786
  const RecallCommandMessage = registerMessageType$1(MessageTypes.RECALL, true, false, false);
19980
20787
 
20788
+ const GroupArrivalReceiptMessage = registerMessageType$1(NotiMessageTypes.GROUP_ARRIVAL_RECEIPT, false, false, true);
20789
+ const GroupReadReceiptMessage = registerMessageType$1(NotiMessageTypes.GROUP_READ_RECEIPT, false, false, true);
20790
+ const PrivateArrivalReceiptMessage = registerMessageType$1(NotiMessageTypes.PRIVATE_ARRIVAL_RECEIPT, false, false, true);
20791
+ const PrivateReadReceiptMessage = registerMessageType$1(NotiMessageTypes.PRIVATE_READ_RECEIPT, false, false, true);
20792
+
19981
20793
  const DEFAULT_SOCKET_URI = 'wss://imweb.mp.net:6443';
19982
20794
  class LibLoader {
19983
20795
  options;
@@ -20006,7 +20818,8 @@
20006
20818
  batchMessage: undefined,
20007
20819
  conversationState: undefined,
20008
20820
  onPush: undefined,
20009
- onRecall: undefined
20821
+ onRecall: undefined,
20822
+ onReceiptReceived: undefined
20010
20823
  };
20011
20824
  webSocketServer.setServerInfo(this.getWebSocketUrl());
20012
20825
  webSocketServer.setCallback({
@@ -20039,6 +20852,10 @@
20039
20852
  registerMessage(MessageTypes.GROUP_INVITATION, InvitationMessage);
20040
20853
  registerMessage(MessageTypes.REDPACKET, RedEnvelopeMessage);
20041
20854
  registerMessage(MessageTypes.TRANSFER, TransferMessage);
20855
+ registerMessage(NotiMessageTypes.GROUP_ARRIVAL_RECEIPT, GroupArrivalReceiptMessage);
20856
+ registerMessage(NotiMessageTypes.GROUP_READ_RECEIPT, GroupReadReceiptMessage);
20857
+ registerMessage(NotiMessageTypes.PRIVATE_ARRIVAL_RECEIPT, PrivateArrivalReceiptMessage);
20858
+ registerMessage(NotiMessageTypes.PRIVATE_READ_RECEIPT, PrivateReadReceiptMessage);
20042
20859
  }
20043
20860
  async connect() {
20044
20861
  if (this.connectionStatus === exports.ConnectionStatus.CONNECTED) {
@@ -20056,6 +20873,7 @@
20056
20873
  this.isInternalConnected = true;
20057
20874
  ConversationManager$1.get().destroyed();
20058
20875
  ConversationManager$1.create(this.options.appkey, accountStore.uid.toString(), this.watcher.conversationState);
20876
+ MessageReceiptManager$1.create(this.options.appkey, accountStore.uid.toString());
20059
20877
  this.messageLoader?.stop();
20060
20878
  this.messageLoader = new MessageLoader(this.watcher, this.options);
20061
20879
  synchronizeServerTime();
@@ -26736,7 +27554,7 @@
26736
27554
  sentStatus,
26737
27555
  receivedTime: '0',
26738
27556
  isStatusMessage: message.isStatusMessage,
26739
- receivedStatus: exports.ReceivedStatus.UNREAD,
27557
+ receivedStatus: exports.ReceivedStatus.IDLE,
26740
27558
  disableNotification: true
26741
27559
  });
26742
27560
 
@@ -27363,7 +28181,6 @@
27363
28181
  ...baseParams,
27364
28182
  groupId: Long.fromString(dialogId)
27365
28183
  };
27366
- debugger;
27367
28184
  if (isDef(message.content.mentionedInfo)) {
27368
28185
  const mentionedInfo = message.content.mentionedInfo;
27369
28186
  if (mentionedInfo.type === exports.MentionedType.ALL) ; else if (mentionedInfo.type === exports.MentionedType.SINGAL && mentionedInfo.userIdList?.length) {
@@ -27470,6 +28287,13 @@
27470
28287
  messageUids.forEach(messageUId => {
27471
28288
  this.emit(exports.Events.RECALL, messageUId);
27472
28289
  });
28290
+ },
28291
+ onReceiptReceived: (event, type) => {
28292
+ if (type === 0) {
28293
+ this.emit(exports.Events.ARRIVAL_RECEIPT_RECEIVED, event);
28294
+ } else {
28295
+ this.emit(exports.Events.READ_RECEIPT_RECEIVED, event);
28296
+ }
27473
28297
  }
27474
28298
  });
27475
28299
  }
@@ -27687,6 +28511,9 @@
27687
28511
  clearConversationMessageDraft(conversation) {
27688
28512
  ConversationManager$1.get().clearDraft(conversation);
27689
28513
  }
28514
+ async sendReadReceipts(messages) {
28515
+ await MessageReceiptManager$1.get()?.sendReadReceipts(messages);
28516
+ }
27690
28517
  formatConversation(serverConversationData) {
27691
28518
  const {
27692
28519
  dialog,
@@ -28963,6 +29790,18 @@
28963
29790
  const parseChatRecordMsgDetails = (conversation, detailItems) => {
28964
29791
  return serverMessageParser.parseChatRecordMsgDetails(conversation, detailItems);
28965
29792
  };
29793
+ const sendReadReceipts = async messages => {
29794
+ try {
29795
+ await imClient.sendReadReceipts(messages);
29796
+ return {
29797
+ code: exports.ErrorCode.SUCCESS
29798
+ };
29799
+ } catch (error) {
29800
+ return {
29801
+ code: exports.ErrorCode.UNKNOWN
29802
+ };
29803
+ }
29804
+ };
28966
29805
  const mockLogin = config => {
28967
29806
  return login(config);
28968
29807
  };
@@ -29033,6 +29872,7 @@
29033
29872
  exports.sendHQVoiceMessage = sendHQVoiceMessage;
29034
29873
  exports.sendImageMessage = sendImageMessage;
29035
29874
  exports.sendMessage = sendMessage;
29875
+ exports.sendReadReceipts = sendReadReceipts;
29036
29876
  exports.sendSightMessage = sendSightMessage;
29037
29877
  exports.sendTextMessage = sendTextMessage;
29038
29878
  exports.setConversationNotificationStatus = setConversationNotificationStatus;