@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onyx-p/imlib-web",
3
- "version": "3.0.2",
3
+ "version": "3.0.4",
4
4
  "main": "index.umd.js",
5
5
  "module": "index.esm.js",
6
6
  "types": "types/index.d.ts",
@@ -26,4 +26,6 @@ export declare const NotiMessageTypes: {
26
26
  MESSAGE_READ: number;
27
27
  CHANGE_GROUP_TITLE: number;
28
28
  CHANGE_GROUP_AVATAR: number;
29
+ PRIVATE_MESSAGE_PINNED: number;
30
+ GROUP_MESSAGE_PINNED: number;
29
31
  };
@@ -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
  * 全局搜索本地消息,按发送时间倒序返回。
@@ -85,6 +85,11 @@ export default interface IReceivedMessage {
85
85
  * 是否为阅后即焚消息
86
86
  */
87
87
  burnAfterReadingFlag: boolean;
88
+ /**
89
+ * 消息是否已置顶
90
+ * @default false
91
+ */
92
+ pinned: boolean;
88
93
  /**
89
94
  * 阅后即焚消息的时长
90
95
  */
@@ -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
- export { GroupArrivalReceiptMessage, GroupReadReceiptMessage, PrivateArrivalReceiptMessage, PrivateReadReceiptMessage, PrivateOpenBurnAfterReadingMessage, PrivateCloseBurnAfterReadingMessage, GroupOpenBurnAfterReadingMessage, GroupCloseBurnAfterReadingMessage, MessageReadMessage, ChangeGroupTitleMessage, ChangeGroupAvatarMessage };
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;