@onyx-p/imlib-web 1.7.6 → 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.esm.js CHANGED
@@ -99,11 +99,10 @@ var SentStatus;
99
99
  })(SentStatus || (SentStatus = {}));
100
100
  var ReceivedStatus;
101
101
  (function (ReceivedStatus) {
102
- ReceivedStatus[ReceivedStatus["READ"] = 1] = "READ";
103
- ReceivedStatus[ReceivedStatus["LISTENED"] = 2] = "LISTENED";
104
- ReceivedStatus[ReceivedStatus["DOWNLOADED"] = 4] = "DOWNLOADED";
105
- ReceivedStatus[ReceivedStatus["RETRIEVED"] = 8] = "RETRIEVED";
106
- ReceivedStatus[ReceivedStatus["UNREAD"] = 0] = "UNREAD";
102
+ ReceivedStatus[ReceivedStatus["IDLE"] = 0] = "IDLE";
103
+ ReceivedStatus[ReceivedStatus["RECEIVED"] = 1] = "RECEIVED";
104
+ ReceivedStatus[ReceivedStatus["READ"] = 2] = "READ";
105
+ ReceivedStatus[ReceivedStatus["LISTENED"] = 3] = "LISTENED";
107
106
  })(ReceivedStatus || (ReceivedStatus = {}));
108
107
  var NotificationLevel;
109
108
  (function (NotificationLevel) {
@@ -135,6 +134,8 @@ var Events;
135
134
  Events["CONVERSATION"] = "CONVERSATION";
136
135
  Events["PUSH"] = "PUSH";
137
136
  Events["RECALL"] = "RECALL";
137
+ Events["ARRIVAL_RECEIPT_RECEIVED"] = "ARRIVAL_RECEIPT_RECEIVED";
138
+ Events["READ_RECEIPT_RECEIVED"] = "READ_RECEIPT_RECEIVED";
138
139
  })(Events || (Events = {}));
139
140
 
140
141
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -9487,6 +9488,10 @@ var CmdIds;
9487
9488
  CmdIds[CmdIds["DeletePrivateDialog"] = 1610682372] = "DeletePrivateDialog";
9488
9489
  CmdIds[CmdIds["DeleteGroupDialog"] = 1610747908] = "DeleteGroupDialog";
9489
9490
  CmdIds[CmdIds["GetDialogChangedStatus"] = 1610711094] = "GetDialogChangedStatus";
9491
+ CmdIds[CmdIds["SendGroupChatArrivalAck"] = 1610747952] = "SendGroupChatArrivalAck";
9492
+ CmdIds[CmdIds["SendGroupChatReadAck"] = 1610747953] = "SendGroupChatReadAck";
9493
+ CmdIds[CmdIds["SendPrivateChatArrivalAck"] = 1610682403] = "SendPrivateChatArrivalAck";
9494
+ CmdIds[CmdIds["SendPrivateChatReadAck"] = 1610682404] = "SendPrivateChatReadAck";
9490
9495
  CmdIds[CmdIds["HeartbeanResp"] = 268468225] = "HeartbeanResp";
9491
9496
  CmdIds[CmdIds["NewMessagePush"] = 1610711040] = "NewMessagePush";
9492
9497
  CmdIds[CmdIds["DialogChangedPush"] = 1610711096] = "DialogChangedPush";
@@ -14504,6 +14509,8 @@ $root$1.DialogMessage = (() => {
14504
14509
  * @property {Long|null} [seqno] DialogMessage seqno
14505
14510
  * @property {string|null} [replyMarkup] DialogMessage replyMarkup
14506
14511
  * @property {string|null} [extra] DialogMessage extra
14512
+ * @property {boolean|null} [msgArrival] DialogMessage msgArrival
14513
+ * @property {boolean|null} [msgRead] DialogMessage msgRead
14507
14514
  */
14508
14515
 
14509
14516
  /**
@@ -14718,6 +14725,22 @@ $root$1.DialogMessage = (() => {
14718
14725
  */
14719
14726
  DialogMessage.prototype.extra = "";
14720
14727
 
14728
+ /**
14729
+ * DialogMessage msgArrival.
14730
+ * @member {boolean} msgArrival
14731
+ * @memberof DialogMessage
14732
+ * @instance
14733
+ */
14734
+ DialogMessage.prototype.msgArrival = false;
14735
+
14736
+ /**
14737
+ * DialogMessage msgRead.
14738
+ * @member {boolean} msgRead
14739
+ * @memberof DialogMessage
14740
+ * @instance
14741
+ */
14742
+ DialogMessage.prototype.msgRead = false;
14743
+
14721
14744
  /**
14722
14745
  * Encodes the specified DialogMessage message. Does not implicitly {@link DialogMessage.verify|verify} messages.
14723
14746
  * @function encode
@@ -14754,6 +14777,8 @@ $root$1.DialogMessage = (() => {
14754
14777
  if (message.seqno != null && Object.hasOwnProperty.call(message, "seqno")) writer.uint32(/* id 23, wireType 0 =*/184).int64(message.seqno);
14755
14778
  if (message.replyMarkup != null && Object.hasOwnProperty.call(message, "replyMarkup")) writer.uint32(/* id 24, wireType 2 =*/194).string(message.replyMarkup);
14756
14779
  if (message.extra != null && Object.hasOwnProperty.call(message, "extra")) writer.uint32(/* id 25, wireType 2 =*/202).string(message.extra);
14780
+ if (message.msgArrival != null && Object.hasOwnProperty.call(message, "msgArrival")) writer.uint32(/* id 26, wireType 0 =*/208).bool(message.msgArrival);
14781
+ if (message.msgRead != null && Object.hasOwnProperty.call(message, "msgRead")) writer.uint32(/* id 27, wireType 0 =*/216).bool(message.msgRead);
14757
14782
  return writer;
14758
14783
  };
14759
14784
 
@@ -14900,6 +14925,16 @@ $root$1.DialogMessage = (() => {
14900
14925
  message.extra = reader.string();
14901
14926
  break;
14902
14927
  }
14928
+ case 26:
14929
+ {
14930
+ message.msgArrival = reader.bool();
14931
+ break;
14932
+ }
14933
+ case 27:
14934
+ {
14935
+ message.msgRead = reader.bool();
14936
+ break;
14937
+ }
14903
14938
  default:
14904
14939
  reader.skipType(tag & 7);
14905
14940
  break;
@@ -17595,6 +17630,304 @@ const NewMessageNotificationResp = $root$1.NewMessageNotificationResp = (() => {
17595
17630
  };
17596
17631
  return NewMessageNotificationResp;
17597
17632
  })();
