@antzsoft/chat-core 1.4.3 → 1.4.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/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as ResolvedCompressionConfig, L as LoginCredentials, A as AuthResponse, a as RegisterData, b as AuthTokens, U as User, C as CrossConversationSyncResponse, c as ConversationSyncResponse, d as AppConfig, S as SendMessagePayload, M as Message, e as CursorPaginatedResponse, f as MessageReactionsResponse, P as PaginatedResponse, g as MessageReceiptsResponse, h as ConversationListParams, i as Conversation, j as Participant, k as ConversationUnreadCount, l as UnreadSummary, m as UserPreferences, n as ResolvedConfig, o as PersistStorage, p as PresignedUrlRequest, q as PresignedUrlResponse, F as FileResponse, r as CompletedPart, s as FileType, t as AntzChatConfig, u as UploadableFile, B as BatchUploadResult } from './storage-D7GPq-Mm.cjs';
2
- export { v as Attachment, w as CompressedFile, x as CompressionAlgorithm, y as CompressionConfig, z as ConversationType, D as ConversationUpdatedEvent, E as FileSizeLimits, G as LastReaction, H as MENTION_ALL_ID, I as MessageAckEvent, J as MessageContent, K as MessageDeletedEvent, N as MessageDeletedForMeEvent, O as MessageDeliveredEvent, Q as MessageForwardReference, T as MessageMetadata, V as MessageReaction, W as MessageReceiptEntry, X as MessageReplyReference, Y as MessageStarUpdatedEvent, Z as MessageUpdatedEvent, _ as MessagesDeliveredEvent, $ as MultipartPartUrl, a0 as MultipartUploadInfo, a1 as NewMessageEvent, a2 as OptimisticAttachment, a3 as PlatformCompressFn, a4 as PlatformUploadFn, a5 as PlatformUploadPartFn, a6 as QuietHours, a7 as ReactionGroup, a8 as ReactionUpdatedEvent, a9 as ReactionUser, aa as ReadReceiptEvent, ab as ReplyAttachmentSnapshot, ac as ResolvedFileSizeLimits, ad as SendMessageAttachment, ae as SyncDeletedForMe, af as SyncDeliveredReceipt, ag as SyncParticipantChange, ah as SyncReactionEntry, ai as SyncReactions, aj as SyncReadReceipt, ak as SyncStarEntry, al as SystemMessageMetadata, am as TypingIndicatorEvent, an as UploadConfig, ao as UploadProgress, ap as UserStatusEvent, aq as resolveConfig, ar as storageApi, as as uploadBatch } from './storage-D7GPq-Mm.cjs';
1
+ import { R as ResolvedCompressionConfig, L as LoginCredentials, A as AuthResponse, a as RegisterData, b as AuthTokens, U as User, C as CrossConversationSyncResponse, c as ConversationSyncResponse, d as AppConfig, S as SendMessagePayload, M as Message, e as CursorPaginatedResponse, f as MessageReactionsResponse, P as PaginatedResponse, g as MessageReceiptsResponse, h as ConversationListParams, i as Conversation, j as Participant, k as ConversationUnreadCount, l as UnreadSummary, m as UserPreferences, n as ResolvedConfig, F as ForwardMessagePayload, o as ForwardAckPayload, p as PersistStorage, q as PresignedUrlRequest, r as PresignedUrlResponse, s as FileResponse, t as CompletedPart, u as FileType, v as AntzChatConfig, w as UploadableFile, B as BatchUploadResult } from './storage-DlxfLVqx.cjs';
2
+ export { x as Attachment, y as CompressedFile, z as CompressionAlgorithm, D as CompressionConfig, E as ConversationType, G as ConversationUpdatedEvent, H as FileSizeLimits, I as ForwardResultPayload, J as LastReaction, K as MENTION_ALL_ID, N as MessageAckEvent, O as MessageContent, Q as MessageDeletedEvent, T as MessageDeletedForMeEvent, V as MessageDeliveredEvent, W as MessageForwardReference, X as MessageMetadata, Y as MessageReaction, Z as MessageReceiptEntry, _ as MessageReplyReference, $ as MessageStarUpdatedEvent, a0 as MessageUpdatedEvent, a1 as MessagesDeliveredEvent, a2 as MultipartPartUrl, a3 as MultipartUploadInfo, a4 as NewMessageEvent, a5 as OptimisticAttachment, a6 as PlatformCompressFn, a7 as PlatformUploadFn, a8 as PlatformUploadPartFn, a9 as QuietHours, aa as ReactionGroup, ab as ReactionUpdatedEvent, ac as ReactionUser, ad as ReadReceiptEvent, ae as ReplyAttachmentSnapshot, af as ResolvedFileSizeLimits, ag as SendErrorContext, ah as SendMessageAttachment, ai as SyncDeletedForMe, aj as SyncDeliveredReceipt, ak as SyncParticipantChange, al as SyncReactionEntry, am as SyncReactions, an as SyncReadReceipt, ao as SyncStarEntry, ap as SystemMessageMetadata, aq as TypingIndicatorEvent, ar as UploadConfig, as as UploadProgress, at as UserStatusEvent, au as resolveConfig, av as storageApi, aw as uploadBatch } from './storage-DlxfLVqx.cjs';
3
3
  import { AxiosInstance } from 'axios';
