@wildix/xbees-conversations-utils 1.1.3 → 1.1.4

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.
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeStreamMember = exports.normalizeStreamChannel = exports.localizeStreamMessage = exports.normalizeStreamMessage = exports.normalizeStreamReaction = exports.localizeStreamUser = exports.normalizeStreamUser = void 0;
3
+ exports.normalizeStreamChannelsUsers = exports.normalizeStreamChannelsUsersToMap = exports.normalizeStreamChannelUsersToMap = exports.normalizeStreamChannelUsers = exports.normalizeStreamChannelOwnReadIndicators = exports.normalizeStreamChannelReadIndicators = exports.normalizeStreamChannelReadIndicator = exports.localizeStreamChannel = exports.localizeStreamChannelsMembersToMapByChannelId = exports.localizeStreamChannelMembers = exports.localizeStreamMember = exports.normalizeStreamMember = exports.normalizeStreamChannel = exports.localizeStreamMessage = exports.normalizeStreamMessage = exports.normalizeStreamReaction = exports.localizeStreamUser = exports.normalizeStreamUser = void 0;
4
4
  const types_1 = require("./types");
5
+ const xbees_conversations_client_1 = require("@wildix/xbees-conversations-client");
5
6
  function normalizeStreamUser(streamUser) {
6
7
  return {
7
8
  id: streamUser.id,
@@ -118,36 +119,36 @@ function normalizeStreamChannel(channel) {
118
119
  assignee = data.assignee;
119
120
  }
120
121
  return {
122
+ access: data.access,
123
+ assignee,
124
+ broadcast: data.broadcast || data.is_broadcast,
121
125
  channelId: data.id,
122
126
  channelType: data.type,
123
- memberCount: data.member_count || 0,
124
- subject: data.subject,
125
- description: data.description,
126
- picture: data.picture,
127
- pictureColor: data.picture_color,
128
- access: data.access,
129
127
  company: data.company,
130
128
  context,
129
+ createdAt: data.created_at,
130
+ createdBy: data.created_by_id,
131
+ description: data.description,
132
+ external: data.external,
131
133
  kite: data.kite,
132
134
  kiteTarget: data.kite_target,
133
135
  kiteVariant: data.kite_variant,
134
136
  kiteAssign: data.kite_assign,
135
137
  kiteServiceName: data.kite_service_name,
136
138
  kiteDefaultSubject: data.kite_default_subject,
139
+ memberCount: data.member_count || 0,
140
+ mms: data.mms,
141
+ picture: data.picture,
142
+ pictureColor: data.picture_color,
137
143
  service: data.service,
138
144
  serviceTitle: data.service_title,
139
145
  serviceRecipient: data.service_recipient,
140
- assignee,
141
- telephony: data.telephony,
142
146
  sms: data.sms,
143
- mms: data.mms,
147
+ subject: data.subject,
148
+ telephony: data.telephony,
149
+ updatedAt: data.updated_at,
144
150
  whatsapp: data.whatsapp,
145
151
  whatsappStatus: data.whatsapp_status,
146
- broadcast: data.broadcast || data.is_broadcast,
147
- external: data.external,
148
- createdAt: data.created_at,
149
- createdBy: data.created_by_id,
150
- updatedAt: data.updated_at,
151
152
  };
152
153
  }
153
154
  exports.normalizeStreamChannel = normalizeStreamChannel;
@@ -160,3 +161,119 @@ function normalizeStreamMember(member) {
160
161
  };
161
162
  }
162
163
  exports.normalizeStreamMember = normalizeStreamMember;