17633
+ $root$1.ChatMessage = (() => {
17634
+ /**
17635
+ * Properties of a ChatMessage.
17636
+ * @exports IChatMessage
17637
+ * @interface IChatMessage
17638
+ * @property {Long|null} [destId] ChatMessage destId
17639
+ * @property {Array.<Long>|null} [msgId] ChatMessage msgId
17640
+ */
17641
+
17642
+ /**
17643
+ * Constructs a new ChatMessage.
17644
+ * @exports ChatMessage
17645
+ * @classdesc Represents a ChatMessage.
17646
+ * @implements IChatMessage
17647
+ * @constructor
17648
+ * @param {IChatMessage=} [properties] Properties to set
17649
+ */
17650
+ function ChatMessage(properties) {
17651
+ this.msgId = [];
17652
+ 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]];
17653
+ }
17654
+
17655
+ /**
17656
+ * ChatMessage destId.
17657
+ * @member {Long} destId
17658
+ * @memberof ChatMessage
17659
+ * @instance
17660
+ */
17661
+ ChatMessage.prototype.destId = $util$1.Long ? $util$1.Long.fromBits(0, 0, false) : 0;
17662
+
17663
+ /**
17664
+ * ChatMessage msgId.
17665
+ * @member {Array.<Long>} msgId
17666
+ * @memberof ChatMessage
17667
+ * @instance
17668
+ */
17669
+ ChatMessage.prototype.msgId = $util$1.emptyArray;
17670
+
17671
+ /**
17672
+ * Encodes the specified ChatMessage message. Does not implicitly {@link ChatMessage.verify|verify} messages.
17673
+ * @function encode
17674
+ * @memberof ChatMessage
17675
+ * @static
17676
+ * @param {IChatMessage} message ChatMessage message or plain object to encode
17677
+ * @param {$protobuf.Writer} [writer] Writer to encode to
17678
+ * @returns {$protobuf.Writer} Writer
17679
+ */
17680
+ ChatMessage.encode = function encode(message, writer) {
17681
+ if (!writer) writer = $Writer$1.create();
17682
+ if (message.destId != null && Object.hasOwnProperty.call(message, "destId")) writer.uint32(/* id 1, wireType 0 =*/8).int64(message.destId);
17683
+ if (message.msgId != null && message.msgId.length) {
17684
+ writer.uint32(/* id 2, wireType 2 =*/18).fork();
17685
+ for (let i = 0; i < message.msgId.length; ++i) writer.int64(message.msgId[i]);
17686
+ writer.ldelim();
17687
+ }
17688
+ return writer;
17689
+ };
17690
+
17691
+ /**
17692
+ * Decodes a ChatMessage message from the specified reader or buffer.
17693
+ * @function decode
17694
+ * @memberof ChatMessage
17695
+ * @static
17696
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
17697
+ * @param {number} [length] Message length if known beforehand
17698
+ * @returns {ChatMessage} ChatMessage
17699
+ * @throws {Error} If the payload is not a reader or valid buffer
17700
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
17701
+ */
17702
+ ChatMessage.decode = function decode(reader, length) {
17703
+ if (!(reader instanceof $Reader$1)) reader = $Reader$1.create(reader);
17704
+ let end = length === undefined ? reader.len : reader.pos + length,
17705
+ message = new $root$1.ChatMessage();
17706
+ while (reader.pos < end) {
17707
+ let tag = reader.uint32();
17708
+ switch (tag >>> 3) {
17709
+ case 1:
17710
+ {
17711
+ message.destId = reader.int64();
17712
+ break;
17713
+ }
17714
+ case 2:
17715
+ {
17716
+ if (!(message.msgId && message.msgId.length)) message.msgId = [];
17717
+ if ((tag & 7) === 2) {
17718
+ let end2 = reader.uint32() + reader.pos;
17719
+ while (reader.pos < end2) message.msgId.push(reader.int64());
17720
+ } else message.msgId.push(reader.int64());
17721
+ break;
17722
+ }
17723
+ default:
17724
+ reader.skipType(tag & 7);
17725
+ break;
17726
+ }
17727
+ }
17728
+ return message;
17729
+ };
17730
+
17731
+ /**
17732
+ * Gets the default type url for ChatMessage
17733
+ * @function getTypeUrl
17734
+ * @memberof ChatMessage
17735
+ * @static
17736
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
17737
+ * @returns {string} The default type url
17738
+ */
17739
+ ChatMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
17740
+ if (typeUrlPrefix === undefined) {
17741
+ typeUrlPrefix = "type.googleapis.com";
17742
+ }
17743
+ return typeUrlPrefix + "/ChatMessage";
17744
+ };
17745
+ return ChatMessage;
17746
+ })();
17747
+ const SendPrivateChatArrivalAckReq = $root$1.SendPrivateChatArrivalAckReq = (() => {
17748
+ /**
17749
+ * Properties of a SendPrivateChatArrivalAckReq.
17750
+ * @exports ISendPrivateChatArrivalAckReq
17751
+ * @interface ISendPrivateChatArrivalAckReq
17752
+ * @property {Array.<IChatMessage>|null} [chatMessage] SendPrivateChatArrivalAckReq chatMessage
17753
+ */
17754
+
17755
+ /**
17756
+ * Constructs a new SendPrivateChatArrivalAckReq.
17757
+ * @exports SendPrivateChatArrivalAckReq
17758
+ * @classdesc Represents a SendPrivateChatArrivalAckReq.
17759
+ * @implements ISendPrivateChatArrivalAckReq
17760
+ * @constructor
17761
+ * @param {ISendPrivateChatArrivalAckReq=} [properties] Properties to set
17762
+ */
17763
+ function SendPrivateChatArrivalAckReq(properties) {
17764
+ this.chatMessage = [];
17765
+ 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]];
17766
+ }
17767
+
17768
+ /**
17769
+ * SendPrivateChatArrivalAckReq chatMessage.
17770
+ * @member {Array.<IChatMessage>} chatMessage
17771
+ * @memberof SendPrivateChatArrivalAckReq
17772
+ * @instance
17773
+ */
17774
+ SendPrivateChatArrivalAckReq.prototype.chatMessage = $util$1.emptyArray;
17775
+
17776
+ /**
17777
+ * Encodes the specified SendPrivateChatArrivalAckReq message. Does not implicitly {@link SendPrivateChatArrivalAckReq.verify|verify} messages.
17778
+ * @function encode
17779
+ * @memberof SendPrivateChatArrivalAckReq
17780
+ * @static
17781
+ * @param {ISendPrivateChatArrivalAckReq} message SendPrivateChatArrivalAckReq message or plain object to encode
17782
+ * @param {$protobuf.Writer} [writer] Writer to encode to
17783
+ * @returns {$protobuf.Writer} Writer
17784
+ */
17785
+ SendPrivateChatArrivalAckReq.encode = function encode(message, writer) {
17786
+ if (!writer) writer = $Writer$1.create();
17787
+ 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();
17788
+ return writer;
17789
+ };
17790
+
17791
+ /**
17792
+ * Decodes a SendPrivateChatArrivalAckReq message from the specified reader or buffer.
17793
+ * @function decode
17794
+ * @memberof SendPrivateChatArrivalAckReq
17795
+ * @static
17796
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
17797
+ * @param {number} [length] Message length if known beforehand
17798
+ * @returns {SendPrivateChatArrivalAckReq} SendPrivateChatArrivalAckReq
17799
+ * @throws {Error} If the payload is not a reader or valid buffer
17800
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
17801
+ */
17802
+ SendPrivateChatArrivalAckReq.decode = function decode(reader, length) {
17803
+ if (!(reader instanceof $Reader$1)) reader = $Reader$1.create(reader);
17804
+ let end = length === undefined ? reader.len : reader.pos + length,
17805
+ message = new $root$1.SendPrivateChatArrivalAckReq();
17806
+ while (reader.pos < end) {
17807
+ let tag = reader.uint32();
17808
+ switch (tag >>> 3) {
17809
+ case 1:
17810
+ {
17811
+ if (!(message.chatMessage && message.chatMessage.length)) message.chatMessage = [];
17812
+ message.chatMessage.push($root$1.ChatMessage.decode(reader, reader.uint32()));
17813
+ break;
17814
+ }
17815
+ default:
17816
+ reader.skipType(tag & 7);
17817
+ break;
17818
+ }
17819
+ }
17820
+ return message;
17821
+ };
17822
+
17823
+ /**
17824
+ * Gets the default type url for SendPrivateChatArrivalAckReq
17825
+ * @function getTypeUrl
17826
+ * @memberof SendPrivateChatArrivalAckReq
17827
+ * @static
17828
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
17829
+ * @returns {string} The default type url
17830
+ */
17831
+ SendPrivateChatArrivalAckReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
17832
+ if (typeUrlPrefix === undefined) {
17833
+ typeUrlPrefix = "type.googleapis.com";
17834
+ }
17835
+ return typeUrlPrefix + "/SendPrivateChatArrivalAckReq";
17836
+ };
17837
+ return SendPrivateChatArrivalAckReq;
17838
+ })();
17839
+ const SendPrivateChatReadAckReq = $root$1.SendPrivateChatReadAckReq = (() => {
17840
+ /**
17841
+ * Properties of a SendPrivateChatReadAckReq.
17842
+ * @exports ISendPrivateChatReadAckReq
17843
+ * @interface ISendPrivateChatReadAckReq
17844
+ * @property {Array.<IChatMessage>|null} [chatMessage] SendPrivateChatReadAckReq chatMessage
17845
+ */
17846
+
17847
+ /**
17848
+ * Constructs a new SendPrivateChatReadAckReq.
17849
+ * @exports SendPrivateChatReadAckReq
17850
+ * @classdesc Represents a SendPrivateChatReadAckReq.
17851
+ * @implements ISendPrivateChatReadAckReq
17852
+ * @constructor
17853
+ * @param {ISendPrivateChatReadAckReq=} [properties] Properties to set
17854
+ */
17855
+ function SendPrivateChatReadAckReq(properties) {
17856
+ this.chatMessage = [];
17857
+ 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]];
17858
+ }
17859
+
17860
+ /**
17861
+ * SendPrivateChatReadAckReq chatMessage.
17862
+ * @member {Array.<IChatMessage>} chatMessage
17863
+ * @memberof SendPrivateChatReadAckReq
17864
+ * @instance
17865
+ */
17866
+ SendPrivateChatReadAckReq.prototype.chatMessage = $util$1.emptyArray;
17867
+
17868
+ /**
17869
+ * Encodes the specified SendPrivateChatReadAckReq message. Does not implicitly {@link SendPrivateChatReadAckReq.verify|verify} messages.
17870
+ * @function encode
17871
+ * @memberof SendPrivateChatReadAckReq
17872
+ * @static
17873
+ * @param {ISendPrivateChatReadAckReq} message SendPrivateChatReadAckReq message or plain object to encode
17874
+ * @param {$protobuf.Writer} [writer] Writer to encode to
17875
+ * @returns {$protobuf.Writer} Writer
17876
+ */
17877
+ SendPrivateChatReadAckReq.encode = function encode(message, writer) {
17878
+ if (!writer) writer = $Writer$1.create();
17879
+ 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();
17880
+ return writer;
17881
+ };
17882
+
17883
+ /**
17884
+ * Decodes a SendPrivateChatReadAckReq message from the specified reader or buffer.
17885
+ * @function decode
17886
+ * @memberof SendPrivateChatReadAckReq
17887
+ * @static
17888
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
17889
+ * @param {number} [length] Message length if known beforehand
17890
+ * @returns {SendPrivateChatReadAckReq} SendPrivateChatReadAckReq
17891
+ * @throws {Error} If the payload is not a reader or valid buffer
17892
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
17893
+ */
17894
+ SendPrivateChatReadAckReq.decode = function decode(reader, length) {
17895
+ if (!(reader instanceof $Reader$1)) reader = $Reader$1.create(reader);
17896
+ let end = length === undefined ? reader.len : reader.pos + length,
17897
+ message = new $root$1.SendPrivateChatReadAckReq();
17898
+ while (reader.pos < end) {
17899
+ let tag = reader.uint32();
17900
+ switch (tag >>> 3) {
17901
+ case 1:
17902
+ {
17903
+ if (!(message.chatMessage && message.chatMessage.length)) message.chatMessage = [];
17904
+ message.chatMessage.push($root$1.ChatMessage.decode(reader, reader.uint32()));
17905
+ break;
17906
+ }
17907
+ default:
17908
+ reader.skipType(tag & 7);
17909
+ break;
17910
+ }
17911
+ }
17912
+ return message;
17913
+ };
17914
+
17915
+ /**
17916
+ * Gets the default type url for SendPrivateChatReadAckReq
17917
+ * @function getTypeUrl
17918
+ * @memberof SendPrivateChatReadAckReq
17919
+ * @static
17920
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
17921
+ * @returns {string} The default type url
17922
+ */
17923
+ SendPrivateChatReadAckReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
17924
+ if (typeUrlPrefix === undefined) {
17925
+ typeUrlPrefix = "type.googleapis.com";
17926
+ }
17927
+ return typeUrlPrefix + "/SendPrivateChatReadAckReq";
17928
+ };
17929
+ return SendPrivateChatReadAckReq;
17930
+ })();
17598
17931
 
