@webitel/chat-web-sdk 0.0.3 → 0.0.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.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _webitel_api_services_gen_models from '@webitel/api-services/gen/models';
2
- import { WebitelImApiGatewayV1HistoryMessage, WebitelImApiGatewayV1SearchMessageHistoryResponse, WebitelImApiGatewayV1ContactList, WebitelImApiGatewayV1Contact, WebitelImApiGatewayV1SendTextRequest, WebitelImApiGatewayV1SendTextResponse, ContactsSearchParams, MessageHistorySearchThreadMessagesHistoryWebitelImApiGatewayV1MessageHistoryParams, WebitelImApiGatewayV1Thread, WebitelImApiGatewayV1SearchThreadResponse, ThreadManagementSearchParams } from '@webitel/api-services/gen/models';
2
+ import { WebitelImApiGatewayV1HistoryMessage, WebitelImApiGatewayV1SearchMessageHistoryResponse, WebitelImApiGatewayV1SendDocumentRequest, WebitelImApiGatewayV1SendImageRequest, WebitelImApiGatewayV1ContactList, WebitelImApiGatewayV1Contact, WebitelImApiGatewayV1SendTextRequest, WebitelImApiGatewayV1SendTextResponse, ContactsSearchParams, MessageHistorySearchThreadMessagesHistoryWebitelImApiGatewayV1MessageHistoryParams, WebitelImApiGatewayV1SendDocumentResponse, WebitelImApiGatewayV1SendImageResponse, WebitelImApiGatewayV1Thread, WebitelImApiGatewayV1SearchThreadResponse, ThreadManagementSearchParams } from '@webitel/api-services/gen/models';
3
3
  export { WebitelImApiGatewayV1Authorization as AccountModel, WebitelImApiGatewayV1Contact as ContactModel, ContactsSearchParams as ContactSearchParams, MessageHistorySearchThreadMessagesHistoryWebitelImApiGatewayV1MessageHistoryParams as MessageHistorySearchParams, WebitelImApiGatewayV1HistoryMessage as MessageModel, WebitelImApiGatewayV1Thread as ThreadModel, ThreadManagementSearchParams as ThreadSearchParams } from '@webitel/api-services/gen/models';
4
4
  import { AxiosInstance } from 'axios';
5
5
 
