@onyx-p/imlib-web 3.0.2 → 3.0.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/database/main.cjs +4 -0
- package/database/preload.cjs +4 -0
- package/database/worker.cjs +133 -4
- package/index.esm.js +4 -4
- package/index.umd.js +4 -4
- package/package.json +1 -1
- package/types/constants/messageTypes.d.ts +2 -0
- package/types/database/contracts.d.ts +2 -2
- package/types/database/main/messageStore.d.ts +7 -0
- package/types/database/renderer/messageRepository.d.ts +7 -0
- package/types/index.d.ts +20 -2
- package/types/model/iReceivedMessage.d.ts +5 -0
- package/types/model/messages/index.d.ts +5 -5
- package/types/model/messages/notificationMessages.d.ts +11 -1
- package/types/model/messages/textMessage.d.ts +34 -2
- package/types/types.d.ts +13 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const DATABASE_GLOBAL: "acimDatabase";
|
|
2
2
|
export declare const DATABASE_CHANNEL: "acim-database:request";
|
|
3
|
-
export declare const READ_METHOD_NAMES: readonly ["getMessages", "getLatestMessage", "getLatestMessages", "getDialogLoadedState", "getMessageById", "getMessageByUId", "getMessageIdRange", "searchMessages", "searchTextMessages", "getLegacyMigrationState"];
|
|
4
|
-
export declare const WRITE_METHOD_NAMES: readonly ["addMessages", "clearConversationCache", "clearAllCache", "removeMessagesByUId", "updateMessageReceiptStatus", "clearBurnAfterReadingExpiredMessages", "upsertMessage", "convertToRecallMessages", "importLegacyBatch", "completeLegacyMigration"];
|
|
3
|
+
export declare const READ_METHOD_NAMES: readonly ["getMessages", "getLatestMessage", "getLatestMessages", "getDialogLoadedState", "getMessageById", "getMessageByUId", "getMessageIdRange", "getMessagesByType", "getPinnedMessages", "searchMessages", "searchTextMessages", "getLegacyMigrationState"];
|
|
4
|
+
export declare const WRITE_METHOD_NAMES: readonly ["addMessages", "clearConversationCache", "clearAllCache", "removeMessagesByUId", "updateMessageReceiptStatus", "setMessagePinned", "unpinAllMessages", "clearBurnAfterReadingExpiredMessages", "upsertMessage", "convertToRecallMessages", "importLegacyBatch", "completeLegacyMigration"];
|
|
5
5
|
export type DatabaseReadMethod = (typeof READ_METHOD_NAMES)[number];
|
|
6
6
|
export type DatabaseWriteMethod = (typeof WRITE_METHOD_NAMES)[number];
|
|
7
7
|
export type DatabaseMethod = DatabaseReadMethod | DatabaseWriteMethod;
|
|
@@ -33,10 +33,15 @@ export declare class MessageStore {
|
|
|
33
33
|
messages: StoredMessage[];
|
|
34
34
|
hasMore: boolean;
|
|
35
35
|
};
|
|
36
|
+
getMessagesByType(dialogId: string, messageTypes: ReadonlyArray<number>, timestamp?: string, count?: number, isForward?: boolean): {
|
|
37
|
+
messages: StoredMessage[];
|
|
38
|
+
hasMore: boolean;
|
|
39
|
+
};
|
|
36
40
|
getLatestMessage(dialogId: string): StoredMessage | null;
|
|
37
41
|
getLatestMessages(dialogIds: ReadonlyArray<string>): Record<string, StoredMessage | null>;
|
|
38
42
|
getMessageById(messageId: number): StoredMessage | null;
|
|
39
43
|
getMessageByUId(messageUId: string): StoredMessage | null;
|
|
44
|
+
getPinnedMessages(dialogId: string, count?: number): StoredMessage[];
|
|
40
45
|
getMessageIdRange(): {
|
|
41
46
|
newest: number;
|
|
42
47
|
oldest: number;
|
|
@@ -46,6 +51,8 @@ export declare class MessageStore {
|
|
|
46
51
|
clearAllCache(): void;
|
|
47
52
|
removeMessagesByUId(messageUIds: ReadonlyArray<string>): void;
|
|
48
53
|
updateMessageReceiptStatus(messageUIds: ReadonlyArray<string>, receivedStatus: number): void;
|
|
54
|
+
setMessagePinned(dialogId: string, messageUId: string, pinned: boolean): void;
|
|
55
|
+
unpinAllMessages(dialogId: string): void;
|
|
49
56
|
clearBurnAfterReadingExpiredMessages(dialogId: string, now?: number): string[];
|
|
50
57
|
convertToRecallMessages(messageUIds: ReadonlyArray<string>, recallMessageType: number): void;
|
|
51
58
|
searchTextMessages(dialogId: string, keyword: string): StoredMessage[];
|
|
@@ -20,10 +20,15 @@ export declare class SqlMessageRepository {
|
|
|
20
20
|
messages: IReceivedMessage[];
|
|
21
21
|
hasMore: boolean;
|
|
22
22
|
}>;
|
|
23
|
+
getMessagesByType(conversation: IConversationOption, messageTypes: ReadonlyArray<number>, timestamp?: string, count?: number, isForward?: boolean): Promise<{
|
|
24
|
+
messages: IReceivedMessage[];
|
|
25
|
+
hasMore: boolean;
|
|
26
|
+
}>;
|
|
23
27
|
getLatestMessage(conversation: IConversationOption): Promise<IReceivedMessage | null>;
|
|
24
28
|
getLatestMessages(conversations: ReadonlyArray<IConversationOption>): Promise<Record<string, IReceivedMessage | null>>;
|
|
25
29
|
getMessageById(messageId: number): Promise<IReceivedMessage | null>;
|
|
26
30
|
getMessageByUId(messageUId: string): Promise<IReceivedMessage | null>;
|
|
31
|
+
getPinnedMessages(conversation: IConversationOption, count?: number): Promise<IReceivedMessage[]>;
|
|
27
32
|
getMessageIdRange(): Promise<{
|
|
28
33
|
newest: number;
|
|
29
34
|
oldest: number;
|
|
@@ -33,6 +38,8 @@ export declare class SqlMessageRepository {
|
|
|
33
38
|
clearAllCache(): Promise<void>;
|
|
34
39
|
removeMessagesByUId(messageUIds: string[]): Promise<void>;
|
|
35
40
|
updateMessageReceiptStatus(event: IReceiptReceivedEvent, type: 0 | 1): Promise<void>;
|
|
41
|
+
setMessagePinned(conversation: IConversationOption, messageUId: string, pinned: boolean): Promise<void>;
|
|
42
|
+
unpinAllMessages(conversation: IConversationOption): Promise<void>;
|
|
36
43
|
clearBurnAfterReadingExpiredMessages(conversation: IConversationOption): Promise<string[]>;
|
|
37
44
|
upsertMessage(message: IReceivedMessage): Promise<void>;
|
|
38
45
|
convertToRecallMessages(messageUIds: string[]): Promise<void>;
|
package/types/index.d.ts
CHANGED
|
@@ -8,8 +8,8 @@ import { CommonReqResult, PBCodec } from './net/connection/webSocketServer';
|
|
|
8
8
|
import { BaseResp } from './net/pbs/rpc.base';
|
|
9
9
|
import { IChatRecordMsgDetail } from './model/messages/otherMediaMessages';
|
|
10
10
|
import type { LegacyMigrationProgress, LegacyMigrationResult } from './database/renderer/legacyIndexedDbMigration';
|
|
11
|
-
export { TextMessage, ImageMessage, HQVoiceMessage, GIFMessage, FileMessage, VideoMessage, RecallCommandMessage, LocationMessage, ChatRecordMessage, ContactMessage, InvitationMessage, RedEnvelopeMessage, TransferMessage, LinkMessage, PrivateOpenBurnAfterReadingMessage, PrivateCloseBurnAfterReadingMessage, GroupOpenBurnAfterReadingMessage, GroupCloseBurnAfterReadingMessage } from './model/messages';
|
|
12
|
-
export type { ITextMessageBody, IImageMessageBody, IGIFMessageBody, IFileMessageBody, IHQVoiceMessageBody, IRecallCommandMessageBody, IVideoMessageBody, ILocationMessageBody, IChatRecordMessageBody, IContactMessageBody, IInvitationMessageBody, IRedEnvelopeMessageBody, ITransferMessageBody, IBurnAfterReadingMessageBody, ILinkMessageBody } from './model/messages';
|
|
11
|
+
export { TextMessage, ImageMessage, HQVoiceMessage, GIFMessage, FileMessage, VideoMessage, RecallCommandMessage, LocationMessage, ChatRecordMessage, ContactMessage, InvitationMessage, RedEnvelopeMessage, TransferMessage, LinkMessage, PrivateOpenBurnAfterReadingMessage, PrivateCloseBurnAfterReadingMessage, GroupOpenBurnAfterReadingMessage, GroupCloseBurnAfterReadingMessage, PrivateMessagePinnedNotification, GroupMessagePinnedNotification } from './model/messages';
|
|
12
|
+
export type { ITextMessageBody, ITextMessageEntity, ITextMessageLinkPreview, ITextMessageStyleAttribute, TextMessageEntityType, IImageMessageBody, IGIFMessageBody, IFileMessageBody, IHQVoiceMessageBody, IRecallCommandMessageBody, IVideoMessageBody, ILocationMessageBody, IChatRecordMessageBody, IContactMessageBody, IInvitationMessageBody, IRedEnvelopeMessageBody, ITransferMessageBody, IBurnAfterReadingMessageBody, IMessagePinnedNotificationBody, ILinkMessageBody } from './model/messages';
|
|
13
13
|
export { MessageTypes, NotiMessageTypes } from './constants/messageTypes';
|
|
14
14
|
export type { IBaseMessageBody, IReceivedMessage, IReceivedConversation };
|
|
15
15
|
export * from './types';
|
|
@@ -224,6 +224,18 @@ export declare const getRemoteHistoryMessages: (conversation: IConversationOptio
|
|
|
224
224
|
* 从本地数据库中获取消息
|
|
225
225
|
*/
|
|
226
226
|
export declare const getHistoryMessages: (conversation: IConversationOption, options: GetHistoryMessageOption) => IPromiseResult<GetHistoryMessageResult>;
|
|
227
|
+
/**
|
|
228
|
+
* 设置或取消置顶一条消息。状态将在服务端置顶通知到达后更新。
|
|
229
|
+
*/
|
|
230
|
+
export declare const setMessagePinned: (conversation: IConversationOption, messageUId: string, pinned: boolean) => IPromiseResult<void>;
|
|
231
|
+
/**
|
|
232
|
+
* 取消当前会话的全部置顶消息。
|
|
233
|
+
*/
|
|
234
|
+
export declare const unpinAllMessages: (conversation: IConversationOption) => IPromiseResult<void>;
|
|
235
|
+
/**
|
|
236
|
+
* 获取当前会话的本地置顶消息。
|
|
237
|
+
*/
|
|
238
|
+
export declare const getPinnedMessages: (conversation: IConversationOption, count?: number) => IPromiseResult<IReceivedMessage[]>;
|
|
227
239
|
/**
|
|
228
240
|
* 按消息 id 删除消息
|
|
229
241
|
*/
|
|
@@ -291,6 +303,12 @@ export declare const getMessageById: (messageId: number) => IPromiseResult<IRece
|
|
|
291
303
|
* 获取消息
|
|
292
304
|
*/
|
|
293
305
|
export declare const getMessageByUId: (messageUId: string) => IPromiseResult<IReceivedMessage | null | undefined>;
|
|
306
|
+
/**
|
|
307
|
+
* 按消息类型查询当前会话的本地缓存消息。
|
|
308
|
+
* 只读 IMLib 本地库,不向服务端补历史。
|
|
309
|
+
* timestamp / order 语义与 getHistoryMessages 一致;count 默认 50。
|
|
310
|
+
*/
|
|
311
|
+
export declare const getMessagesByType: (conversation: IConversationOption, messageTypes: number | ReadonlyArray<number>, options?: GetHistoryMessageOption) => IPromiseResult<GetHistoryMessageResult>;
|
|
294
312
|
export declare const searchTextMessages: (conversation: IConversationOption, keyword: string) => IPromiseResult<IReceivedMessage[]>;
|
|
295
313
|
/**
|
|
296
314
|
* 全局搜索本地消息,按发送时间倒序返回。
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import TextMessage, { ITextMessageBody } from './textMessage';
|
|
1
|
+
import TextMessage, { ITextMessageBody, ITextMessageEntity, ITextMessageLinkPreview, ITextMessageStyleAttribute, TextMessageEntityType } from './textMessage';
|
|
2
2
|
import ImageMessage, { IImageMessageBody } from './imageMessage';
|
|
3
3
|
import GIFMessage, { IGIFMessageBody } from './gifMessage';
|
|
4
4
|
import HQVoiceMessage, { IHQVoiceMessageBody } from './voiceMessage';
|
|
5
5
|
import FileMessage, { IFileMessageBody } from './fileMessage';
|
|
6
6
|
import VideoMessage, { IVideoMessageBody } from './videoMessage';
|
|
7
7
|
import { ILocationMessageBody, LocationMessage, IChatRecordMessageBody, ChatRecordMessage, IContactMessageBody, ContactMessage, IInvitationMessageBody, InvitationMessage, IRedEnvelopeMessageBody, RedEnvelopeMessage, ITransferMessageBody, TransferMessage, ILinkMessageBody, LinkMessage } from './otherMediaMessages';
|
|
8
|
-
import { IBurnAfterReadingMessageBody } from './notificationMessages';
|
|
9
|
-
import { PrivateOpenBurnAfterReadingMessage, PrivateCloseBurnAfterReadingMessage, GroupOpenBurnAfterReadingMessage, GroupCloseBurnAfterReadingMessage } from './notificationMessages';
|
|
8
|
+
import { IBurnAfterReadingMessageBody, IMessagePinnedNotificationBody } from './notificationMessages';
|
|
9
|
+
import { PrivateOpenBurnAfterReadingMessage, PrivateCloseBurnAfterReadingMessage, GroupOpenBurnAfterReadingMessage, GroupCloseBurnAfterReadingMessage, PrivateMessagePinnedNotification, GroupMessagePinnedNotification } from './notificationMessages';
|
|
10
10
|
import RecallCommandMessage, { IRecallCommandMessageBody } from './recallCommandMessage';
|
|
11
|
-
export { TextMessage, ImageMessage, GIFMessage, HQVoiceMessage, FileMessage, RecallCommandMessage, VideoMessage, LocationMessage, ChatRecordMessage, ContactMessage, InvitationMessage, RedEnvelopeMessage, TransferMessage, PrivateOpenBurnAfterReadingMessage, PrivateCloseBurnAfterReadingMessage, GroupOpenBurnAfterReadingMessage, GroupCloseBurnAfterReadingMessage, LinkMessage };
|
|
12
|
-
export type { ITextMessageBody, IImageMessageBody, IGIFMessageBody, IHQVoiceMessageBody, IFileMessageBody, IRecallCommandMessageBody, IVideoMessageBody, ILocationMessageBody, IChatRecordMessageBody, IContactMessageBody, IInvitationMessageBody, IRedEnvelopeMessageBody, ITransferMessageBody, IBurnAfterReadingMessageBody, ILinkMessageBody };
|
|
11
|
+
export { TextMessage, ImageMessage, GIFMessage, HQVoiceMessage, FileMessage, RecallCommandMessage, VideoMessage, LocationMessage, ChatRecordMessage, ContactMessage, InvitationMessage, RedEnvelopeMessage, TransferMessage, PrivateOpenBurnAfterReadingMessage, PrivateCloseBurnAfterReadingMessage, GroupOpenBurnAfterReadingMessage, GroupCloseBurnAfterReadingMessage, PrivateMessagePinnedNotification, GroupMessagePinnedNotification, LinkMessage };
|
|
12
|
+
export type { ITextMessageBody, ITextMessageEntity, ITextMessageLinkPreview, ITextMessageStyleAttribute, TextMessageEntityType, IImageMessageBody, IGIFMessageBody, IHQVoiceMessageBody, IFileMessageBody, IRecallCommandMessageBody, IVideoMessageBody, ILocationMessageBody, IChatRecordMessageBody, IContactMessageBody, IInvitationMessageBody, IRedEnvelopeMessageBody, ITransferMessageBody, IBurnAfterReadingMessageBody, IMessagePinnedNotificationBody, ILinkMessageBody };
|
|
@@ -21,6 +21,14 @@ export interface IChangeGroupAvatarMessageBody extends IBaseMessageBody {
|
|
|
21
21
|
smallAvatarUrl: string;
|
|
22
22
|
groupId: string;
|
|
23
23
|
}
|
|
24
|
+
export interface IMessagePinnedNotificationBody extends IBaseMessageBody {
|
|
25
|
+
operatorUserId?: string;
|
|
26
|
+
operatorNickeName?: string;
|
|
27
|
+
params?: string[];
|
|
28
|
+
templateId?: number;
|
|
29
|
+
msgId: string;
|
|
30
|
+
pinned: 0 | 1 | 2;
|
|
31
|
+
}
|
|
24
32
|
declare const GroupArrivalReceiptMessage: new (content: IReceiptMessageBody) => import("../baseMessage").BaseMessage<IReceiptMessageBody>;
|
|
25
33
|
declare const GroupReadReceiptMessage: new (content: IReceiptMessageBody) => import("../baseMessage").BaseMessage<IReceiptMessageBody>;
|
|
26
34
|
declare const PrivateArrivalReceiptMessage: new (content: IReceiptMessageBody) => import("../baseMessage").BaseMessage<IReceiptMessageBody>;
|
|
@@ -32,4 +40,6 @@ declare const GroupCloseBurnAfterReadingMessage: new (content: IBurnAfterReading
|
|
|
32
40
|
declare const MessageReadMessage: new (content: IMessageReadMessageBody) => import("../baseMessage").BaseMessage<IMessageReadMessageBody>;
|
|
33
41
|
declare const ChangeGroupTitleMessage: new (content: IChangeGroupTitleMessageBody) => import("../baseMessage").BaseMessage<IChangeGroupTitleMessageBody>;
|
|
34
42
|
declare const ChangeGroupAvatarMessage: new (content: IChangeGroupAvatarMessageBody) => import("../baseMessage").BaseMessage<IChangeGroupAvatarMessageBody>;
|
|
35
|
-
|
|
43
|
+
declare const PrivateMessagePinnedNotification: new (content: IMessagePinnedNotificationBody) => import("../baseMessage").BaseMessage<IMessagePinnedNotificationBody>;
|
|
44
|
+
declare const GroupMessagePinnedNotification: new (content: IMessagePinnedNotificationBody) => import("../baseMessage").BaseMessage<IMessagePinnedNotificationBody>;
|
|
45
|
+
export { GroupArrivalReceiptMessage, GroupReadReceiptMessage, PrivateArrivalReceiptMessage, PrivateReadReceiptMessage, PrivateOpenBurnAfterReadingMessage, PrivateCloseBurnAfterReadingMessage, GroupOpenBurnAfterReadingMessage, GroupCloseBurnAfterReadingMessage, MessageReadMessage, ChangeGroupTitleMessage, ChangeGroupAvatarMessage, PrivateMessagePinnedNotification, GroupMessagePinnedNotification };
|
|
@@ -1,12 +1,44 @@
|
|
|
1
|
-
import { IMentionedInfo } from '../baseMessage';
|
|
1
|
+
import { IExtraData, IMentionedInfo, IUserInfo } from '../baseMessage';
|
|
2
|
+
export type TextMessageEntityType = 'bold' | 'italic' | 'code' | 'pre' | 'strikethrough' | 'strike' | 'underline' | 'spoiler' | 'blockquote' | 'url' | 'text_url' | 'textUrl' | 'email' | 'mention' | 'mention_name' | 'mentionName' | 'hashtag' | 'bot_command' | 'botCommand' | 'phone_number' | 'phoneNumber' | 'custom_emoji' | 'customEmoji' | 'bank_card' | 'bankCard' | (string & {});
|
|
3
|
+
export interface ITextMessageEntity {
|
|
4
|
+
type: TextMessageEntityType;
|
|
5
|
+
offset: number;
|
|
6
|
+
length: number;
|
|
7
|
+
language?: string;
|
|
8
|
+
url?: string;
|
|
9
|
+
userId?: string | number;
|
|
10
|
+
}
|
|
11
|
+
export interface ITextMessageStyleAttribute {
|
|
12
|
+
type: number;
|
|
13
|
+
location: number;
|
|
14
|
+
length: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ITextMessageLinkPreview {
|
|
17
|
+
url: string;
|
|
18
|
+
domain?: string;
|
|
19
|
+
title?: string;
|
|
20
|
+
previewDescription?: string;
|
|
21
|
+
width?: number;
|
|
22
|
+
height?: number;
|
|
23
|
+
encryptKey?: string;
|
|
24
|
+
originalObjectKey?: string;
|
|
25
|
+
youtubeVideoId?: string;
|
|
26
|
+
oldOriginalObjectKey?: string;
|
|
27
|
+
}
|
|
2
28
|
/**
|
|
3
29
|
* 文本消息
|
|
4
30
|
*/
|
|
5
|
-
export interface ITextMessageBody extends IMentionedInfo {
|
|
31
|
+
export interface ITextMessageBody extends IExtraData, IMentionedInfo, IUserInfo {
|
|
6
32
|
/**
|
|
7
33
|
* 文本消息内容
|
|
8
34
|
*/
|
|
9
35
|
content: string;
|
|
36
|
+
/** 服务端下发或发送的富文本实体。 */
|
|
37
|
+
entities?: ITextMessageEntity[];
|
|
38
|
+
/** 兼容旧版客户端的文本样式字段。 */
|
|
39
|
+
attributes?: ITextMessageStyleAttribute[];
|
|
40
|
+
linkPreview?: ITextMessageLinkPreview;
|
|
41
|
+
linkPreviewFailed?: boolean;
|
|
10
42
|
}
|
|
11
43
|
declare const TextMessage: new (content: ITextMessageBody) => import("../baseMessage").BaseMessage<ITextMessageBody>;
|
|
12
44
|
export default TextMessage;
|
package/types/types.d.ts
CHANGED
|
@@ -41,7 +41,18 @@ export declare enum Events {
|
|
|
41
41
|
PUSH = "PUSH",
|
|
42
42
|
RECALL = "RECALL",
|
|
43
43
|
ARRIVAL_RECEIPT_RECEIVED = "ARRIVAL_RECEIPT_RECEIVED",
|
|
44
|
-
READ_RECEIPT_RECEIVED = "READ_RECEIPT_RECEIVED"
|
|
44
|
+
READ_RECEIPT_RECEIVED = "READ_RECEIPT_RECEIVED",
|
|
45
|
+
MESSAGE_PINNED_CHANGED = "MESSAGE_PINNED_CHANGED"
|
|
46
|
+
}
|
|
47
|
+
export declare enum MessagePinnedOperation {
|
|
48
|
+
PIN = 0,
|
|
49
|
+
UNPIN = 1,
|
|
50
|
+
UNPIN_ALL = 2
|
|
51
|
+
}
|
|
52
|
+
export interface IMessagePinnedChangedEvent {
|
|
53
|
+
conversation: IConversationOption;
|
|
54
|
+
messageUId?: string;
|
|
55
|
+
operation: MessagePinnedOperation;
|
|
45
56
|
}
|
|
46
57
|
/**
|
|
47
58
|
* 收到已读/已发送回执数据结构
|
|
@@ -76,6 +87,7 @@ export type EventListeners = {
|
|
|
76
87
|
[Events.RECALL]: (messageUId: string) => void;
|
|
77
88
|
[Events.ARRIVAL_RECEIPT_RECEIVED]: (event: IReceiptReceivedEvent) => void;
|
|
78
89
|
[Events.READ_RECEIPT_RECEIVED]: (event: IReceiptReceivedEvent) => void;
|
|
90
|
+
[Events.MESSAGE_PINNED_CHANGED]: (event: IMessagePinnedChangedEvent) => void;
|
|
79
91
|
};
|
|
80
92
|
export interface IBaseConversationInfo {
|
|
81
93
|
conversationType: ConversationType;
|