17599
17932
  /*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
17600
17933
 
@@ -18379,7 +18712,7 @@ const RecallGroupChatMessageReq = $root.RecallGroupChatMessageReq = (() => {
18379
18712
  };
18380
18713
  return RecallGroupChatMessageReq;
18381
18714
  })();
18382
- const DeleteGroupChatDialogReq = $root.DeleteGroupChatDialogReq = (() => {
18715
+ $root.DeleteGroupChatDialogReq = (() => {
18383
18716
  /**
18384
18717
  * Properties of a DeleteGroupChatDialogReq.
18385
18718
  * @exports IDeleteGroupChatDialogReq
@@ -18469,6 +18802,319 @@ const DeleteGroupChatDialogReq = $root.DeleteGroupChatDialogReq = (() => {
18469
18802
  };
18470
18803
  return DeleteGroupChatDialogReq;
18471
18804
  })();
18805
+ $root.GroupChatMessage = (() => {
18806
+ /**
18807
+ * Properties of a GroupChatMessage.
18808
+ * @exports IGroupChatMessage
18809
+ * @interface IGroupChatMessage
18810
+ * @property {Long|null} [groupId] GroupChatMessage groupId
18811
+ * @property {Long|null} [userId] GroupChatMessage userId
18812
+ * @property {Array.<Long>|null} [msgId] GroupChatMessage msgId
18813
+ */
18814
+
18815
+ /**
18816
+ * Constructs a new GroupChatMessage.
18817
+ * @exports GroupChatMessage
18818
+ * @classdesc Represents a GroupChatMessage.
18819
+ * @implements IGroupChatMessage
18820
+ * @constructor
18821
+ * @param {IGroupChatMessage=} [properties] Properties to set
18822
+ */
18823
+ function GroupChatMessage(properties) {
18824
+ this.msgId = [];
18825
+ 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]];
18826
+ }
18827
+
18828
+ /**
18829
+ * GroupChatMessage groupId.
18830
+ * @member {Long} groupId
18831
+ * @memberof GroupChatMessage
18832
+ * @instance
18833
+ */
18834
+ GroupChatMessage.prototype.groupId = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;
18835
+
18836
+ /**
18837
+ * GroupChatMessage userId.
18838
+ * @member {Long} userId
18839
+ * @memberof GroupChatMessage
18840
+ * @instance
18841
+ */
18842
+ GroupChatMessage.prototype.userId = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;
18843
+
18844
+ /**
18845
+ * GroupChatMessage msgId.
18846
+ * @member {Array.<Long>} msgId
18847
+ * @memberof GroupChatMessage
18848
+ * @instance
18849
+ */
18850
+ GroupChatMessage.prototype.msgId = $util.emptyArray;
18851
+
18852
+ /**
18853
+ * Encodes the specified GroupChatMessage message. Does not implicitly {@link GroupChatMessage.verify|verify} messages.
18854
+ * @function encode
18855
+ * @memberof GroupChatMessage
18856
+ * @static
18857
+ * @param {IGroupChatMessage} message GroupChatMessage message or plain object to encode
18858
+ * @param {$protobuf.Writer} [writer] Writer to encode to
18859
+ * @returns {$protobuf.Writer} Writer
18860
+ */
18861
+ GroupChatMessage.encode = function encode(message, writer) {
18862
+ if (!writer) writer = $Writer.create();
18863
+ if (message.groupId != null && Object.hasOwnProperty.call(message, "groupId")) writer.uint32(/* id 1, wireType 0 =*/8).int64(message.groupId);
18864
+ if (message.userId != null && Object.hasOwnProperty.call(message, "userId")) writer.uint32(/* id 2, wireType 0 =*/16).int64(message.userId);
18865
+ if (message.msgId != null && message.msgId.length) {
18866
+ writer.uint32(/* id 3, wireType 2 =*/26).fork();
18867
+ for (let i = 0; i < message.msgId.length; ++i) writer.int64(message.msgId[i]);
18868
+ writer.ldelim();
18869
+ }
18870
+ return writer;
18871
+ };
18872
+
18873
+ /**
18874
+ * Decodes a GroupChatMessage message from the specified reader or buffer.
18875
+ * @function decode
18876
+ * @memberof GroupChatMessage
18877
+ * @static
18878
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
18879
+ * @param {number} [length] Message length if known beforehand
18880
+ * @returns {GroupChatMessage} GroupChatMessage
18881
+ * @throws {Error} If the payload is not a reader or valid buffer
18882
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
18883
+ */
18884
+ GroupChatMessage.decode = function decode(reader, length) {
18885
+ if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
18886
+ let end = length === undefined ? reader.len : reader.pos + length,
18887
+ message = new $root.GroupChatMessage();
18888
+ while (reader.pos < end) {
18889
+ let tag = reader.uint32();
18890
+ switch (tag >>> 3) {
18891
+ case 1:
18892
+ {
18893
+ message.groupId = reader.int64();
18894
+ break;
18895
+ }
18896
+ case 2:
18897
+ {
18898
+ message.userId = reader.int64();
18899
+ break;
18900
+ }
18901
+ case 3:
18902
+ {
18903
+ if (!(message.msgId && message.msgId.length)) message.msgId = [];
18904
+ if ((tag & 7) === 2) {
18905
+ let end2 = reader.uint32() + reader.pos;
18906
+ while (reader.pos < end2) message.msgId.push(reader.int64());
18907
+ } else message.msgId.push(reader.int64());
18908
+ break;
18909
+ }
18910
+ default:
18911
+ reader.skipType(tag & 7);
18912
+ break;
18913
+ }
18914
+ }
18915
+ return message;
18916
+ };
18917
+
18918
+ /**
18919
+ * Gets the default type url for GroupChatMessage
18920
+ * @function getTypeUrl
18921
+ * @memberof GroupChatMessage
18922
+ * @static
18923
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
18924
+ * @returns {string} The default type url
18925
+ */
18926
+ GroupChatMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
18927
+ if (typeUrlPrefix === undefined) {
18928
+ typeUrlPrefix = "type.googleapis.com";
18929
+ }
18930
+ return typeUrlPrefix + "/GroupChatMessage";
18931
+ };
18932
+ return GroupChatMessage;
18933
+ })();
18934
+ const SendGroupChatArrivalAckReq = $root.SendGroupChatArrivalAckReq = (() => {
18935
+ /**
18936
+ * Properties of a SendGroupChatArrivalAckReq.
18937
+ * @exports ISendGroupChatArrivalAckReq
18938
+ * @interface ISendGroupChatArrivalAckReq
18939
+ * @property {Array.<IGroupChatMessage>|null} [groupChatMessage] SendGroupChatArrivalAckReq groupChatMessage
18940
+ */
18941
+
18942
+ /**
18943
+ * Constructs a new SendGroupChatArrivalAckReq.
18944
+ * @exports SendGroupChatArrivalAckReq
18945
+ * @classdesc Represents a SendGroupChatArrivalAckReq.
18946
+ * @implements ISendGroupChatArrivalAckReq
18947
+ * @constructor
18948
+ * @param {ISendGroupChatArrivalAckReq=} [properties] Properties to set
18949
+ */
18950
+ function SendGroupChatArrivalAckReq(properties) {
18951
+ this.groupChatMessage = [];
18952
+ 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]];
18953
+ }
18954
+
18955
+ /**
18956
+ * SendGroupChatArrivalAckReq groupChatMessage.
18957
+ * @member {Array.<IGroupChatMessage>} groupChatMessage
18958
+ * @memberof SendGroupChatArrivalAckReq
18959
+ * @instance
18960
+ */
18961
+ SendGroupChatArrivalAckReq.prototype.groupChatMessage = $util.emptyArray;
18962
+
18963
+ /**
18964
+ * Encodes the specified SendGroupChatArrivalAckReq message. Does not implicitly {@link SendGroupChatArrivalAckReq.verify|verify} messages.
18965
+ * @function encode
18966
+ * @memberof SendGroupChatArrivalAckReq
18967
+ * @static
18968
+ * @param {ISendGroupChatArrivalAckReq} message SendGroupChatArrivalAckReq message or plain object to encode
18969
+ * @param {$protobuf.Writer} [writer] Writer to encode to
18970
+ * @returns {$protobuf.Writer} Writer
18971
+ */
18972
+ SendGroupChatArrivalAckReq.encode = function encode(message, writer) {
18973
+ if (!writer) writer = $Writer.create();
18974
+ 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();
18975
+ return writer;
18976
+ };
18977
+
18978
+ /**
18979
+ * Decodes a SendGroupChatArrivalAckReq message from the specified reader or buffer.
18980
+ * @function decode
18981
+ * @memberof SendGroupChatArrivalAckReq
18982
+ * @static
18983
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
18984
+ * @param {number} [length] Message length if known beforehand
18985
+ * @returns {SendGroupChatArrivalAckReq} SendGroupChatArrivalAckReq
18986
+ * @throws {Error} If the payload is not a reader or valid buffer
18987
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
18988
+ */
18989
+ SendGroupChatArrivalAckReq.decode = function decode(reader, length) {
18990
+ if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
18991
+ let end = length === undefined ? reader.len : reader.pos + length,
18992
+ message = new $root.SendGroupChatArrivalAckReq();
18993
+ while (reader.pos < end) {
18994
+ let tag = reader.uint32();
18995
+ switch (tag >>> 3) {
18996
+ case 1:
18997
+ {
18998
+ if (!(message.groupChatMessage && message.groupChatMessage.length)) message.groupChatMessage = [];
18999
+ message.groupChatMessage.push($root.GroupChatMessage.decode(reader, reader.uint32()));
19000
+ break;
19001
+ }
19002
+ default:
19003
+ reader.skipType(tag & 7);
19004
+ break;
19005
+ }
19006
+ }
19007
+ return message;
19008
+ };
19009
+
19010
+ /**
19011
+ * Gets the default type url for SendGroupChatArrivalAckReq
19012
+ * @function getTypeUrl
19013
+ * @memberof SendGroupChatArrivalAckReq
19014
+ * @static
19015
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
19016
+ * @returns {string} The default type url
19017
+ */
19018
+ SendGroupChatArrivalAckReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
19019
+ if (typeUrlPrefix === undefined) {
19020
+ typeUrlPrefix = "type.googleapis.com";
19021
+ }
19022
+ return typeUrlPrefix + "/SendGroupChatArrivalAckReq";
19023
+ };
19024
+ return SendGroupChatArrivalAckReq;
19025
+ })();
19026
+ const SendGroupChatReadAckReq = $root.SendGroupChatReadAckReq = (() => {
19027
+ /**
19028
+ * Properties of a SendGroupChatReadAckReq.
19029
+ * @exports ISendGroupChatReadAckReq
19030
+ * @interface ISendGroupChatReadAckReq
19031
+ * @property {Array.<IGroupChatMessage>|null} [groupChatMessage] SendGroupChatReadAckReq groupChatMessage
19032
+ */
19033
+
19034
+ /**
19035
+ * Constructs a new SendGroupChatReadAckReq.
19036
+ * @exports SendGroupChatReadAckReq
19037
+ * @classdesc Represents a SendGroupChatReadAckReq.
19038
+ * @implements ISendGroupChatReadAckReq
19039
+ * @constructor
19040
+ * @param {ISendGroupChatReadAckReq=} [properties] Properties to set
19041
+ */
19042
+ function SendGroupChatReadAckReq(properties) {
19043
+ this.groupChatMessage = [];
19044
+ 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]];
19045
+ }
19046
+
19047
+ /**
19048
+ * SendGroupChatReadAckReq groupChatMessage.
19049
+ * @member {Array.<IGroupChatMessage>} groupChatMessage
19050
+ * @memberof SendGroupChatReadAckReq
19051
+ * @instance
19052
+ */
19053
+ SendGroupChatReadAckReq.prototype.groupChatMessage = $util.emptyArray;
19054
+
19055
+ /**
19056
+ * Encodes the specified SendGroupChatReadAckReq message. Does not implicitly {@link SendGroupChatReadAckReq.verify|verify} messages.
19057
+ * @function encode
19058
+ * @memberof SendGroupChatReadAckReq
19059
+ * @static
19060
+ * @param {ISendGroupChatReadAckReq} message SendGroupChatReadAckReq message or plain object to encode
19061
+ * @param {$protobuf.Writer} [writer] Writer to encode to
19062
+ * @returns {$protobuf.Writer} Writer
19063
+ */
19064
+ SendGroupChatReadAckReq.encode = function encode(message, writer) {
19065
+ if (!writer) writer = $Writer.create();
19066
+ 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();
19067
+ return writer;
19068
+ };
19069
+
19070
+ /**
19071
+ * Decodes a SendGroupChatReadAckReq message from the specified reader or buffer.
19072
+ * @function decode
19073
+ * @memberof SendGroupChatReadAckReq
19074
+ * @static
19075
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
19076
+ * @param {number} [length] Message length if known beforehand
19077
+ * @returns {SendGroupChatReadAckReq} SendGroupChatReadAckReq
19078
+ * @throws {Error} If the payload is not a reader or valid buffer
19079
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
19080
+ */
19081
+ SendGroupChatReadAckReq.decode = function decode(reader, length) {
19082
+ if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
19083
+ let end = length === undefined ? reader.len : reader.pos + length,
19084
+ message = new $root.SendGroupChatReadAckReq();
19085
+ while (reader.pos < end) {
19086
+ let tag = reader.uint32();
19087
+ switch (tag >>> 3) {
19088
+ case 1:
19089
+ {
19090
+ if (!(message.groupChatMessage && message.groupChatMessage.length)) message.groupChatMessage = [];
19091
+ message.groupChatMessage.push($root.GroupChatMessage.decode(reader, reader.uint32()));
19092
+ break;
19093
+ }
19094
+ default:
19095
+ reader.skipType(tag & 7);
19096
+ break;
19097
+ }
19098
+ }
19099
+ return message;
19100
+ };
19101
+
19102
+ /**
19103
+ * Gets the default type url for SendGroupChatReadAckReq
19104
+ * @function getTypeUrl
19105
+ * @memberof SendGroupChatReadAckReq
19106
+ * @static
19107
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
19108
+ * @returns {string} The default type url
19109
+ */
19110
+ SendGroupChatReadAckReq.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
19111
+ if (typeUrlPrefix === undefined) {
19112
+ typeUrlPrefix = "type.googleapis.com";
19113
+ }
19114
+ return typeUrlPrefix + "/SendGroupChatReadAckReq";
19115
+ };
19116
+ return SendGroupChatReadAckReq;
19117
+ })();
18472
19118
 
