@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.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 : {};
@@ -7682,6 +7683,9 @@ const getKeys = obj => {
7682
7683
  return Object.keys(obj);
7683
7684
  };
7684
7685
  const filterNullProperty = object => {
7686
+ if (Array.isArray(object)) {
7687
+ return object.filter(item => isDef(item)).map(item => isObject(item) ? filterNullProperty(item) : item);
7688
+ }
7685
7689
  const to = {};
7686
7690
  Object.keys(object).forEach(key => {
7687
7691
  const value = object[key];
@@ -9484,6 +9488,10 @@ var CmdIds;
9484
9488
  CmdIds[CmdIds["DeletePrivateDialog"] = 1610682372] = "DeletePrivateDialog";
9485
9489
  CmdIds[CmdIds["DeleteGroupDialog"] = 1610747908] = "DeleteGroupDialog";
9486
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";
9487
9495
  CmdIds[CmdIds["HeartbeanResp"] = 268468225] = "HeartbeanResp";
9488
9496
  CmdIds[CmdIds["NewMessagePush"] = 1610711040] = "NewMessagePush";
9489
9497
  CmdIds[CmdIds["DialogChangedPush"] = 1610711096] = "DialogChangedPush";
@@ -14501,6 +14509,8 @@ $root$1.DialogMessage = (() => {
14501
14509
  * @property {Long|null} [seqno] DialogMessage seqno
14502
14510
  * @property {string|null} [replyMarkup] DialogMessage replyMarkup
14503
14511
  * @property {string|null} [extra] DialogMessage extra
14512
+ * @property {boolean|null} [msgArrival] DialogMessage msgArrival
14513
+ * @property {boolean|null} [msgRead] DialogMessage msgRead
14504
14514
  */
14505
14515
 
14506
14516
  /**
@@ -14715,6 +14725,22 @@ $root$1.DialogMessage = (() => {
14715
14725
  */
14716
14726
  DialogMessage.prototype.extra = "";
14717
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
+
14718
14744
  /**
14719
14745
  * Encodes the specified DialogMessage message. Does not implicitly {@link DialogMessage.verify|verify} messages.
14720
14746
  * @function encode
@@ -14751,6 +14777,8 @@ $root$1.DialogMessage = (() => {
14751
14777
  if (message.seqno != null && Object.hasOwnProperty.call(message, "seqno")) writer.uint32(/* id 23, wireType 0 =*/184).int64(message.seqno);
14752
14778
  if (message.replyMarkup != null && Object.hasOwnProperty.call(message, "replyMarkup")) writer.uint32(/* id 24, wireType 2 =*/194).string(message.replyMarkup);
14753
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);
14754
14782
  return writer;
14755
14783
  };
14756
14784
 
@@ -14897,6 +14925,16 @@ $root$1.DialogMessage = (() => {
14897
14925
  message.extra = reader.string();
14898
14926
  break;
14899
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
+ }
14900
14938
  default:
14901
14939
  reader.skipType(tag & 7);
14902
14940
  break;
@@ -17592,6 +17630,304 @@ const NewMessageNotificationResp = $root$1.NewMessageNotificationResp = (() => {
17592
17630
  };
17593
17631
  return NewMessageNotificationResp;
17594
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
+ })();
17595
17931
 
17596
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*/
17597
17933
 
@@ -18376,7 +18712,7 @@ const RecallGroupChatMessageReq = $root.RecallGroupChatMessageReq = (() => {
18376
18712
  };
18377
18713
  return RecallGroupChatMessageReq;
18378
18714
  })();
18379
- const DeleteGroupChatDialogReq = $root.DeleteGroupChatDialogReq = (() => {
18715
+ $root.DeleteGroupChatDialogReq = (() => {
18380
18716
  /**
18381
18717
  * Properties of a DeleteGroupChatDialogReq.
18382
18718
  * @exports IDeleteGroupChatDialogReq
@@ -18466,6 +18802,319 @@ const DeleteGroupChatDialogReq = $root.DeleteGroupChatDialogReq = (() => {
18466
18802
  };
18467
18803
  return DeleteGroupChatDialogReq;
18468
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
+ })();
18469
19118
 
18470
19119
  function extractConversationType(destId) {
18471
19120
  const longId = isString(destId) ? Long.fromString(destId) : destId;
@@ -18625,22 +19274,12 @@ const updateChatStickyConfig = (dialogId, stickyFlag) => {
18625
19274
  return reqPromise;
18626
19275
  };
18627
19276
  const deleteDialog = dialogId => {
18628
- let reqPromise;
18629
- if (extractConversationType(dialogId) == ConversationType.GROUP) {
18630
- reqPromise = webSocketServer.send(CmdIds$1.DeleteGroupDialog, {
18631
- groupId: Long.fromString(dialogId)
18632
- }, {
18633
- encoder: DeleteGroupChatDialogReq,
18634
- decoder: BaseResp
18635
- });
18636
- } else {
18637
- reqPromise = webSocketServer.send(CmdIds$1.DeletePrivateDialog, {
18638
- destId: Long.fromString(dialogId)
18639
- }, {
18640
- encoder: DeletePrivateChatDialogReq,
18641
- decoder: BaseResp
18642
- });
18643
- }
19277
+ let reqPromise = webSocketServer.send(CmdIds$1.DeletePrivateDialog, {
19278
+ destId: Long.fromString(dialogId)
19279
+ }, {
19280
+ encoder: DeletePrivateChatDialogReq,
19281
+ decoder: BaseResp
19282
+ });
18644
19283
  return reqPromise;
18645
19284
  };
18646
19285
  const getDialogChangedStatus = offset => webSocketServer.send(CmdIds$1.GetDialogChangedStatus, {
@@ -18649,6 +19288,22 @@ const getDialogChangedStatus = offset => webSocketServer.send(CmdIds$1.GetDialog
18649
19288
  encoder: GetNewSettingDialogListReq,
18650
19289
  decoder: GetNewSettingDialogListResp
18651
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
+ });
18652
19307
 
18653
19308
  let milliDelta__ = 0;
18654
19309
  const synchronizeServerTime = async () => {
@@ -18880,6 +19535,12 @@ const MessageTypes = {
18880
19535
  REDPACKET: 0x10001040,
18881
19536
  TRANSFER: 0x10001030
18882
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
+ };
18883
19544
 
18884
19545
  function deepClone(obj) {
18885
19546
  if (!isDef(obj)) {
@@ -19592,13 +20253,13 @@ const nullConversationManager = {
19592
20253
  destroyed() {},
19593
20254
  syncConversationStatus: function () {}
19594
20255
  };
19595
- let manager;
20256
+ let manager$1;
19596
20257
  var ConversationManager$1 = {
19597
20258
  create(appkey, currentUserId, updatedConversationFunc) {
19598
- manager = new ConversationManager(appkey, currentUserId, updatedConversationFunc);
20259
+ manager$1 = new ConversationManager(appkey, currentUserId, updatedConversationFunc);
19599
20260
  },
19600
20261
  get() {
19601
- return manager ?? nullConversationManager;
20262
+ return manager$1 ?? nullConversationManager;
19602
20263
  }
19603
20264
  };
19604
20265
 
@@ -19680,7 +20341,7 @@ const parseSingleDialogMessages = (dialogId, originalMessageList, aesKey) => {
19680
20341
  sentStatus: SentStatus.SENT,
19681
20342
  receivedTime: getServerTime$1().toString(),
19682
20343
  isStatusMessage: messageInstance.isStatusMessage,
19683
- receivedStatus: ReceivedStatus.READ,
20344
+ receivedStatus: dialogMessage.msgRead ? ReceivedStatus.READ : dialogMessage.msgArrival ? ReceivedStatus.RECEIVED : ReceivedStatus.IDLE,
19684
20345
  disableNotification: localConversation?.notificationStatus === NotificationStatus.OPEN || dialogMessage.srcId.toString() == accountStore.uid
19685
20346
  };
19686
20347
  if (receivedMessage.isStatusMessage && Long.fromNumber(getServerTime$1()).subtract(receivedMessage.sentTime).greaterThan(STATUSMESSAGE_ALIVE_TIMEMS)) {
@@ -19764,6 +20425,117 @@ var serverMessageParser = {
19764
20425
  parseChatRecordMsgDetails: parseChatRecordMsgDetails$1
19765
20426
  };
19766
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
+
19767
20539
  class MessageLoader {
19768
20540
  watcher;
19769
20541
  pullingMsg = false;
@@ -19900,8 +20672,10 @@ class MessageLoader {
19900
20672
  }
19901
20673
  });
19902
20674
  if (messages.length) {
19903
- this.watcher.batchMessage?.(messages);
20675
+ let normalMessages = this.handleReceiptMessages(messages);
20676
+ this.watcher.batchMessage?.(normalMessages);
19904
20677
  }
20678
+ MessageReceiptManager$1.get()?.sendArrivalReceipts(messages);
19905
20679
  if (done) {
19906
20680
  if (seqno.ge(this.serverMsgSeqno)) {
19907
20681
  this.serverMsgSeqno = seqno;
@@ -19920,6 +20694,39 @@ class MessageLoader {
19920
20694
  }
19921
20695
  });
19922
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
+ }
19923
20730
  isExistPersistedMessage(messageList) {
19924
20731
  return messageList.some(m => m.isPersited);
19925
20732
  }
@@ -19972,6 +20779,11 @@ let TransferMessage = registerMessageType$1(MessageTypes.TRANSFER, true, true, f
19972
20779
 
19973
20780
  const RecallCommandMessage = registerMessageType$1(MessageTypes.RECALL, true, false, false);
19974
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
+
19975
20787
  const DEFAULT_SOCKET_URI = 'wss://imweb.mp.net:6443';
19976
20788
  class LibLoader {
19977
20789
  options;
@@ -20000,7 +20812,8 @@ class LibLoader {
20000
20812
  batchMessage: undefined,
20001
20813
  conversationState: undefined,
20002
20814
  onPush: undefined,
20003
- onRecall: undefined
20815
+ onRecall: undefined,
20816
+ onReceiptReceived: undefined
20004
20817
  };
20005
20818
  webSocketServer.setServerInfo(this.getWebSocketUrl());
20006
20819
  webSocketServer.setCallback({
@@ -20033,6 +20846,10 @@ class LibLoader {
20033
20846
  registerMessage(MessageTypes.GROUP_INVITATION, InvitationMessage);
20034
20847
  registerMessage(MessageTypes.REDPACKET, RedEnvelopeMessage);
20035
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);
20036
20853
  }
20037
20854
  async connect() {
20038
20855
  if (this.connectionStatus === ConnectionStatus.CONNECTED) {
@@ -20050,6 +20867,7 @@ class LibLoader {
20050
20867
  this.isInternalConnected = true;
20051
20868
  ConversationManager$1.get().destroyed();
20052
20869
  ConversationManager$1.create(this.options.appkey, accountStore.uid.toString(), this.watcher.conversationState);
20870
+ MessageReceiptManager$1.create(this.options.appkey, accountStore.uid.toString());
20053
20871
  this.messageLoader?.stop();
20054
20872
  this.messageLoader = new MessageLoader(this.watcher, this.options);
20055
20873
  synchronizeServerTime();
@@ -26730,7 +27548,7 @@ const transSentAttrs2IReceivedMessage = (message, options, sentStatus = SentStat
26730
27548
  sentStatus,
26731
27549
  receivedTime: '0',
26732
27550
  isStatusMessage: message.isStatusMessage,
26733
- receivedStatus: ReceivedStatus.UNREAD,
27551
+ receivedStatus: ReceivedStatus.IDLE,
26734
27552
  disableNotification: true
26735
27553
  });
26736
27554
 
@@ -27357,7 +28175,6 @@ async function send(message, sentArgs) {
27357
28175
  ...baseParams,
27358
28176
  groupId: Long.fromString(dialogId)
27359
28177
  };
27360
- debugger;
27361
28178
  if (isDef(message.content.mentionedInfo)) {
27362
28179
  const mentionedInfo = message.content.mentionedInfo;
27363
28180
  if (mentionedInfo.type === MentionedType.ALL) ; else if (mentionedInfo.type === MentionedType.SINGAL && mentionedInfo.userIdList?.length) {
@@ -27464,6 +28281,13 @@ class IMClient extends EventEmitter {
27464
28281
  messageUids.forEach(messageUId => {
27465
28282
  this.emit(Events.RECALL, messageUId);
27466
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
+ }
27467
28291
  }
27468
28292
  });
27469
28293
  }
@@ -27681,6 +28505,9 @@ class IMClient extends EventEmitter {
27681
28505
  clearConversationMessageDraft(conversation) {
27682
28506
  ConversationManager$1.get().clearDraft(conversation);
27683
28507
  }
28508
+ async sendReadReceipts(messages) {
28509
+ await MessageReceiptManager$1.get()?.sendReadReceipts(messages);
28510
+ }
27684
28511
  formatConversation(serverConversationData) {
27685
28512
  const {
27686
28513
  dialog,
@@ -28957,6 +29784,18 @@ const clearHistoryMessages = async (conversation, timestamp) => {
28957
29784
  const parseChatRecordMsgDetails = (conversation, detailItems) => {
28958
29785
  return serverMessageParser.parseChatRecordMsgDetails(conversation, detailItems);
28959
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
+ };
28960
29799
  const mockLogin = config => {
28961
29800
  return login(config);
28962
29801
  };
@@ -28971,4 +29810,4 @@ const _logSendError = (conversation, errorCode) => {
28971
29810
  }
28972
29811
  };
28973
29812
 
28974
- 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 };