@onyx-p/imlib-web 1.8.8 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.esm.js CHANGED
@@ -28414,6 +28414,72 @@ class MessageCache {
28414
28414
  }
28415
28415
  });
28416
28416
  }
28417
+ updateMessageReceiptStatus(event, type) {
28418
+ if (!event || !event.messageUIdList || event.messageUIdList.length === 0) {
28419
+ return;
28420
+ }
28421
+ const {
28422
+ conversation
28423
+ } = event;
28424
+ const dialogId = getFullDialogId(conversation);
28425
+ const cachedMessages = this.messageCache.get(dialogId);
28426
+ if (!cachedMessages || cachedMessages.length === 0) {
28427
+ return;
28428
+ }
28429
+ const messageUIdSet = new Set(event.messageUIdList);
28430
+ let updated = false;
28431
+ for (let i = 0; i < cachedMessages.length; i++) {
28432
+ const message = cachedMessages[i];
28433
+ if (messageUIdSet.has(message.messageUId)) {
28434
+ if (type === 0) {
28435
+ if (message.receivedStatus < ReceivedStatus.RECEIVED) {
28436
+ message.receivedStatus = ReceivedStatus.RECEIVED;
28437
+ updated = true;
28438
+ }
28439
+ } else {
28440
+ if (message.receivedStatus < ReceivedStatus.READ) {
28441
+ message.receivedStatus = ReceivedStatus.READ;
28442
+ updated = true;
28443
+ }
28444
+ }
28445
+ }
28446
+ }
28447
+ if (updated) {
28448
+ this.messageCache.set(dialogId, cachedMessages);
28449
+ }
28450
+ }
28451
+ clearBurnAfterReadingExpiredMessages(conversation) {
28452
+ const dialogId = getFullDialogId(conversation);
28453
+ const cachedMessages = this.messageCache.get(dialogId);
28454
+ if (!cachedMessages || cachedMessages.length === 0) {
28455
+ return [];
28456
+ }
28457
+ const currentTime = Date.now();
28458
+ const expiredMessageUIds = [];
28459
+ const remainingMessages = cachedMessages.filter(message => {
28460
+ if (!message.burnAfterReadingFlag) {
28461
+ return true;
28462
+ }
28463
+ const burnTime = message.burnAfterReadingTime || 0;
28464
+ if (burnTime === 0) {
28465
+ expiredMessageUIds.push(message.messageUId);
28466
+ return false;
28467
+ }
28468
+ const sentTimeLong = Long.fromString(message.sentTime);
28469
+ const currentTimeLong = Long.fromNumber(currentTime);
28470
+ const burnTimeLong = Long.fromNumber(burnTime);
28471
+ const expirationTime = sentTimeLong.add(burnTimeLong);
28472
+ if (currentTimeLong.greaterThan(expirationTime)) {
28473
+ expiredMessageUIds.push(message.messageUId);
28474
+ return false;
28475
+ }
28476
+ return true;
28477
+ });
28478
+ if (remainingMessages.length < cachedMessages.length) {
28479
+ this.messageCache.set(dialogId, remainingMessages);
28480
+ }
28481
+ return expiredMessageUIds;
28482
+ }
28417
28483
  }
28418
28484
 
28419
28485
  class IMClient extends EventEmitter {
@@ -28489,6 +28555,7 @@ class IMClient extends EventEmitter {
28489
28555
  });
28490
28556
  },
28491
28557
  onReceiptReceived: (event, type) => {
28558
+ MessageCache.get().updateMessageReceiptStatus(event, type);
28492
28559
  if (type === 0) {
28493
28560
  this.emit(Events.ARRIVAL_RECEIPT_RECEIVED, event);
28494
28561
  } else {
@@ -28575,7 +28642,7 @@ class IMClient extends EventEmitter {
28575
28642
  };
28576
28643
  }
28577
28644
  const remotesResult = await this.getRemoteHistoryMessages(conversation, {
28578
- timestamp: cachedMessages[0].sentTime ?? timestamp,
28645
+ timestamp: cachedMessages[0]?.sentTime ?? timestamp,
28579
28646
  count: count - cachedMessages.length,
28580
28647
  order: 0
28581
28648
  });
@@ -28780,6 +28847,9 @@ class IMClient extends EventEmitter {
28780
28847
  }
28781
28848
  return conversationObj;
28782
28849
  }
28850
+ clearBurnAfterReadingExpiredMessages(conversation) {
28851
+ return MessageCache.get().clearBurnAfterReadingExpiredMessages(conversation);
28852
+ }
28783
28853
  }
