@onyx-p/imlib-web 1.3.3 → 1.3.5

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.umd.js CHANGED
@@ -8023,9 +8023,9 @@
8023
8023
  CmdIds[CmdIds["DeletePrivateDialog"] = 1610682372] = "DeletePrivateDialog";
8024
8024
  CmdIds[CmdIds["DeleteGroupDialog"] = 1610747908] = "DeleteGroupDialog";
8025
8025
  CmdIds[CmdIds["GetDialogChangedStatus"] = 1610711094] = "GetDialogChangedStatus";
8026
+ CmdIds[CmdIds["HeartbeanResp"] = 268468225] = "HeartbeanResp";
8026
8027
  CmdIds[CmdIds["NewMessagePush"] = 1610711040] = "NewMessagePush";
8027
8028
  CmdIds[CmdIds["DialogChangedPush"] = 1610711096] = "DialogChangedPush";
8028
- CmdIds[CmdIds["AppAllowLoginPush"] = 806453286] = "AppAllowLoginPush";
8029
8029
  CmdIds[CmdIds["SessionKilledPush"] = 268468229] = "SessionKilledPush";
8030
8030
  CmdIds[CmdIds["SignOutPish"] = 268439559] = "SignOutPish";
8031
8031
  CmdIds[CmdIds["SignOutPish2"] = 268468231] = "SignOutPish2";
@@ -13400,7 +13400,9 @@
13400
13400
  body: body,
13401
13401
  deviceType: 7
13402
13402
  };
13403
- logger.reqInfo(`websocket send -> cmd: 0x${cmdId.toString(16)}, messageSeq: ${messageSeq}`);
13403
+ if (cmdId !== CmdIds$1.Heartbean) {
13404
+ logger.info(`websocket send -> cmd: 0x${cmdId.toString(16)}, messageSeq: ${messageSeq}`);
13405
+ }
13404
13406
  this.socket.send(buildWsPacketData(rpc_baseExports.NetworkRequest.encode(networkReq).finish()));
13405
13407
  const respData = await new Promise(resolve => {
13406
13408
  this.responseCallbacks.set(messageSeq, resolve);
@@ -13519,13 +13521,15 @@
13519
13521
  return;
13520
13522
  }
13521
13523
  const messageSeq = Long.isLong(networkResponse.messageSeq) ? networkResponse.messageSeq.toNumber() : 0;
13522
- logger.reqInfo(`websocket recv ack -> messageSeq: ${messageSeq}`);
13524
+ if (networkResponse.cmdId !== CmdIds$1.HeartbeanResp) {
13525
+ logger.info(`websocket recv ack -> messageSeq: ${messageSeq}`);
13526
+ }
13523
13527
  const resolve = this.responseCallbacks.get(messageSeq);
13524
13528
  if (isDef(resolve)) {
13525
13529
  resolve(networkResponse.body);
13526
13530
  this.responseCallbacks.delete(messageSeq);
13527
13531
  } else {
13528
- logger.reqInfo(`websocket recv -> cmd: 0x${networkResponse.cmdId.toString(16)}, messageSeq: ${messageSeq}`);
13532
+ logger.info(`websocket recv -> cmd: 0x${networkResponse.cmdId.toString(16)}, messageSeq: ${messageSeq}`);
13529
13533
  this.watcher?.message(networkResponse.cmdId, networkResponse.body);
13530
13534
  }
13531
13535
  }
@@ -18718,331 +18722,6 @@
18718
18722
  }
18719
18723
  };
18720
18724
 