4
4
  import { Socket } from 'socket.io-client';
5
5
  import * as zustand_middleware from 'zustand/middleware';
@@ -73,6 +73,15 @@ interface SendData {
73
73
  text?: string;
74
74
  attachments?: SendMessagePayload['attachments'];
75
75
  replyTo?: string;
76
+ /**
77
+ * Client-generated idempotency key. Generate one per send attempt and reuse the
78
+ * SAME value if you retry this exact send (e.g. after a client-side timeout) —
79
+ * never mint a new one for a retry. The server recognizes a matching
80
+ * (conversationId, senderId, tempId) and returns the already-created message
81
+ * instead of creating a duplicate. Unlike `messagesApi.forward()`, this is NOT
82
+ * auto-generated if omitted — omitting it (or generating a fresh one on every
83
+ * retry) means no dedup protection.
84
+ */
76
85
  tempId?: string;
77
86
  }
78
87
  /** Matches the server-enforced cap in messages/dto/create-message.dto.ts (MAX_FORWARD_TARGETS). */
@@ -93,6 +102,12 @@ interface ForwardResult {
93
102
  declare const messagesApi: {
94
103
  list(conversationId: string, params?: ListMessagesParams): Promise<CursorPaginatedResponse<Message>>;
95
104
  get(messageId: string): Promise<Message>;
105
+ /**
106
+ * Sends a message via REST. For real-time delivery use `socketEmit.sendMessage`
107
+ * instead — this is a lower-level entry point (used e.g. by the socket path's
108
+ * REST-mirror flows). Pass `payload.tempId` and reuse the SAME value on retry to
109
+ * make a retry-after-timeout safe — see `SendData.tempId`.
110
+ */
96
111
  send(conversationId: string, payload: SendData): Promise<Message>;
97
112
  update(messageId: string, text: string): Promise<Message>;
98
113
  delete(messageId: string): Promise<void>;
@@ -127,8 +142,21 @@ declare const messagesApi: {
127
142
  * (e.g. one image out of a multi-image message) — omit it to forward the whole
128
143
  * message, including all its attachments, unchanged. An ID not present on the
129
144
  * source message is ignored server-side.
145
+ *
146
+ * Idempotency: pass `tempId` — generate ONE value per forward action (e.g. via
147
+ * `generateUUID` from '@antzsoft/chat-core/internal') and reuse that SAME value if
148
+ * you retry this exact forward (e.g. after a client-side timeout). The server then
149
+ * recognizes the retry per target and returns the already-created message instead
150
+ * of creating a duplicate. Never mint a new tempId for a retry — only when the user
151
+ * initiates a genuinely new forward action. If omitted, a fresh one is generated
152
+ * per call, which means a retry without an explicit tempId gets NO dedup protection.
153
+ *
154
+ * Transport: uses the 'forward_message' socket event when a socket is connected
155
+ * (lower latency, same server-side MessagesService.forward() path, so broadcast/
156
+ * push notification behavior is identical either way) and transparently falls back
157
+ * to the REST endpoint when no socket is available.
130
158
  */
131
- forward(messageId: string, targetConversationIds: string[], attachmentIds?: string[]): Promise<ForwardResult[]>;
159
+ forward(messageId: string, targetConversationIds: string[], attachmentIds?: string[], tempId?: string): Promise<ForwardResult[]>;
132
160
  };
133
161
 
134
162
  declare function normalizeConversation(conv: any): Conversation;
@@ -297,6 +325,8 @@ type TokenStore = {
297
325
  setTokens: (tokens: AuthTokens) => void;
298
326
  clearTokens: () => void;
299
327
  };
328
+ declare function setAuthReadyPromise(promise: Promise<unknown> | null): void;
329
+ declare function isApiClientConfigured(): boolean;
300
330
  declare function initApiClient(config: ResolvedConfig, tokenStore: TokenStore): AxiosInstance;
301
331
  declare function setApiClientInstance(instance: AxiosInstance): void;
302
332
  declare function getApiClient(): AxiosInstance;
@@ -309,6 +339,10 @@ declare function getSocket(): Socket;
309
339
  declare function tryGetSocket(): Socket | null;
310
340
  declare function getSocketStatus(): SocketStatus;
311
341
  declare function onSocketStatus(listener: StatusListener): () => void;
342
+ /** Drop all tracked rooms. Call on a genuine identity change (user/tenant
343
+ * switch) so the reconnect re-flush can't re-join the previous user's rooms.
344
+ * NOT called from disconnectSocket() — a token refresh is not an intent change. */
345
+ declare function resetTrackedRooms(): void;
312
346
  declare function connectSocket(config: ResolvedConfig, getToken: () => string | null | undefined): Promise<Socket>;
313
347
  declare function disconnectSocket(): void;
314
348
  declare function reconnectSocket(token: string, userId?: string, tenantId?: string): void;
@@ -323,6 +357,7 @@ declare const socketEmit: {
323
357
  joinRoom(conversationId: string): void;
324
358
  leaveRoom(conversationId: string): void;
325
359
  sendMessage(payload: SendMessagePayload): Promise<unknown>;
360
+ forwardMessage(payload: ForwardMessagePayload): Promise<ForwardAckPayload>;
326
361
  updateMessage(messageId: string, text: string): Promise<unknown>;
327
362
  deleteMessage(messageId: string): Promise<unknown>;
328
363
  deleteMessageForMe(messageId: string): Promise<unknown>;
@@ -688,7 +723,7 @@ declare class AntzChatClient {
688
723
  unpin(messageId: string): Promise<Message>;
689
724
  getPinned(conversationId: string): Promise<Message[]>;
690
725
  getReceipts(messageId: string): Promise<MessageReceiptsResponse>;
691
- forward(messageId: string, targetConversationIds: string[], attachmentIds?: string[]): Promise<ForwardResult[]>;
726
+ forward(messageId: string, targetConversationIds: string[], attachmentIds?: string[], tempId?: string): Promise<ForwardResult[]>;
692
727
  };
693
728
  readonly conversations: {
694
729
  list(params?: ConversationListParams): Promise<PaginatedResponse<Conversation>>;
@@ -764,4 +799,4 @@ declare class AntzChatClient {
764
799
  uploadIcon(conversationId: string, file: UploadableFile): Promise<Conversation>;
765
800
  }
766
801
 
767
- export { AntzChatAuthError, AntzChatClient, AntzChatConfig, AntzChatError, AntzChatNetworkError, AntzChatPermissionError, AntzChatServerError, AntzChatValidationError, AppConfig, AuthResponse, AuthTokens, BatchUploadResult, CompletedPart, Conversation, ConversationListParams, ConversationSyncResponse, ConversationUnreadCount, type CreateDirectData, type CreateGroupData, CrossConversationSyncResponse, CursorPaginatedResponse, FileResponse, FileType, type ForwardResult, HIGHLY_FORWARDED_DEPTH_THRESHOLD, type LastReadEntry, type ListMessagesParams, LoginCredentials, MAX_FORWARD_TARGETS, type MentionPart, type MentionSegment, Message, MessageReactionsResponse, MessageReceiptsResponse, type MobileDeviceToken, PaginatedResponse, type ParsedMention, Participant, PersistStorage, PresignedUrlRequest, PresignedUrlResponse, RegisterData, type RegisterDeviceTokenPayload, ResolvedCompressionConfig, ResolvedConfig, type SearchParams, type SendData, SendMessagePayload, type SocketStatus, type StatusListener, type TokenStore, UnreadSummary, type UpdateConversationData, type UpdateProfilePayload, UploadableFile, User, UserPreferences, type WebPushDeviceToken, appConfigApi, authApi, buildMentionText, connectSocket, conversationsApi, createAuthStore, createRestTransitSession, decryptPayload, devicesApi, disconnectSocket, encryptPayload, extractMentionIds, fetchServerKeys, generateEphemeralKey, getApiClient, getAuthStore, getCompressionStrategy, getSessionId, getSessionKey, getSocket, getSocketStatus, initApiClient, initAuthStore, isMentionAll, isTransitEnvelope, messagesApi, normalizeAxiosError, normalizeConversation, onSocketStatus, parseMentions, performHandshake, reconnectSocket, refreshSocketAuth, renderMentionParts, resetAuthStore, resolveSystemMessageText, setApiClientInstance, setTransitSession, socketEmit, syncApi, tryGetSocket, useChatStore, usersApi };
802
+ export { AntzChatAuthError, AntzChatClient, AntzChatConfig, AntzChatError, AntzChatNetworkError, AntzChatPermissionError, AntzChatServerError, AntzChatValidationError, AppConfig, AuthResponse, AuthTokens, BatchUploadResult, CompletedPart, Conversation, ConversationListParams, ConversationSyncResponse, ConversationUnreadCount, type CreateDirectData, type CreateGroupData, CrossConversationSyncResponse, CursorPaginatedResponse, FileResponse, FileType, ForwardAckPayload, ForwardMessagePayload, type ForwardResult, HIGHLY_FORWARDED_DEPTH_THRESHOLD, type LastReadEntry, type ListMessagesParams, LoginCredentials, MAX_FORWARD_TARGETS, type MentionPart, type MentionSegment, Message, MessageReactionsResponse, MessageReceiptsResponse, type MobileDeviceToken, PaginatedResponse, type ParsedMention, Participant, PersistStorage, PresignedUrlRequest, PresignedUrlResponse, RegisterData, type RegisterDeviceTokenPayload, ResolvedCompressionConfig, ResolvedConfig, type SearchParams, type SendData, SendMessagePayload, type SocketStatus, type StatusListener, type TokenStore, UnreadSummary, type UpdateConversationData, type UpdateProfilePayload, UploadableFile, User, UserPreferences, type WebPushDeviceToken, appConfigApi, authApi, buildMentionText, connectSocket, conversationsApi, createAuthStore, createRestTransitSession, decryptPayload, devicesApi, disconnectSocket, encryptPayload, extractMentionIds, fetchServerKeys, generateEphemeralKey, getApiClient, getAuthStore, getCompressionStrategy, getSessionId, getSessionKey, getSocket, getSocketStatus, initApiClient, initAuthStore, isApiClientConfigured, isMentionAll, isTransitEnvelope, messagesApi, normalizeAxiosError, normalizeConversation, onSocketStatus, parseMentions, performHandshake, reconnectSocket, refreshSocketAuth, renderMentionParts, resetAuthStore, resetTrackedRooms, resolveSystemMessageText, setApiClientInstance, setAuthReadyPromise, setTransitSession, socketEmit, syncApi, tryGetSocket, useChatStore, usersApi };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as ResolvedCompressionConfig, L as LoginCredentials, A as AuthResponse, a as RegisterData, b as AuthTokens, U as User, C as CrossConversationSyncResponse, c as ConversationSyncResponse, d as AppConfig, S as SendMessagePayload, M as Message, e as CursorPaginatedResponse, f as MessageReactionsResponse, P as PaginatedResponse, g as MessageReceiptsResponse, h as ConversationListParams, i as Conversation, j as Participant, k as ConversationUnreadCount, l as UnreadSummary, m as UserPreferences, n as ResolvedConfig, o as PersistStorage, p as PresignedUrlRequest, q as PresignedUrlResponse, F as FileResponse, r as CompletedPart, s as FileType, t as AntzChatConfig, u as UploadableFile, B as BatchUploadResult } from './storage-D7GPq-Mm.js';
2
- export { v as Attachment, w as CompressedFile, x as CompressionAlgorithm, y as CompressionConfig, z as ConversationType, D as ConversationUpdatedEvent, E as FileSizeLimits, G as LastReaction, H as MENTION_ALL_ID, I as MessageAckEvent, J as MessageContent, K as MessageDeletedEvent, N as MessageDeletedForMeEvent, O as MessageDeliveredEvent, Q as MessageForwardReference, T as MessageMetadata, V as MessageReaction, W as MessageReceiptEntry, X as MessageReplyReference, Y as MessageStarUpdatedEvent, Z as MessageUpdatedEvent, _ as MessagesDeliveredEvent, $ as MultipartPartUrl, a0 as MultipartUploadInfo, a1 as NewMessageEvent, a2 as OptimisticAttachment, a3 as PlatformCompressFn, a4 as PlatformUploadFn, a5 as PlatformUploadPartFn, a6 as QuietHours, a7 as ReactionGroup, a8 as ReactionUpdatedEvent, a9 as ReactionUser, aa as ReadReceiptEvent, ab as ReplyAttachmentSnapshot, ac as ResolvedFileSizeLimits, ad as SendMessageAttachment, ae as SyncDeletedForMe, af as SyncDeliveredReceipt, ag as SyncParticipantChange, ah as SyncReactionEntry, ai as SyncReactions, aj as SyncReadReceipt, ak as SyncStarEntry, al as SystemMessageMetadata, am as TypingIndicatorEvent, an as UploadConfig, ao as UploadProgress, ap as UserStatusEvent, aq as resolveConfig, ar as storageApi, as as uploadBatch } from './storage-D7GPq-Mm.js';
1
+ import { R as ResolvedCompressionConfig, L as LoginCredentials, A as AuthResponse, a as RegisterData, b as AuthTokens, U as User, C as CrossConversationSyncResponse, c as ConversationSyncResponse, d as AppConfig, S as SendMessagePayload, M as Message, e as CursorPaginatedResponse, f as MessageReactionsResponse, P as PaginatedResponse, g as MessageReceiptsResponse, h as ConversationListParams, i as Conversation, j as Participant, k as ConversationUnreadCount, l as UnreadSummary, m as UserPreferences, n as ResolvedConfig, F as ForwardMessagePayload, o as ForwardAckPayload, p as PersistStorage, q as PresignedUrlRequest, r as PresignedUrlResponse, s as FileResponse, t as CompletedPart, u as FileType, v as AntzChatConfig, w as UploadableFile, B as BatchUploadResult } from './storage-DlxfLVqx.js';
2
+ export { x as Attachment, y as CompressedFile, z as CompressionAlgorithm, D as CompressionConfig, E as ConversationType, G as ConversationUpdatedEvent, H as FileSizeLimits, I as ForwardResultPayload, J as LastReaction, K as MENTION_ALL_ID, N as MessageAckEvent, O as MessageContent, Q as MessageDeletedEvent, T as MessageDeletedForMeEvent, V as MessageDeliveredEvent, W as MessageForwardReference, X as MessageMetadata, Y as MessageReaction, Z as MessageReceiptEntry, _ as MessageReplyReference, $ as MessageStarUpdatedEvent, a0 as MessageUpdatedEvent, a1 as MessagesDeliveredEvent, a2 as MultipartPartUrl, a3 as MultipartUploadInfo, a4 as NewMessageEvent, a5 as OptimisticAttachment, a6 as PlatformCompressFn, a7 as PlatformUploadFn, a8 as PlatformUploadPartFn, a9 as QuietHours, aa as ReactionGroup, ab as ReactionUpdatedEvent, ac as ReactionUser, ad as ReadReceiptEvent, ae as ReplyAttachmentSnapshot, af as ResolvedFileSizeLimits, ag as SendErrorContext, ah as SendMessageAttachment, ai as SyncDeletedForMe, aj as SyncDeliveredReceipt, ak as SyncParticipantChange, al as SyncReactionEntry, am as SyncReactions, an as SyncReadReceipt, ao as SyncStarEntry, ap as SystemMessageMetadata, aq as TypingIndicatorEvent, ar as UploadConfig, as as UploadProgress, at as UserStatusEvent, au as resolveConfig, av as storageApi, aw as uploadBatch } from './storage-DlxfLVqx.js';
3
3
  import { AxiosInstance } from 'axios';
4
4
  import { Socket } from 'socket.io-client';
5
5
  import * as zustand_middleware from 'zustand/middleware';
@@ -73,6 +73,15 @@ interface SendData {
73
73
  text?: string;
74
74
  attachments?: SendMessagePayload['attachments'];
75
75
  replyTo?: string;
76
+ /**
77
+ * Client-generated idempotency key. Generate one per send attempt and reuse the
78
+ * SAME value if you retry this exact send (e.g. after a client-side timeout) —
79
+ * never mint a new one for a retry. The server recognizes a matching
80
+ * (conversationId, senderId, tempId) and returns the already-created message
81
+ * instead of creating a duplicate. Unlike `messagesApi.forward()`, this is NOT
82
+ * auto-generated if omitted — omitting it (or generating a fresh one on every
83
+ * retry) means no dedup protection.
84
+ */
76
85
  tempId?: string;
77
86
  }
78
87
  /** Matches the server-enforced cap in messages/dto/create-message.dto.ts (MAX_FORWARD_TARGETS). */
@@ -93,6 +102,12 @@ interface ForwardResult {
93
102
  declare const messagesApi: {
94
103
  list(conversationId: string, params?: ListMessagesParams): Promise<CursorPaginatedResponse<Message>>;
95
104
  get(messageId: string): Promise<Message>;
105
+ /**
106
+ * Sends a message via REST. For real-time delivery use `socketEmit.sendMessage`
107
+ * instead — this is a lower-level entry point (used e.g. by the socket path's
108
+ * REST-mirror flows). Pass `payload.tempId` and reuse the SAME value on retry to
109
+ * make a retry-after-timeout safe — see `SendData.tempId`.
110
+ */
96
111
  send(conversationId: string, payload: SendData): Promise<Message>;
97
112
  update(messageId: string, text: string): Promise<Message>;
98
113
  delete(messageId: string): Promise<void>;
@@ -127,8 +142,21 @@ declare const messagesApi: {
127
142
  * (e.g. one image out of a multi-image message) — omit it to forward the whole
128
143
  * message, including all its attachments, unchanged. An ID not present on the
129
144
  * source message is ignored server-side.
145
+ *
146
+ * Idempotency: pass `tempId` — generate ONE value per forward action (e.g. via
147
+ * `generateUUID` from '@antzsoft/chat-core/internal') and reuse that SAME value if
148
+ * you retry this exact forward (e.g. after a client-side timeout). The server then
149
+ * recognizes the retry per target and returns the already-created message instead
150
+ * of creating a duplicate. Never mint a new tempId for a retry — only when the user
151
+ * initiates a genuinely new forward action. If omitted, a fresh one is generated
152
+ * per call, which means a retry without an explicit tempId gets NO dedup protection.
153
+ *
154
+ * Transport: uses the 'forward_message' socket event when a socket is connected
155
+ * (lower latency, same server-side MessagesService.forward() path, so broadcast/
156
+ * push notification behavior is identical either way) and transparently falls back
157
+ * to the REST endpoint when no socket is available.
130
158
  */
131
- forward(messageId: string, targetConversationIds: string[], attachmentIds?: string[]): Promise<ForwardResult[]>;
159
+ forward(messageId: string, targetConversationIds: string[], attachmentIds?: string[], tempId?: string): Promise<ForwardResult[]>;
132
160
  };
133
161
 
134
162
  declare function normalizeConversation(conv: any): Conversation;
@@ -297,6 +325,8 @@ type TokenStore = {
297
325
  setTokens: (tokens: AuthTokens) => void;
298
326
  clearTokens: () => void;
299
327
  };
328
+ declare function setAuthReadyPromise(promise: Promise<unknown> | null): void;
329
+ declare function isApiClientConfigured(): boolean;
300
330
  declare function initApiClient(config: ResolvedConfig, tokenStore: TokenStore): AxiosInstance;
301
331
  declare function setApiClientInstance(instance: AxiosInstance): void;
302
332
  declare function getApiClient(): AxiosInstance;
@@ -309,6 +339,10 @@ declare function getSocket(): Socket;
309
339
  declare function tryGetSocket(): Socket | null;
310
340
  declare function getSocketStatus(): SocketStatus;
311
341
  declare function onSocketStatus(listener: StatusListener): () => void;
342
+ /** Drop all tracked rooms. Call on a genuine identity change (user/tenant
343
+ * switch) so the reconnect re-flush can't re-join the previous user's rooms.
344
+ * NOT called from disconnectSocket() — a token refresh is not an intent change. */
345
+ declare function resetTrackedRooms(): void;
312
346
  declare function connectSocket(config: ResolvedConfig, getToken: () => string | null | undefined): Promise<Socket>;
313
347
  declare function disconnectSocket(): void;
314
348
  declare function reconnectSocket(token: string, userId?: string, tenantId?: string): void;
@@ -323,6 +357,7 @@ declare const socketEmit: {
323
357
  joinRoom(conversationId: string): void;
324
358
  leaveRoom(conversationId: string): void;
325
359
  sendMessage(payload: SendMessagePayload): Promise<unknown>;
360
+ forwardMessage(payload: ForwardMessagePayload): Promise<ForwardAckPayload>;
326
361
  updateMessage(messageId: string, text: string): Promise<unknown>;
327
362
  deleteMessage(messageId: string): Promise<unknown>;
328
363
  deleteMessageForMe(messageId: string): Promise<unknown>;
@@ -688,7 +723,7 @@ declare class AntzChatClient {
688
723
  unpin(messageId: string): Promise<Message>;
689
724
  getPinned(conversationId: string): Promise<Message[]>;
690
725
  getReceipts(messageId: string): Promise<MessageReceiptsResponse>;
691
- forward(messageId: string, targetConversationIds: string[], attachmentIds?: string[]): Promise<ForwardResult[]>;
726
+ forward(messageId: string, targetConversationIds: string[], attachmentIds?: string[], tempId?: string): Promise<ForwardResult[]>;
692
727
  };
693
728
  readonly conversations: {
694
729
  list(params?: ConversationListParams): Promise<PaginatedResponse<Conversation>>;
@@ -764,4 +799,4 @@ declare class AntzChatClient {
764
799
  uploadIcon(conversationId: string, file: UploadableFile): Promise<Conversation>;
765
800
  }
766
801
 
767
- export { AntzChatAuthError, AntzChatClient, AntzChatConfig, AntzChatError, AntzChatNetworkError, AntzChatPermissionError, AntzChatServerError, AntzChatValidationError, AppConfig, AuthResponse, AuthTokens, BatchUploadResult, CompletedPart, Conversation, ConversationListParams, ConversationSyncResponse, ConversationUnreadCount, type CreateDirectData, type CreateGroupData, CrossConversationSyncResponse, CursorPaginatedResponse, FileResponse, FileType, type ForwardResult, HIGHLY_FORWARDED_DEPTH_THRESHOLD, type LastReadEntry, type ListMessagesParams, LoginCredentials, MAX_FORWARD_TARGETS, type MentionPart, type MentionSegment, Message, MessageReactionsResponse, MessageReceiptsResponse, type MobileDeviceToken, PaginatedResponse, type ParsedMention, Participant, PersistStorage, PresignedUrlRequest, PresignedUrlResponse, RegisterData, type RegisterDeviceTokenPayload, ResolvedCompressionConfig, ResolvedConfig, type SearchParams, type SendData, SendMessagePayload, type SocketStatus, type StatusListener, type TokenStore, UnreadSummary, type UpdateConversationData, type UpdateProfilePayload, UploadableFile, User, UserPreferences, type WebPushDeviceToken, appConfigApi, authApi, buildMentionText, connectSocket, conversationsApi, createAuthStore, createRestTransitSession, decryptPayload, devicesApi, disconnectSocket, encryptPayload, extractMentionIds, fetchServerKeys, generateEphemeralKey, getApiClient, getAuthStore, getCompressionStrategy, getSessionId, getSessionKey, getSocket, getSocketStatus, initApiClient, initAuthStore, isMentionAll, isTransitEnvelope, messagesApi, normalizeAxiosError, normalizeConversation, onSocketStatus, parseMentions, performHandshake, reconnectSocket, refreshSocketAuth, renderMentionParts, resetAuthStore, resolveSystemMessageText, setApiClientInstance, setTransitSession, socketEmit, syncApi, tryGetSocket, useChatStore, usersApi };
802
+ export { AntzChatAuthError, AntzChatClient, AntzChatConfig, AntzChatError, AntzChatNetworkError, AntzChatPermissionError, AntzChatServerError, AntzChatValidationError, AppConfig, AuthResponse, AuthTokens, BatchUploadResult, CompletedPart, Conversation, ConversationListParams, ConversationSyncResponse, ConversationUnreadCount, type CreateDirectData, type CreateGroupData, CrossConversationSyncResponse, CursorPaginatedResponse, FileResponse, FileType, ForwardAckPayload, ForwardMessagePayload, type ForwardResult, HIGHLY_FORWARDED_DEPTH_THRESHOLD, type LastReadEntry, type ListMessagesParams, LoginCredentials, MAX_FORWARD_TARGETS, type MentionPart, type MentionSegment, Message, MessageReactionsResponse, MessageReceiptsResponse, type MobileDeviceToken, PaginatedResponse, type ParsedMention, Participant, PersistStorage, PresignedUrlRequest, PresignedUrlResponse, RegisterData, type RegisterDeviceTokenPayload, ResolvedCompressionConfig, ResolvedConfig, type SearchParams, type SendData, SendMessagePayload, type SocketStatus, type StatusListener, type TokenStore, UnreadSummary, type UpdateConversationData, type UpdateProfilePayload, UploadableFile, User, UserPreferences, type WebPushDeviceToken, appConfigApi, authApi, buildMentionText, connectSocket, conversationsApi, createAuthStore, createRestTransitSession, decryptPayload, devicesApi, disconnectSocket, encryptPayload, extractMentionIds, fetchServerKeys, generateEphemeralKey, getApiClient, getAuthStore, getCompressionStrategy, getSessionId, getSessionKey, getSocket, getSocketStatus, initApiClient, initAuthStore, isApiClientConfigured, isMentionAll, isTransitEnvelope, messagesApi, normalizeAxiosError, normalizeConversation, onSocketStatus, parseMentions, performHandshake, reconnectSocket, refreshSocketAuth, renderMentionParts, resetAuthStore, resetTrackedRooms, resolveSystemMessageText, setApiClientInstance, setAuthReadyPromise, setTransitSession, socketEmit, syncApi, tryGetSocket, useChatStore, usersApi };