@fabriktor/fx 0.0.44 → 0.0.46
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/src/chat/chat.d.ts +13 -2
- package/dist/src/chat/chat.js +31 -0
- package/dist/src/fx.js +1 -0
- package/dist/src/users/users.d.ts +7 -1
- package/dist/src/users/users.js +11 -0
- package/package.json +1 -1
package/dist/src/chat/chat.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ChatOperator, WSCloseHandler, WSConnection, WSErrorHandler, WSMessageHandler } from "@fabriktor/client";
|
|
2
|
-
import type { Chat, ChatRoom, ChatRoomMember } from "@fabriktor/schema";
|
|
1
|
+
import type { ChatOperator, UsersOperator, WSCloseHandler, WSConnection, WSErrorHandler, WSMessageHandler } from "@fabriktor/client";
|
|
2
|
+
import type { Chat, ChatRoom, ChatRoomMember, User } from "@fabriktor/schema";
|
|
3
3
|
import { type SearchPage } from "../core/search.js";
|
|
4
4
|
type ChatInsertOptions = Parameters<ChatOperator["insertOneChat"]>[0];
|
|
5
5
|
type ChatReplaceOptions = Parameters<ChatOperator["replaceOneChat"]>[0];
|
|
@@ -10,6 +10,7 @@ export type MarkChatObjectsUploadedOptions = {
|
|
|
10
10
|
export type ReactChatOptions = Parameters<ChatOperator["reactChat"]>[0];
|
|
11
11
|
export type ChatFXOptions = {
|
|
12
12
|
chat: ChatOperator;
|
|
13
|
+
users: UsersOperator;
|
|
13
14
|
};
|
|
14
15
|
type SearchChatsScope = {
|
|
15
16
|
chat_room_id: string;
|
|
@@ -60,6 +61,13 @@ export type ChatRoomMembersOptions = {
|
|
|
60
61
|
export type MyChatRoomMembersOptions = {
|
|
61
62
|
owner_id: string;
|
|
62
63
|
};
|
|
64
|
+
export type ChatRoomParticipantsOptions = {
|
|
65
|
+
chat_room_ids: string[];
|
|
66
|
+
};
|
|
67
|
+
export type ChatRoomParticipants = {
|
|
68
|
+
members: ChatRoomMember[];
|
|
69
|
+
users: User[];
|
|
70
|
+
};
|
|
63
71
|
export type OpenChatRoomOptions = {
|
|
64
72
|
owner_id: string;
|
|
65
73
|
chat_room_id: string;
|
|
@@ -102,12 +110,14 @@ export interface ChatFXOperator {
|
|
|
102
110
|
searchChatRoomMembers(opts: SearchChatRoomMembersOptions): Promise<SearchChatRoomMembersPage>;
|
|
103
111
|
chatRoomMembers(opts: ChatRoomMembersOptions): Promise<ChatRoomMember[]>;
|
|
104
112
|
myChatRoomMembers(opts: MyChatRoomMembersOptions): Promise<ChatRoomMember[]>;
|
|
113
|
+
chatRoomParticipants(opts: ChatRoomParticipantsOptions): Promise<ChatRoomParticipants>;
|
|
105
114
|
openChatRoom(opts: OpenChatRoomOptions): Promise<ChatRoomSession>;
|
|
106
115
|
openGlobalChatRooms(opts: OpenGlobalChatRoomsOptions): Promise<GlobalChatRoomsSession>;
|
|
107
116
|
reactUploadedChat(opts: ReactUploadedChatOptions): Promise<void>;
|
|
108
117
|
}
|
|
109
118
|
export declare class ChatFX implements ChatFXOperator {
|
|
110
119
|
private chat;
|
|
120
|
+
private users;
|
|
111
121
|
constructor(opts: ChatFXOptions);
|
|
112
122
|
createChat(opts: CreateChatOptions): Promise<Chat>;
|
|
113
123
|
markChatObjectsUploaded(opts: MarkChatObjectsUploadedOptions): Promise<Chat>;
|
|
@@ -118,6 +128,7 @@ export declare class ChatFX implements ChatFXOperator {
|
|
|
118
128
|
searchChatRoomMembers(opts: SearchChatRoomMembersOptions): Promise<SearchChatRoomMembersPage>;
|
|
119
129
|
chatRoomMembers(opts: ChatRoomMembersOptions): Promise<ChatRoomMember[]>;
|
|
120
130
|
myChatRoomMembers(opts: MyChatRoomMembersOptions): Promise<ChatRoomMember[]>;
|
|
131
|
+
chatRoomParticipants(opts: ChatRoomParticipantsOptions): Promise<ChatRoomParticipants>;
|
|
121
132
|
openChatRoom(opts: OpenChatRoomOptions): Promise<ChatRoomSession>;
|
|
122
133
|
openGlobalChatRooms(opts: OpenGlobalChatRoomsOptions): Promise<GlobalChatRoomsSession>;
|
|
123
134
|
reactUploadedChat(opts: ReactUploadedChatOptions): Promise<void>;
|
package/dist/src/chat/chat.js
CHANGED
|
@@ -16,8 +16,10 @@ const msgSearchQueryRequired = "Search query is required.";
|
|
|
16
16
|
const msgChatObjectsUploading = "Cannot react to a chat while objects are still uploading.";
|
|
17
17
|
export class ChatFX {
|
|
18
18
|
chat;
|
|
19
|
+
users;
|
|
19
20
|
constructor(opts) {
|
|
20
21
|
this.chat = opts.chat;
|
|
22
|
+
this.users = opts.users;
|
|
21
23
|
}
|
|
22
24
|
async createChat(opts) {
|
|
23
25
|
const out = await this.chat.insertOneChat(opts);
|
|
@@ -111,6 +113,29 @@ export class ChatFX {
|
|
|
111
113
|
});
|
|
112
114
|
return out.value ?? [];
|
|
113
115
|
}
|
|
116
|
+
async chatRoomParticipants(opts) {
|
|
117
|
+
const chat_room_ids = normalizeIDs(opts.chat_room_ids);
|
|
118
|
+
if (chat_room_ids.length === 0) {
|
|
119
|
+
return { members: [], users: [] };
|
|
120
|
+
}
|
|
121
|
+
const memberGroups = await Promise.all(chat_room_ids.map((chat_room_id) => this.chatRoomMembers({
|
|
122
|
+
chat_room_id,
|
|
123
|
+
})));
|
|
124
|
+
const members = uniqueChatRoomMembers(memberGroups.flat());
|
|
125
|
+
const owner_ids = normalizeIDs(members.map((member) => member.owner_id));
|
|
126
|
+
if (owner_ids.length === 0) {
|
|
127
|
+
return { members, users: [] };
|
|
128
|
+
}
|
|
129
|
+
const out = await this.users.queryUsers({
|
|
130
|
+
query: {
|
|
131
|
+
id: owner_ids,
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
return {
|
|
135
|
+
members,
|
|
136
|
+
users: out.value ?? [],
|
|
137
|
+
};
|
|
138
|
+
}
|
|
114
139
|
async openChatRoom(opts) {
|
|
115
140
|
const latest = await this.latestChats({
|
|
116
141
|
chat_room_id: opts.chat_room_id,
|
|
@@ -389,6 +414,12 @@ export class ChatFX {
|
|
|
389
414
|
export function newChatFX(opts) {
|
|
390
415
|
return new ChatFX(opts);
|
|
391
416
|
}
|
|
417
|
+
function normalizeIDs(ids) {
|
|
418
|
+
return [...new Set(ids.map((id) => id.trim()).filter((id) => id !== ""))];
|
|
419
|
+
}
|
|
420
|
+
function uniqueChatRoomMembers(members) {
|
|
421
|
+
return [...new Map(members.map((member) => [member.id, member])).values()];
|
|
422
|
+
}
|
|
392
423
|
function latestChatsPage(opts) {
|
|
393
424
|
return {
|
|
394
425
|
chats: opts.raw.results,
|
package/dist/src/fx.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import type { OperationResultOf, TmpPhonesOperator, TmpUsernamesOperator, UsernameVerification, UsersOperator } from "@fabriktor/client";
|
|
1
|
+
import type { GetByUIDOptions, OperationResultOf, TmpPhonesOperator, TmpUsernamesOperator, UsernameVerification, UsersOperator } from "@fabriktor/client";
|
|
2
|
+
import type { User } from "@fabriktor/schema";
|
|
3
|
+
import { type RunSearchOptions, type SearchPage } from "../core/search.js";
|
|
2
4
|
export type ResolveUsernameOptions = Parameters<UsersOperator["resolveUsername"]>[0];
|
|
3
5
|
export type VerifyUsernameOptions = Parameters<TmpUsernamesOperator["verify"]>[0];
|
|
4
6
|
export type GenerateUsernamesOptions = VerifyUsernameOptions;
|
|
7
|
+
export type SearchUsersOptions = GetByUIDOptions & Omit<RunSearchOptions<User>, "search">;
|
|
8
|
+
export type SearchUsersPage = SearchPage<User>;
|
|
5
9
|
export type SendPhoneCodeOptions = Parameters<TmpPhonesOperator["send"]>[0];
|
|
6
10
|
export type VerifyPhoneCodeOptions = Parameters<TmpPhonesOperator["verify"]>[0];
|
|
7
11
|
export type UsersFXOptions = {
|
|
@@ -10,6 +14,7 @@ export type UsersFXOptions = {
|
|
|
10
14
|
tmp_phones: TmpPhonesOperator;
|
|
11
15
|
};
|
|
12
16
|
export interface UsersFXOperator {
|
|
17
|
+
searchUsers(opts: SearchUsersOptions): Promise<SearchUsersPage>;
|
|
13
18
|
resolveUsername(opts: ResolveUsernameOptions): Promise<string>;
|
|
14
19
|
verifyUsername(opts: VerifyUsernameOptions): Promise<OperationResultOf<UsernameVerification>>;
|
|
15
20
|
generateUsernames(opts: GenerateUsernamesOptions): Promise<OperationResultOf<UsernameVerification>>;
|
|
@@ -21,6 +26,7 @@ export declare class UsersFX implements UsersFXOperator {
|
|
|
21
26
|
private tmp_usernames;
|
|
22
27
|
private tmp_phones;
|
|
23
28
|
constructor(opts: UsersFXOptions);
|
|
29
|
+
searchUsers(opts: SearchUsersOptions): Promise<SearchUsersPage>;
|
|
24
30
|
resolveUsername(opts: ResolveUsernameOptions): Promise<string>;
|
|
25
31
|
verifyUsername(opts: VerifyUsernameOptions): Promise<OperationResultOf<UsernameVerification>>;
|
|
26
32
|
generateUsernames(opts: GenerateUsernamesOptions): Promise<OperationResultOf<UsernameVerification>>;
|
package/dist/src/users/users.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// not use this file except in compliance with the License. You may obtain
|
|
5
5
|
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
6
|
import { errRequired, errResolveFailed, errValidation, } from "../core/err.js";
|
|
7
|
+
import { runSearch, } from "../core/search.js";
|
|
7
8
|
import { normalizePhone, normalizePhoneCode, validatePhone, validatePhoneCode, } from "./phone.js";
|
|
8
9
|
import { normalizeUsername, validateUsernameFormat } from "./username.js";
|
|
9
10
|
const msgUnableToResolveUsername = "Unable to resolve username.";
|
|
@@ -19,6 +20,16 @@ export class UsersFX {
|
|
|
19
20
|
this.tmp_usernames = opts.tmp_usernames;
|
|
20
21
|
this.tmp_phones = opts.tmp_phones;
|
|
21
22
|
}
|
|
23
|
+
async searchUsers(opts) {
|
|
24
|
+
const { uid, ...searchOpts } = opts;
|
|
25
|
+
return await runSearch({
|
|
26
|
+
...searchOpts,
|
|
27
|
+
search: async (opts) => await this.users.searchManyUsers({
|
|
28
|
+
...opts,
|
|
29
|
+
uid,
|
|
30
|
+
}),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
22
33
|
async resolveUsername(opts) {
|
|
23
34
|
const username = normalizeUsername(opts.username);
|
|
24
35
|
const out = await this.users.resolveUsername({
|