18473
19119
  function extractConversationType(destId) {
18474
19120
  const longId = isString(destId) ? Long.fromString(destId) : destId;
@@ -18628,22 +19274,12 @@ const updateChatStickyConfig = (dialogId, stickyFlag) => {
18628
19274
  return reqPromise;
18629
19275
  };
18630
19276
  const deleteDialog = dialogId => {
18631
- let reqPromise;
18632
- if (extractConversationType(dialogId) == ConversationType.GROUP) {
18633
- reqPromise = webSocketServer.send(CmdIds$1.DeleteGroupDialog, {
18634
- groupId: Long.fromString(dialogId)
18635
- }, {
18636
- encoder: DeleteGroupChatDialogReq,
18637
- decoder: BaseResp
18638
- });
18639
- } else {
18640
- reqPromise = webSocketServer.send(CmdIds$1.DeletePrivateDialog, {
18641
- destId: Long.fromString(dialogId)
18642
- }, {
18643
- encoder: DeletePrivateChatDialogReq,
18644
- decoder: BaseResp
18645
- });
18646
- }
19277
+ let reqPromise = webSocketServer.send(CmdIds$1.DeletePrivateDialog, {
19278
+ destId: Long.fromString(dialogId)
19279
+ }, {
19280
+ encoder: DeletePrivateChatDialogReq,
19281
+ decoder: BaseResp
19282
+ });
18647
19283
  return reqPromise;
18648
19284
  };
18649
19285
  const getDialogChangedStatus = offset => webSocketServer.send(CmdIds$1.GetDialogChangedStatus, {
@@ -18652,6 +19288,22 @@ const getDialogChangedStatus = offset => webSocketServer.send(CmdIds$1.GetDialog
18652
19288
  encoder: GetNewSettingDialogListReq,
18653
19289
  decoder: GetNewSettingDialogListResp
18654
19290
  });
19291
+ const sendGroupChatArrivalAck = params => webSocketServer.send(CmdIds$1.SendGroupChatArrivalAck, params, {
19292
+ encoder: SendGroupChatArrivalAckReq,
19293
+ decoder: BaseResp
19294
+ });
19295
+ const sendGroupChatReadAck = params => webSocketServer.send(CmdIds$1.SendGroupChatReadAck, params, {
19296
+ encoder: SendGroupChatReadAckReq,
19297
+ decoder: BaseResp
19298
+ });
19299
+ const sendPrivateChatArrivalAck = params => webSocketServer.send(CmdIds$1.SendPrivateChatArrivalAck, params, {
19300
+ encoder: SendPrivateChatArrivalAckReq,
19301
+ decoder: BaseResp
19302
+ });
19303
+ const sendPrivateChatReadAck = params => webSocketServer.send(CmdIds$1.SendPrivateChatReadAck, params, {
19304
+ encoder: SendPrivateChatReadAckReq,
19305
+ decoder: BaseResp
19306
+ });
18655
19307
 
18656
19308
  let milliDelta__ = 0;
18657
19309
  const synchronizeServerTime = async () => {
@@ -18883,6 +19535,12 @@ const MessageTypes = {
18883
19535
  REDPACKET: 0x10001040,
18884
19536
  TRANSFER: 0x10001030
18885
19537
  };
19538
+ const NotiMessageTypes = {
19539
+ GROUP_ARRIVAL_RECEIPT: 0x60020024,
19540
+ GROUP_READ_RECEIPT: 0x60020025,
19541
+ PRIVATE_ARRIVAL_RECEIPT: 0x6001000C,
19542
+ PRIVATE_READ_RECEIPT: 0x6001000D
19543
+ };
18886
19544
 
18887
19545
  function deepClone(obj) {
18888
19546
  if (!isDef(obj)) {
@@ -19595,13 +20253,13 @@ const nullConversationManager = {
19595
20253
  destroyed() {},
19596
20254
  syncConversationStatus: function () {}
19597
20255
  };
19598
- let manager;
20256
+ let manager$1;
19599
20257
  var ConversationManager$1 = {
19600
20258
  create(appkey, currentUserId, updatedConversationFunc) {
19601
- manager = new ConversationManager(appkey, currentUserId, updatedConversationFunc);
20259
+ manager$1 = new ConversationManager(appkey, currentUserId, updatedConversationFunc);
19602
20260
  },
19603
20261
  get() {
19604
- return manager ?? nullConversationManager;
20262
+ return manager$1 ?? nullConversationManager;
19605
20263
  }
19606
20264
  };
19607
20265
 
@@ -19683,7 +20341,7 @@ const parseSingleDialogMessages = (dialogId, originalMessageList, aesKey) => {
19683
20341
  sentStatus: SentStatus.SENT,
19684
20342
  receivedTime: getServerTime$1().toString(),
19685
20343
  isStatusMessage: messageInstance.isStatusMessage,
19686
- receivedStatus: ReceivedStatus.READ,
20344
+ receivedStatus: dialogMessage.msgRead ? ReceivedStatus.READ : dialogMessage.msgArrival ? ReceivedStatus.RECEIVED : ReceivedStatus.IDLE,
19687
20345
  disableNotification: localConversation?.notificationStatus === NotificationStatus.OPEN || dialogMessage.srcId.toString() == accountStore.uid
19688
20346
  };
19689
20347
  if (receivedMessage.isStatusMessage && Long.fromNumber(getServerTime$1()).subtract(receivedMessage.sentTime).greaterThan(STATUSMESSAGE_ALIVE_TIMEMS)) {
@@ -19767,6 +20425,117 @@ var serverMessageParser = {
19767
20425
  parseChatRecordMsgDetails: parseChatRecordMsgDetails$1
19768
20426
  };
19769
20427
 
20428
+ const UNREADMESSAGEUIDS_KEY = 'unreadMessageUids';
20429
+ class MessageReceiptManager {
20430
+ localStore;
20431
+ constructor(appkey, currentUserId) {
20432
+ const suffix = `receipt-${appkey}-${currentUserId}`;
20433
+ this.localStore = new AppStorage(suffix);
20434
+ }
20435
+ storeUnreadMessageUids(messageList) {
20436
+ const validMessages = messageList.filter(m => m.isCounted && m.messageDirection !== MessageDirection.SEND);
20437
+ const messageUids = validMessages.map(m => m.messageUId);
20438
+ const existingUids = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
20439
+ const updatedUids = [...new Set([...existingUids, ...messageUids])];
20440
+ this.localStore.set(UNREADMESSAGEUIDS_KEY, updatedUids);
20441
+ }
20442
+ formatReceiptMessages(messages) {
20443
+ const privateMessages = [];
20444
+ const groupMessages = [];
20445
+ messages.forEach(m => {
20446
+ if (m.conversationType === ConversationType.PRIVATE) {
20447
+ privateMessages.push(m);
20448
+ } else {
20449
+ groupMessages.push(m);
20450
+ }
20451
+ });
20452
+ const privateReceiptMessages = Object.entries(privateMessages.reduce((acc, msg) => {
20453
+ if (!acc[msg.targetId]) {
20454
+ acc[msg.targetId] = [];
20455
+ }
20456
+ acc[msg.targetId].push(msg.messageUId);
20457
+ return acc;
20458
+ }, {})).map(([conversationId, messageIds]) => ({
20459
+ destId: Long.fromString(conversationId),
20460
+ msgIds: messageIds
20461
+ }));
20462
+ const groupReceiptMessages = groupMessages.reduce((acc, msg) => {
20463
+ const existingGroup = acc.find(g => g.groupId.equals(Long.fromString(msg.targetId)) && g.userId.equals(Long.fromString(msg.senderUserId)));
20464
+ if (existingGroup) {
20465
+ existingGroup.msgIds.push(msg.messageUId);
20466
+ } else {
20467
+ acc.push({
20468
+ groupId: Long.fromString(msg.targetId),
20469
+ userId: Long.fromString(msg.senderUserId),
20470
+ msgIds: [msg.messageUId]
20471
+ });
20472
+ }
20473
+ return acc;
20474
+ }, []);
20475
+ return {
20476
+ privateReceiptMessages,
20477
+ groupReceiptMessages
20478
+ };
20479
+ }
20480
+ filterValidMessages(messageList) {
20481
+ return messageList.filter(m => m.isCounted && m.messageDirection !== MessageDirection.SEND);
20482
+ }
20483
+ async sendArrivalReceipts(messageList) {
20484
+ this.storeUnreadMessageUids(messageList);
20485
+ const validMessages = this.filterValidMessages(messageList);
20486
+ const {
20487
+ privateReceiptMessages,
20488
+ groupReceiptMessages
20489
+ } = this.formatReceiptMessages(validMessages);
20490
+ if (privateReceiptMessages.length) {
20491
+ await sendPrivateChatArrivalAck({
20492
+ chatMessage: privateReceiptMessages
20493
+ });
20494
+ }
20495
+ if (groupReceiptMessages.length) {
20496
+ await sendGroupChatReadAck({
20497
+ groupChatMessage: groupReceiptMessages
20498
+ });
20499
+ }
20500
+ }
20501
+ async sendReadReceipts(messageList) {
20502
+ const storedUnreadUids = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
20503
+ const validMessages = this.filterValidMessages(messageList).filter(m => storedUnreadUids.includes(m.messageUId));
20504
+ try {
20505
+ const {
20506
+ privateReceiptMessages,
20507
+ groupReceiptMessages
20508
+ } = this.formatReceiptMessages(validMessages);
20509
+ if (privateReceiptMessages.length) {
20510
+ await sendPrivateChatReadAck({
20511
+ chatMessage: privateReceiptMessages
20512
+ });
20513
+ }
20514
+ if (groupReceiptMessages.length) {
20515
+ await sendGroupChatArrivalAck({
20516
+ groupChatMessage: groupReceiptMessages
20517
+ });
20518
+ }
20519
+ const latestUnreadUids = this.localStore.get(UNREADMESSAGEUIDS_KEY) || [];
20520
+ const sentMessageUids = validMessages.map(m => m.messageUId);
20521
+ const remainingUids = latestUnreadUids.filter(uid => !sentMessageUids.includes(uid));
20522
+ this.localStore.set(UNREADMESSAGEUIDS_KEY, remainingUids);
20523
+ } catch (error) {
20524
+ console.error('发送已读回执失败:', error);
20525
+ throw error;
20526
+ }
20527
+ }
20528
+ }
20529
+ let manager;
20530
+ var MessageReceiptManager$1 = {
20531
+ create(appkey, currentUserId) {
20532
+ manager = new MessageReceiptManager(appkey, currentUserId);
20533
+ },
20534
+ get() {
20535
+ return manager;
20536
+ }
20537
+ };
20538
+
19770
20539
  class MessageLoader {
19771
20540
  watcher;
19772
20541
  pullingMsg = false;
@@ -19903,8 +20672,10 @@ class MessageLoader {
19903
20672
  }
19904
20673
  });
19905
20674
  if (messages.length) {
19906
- this.watcher.batchMessage?.(messages);
20675
+ let normalMessages = this.handleReceiptMessages(messages);
20676
+ this.watcher.batchMessage?.(normalMessages);
19907
20677
  }
20678
+ MessageReceiptManager$1.get()?.sendArrivalReceipts(messages);
19908
20679
  if (done) {
19909
20680
  if (seqno.ge(this.serverMsgSeqno)) {
19910
20681
  this.serverMsgSeqno = seqno;
@@ -19923,6 +20694,39 @@ class MessageLoader {
19923
20694
  }
19924
20695
  });
19925
20696
  }
20697
+ handleReceiptMessages(messages) {
20698
+ const normalMessages = [];
20699
+ const receiptnotificationMessages = [];
20700
+ messages.forEach(msg => {
20701
+ 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) {
20702
+ receiptnotificationMessages.push(msg);
20703
+ } else {
20704
+ normalMessages.push(msg);
20705
+ }
20706
+ });
20707
+ const sentMessages = normalMessages.filter(m => m.messageDirection === MessageDirection.SEND);
20708
+ receiptnotificationMessages.forEach(notiMsg => {
20709
+ const notiContent = notiMsg.content;
20710
+ const isArrivalReceipt = notiMsg.messageType === NotiMessageTypes.GROUP_ARRIVAL_RECEIPT || notiMsg.messageType === NotiMessageTypes.PRIVATE_ARRIVAL_RECEIPT;
20711
+ sentMessages.forEach(msg => {
20712
+ if (notiContent.msgIdList.includes(msg.messageUId)) {
20713
+ if (isArrivalReceipt) {
20714
+ msg.receivedStatus = ReceivedStatus.RECEIVED;
20715
+ } else {
20716
+ msg.receivedStatus = ReceivedStatus.READ;
20717
+ }
20718
+ }
20719
+ });
20720
+ this.watcher.onReceiptReceived?.({
20721
+ conversation: {
20722
+ conversationType: notiMsg.conversationType,
20723
+ targetId: notiMsg.targetId
20724
+ },
20725
+ messageUIdList: notiContent.msgIdList
20726
+ }, notiMsg.messageType === NotiMessageTypes.GROUP_ARRIVAL_RECEIPT || notiMsg.messageType === NotiMessageTypes.PRIVATE_ARRIVAL_RECEIPT ? 0 : 1);
20727
+ });
20728
+ return normalMessages;
20729
+ }
19926
20730
  isExistPersistedMessage(messageList) {
19927
20731
  return messageList.some(m => m.isPersited);
19928
20732
  }
@@ -19975,6 +20779,11 @@ let TransferMessage = registerMessageType$1(MessageTypes.TRANSFER, true, true, f
19975
20779
 
19976
20780
  const RecallCommandMessage = registerMessageType$1(MessageTypes.RECALL, true, false, false);
19977
20781
 
20782
+ const GroupArrivalReceiptMessage = registerMessageType$1(NotiMessageTypes.GROUP_ARRIVAL_RECEIPT, false, false, true);
20783
+ const GroupReadReceiptMessage = registerMessageType$1(NotiMessageTypes.GROUP_READ_RECEIPT, false, false, true);
20784
+ const PrivateArrivalReceiptMessage = registerMessageType$1(NotiMessageTypes.PRIVATE_ARRIVAL_RECEIPT, false, false, true);
20785
+ const PrivateReadReceiptMessage = registerMessageType$1(NotiMessageTypes.PRIVATE_READ_RECEIPT, false, false, true);
20786
+
19978
20787
  const DEFAULT_SOCKET_URI = 'wss://imweb.mp.net:6443';
19979
20788
  class LibLoader {
19980
20789
  options;
@@ -20003,7 +20812,8 @@ class LibLoader {
20003
20812
  batchMessage: undefined,
20004
20813
  conversationState: undefined,
20005
20814
  onPush: undefined,
20006
- onRecall: undefined
20815
+ onRecall: undefined,
20816
+ onReceiptReceived: undefined
20007
20817
  };
20008
20818
  webSocketServer.setServerInfo(this.getWebSocketUrl());
20009
20819
  webSocketServer.setCallback({
@@ -20036,6 +20846,10 @@ class LibLoader {
20036
20846
  registerMessage(MessageTypes.GROUP_INVITATION, InvitationMessage);
20037
20847
  registerMessage(MessageTypes.REDPACKET, RedEnvelopeMessage);
20038
20848
  registerMessage(MessageTypes.TRANSFER, TransferMessage);
20849
+ registerMessage(NotiMessageTypes.GROUP_ARRIVAL_RECEIPT, GroupArrivalReceiptMessage);
20850
+ registerMessage(NotiMessageTypes.GROUP_READ_RECEIPT, GroupReadReceiptMessage);
20851
+ registerMessage(NotiMessageTypes.PRIVATE_ARRIVAL_RECEIPT, PrivateArrivalReceiptMessage);
20852
+ registerMessage(NotiMessageTypes.PRIVATE_READ_RECEIPT, PrivateReadReceiptMessage);
20039
20853
  }
20040
20854
  async connect() {
20041
20855
  if (this.connectionStatus === ConnectionStatus.CONNECTED) {
@@ -20053,6 +20867,7 @@ class LibLoader {
20053
20867
  this.isInternalConnected = true;
20054
20868
  ConversationManager$1.get().destroyed();
20055
20869
  ConversationManager$1.create(this.options.appkey, accountStore.uid.toString(), this.watcher.conversationState);
20870
+ MessageReceiptManager$1.create(this.options.appkey, accountStore.uid.toString());
20056
20871
  this.messageLoader?.stop();
20057
20872
  this.messageLoader = new MessageLoader(this.watcher, this.options);
20058
20873
  synchronizeServerTime();
@@ -26733,7 +27548,7 @@ const transSentAttrs2IReceivedMessage = (message, options, sentStatus = SentStat
26733
27548
  sentStatus,
26734
27549
  receivedTime: '0',
26735
27550
  isStatusMessage: message.isStatusMessage,
26736
- receivedStatus: ReceivedStatus.UNREAD,
27551
+ receivedStatus: ReceivedStatus.IDLE,
26737
27552
  disableNotification: true
26738
27553
  });
26739
27554
 
@@ -27466,6 +28281,13 @@ class IMClient extends EventEmitter {
27466
28281
  messageUids.forEach(messageUId => {
27467
28282
  this.emit(Events.RECALL, messageUId);
27468
28283
  });
28284
+ },
28285
+ onReceiptReceived: (event, type) => {
28286
+ if (type === 0) {
28287
+ this.emit(Events.ARRIVAL_RECEIPT_RECEIVED, event);
28288
+ } else {
28289
+ this.emit(Events.READ_RECEIPT_RECEIVED, event);
28290
+ }
27469
28291
  }
27470
28292
  });
27471
28293
  }
@@ -27683,6 +28505,9 @@ class IMClient extends EventEmitter {
27683
28505
  clearConversationMessageDraft(conversation) {
27684
28506
  ConversationManager$1.get().clearDraft(conversation);
27685
28507
  }
28508
+ async sendReadReceipts(messages) {
28509
+ await MessageReceiptManager$1.get()?.sendReadReceipts(messages);
28510
+ }
27686
28511
  formatConversation(serverConversationData) {
27687
28512
  const {
27688
28513
  dialog,
@@ -28959,6 +29784,18 @@ const clearHistoryMessages = async (conversation, timestamp) => {
28959
29784
  const parseChatRecordMsgDetails = (conversation, detailItems) => {
28960
29785
  return serverMessageParser.parseChatRecordMsgDetails(conversation, detailItems);
28961
29786
  };
29787
+ const sendReadReceipts = async messages => {
29788
+ try {
29789
+ await imClient.sendReadReceipts(messages);
29790
+ return {
29791
+ code: ErrorCode.SUCCESS
29792
+ };
29793
+ } catch (error) {
29794
+ return {
29795
+ code: ErrorCode.UNKNOWN
29796
+ };
29797
+ }
29798
+ };
28962
29799
  const mockLogin = config => {
28963
29800
  return login(config);
28964
29801
  };
@@ -28973,4 +29810,4 @@ const _logSendError = (conversation, errorCode) => {
28973
29810
  }
28974
29811
  };
28975
29812
 
28976
- export { ChatRecordMessage, ConnectionStatus, ContactMessage, ConversationType, ErrorCode, ErrorDesc, Events, FileMessage, GIFMessage, VoiceMessage as HQVoiceMessage, ImageMessage, InvitationMessage, LocationMessage, LogLevel, MentionedType, MessageDirection, MessageTypes, NotificationLevel, NotificationStatus, RecallCommandMessage, ReceivedStatus, RedEnvelopeMessage, SentStatus, TextMessage, TransferMessage, VideoMessage, addEventListener, clearAllMessagesUnreadStatus, clearHistoryMessages, clearMessagesUnreadStatus, clearTextMessageDraft, connect, deleteMessages, disconnect, getAllConversationState, getAllUnreadMentionedCount, getBlockedConversationList, getConnectionStatus, getConversation, getConversationList, getConversationNotificationLevel, getConversationNotificationStatus, getConversationState, getHistoryMessages, getRemoteHistoryMessages, getServerTime, getTextMessageDraft, getTopConversationList, getTotalUnreadCount, getUnreadCount, getUnreadMentionedCount, init, logOut, mockLogin, onceEventListener, parseChatRecordMsgDetails, recallMessage, registerMessageType, removeConversation, removeEventListener, request, saveTextMessageDraft, sendFileMessage, sendGIFMessage, sendHQVoiceMessage, sendImageMessage, sendMessage, sendSightMessage, sendTextMessage, setConversationNotificationStatus, setConversationToTop, setUserLogged };
29813
+ export { ChatRecordMessage, ConnectionStatus, ContactMessage, ConversationType, ErrorCode, ErrorDesc, Events, FileMessage, GIFMessage, VoiceMessage as HQVoiceMessage, ImageMessage, InvitationMessage, LocationMessage, LogLevel, MentionedType, MessageDirection, MessageTypes, NotificationLevel, NotificationStatus, RecallCommandMessage, ReceivedStatus, RedEnvelopeMessage, SentStatus, TextMessage, TransferMessage, VideoMessage, addEventListener, clearAllMessagesUnreadStatus, clearHistoryMessages, clearMessagesUnreadStatus, clearTextMessageDraft, connect, deleteMessages, disconnect, getAllConversationState, getAllUnreadMentionedCount, getBlockedConversationList, getConnectionStatus, getConversation, getConversationList, getConversationNotificationLevel, getConversationNotificationStatus, getConversationState, getHistoryMessages, getRemoteHistoryMessages, getServerTime, getTextMessageDraft, getTopConversationList, getTotalUnreadCount, getUnreadCount, getUnreadMentionedCount, init, logOut, mockLogin, onceEventListener, parseChatRecordMsgDetails, recallMessage, registerMessageType, removeConversation, removeEventListener, request, saveTextMessageDraft, sendFileMessage, sendGIFMessage, sendHQVoiceMessage, sendImageMessage, sendMessage, sendReadReceipts, sendSightMessage, sendTextMessage, setConversationNotificationStatus, setConversationToTop, setUserLogged };