28784
28854
 
28785
28855
  /*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
@@ -29957,21 +30027,6 @@ const recallMessage = async (conversation, options) => {
29957
30027
  }
29958
30028
  return response;
29959
30029
  };
29960
- const getHistoryMessages = async (conversation, options) => {
29961
- assert('options.timestamp', options.timestamp ?? '0', AssertRules.ONLY_STRING);
29962
- assert('options.count', options.count ?? 0, AssertRules.NUMBER);
29963
- assert('options.order', options.order ?? 0, value => {
29964
- return value === 0 || value === 1;
29965
- });
29966
- assert('conversation', conversation, AssertRules.CONVERSATION, true);
29967
- const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
29968
- logger.debug('get history message ->' + paramsStr);
29969
- const response = await imClient.getRemoteHistoryMessages(conversation, options);
29970
- if (response.code !== ErrorCode.SUCCESS) {
29971
- logger.warn('get history message fail ->' + response.code + ':' + ErrorDesc(response.code) + ',' + paramsStr);
29972
- }
29973
- return response;
29974
- };
29975
30030
  const getRemoteHistoryMessages = async (conversation, options) => {
29976
30031
  assert('options.count', options.count ?? 0, AssertRules.NUMBER);
29977
30032
  assert('options.order', options.order ?? 0, value => {
@@ -30065,5 +30120,18 @@ const _logSendError = (conversation, errorCode) => {
30065
30120
  logger.warn('send message fail ->' + errorCode + ':' + ErrorDesc(errorCode) + ',' + paramsStr);
30066
30121
  }
30067
30122
  };
30123
+ const clearBurnAfterReadingExpiredMessages = conversation => {
30124
+ assert('conversation', conversation, AssertRules.CONVERSATION, true);
30125
+ const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
30126
+ logger.debug('clear burn after reading expired messages ->' + paramsStr);
30127
+ const expiredMessageUIds = imClient.clearBurnAfterReadingExpiredMessages(conversation);
30128
+ if (expiredMessageUIds.length > 0) {
30129
+ logger.debug(`已清除会话 ${paramsStr} 中的 ${expiredMessageUIds.length} 条阅后即焚过期消息`);
30130
+ }
30131
+ return Promise.resolve({
30132
+ code: ErrorCode.SUCCESS,
30133
+ data: expiredMessageUIds
30134
+ });
30135
+ };
30068
30136
 
30069
- export { ChatRecordMessage, ConnectionStatus, ContactMessage, ConversationType, ErrorCode, ErrorDesc, Events, FileMessage, GIFMessage, GroupCloseBurnAfterReadingMessage, GroupOpenBurnAfterReadingMessage, VoiceMessage as HQVoiceMessage, ImageMessage, InvitationMessage, LocationMessage, LogLevel, MentionedType, MessageDirection, MessageTypes, NotiMessageTypes, NotificationLevel, NotificationStatus, PrivateCloseBurnAfterReadingMessage, PrivateOpenBurnAfterReadingMessage, 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 };
30137
+ export { ChatRecordMessage, ConnectionStatus, ContactMessage, ConversationType, ErrorCode, ErrorDesc, Events, FileMessage, GIFMessage, GroupCloseBurnAfterReadingMessage, GroupOpenBurnAfterReadingMessage, VoiceMessage as HQVoiceMessage, ImageMessage, InvitationMessage, LocationMessage, LogLevel, MentionedType, MessageDirection, MessageTypes, NotiMessageTypes, NotificationLevel, NotificationStatus, PrivateCloseBurnAfterReadingMessage, PrivateOpenBurnAfterReadingMessage, RecallCommandMessage, ReceivedStatus, RedEnvelopeMessage, SentStatus, TextMessage, TransferMessage, VideoMessage, addEventListener, clearAllMessagesUnreadStatus, clearBurnAfterReadingExpiredMessages, clearHistoryMessages, clearMessagesUnreadStatus, clearTextMessageDraft, connect, deleteMessages, disconnect, getAllConversationState, getAllUnreadMentionedCount, getBlockedConversationList, getConnectionStatus, getConversation, getConversationList, getConversationNotificationLevel, getConversationNotificationStatus, getConversationState, 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 };
package/index.umd.js CHANGED
@@ -28420,6 +28420,72 @@
28420
28420
  }
28421
28421
  });
28422
28422
  }
28423
+ updateMessageReceiptStatus(event, type) {
28424
+ if (!event || !event.messageUIdList || event.messageUIdList.length === 0) {
28425
+ return;
28426
+ }
28427
+ const {
28428
+ conversation
28429
+ } = event;
28430
+ const dialogId = getFullDialogId(conversation);
28431
+ const cachedMessages = this.messageCache.get(dialogId);
28432
+ if (!cachedMessages || cachedMessages.length === 0) {
28433
+ return;
28434
+ }
28435
+ const messageUIdSet = new Set(event.messageUIdList);
28436
+ let updated = false;
28437
+ for (let i = 0; i < cachedMessages.length; i++) {
28438
+ const message = cachedMessages[i];
28439
+ if (messageUIdSet.has(message.messageUId)) {
28440
+ if (type === 0) {
28441
+ if (message.receivedStatus < exports.ReceivedStatus.RECEIVED) {
28442
+ message.receivedStatus = exports.ReceivedStatus.RECEIVED;
28443
+ updated = true;
28444
+ }
28445
+ } else {
28446
+ if (message.receivedStatus < exports.ReceivedStatus.READ) {
28447
+ message.receivedStatus = exports.ReceivedStatus.READ;
28448
+ updated = true;
28449
+ }
28450
+ }
28451
+ }
28452
+ }
28453
+ if (updated) {
28454
+ this.messageCache.set(dialogId, cachedMessages);
28455
+ }
28456
+ }
28457
+ clearBurnAfterReadingExpiredMessages(conversation) {
28458
+ const dialogId = getFullDialogId(conversation);
28459
+ const cachedMessages = this.messageCache.get(dialogId);
28460
+ if (!cachedMessages || cachedMessages.length === 0) {
28461
+ return [];
28462
+ }
28463
+ const currentTime = Date.now();
28464
+ const expiredMessageUIds = [];
28465
+ const remainingMessages = cachedMessages.filter(message => {
28466
+ if (!message.burnAfterReadingFlag) {
28467
+ return true;
28468
+ }
28469
+ const burnTime = message.burnAfterReadingTime || 0;
28470
+ if (burnTime === 0) {
28471
+ expiredMessageUIds.push(message.messageUId);
28472
+ return false;
28473
+ }
28474
+ const sentTimeLong = Long.fromString(message.sentTime);
28475
+ const currentTimeLong = Long.fromNumber(currentTime);
28476
+ const burnTimeLong = Long.fromNumber(burnTime);
28477
+ const expirationTime = sentTimeLong.add(burnTimeLong);
28478
+ if (currentTimeLong.greaterThan(expirationTime)) {
28479
+ expiredMessageUIds.push(message.messageUId);
28480
+ return false;
28481
+ }
28482
+ return true;
28483
+ });
28484
+ if (remainingMessages.length < cachedMessages.length) {
28485
+ this.messageCache.set(dialogId, remainingMessages);
28486
+ }
28487
+ return expiredMessageUIds;
28488
+ }
28423
28489
  }
28424
28490
 
28425
28491
  class IMClient extends EventEmitter {
@@ -28495,6 +28561,7 @@
28495
28561
  });
28496
28562
  },
28497
28563
  onReceiptReceived: (event, type) => {
28564
+ MessageCache.get().updateMessageReceiptStatus(event, type);
28498
28565
  if (type === 0) {
28499
28566
  this.emit(exports.Events.ARRIVAL_RECEIPT_RECEIVED, event);
28500
28567
  } else {
@@ -28581,7 +28648,7 @@
28581
28648
  };
28582
28649
  }
28583
28650
  const remotesResult = await this.getRemoteHistoryMessages(conversation, {
28584
- timestamp: cachedMessages[0].sentTime ?? timestamp,
28651
+ timestamp: cachedMessages[0]?.sentTime ?? timestamp,
28585
28652
  count: count - cachedMessages.length,
28586
28653
  order: 0
28587
28654
  });
@@ -28786,6 +28853,9 @@
28786
28853
  }
28787
28854
  return conversationObj;
28788
28855
  }
28856
+ clearBurnAfterReadingExpiredMessages(conversation) {
28857
+ return MessageCache.get().clearBurnAfterReadingExpiredMessages(conversation);
28858
+ }
28789
28859
  }
28790
28860
 
28791
28861
  /*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
@@ -29963,21 +30033,6 @@
29963
30033
  }
29964
30034
  return response;
29965
30035
  };
29966
- const getHistoryMessages = async (conversation, options) => {
29967
- assert('options.timestamp', options.timestamp ?? '0', AssertRules.ONLY_STRING);
29968
- assert('options.count', options.count ?? 0, AssertRules.NUMBER);
29969
- assert('options.order', options.order ?? 0, value => {
29970
- return value === 0 || value === 1;
29971
- });
29972
- assert('conversation', conversation, AssertRules.CONVERSATION, true);
29973
- const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
29974
- logger.debug('get history message ->' + paramsStr);
29975
- const response = await imClient.getRemoteHistoryMessages(conversation, options);
29976
- if (response.code !== exports.ErrorCode.SUCCESS) {
29977
- logger.warn('get history message fail ->' + response.code + ':' + ErrorDesc(response.code) + ',' + paramsStr);
29978
- }
29979
- return response;
29980
- };
29981
30036
  const getRemoteHistoryMessages = async (conversation, options) => {
29982
30037
  assert('options.count', options.count ?? 0, AssertRules.NUMBER);
29983
30038
  assert('options.order', options.order ?? 0, value => {
@@ -30071,6 +30126,19 @@
30071
30126
  logger.warn('send message fail ->' + errorCode + ':' + ErrorDesc(errorCode) + ',' + paramsStr);
30072
30127
  }
30073
30128
  };
30129
+ const clearBurnAfterReadingExpiredMessages = conversation => {
30130
+ assert('conversation', conversation, AssertRules.CONVERSATION, true);
30131
+ const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
30132
+ logger.debug('clear burn after reading expired messages ->' + paramsStr);
30133
+ const expiredMessageUIds = imClient.clearBurnAfterReadingExpiredMessages(conversation);
30134
+ if (expiredMessageUIds.length > 0) {
30135
+ logger.debug(`已清除会话 ${paramsStr} 中的 ${expiredMessageUIds.length} 条阅后即焚过期消息`);
30136
+ }
30137
+ return Promise.resolve({
30138
+ code: exports.ErrorCode.SUCCESS,
30139
+ data: expiredMessageUIds
30140
+ });
30141
+ };
30074
30142
 
30075
30143
  exports.ChatRecordMessage = ChatRecordMessage;
30076
30144
  exports.ContactMessage = ContactMessage;
@@ -30094,6 +30162,7 @@
30094
30162
  exports.VideoMessage = VideoMessage;
30095
30163
  exports.addEventListener = addEventListener;
30096
30164
  exports.clearAllMessagesUnreadStatus = clearAllMessagesUnreadStatus;
30165
+ exports.clearBurnAfterReadingExpiredMessages = clearBurnAfterReadingExpiredMessages;
30097
30166
  exports.clearHistoryMessages = clearHistoryMessages;
30098
30167
  exports.clearMessagesUnreadStatus = clearMessagesUnreadStatus;
30099
30168
  exports.clearTextMessageDraft = clearTextMessageDraft;
@@ -30109,7 +30178,6 @@
30109
30178
  exports.getConversationNotificationLevel = getConversationNotificationLevel;
30110
30179
  exports.getConversationNotificationStatus = getConversationNotificationStatus;
30111
30180
  exports.getConversationState = getConversationState;
30112
- exports.getHistoryMessages = getHistoryMessages;
30113
30181
  exports.getRemoteHistoryMessages = getRemoteHistoryMessages;
30114
30182
  exports.getServerTime = getServerTime;
30115
30183
  exports.getTextMessageDraft = getTextMessageDraft;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onyx-p/imlib-web",
3
- "version": "1.8.8",
3
+ "version": "1.9.0",
4
4
  "main": "index.umd.js",
5
5
  "module": "index.esm.js",
6
6
  "types": "types/index.d.ts",
package/types/index.d.ts CHANGED
@@ -209,10 +209,6 @@ export declare const sendSightMessage: (conversation: IConversationOption, msgBo
209
209
  * @param options
210
210
  */
211
211
  export declare const recallMessage: (conversation: IConversationOption, options: IRecallMessageOptions) => IPromiseResult<IReceivedMessage>;
212
- /**
213
- * 获取历史消息
214
- */
215
- export declare const getHistoryMessages: (conversation: IConversationOption, options: GetHistoryMessageOption) => IPromiseResult<GetHistoryMessageResult>;
216
212
  /**
217
213
  * 获取远程历史消息
218
214
  */
@@ -239,3 +235,9 @@ export declare const mockLogin: (config: {
239
235
  phone: string;
240
236
  password: string;
241
237
  }) => CommonReqResult<import("./net/pbs/rpc.login").AuthSignIn2Resp>;
238
+ /**
239
+ * 清除指定会话中阅后即焚过期的消息
240
+ * @param conversation 会话信息
241
+ * @returns 被清除的消息ID列表
242
+ */
243
+ export declare const clearBurnAfterReadingExpiredMessages: (conversation: IConversationOption) => IPromiseResult<string[]>;