@onyx-p/imlib-web 1.7.1 → 1.7.4

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
@@ -134,6 +134,7 @@ var Events;
134
134
  Events["PULL_OFFLINE_MESSAGE_FINISHED"] = "PULL_OFFLINE_MESSAGE_FINISHED";
135
135
  Events["CONVERSATION"] = "CONVERSATION";
136
136
  Events["PUSH"] = "PUSH";
137
+ Events["RECALL"] = "RECALL";
137
138
  })(Events || (Events = {}));
138
139
 
139
140
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -18868,7 +18869,7 @@ const MessageTypes = {
18868
18869
  TEXT: 0x00000000,
18869
18870
  IMAGE: 0x30001000,
18870
18871
  GIF: 0x3000100B,
18871
- FILE: 0x3000100A,
18872
+ FILE: 0x3000101A,
18872
18873
  AUDIO: 0x30001011,
18873
18874
  VIDEO: 0x30001006,
18874
18875
  RECALL: 0x6001001d,
@@ -19019,7 +19020,7 @@ class ConversationStore {
19019
19020
  }
19020
19021
  if (messageType === MessageTypes.RECALL && conversationType === ConversationType.GROUP) {
19021
19022
  const recallContent = content;
19022
- const index = localMentionedUIdList.indexOf(recallContent.msgId.toString());
19023
+ const index = localMentionedUIdList.indexOf(recallContent.messageUId.toString());
19023
19024
  if (index >= 0) {
19024
19025
  localMentionedUIdList.splice(index, 1);
19025
19026
  }
@@ -19644,7 +19645,6 @@ const parseSingleDialogMessages = (dialogId, originalMessageList, aesKey) => {
19644
19645
  return [];
19645
19646
  }
19646
19647
  const localConversation = ConversationManager$1.get().get(conversation);
19647
- const recallMessageUIds = new Set();
19648
19648
  let contentList = [];
19649
19649
  originalMessageList.forEach(item => {
19650
19650
  const dialogMessage = item;
@@ -19661,7 +19661,6 @@ const parseSingleDialogMessages = (dialogId, originalMessageList, aesKey) => {
19661
19661
  };
19662
19662
  mediaConstructor = MessageTypes.RECALL;
19663
19663
  mediaAttributeJson = recallContent;
19664
- recallMessageUIds.add(msgId);
19665
19664
  }
19666
19665
  const messageInstance = decodeMessage(mediaConstructor, mediaAttributeJson);
19667
19666
  if (isDef(messageInstance)) {
@@ -19690,14 +19689,10 @@ const parseSingleDialogMessages = (dialogId, originalMessageList, aesKey) => {
19690
19689
  contentList.push(receivedMessage);
19691
19690
  }
19692
19691
  });
19693
- if (recallMessageUIds.size) {
19694
- contentList = contentList.filter(e => !recallMessageUIds.has(e.messageUId));
19695
- }
19696
19692
  return contentList;
19697
19693
  };
19698
19694
  const decodeMessageContent = (dialogMessage, aesKey) => {
19699
19695
  try {
19700
- debugger;
19701
19696
  let mediaAttribute;
19702
19697
  if (dialogMessage.mediaAttribute?.length) {
19703
19698
  mediaAttribute = aes256Decrypt(dialogMessage.mediaAttribute, aesKey);
@@ -19863,9 +19858,10 @@ class MessageLoader {
19863
19858
  await ConversationManager$1.get().loadConvsationsIfNotExist(cons);
19864
19859
  serverMessageParser.parse(msg, (done, outputMsgs) => {
19865
19860
  const messages = [];
19861
+ const recallMessageIndexes = [];
19866
19862
  const isOffLineMessage = !this.pullOfflineFinished;
19867
19863
  outputMsgs.forEach((l, dialogId) => {
19868
- const messageList = [];
19864
+ let messageList = [];
19869
19865
  l.forEach(m => {
19870
19866
  if (m.messageDirection === MessageDirection.SEND && m.messageId && SentMessageStore.has(m.messageId)) {
19871
19867
  SentMessageStore.remove(m.messageId);
@@ -19875,12 +19871,33 @@ class MessageLoader {
19875
19871
  m.isOffLineMessage = isOffLineMessage;
19876
19872
  ConversationManager$1.get().setConversationCacheByMessage(m);
19877
19873
  messageList.push(m);
19874
+ if (m.messageType === MessageTypes.RECALL) {
19875
+ recallMessageIndexes.push(messageList.length - 1);
19876
+ }
19878
19877
  }
19879
19878
  });
19879
+ let recallMessageUIds = [];
19880
+ let deletedMessageIndexes = [];
19881
+ for (let i = recallMessageIndexes.length - 1; i >= 0; i--) {
19882
+ const index = recallMessageIndexes[i];
19883
+ const recallMessage = messageList[index];
19884
+ const recallContent = recallMessage.content;
19885
+ const messageIndex = messageList.findIndex(m => m.messageUId === recallContent.messageUId);
19886
+ if (messageIndex !== -1) {
19887
+ deletedMessageIndexes.push(messageIndex);
19888
+ } else {
19889
+ recallMessageUIds.push(recallContent.messageUId);
19890
+ deletedMessageIndexes.push(index);
19891
+ }
19892
+ }
19893
+ messageList = messageList.filter((m, index) => !deletedMessageIndexes.includes(index));
19880
19894
  messages.push(...messageList);
19881
19895
  if (this.isExistPersistedMessage(messageList)) {
19882
19896
  splitFullDialog(dialogId);
19883
19897
  }
19898
+ if (recallMessageUIds.length) {
19899
+ this.watcher.onRecall?.(recallMessageUIds);
19900
+ }
19884
19901
  });
19885
19902
  if (messages.length) {
19886
19903
  this.watcher.batchMessage?.(messages);
@@ -19975,7 +19992,8 @@ class LibLoader {
19975
19992
  pullFinished: undefined,
19976
19993
  batchMessage: undefined,
19977
19994
  conversationState: undefined,
19978
- onPush: undefined
19995
+ onPush: undefined,
19996
+ onRecall: undefined
19979
19997
  };
19980
19998
  webSocketServer.setServerInfo(this.getWebSocketUrl());
19981
19999
  webSocketServer.setCallback({
@@ -27440,6 +27458,11 @@ class IMClient extends EventEmitter {
27440
27458
  cmdId,
27441
27459
  body
27442
27460
  });
27461
+ },
27462
+ onRecall: messageUids => {
27463
+ messageUids.forEach(messageUId => {
27464
+ this.emit(Events.RECALL, messageUId);
27465
+ });
27443
27466
  }
27444
27467
  });
27445
27468
  }
package/index.umd.js CHANGED
@@ -140,6 +140,7 @@
140
140
  Events["PULL_OFFLINE_MESSAGE_FINISHED"] = "PULL_OFFLINE_MESSAGE_FINISHED";
141
141
  Events["CONVERSATION"] = "CONVERSATION";
142
142
  Events["PUSH"] = "PUSH";
143
+ Events["RECALL"] = "RECALL";
143
144
  })(exports.Events || (exports.Events = {}));
144
145
 
145
146
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -18874,7 +18875,7 @@
18874
18875
  TEXT: 0x00000000,
18875
18876
  IMAGE: 0x30001000,
18876
18877
  GIF: 0x3000100B,
18877
- FILE: 0x3000100A,
18878
+ FILE: 0x3000101A,
18878
18879
  AUDIO: 0x30001011,
18879
18880
  VIDEO: 0x30001006,
18880
18881
  RECALL: 0x6001001d,
@@ -19025,7 +19026,7 @@
19025
19026
  }
19026
19027
  if (messageType === MessageTypes.RECALL && conversationType === exports.ConversationType.GROUP) {
19027
19028
  const recallContent = content;
19028
- const index = localMentionedUIdList.indexOf(recallContent.msgId.toString());
19029
+ const index = localMentionedUIdList.indexOf(recallContent.messageUId.toString());
19029
19030
  if (index >= 0) {
19030
19031
  localMentionedUIdList.splice(index, 1);
19031
19032
  }
@@ -19650,7 +19651,6 @@
19650
19651
  return [];
19651
19652
  }
19652
19653
  const localConversation = ConversationManager$1.get().get(conversation);
19653
- const recallMessageUIds = new Set();
19654
19654
  let contentList = [];
19655
19655
  originalMessageList.forEach(item => {
19656
19656
  const dialogMessage = item;
@@ -19667,7 +19667,6 @@
19667
19667
  };
19668
19668
  mediaConstructor = MessageTypes.RECALL;
19669
19669
  mediaAttributeJson = recallContent;
19670
- recallMessageUIds.add(msgId);
19671
19670
  }
19672
19671
  const messageInstance = decodeMessage(mediaConstructor, mediaAttributeJson);
19673
19672
  if (isDef(messageInstance)) {
@@ -19696,14 +19695,10 @@
19696
19695
  contentList.push(receivedMessage);
19697
19696
  }
19698
19697
  });
19699
- if (recallMessageUIds.size) {
19700
- contentList = contentList.filter(e => !recallMessageUIds.has(e.messageUId));
19701
- }
19702
19698
  return contentList;
19703
19699
  };