164
+ function localizeStreamMember(member) {
165
+ const { role, user, user_id, created_at } = member;
166
+ return {
167
+ id: user?.id || user_id,
168
+ createdAt: created_at ? new Date(created_at) : new Date(),
169
+ role: (role || 'member'),
170
+ };
171
+ }
172
+ exports.localizeStreamMember = localizeStreamMember;
173
+ function localizeStreamChannelMembers(streamChannel) {
174
+ const { state } = streamChannel;
175
+ const wid = streamChannel.getClient().userID;
176
+ return Object.values(state.members).map(localizeStreamMember).filter((member) => member.id !== wid);
177
+ }
178
+ exports.localizeStreamChannelMembers = localizeStreamChannelMembers;
179
+ function localizeStreamChannelsMembersToMapByChannelId(streamChannels) {
180
+ return streamChannels.reduce((accumulator, channel) => {
181
+ const members = localizeStreamChannelMembers(channel);
182
+ const channelId = channel.data?.id;
183
+ accumulator[channelId] = members;
184
+ return accumulator;
185
+ }, {});
186
+ }
187
+ exports.localizeStreamChannelsMembersToMapByChannelId = localizeStreamChannelsMembersToMapByChannelId;
188
+ function localizeStreamChannel(streamChannel) {
189
+ const normalizedChannel = normalizeStreamChannel(streamChannel);
190
+ const { data, state } = streamChannel;
191
+ const wid = streamChannel.getClient().userID || '';
192
+ const createdAt = new Date(normalizedChannel.createdAt);
193
+ const updatedAt = new Date(normalizedChannel.updatedAt || normalizedChannel?.createdBy);
194
+ const members = Object.values(state.members).filter(({ user_id }) => user_id !== wid);
195
+ const userId = data?.type === xbees_conversations_client_1.ChannelType.DIRECT && members.length > 0 ? members[0].user_id : null;
196
+ const unread = state.read[wid]?.unread_messages || 0;
197
+ const unreadMark = data?.unreadMarkUsers?.includes(wid) || false;
198
+ const lastMessage = streamChannel.lastMessage();
199
+ const normalizedLastMessage = lastMessage ? localizeStreamMessage(lastMessage, normalizedChannel.channelId, wid) : null;
200
+ const lastMessageAt = normalizedLastMessage ? normalizedLastMessage.createdAt : updatedAt || createdAt;
201
+ const lastRead = state.read[wid]?.last_read || null;
202
+ const role = state.membership.role || xbees_conversations_client_1.ChannelMemberRole.MEMBER;
203
+ const isArchived = Boolean(data?.hidden);
204
+ return {
205
+ ...normalizedChannel,
206
+ userId,
207
+ role,
208
+ createdAt,
209
+ updatedAt,
210
+ isArchived,
211
+ unread,
212
+ unreadMark,
213
+ isExternal: Boolean(normalizedChannel.external),
214
+ isBroadcast: Boolean(normalizedChannel.broadcast),
215
+ lastRead,
216
+ lastMessage: normalizedLastMessage,
217
+ lastMessageAt,
218
+ };
219
+ }
220
+ exports.localizeStreamChannel = localizeStreamChannel;
221
+ function normalizeStreamChannelReadIndicator(channelReadStatus, channelId) {
222
+ const { user, last_read } = channelReadStatus;
223
+ return {
224
+ userId: user.id,
225
+ lastRead: last_read,
226
+ user: localizeStreamUser(user),
227
+ channelId,
228
+ };
229
+ }
230
+ exports.normalizeStreamChannelReadIndicator = normalizeStreamChannelReadIndicator;
231
+ function normalizeStreamChannelReadIndicators(streamChannel) {
232
+ const wid = streamChannel.getClient().userID;
233
+ const { state: { read }, data } = streamChannel;
234
+ return Object.values(read)
235
+ .filter(({ user }) => wid !== user.id)
236
+ .map((readIndicator) => {
237
+ return normalizeStreamChannelReadIndicator(readIndicator, data?.id);
238
+ });
239
+ }
240
+ exports.normalizeStreamChannelReadIndicators = normalizeStreamChannelReadIndicators;
241
+ function normalizeStreamChannelOwnReadIndicators(streamChannel) {
242
+ const wid = streamChannel.getClient().userID;
243
+ const { state: { read }, data } = streamChannel;
244
+ return Object.values(read)
245
+ .filter(({ user }) => wid === user.id)
246
+ .map((readIndicator) => {
247
+ return normalizeStreamChannelReadIndicator(readIndicator, data?.id);
248
+ });
249
+ }
250
+ exports.normalizeStreamChannelOwnReadIndicators = normalizeStreamChannelOwnReadIndicators;
251
+ function normalizeStreamChannelUsers(streamChannel) {
252
+ const { state } = streamChannel;
253
+ const wid = streamChannel.getClient().userID;
254
+ return Object.values(state.members)
255
+ .filter((member) => member.user && member.user.id !== wid)
256
+ .map((member) => localizeStreamUser(member.user));
257
+ }
258
+ exports.normalizeStreamChannelUsers = normalizeStreamChannelUsers;
259
+ function normalizeStreamChannelUsersToMap(streamChannel) {
260
+ const normalizedUsers = normalizeStreamChannelUsers(streamChannel);
261
+ return normalizedUsers.reduce((accumulator, user) => {
262
+ accumulator[user.id] = user;
263
+ return accumulator;
264
+ }, {});
265
+ }
266
+ exports.normalizeStreamChannelUsersToMap = normalizeStreamChannelUsersToMap;
267
+ function normalizeStreamChannelsUsersToMap(streamChannels) {
268
+ return streamChannels.reduce((accumulator, channel) => {
269
+ return {
270
+ ...normalizeStreamChannelUsersToMap(channel),
271
+ ...accumulator,
272
+ };
273
+ }, {});
274
+ }
275
+ exports.normalizeStreamChannelsUsersToMap = normalizeStreamChannelsUsersToMap;
276
+ function normalizeStreamChannelsUsers(streamChannels) {
277
+ return Object.values(normalizeStreamChannelsUsersToMap(streamChannels));
278
+ }
279
+ exports.normalizeStreamChannelsUsers = normalizeStreamChannelsUsers;
@@ -1,4 +1,5 @@
1
- import { MessageDirection } from "./types";
1
+ import { MessageDirection, } from "./types";
2
+ import { ChannelType, ChannelMemberRole, } from "@wildix/xbees-conversations-client";
2
3
  export function normalizeStreamUser(streamUser) {
3
4
  return {
4
5
  id: streamUser.id,
@@ -110,36 +111,36 @@ export function normalizeStreamChannel(channel) {
110
111
  assignee = data.assignee;
111
112
  }
112
113
  return {
114
+ access: data.access,
115
+ assignee,
116
+ broadcast: data.broadcast || data.is_broadcast,
113
117
  channelId: data.id,
114
118
  channelType: data.type,
115
- memberCount: data.member_count || 0,
116
- subject: data.subject,
117
- description: data.description,
118
- picture: data.picture,
119
- pictureColor: data.picture_color,
120
- access: data.access,
121
119
  company: data.company,
122
120
  context,
121
+ createdAt: data.created_at,
122
+ createdBy: data.created_by_id,
123
+ description: data.description,
124
+ external: data.external,
123
125
  kite: data.kite,
124
126
  kiteTarget: data.kite_target,
125
127
  kiteVariant: data.kite_variant,
126
128
  kiteAssign: data.kite_assign,
127
129
  kiteServiceName: data.kite_service_name,
128
130
  kiteDefaultSubject: data.kite_default_subject,
131
+ memberCount: data.member_count || 0,
132
+ mms: data.mms,
133
+ picture: data.picture,
134
+ pictureColor: data.picture_color,
129
135
  service: data.service,
130
136
  serviceTitle: data.service_title,
131
137
  serviceRecipient: data.service_recipient,
132
- assignee,
133
- telephony: data.telephony,
134
138
  sms: data.sms,
135
- mms: data.mms,
139
+ subject: data.subject,
140
+ telephony: data.telephony,
141
+ updatedAt: data.updated_at,
136
142
  whatsapp: data.whatsapp,
137
143
  whatsappStatus: data.whatsapp_status,
138
- broadcast: data.broadcast || data.is_broadcast,
139
- external: data.external,
140
- createdAt: data.created_at,
141
- createdBy: data.created_by_id,
142
- updatedAt: data.updated_at,
143
144
  };
144
145
  }
145
146
  export function normalizeStreamMember(member) {
@@ -150,3 +151,108 @@ export function normalizeStreamMember(member) {
150
151
  role: (role || 'member'),
151
152
  };
152
153
  }
154
+ export function localizeStreamMember(member) {
155
+ const { role, user, user_id, created_at } = member;
156
+ return {
157
+ id: user?.id || user_id,
158
+ createdAt: created_at ? new Date(created_at) : new Date(),
159
+ role: (role || 'member'),
160
+ };
161
+ }
162
+ export function localizeStreamChannelMembers(streamChannel) {
163
+ const { state } = streamChannel;
164
+ const wid = streamChannel.getClient().userID;
165
+ return Object.values(state.members).map(localizeStreamMember).filter((member) => member.id !== wid);
166
+ }
167
+ export function localizeStreamChannelsMembersToMapByChannelId(streamChannels) {
168
+ return streamChannels.reduce((accumulator, channel) => {
169
+ const members = localizeStreamChannelMembers(channel);
170
+ const channelId = channel.data?.id;
171
+ accumulator[channelId] = members;
172
+ return accumulator;
173
+ }, {});
174
+ }
175
+ export function localizeStreamChannel(streamChannel) {
176
+ const normalizedChannel = normalizeStreamChannel(streamChannel);
177
+ const { data, state } = streamChannel;
178
+ const wid = streamChannel.getClient().userID || '';
179
+ const createdAt = new Date(normalizedChannel.createdAt);
180
+ const updatedAt = new Date(normalizedChannel.updatedAt || normalizedChannel?.createdBy);
181
+ const members = Object.values(state.members).filter(({ user_id }) => user_id !== wid);
182
+ const userId = data?.type === ChannelType.DIRECT && members.length > 0 ? members[0].user_id : null;
183
+ const unread = state.read[wid]?.unread_messages || 0;
184
+ const unreadMark = data?.unreadMarkUsers?.includes(wid) || false;
185
+ const lastMessage = streamChannel.lastMessage();
186
+ const normalizedLastMessage = lastMessage ? localizeStreamMessage(lastMessage, normalizedChannel.channelId, wid) : null;
187
+ const lastMessageAt = normalizedLastMessage ? normalizedLastMessage.createdAt : updatedAt || createdAt;
188
+ const lastRead = state.read[wid]?.last_read || null;
189
+ const role = state.membership.role || ChannelMemberRole.MEMBER;
190
+ const isArchived = Boolean(data?.hidden);
191
+ return {
192
+ ...normalizedChannel,
193
+ userId,
194
+ role,
195
+ createdAt,
196
+ updatedAt,
197
+ isArchived,
198
+ unread,
199
+ unreadMark,
200
+ isExternal: Boolean(normalizedChannel.external),
201
+ isBroadcast: Boolean(normalizedChannel.broadcast),
202
+ lastRead,
203
+ lastMessage: normalizedLastMessage,
204
+ lastMessageAt,
205
+ };
206
+ }
207
+ export function normalizeStreamChannelReadIndicator(channelReadStatus, channelId) {
208
+ const { user, last_read } = channelReadStatus;
209
+ return {
210
+ userId: user.id,
211
+ lastRead: last_read,
212
+ user: localizeStreamUser(user),
213
+ channelId,
214
+ };
215
+ }
216
+ export function normalizeStreamChannelReadIndicators(streamChannel) {
217
+ const wid = streamChannel.getClient().userID;
218
+ const { state: { read }, data } = streamChannel;
219
+ return Object.values(read)
220
+ .filter(({ user }) => wid !== user.id)
221
+ .map((readIndicator) => {
222
+ return normalizeStreamChannelReadIndicator(readIndicator, data?.id);
223
+ });
224
+ }
225
+ export function normalizeStreamChannelOwnReadIndicators(streamChannel) {
226
+ const wid = streamChannel.getClient().userID;
227
+ const { state: { read }, data } = streamChannel;
228
+ return Object.values(read)
229
+ .filter(({ user }) => wid === user.id)
230
+ .map((readIndicator) => {
231
+ return normalizeStreamChannelReadIndicator(readIndicator, data?.id);
232
+ });
233
+ }
234
+ export function normalizeStreamChannelUsers(streamChannel) {
235
+ const { state } = streamChannel;
236
+ const wid = streamChannel.getClient().userID;
237
+ return Object.values(state.members)
238
+ .filter((member) => member.user && member.user.id !== wid)
239
+ .map((member) => localizeStreamUser(member.user));
240
+ }
241
+ export function normalizeStreamChannelUsersToMap(streamChannel) {
242
+ const normalizedUsers = normalizeStreamChannelUsers(streamChannel);
243
+ return normalizedUsers.reduce((accumulator, user) => {
244
+ accumulator[user.id] = user;
245
+ return accumulator;
246
+ }, {});
247
+ }
248
+ export function normalizeStreamChannelsUsersToMap(streamChannels) {
249
+ return streamChannels.reduce((accumulator, channel) => {
250
+ return {
251
+ ...normalizeStreamChannelUsersToMap(channel),
252
+ ...accumulator,
253
+ };
254
+ }, {});
255
+ }
256
+ export function normalizeStreamChannelsUsers(streamChannels) {
257
+ return Object.values(normalizeStreamChannelsUsersToMap(streamChannels));
258
+ }
@@ -1,5 +1,5 @@
1
- import { StreamChannel, StreamMessageResponse, StreamReactionResponse, StreamUserResponse, StreamChannelResponse, StreamChannelMemberResponse } from "./stream";
2
- import { LocalizedMessage, LocalizedUser } from "./types";
1
+ import { StreamChannel, StreamMessageResponse, StreamReactionResponse, StreamUserResponse, StreamChannelResponse, StreamChannelMemberResponse, StreamReadIndicator } from "./stream";
2
+ import { LocalizedMessage, LocalizedUser, LocalizedChannel, LocalizedChannelMember, LocalizedReadIndicator } from "./types";
3
3
  import { Channel, ChannelMember, Message, Reaction, User } from "@wildix/xbees-conversations-client";
4
4
  export declare function normalizeStreamUser(streamUser: StreamUserResponse): User;
5
5
  export declare function localizeStreamUser(streamUser: StreamUserResponse): LocalizedUser;
@@ -8,3 +8,14 @@ export declare function normalizeStreamMessage(streamMessage: StreamMessageRespo
8
8
  export declare function localizeStreamMessage(streamMessage: StreamMessageResponse, channelId: string, userId: string): LocalizedMessage;
9
9
  export declare function normalizeStreamChannel(channel: StreamChannel | StreamChannelResponse): Channel;
10
10
  export declare function normalizeStreamMember(member: StreamChannelMemberResponse): ChannelMember;
11
+ export declare function localizeStreamMember(member: Partial<StreamChannelMemberResponse>): LocalizedChannelMember;
12
+ export declare function localizeStreamChannelMembers(streamChannel: StreamChannel): LocalizedChannelMember[];
13
+ export declare function localizeStreamChannelsMembersToMapByChannelId(streamChannels: StreamChannel[]): Record<string, LocalizedChannelMember[]>;
14
+ export declare function localizeStreamChannel(streamChannel: StreamChannel): LocalizedChannel;
15
+ export declare function normalizeStreamChannelReadIndicator(channelReadStatus: StreamReadIndicator, channelId: string): LocalizedReadIndicator;
16
+ export declare function normalizeStreamChannelReadIndicators(streamChannel: StreamChannel): LocalizedReadIndicator[];
17
+ export declare function normalizeStreamChannelOwnReadIndicators(streamChannel: StreamChannel): LocalizedReadIndicator[];
18
+ export declare function normalizeStreamChannelUsers(streamChannel: StreamChannel): LocalizedUser[];
19
+ export declare function normalizeStreamChannelUsersToMap(streamChannel: StreamChannel): Record<string, LocalizedUser>;
20
+ export declare function normalizeStreamChannelsUsersToMap(streamChannels: StreamChannel[]): Record<string, LocalizedUser>;
21
+ export declare function normalizeStreamChannelsUsers(streamChannels: StreamChannel[]): LocalizedUser[];
@@ -1,4 +1,4 @@
1
- import { Channel, ChannelData, ChannelFilters, ChannelMembership, ChannelMemberResponse, ChannelSort, ChannelResponse, Event, ExtendableGenerics, LiteralStringForUnion, Message, MessageResponse, ReactionResponse, UR, UserResponse, ChannelAPIResponse, User, Reaction, PartialMessageUpdate, UpdatedMessage, PartialUpdateChannel } from 'stream-chat';
1
+ import { Channel, ChannelData, ChannelState, ChannelFilters, ChannelMembership, ChannelMemberResponse, ChannelSort, ChannelResponse, Event, ExtendableGenerics, LiteralStringForUnion, Message, MessageResponse, ReactionResponse, SearchAPIResponse, SyncResponse, UR, UserResponse, GetRepliesAPIResponse, GetReactionsAPIResponse, OwnUserResponse, ChannelAPIResponse, User, Reaction, PartialMessageUpdate, UpdatedMessage, PartialUpdateChannel } from 'stream-chat';
2
2
  import { MessageQuote, MessageForward, MessageAttachment, MessageGiphy, User as NormalizedUser, ChannelAccess, MessageSmsStatus, MessageWhatsAppStatus, ChannelWhatsAppStatus, Element } from "@wildix/xbees-conversations-client";
3
3
  export interface StreamChannelFields extends UR {
4
4
  subject?: string;
@@ -103,3 +103,10 @@ export type StreamChannelSort = ChannelSort<StreamType>;
103
103
  export type StreamChannelData = ChannelData<StreamType>;
104
104
  export type StreamPartialUpdateChannel = PartialUpdateChannel<StreamType>;
105
105
  export type StreamChannelAPIResponse = ChannelAPIResponse<StreamType>;
106
+ export type StreamSearchAPIResponse = SearchAPIResponse<StreamType>;
107
+ export type StreamSyncResponse = SyncResponse<StreamType>;
108
+ export type StreamGetRepliesAPIResponse = GetRepliesAPIResponse<StreamType>;
109
+ export type StreamOwnUserResponse = OwnUserResponse<StreamType>;
110
+ export type StreamChannelState = ChannelState<StreamType>;
111
+ export type StreamGetReactionsAPIResponse = GetReactionsAPIResponse<StreamType>;
112
+ export type StreamReadIndicator = (StreamChannelState['read'])[keyof StreamChannelState['read']];
@@ -1,4 +1,4 @@
1
- import { Channel, ChannelMemberRole, Message, Reaction, User } from "@wildix/xbees-conversations-client";
1
+ import { Channel, ChannelMemberRole, ChannelMember, Message, Reaction, User } from "@wildix/xbees-conversations-client";
2
2
  export declare enum MessageDirection {
3
3
  INCOMING = "incoming",
4
4
  OUTGOING = "outgoing"
@@ -17,9 +17,26 @@ export interface LocalizedMessage extends Omit<Message, 'user' | 'createdAt' | '
17
17
  createdAt: Date;
18
18
  updatedAt?: Date;
19
19
  }
20
- export interface LocalizedChannel extends Omit<Channel, 'createdAt' | 'updatedAt'> {
21
- userId?: string;
22
- role: ChannelMemberRole;
20
+ export interface LocalizedChannel extends Omit<Channel, 'createdAt' | 'updatedAt' | 'is_broadcast' | 'external' | 'hidden'> {
23
21
  createdAt: Date;
22
+ isArchived: boolean;
23
+ isBroadcast?: boolean;
24
+ isExternal: boolean;
25
+ lastMessage: LocalizedMessage | null;
26
+ lastMessageAt: Date;
27
+ lastRead: Date;
28
+ role: ChannelMemberRole;
29
+ unread: number;
30
+ unreadMark: boolean;
24
31
  updatedAt?: Date;
32
+ userId: string | null;
33
+ }
34
+ export interface LocalizedReadIndicator {
35
+ userId: string;
36
+ lastRead: Date;
37
+ user: LocalizedUser;
38
+ channelId: string;
39
+ }
40
+ export interface LocalizedChannelMember extends Omit<ChannelMember, 'createdAt'> {
41
+ createdAt: Date;
25
42
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wildix/xbees-conversations-utils",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "description": "",
5
5
  "main": "./dist-cjs/index.js",
6
6
  "module": "./dist-es/index.js",