18721
- const MessageSerializers = new Map();
18722
- function registerMessageSerializer(aSerializer) {
18723
- MessageSerializers.set(aSerializer.getObjectId(), aSerializer.decode.bind(aSerializer));
18724
- }
18725
- function decodeMessage(objectId, messageData) {
18726
- const decodeFunc = MessageSerializers.get(objectId);
18727
- const messageObject = decodeFunc ? decodeFunc(messageData) : null;
18728
- return messageObject;
18729
- }
18730
-
18731
- class BaseMessage {
18732
- content;
18733
- isPersited;
18734
- isCounted;
18735
- isStatusMessage;
18736
- constructor(content, isPersited = true, isCounted = true, isStatusMessage = false) {
18737
- this.content = content;
18738
- if (isStatusMessage) {
18739
- this.isPersited = false;
18740
- this.isCounted = false;
18741
- } else {
18742
- this.isPersited = isPersited;
18743
- this.isCounted = isCounted;
18744
- }
18745
- this.isStatusMessage = isStatusMessage;
18746
- }
18747
- get objectId() {
18748
- return this.constructor.getObjectId();
18749
- }
18750
- static getObjectId() {
18751
- throw new Error('Method not implemented.');
18752
- }
18753
- static decode(aDecoder) {
18754
- throw new Error('Method not implemented.');
18755
- }
18756
- encode() {
18757
- throw new Error('Method not implemented.');
18758
- }
18759
- }
18760
-
18761
- const MessageObjectIds = {
18762
- TEXT: 0x00000000,
18763
- IMAGE: 0x10001000,
18764
- GIF: 0x1000100b,
18765
- FILE: 0x1000100a,
18766
- AUDIO: 0x10001001,
18767
- CUST_COMMAND: 0x1000101d,
18768
- CUST_STORAGE: 0x1000102d,
18769
- CUST_NORMAL: 0x1000103d,
18770
- CUST_STATUS: 0x1000104d,
18771
- RECALL: 0x6001001d,
18772
- CMD: 0x1000105d
18773
- };
18774
-
18775
- class TextMessage extends BaseMessage {
18776
- constructor(content) {
18777
- super(content);
18778
- }
18779
- static getObjectId() {
18780
- return MessageObjectIds.TEXT;
18781
- }
18782
- static decode(aDecoder) {
18783
- const {
18784
- user,
18785
- extra,
18786
- content
18787
- } = aDecoder;
18788
- return new TextMessage({
18789
- user,
18790
- extra,
18791
- content
18792
- });
18793
- }
18794
- encode() {
18795
- const {
18796
- user,
18797
- extra,
18798
- content
18799
- } = this.content;
18800
- return {
18801
- user,
18802
- extra,
18803
- content
18804
- };
18805
- }
18806
- }
18807
-
18808
- class IMConfig {
18809
- _token = '';
18810
- _uploadUrl = '';
18811
- _downloadUrl = '';
18812
- _cert = '';
18813
- set imInitToken(val) {
18814
- this._token = val;
18815
- }
18816
- get imInitToken() {
18817
- return this._token;
18818
- }
18819
- get fileUploadUrl() {
18820
- return this._uploadUrl;
18821
- }
18822
- get cert() {
18823
- return this._cert;
18824
- }
18825
- get fileDownloadUrl() {
18826
- return this._downloadUrl;
18827
- }
18828
- setFileServerInfo(uploadUrl, downloadUrl, cert) {
18829
- this._uploadUrl = uploadUrl;
18830
- this._downloadUrl = downloadUrl;
18831
- this._cert = cert;
18832
- }
18833
- getFileAbsoluteUri(u) {
18834
- if (!notEmptyString(u)) {
18835
- return u;
18836
- }
18837
- if (u.startsWith('http')) {
18838
- return u;
18839
- }
18840
- return this.fileDownloadUrl + u;
18841
- }
18842
- try2ExtractFileRelativeUri(u) {
18843
- if (!notEmptyString(u)) {
18844
- return u;
18845
- }
18846
- if (!u.startsWith(this.fileDownloadUrl)) {
18847
- return u;
18848
- }
18849
- return u.substring(this.fileDownloadUrl.length);
18850
- }
18851
- }
18852
- var imConfig = new IMConfig();
18853
-
18854
- class ImageMessage extends BaseMessage {
18855
- constructor(content) {
18856
- super(content);
18857
- }
18858
- static getObjectId() {
18859
- return MessageObjectIds.IMAGE;
18860
- }
18861
- static decode(aDecoder) {
18862
- const {
18863
- user,
18864
- extra,
18865
- thumbnailObjectKey,
18866
- originalObjectKey,
18867
- width,
18868
- height
18869
- } = aDecoder;
18870
- return new ImageMessage({
18871
- user,
18872
- extra,
18873
- content: thumbnailObjectKey,
18874
- imageUri: imConfig.getFileAbsoluteUri(originalObjectKey),
18875
- width,
18876
- height
18877
- });
18878
- }
18879
- encode() {
18880
- const {
18881
- user,
18882
- extra,
18883
- content,
18884
- imageUri,
18885
- width,
18886
- height
18887
- } = this.content;
18888
- return {
18889
- user,
18890
- extra,
18891
- thumbnailObjectKey: content,
18892
- originalObjectKey: imConfig.try2ExtractFileRelativeUri(imageUri),
18893
- width: width && Math.floor(width),
18894
- height: height && Math.floor(height)
18895
- };
18896
- }
18897
- }
18898
-
18899
- class GIFMessage extends BaseMessage {
18900
- constructor(content) {
18901
- super(content);
18902
- }
18903
- static getObjectId() {
18904
- return MessageObjectIds.GIF;
18905
- }
18906
- static decode(aDecoder) {
18907
- const {
18908
- user,
18909
- extra,
18910
- size,
18911
- originalObjectKey,
18912
- width,
18913
- height
18914
- } = aDecoder;
18915
- return new GIFMessage({
18916
- user,
18917
- extra,
18918
- gifDataSize: size,
18919
- remoteUrl: imConfig.getFileAbsoluteUri(originalObjectKey),
18920
- width,
18921
- height
18922
- });
18923
- }
18924
- encode() {
18925
- const {
18926
- user,
18927
- extra,
18928
- gifDataSize,
18929
- remoteUrl,
18930
- width,
18931
- height
18932
- } = this.content;
18933
- return {
18934
- user,
18935
- extra,
18936
- size: gifDataSize,
18937
- originalObjectKey: imConfig.try2ExtractFileRelativeUri(remoteUrl),
18938
- width: width && Math.floor(width),
18939
- height: height && Math.floor(height),
18940
- extension: 'gif'
18941
- };
18942
- }
18943
- }
18944
-
18945
- class HQVoiceMessage extends BaseMessage {
18946
- constructor(content) {
18947
- super(content);
18948
- }
18949
- static getObjectId() {
18950
- return MessageObjectIds.AUDIO;
18951
- }
18952
- static decode(aDecoder) {
18953
- const {
18954
- user,
18955
- extra,
18956
- length,
18957
- audioObjectKey,
18958
- extension
18959
- } = aDecoder;
18960
- return new HQVoiceMessage({
18961
- user,
18962
- extra,
18963
- remoteUrl: imConfig.getFileAbsoluteUri(audioObjectKey),
18964
- duration: length,
18965
- type: extension
18966
- });
18967
- }
18968
- encode() {
18969
- const {
18970
- user,
18971
- extra,
18972
- remoteUrl,
18973
- duration,
18974
- type
18975
- } = this.content;
18976
- return {
18977
- user,
18978
- extra,
18979
- length: duration,
18980
- audioObjectKey: imConfig.try2ExtractFileRelativeUri(remoteUrl),
18981
- extension: type
18982
- };
18983
- }
18984
- }
18985
-
18986
- class FileMessage extends BaseMessage {
18987
- constructor(content) {
18988
- super(content);
18989
- }
18990
- static getObjectId() {
18991
- return MessageObjectIds.FILE;
18992
- }
18993
- static decode(aDecoder) {
18994
- const {
18995
- user,
18996
- extra,
18997
- title,
18998
- extension,
18999
- size,
19000
- originalObjectKey
19001
- } = aDecoder;
19002
- return new FileMessage({
19003
- user,
19004
- extra,
19005
- name: title,
19006
- size,
19007
- type: extension,
19008
- fileUrl: imConfig.getFileAbsoluteUri(originalObjectKey)
19009
- });
19010
- }
19011
- encode() {
19012
- const {
19013
- user,
19014
- extra,
19015
- name,
19016
- size,
19017
- type,
19018
- fileUrl
19019
- } = this.content;
19020
- return {
19021
- user,
19022
- extra,
19023
- title: name,
19024
- originalObjectKey: imConfig.try2ExtractFileRelativeUri(fileUrl),
19025
- extension: type,
19026
- size
19027
- };
19028
- }
19029
- }
19030
-
19031
- class RecallCommandMessage extends BaseMessage {
19032
- constructor(content) {
19033
- super(content, true, false, false);
19034
- }
19035
- static getObjectId() {
19036
- return MessageObjectIds.RECALL;
19037
- }
19038
- static decode(aDecoder) {
19039
- return new RecallCommandMessage(aDecoder);
19040
- }
19041
- encode() {
19042
- return this.content;
19043
- }
19044
- }
19045
-
19046
18725
  class DialogSecretKey {
19047
18726
  aesKeyRecord = new Map();
19048
18727
  async getDialogAesKey(dialogId) {
@@ -19192,6 +18871,27 @@
19192
18871
  return new Uint8Array(array);
19193
18872
  };
19194
18873
 
18874
+ const MessageSerializers = new Map();
18875
+ function decodeMessage(objectId, messageData) {
18876
+ const decodeFunc = MessageSerializers.get(objectId);
18877
+ const messageObject = decodeFunc ? decodeFunc(messageData) : null;
18878
+ return messageObject;
18879
+ }
18880
+
18881
+ const MessageTypes = {
18882
+ TEXT: 0x00000000,
18883
+ IMAGE: 0x10001000,
18884
+ GIF: 0x1000100b,
18885
+ FILE: 0x1000100a,
18886
+ AUDIO: 0x10001001,
18887
+ CUST_COMMAND: 0x1000101d,
18888
+ CUST_STORAGE: 0x1000102d,
18889
+ CUST_NORMAL: 0x1000103d,
18890
+ CUST_STATUS: 0x1000104d,
18891
+ RECALL: 0x6001001d,
18892
+ CMD: 0x1000105d
18893
+ };
18894
+
19195
18895
  const STATUSMESSAGE_ALIVE_TIMEMS = 6000;
19196
18896
  function parse(orginalMsgs, callback) {
19197
18897
  const msgs = new Map();
@@ -19247,12 +18947,9 @@
19247
18947
  sendTime
19248
18948
  } = mediaAttributeJson;
19249
18949
  const recallContent = {
19250
- sentTime: sendTime,
19251
- messageUId: msgId,
19252
- conversationType: conversation.conversationType,
19253
- targetId: dialogMessage.isOut ? conversation.targetId : accountStore.uid
18950
+ msgId: msgId
19254
18951
  };
19255
- mediaConstructor = MessageObjectIds.RECALL;
18952
+ mediaConstructor = MessageTypes.RECALL;
19256
18953
  mediaAttributeJson = recallContent;
19257
18954
  recallMessageUIds.add(msgId);
19258
18955
  }
