@antzsoft/chat-core 1.1.0 → 1.1.2

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
@@ -3,7 +3,6 @@ import { Socket } from 'socket.io-client';
3
3
  import * as zustand_middleware from 'zustand/middleware';
4
4
  import * as zustand from 'zustand';
5
5
 
6
- type EncryptionMode = 'none' | 'server' | 'e2ee';
7
6
  type FileType = 'image' | 'video' | 'audio' | 'document';
8
7
  type ConversationType = 'direct' | 'group';
9
8
  type MessageStatus = 'sent' | 'delivered' | 'read' | 'failed' | 'deleted';
@@ -79,17 +78,6 @@ interface Attachment {
79
78
  isUploading?: boolean;
80
79
  uploadProgress?: number;
81
80
  }
82
- interface EncryptedContent {
83
- ciphertext: string;
84
- iv: string;
85
- tag: string;
86
- algorithm: 'aes-256-gcm';
87
- }
88
- interface EncryptionKeyInfo {
89
- key: string;
90
- enabled: boolean;
91
- mode: EncryptionMode;
92
- }
93
81
  interface MessageReaction {
94
82
  emoji: string;
95
83
  userIds: string[];
@@ -100,10 +88,23 @@ interface MessageContent {
100
88
  type: 'text' | 'attachment' | 'system';
101
89
  attachments?: Attachment[];
102
90
  }
91
+ interface ReplyAttachmentSnapshot {
92
+ type: FileType;
93
+ filename: string;
94
+ mimeType: string;
95
+ size: number;
96
+ duration?: number;
97
+ dimensions?: {
98
+ width: number;
99
+ height: number;
100
+ };
101
+ url: string;
102
+ }
103
103
  interface MessageReplyReference {
104
104
  messageId?: string;
105
105
  contentPreview?: string;
106
106
  senderName?: string;
107
+ attachmentSnapshot?: ReplyAttachmentSnapshot;
107
108
  id?: string;
108
109
  content?: MessageContent;
109
110
  sender?: Pick<User, 'displayName' | 'avatarUrl'>;
@@ -136,9 +137,6 @@ interface Message {
136
137
  userId: string;
137
138
  deliveredAt: string;
138
139
  }>;
139
- isEncrypted?: boolean;
140
- encryptionMode?: EncryptionMode;
141
- encryptedContent?: EncryptedContent;
142
140
  }
143
141
  interface Participant {
144
142
  userId: string;
@@ -175,9 +173,6 @@ interface Conversation {
175
173
  isPinned?: boolean;
176
174
  isMuted?: boolean;
177
175
  mutedUntil?: string;
178
- encryptionMode?: EncryptionMode;
179
- isEncryptionEnabled?: boolean;
180
- encryptionKey?: string;
181
176
  }
182
177
  interface AppConfig {
183
178
  maxPinnedConversations: number;
@@ -247,6 +242,7 @@ interface PresignedUrlRequest {
247
242
  size: number;
248
243
  conversationId?: string;
249
244
  folder?: string;
245
+ metadata?: Record<string, unknown>;
250
246
  }
251
247
  interface PresignedUrlResponse {
252
248
  fileId: string;
@@ -375,8 +371,6 @@ interface SendMessagePayload {
375
371
  attachments?: SendMessageAttachment[];
376
372
  replyTo?: string;
377
373
  tempId: string;
378
- encryptedContent?: EncryptedContent;
379
- isEncrypted?: boolean;
380
374
  }
381
375
  interface QuietHours {
382
376
  enabled: boolean;
@@ -509,8 +503,14 @@ interface AntzChatConfig {
509
503
  };
510
504
  /** Required for multi-tenant backends. Sent as X-Tenant-ID header. */
511
505
  tenantId?: string;
512
- /** Must match server ENCRYPTION_MODE env var. Default: 'none' */
513
- encryptionMode?: 'none' | 'server';
506
+ /**
507
+ * Enable payload-level transit encryption (ECDH key exchange + AES-256-GCM).
508
+ * Encrypts every HTTP request/response body and every socket event payload.
509
+ * Server must have TRANSIT_ENCRYPTION_ENABLED=true to match.
510
+ * Default: true — set false only for local development/debugging.
511
+ * Safe to toggle anytime — no data migration needed (wire-only, never affects storage).
512
+ */
513
+ transitEncryption?: boolean;
514
514
  upload?: UploadConfig;
515
515
  /**
516
516
  * Optional compression config. Compression is disabled if platformCompressFn is not provided.
@@ -567,7 +567,7 @@ interface ResolvedConfig {
567
567
  url?: string;
568
568
  base64?: string;
569
569
  };
570
- encryptionMode: 'none' | 'server';
570
+ transitEncryption: boolean;
571
571
  upload: {
572
572
  maxFileSizeMB: ResolvedFileSizeLimits;
573
573
  maxFilesPerMessage: number;
@@ -626,7 +626,6 @@ interface SendData {
626
626
  attachments?: SendMessagePayload['attachments'];
627
627
  replyTo?: string;
628
628
  tempId?: string;
629
- isEncrypted?: boolean;
630
629
  }
631
630
  declare const messagesApi: {
632
631
  list(conversationId: string, params?: ListMessagesParams): Promise<CursorPaginatedResponse<Message>>;
@@ -675,7 +674,7 @@ declare const conversationsApi: {
675
674
  createDirect(payload: CreateDirectData): Promise<Conversation>;
676
675
  update(conversationId: string, payload: UpdateConversationData): Promise<Conversation>;
677
676
  delete(conversationId: string): Promise<void>;
678
- addParticipants(conversationId: string, userIds: string[]): Promise<Conversation>;
677
+ addParticipants(conversationId: string, userIds: string[], role?: "admin" | "member"): Promise<Conversation>;
679
678
  removeParticipant(conversationId: string, userId: string): Promise<Conversation>;
680
679
  updateParticipantRole(conversationId: string, userId: string, role: "admin" | "member"): Promise<Conversation>;
681
680
  mute(conversationId: string, mutedUntil?: string): Promise<void>;
@@ -839,10 +838,7 @@ declare function disconnectSocket(): void;
839
838
  declare function reconnectSocket(token: string, userId?: string, tenantId?: string): void;
840
839
  /**
841
840
  * Updates the socket auth token from the stored getToken function and reconnects.
842
- * Called by SocketProvider on connect_error to handle expired-token scenarios:
843
- * 1. Token expired while disconnected → server rejects the reconnect handshake
844
- * 2. authProvider returns a fresh token → we update socket auth and retry
845
- *
841
+ * Called by SocketProvider on connect_error to handle expired-token scenarios.
846
842
  * Returns true if the token was updated, false if no token source is available.
847
843
  */
848
844
  declare function refreshSocketAuth(): boolean;
@@ -864,6 +860,16 @@ declare const socketEmit: {
864
860
  getTypingUsers(conversationId: string): Promise<unknown>;
865
861
  };
866
862
 
863
+ type TransitAlgo = 'x25519' | 'p256';
864
+
865
+ interface TransitSession {
866
+ sessionKey: CryptoKey;
867
+ algo: TransitAlgo;
868
+ sessionId: string;
869
+ enabled: boolean;
870
+ }
871
+ declare function setTransitSession(session: TransitSession): void;
872
+
867
873
  interface AuthState {
868
874
  user: User | null;
869
875
  tokens: AuthTokens | null;
@@ -1062,7 +1068,7 @@ declare class AntzChatClient {
1062
1068
  createDirect(payload: CreateDirectData): Promise<Conversation>;
1063
1069
  update(conversationId: string, payload: UpdateConversationData): Promise<Conversation>;
1064
1070
  delete(conversationId: string): Promise<void>;
1065
- addParticipants(conversationId: string, userIds: string[]): Promise<Conversation>;
1071
+ addParticipants(conversationId: string, userIds: string[], role?: "admin" | "member"): Promise<Conversation>;
1066
1072
  removeParticipant(conversationId: string, userId: string): Promise<Conversation>;
1067
1073
  updateParticipantRole(conversationId: string, userId: string, role: "admin" | "member"): Promise<Conversation>;
1068
1074
  mute(conversationId: string, mutedUntil?: string): Promise<void>;
@@ -1122,4 +1128,4 @@ declare class AntzChatClient {
1122
1128
  uploadIcon(conversationId: string, file: UploadableFile): Promise<Conversation>;
1123
1129
  }
1124
1130
 
1125
- export { AntzChatClient, type AntzChatConfig, type AppConfig, type Attachment, type AuthResponse, type AuthTokens, type BatchUploadResult, type CompressedFile, type CompressionAlgorithm, type CompressionConfig, type Conversation, type ConversationListParams, type ConversationUnreadCount, type CreateDirectData, type CreateGroupData, type CursorPaginatedResponse, type EncryptedContent, type EncryptionKeyInfo, type EncryptionMode, type FileResponse, type FileSizeLimits, type FileType, type LastReadEntry, type ListMessagesParams, type LoginCredentials, type Message, type MessageAckEvent, type MessageContent, type MessageDeletedEvent, type MessageDeletedForMeEvent, type MessageDeliveredEvent, type MessageReaction, type MessageReplyReference, type MessageUpdatedEvent, type MessagesDeliveredEvent, type MobileDeviceToken, type NewMessageEvent, type OptimisticAttachment, type PaginatedResponse, type Participant, type PersistStorage, type PlatformCompressFn, type PlatformUploadFn, type PresignedUrlRequest, type PresignedUrlResponse, type QuietHours, type ReactionUpdatedEvent, type ReadReceiptEvent, type RegisterData, type RegisterDeviceTokenPayload, type ResolvedCompressionConfig, type ResolvedConfig, type ResolvedFileSizeLimits, type SearchParams, type SendData, type SendMessageAttachment, type SendMessagePayload, type SocketStatus, type StatusListener, type TokenStore, type TypingIndicatorEvent, type UnreadSummary, type UpdateConversationData, type UploadConfig, type UploadProgress, type UploadableFile, type User, type UserPreferences, type UserStatusEvent, type WebPushDeviceToken, appConfigApi, authApi, connectSocket, conversationsApi, createAuthStore, devicesApi, disconnectSocket, getApiClient, getAuthStore, getCompressionStrategy, getSocket, getSocketStatus, initApiClient, initAuthStore, messagesApi, normalizeConversation, onSocketStatus, reconnectSocket, refreshSocketAuth, resetAuthStore, resolveConfig, setApiClientInstance, socketEmit, storageApi, tryGetSocket, uploadBatch, useChatStore, usersApi };
1131
+ export { AntzChatClient, type AntzChatConfig, type AppConfig, type Attachment, type AuthResponse, type AuthTokens, type BatchUploadResult, type CompressedFile, type CompressionAlgorithm, type CompressionConfig, type Conversation, type ConversationListParams, type ConversationUnreadCount, type CreateDirectData, type CreateGroupData, type CursorPaginatedResponse, type FileResponse, type FileSizeLimits, type FileType, type LastReadEntry, type ListMessagesParams, type LoginCredentials, type Message, type MessageAckEvent, type MessageContent, type MessageDeletedEvent, type MessageDeletedForMeEvent, type MessageDeliveredEvent, type MessageReaction, type MessageReplyReference, type MessageUpdatedEvent, type MessagesDeliveredEvent, type MobileDeviceToken, type NewMessageEvent, type OptimisticAttachment, type PaginatedResponse, type Participant, type PersistStorage, type PlatformCompressFn, type PlatformUploadFn, type PresignedUrlRequest, type PresignedUrlResponse, type QuietHours, type ReactionUpdatedEvent, type ReadReceiptEvent, type RegisterData, type RegisterDeviceTokenPayload, type ReplyAttachmentSnapshot, type ResolvedCompressionConfig, type ResolvedConfig, type ResolvedFileSizeLimits, type SearchParams, type SendData, type SendMessageAttachment, type SendMessagePayload, type SocketStatus, type StatusListener, type TokenStore, type TypingIndicatorEvent, type UnreadSummary, type UpdateConversationData, type UploadConfig, type UploadProgress, type UploadableFile, type User, type UserPreferences, type UserStatusEvent, type WebPushDeviceToken, appConfigApi, authApi, connectSocket, conversationsApi, createAuthStore, devicesApi, disconnectSocket, getApiClient, getAuthStore, getCompressionStrategy, getSocket, getSocketStatus, initApiClient, initAuthStore, messagesApi, normalizeConversation, onSocketStatus, reconnectSocket, refreshSocketAuth, resetAuthStore, resolveConfig, setApiClientInstance, setTransitSession, socketEmit, storageApi, tryGetSocket, uploadBatch, useChatStore, usersApi };
package/dist/index.d.ts CHANGED
@@ -3,7 +3,6 @@ import { Socket } from 'socket.io-client';
3
3
  import * as zustand_middleware from 'zustand/middleware';
4
4
  import * as zustand from 'zustand';
5
5
 
6
- type EncryptionMode = 'none' | 'server' | 'e2ee';
7
6
  type FileType = 'image' | 'video' | 'audio' | 'document';
8
7
  type ConversationType = 'direct' | 'group';
9
8
  type MessageStatus = 'sent' | 'delivered' | 'read' | 'failed' | 'deleted';
@@ -79,17 +78,6 @@ interface Attachment {
79
78
  isUploading?: boolean;
80
79
  uploadProgress?: number;
81
80
  }
82
- interface EncryptedContent {
83
- ciphertext: string;
84
- iv: string;
85
- tag: string;
86
- algorithm: 'aes-256-gcm';
87
- }
88
- interface EncryptionKeyInfo {
89
- key: string;
90
- enabled: boolean;
91
- mode: EncryptionMode;
92
- }
93
81
  interface MessageReaction {
94
82
  emoji: string;
95
83
  userIds: string[];
@@ -100,10 +88,23 @@ interface MessageContent {
100
88
  type: 'text' | 'attachment' | 'system';
101
89
  attachments?: Attachment[];
102
90
  }
91
+ interface ReplyAttachmentSnapshot {
92
+ type: FileType;
93
+ filename: string;
94
+ mimeType: string;
95
+ size: number;
96
+ duration?: number;
97
+ dimensions?: {
98
+ width: number;
99
+ height: number;
100
+ };
101
+ url: string;
102
+ }
103
103
  interface MessageReplyReference {
104
104
  messageId?: string;
105
105
  contentPreview?: string;
106
106
  senderName?: string;
107
+ attachmentSnapshot?: ReplyAttachmentSnapshot;
107
108
  id?: string;
108
109
  content?: MessageContent;
109
110
  sender?: Pick<User, 'displayName' | 'avatarUrl'>;
@@ -136,9 +137,6 @@ interface Message {
136
137
  userId: string;
137
138
  deliveredAt: string;
138
139
  }>;
139
- isEncrypted?: boolean;
140
- encryptionMode?: EncryptionMode;
141
- encryptedContent?: EncryptedContent;
142
140
  }
143
141
  interface Participant {
144
142
  userId: string;
@@ -175,9 +173,6 @@ interface Conversation {
175
173
  isPinned?: boolean;
176
174
  isMuted?: boolean;
177
175
  mutedUntil?: string;
178
- encryptionMode?: EncryptionMode;
179
- isEncryptionEnabled?: boolean;
180
- encryptionKey?: string;
181
176
  }
182
177
  interface AppConfig {
183
178
  maxPinnedConversations: number;
@@ -247,6 +242,7 @@ interface PresignedUrlRequest {
247
242
  size: number;
248
243
  conversationId?: string;
249
244
  folder?: string;
245
+ metadata?: Record<string, unknown>;
250
246
  }
251
247
  interface PresignedUrlResponse {
252
248
  fileId: string;
@@ -375,8 +371,6 @@ interface SendMessagePayload {
375
371
  attachments?: SendMessageAttachment[];
376
372
  replyTo?: string;
377
373
  tempId: string;
378
- encryptedContent?: EncryptedContent;
379
- isEncrypted?: boolean;
380
374
  }
381
375
  interface QuietHours {
382
376
  enabled: boolean;
@@ -509,8 +503,14 @@ interface AntzChatConfig {
509
503
  };
510
504
  /** Required for multi-tenant backends. Sent as X-Tenant-ID header. */
511
505
  tenantId?: string;
512
- /** Must match server ENCRYPTION_MODE env var. Default: 'none' */
513
- encryptionMode?: 'none' | 'server';
506
+ /**
507
+ * Enable payload-level transit encryption (ECDH key exchange + AES-256-GCM).
508
+ * Encrypts every HTTP request/response body and every socket event payload.
509
+ * Server must have TRANSIT_ENCRYPTION_ENABLED=true to match.
510
+ * Default: true — set false only for local development/debugging.
511
+ * Safe to toggle anytime — no data migration needed (wire-only, never affects storage).
512
+ */
513
+ transitEncryption?: boolean;
514
514
  upload?: UploadConfig;
515
515
  /**
516
516
  * Optional compression config. Compression is disabled if platformCompressFn is not provided.
@@ -567,7 +567,7 @@ interface ResolvedConfig {
567
567
  url?: string;
568
568
  base64?: string;
569
569
  };
570
- encryptionMode: 'none' | 'server';
570
+ transitEncryption: boolean;
571
571
  upload: {
572
572
  maxFileSizeMB: ResolvedFileSizeLimits;
573
573
  maxFilesPerMessage: number;
@@ -626,7 +626,6 @@ interface SendData {
626
626
  attachments?: SendMessagePayload['attachments'];
627
627
  replyTo?: string;
628
628
  tempId?: string;
629
- isEncrypted?: boolean;
630
629
  }
631
630
  declare const messagesApi: {
632
631
  list(conversationId: string, params?: ListMessagesParams): Promise<CursorPaginatedResponse<Message>>;
@@ -675,7 +674,7 @@ declare const conversationsApi: {
675
674
  createDirect(payload: CreateDirectData): Promise<Conversation>;
676
675
  update(conversationId: string, payload: UpdateConversationData): Promise<Conversation>;
677
676
  delete(conversationId: string): Promise<void>;
678
- addParticipants(conversationId: string, userIds: string[]): Promise<Conversation>;
677
+ addParticipants(conversationId: string, userIds: string[], role?: "admin" | "member"): Promise<Conversation>;
679
678
  removeParticipant(conversationId: string, userId: string): Promise<Conversation>;
680
679
  updateParticipantRole(conversationId: string, userId: string, role: "admin" | "member"): Promise<Conversation>;
681
680
  mute(conversationId: string, mutedUntil?: string): Promise<void>;
@@ -839,10 +838,7 @@ declare function disconnectSocket(): void;
839
838
  declare function reconnectSocket(token: string, userId?: string, tenantId?: string): void;
840
839
  /**
841
840
  * Updates the socket auth token from the stored getToken function and reconnects.
842
- * Called by SocketProvider on connect_error to handle expired-token scenarios:
843
- * 1. Token expired while disconnected → server rejects the reconnect handshake
844
- * 2. authProvider returns a fresh token → we update socket auth and retry
845
- *
841
+ * Called by SocketProvider on connect_error to handle expired-token scenarios.
846
842
  * Returns true if the token was updated, false if no token source is available.
847
843
  */
848
844
  declare function refreshSocketAuth(): boolean;
@@ -864,6 +860,16 @@ declare const socketEmit: {
864
860
  getTypingUsers(conversationId: string): Promise<unknown>;
865
861
  };
866
862
 
863
+ type TransitAlgo = 'x25519' | 'p256';
864
+
865
+ interface TransitSession {
866
+ sessionKey: CryptoKey;
867
+ algo: TransitAlgo;
868
+ sessionId: string;
869
+ enabled: boolean;
870
+ }
871
+ declare function setTransitSession(session: TransitSession): void;
872
+
867
873
  interface AuthState {
868
874
  user: User | null;
869
875
  tokens: AuthTokens | null;
@@ -1062,7 +1068,7 @@ declare class AntzChatClient {
1062
1068
  createDirect(payload: CreateDirectData): Promise<Conversation>;
1063
1069
  update(conversationId: string, payload: UpdateConversationData): Promise<Conversation>;
1064
1070
  delete(conversationId: string): Promise<void>;
1065
- addParticipants(conversationId: string, userIds: string[]): Promise<Conversation>;
1071
+ addParticipants(conversationId: string, userIds: string[], role?: "admin" | "member"): Promise<Conversation>;
1066
1072
  removeParticipant(conversationId: string, userId: string): Promise<Conversation>;
1067
1073
  updateParticipantRole(conversationId: string, userId: string, role: "admin" | "member"): Promise<Conversation>;
1068
1074
  mute(conversationId: string, mutedUntil?: string): Promise<void>;
@@ -1122,4 +1128,4 @@ declare class AntzChatClient {
1122
1128
  uploadIcon(conversationId: string, file: UploadableFile): Promise<Conversation>;
1123
1129
  }
1124
1130
 
1125
- export { AntzChatClient, type AntzChatConfig, type AppConfig, type Attachment, type AuthResponse, type AuthTokens, type BatchUploadResult, type CompressedFile, type CompressionAlgorithm, type CompressionConfig, type Conversation, type ConversationListParams, type ConversationUnreadCount, type CreateDirectData, type CreateGroupData, type CursorPaginatedResponse, type EncryptedContent, type EncryptionKeyInfo, type EncryptionMode, type FileResponse, type FileSizeLimits, type FileType, type LastReadEntry, type ListMessagesParams, type LoginCredentials, type Message, type MessageAckEvent, type MessageContent, type MessageDeletedEvent, type MessageDeletedForMeEvent, type MessageDeliveredEvent, type MessageReaction, type MessageReplyReference, type MessageUpdatedEvent, type MessagesDeliveredEvent, type MobileDeviceToken, type NewMessageEvent, type OptimisticAttachment, type PaginatedResponse, type Participant, type PersistStorage, type PlatformCompressFn, type PlatformUploadFn, type PresignedUrlRequest, type PresignedUrlResponse, type QuietHours, type ReactionUpdatedEvent, type ReadReceiptEvent, type RegisterData, type RegisterDeviceTokenPayload, type ResolvedCompressionConfig, type ResolvedConfig, type ResolvedFileSizeLimits, type SearchParams, type SendData, type SendMessageAttachment, type SendMessagePayload, type SocketStatus, type StatusListener, type TokenStore, type TypingIndicatorEvent, type UnreadSummary, type UpdateConversationData, type UploadConfig, type UploadProgress, type UploadableFile, type User, type UserPreferences, type UserStatusEvent, type WebPushDeviceToken, appConfigApi, authApi, connectSocket, conversationsApi, createAuthStore, devicesApi, disconnectSocket, getApiClient, getAuthStore, getCompressionStrategy, getSocket, getSocketStatus, initApiClient, initAuthStore, messagesApi, normalizeConversation, onSocketStatus, reconnectSocket, refreshSocketAuth, resetAuthStore, resolveConfig, setApiClientInstance, socketEmit, storageApi, tryGetSocket, uploadBatch, useChatStore, usersApi };
1131
+ export { AntzChatClient, type AntzChatConfig, type AppConfig, type Attachment, type AuthResponse, type AuthTokens, type BatchUploadResult, type CompressedFile, type CompressionAlgorithm, type CompressionConfig, type Conversation, type ConversationListParams, type ConversationUnreadCount, type CreateDirectData, type CreateGroupData, type CursorPaginatedResponse, type FileResponse, type FileSizeLimits, type FileType, type LastReadEntry, type ListMessagesParams, type LoginCredentials, type Message, type MessageAckEvent, type MessageContent, type MessageDeletedEvent, type MessageDeletedForMeEvent, type MessageDeliveredEvent, type MessageReaction, type MessageReplyReference, type MessageUpdatedEvent, type MessagesDeliveredEvent, type MobileDeviceToken, type NewMessageEvent, type OptimisticAttachment, type PaginatedResponse, type Participant, type PersistStorage, type PlatformCompressFn, type PlatformUploadFn, type PresignedUrlRequest, type PresignedUrlResponse, type QuietHours, type ReactionUpdatedEvent, type ReadReceiptEvent, type RegisterData, type RegisterDeviceTokenPayload, type ReplyAttachmentSnapshot, type ResolvedCompressionConfig, type ResolvedConfig, type ResolvedFileSizeLimits, type SearchParams, type SendData, type SendMessageAttachment, type SendMessagePayload, type SocketStatus, type StatusListener, type TokenStore, type TypingIndicatorEvent, type UnreadSummary, type UpdateConversationData, type UploadConfig, type UploadProgress, type UploadableFile, type User, type UserPreferences, type UserStatusEvent, type WebPushDeviceToken, appConfigApi, authApi, connectSocket, conversationsApi, createAuthStore, devicesApi, disconnectSocket, getApiClient, getAuthStore, getCompressionStrategy, getSocket, getSocketStatus, initApiClient, initAuthStore, messagesApi, normalizeConversation, onSocketStatus, reconnectSocket, refreshSocketAuth, resetAuthStore, resolveConfig, setApiClientInstance, setTransitSession, socketEmit, storageApi, tryGetSocket, uploadBatch, useChatStore, usersApi };