19704
19700
  const decodeMessageContent = (dialogMessage, aesKey) => {
19705
19701
  try {
19706
- debugger;
19707
19702
  let mediaAttribute;
19708
19703
  if (dialogMessage.mediaAttribute?.length) {
19709
19704
  mediaAttribute = aes256Decrypt(dialogMessage.mediaAttribute, aesKey);
@@ -19869,9 +19864,10 @@
19869
19864
  await ConversationManager$1.get().loadConvsationsIfNotExist(cons);
19870
19865
  serverMessageParser.parse(msg, (done, outputMsgs) => {
19871
19866
  const messages = [];
19867
+ const recallMessageIndexes = [];
19872
19868
  const isOffLineMessage = !this.pullOfflineFinished;
19873
19869
  outputMsgs.forEach((l, dialogId) => {
19874
- const messageList = [];
19870
+ let messageList = [];
19875
19871
  l.forEach(m => {
19876
19872
  if (m.messageDirection === exports.MessageDirection.SEND && m.messageId && SentMessageStore.has(m.messageId)) {
19877
19873
  SentMessageStore.remove(m.messageId);
@@ -19881,12 +19877,33 @@
19881
19877
  m.isOffLineMessage = isOffLineMessage;
19882
19878
  ConversationManager$1.get().setConversationCacheByMessage(m);
19883
19879
  messageList.push(m);
19880
+ if (m.messageType === MessageTypes.RECALL) {
19881
+ recallMessageIndexes.push(messageList.length - 1);
19882
+ }
19884
19883
  }
19885
19884
  });
19885
+ let recallMessageUIds = [];
19886
+ let deletedMessageIndexes = [];
19887
+ for (let i = recallMessageIndexes.length - 1; i >= 0; i--) {
19888
+ const index = recallMessageIndexes[i];
19889
+ const recallMessage = messageList[index];
19890
+ const recallContent = recallMessage.content;
19891
+ const messageIndex = messageList.findIndex(m => m.messageUId === recallContent.messageUId);
19892
+ if (messageIndex !== -1) {
19893
+ deletedMessageIndexes.push(messageIndex);
19894
+ } else {
19895
+ recallMessageUIds.push(recallContent.messageUId);
19896
+ deletedMessageIndexes.push(index);
19897
+ }
19898
+ }
19899
+ messageList = messageList.filter((m, index) => !deletedMessageIndexes.includes(index));
19886
19900
  messages.push(...messageList);
19887
19901
  if (this.isExistPersistedMessage(messageList)) {
19888
19902
  splitFullDialog(dialogId);
19889
19903
  }
19904
+ if (recallMessageUIds.length) {
19905
+ this.watcher.onRecall?.(recallMessageUIds);
19906
+ }
19890
19907
  });
19891
19908
  if (messages.length) {
19892
19909
  this.watcher.batchMessage?.(messages);
@@ -19981,7 +19998,8 @@
19981
19998
  pullFinished: undefined,
19982
19999
  batchMessage: undefined,
19983
20000
  conversationState: undefined,
19984
- onPush: undefined
20001
+ onPush: undefined,
20002
+ onRecall: undefined
19985
20003
  };
19986
20004
  webSocketServer.setServerInfo(this.getWebSocketUrl());
19987
20005
  webSocketServer.setCallback({
@@ -27446,6 +27464,11 @@
27446
27464
  cmdId,
27447
27465
  body
27448
27466
  });
27467
+ },
27468
+ onRecall: messageUids => {
27469
+ messageUids.forEach(messageUId => {
27470
+ this.emit(exports.Events.RECALL, messageUId);
27471
+ });
27449
27472
  }
27450
27473
  });
27451
27474
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onyx-p/imlib-web",
3
- "version": "1.7.1",
3
+ "version": "1.7.4",
4
4
  "main": "index.umd.js",
5
5
  "module": "index.esm.js",
6
6
  "types": "types/index.d.ts",
package/types/types.d.ts CHANGED
@@ -38,7 +38,8 @@ export declare enum Events {
38
38
  MESSAGES = "MESSAGES",
39
39
  PULL_OFFLINE_MESSAGE_FINISHED = "PULL_OFFLINE_MESSAGE_FINISHED",
40
40
  CONVERSATION = "CONVERSATION",
41
- PUSH = "PUSH"
41
+ PUSH = "PUSH",
42
+ RECALL = "RECALL"
42
43
  }
43
44
  export type EventListeners = {
44
45
  [Events.CONNECTING]: () => void;
@@ -56,6 +57,7 @@ export type EventListeners = {
56
57
  cmdId: number;
57
58
  body: Uint8Array;
58
59
  }) => void;
60
+ [Events.RECALL]: (messageUId: string) => void;
59
61
  };
60
62
  export interface IBaseConversationInfo {
61
63
  conversationType: ConversationType;