@fabriktor/fx 0.0.52 → 0.0.54

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.
@@ -136,7 +136,6 @@ export declare class ChatFX implements ChatFXOperator {
136
136
  reactUploadedChat(opts: ReactUploadedChatOptions): Promise<void>;
137
137
  private openChatRoomConnections;
138
138
  private openGlobalChatRoomsConnection;
139
- private allChatRoomMembers;
140
139
  private findUser;
141
140
  private findChat;
142
141
  }
@@ -119,22 +119,37 @@ export class ChatFX {
119
119
  const roomIDs = [
120
120
  ...new Set(opts.chat_room_ids.map((id) => id.trim())),
121
121
  ].filter((id) => id !== "");
122
- const entries = await Promise.all(roomIDs.map(async (chatRoomID) => [chatRoomID, await this.allChatRoomMembers(chatRoomID)]));
122
+ if (roomIDs.length === 0) {
123
+ return {};
124
+ }
125
+ const result = await this.chat.queryChatRoomMembers({
126
+ query: {
127
+ chat_room_id: roomIDs,
128
+ },
129
+ });
130
+ const members = result.value ?? [];
131
+ const membersByRoom = new Map(roomIDs.map((id) => [id, []]));
132
+ for (const member of members) {
133
+ membersByRoom.get(member.chat_room_id)?.push(member);
134
+ }
123
135
  const ownerIDs = [
124
- ...new Set(entries.flatMap(([, members]) => members.map((member) => member.owner_id))),
136
+ ...new Set(members.map((member) => member.owner_id)),
125
137
  ];
126
138
  const userResults = await Promise.allSettled(ownerIDs.map(async (id) => [id, await this.findUser(id)]));
127
139
  const usersByID = new Map(userResults.flatMap((result) => result.status === "fulfilled" ? [result.value] : []));
128
- return Object.fromEntries(entries.map(([chatRoomID, members]) => [
129
- chatRoomID,
130
- {
131
- members,
132
- users: members.flatMap((member) => {
133
- const user = usersByID.get(member.owner_id);
134
- return user ? [user] : [];
135
- }),
136
- },
137
- ]));
140
+ return Object.fromEntries(roomIDs.map((chatRoomID) => {
141
+ const roomMembers = membersByRoom.get(chatRoomID) ?? [];
142
+ return [
143
+ chatRoomID,
144
+ {
145
+ members: roomMembers,
146
+ users: roomMembers.flatMap((member) => {
147
+ const user = usersByID.get(member.owner_id);
148
+ return user ? [user] : [];
149
+ }),
150
+ },
151
+ ];
152
+ }));
138
153
  }
139
154
  async openChatRoom(opts) {
140
155
  const latest = await this.latestChats({
@@ -397,21 +412,6 @@ export class ChatFX {
397
412
  },
398
413
  };
399
414
  }
400
- async allChatRoomMembers(chatRoomID) {
401
- const out = [];
402
- let page = 1;
403
- for (;;) {
404
- const next = await this.searchChatRoomMembers({
405
- chat_room_id: chatRoomID,
406
- page,
407
- });
408
- out.push(...next.results);
409
- if (next.done) {
410
- return out;
411
- }
412
- page = next.next_page;
413
- }
414
- }
415
415
  async findUser(id) {
416
416
  const out = await this.users.findOneUser({ id });
417
417
  const user = out.value;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fabriktor/fx",
3
- "version": "0.0.52",
3
+ "version": "0.0.54",
4
4
  "description": "![Fabriktor Logo](./img/fabriktor-character.gif)",
5
5
  "type": "module",
6
6
  "exports": {
@@ -17,7 +17,7 @@
17
17
  "typescript": "^6.0.3"
18
18
  },
19
19
  "dependencies": {
20
- "@fabriktor/client": "0.0.51",
20
+ "@fabriktor/client": "0.0.52",
21
21
  "@fabriktor/schema": "0.0.34"
22
22
  }
23
23
  }