@@ -19398,7 +19095,7 @@
19398
19095
  messageDirection
19399
19096
  } = message;
19400
19097
  const isSelfSend = messageDirection === exports.MessageDirection.SEND;
19401
- const isRecall = messageType === MessageObjectIds.RECALL;
19098
+ const isRecall = messageType === MessageTypes.RECALL;
19402
19099
  const hasContent = isObject(content);
19403
19100
  const key = {
19404
19101
  conversationType,
@@ -19432,7 +19129,7 @@
19432
19129
  messageDirection,
19433
19130
  content
19434
19131
  } = message;
19435
- if (messageDirection === exports.MessageDirection.SEND || !isMentioned && messageType !== MessageObjectIds.RECALL) {
19132
+ if (messageDirection === exports.MessageDirection.SEND || !isMentioned && messageType !== MessageTypes.RECALL) {
19436
19133
  return;
19437
19134
  }
19438
19135
  const key = this.getStoreKey({
@@ -19447,9 +19144,9 @@
19447
19144
  localMentionedUIdList.push(messageUId.toString());
19448
19145
  }
19449
19146
  }
19450
- if (messageType === MessageObjectIds.RECALL && conversationType === exports.ConversationType.GROUP) {
19147
+ if (messageType === MessageTypes.RECALL && conversationType === exports.ConversationType.GROUP) {
19451
19148
  const recallContent = content;
19452
- const index = localMentionedUIdList.indexOf(recallContent.messageUId.toString());
19149
+ const index = localMentionedUIdList.indexOf(recallContent.msgId.toString());
19453
19150
  if (index >= 0) {
19454
19151
  localMentionedUIdList.splice(index, 1);
19455
19152
  }
@@ -19571,7 +19268,7 @@
19571
19268
  data
19572
19269
  } = await getDialogChangedStatus(offset);
19573
19270
  if (code === exports.ErrorCode.SUCCESS) {
19574
- if (data.setTime.toNumber() > 0) {
19271
+ if (Long.isLong(data.setTime) && data.setTime.toNumber() > 0) {
19575
19272
  SecureStorageService.set(this.storageKey, data.setTime.toNumber());
19576
19273
  }
19577
19274
  if (data.briefDialog) {
@@ -20065,7 +19762,6 @@
20065
19762
  };
20066
19763
  });
20067
19764
  ConversationManager$1.get().loadConvsationsIfNotExist(cons);
20068
- debugger;
20069
19765
  ServerMessageParser.parse(msg, (done, outputMsgs) => {
20070
19766
  const messages = [];
20071
19767
  const conversations = [];
@@ -20075,7 +19771,7 @@
20075
19771
  l.forEach(m => {
20076
19772
  if (m.messageDirection === exports.MessageDirection.SEND && m.messageId && SentMessageStore.has(m.messageId)) {
20077
19773
  SentMessageStore.remove(m.messageId);
20078
- } else if (m.messageType === MessageObjectIds.RECALL && RecallMessageStore.has(m.content.messageUId)) {
19774
+ } else if (m.messageType === MessageTypes.RECALL && RecallMessageStore.has(m.content.messageUId)) {
20079
19775
  RecallMessageStore.remove(m.content.messageUId);
20080
19776
  } else {
20081
19777
  m.isOffLineMessage = isOffLineMessage;
@@ -20118,7 +19814,7 @@
20118
19814
  }
20119
19815
  }
20120
19816
 
20121
- const DEFAULT_SOCKET_URI = 'wss://test.mp.net';
19817
+ const DEFAULT_SOCKET_URI = 'wss://imweb.mp.net:6443';
20122
19818
  class LibLoader {
20123
19819
  options;
20124
19820
  connectionStatus = exports.ConnectionStatus.DISCONNECTED;
@@ -20144,7 +19840,8 @@
20144
19840
  onSuspend: undefined,
20145
19841
  pullFinished: undefined,
20146
19842
  batchMessage: undefined,
20147
- conversationState: undefined
19843
+ conversationState: undefined,
19844
+ onPush: undefined
20148
19845
  };
20149
19846
  webSocketServer.setServerInfo(this.getWebSocketUrl());
20150
19847
  webSocketServer.setCallback({
@@ -20163,14 +19860,7 @@
20163
19860
  }
20164
19861
  return DEFAULT_SOCKET_URI;
20165
19862
  }
20166
- registerMessage() {
20167
- registerMessageSerializer(TextMessage);
20168
- registerMessageSerializer(ImageMessage);
20169
- registerMessageSerializer(GIFMessage);
20170
- registerMessageSerializer(HQVoiceMessage);
20171
- registerMessageSerializer(RecallCommandMessage);
20172
- registerMessageSerializer(FileMessage);
20173
- }
19863
+ registerMessage() {}
20174
19864
  async connect() {
20175
19865
  if (this.connectionStatus === exports.ConnectionStatus.CONNECTED) {
20176
19866
  return {
@@ -26850,6 +26540,56 @@
26850
26540
  var protobufjsExports = requireProtobufjs();
26851
26541
  var protobuf = /*@__PURE__*/getDefaultExportFromCjs(protobufjsExports);
26852
26542
 
26543
+ class BaseMessage {
26544
+ messageType;
26545
+ content;
26546
+ isPersited;
26547
+ isCounted;
26548
+ isStatusMessage;
26549
+ constructor(messageType, content, isPersited = true, isCounted = true, isStatusMessage = false) {
26550
+ this.messageType = messageType;
26551
+ this.content = content;
26552
+ if (isStatusMessage) {
26553
+ this.isPersited = false;
26554
+ this.isCounted = false;
26555
+ } else {
26556
+ this.isPersited = isPersited;
26557
+ this.isCounted = isCounted;
26558
+ }
26559
+ this.isStatusMessage = isStatusMessage;
26560
+ }
26561
+ get objectId() {
26562
+ return this.constructor.getObjectId();
26563
+ }
26564
+ static getObjectId() {
26565
+ throw new Error('Method not implemented.');
26566
+ }
26567
+ static decode(aDecoder) {
26568
+ throw new Error('Method not implemented.');
26569
+ }
26570
+ encode() {
26571
+ throw new Error('Method not implemented.');
26572
+ }
26573
+ }
26574
+ const registerMessageType$1 = (messageType, isPersited, isCounted, isStatusMessage) => {
26575
+ const defined = function (content) {
26576
+ return new BaseMessage(messageType, content, isPersited, isCounted, isStatusMessage);
26577
+ };
26578
+ return defined;
26579
+ };
26580
+
26581
+ const TextMessage = registerMessageType$1(MessageTypes.TEXT, true, true, false);
26582
+
26583
+ const ImageMessage = registerMessageType$1(MessageTypes.IMAGE, true, true, false);
26584
+
26585
+ const GIFMessage = registerMessageType$1(MessageTypes.GIF, true, true, false);
26586
+
26587
+ const VoiceMessage = registerMessageType$1(MessageTypes.AUDIO, true, true, false);
26588
+
26589
+ const FileMessage = registerMessageType$1(MessageTypes.FILE, true, true, false);
26590
+
26591
+ const RecallCommandMessage = registerMessageType$1(MessageTypes.RECALL, true, false, false);
26592
+
26853
26593
  const transSentAttrs2IReceivedMessage = (message, options, sentStatus = exports.SentStatus.SENDING) => ({
26854
26594
  conversationType: options.conversation.conversationType,
26855
26595
  targetId: options.conversation.targetId,
@@ -26881,411 +26621,10 @@
26881
26621
  return 230000000000000 + UniqueLocalId;
26882
26622
  }
26883
26623
 
26884
- const getBlobUrl = blob => {
26885
- const URL = window.URL || window.webkitURL;
26886
- return URL ? URL.createObjectURL(blob) : '';
26887
- };
26888
- const getBlobExtension = blob => {
26889
- const name = blob.name;
26890
- if (notEmptyString(name)) {
26891
- return name.substring(name.lastIndexOf('.') + 1);
26892
- }
26893
- return blob.type.indexOf('/') > 0 ? blob.type.substring(blob.type.lastIndexOf('/') + 1) : '';
26894
- };
26895
- const blob2ArrayBuffer = blob => {
26896
- if (isPromise(blob.arrayBuffer)) {
26897
- return blob.arrayBuffer();
26898
- }
26899
- return new Promise((resolve, reject) => {
26900
- const reader = new FileReader();
26901
- reader.addEventListener('load', event => {
26902
- if (event.target) {
26903
- resolve(event.target.result);
26904
- } else {
26905
- reject('null');
26906
- }
26907
- });
26908
- reader.addEventListener('error', error => reject(error));
26909
- reader.readAsArrayBuffer(blob);
26910
- });
26911
- };
26912
- const revokeBlobUrl = url => {
26913
- const URL = window.URL || window.webkitURL;
26914
- URL.revokeObjectURL(url);
26915
- };
26916
- const dataURL2Blob = url => {
26917
- const type = url.match(/data:([^;]+)/)[1];
26918
- const base64 = url.replace(/^[^,]+,/, '');
26919
- const bstr = window.atob(base64);
26920
- let n = bstr.length;
26921
- const u8arr = new Uint8Array(bstr.length);
26922
- while (n--) {
26923
- u8arr[n] = bstr.charCodeAt(n);
26924
- }
26925
- return new Blob([u8arr], {
26926
- type
26927
- });
26928
- };
26929
-
26930
- const COMPRESS_LENGTH_MAX = 1680;
26931
- const COMPRESS_LENGTH_MIN = 160;
26932
- const getImageObj = link => {
26933
- return new Promise((resolve, reject) => {
26934
- const handle = image => {
26935
- if (image.width !== 0 || image.height !== 0) {
26936
- resolve(image);
26937
- } else {
26938
- reject();
26939
- }
26940
- };
26941
- const image = new Image();
26942
- image.addEventListener('load', event => handle(event.target));
26943
- image.addEventListener('error', reject);
26944
- image.src = link;
26945
- if (image.complete) {
26946
- handle(image);
26947
- return;
26948
- }
26949
- const intervalId = setInterval(() => {
26950
- if (image.complete) {
26951
- handle(image);
26952
- clearInterval(intervalId);
26953
- }
26954
- }, 40);
26955
- });
26956
- };
26957
- const compress = (image, quality = 1, mineType = 'image/jpeg') => {
26958
- quality = Math.min(1, quality);
26959
- const width = image.width;
26960
- const height = image.height;
26961
- let compressWidth = width;
26962
- let compressHeight = height;
26963
- if (quality < 1) {
26964
- const isheight = width < height;
26965
- const zoom = isheight ? height / COMPRESS_LENGTH_MAX : width / COMPRESS_LENGTH_MAX;
26966
- if (width > COMPRESS_LENGTH_MAX && height > COMPRESS_LENGTH_MAX) {
26967
- if (isheight) {
26968
- compressHeight = COMPRESS_LENGTH_MAX;
26969
- compressWidth = compressWidth / zoom;
26970
- } else {
26971
- compressWidth = COMPRESS_LENGTH_MAX;
26972
- compressHeight = compressHeight / zoom;
26973
- }
26974
- } else if (width > COMPRESS_LENGTH_MAX && height > COMPRESS_LENGTH_MIN) {
26975
- compressWidth = COMPRESS_LENGTH_MAX;
26976
- compressHeight = compressHeight / zoom;
26977
- if (compressHeight < COMPRESS_LENGTH_MIN) {
26978
- compressHeight = COMPRESS_LENGTH_MIN;
26979
- compressWidth = width / (height / COMPRESS_LENGTH_MIN);
26980
- }
26981
- } else if (height > COMPRESS_LENGTH_MAX && width > COMPRESS_LENGTH_MIN) {
26982
- compressHeight = COMPRESS_LENGTH_MAX;
26983
- compressWidth = compressWidth / zoom;
26984
- if (compressWidth < COMPRESS_LENGTH_MIN) {
26985
- compressWidth = COMPRESS_LENGTH_MIN;
26986
- compressHeight = height / (width / COMPRESS_LENGTH_MIN);
26987
- }
26988
- }
26989
- }
26990
- compressWidth = Math.floor(compressWidth);
26991
- compressHeight = Math.floor(compressHeight);
26992
- const canvas = document.createElement('canvas');
26993
- canvas.width = compressWidth;
26994
- canvas.height = compressHeight;
26995
- const ctx = canvas.getContext('2d');
26996
- ctx.fillStyle = '#FFF';
26997
- ctx.fillRect(0, 0, compressWidth, compressHeight);
26998
- ctx.drawImage(image, 0, 0, width, height, 0, 0, compressWidth, compressHeight);
26999
- if (!mineType || mineType == 'image/png') {
27000
- mineType = 'image/jpeg';
27001
- }
27002
- return {
27003
- imageFile: dataURL2Blob(canvas.toDataURL(mineType, Math.min(0.92, quality))),
27004
- compressWidth,
27005
- compressHeight
27006
- };
27007
- };
27008
- const getThumbnail = (img, thumbnailConfig) => {
27009
- const canvas = document.createElement('canvas');
27010
- const context = canvas.getContext('2d');
27011
- const pos = calcPosition(img.width, img.height, thumbnailConfig);
27012
- canvas.width = pos.w > thumbnailConfig.maxWidth ? thumbnailConfig.maxWidth : pos.w;
27013
- canvas.height = pos.h > thumbnailConfig.maxHeight ? thumbnailConfig.maxHeight : pos.h;
27014
- context?.drawImage(img, pos.x, pos.y, pos.w, pos.h);
27015
- try {
27016
- let base64 = canvas.toDataURL('image/jpeg', thumbnailConfig.quality);
27017
- const reg = new RegExp('^data:image/[^;]+;base64,');
27018
- base64 = base64.replace(reg, '');
27019
- return base64;
27020
- } catch (e) {
27021
- throw new Error(e);
27022
- }
27023
- };
27024
- function calcPosition(width, height, thumbnailConfig) {
27025
- const isheight = width < height;
27026
- const scale = isheight ? height / width : width / height;
27027
- let zoom;
27028
- let x = 0;
27029
- let y = 0;
27030
- let w;
27031
- let h;
27032
- const gtScale = function () {
27033
- if (isheight) {
27034
- zoom = width / 100;
27035
- w = 100;
27036
- h = height / zoom;
27037
- y = (h - thumbnailConfig.maxHeight) / 2;
27038
- } else {
27039
- zoom = height / 100;
27040
- h = 100;
27041
- w = width / zoom;
27042
- x = (w - thumbnailConfig.maxWidth) / 2;
27043
- }
27044
- return {
27045
- w: w,
27046
- h: h,
27047
- x: -x,
27048
- y: -y
27049
- };
27050
- };
27051
- const ltScale = function () {
27052
- if (isheight) {
27053
- zoom = height / thumbnailConfig.maxHeight;
27054
- h = thumbnailConfig.maxHeight;
27055
- w = width / zoom;
27056
- } else {
27057
- zoom = width / thumbnailConfig.maxWidth;
27058
- w = thumbnailConfig.maxWidth;
27059
- h = height / zoom;
27060
- }
27061
- return {
27062
- w: w,
27063
- h: h,
27064
- x: -x,
27065
- y: -y
27066
- };
27067
- };
27068
- return scale > thumbnailConfig.scale ? gtScale() : ltScale();
27069
- }
27070
-
27071
- class Img {
27072
- async create(file) {
27073
- try {
27074
- const blobUrl = getBlobUrl(file);
27075
- const image = await getImageObj(blobUrl);
27076
- revokeBlobUrl(blobUrl);
27077
- const {
27078
- imageFile: sentImageFile,
27079
- compressWidth,
27080
- compressHeight
27081
- } = compress(image, 0.85, file.type);
27082
- const config = {
27083
- maxHeight: 160,
27084
- maxWidth: 160,
27085
- quality: 0.6,
27086
- scale: 2.4
27087
- };
27088
- const thumbnail = getThumbnail(image, config);
27089
- return {
27090
- success: true,
27091
- message: new ImageMessage({
27092
- content: thumbnail,
27093
- imageUri: getBlobUrl(sentImageFile),
27094
- width: compressWidth,
27095
- height: compressHeight
27096
- }),
27097
- file: sentImageFile
27098
- };
27099
- } catch (error) {
27100
- return {
27101
- success: false
27102
- };
27103
- }
27104
- }
27105
- updateMessageRemoteUrlProperty(msg, remoteUrl) {
27106
- msg.content.imageUri = remoteUrl;
27107
- }
27108
- }
27109
- class GIF {
27110
- async create(file) {
27111
- if (file.size > 2 * 1024 * 1024) {
27112
- return {
27113
- success: false
27114
- };
27115
- }
27116
- try {
27117
- const blobUrl = getBlobUrl(file);
27118
- const image = await getImageObj(blobUrl);
27119
- return {
27120
- success: true,
27121
- message: new GIFMessage({
27122
- gifDataSize: file.size,
27123
- remoteUrl: blobUrl,
27124
- width: image.width,
27125
- height: image.height
27126
- }),
27127
- file: file
27128
- };
27129
- } catch {
27130
- return {
27131
- success: false
27132
- };
27133
- }
27134
- }
27135
- updateMessageRemoteUrlProperty(message, remoteUrl) {
27136
- message.content.remoteUrl = remoteUrl;
27137
- }
27138
- }
27139
- let audioCtx;
27140
- class Audio {
27141
- create(file) {
27142
- return blob2ArrayBuffer(file).then(this.getAudioInfo).then(info => {
27143
- return {
27144
- success: true,
27145
- message: new HQVoiceMessage({
27146
- remoteUrl: '',
27147
- duration: info.duration,
27148
- type: getBlobExtension(file)
27149
- }),
27150
- file
27151
- };
27152
- }).catch(() => {
27153
- return {
27154
- success: false
27155
- };
27156
- });
27157
- }
27158
- updateMessageRemoteUrlProperty(message, remoteUrl) {
27159
- message.content.remoteUrl = remoteUrl;
27160
- }
27161
- getAudioInfo(buffer) {
27162
- const ctx = audioCtx || new AudioContext();
27163
- audioCtx = ctx;
27164
- return new Promise((resolve, reject) => {
27165
- ctx.decodeAudioData(buffer, function (audioBuffer) {
27166
- resolve({
27167
- duration: audioBuffer.duration,
27168
- length: audioBuffer.length
27169
- });
27170
- }, reject);
27171
- });
27172
- }
27173
- }
27174
- class File {
27175
- async create(file) {
27176
- if (file.size > 100 * 1024 * 1024) {
27177
- return {
27178
- success: false
27179
- };
27180
- }
27181
- return {
27182
- success: true,
27183
- message: new FileMessage({
27184
- fileUrl: '',
27185
- name: file.name,
27186
- type: getBlobExtension(file),
27187
- size: file.size
27188
- }),
27189
- file
27190
- };
27191
- }
27192
- updateMessageRemoteUrlProperty(message, remoteUrl) {
27193
- message.content.fileUrl = remoteUrl;
27194
- }
27195
- }
27196
- var FileType;
27197
- (function (FileType) {
27198
- FileType[FileType["IMAGE"] = 1] = "IMAGE";
27199
- FileType[FileType["GIF"] = 2] = "GIF";
27200
- FileType[FileType["AUDIO"] = 3] = "AUDIO";
27201
- FileType[FileType["VIDEO"] = 4] = "VIDEO";
27202
- FileType[FileType["FILE"] = 5] = "FILE";
27203
- FileType[FileType["SIGHT"] = 6] = "SIGHT";
27204
- })(FileType || (FileType = {}));
27205
- const getMediaMessageCreator = fileType => {
27206
- let creator;
27207
- switch (fileType) {
27208
- case FileType.IMAGE:
27209
- creator = new Img();
27210
- break;
27211
- case FileType.AUDIO:
27212
- creator = new Audio();
27213
- break;
27214
- case FileType.GIF:
27215
- creator = new GIF();
27216
- break;
27217
- case FileType.FILE:
27218
- creator = new File();
27219
- break;
27220
- }
27221
- return creator;
27222
- };
27223
-
27224
- class Upload {
27225
- options;
27226
- xhr;
27227
- constructor(options) {
27228
- this.options = options;
27229
- }
27230
- upload(file, callback) {
27231
- const xhr = new XMLHttpRequest();
27232
- xhr.timeout = (30 + file.size / 1024 / 512) * 1000;
27233
- xhr.upload.onprogress = event => {
27234
- callback.onProgress?.(event.loaded, event.total);
27235
- };
27236
- xhr.onreadystatechange = () => {
27237
- if (xhr.readyState === 4) {
27238
- const responseText = xhr.responseText || '{}';
27239
- const responseData = JSON.parse(responseText);
27240
- if (xhr.status === 200 && responseData.code === 200) {
27241
- let result = {
27242
- url: responseData.url
27243
- };
27244
- if (this.options.transformer) {
27245
- result = this.options.transformer(result);
27246
- }
27247
- callback.onCompleted?.(result);
27248
- } else {
27249
- callback.onError?.('upload fail');
27250
- }
27251
- }
27252
- };
27253
- xhr.open('POST', this.options.uploadUrl, true);
27254
- xhr.setRequestHeader('device', '7');
27255
- xhr.setRequestHeader('cert', this.options.cert ?? '');
27256
- const type = getBlobExtension(file);
27257
- const fileName = genUId() + (type.length ? `.${type}` : '');
27258
- const formData = new FormData();
27259
- formData.append('file', file);
27260
- formData.append('name', 'file');
27261
- formData.append('fileName', fileName);
27262
- formData.append('token', this.options.token);
27263
- xhr.send(formData);
27264
- this.xhr = xhr;
27265
- }
27266
- cancel() {
27267
- this.xhr?.abort();
27268
- }
27269
- }
27270
- function genUId() {
27271
- let date = new Date().getTime();
27272
- const uuid = 'xxxxxx4xxxyxxxxxxx'.replace(/[xy]/g, function (c) {
27273
- const r = (date + Math.random() * 16) % 16 | 0;
27274
- date = Math.floor(date / 16);
27275
- return (c === 'x' ? r : r & 0x3 | 0x8).toString(16);
27276
- });
27277
- return uuid;
27278
- }
27279
-
27280
26624
  const MAX_MESSAGE_CONTENT_BYTES = 80 * 1024;
27281
- const MEDIA_MESSAGES = [MessageObjectIds.IMAGE, MessageObjectIds.AUDIO, MessageObjectIds.GIF, MessageObjectIds.FILE];
27282
26625
  async function sendMessage$1(conversation, message, options) {
27283
26626
  return internal_sendMessage(conversation, message, options);
27284
26627
  }
27285
- const sendImageMessage$1 = createSendFunction.bind(null, FileType.IMAGE);
27286
- const sendGIFMessage$1 = createSendFunction.bind(null, FileType.GIF);
27287
- const sendHQVoiceMessage$1 = createSendFunction.bind(null, FileType.AUDIO);
27288
- const sendFileMessage$1 = createSendFunction.bind(null, FileType.FILE);
27289
26628
  const sendRecallMessage = async (conversation, options) => {
27290
26629
  const dialogId = getFullDialogId(conversation);
27291
26630
  RecallMessageStore.addMessage(options.messageUId);
@@ -27296,9 +26635,7 @@
27296
26635
  };
27297
26636
  }
27298
26637
  const recallCommandMessage = new RecallCommandMessage({
27299
- sentTime: options.sentTime,
27300
- messageUId: options.messageUId,
27301
- ...conversation
26638
+ msgId: options.messageUId
27302
26639
  });
27303
26640
  const sentAttris = {
27304
26641
  conversation,
@@ -27313,58 +26650,6 @@
27313
26650
  data: receivedMessage
27314
26651
  };
27315
26652
  };
27316
- async function createSendFunction(fileType, conversation, msgBody, hooks, sendOptions) {
27317
- const mediaMessageCreator = getMediaMessageCreator(fileType);
27318
- if (!mediaMessageCreator) return {
27319
- code: exports.ErrorCode.NOT_SUPPORT
27320
- };
27321
- const {
27322
- success,
27323
- message: message1,
27324
- file
27325
- } = await mediaMessageCreator.create(msgBody.file);
27326
- if (!success || !message1 || !file) {
27327
- return {
27328
- code: exports.ErrorCode.MEDIA_EXCEPTION
27329
- };
27330
- }
27331
- message1.content.user = msgBody.user;
27332
- message1.content.extra = msgBody.extra;
27333
- return internal_sendMessage(conversation, message1, sendOptions, {
27334
- file,
27335
- task: (message2, toBeUploadedFile) => {
27336
- return new Promise(resolve => {
27337
- const uploader = new Upload({
27338
- token: imConfig.imInitToken,
27339
- uploadUrl: imConfig.fileUploadUrl,
27340
- cert: imConfig.cert,
27341
- transformer: result => ({
27342
- ...result,
27343
- url: imConfig.getFileAbsoluteUri(result.url)
27344
- })
27345
- });
27346
- uploader.upload(toBeUploadedFile, {
27347
- onProgress: (loaded, total) => hooks?.onProgress?.(Math.floor(loaded / total * 100)),
27348
- onError: () => {
27349
- resolve({
27350
- finished: false,
27351
- message: message2
27352
- });
27353
- },
27354
- onCompleted: result => {
27355
- mediaMessageCreator.updateMessageRemoteUrlProperty(message2, result.url);
27356
- resolve({
27357
- finished: true,
27358
- message: hooks?.onComplete?.({
27359
- url: result.url
27360
- }) ?? message2
27361
- });
27362
- }
27363
- });
27364
- });
27365
- }
27366
- });
27367
- }
27368
26653
  async function internal_sendMessage(conversation, message, options, uploadOptions) {
27369
26654
  const checkResult = beforeSend(conversation, message, options);
27370
26655
  if (checkResult.code !== exports.ErrorCode.SUCCESS || !checkResult.message || !checkResult.sentArgs) {
@@ -27436,7 +26721,7 @@
27436
26721
  SentMessageStore.addMessage(sentArgs.messageId);
27437
26722
  const baseParams = {
27438
26723
  localId: sentArgs.messageId,
27439
- mediaFlag: MEDIA_MESSAGES.includes(message.objectId),
26724
+ mediaFlag: false,
27440
26725
  mediaConstructor: message.objectId,
27441
26726
  mediaAttribute: '',
27442
26727
  msgPreContent: '',
@@ -27592,10 +26877,6 @@
27592
26877
  }
27593
26878
  getServerTime = getServerTime$1;
27594
26879
  sendMessage = sendMessage$1;
27595
- sendImageMessage = sendImageMessage$1;
27596
- sendGIFMessage = sendGIFMessage$1;
27597
- sendHQVoiceMessage = sendHQVoiceMessage$1;
27598
- sendFileMessage = sendFileMessage$1;
27599
26880
  recallMsg = sendRecallMessage;
27600
26881
  async getRemoteHistoryMessages(conversation, options) {
27601
26882
  const dialogId = getFullDialogId(conversation);
@@ -28893,6 +28174,12 @@
28893
28174
  const getTopConversationList = () => {
28894
28175
  return imClient.getTopConversationList();
28895
28176
  };
28177
+ const registerMessageType = (messageType, isPersited, isCounted, isStatusMessage) => {
28178
+ const defined = function (content) {
28179
+ return new BaseMessage(messageType, content, isPersited, isCounted, isStatusMessage);
28180
+ };
28181
+ return defined;
28182
+ };
28896
28183
  const sendMessage = async (conversation, message, options) => {
28897
28184
  if (message instanceof BaseMessage === false) {
28898
28185
  logger.warn('send message fail -> message parameter is not an instance of BaseMessage');
@@ -28910,44 +28197,6 @@
28910
28197
  const message = new TextMessage(messageBody);
28911
28198
  return sendMessage(conversation, message, options);
28912
28199
  };
28913
- const sendImageMessage = async (conversation, msgBody, hooks, sendOptions) => {
28914
- assert('conversation', conversation, AssertRules.CONVERSATION, true);
28915
- assert('msgBody.file', msgBody.file, file => file instanceof Blob && file.type.startsWith('image/'), true);
28916
- const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
28917
- logger.debug('send message ->' + paramsStr);
28918
- _logSendBefore(conversation);
28919
- const response = await imClient.sendImageMessage(conversation, msgBody, hooks, sendOptions);
28920
- _logSendError(conversation, response.code);
28921
- return response;
28922
- };
28923
- const sendGIFMessage = async (conversation, msgBody, hooks, sendOptions) => {
28924
- assert('conversation', conversation, AssertRules.CONVERSATION, true);
28925
- assert('msgBody.file', msgBody.file, file => file instanceof Blob && file.type.endsWith('image/gif'), true);
28926
- const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
28927
- logger.debug('send message ->' + paramsStr);
28928
- _logSendBefore(conversation);
28929
- const response = await imClient.sendGIFMessage(conversation, msgBody, hooks, sendOptions);
28930
- _logSendError(conversation, response.code);
28931
- return response;
28932
- };
28933
- const sendHQVoiceMessage = async (conversation, msgBody, hooks, sendOptions) => {
28934
- assert('conversation', conversation, AssertRules.CONVERSATION, true);
28935
- assert('msgBody.file', msgBody.file, file => file instanceof Blob, true);
28936
- _logSendBefore(conversation);
28937
- const response = await imClient.sendHQVoiceMessage(conversation, msgBody, hooks, sendOptions);
28938
- _logSendError(conversation, response.code);
28939
- return response;
28940
- };
28941
- const sendFileMessage = async (conversation, msgBody, hooks, sendOptions) => {
28942
- assert('conversation', conversation, AssertRules.CONVERSATION, true);
28943
- assert('msgBody.file', msgBody.file, file => file instanceof Blob, true);
28944
- const paramsStr = 'conversationType:' + conversation.conversationType + ',targetId:' + conversation.targetId;
28945
- logger.debug('send message ->' + paramsStr);
28946
- _logSendBefore(conversation);
28947
- const response = await imClient.sendFileMessage(conversation, msgBody, hooks, sendOptions);
28948
- _logSendError(conversation, response.code);
28949
- return response;
28950
- };
28951
28200
  const recallMessage = async (conversation, options) => {
28952
28201
  assert('options.messageUId', options.messageUId, AssertRules.STRING, true);
28953
28202
  assert('options.sentTime', options.sentTime, AssertRules.NUMBER, true);
@@ -29050,7 +28299,7 @@
29050
28299
  exports.ErrorDesc = ErrorDesc;
29051
28300
  exports.FileMessage = FileMessage;
29052
28301
  exports.GIFMessage = GIFMessage;
29053
- exports.HQVoiceMessage = HQVoiceMessage;
28302
+ exports.HQVoiceMessage = VoiceMessage;
29054
28303
  exports.ImageMessage = ImageMessage;
29055
28304
  exports.TextMessage = TextMessage;
29056
28305
  exports.addEventListener = addEventListener;
@@ -29082,14 +28331,11 @@
29082
28331
  exports.mockLogin = mockLogin;
29083
28332
  exports.onceEventListener = onceEventListener;
29084
28333
  exports.recallMessage = recallMessage;
28334
+ exports.registerMessageType = registerMessageType;
29085
28335
  exports.removeConversation = removeConversation;
29086
28336
  exports.removeEventListener = removeEventListener;
29087
28337
  exports.request = request;
29088
28338
  exports.saveTextMessageDraft = saveTextMessageDraft;
29089
- exports.sendFileMessage = sendFileMessage;
29090
- exports.sendGIFMessage = sendGIFMessage;
29091
- exports.sendHQVoiceMessage = sendHQVoiceMessage;
29092
- exports.sendImageMessage = sendImageMessage;
29093
28339
  exports.sendMessage = sendMessage;
29094
28340
  exports.sendTextMessage = sendTextMessage;
29095
28341
  exports.setConversationNotificationStatus = setConversationNotificationStatus;