@zohoim/client-sdk 1.0.0-poc80 → 1.0.0-poc82

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.
@@ -12,6 +12,10 @@ export default class MessageService extends IMessageRepository {
12
12
  return this.messageRepository.getMessages(request);
13
13
  }
14
14
 
15
+ async getMessage(request) {
16
+ return this.messageRepository.getMessage(request);
17
+ }
18
+
15
19
  async getFullContent(request) {
16
20
  return this.messageRepository.getFullContent(request);
17
21
  }
@@ -43,6 +47,7 @@ export default class MessageService extends IMessageRepository {
43
47
  toJSON() {
44
48
  return {
45
49
  getMessages: this.getMessages.bind(this),
50
+ getMessage: this.getMessage.bind(this),
46
51
  getFullContent: this.getFullContent.bind(this),
47
52
  sendMessage: this.sendMessage.bind(this),
48
53
  sendAttachment: this.sendAttachment.bind(this),
@@ -0,0 +1,14 @@
1
+ import RequestBuilder from "../RequestBuilder";
2
+
3
+ function getMessageRequest() {
4
+ let {
5
+ params = {}
6
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7
+ return new RequestBuilder().withParams({
8
+ sessionId: null,
9
+ messageId: null,
10
+ ...params
11
+ }).build();
12
+ }
13
+
14
+ export default getMessageRequest;
@@ -1,4 +1,5 @@
1
1
  export { default as getMessagesRequest } from "./getMessagesRequest";
2
+ export { default as getMessageRequest } from "./getMessageRequest";
2
3
  export { default as deleteMessageRequest } from "./deleteMessageRequest";
3
4
  export { default as getFullContentRequest } from "./getFullContentRequest";
4
5
  export { default as resendMessageRequest } from "./resendMessageRequest";
@@ -14,6 +14,7 @@ function initiateSessionRequest() {
14
14
  cannedMessageId: null,
15
15
  language: null,
16
16
  parameters: {},
17
+ message: null,
17
18
  ...body
18
19
  }).build();
19
20
  }
@@ -7,7 +7,6 @@ function sendAttachmentRequest() {
7
7
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
8
8
  return new RequestBuilder().withParams({
9
9
  sessionId: null,
10
- messageId: null,
11
10
  ...params
12
11
  }).withBody({
13
12
  message: null,
@@ -10,6 +10,8 @@ function sendMessageRequest() {
10
10
  ...params
11
11
  }).withBody({
12
12
  message: null,
13
+ replyToMessageId: null,
14
+ meta: null,
13
15
  ...body
14
16
  }).build();
15
17
  }
@@ -2,11 +2,15 @@ import RequestBuilder from "../RequestBuilder";
2
2
 
3
3
  function markSessionAsReadRequest() {
4
4
  let {
5
- body = {}
5
+ body = {},
6
+ params = {}
6
7
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7
8
  return new RequestBuilder().withBody({
8
9
  lastSeenMessageId: null,
9
10
  ...body
11
+ }).withParams({
12
+ sessionId: null,
13
+ ...params
10
14
  }).build();
11
15
  }
12
16
 
@@ -21,6 +21,14 @@ export default class Actor {
21
21
  return type === ActorType.BOT;
22
22
  }
23
23
 
24
+ static isEnduser(type) {
25
+ return type === ActorType.ENDUSER;
26
+ }
27
+
28
+ static isSystemMessage(type) {
29
+ return type === ActorType.SYSTEM;
30
+ }
31
+
24
32
  toJSON() {
25
33
  return { ...this.data
26
34
  };
@@ -1,5 +1,6 @@
1
1
  import { validateSchema } from "../../../core/utils";
2
2
  import { ActionSchema } from "../../schema";
3
+ import { ActionType } from "../../enum";
3
4
  export default class Action {
4
5
  constructor() {
5
6
  let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -11,6 +12,10 @@ export default class Action {
11
12
  };
12
13
  }
13
14
 
15
+ static isTransferAction(action) {
16
+ return action === ActionType.TRANSFER;
17
+ }
18
+
14
19
  toJSON() {
15
20
  return { ...this.data
16
21
  };
@@ -1,4 +1,5 @@
1
1
  import { validateSchema } from "../../../core/utils";
2
+ import { ExternalInfoAction } from "../../enum";
2
3
  import { ExternalInfoSchema } from "../../schema";
3
4
  export default class ExternalInfo {
4
5
  constructor() {
@@ -9,6 +10,14 @@ export default class ExternalInfo {
9
10
  };
10
11
  }
11
12
 
13
+ static isGCConversationEnded(action) {
14
+ return action === ExternalInfoAction.GC_CONVERSATION_ENDED;
15
+ }
16
+
17
+ static isZIAConversationEnded(action) {
18
+ return action === ExternalInfoAction.ZIA_CONVERSATION_ENDED;
19
+ }
20
+
12
21
  toJSON() {
13
22
  return { ...this.data
14
23
  };
@@ -1,6 +1,7 @@
1
1
  import { validateSchema } from "../../../core/utils";
2
2
  import { Actor } from "../Actor";
3
3
  import { InfoSchema } from "../../schema/message";
4
+ import { InfoAction } from "../../enum";
4
5
  export default class Info {
5
6
  constructor() {
6
7
  let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -13,6 +14,18 @@ export default class Info {
13
14
  };
14
15
  }
15
16
 
17
+ static isChatTransfer(action) {
18
+ return action === InfoAction.CHAT_TRANSFER;
19
+ }
20
+
21
+ static isAutoAssign(action) {
22
+ return action === InfoAction.CHAT_AUTO_ASSIGN;
23
+ }
24
+
25
+ static isEndSession(action) {
26
+ return action === InfoAction.END_SESSION;
27
+ }
28
+
16
29
  toJSON() {
17
30
  return { ...this.data
18
31
  };
@@ -34,7 +34,8 @@ export default class Message {
34
34
  template: validatedData.template,
35
35
  type: validatedData.type,
36
36
  isRead: validatedData.isRead,
37
- article: validatedData.article
37
+ article: validatedData.article,
38
+ webUrl: validatedData.webUrl
38
39
  };
39
40
  }
40
41
 
@@ -50,6 +51,10 @@ export default class Message {
50
51
  return direction === MessageDirection.OUT;
51
52
  }
52
53
 
54
+ static isIncoming(direction) {
55
+ return direction === MessageDirection.IN;
56
+ }
57
+
53
58
  static isInfo(type) {
54
59
  return type === MessageTypes.INFO;
55
60
  }
@@ -58,8 +63,27 @@ export default class Message {
58
63
  return type === MessageTypes.ATTACHMENT;
59
64
  }
60
65
 
61
- static isAutoSent(systemMsgType) {
62
- return !!systemMsgType;
66
+ static isTemplate(type) {
67
+ return type === MessageTypes.TEMPLATE;
68
+ }
69
+
70
+ static isSystemMessage(message) {
71
+ return !!message;
72
+ }
73
+
74
+ static isHapinessRating(systemMessageType) {
75
+ return systemMessageType === MessageTypes.CX_HAPPINESS_SURVEY;
76
+ }
77
+
78
+ static isFailed(status) {
79
+ return status === MessageStatus.FAILED;
80
+ }
81
+
82
+ static getMetaValue() {
83
+ let meta = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
84
+ let key = arguments.length > 1 ? arguments[1] : undefined;
85
+ const item = meta.find(item => item.name === key);
86
+ return item ? item.value : '';
63
87
  }
64
88
 
65
89
  toJSON() {
@@ -40,6 +40,10 @@ export default class Session {
40
40
  return replyStatus === SessionReplyStatus.CHANNEL_INACTIVE;
41
41
  }
42
42
 
43
+ static isReplyAccepted(replyStatus) {
44
+ return replyStatus === SessionReplyStatus.ACCEPTED;
45
+ }
46
+
43
47
  static isAssignedToOtherService(replyStatus) {
44
48
  return replyStatus === SessionReplyStatus.ASSIGNED_TO_OTHER_SERVICE;
45
49
  }
@@ -1,7 +1,7 @@
1
1
  const ActorType = {
2
2
  AGENT: 'AGENT',
3
3
  BOT: 'BOT',
4
- ENDUSER: 'ENDUSER',
4
+ ENDUSER: 'END_USER',
5
5
  SYSTEM: 'SYSTEM'
6
6
  };
7
7
  export default ActorType;
@@ -1,6 +1,6 @@
1
1
  const MessageDirection = {
2
- OUT: 'OUT',
3
- IN: 'IN'
2
+ OUT: 'out',
3
+ IN: 'in'
4
4
  }; // For im api need to changes this as out and in
5
5
 
6
6
  export default MessageDirection;
@@ -6,6 +6,10 @@ const MessageTypes = {
6
6
  LAYOUT: 'LAYOUT',
7
7
  EXTERNAL_INFO: 'EXTERNAL_INFO',
8
8
  TEMPLATE: 'TEMPLATE',
9
- ACTION: 'ACTION'
9
+ ACTION: 'ACTION',
10
+ WELCOMEMSG: 'WELCOMEMSG',
11
+ WORKFLOW_MESSAGE: 'WORKFLOW_MESSAGE',
12
+ WORKFLOW_NOTIFICATION: 'WORKFLOW_NOTIFICATION',
13
+ CX_HAPPINESS_SURVEY: 'CX_HAPPINESS_SURVEY'
10
14
  };
11
15
  export default MessageTypes;
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { ModuleNames } from "../../../../core/constants";
3
3
  import BaseAPI from "../../../../infrastructure/api/BaseAPI";
4
- import { getMessagesRequest, deleteMessageRequest, getFullContentRequest, resendMessageRequest, sendAttachmentRequest, sendMessageRequest, initiateSessionRequest, searchMessagesRequest } from "../../../dto";
4
+ import { getMessagesRequest, getMessageRequest, deleteMessageRequest, getFullContentRequest, resendMessageRequest, sendAttachmentRequest, sendMessageRequest, initiateSessionRequest, searchMessagesRequest } from "../../../dto";
5
5
  export default class IMessageRepository extends BaseAPI {
6
6
  constructor() {
7
7
  super({
@@ -14,6 +14,11 @@ export default class IMessageRepository extends BaseAPI {
14
14
  throw new Error('Method not implemented.');
15
15
  }
16
16
 
17
+ getMessage() {
18
+ let request = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getMessageRequest();
19
+ throw new Error('Method not implemented.');
20
+ }
21
+
17
22
  getFullContent() {
18
23
  let request = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getFullContentRequest();
19
24
  throw new Error('Method not implemented.');
@@ -107,6 +107,10 @@ const MessageSchema = {
107
107
  article: {
108
108
  type: 'object',
109
109
  required: false
110
+ },
111
+ webUrl: {
112
+ type: 'string',
113
+ required: false
110
114
  }
111
115
  };
112
116
  export default MessageSchema;
@@ -2,6 +2,7 @@ import { ResponseTypes } from "../../core/constants";
2
2
  import { ResponseUtils } from "../../core/utils";
3
3
  import configRegistry from "../config/configRegistry";
4
4
  import { getRegistryConfig } from "./registry";
5
+ import UrlBuilder from "./UrlBuilder";
5
6
  export default class BaseAPI {
6
7
  constructor() {
7
8
  let {
@@ -9,78 +10,30 @@ export default class BaseAPI {
9
10
  configProvider = configRegistry,
10
11
  registryProvider = {
11
12
  getRegistryConfig
12
- }
13
+ },
14
+ urlBuilder = new UrlBuilder()
13
15
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
14
16
  this.configProvider = configProvider;
15
17
  this.registryProvider = registryProvider;
16
18
  this.httpClient = this.configProvider.getHttpClient();
17
19
  this.baseURL = this.configProvider.getBaseURL();
18
20
  this.module = module;
21
+ this.urlBuilder = urlBuilder;
19
22
  }
20
23
 
21
- replacePathParams(url, params) {
22
- let _url = url;
23
- Object.entries(params).forEach(_ref => {
24
- let [key, value] = _ref;
25
- _url = url.replace(`:${key}`, value);
26
- });
27
- return _url;
28
- }
29
-
30
- buildUrl(_ref2) {
31
- let {
32
- url,
33
- params,
34
- query
35
- } = _ref2;
36
-
37
- const _params = params || {};
38
-
39
- const _query = query || {};
40
-
41
- let _url = this.replacePathParams(url, _params);
42
-
43
- if (this.baseURL) {
44
- _url = `${this.baseURL}${_url}`;
45
- }
46
-
47
- const queryString = this.buildQuery(_query);
48
-
49
- if (queryString) {
50
- return `${_url}?${queryString}`;
51
- }
52
-
53
- return _url;
54
- }
55
-
56
- buildQuery(query) {
57
- const filteredQuery = Object.entries(query).filter(_ref3 => {
58
- let [, value] = _ref3;
59
- return value !== undefined && value !== null && value !== '';
60
- }).reduce((acc, _ref4) => {
61
- let [key, value] = _ref4;
62
- acc[key] = value;
63
- return acc;
64
- }, {});
65
- return Object.entries(filteredQuery).map(_ref5 => {
66
- let [key, value] = _ref5;
67
- return `${key}=${value}`;
68
- }).join('&');
69
- }
70
-
71
- async request(_ref6) {
24
+ async request(_ref) {
72
25
  let {
73
26
  request,
74
27
  operation,
75
28
  header
76
- } = _ref6;
29
+ } = _ref;
77
30
  const config = this.registryProvider.getRegistryConfig(this.module, operation);
78
31
 
79
32
  if (!config) {
80
33
  throw new Error(`Operation "${operation}" not found in registry for module "${this.module}"`);
81
34
  }
82
35
 
83
- const url = this.buildUrl({
36
+ const url = this.urlBuilder.buildUrl({
84
37
  url: config.endpoint,
85
38
  params: request.params || {},
86
39
  query: request.query || {}
@@ -121,7 +74,7 @@ export default class BaseAPI {
121
74
  Object.prototype.hasOwnProperty.call(customPrototype, methodName);
122
75
  }
123
76
 
124
- async executeAPICall(_ref7) {
77
+ async executeAPICall(_ref2) {
125
78
  let {
126
79
  operation,
127
80
  request,
@@ -129,7 +82,7 @@ export default class BaseAPI {
129
82
  customAPI,
130
83
  adapter,
131
84
  responseType = ResponseTypes.SINGLE
132
- } = _ref7;
85
+ } = _ref2;
133
86
  const response = await apiProxy[operation](request);
134
87
  const isOverridden = this.isMethodOverridden(customAPI, operation);
135
88
 
@@ -0,0 +1,53 @@
1
+ export default class UrlBuilder {
2
+ constructor(baseURL) {
3
+ this.baseURL = baseURL;
4
+ }
5
+
6
+ replacePathParams(url, params) {
7
+ let processedUrl = url;
8
+ Object.entries(params).forEach(_ref => {
9
+ let [key, value] = _ref;
10
+ processedUrl = processedUrl.replace(`:${key}`, value);
11
+ });
12
+ return processedUrl;
13
+ }
14
+
15
+ buildUrl(_ref2) {
16
+ let {
17
+ url,
18
+ params,
19
+ query
20
+ } = _ref2;
21
+ const paramsObj = params || {};
22
+ const queryObj = query || {};
23
+ let processedUrl = this.replacePathParams(url, paramsObj);
24
+
25
+ if (this.baseURL) {
26
+ processedUrl = `${this.baseURL}${processedUrl}`;
27
+ }
28
+
29
+ const queryString = this.buildQuery(queryObj);
30
+
31
+ if (queryString) {
32
+ return `${processedUrl}?${queryString}`;
33
+ }
34
+
35
+ return processedUrl;
36
+ }
37
+
38
+ buildQuery(query) {
39
+ const filteredQuery = Object.entries(query).filter(_ref3 => {
40
+ let [, value] = _ref3;
41
+ return value !== undefined && value !== null && value !== '';
42
+ }).reduce((acc, _ref4) => {
43
+ let [key, value] = _ref4;
44
+ acc[key] = value;
45
+ return acc;
46
+ }, {});
47
+ return Object.entries(filteredQuery).map(_ref5 => {
48
+ let [key, value] = _ref5;
49
+ return `${key}=${value}`;
50
+ }).join('&');
51
+ }
52
+
53
+ }
@@ -1,4 +1,4 @@
1
- import { getMessagesRequest, deleteMessageRequest, getFullContentRequest, resendMessageRequest, sendAttachmentRequest, sendMessageRequest, initiateSessionRequest, searchMessagesRequest } from "../../../domain/dto";
1
+ import { getMessagesRequest, deleteMessageRequest, getFullContentRequest, resendMessageRequest, sendAttachmentRequest, sendMessageRequest, initiateSessionRequest, searchMessagesRequest, getMessageRequest } from "../../../domain/dto";
2
2
  import { IMessageRepository } from "../../../domain/interfaces/repositories";
3
3
  export default class MessageAPI extends IMessageRepository {
4
4
  async getMessages() {
@@ -11,6 +11,16 @@ export default class MessageAPI extends IMessageRepository {
11
11
  return httpRequest;
12
12
  }
13
13
 
14
+ async getMessage() {
15
+ let request = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getMessageRequest();
16
+ const operation = 'getMessage';
17
+ const httpRequest = await this.request({
18
+ operation,
19
+ request
20
+ });
21
+ return httpRequest;
22
+ }
23
+
14
24
  async getFullContent() {
15
25
  let request = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getFullContentRequest();
16
26
  const operation = 'getFullContent';
@@ -1,5 +1,5 @@
1
1
  import { HTTP_METHODS } from "../../../../core/constants";
2
- import { deleteMessageRequest, getFullContentRequest, getMessagesRequest, initiateSessionRequest, resendMessageRequest, sendAttachmentRequest, sendMessageRequest, searchMessagesRequest } from "../../../../domain/dto";
2
+ import { deleteMessageRequest, getFullContentRequest, getMessagesRequest, initiateSessionRequest, resendMessageRequest, sendAttachmentRequest, sendMessageRequest, searchMessagesRequest, getMessageRequest } from "../../../../domain/dto";
3
3
  import constructChannelEndPoint from "../channels/constructChannelEndPoint";
4
4
  import constructMessageEndPoint from "./constructMessageEndPoint";
5
5
  import createAPIRegistry from "../createAPIRegistry";
@@ -17,6 +17,10 @@ function getMessages() {
17
17
  return createAPIRegistry(constructMessageEndPoint(MESSAGES_URL), HTTP_METHODS.GET, getMessagesRequest());
18
18
  }
19
19
 
20
+ function getMessage() {
21
+ return createAPIRegistry(constructMessageEndPoint(SINGLE_MESSAGE_URL), HTTP_METHODS.GET, getMessageRequest());
22
+ }
23
+
20
24
  function getFullContent() {
21
25
  return createAPIRegistry(constructMessageEndPoint(FULL_CONTENT_URL), HTTP_METHODS.GET, getFullContentRequest());
22
26
  }
@@ -47,6 +51,7 @@ function searchMessages() {
47
51
 
48
52
  export default {
49
53
  getMessages,
54
+ getMessage,
50
55
  getFullContent,
51
56
  sendMessage,
52
57
  sendAttachment,
@@ -43,6 +43,13 @@ export default class MessageRepository extends IMessageRepository {
43
43
  });
44
44
  }
45
45
 
46
+ async getMessage(request) {
47
+ return this.invokeAPI({
48
+ operation: 'getMessage',
49
+ request
50
+ });
51
+ }
52
+
46
53
  async getFullContent(request) {
47
54
  return this.invokeAPI({
48
55
  operation: 'getFullContent',
@@ -98,6 +105,7 @@ export default class MessageRepository extends IMessageRepository {
98
105
  toJSON() {
99
106
  return {
100
107
  getMessages: this.getMessages.bind(this),
108
+ getMessage: this.getMessage.bind(this),
101
109
  getFullContent: this.getFullContent.bind(this),
102
110
  sendMessage: this.sendMessage.bind(this),
103
111
  sendAttachment: this.sendAttachment.bind(this),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zohoim/client-sdk",
3
- "version": "1.0.0-poc80",
3
+ "version": "1.0.0-poc82",
4
4
  "description": "To have the client sdk for the IM",
5
5
  "main": "es/index.js",
6
6
  "module": "es/index.js",