@@ -41,8 +41,18 @@ interface IMessage extends WebitelImApiGatewayV1HistoryMessage {
41
41
  /**
42
42
  * API response with `messages` replaced by instantiated SDK `Message` classes.
43
43
  */
44
- type MessageHistorySearchResult = Omit<WebitelImApiGatewayV1SearchMessageHistoryResponse, 'messages'> & {
45
- messages: IMessage[];
44
+ type MessageHistorySearchResult = Omit<WebitelImApiGatewayV1SearchMessageHistoryResponse, 'items'> & {
45
+ items: IMessage[];
46
+ };
47
+ type MessageSendFileParams = Omit<WebitelImApiGatewayV1SendDocumentRequest, 'document'> & {
48
+ document?: NonNullable<WebitelImApiGatewayV1SendDocumentRequest['document']>;
49
+ file: File;
50
+ threadId: string;
51
+ };
52
+ type MessageSendImageParams = Omit<WebitelImApiGatewayV1SendImageRequest, 'image'> & {
53
+ image?: NonNullable<WebitelImApiGatewayV1SendImageRequest['image']>;
54
+ file: File;
55
+ threadId: string;
46
56
  };
47
57
 
48
58
  interface IContact extends WebitelImApiGatewayV1Contact, ServiceConfigurable {
@@ -56,10 +66,13 @@ declare function useContactsService(config: ServiceConfig): {
56
66
  fetchContacts: (params?: ContactsSearchParams) => Promise<ContactSearchResult>;
57
67
  };
58
68
 
59
- declare function useMessagesService(config: ServiceConfig): {
69
+ interface IMessagesService {
60
70
  fetchMessageHistory: (threadId: string, params?: MessageHistorySearchThreadMessagesHistoryWebitelImApiGatewayV1MessageHistoryParams) => Promise<MessageHistorySearchResult>;
61
- sendTextMessage: (params: WebitelImApiGatewayV1SendTextRequest) => Promise<_webitel_api_services_gen_models.WebitelImApiGatewayV1SendTextResponse>;
62
- };
71
+ sendTextMessage: (params: WebitelImApiGatewayV1SendTextRequest) => Promise<WebitelImApiGatewayV1SendTextResponse>;
72
+ sendFileMessage: (params: MessageSendFileParams) => Promise<WebitelImApiGatewayV1SendDocumentResponse>;
73
+ sendImageMessage: (params: MessageSendImageParams) => Promise<WebitelImApiGatewayV1SendImageResponse>;
74
+ }
75
+ declare function useMessagesService(config: ServiceConfig): IMessagesService;
63
76
 
64
77
  /**
65
78
  * @see https://github.com/webitel/im-delivery-service/blob/main/api/asyncapi/asyncapi.yaml#L56
@@ -103,13 +116,18 @@ declare class ChatsSocketClient implements IChatsSocketClient {
103
116
  }
104
117
  declare function createChatsSocketClient(config: SocketConfig): ChatsSocketClient;
105
118
 
119
+ type ThreadSendTextMessageParams = Omit<WebitelImApiGatewayV1SendTextRequest, 'body' | 'to'>;
120
+ type ThreadSendFileMessageParams = Omit<MessageSendFileParams, 'file' | 'threadId' | 'to'>;
121
+ type ThreadSendImageMessageParams = Omit<MessageSendImageParams, 'file' | 'threadId' | 'to'>;
106
122
  interface IThread extends WebitelImApiGatewayV1Thread, ServiceConfigurable {
107
123
  id: string;
108
124
  fetchMessageHistory: (params?: MessageHistorySearchThreadMessagesHistoryWebitelImApiGatewayV1MessageHistoryParams) => Promise<MessageHistorySearchResult>;
109
- sendTextMessage: (body: string, params?: Omit<WebitelImApiGatewayV1SendTextRequest, 'body' | 'to'>) => Promise<WebitelImApiGatewayV1SendTextResponse>;
125
+ sendTextMessage: (body: string, params?: ThreadSendTextMessageParams) => Promise<WebitelImApiGatewayV1SendTextResponse>;
126
+ sendFileMessage: (file: File, params?: ThreadSendFileMessageParams) => Promise<WebitelImApiGatewayV1SendDocumentResponse>;
127
+ sendImageMessage: (file: File, params?: ThreadSendImageMessageParams) => Promise<WebitelImApiGatewayV1SendImageResponse>;
110
128
  }
111
- type ThreadSearchResult = Omit<WebitelImApiGatewayV1SearchThreadResponse, 'threads'> & {
112
- threads: IThread[];
129
+ type ThreadSearchResult = Omit<WebitelImApiGatewayV1SearchThreadResponse, 'items'> & {
130
+ items: IThread[];
113
131
  };
114
132
 
115
133
  declare function useThreadsService(config: ServiceConfig): {
package/dist/index.js CHANGED
@@ -7170,6 +7170,41 @@ var getMessagesService = ({ axiosInstance }) => {
7170
7170
  return applyTransform(response.data, [
7171
7171
  snakeToCamel_transformer_default()
7172
7172
  ]);
7173
+ },
7174
+ uploadFile: async (threadId, file2) => {
7175
+ const formData = new FormData();
7176
+ formData.append("file", file2);
7177
+ const response = await axiosInstance.post(
7178
+ `/api/storage/file/${threadId}/upload`,
7179
+ formData
7180
+ );
7181
+ return applyTransform(response.data, [
7182
+ snakeToCamel_transformer_default()
7183
+ ]);
7184
+ },
7185
+ sendFileMessage: async (params) => {
7186
+ const transformedParams = applyTransform(params, [
7187
+ camelToSnake_transformer_default()
7188
+ ]);
7189
+ const response = await axiosInstance.post(
7190
+ "/v1/messages/file",
7191
+ transformedParams
7192
+ );
7193
+ return applyTransform(response.data, [
7194
+ snakeToCamel_transformer_default()
7195
+ ]);
7196
+ },
7197
+ sendImageMessage: async (params) => {
7198
+ const transformedParams = applyTransform(params, [
7199
+ camelToSnake_transformer_default()
7200
+ ]);
7201
+ const response = await axiosInstance.post(
7202
+ "/v1/messages/image",
7203
+ transformedParams
7204
+ );
7205
+ return applyTransform(response.data, [
7206
+ snakeToCamel_transformer_default()
7207
+ ]);
7173
7208
  }
7174
7209
  };
7175
7210
  };
@@ -7195,12 +7230,67 @@ var fetchMessageHistory = async (config3, threadId, params = {}) => {
7195
7230
  const rawResponse = await fetchRawMessageHistory(config3)(threadId, params);
7196
7231
  return {
7197
7232
  ...rawResponse,
7198
- messages: instantiateMessages(rawResponse.messages ?? [], {
7233
+ items: instantiateMessages(rawResponse.items ?? [], {
7199
7234
  serviceConfig: config3
7200
7235
  })
7201
7236
  };
7202
7237
  };
7203
7238
 
7239
+ // src/modules/messages/utils/sendFileMessage.ts
7240
+ var sendFileMessage = async (config3, params) => {
7241
+ const { file: file2, threadId, document, ...restParams } = params;
7242
+ const uploadResponse = await getMessagesService(config3).uploadFile(
7243
+ threadId,
7244
+ file2
7245
+ );
7246
+ const fileId = uploadResponse.id ?? uploadResponse.fileId;
7247
+ if (!fileId) {
7248
+ throw new Error("Storage upload did not return file id");
7249
+ }
7250
+ return getMessagesService(config3).sendFileMessage({
7251
+ ...restParams,
7252
+ document: {
7253
+ ...document,
7254
+ documents: [
7255
+ {
7256
+ fileName: file2.name,
7257
+ id: fileId,
7258
+ mimeType: file2.type,
7259
+ sizeBytes: String(file2.size),
7260
+ url: uploadResponse.fileUrl
7261
+ }
7262
+ ]
7263
+ }
7264
+ });
7265
+ };
7266
+
7267
+ // src/modules/messages/utils/sendImageMessage.ts
7268
+ var sendImageMessage = async (config3, params) => {
7269
+ const { file: file2, threadId, image, ...restParams } = params;
7270
+ const uploadResponse = await getMessagesService(config3).uploadFile(
7271
+ threadId,
7272
+ file2
7273
+ );
7274
+ const imageId = uploadResponse.id ?? uploadResponse.fileId;
7275
+ if (!imageId) {
7276
+ throw new Error("Storage upload did not return file id");
7277
+ }
7278
+ return getMessagesService(config3).sendImageMessage({
7279
+ ...restParams,
7280
+ image: {
7281
+ ...image,
7282
+ images: [
7283
+ {
7284
+ id: imageId,
7285
+ link: uploadResponse.fileUrl,
7286
+ mimeType: file2.type,
7287
+ name: file2.name
7288
+ }
7289
+ ]
7290
+ }
7291
+ });
7292
+ };
7293
+
7204
7294
  // src/modules/messages/utils/sendTextMessage.ts
7205
7295
  var sendTextMessage = async (config3, params) => {
7206
7296
  return getMessagesService(config3).sendTextMessage(params);
@@ -7210,15 +7300,17 @@ var sendTextMessage = async (config3, params) => {
7210
7300
  function useMessagesService(config3) {
7211
7301
  return {
7212
7302
  fetchMessageHistory: (threadId, params) => fetchMessageHistory(config3, threadId, params ?? {}),
7213
- sendTextMessage: (params) => sendTextMessage(config3, params)
7303
+ sendTextMessage: (params) => sendTextMessage(config3, params),
7304
+ sendFileMessage: (params) => sendFileMessage(config3, params),
7305
+ sendImageMessage: (params) => sendImageMessage(config3, params)
7214
7306
  };
7215
7307
  }
7216
7308
 
7217
7309
  // src/modules/contacts/classes/Contact.class.ts
7218
7310
  var Contact = class {
7219
7311
  _serviceConfig;
7220
- subject;
7221
- issId;
7312
+ sub;
7313
+ iss;
7222
7314
  constructor(rawContact, {
7223
7315
  serviceConfig
7224
7316
  }) {
@@ -7231,8 +7323,8 @@ var Contact = class {
7231
7323
  body,
7232
7324
  to: {
7233
7325
  contact: {
7234
- sub: this.subject,
7235
- iss: this.issId
7326
+ sub: this.sub,
7327
+ iss: this.iss
7236
7328
  }
7237
7329
  }
7238
7330
  });
@@ -7317,11 +7409,11 @@ var SocketClientConnectionStatus = {
7317
7409
 
7318
7410
  // src/modules/socket/utils/getSocketMessageNameFromEvent.ts
7319
7411
  var wireToGetter = {
7320
- [ChatsSocketMessage.Connected]: (e) => e.connected,
7321
- [ChatsSocketMessage.Disconnected]: (e) => e.disconnected,
7322
- [ChatsSocketMessage.Error]: (e) => e.error,
7323
- [ChatsSocketMessage.ThreadMessage]: (e) => e.message,
7324
- [ChatsSocketMessage.ThreadCreated]: (e) => e.threadCreated
7412
+ // [ChatsSocketMessage.Connected]: (e) => e.connected,
7413
+ // [ChatsSocketMessage.Disconnected]: (e) => e.disconnected,
7414
+ // [ChatsSocketMessage.Error]: (e) => e.error,
7415
+ // [ChatsSocketMessage.ThreadMessage]: (e) => e.message,
7416
+ // [ChatsSocketMessage.ThreadCreated]: (e) => e.threadCreated,
7325
7417
  };
7326
7418
  function getSocketMessageNameFromEvent(sourceEvent) {
7327
7419
  for (const value of Object.values(ChatsSocketMessage)) {
@@ -7413,6 +7505,26 @@ var Thread = class {
7413
7505
  }
7414
7506
  });
7415
7507
  }
7508
+ async sendFileMessage(file2, params = {}) {
7509
+ return useMessagesService(this.serviceConfig).sendFileMessage({
7510
+ ...params,
7511
+ file: file2,
7512
+ threadId: this.id,
7513
+ to: {
7514
+ threadId: this.id
7515
+ }
7516
+ });
7517
+ }
7518
+ async sendImageMessage(file2, params = {}) {
7519
+ return useMessagesService(this.serviceConfig).sendImageMessage({
7520
+ ...params,
7521
+ file: file2,
7522
+ threadId: this.id,
7523
+ to: {
7524
+ threadId: this.id
7525
+ }
7526
+ });
7527
+ }
7416
7528
  get serviceConfig() {
7417
7529
  return this._serviceConfig;
7418
7530
  }
@@ -7460,7 +7572,7 @@ var fetchThreads = async (config3, params = {}) => {
7460
7572
  const rawThreadsResponse = await fetchRawThreads(config3)(params);
7461
7573
  return {
7462
7574
  ...rawThreadsResponse,
7463
- threads: instantiateThreads(rawThreadsResponse.threads ?? [], {
7575
+ items: instantiateThreads(rawThreadsResponse.items ?? [], {
7464
7576
  serviceConfig: config3
7465
7577
  })
7466
7578
  };