@onyx-p/imlib-web 2.2.2 → 2.2.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 +224 -159
- package/index.umd.js +224 -159
- package/package.json +1 -1
- package/types/model/iReceivedMessage.d.ts +1 -1
package/index.esm.js
CHANGED
@@ -20492,7 +20492,7 @@ const parseSingleDialogMessages = (dialogId, originalMessageList, aesKey) => {
|
|
20492
20492
|
messageType: messageInstance.messageType,
|
20493
20493
|
isOffLineMessage: false,
|
20494
20494
|
isPersited: messageInstance.isPersited,
|
20495
|
-
messageId: Long.isLong(dialogMessage.localId) ? dialogMessage.localId.
|
20495
|
+
messageId: Long.isLong(dialogMessage.localId) ? dialogMessage.localId.toNumber : 0,
|
20496
20496
|
messageUId: dialogMessage.msgId.toString(),
|
20497
20497
|
sentTime: dialogMessage.seqno.toString(),
|
20498
20498
|
sentStatus: SentStatus.SENT,
|
@@ -20562,7 +20562,7 @@ const parseChatRecordMsgDetails$1 = (conversationOpt, msgDetails) => {
|
|
20562
20562
|
messageType: messageInstance.messageType,
|
20563
20563
|
isOffLineMessage: false,
|
20564
20564
|
isPersited: messageInstance.isPersited,
|
20565
|
-
messageId:
|
20565
|
+
messageId: 0,
|
20566
20566
|
messageUId: item.msgId + '',
|
20567
20567
|
sentTime: item.msgSendTime + '',
|
20568
20568
|
sentStatus: SentStatus.SENT,
|
@@ -20704,6 +20704,21 @@ var MessageReceiptManager$1 = {
|
|
20704
20704
|
}
|
20705
20705
|
};
|
20706
20706
|
|
20707
|
+
let oldestMessageId = 0;
|
20708
|
+
let lastMessageId = 0;
|
20709
|
+
function setInitialMessageId(oldestMessageId_tmp, lastMessageId_tmp) {
|
20710
|
+
oldestMessageId = oldestMessageId_tmp;
|
20711
|
+
lastMessageId = lastMessageId_tmp;
|
20712
|
+
}
|
20713
|
+
function generateNewMessageId() {
|
20714
|
+
lastMessageId++;
|
20715
|
+
return lastMessageId;
|
20716
|
+
}
|
20717
|
+
function generateOldMessageId() {
|
20718
|
+
oldestMessageId--;
|
20719
|
+
return oldestMessageId;
|
20720
|
+
}
|
20721
|
+
|
20707
20722
|
class MessageLoader {
|
20708
20723
|
watcher;
|
20709
20724
|
pullingMsg = false;
|
@@ -20807,6 +20822,9 @@ class MessageLoader {
|
|
20807
20822
|
RecallMessageStore.remove(m.content.messageUId);
|
20808
20823
|
} else {
|
20809
20824
|
m.isOffLineMessage = isOffLineMessage;
|
20825
|
+
if (!m.messageId) {
|
20826
|
+
m.messageId = generateNewMessageId();
|
20827
|
+
}
|
20810
20828
|
ConversationManager$1.get().setConversationCacheByMessage(m);
|
20811
20829
|
messageList.push(m);
|
20812
20830
|
if (m.messageType === MessageTypes.RECALL) {
|
@@ -20846,8 +20864,18 @@ class MessageLoader {
|
|
20846
20864
|
MessageReceiptManager$1.get()?.sendArrivalReceipts(normalMessages);
|
20847
20865
|
}
|
20848
20866
|
if (done) {
|
20849
|
-
|
20850
|
-
|
20867
|
+
let seqNo_long;
|
20868
|
+
if (seqno) {
|
20869
|
+
if (Long.isLong(seqno)) {
|
20870
|
+
seqNo_long = seqno;
|
20871
|
+
} else if (typeof seqno === 'string') {
|
20872
|
+
seqNo_long = Long.fromString(seqno);
|
20873
|
+
} else if (typeof seqno === 'number') {
|
20874
|
+
seqNo_long = Long.fromNumber(seqno);
|
20875
|
+
}
|
20876
|
+
}
|
20877
|
+
if (seqNo_long && Long.isLong(seqNo_long) && seqNo_long.ge(this.serverMsgSeqno)) {
|
20878
|
+
this.serverMsgSeqno = seqNo_long;
|
20851
20879
|
}
|
20852
20880
|
const isFinished = this.serverMsgSeqno.lessThanOrEqual(offset);
|
20853
20881
|
logger.info(`pullMsg success -> syncTime: ${offset}, finished: ${isFinished}`);
|
@@ -20984,10 +21012,10 @@ class MessageCache {
|
|
20984
21012
|
currentAppKey = '';
|
20985
21013
|
currentUserId = '';
|
20986
21014
|
APP_INFO_KEY = 'im_app_info';
|
20987
|
-
DB_NAME_PREFIX = '
|
21015
|
+
DB_NAME_PREFIX = 'im_message_cache_new';
|
20988
21016
|
DB_VERSION = 2;
|
20989
|
-
STORE_NAME = '
|
20990
|
-
DIALOG_STATE_STORE = '
|
21017
|
+
STORE_NAME = 'messages_new';
|
21018
|
+
DIALOG_STATE_STORE = 'dialogStates_new';
|
20991
21019
|
encryptKey = {
|
20992
21020
|
key: ''
|
20993
21021
|
};
|
@@ -20995,7 +21023,8 @@ class MessageCache {
|
|
20995
21023
|
SALT_SUFFIX = 'im_message_cache_salt_suffix';
|
20996
21024
|
constructor(appKey, userId) {
|
20997
21025
|
this.generateEncryptKey(appKey, userId);
|
20998
|
-
this.
|
21026
|
+
this.currentAppKey = appKey;
|
21027
|
+
this.currentUserId = userId;
|
20999
21028
|
}
|
21000
21029
|
generateEncryptKey(appKey, userId) {
|
21001
21030
|
const saltedInput = `${this.SALT_PREFIX}${appKey}_${userId}${this.SALT_SUFFIX}`;
|
@@ -21013,9 +21042,7 @@ class MessageCache {
|
|
21013
21042
|
iv: iv
|
21014
21043
|
};
|
21015
21044
|
}
|
21016
|
-
async
|
21017
|
-
this.currentAppKey = appKey;
|
21018
|
-
this.currentUserId = userId;
|
21045
|
+
async initDB() {
|
21019
21046
|
await this.checkAndResetDatabase();
|
21020
21047
|
await this.initDatabase();
|
21021
21048
|
}
|
@@ -21028,7 +21055,7 @@ class MessageCache {
|
|
21028
21055
|
await this.deleteDatabase();
|
21029
21056
|
}
|
21030
21057
|
} catch (error) {
|
21031
|
-
|
21058
|
+
logger.error('解析存储的AppKey和UserId出错', error);
|
21032
21059
|
await this.deleteDatabase();
|
21033
21060
|
}
|
21034
21061
|
}
|
@@ -21048,11 +21075,11 @@ class MessageCache {
|
|
21048
21075
|
const dbName = this.getDBName();
|
21049
21076
|
const deleteRequest = indexedDB.deleteDatabase(dbName);
|
21050
21077
|
deleteRequest.onsuccess = () => {
|
21051
|
-
|
21078
|
+
logger.info(`数据库 ${dbName} 已成功删除`);
|
21052
21079
|
resolve();
|
21053
21080
|
};
|
21054
21081
|
deleteRequest.onerror = event => {
|
21055
|
-
|
21082
|
+
logger.error(`删除数据库 ${dbName} 失败`, event);
|
21056
21083
|
resolve();
|
21057
21084
|
};
|
21058
21085
|
});
|
@@ -21065,7 +21092,7 @@ class MessageCache {
|
|
21065
21092
|
const dbName = this.getDBName();
|
21066
21093
|
const request = indexedDB.open(dbName, this.DB_VERSION);
|
21067
21094
|
request.onerror = event => {
|
21068
|
-
|
21095
|
+
logger.error('数据库打开失败', event);
|
21069
21096
|
reject(new Error('数据库打开失败'));
|
21070
21097
|
};
|
21071
21098
|
request.onsuccess = event => {
|
@@ -21073,7 +21100,7 @@ class MessageCache {
|
|
21073
21100
|
this.loadAllDialogStates().then(() => {
|
21074
21101
|
resolve();
|
21075
21102
|
}).catch(err => {
|
21076
|
-
|
21103
|
+
logger.error('加载会话状态失败', err);
|
21077
21104
|
resolve();
|
21078
21105
|
});
|
21079
21106
|
};
|
@@ -21081,7 +21108,10 @@ class MessageCache {
|
|
21081
21108
|
const db = event.target.result;
|
21082
21109
|
if (!db.objectStoreNames.contains(this.STORE_NAME)) {
|
21083
21110
|
const store = db.createObjectStore(this.STORE_NAME, {
|
21084
|
-
keyPath: '
|
21111
|
+
keyPath: 'messageId'
|
21112
|
+
});
|
21113
|
+
store.createIndex('messageUId', 'messageUId', {
|
21114
|
+
unique: true
|
21085
21115
|
});
|
21086
21116
|
store.createIndex('dialogId', 'dialogId', {
|
21087
21117
|
unique: false
|
@@ -21145,7 +21175,7 @@ class MessageCache {
|
|
21145
21175
|
resolve();
|
21146
21176
|
};
|
21147
21177
|
request.onerror = event => {
|
21148
|
-
|
21178
|
+
logger.error('更新会话状态失败', event);
|
21149
21179
|
reject(new Error('更新会话状态失败'));
|
21150
21180
|
};
|
21151
21181
|
});
|
@@ -21156,7 +21186,7 @@ class MessageCache {
|
|
21156
21186
|
const contentStr = JSON.stringify(content);
|
21157
21187
|
return aes256Encrypt(contentStr, this.encryptKey);
|
21158
21188
|
} catch (error) {
|
21159
|
-
|
21189
|
+
logger.error('加密消息内容失败', error);
|
21160
21190
|
return '';
|
21161
21191
|
}
|
21162
21192
|
}
|
@@ -21168,7 +21198,7 @@ class MessageCache {
|
|
21168
21198
|
const decryptedStr = aes256Decrypt(encryptedHex, this.encryptKey);
|
21169
21199
|
return JSON.parse(decryptedStr);
|
21170
21200
|
} catch (error) {
|
21171
|
-
|
21201
|
+
logger.error('解密消息内容失败', error);
|
21172
21202
|
return null;
|
21173
21203
|
}
|
21174
21204
|
}
|
@@ -21198,7 +21228,7 @@ class MessageCache {
|
|
21198
21228
|
resolve();
|
21199
21229
|
};
|
21200
21230
|
transaction.onerror = event => {
|
21201
|
-
|
21231
|
+
logger.error('添加消息事务失败', event);
|
21202
21232
|
reject(new Error('添加消息事务失败'));
|
21203
21233
|
};
|
21204
21234
|
});
|
@@ -21241,7 +21271,7 @@ class MessageCache {
|
|
21241
21271
|
try {
|
21242
21272
|
message.content = this.decryptContent(message.content);
|
21243
21273
|
} catch (error) {
|
21244
|
-
|
21274
|
+
logger.error('解密消息内容失败', error);
|
21245
21275
|
message.content = null;
|
21246
21276
|
}
|
21247
21277
|
}
|
@@ -21265,7 +21295,7 @@ class MessageCache {
|
|
21265
21295
|
};
|
21266
21296
|
};
|
21267
21297
|
transaction.onerror = event => {
|
21268
|
-
|
21298
|
+
logger.error('获取消息事务失败', event);
|
21269
21299
|
reject(new Error('获取消息事务失败'));
|
21270
21300
|
};
|
21271
21301
|
});
|
@@ -21370,7 +21400,7 @@ class MessageCache {
|
|
21370
21400
|
}
|
21371
21401
|
};
|
21372
21402
|
deleteRequest.onerror = event => {
|
21373
|
-
|
21403
|
+
logger.error('删除消息失败', id, event);
|
21374
21404
|
if (!hasError) {
|
21375
21405
|
hasError = true;
|
21376
21406
|
reject(new Error('删除消息失败'));
|
@@ -21476,131 +21506,142 @@ class MessageCache {
|
|
21476
21506
|
}
|
21477
21507
|
};
|
21478
21508
|
request.onerror = event => {
|
21479
|
-
|
21509
|
+
logger.error('清除过期消息失败', event);
|
21480
21510
|
reject(new Error('清除过期消息失败'));
|
21481
21511
|
};
|
21482
21512
|
});
|
21483
21513
|
}
|
21484
|
-
async
|
21514
|
+
async getLatestMessage(conversation) {
|
21515
|
+
const dialogId = getFullDialogId(conversation);
|
21485
21516
|
if (!this.db) {
|
21486
|
-
return
|
21487
|
-
messages: [],
|
21488
|
-
nextCursor: null
|
21489
|
-
};
|
21517
|
+
return null;
|
21490
21518
|
}
|
21491
21519
|
return new Promise((resolve, reject) => {
|
21492
21520
|
const transaction = this.db.transaction(this.STORE_NAME, 'readonly');
|
21493
21521
|
const store = transaction.objectStore(this.STORE_NAME);
|
21494
21522
|
const index = store.index('dialogId_sentTime');
|
21495
|
-
const range = IDBKeyRange.bound([dialogId,
|
21496
|
-
const
|
21497
|
-
|
21498
|
-
let count = 0;
|
21499
|
-
const cursorRequest = index.openCursor(range);
|
21523
|
+
const range = IDBKeyRange.bound([dialogId, ''], [dialogId, '\uffff']);
|
21524
|
+
const direction = 'prev';
|
21525
|
+
const cursorRequest = index.openCursor(range, direction);
|
21500
21526
|
cursorRequest.onsuccess = event => {
|
21501
21527
|
const cursor = event.target.result;
|
21502
|
-
if (cursor
|
21503
|
-
|
21504
|
-
|
21505
|
-
|
21506
|
-
|
21507
|
-
|
21528
|
+
if (cursor) {
|
21529
|
+
const message = {
|
21530
|
+
...cursor.value
|
21531
|
+
};
|
21532
|
+
if (typeof message.content === 'string' && message.content) {
|
21533
|
+
try {
|
21534
|
+
message.content = this.decryptContent(message.content);
|
21535
|
+
} catch (error) {
|
21536
|
+
logger.error('解密消息内容失败', error);
|
21537
|
+
message.content = null;
|
21538
|
+
}
|
21539
|
+
}
|
21540
|
+
resolve(message);
|
21508
21541
|
} else {
|
21509
|
-
|
21510
|
-
}
|
21511
|
-
if (!cursor || count >= pageSize) {
|
21512
|
-
resolve({
|
21513
|
-
messages,
|
21514
|
-
nextCursor
|
21515
|
-
});
|
21542
|
+
resolve(null);
|
21516
21543
|
}
|
21517
21544
|
};
|
21518
21545
|
cursorRequest.onerror = event => {
|
21519
|
-
|
21546
|
+
logger.error('获取最新消息失败', event);
|
21547
|
+
resolve(null);
|
21520
21548
|
};
|
21521
21549
|
});
|
21522
21550
|
}
|
21523
|
-
async
|
21524
|
-
if (!this.db
|
21525
|
-
|
21551
|
+
async upsertMessage(message) {
|
21552
|
+
if (!this.db) {
|
21553
|
+
throw new Error('数据库未初始化');
|
21526
21554
|
}
|
21527
21555
|
return new Promise((resolve, reject) => {
|
21528
21556
|
const transaction = this.db.transaction(this.STORE_NAME, 'readwrite');
|
21529
21557
|
const store = transaction.objectStore(this.STORE_NAME);
|
21530
|
-
|
21531
|
-
|
21532
|
-
|
21533
|
-
|
21534
|
-
|
21535
|
-
|
21536
|
-
|
21537
|
-
|
21538
|
-
|
21539
|
-
}
|
21540
|
-
completed++;
|
21541
|
-
if (completed === messageUIds.length && !hasError) {
|
21542
|
-
resolve();
|
21543
|
-
}
|
21544
|
-
};
|
21545
|
-
getRequest.onerror = event => {
|
21546
|
-
if (!hasError) {
|
21547
|
-
hasError = true;
|
21548
|
-
reject(new Error('更新消息状态失败'));
|
21549
|
-
}
|
21550
|
-
};
|
21551
|
-
});
|
21552
|
-
transaction.oncomplete = () => {
|
21558
|
+
const messageToStore = {
|
21559
|
+
...message
|
21560
|
+
};
|
21561
|
+
if (messageToStore.content) {
|
21562
|
+
const encryptedContent = this.encryptContent(messageToStore.content);
|
21563
|
+
messageToStore.content = encryptedContent;
|
21564
|
+
}
|
21565
|
+
const request = store.put(messageToStore);
|
21566
|
+
request.onsuccess = () => {
|
21553
21567
|
resolve();
|
21554
21568
|
};
|
21555
|
-
|
21556
|
-
|
21569
|
+
request.onerror = event => {
|
21570
|
+
logger.error('更新/插入消息失败', event);
|
21571
|
+
reject(new Error('更新/插入消息失败'));
|
21557
21572
|
};
|
21558
21573
|
});
|
21559
21574
|
}
|
21560
|
-
async
|
21561
|
-
if (this.currentAppKey === appKey && this.currentUserId === userId) {
|
21562
|
-
return;
|
21563
|
-
}
|
21564
|
-
this.currentAppKey = appKey;
|
21565
|
-
this.currentUserId = userId;
|
21566
|
-
this.generateEncryptKey(appKey, userId);
|
21567
|
-
await this.checkAndResetDatabase();
|
21568
|
-
await this.initDatabase();
|
21569
|
-
}
|
21570
|
-
async getLatestMessage(conversation) {
|
21571
|
-
const dialogId = getFullDialogId(conversation);
|
21575
|
+
async getMessageById(messageId) {
|
21572
21576
|
if (!this.db) {
|
21573
21577
|
return null;
|
21574
21578
|
}
|
21575
21579
|
return new Promise((resolve, reject) => {
|
21576
21580
|
const transaction = this.db.transaction(this.STORE_NAME, 'readonly');
|
21577
21581
|
const store = transaction.objectStore(this.STORE_NAME);
|
21578
|
-
const
|
21579
|
-
|
21580
|
-
|
21581
|
-
|
21582
|
-
|
21583
|
-
|
21584
|
-
if (cursor) {
|
21585
|
-
const message = {
|
21586
|
-
...cursor.value
|
21582
|
+
const request = store.get(messageId);
|
21583
|
+
request.onsuccess = () => {
|
21584
|
+
const message = request.result;
|
21585
|
+
if (message) {
|
21586
|
+
const decryptedMessage = {
|
21587
|
+
...message
|
21587
21588
|
};
|
21588
|
-
if (typeof
|
21589
|
+
if (typeof decryptedMessage.content === 'string' && decryptedMessage.content) {
|
21589
21590
|
try {
|
21590
|
-
|
21591
|
+
decryptedMessage.content = this.decryptContent(decryptedMessage.content);
|
21591
21592
|
} catch (error) {
|
21592
|
-
|
21593
|
-
|
21593
|
+
logger.error('解密消息内容失败', error);
|
21594
|
+
decryptedMessage.content = null;
|
21594
21595
|
}
|
21595
21596
|
}
|
21596
|
-
resolve(
|
21597
|
+
resolve(decryptedMessage);
|
21597
21598
|
} else {
|
21598
21599
|
resolve(null);
|
21599
21600
|
}
|
21600
21601
|
};
|
21601
|
-
|
21602
|
-
|
21603
|
-
|
21602
|
+
request.onerror = event => {
|
21603
|
+
logger.error('查询消息失败', event);
|
21604
|
+
resolve(null);
|
21605
|
+
};
|
21606
|
+
});
|
21607
|
+
}
|
21608
|
+
async getMessageIdRange() {
|
21609
|
+
if (!this.db) {
|
21610
|
+
return null;
|
21611
|
+
}
|
21612
|
+
return new Promise((resolve, reject) => {
|
21613
|
+
const transaction = this.db.transaction(this.STORE_NAME, 'readonly');
|
21614
|
+
const store = transaction.objectStore(this.STORE_NAME);
|
21615
|
+
let newest = null;
|
21616
|
+
let oldest = null;
|
21617
|
+
const oldestRequest = store.openCursor();
|
21618
|
+
oldestRequest.onsuccess = event => {
|
21619
|
+
const cursor = event.target.result;
|
21620
|
+
if (cursor) {
|
21621
|
+
oldest = cursor.value.messageId;
|
21622
|
+
const newestRequest = store.openCursor(null, 'prev');
|
21623
|
+
newestRequest.onsuccess = event => {
|
21624
|
+
const cursor = event.target.result;
|
21625
|
+
if (cursor) {
|
21626
|
+
newest = cursor.value.messageId;
|
21627
|
+
if (newest && oldest) {
|
21628
|
+
resolve({
|
21629
|
+
newest,
|
21630
|
+
oldest
|
21631
|
+
});
|
21632
|
+
} else {
|
21633
|
+
resolve(null);
|
21634
|
+
}
|
21635
|
+
} else {
|
21636
|
+
resolve(null);
|
21637
|
+
}
|
21638
|
+
};
|
21639
|
+
} else {
|
21640
|
+
resolve(null);
|
21641
|
+
}
|
21642
|
+
};
|
21643
|
+
transaction.onerror = event => {
|
21644
|
+
resolve(null);
|
21604
21645
|
};
|
21605
21646
|
});
|
21606
21647
|
}
|
@@ -21717,16 +21758,29 @@ class LibLoader {
|
|
21717
21758
|
webSocketServer.close();
|
21718
21759
|
return Promise.resolve();
|
21719
21760
|
}
|
21720
|
-
setUserLogged() {
|
21761
|
+
async setUserLogged() {
|
21721
21762
|
ConversationManager$1.get().destroyed();
|
21722
21763
|
ConversationManager$1.create(this.options.appkey, accountStore.uid.toString(), this.watcher.conversationState);
|
21723
21764
|
MessageReceiptManager$1.create(this.options.appkey, accountStore.uid.toString());
|
21724
|
-
MessageCache$1.create(this.options.appkey, accountStore.uid.toString());
|
21725
21765
|
this.messageLoader?.stop();
|
21726
21766
|
this.messageLoader = new MessageLoader(this.watcher, this.options);
|
21727
21767
|
SentMessageStore.reset();
|
21728
21768
|
RecallMessageStore.reset();
|
21729
21769
|
DialogSecretKey$1.reset();
|
21770
|
+
MessageCache$1.create(this.options.appkey, accountStore.uid.toString());
|
21771
|
+
MessageCache$1.get().initDB().then(() => {
|
21772
|
+
return MessageCache$1.get().getMessageIdRange();
|
21773
|
+
}).then(result => {
|
21774
|
+
if (result) {
|
21775
|
+
const {
|
21776
|
+
oldest,
|
21777
|
+
newest
|
21778
|
+
} = result;
|
21779
|
+
setInitialMessageId(oldest, newest);
|
21780
|
+
} else {
|
21781
|
+
setInitialMessageId(10000, 10000);
|
21782
|
+
}
|
21783
|
+
});
|
21730
21784
|
if (this.getConnectionStatus() === ConnectionStatus.CONNECTED) {
|
21731
21785
|
this.handleUserConnected();
|
21732
21786
|
}
|
@@ -28370,37 +28424,31 @@ function requireProtobufjs () {
|
|
28370
28424
|
var protobufjsExports = requireProtobufjs();
|
28371
28425
|
var protobuf = /*@__PURE__*/getDefaultExportFromCjs(protobufjsExports);
|
28372
28426
|
|
28373
|
-
const transSentAttrs2IReceivedMessage = (message, options, sentStatus = SentStatus.SENDING) =>
|
28374
|
-
|
28375
|
-
|
28376
|
-
|
28377
|
-
|
28378
|
-
|
28379
|
-
|
28380
|
-
|
28381
|
-
|
28382
|
-
|
28383
|
-
|
28384
|
-
|
28385
|
-
|
28386
|
-
|
28387
|
-
|
28388
|
-
|
28389
|
-
|
28390
|
-
|
28391
|
-
|
28392
|
-
|
28393
|
-
|
28394
|
-
|
28395
|
-
|
28396
|
-
|
28397
|
-
|
28398
|
-
const time = getServerTime$1();
|
28399
|
-
if (UniqueLocalId < time) {
|
28400
|
-
UniqueLocalId = time;
|
28401
|
-
}
|
28402
|
-
return 230000000000000 + UniqueLocalId;
|
28403
|
-
}
|
28427
|
+
const transSentAttrs2IReceivedMessage = (message, options, sentStatus = SentStatus.SENDING) => {
|
28428
|
+
const conversation = ConversationManager$1.get().get(options.conversation);
|
28429
|
+
return {
|
28430
|
+
conversationType: options.conversation.conversationType,
|
28431
|
+
targetId: options.conversation.targetId,
|
28432
|
+
senderUserId: options.senderUserId,
|
28433
|
+
messageDirection: MessageDirection.SEND,
|
28434
|
+
isCounted: message.isCounted,
|
28435
|
+
isMentioned: false,
|
28436
|
+
content: deepClone(message.content),
|
28437
|
+
messageType: message.messageType,
|
28438
|
+
isOffLineMessage: false,
|
28439
|
+
isPersited: message.isPersited,
|
28440
|
+
messageId: options.messageId,
|
28441
|
+
messageUId: '0',
|
28442
|
+
sentTime: options.sentTime,
|
28443
|
+
sentStatus,
|
28444
|
+
receivedTime: options.sentTime,
|
28445
|
+
isStatusMessage: message.isStatusMessage,
|
28446
|
+
receivedStatus: ReceivedStatus.IDLE,
|
28447
|
+
disableNotification: true,
|
28448
|
+
burnAfterReadingFlag: conversation?.burnAfterReadingFlag ?? false,
|
28449
|
+
burnAfterReadingTime: conversation?.burnAfterReadingTime ?? 0
|
28450
|
+
};
|
28451
|
+
};
|
28404
28452
|
|
28405
28453
|
const getBlobUrl = blob => {
|
28406
28454
|
const URL = window.URL || window.webkitURL;
|
@@ -28871,10 +28919,12 @@ const sendRecallMessage = async (conversation, options) => {
|
|
28871
28919
|
const sentAttris = {
|
28872
28920
|
conversation,
|
28873
28921
|
senderUserId: accountStore.uid,
|
28874
|
-
messageId:
|
28922
|
+
messageId: 0,
|
28875
28923
|
sentTime: getServerTime$1().toString()
|
28876
28924
|
};
|
28877
28925
|
const receivedMessage = transSentAttrs2IReceivedMessage(recallCommandMessage, sentAttris, SentStatus.SENT);
|
28926
|
+
receivedMessage.burnAfterReadingFlag = false;
|
28927
|
+
receivedMessage.burnAfterReadingTime = 0;
|
28878
28928
|
ConversationManager$1.get().setConversationCacheByMessage(receivedMessage);
|
28879
28929
|
return {
|
28880
28930
|
code: ErrorCode.SUCCESS,
|
@@ -28923,12 +28973,16 @@ async function createSendFunction(fileType, conversation, msgBody, hooks, sendOp
|
|
28923
28973
|
});
|
28924
28974
|
}
|
28925
28975
|
async function internal_sendMessage(conversation, message, options, uploadOptions) {
|
28926
|
-
const checkResult = beforeSend(conversation, message, options);
|
28976
|
+
const checkResult = await beforeSend(conversation, message, options);
|
28927
28977
|
if (checkResult.code !== ErrorCode.SUCCESS || !checkResult.message || !checkResult.sentArgs) {
|
28928
28978
|
return {
|
28929
28979
|
code: checkResult.code
|
28930
28980
|
};
|
28931
28981
|
}
|
28982
|
+
{
|
28983
|
+
const receivedMessage = transSentAttrs2IReceivedMessage(checkResult.message, checkResult.sentArgs);
|
28984
|
+
await saveSentMessage(receivedMessage, checkResult.sentArgs);
|
28985
|
+
}
|
28932
28986
|
let {
|
28933
28987
|
message: sentMessage,
|
28934
28988
|
sentArgs
|
@@ -28937,30 +28991,30 @@ async function internal_sendMessage(conversation, message, options, uploadOption
|
|
28937
28991
|
const uploadResult = await uploadOptions.task(sentMessage, uploadOptions.files);
|
28938
28992
|
sentMessage = uploadResult.message;
|
28939
28993
|
if (!uploadResult.finished) {
|
28994
|
+
const receivedMessage = transSentAttrs2IReceivedMessage(checkResult.message, checkResult.sentArgs, SentStatus.FAILED);
|
28995
|
+
await saveSentMessage(receivedMessage, sentArgs);
|
28940
28996
|
return {
|
28941
28997
|
code: ErrorCode.UPLOAD_FILE_FAILED,
|
28942
|
-
data:
|
28998
|
+
data: receivedMessage
|
28943
28999
|
};
|
28944
29000
|
}
|
28945
29001
|
}
|
28946
29002
|
return send(sentMessage, sentArgs);
|
28947
29003
|
}
|
28948
|
-
function beforeSend(conversation, message, options) {
|
28949
|
-
if (!LibLoader.loader || LibLoader.loader.getConnectionStatus() !== ConnectionStatus.CONNECTED) {
|
28950
|
-
return {
|
28951
|
-
code: ErrorCode.RC_NET_CHANNEL_INVALID
|
28952
|
-
};
|
28953
|
-
}
|
29004
|
+
async function beforeSend(conversation, message, options) {
|
28954
29005
|
const mediaAttribute = JSON.stringify(filterNullProperty(message.content));
|
28955
29006
|
if (getByteLength(mediaAttribute) > MAX_MESSAGE_CONTENT_BYTES) {
|
28956
29007
|
return {
|
28957
29008
|
code: ErrorCode.RC_MSG_CONTENT_EXCEED_LIMIT
|
28958
29009
|
};
|
28959
29010
|
}
|
29011
|
+
if (message.isPersited) {
|
29012
|
+
await ConversationManager$1.get().loadConvsationsIfNotExist([conversation]);
|
29013
|
+
}
|
28960
29014
|
const sentArgs = {
|
28961
29015
|
conversation: conversation,
|
28962
29016
|
senderUserId: accountStore.uid,
|
28963
|
-
messageId:
|
29017
|
+
messageId: generateNewMessageId(),
|
28964
29018
|
sentTime: getMessageSentTime().toString(),
|
28965
29019
|
pushConfig: options?.pushConfig
|
28966
29020
|
};
|
@@ -28977,12 +29031,6 @@ function beforeSend(conversation, message, options) {
|
|
28977
29031
|
async function send(message, sentArgs) {
|
28978
29032
|
const dialogId = getFullDialogId(sentArgs.conversation);
|
28979
29033
|
const receivedMessage = transSentAttrs2IReceivedMessage(message, sentArgs);
|
28980
|
-
if (message.isPersited) {
|
28981
|
-
await ConversationManager$1.get().loadConvsationsIfNotExist([sentArgs.conversation]);
|
28982
|
-
}
|
28983
|
-
const conversation = ConversationManager$1.get().get(sentArgs.conversation);
|
28984
|
-
receivedMessage.burnAfterReadingFlag = conversation?.burnAfterReadingFlag ?? false;
|
28985
|
-
receivedMessage.burnAfterReadingTime = conversation?.burnAfterReadingTime ?? 0;
|
28986
29034
|
const secretKey = await DialogSecretKey$1.getDialogAesKey(dialogId.toString());
|
28987
29035
|
if (!secretKey) {
|
28988
29036
|
receivedMessage.sentStatus = SentStatus.FAILED;
|
@@ -29005,7 +29053,7 @@ async function send(message, sentArgs) {
|
|
29005
29053
|
const mediaEncryptedString = aes256Encrypt(mediaAttribute, secretKey);
|
29006
29054
|
SentMessageStore.addMessage(sentArgs.messageId);
|
29007
29055
|
const baseParams = {
|
29008
|
-
localId: Long.
|
29056
|
+
localId: Long.fromNumber(sentArgs.messageId),
|
29009
29057
|
mediaFlag: message.messageType !== MessageTypes.TEXT,
|
29010
29058
|
mediaConstructor: message.messageType,
|
29011
29059
|
msgPreContent: '',
|
@@ -29036,9 +29084,10 @@ async function send(message, sentArgs) {
|
|
29036
29084
|
receivedMessage.sentTime = response.data.msgSendTime.toString();
|
29037
29085
|
receivedMessage.messageUId = response.data.msgId.toString();
|
29038
29086
|
receivedMessage.sentStatus = SentStatus.SENT;
|
29039
|
-
|
29087
|
+
await saveSentMessage(receivedMessage, sentArgs);
|
29040
29088
|
} else {
|
29041
29089
|
receivedMessage.sentStatus = SentStatus.FAILED;
|
29090
|
+
await saveSentMessage(receivedMessage, sentArgs);
|
29042
29091
|
}
|
29043
29092
|
return {
|
29044
29093
|
code: response.code,
|
@@ -29054,6 +29103,18 @@ function getMessageSentTime() {
|
|
29054
29103
|
}
|
29055
29104
|
return UniqueSentTime;
|
29056
29105
|
}
|
29106
|
+
async function saveSentMessage(receivedMessage, options) {
|
29107
|
+
try {
|
29108
|
+
const cache = MessageCache$1.get();
|
29109
|
+
if (receivedMessage.isPersited && cache) {
|
29110
|
+
await cache.upsertMessage(receivedMessage);
|
29111
|
+
const latestMessage = await cache.getLatestMessage(options.conversation);
|
29112
|
+
ConversationManager$1.get().updateLatestMessage(options.conversation, latestMessage);
|
29113
|
+
}
|
29114
|
+
} catch (error) {
|
29115
|
+
logger.error('saveSentMessage -> ', error);
|
29116
|
+
}
|
29117
|
+
}
|
29057
29118
|
|
29058
29119
|
class IMClient extends EventEmitter {
|
29059
29120
|
options;
|
@@ -29230,7 +29291,6 @@ class IMClient extends EventEmitter {
|
|
29230
29291
|
});
|
29231
29292
|
}
|
29232
29293
|
async getPreviousHistoryMessages(conversation, timestamp, count = 20) {
|
29233
|
-
debugger;
|
29234
29294
|
const cachedResult = await MessageCache$1.get().getPreviousMessages(conversation, timestamp ?? '0', count);
|
29235
29295
|
if (!timestamp && cachedResult.messages.length) {
|
29236
29296
|
ConversationManager$1.get().updateLatestMessage(conversation, cachedResult.messages[cachedResult.messages.length - 1]);
|
@@ -29254,8 +29314,13 @@ class IMClient extends EventEmitter {
|
|
29254
29314
|
return remotesResult;
|
29255
29315
|
}
|
29256
29316
|
const remotesMessages = remotesResult.data.list;
|
29317
|
+
for (let i = remotesMessages.length - 1; i >= 0; i--) {
|
29318
|
+
const message = remotesMessages[i];
|
29319
|
+
if (!message.messageId) {
|
29320
|
+
message.messageId = generateOldMessageId();
|
29321
|
+
}
|
29322
|
+
}
|
29257
29323
|
if (!remotesTimestamp || remotesTimestamp == '0') {
|
29258
|
-
debugger;
|
29259
29324
|
ConversationManager$1.get().updateLatestMessage(conversation, remotesMessages[remotesMessages.length - 1]);
|
29260
29325
|
}
|
29261
29326
|
MessageCache$1.get().addMessages(remotesMessages, conversation, !remotesResult.data.hasMore);
|