@corva/chat-core 0.1.8 → 0.1.9

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.ts CHANGED
@@ -525,6 +525,7 @@ interface RevoltSocketEventHandlers {
525
525
  onTyping?: (data: TypingEventData) => void;
526
526
  onRoomChange?: (roomId: string, change: unknown) => void;
527
527
  onChannelAck?: (channelId: string, messageId: string) => void;
528
+ onServerMembersChange?: (serverId: string) => void;
528
529
  onError?: (error: unknown) => void;
529
530
  }
530
531
 
@@ -1441,6 +1442,7 @@ interface MemberStore {
1441
1442
  setTypingUsers: (users: string[]) => void;
1442
1443
  simulateTyping: (userKey: string, isTyping: boolean, displayName?: string) => void;
1443
1444
  loadRoomMembers: (roomId: string, roomType: RoomType, isAssetChat?: boolean) => Promise<void>;
1445
+ refreshServerMembers: (serverId: string) => void;
1444
1446
  searchUsers: (query: string) => Promise<User[]>;
1445
1447
  getUserByUsername: (username: string) => Promise<User | null>;
1446
1448
  getAllVisibleUsers: () => Promise<User[]>;
@@ -1728,6 +1730,7 @@ declare const createSocketEventHandlers: (config: SocketEventHandlersConfig) =>
1728
1730
  }) => void;
1729
1731
  onMessageDelete: (messageId: string, channelId: string) => void;
1730
1732
  onUserStatusChange: (userId: string, status: string) => void;
1733
+ onServerMembersChange: (serverId: string) => void;
1731
1734
  onInvalidSession: () => void | undefined;
1732
1735
  onError: (error: unknown) => void;
1733
1736
  };
package/dist/index.js CHANGED
@@ -2183,6 +2183,13 @@ function createEventRouter(userCache2, sessionToken, autumnUrl, handlers, getMem
2183
2183
  }
2184
2184
  break;
2185
2185
  }
2186
+ case "ServerMemberJoin":
2187
+ case "ServerMemberLeave":
2188
+ if (typeof message.id === "string") handlers.onServerMembersChange?.(message.id);
2189
+ break;
2190
+ case "ServerMemberUpdate":
2191
+ if (message.id?.server) handlers.onServerMembersChange?.(message.id.server);
2192
+ break;
2186
2193
  case "UserUpdate":
2187
2194
  if (message.data && typeof message.data.online === "boolean") {
2188
2195
  handlers.onUserStatusChange?.(message.id, message.data.online ? "online" : "offline");
@@ -3294,6 +3301,8 @@ var invalidateVisibleUsers = () => {
3294
3301
  visibleUsersGeneration += 1;
3295
3302
  visibleUsersRequest = null;
3296
3303
  };
3304
+ var SERVER_MEMBERS_REFRESH_DELAY_MS = 500;
3305
+ var serverRefreshTimers = /* @__PURE__ */ new Map();
3297
3306
  var syncedExternalCompanies = /* @__PURE__ */ new Set();
3298
3307
  var ownCompanyId = null;
3299
3308
  var seedSocketUsers = (members) => {
@@ -3465,6 +3474,26 @@ var memberStore = createStore()((set, get) => ({
3465
3474
  console.error("Failed to load room members:", e);
3466
3475
  }
3467
3476
  },
3477
+ refreshServerMembers: (serverId) => {
3478
+ clearTimeout(serverRefreshTimers.get(serverId));
3479
+ serverRefreshTimers.set(
3480
+ serverId,
3481
+ setTimeout(() => {
3482
+ serverRefreshTimers.delete(serverId);
3483
+ const isOwnServer = serverId === authStore.getState().serverId;
3484
+ if (isOwnServer) {
3485
+ set({ serverMembersLoaded: false, serverMembersCache: null, allVisibleUsersCache: null });
3486
+ invalidateVisibleUsers();
3487
+ }
3488
+ const room = roomStore.getState().currentRoom;
3489
+ if (!room) return;
3490
+ const external = getExternalChannel(room._id);
3491
+ const showsServerMembers = external ? external.serverId === serverId : isOwnServer;
3492
+ if (!showsServerMembers || !external && room.t !== "c") return;
3493
+ get().loadRoomMembers(room._id, room.t, !!external).catch((e) => console.error("Failed to refresh room members:", e));
3494
+ }, SERVER_MEMBERS_REFRESH_DELAY_MS)
3495
+ );
3496
+ },
3468
3497
  searchUsers: async (query) => {
3469
3498
  try {
3470
3499
  const currentRoomId = roomStore.getState().currentRoom?._id;
@@ -3594,6 +3623,8 @@ async function mapCorvaUsers(companyId, revoltUsers) {
3594
3623
  }
3595
3624
  }
3596
3625
  var resetMemberStore = () => {
3626
+ serverRefreshTimers.forEach((timer) => clearTimeout(timer));
3627
+ serverRefreshTimers.clear();
3597
3628
  syncedExternalCompanies.clear();
3598
3629
  ownCompanyId = null;
3599
3630
  invalidateVisibleUsers();
@@ -5714,6 +5745,9 @@ var createSocketEventHandlers = (config) => {
5714
5745
  );
5715
5746
  memberStore.setState({ members: updatedMembers });
5716
5747
  },
5748
+ onServerMembersChange: (serverId) => {
5749
+ memberStore.getState().refreshServerMembers(serverId);
5750
+ },
5717
5751
  onInvalidSession: () => api.notifyUnauthorized("ws:Authenticate"),
5718
5752
  onError: (error) => {
5719
5753
  console.error("\u{1F50C} WebSocket error:", error);