@botonic/core 0.56.0-alpha.0 → 0.57.0-rslib-esm.0

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.
Files changed (131) hide show
  1. package/lib/esm/constants.js +7 -7
  2. package/lib/esm/constants.js.map +1 -1
  3. package/lib/esm/core-bot.d.ts +3 -3
  4. package/lib/esm/core-bot.js +87 -50
  5. package/lib/esm/core-bot.js.map +1 -1
  6. package/lib/esm/debug/index.d.ts +1 -1
  7. package/lib/esm/debug/index.js +5 -4
  8. package/lib/esm/debug/index.js.map +1 -1
  9. package/lib/esm/debug/inspector.d.ts +1 -1
  10. package/lib/esm/debug/inspector.js +27 -21
  11. package/lib/esm/debug/inspector.js.map +1 -1
  12. package/lib/esm/handoff.d.ts +1 -1
  13. package/lib/esm/handoff.js +82 -53
  14. package/lib/esm/handoff.js.map +1 -1
  15. package/lib/esm/hubtype-service.d.ts +3 -3
  16. package/lib/esm/hubtype-service.js +100 -64
  17. package/lib/esm/hubtype-service.js.map +1 -1
  18. package/lib/esm/index.d.ts +9 -9
  19. package/lib/esm/index.js +21 -12
  20. package/lib/esm/index.js.map +1 -1
  21. package/lib/esm/models/ai-agents.d.ts +1 -8
  22. package/lib/esm/models/ai-agents.js +15 -16
  23. package/lib/esm/models/ai-agents.js.map +1 -1
  24. package/lib/esm/models/bot-config.js +6 -6
  25. package/lib/esm/models/bot-config.js.map +1 -1
  26. package/lib/esm/models/hubtype-analytics.d.ts +1 -1
  27. package/lib/esm/models/hubtype-analytics.js +10 -10
  28. package/lib/esm/models/hubtype-analytics.js.map +1 -1
  29. package/lib/esm/models/index.d.ts +4 -4
  30. package/lib/esm/models/index.js +11 -7
  31. package/lib/esm/models/index.js.map +1 -1
  32. package/lib/esm/models/legacy-types.js +24 -24
  33. package/lib/esm/models/legacy-types.js.map +1 -1
  34. package/lib/esm/package.json +3 -0
  35. package/lib/esm/plugins.d.ts +1 -1
  36. package/lib/esm/plugins.js +7 -8
  37. package/lib/esm/plugins.js.map +1 -1
  38. package/lib/esm/pusher-utils.js +15 -10
  39. package/lib/esm/pusher-utils.js.map +1 -1
  40. package/lib/esm/routing/index.d.ts +2 -2
  41. package/lib/esm/routing/index.js +7 -5
  42. package/lib/esm/routing/index.js.map +1 -1
  43. package/lib/esm/routing/router-utils.d.ts +1 -1
  44. package/lib/esm/routing/router-utils.js +37 -30
  45. package/lib/esm/routing/router-utils.js.map +1 -1
  46. package/lib/esm/routing/router.d.ts +2 -2
  47. package/lib/esm/routing/router.js +152 -149
  48. package/lib/esm/routing/router.js.map +1 -1
  49. package/lib/esm/testing/index.d.ts +1 -1
  50. package/lib/esm/testing/index.js +60 -94
  51. package/lib/esm/testing/index.js.map +1 -1
  52. package/lib/esm/utils/bot-config.d.ts +1 -1
  53. package/lib/esm/utils/bot-config.js +57 -28
  54. package/lib/esm/utils/bot-config.js.map +1 -1
  55. package/lib/esm/utils/check-providers.d.ts +1 -1
  56. package/lib/esm/utils/check-providers.js +14 -17
  57. package/lib/esm/utils/check-providers.js.map +1 -1
  58. package/lib/esm/utils/functional.js +19 -38
  59. package/lib/esm/utils/functional.js.map +1 -1
  60. package/lib/esm/utils/index.d.ts +3 -3
  61. package/lib/esm/utils/index.js +9 -6
  62. package/lib/esm/utils/index.js.map +1 -1
  63. package/package.json +12 -11
  64. package/src/hubtype-service.ts +4 -2
  65. package/src/models/ai-agents.ts +0 -9
  66. package/lib/cjs/constants.d.ts +0 -4
  67. package/lib/cjs/constants.js +0 -8
  68. package/lib/cjs/constants.js.map +0 -1
  69. package/lib/cjs/core-bot.d.ts +0 -43
  70. package/lib/cjs/core-bot.js +0 -205
  71. package/lib/cjs/core-bot.js.map +0 -1
  72. package/lib/cjs/debug/index.d.ts +0 -1
  73. package/lib/cjs/debug/index.js +0 -5
  74. package/lib/cjs/debug/index.js.map +0 -1
  75. package/lib/cjs/debug/inspector.d.ts +0 -24
  76. package/lib/cjs/debug/inspector.js +0 -70
  77. package/lib/cjs/debug/inspector.js.map +0 -1
  78. package/lib/cjs/handoff.d.ts +0 -110
  79. package/lib/cjs/handoff.js +0 -238
  80. package/lib/cjs/handoff.js.map +0 -1
  81. package/lib/cjs/hubtype-service.d.ts +0 -58
  82. package/lib/cjs/hubtype-service.js +0 -205
  83. package/lib/cjs/hubtype-service.js.map +0 -1
  84. package/lib/cjs/index.d.ts +0 -9
  85. package/lib/cjs/index.js +0 -13
  86. package/lib/cjs/index.js.map +0 -1
  87. package/lib/cjs/models/ai-agents.d.ts +0 -147
  88. package/lib/cjs/models/ai-agents.js +0 -31
  89. package/lib/cjs/models/ai-agents.js.map +0 -1
  90. package/lib/cjs/models/bot-config.d.ts +0 -24
  91. package/lib/cjs/models/bot-config.js +0 -10
  92. package/lib/cjs/models/bot-config.js.map +0 -1
  93. package/lib/cjs/models/hubtype-analytics.d.ts +0 -210
  94. package/lib/cjs/models/hubtype-analytics.js +0 -38
  95. package/lib/cjs/models/hubtype-analytics.js.map +0 -1
  96. package/lib/cjs/models/index.d.ts +0 -4
  97. package/lib/cjs/models/index.js +0 -8
  98. package/lib/cjs/models/index.js.map +0 -1
  99. package/lib/cjs/models/legacy-types.d.ts +0 -332
  100. package/lib/cjs/models/legacy-types.js +0 -84
  101. package/lib/cjs/models/legacy-types.js.map +0 -1
  102. package/lib/cjs/plugins.d.ts +0 -9
  103. package/lib/cjs/plugins.js +0 -24
  104. package/lib/cjs/plugins.js.map +0 -1
  105. package/lib/cjs/pusher-utils.d.ts +0 -7
  106. package/lib/cjs/pusher-utils.js +0 -18
  107. package/lib/cjs/pusher-utils.js.map +0 -1
  108. package/lib/cjs/routing/index.d.ts +0 -2
  109. package/lib/cjs/routing/index.js +0 -6
  110. package/lib/cjs/routing/index.js.map +0 -1
  111. package/lib/cjs/routing/router-utils.d.ts +0 -11
  112. package/lib/cjs/routing/router-utils.js +0 -96
  113. package/lib/cjs/routing/router-utils.js.map +0 -1
  114. package/lib/cjs/routing/router.d.ts +0 -54
  115. package/lib/cjs/routing/router.js +0 -330
  116. package/lib/cjs/routing/router.js.map +0 -1
  117. package/lib/cjs/testing/index.d.ts +0 -91
  118. package/lib/cjs/testing/index.js +0 -196
  119. package/lib/cjs/testing/index.js.map +0 -1
  120. package/lib/cjs/utils/bot-config.d.ts +0 -4
  121. package/lib/cjs/utils/bot-config.js +0 -94
  122. package/lib/cjs/utils/bot-config.js.map +0 -1
  123. package/lib/cjs/utils/check-providers.d.ts +0 -8
  124. package/lib/cjs/utils/check-providers.js +0 -34
  125. package/lib/cjs/utils/check-providers.js.map +0 -1
  126. package/lib/cjs/utils/functional.d.ts +0 -10
  127. package/lib/cjs/utils/functional.js +0 -88
  128. package/lib/cjs/utils/functional.js.map +0 -1
  129. package/lib/cjs/utils/index.d.ts +0 -3
  130. package/lib/cjs/utils/index.js +0 -7
  131. package/lib/cjs/utils/index.js.map +0 -1
@@ -1,28 +1,34 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HandOffBuilder = exports.HelpdeskEvent = void 0;
4
- exports.getOpenQueues = getOpenQueues;
5
- exports.humanHandOff = humanHandOff;
6
- exports.storeCaseRating = storeCaseRating;
7
- exports.getAvailableAgentsByQueue = getAvailableAgentsByQueue;
8
- exports.getAvailableAgents = getAvailableAgents;
9
- exports.getAgentVacationRanges = getAgentVacationRanges;
10
- exports.cancelHandoff = cancelHandoff;
11
- exports.deleteUser = deleteUser;
12
- const tslib_1 = require("tslib");
13
- const axios_1 = tslib_1.__importDefault(require("axios"));
14
- const constants_1 = require("./constants");
15
- const models_1 = require("./models");
1
+ import axios from "axios";
2
+ import { PATH_PAYLOAD_IDENTIFIER } from "./constants.js";
3
+ import { BotonicAction, EVENT_FORMAT_VERSION } from "./models/index.js";
4
+
5
+
6
+
7
+
8
+ function _define_property(obj, key, value) {
9
+ if (key in obj) {
10
+ Object.defineProperty(obj, key, {
11
+ value: value,
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true
15
+ });
16
+ } else obj[key] = value;
17
+ return obj;
18
+ }
19
+
20
+
21
+
16
22
  const HUBTYPE_API_URL = 'https://api.hubtype.com';
17
- var HelpdeskEvent;
18
- (function (HelpdeskEvent) {
23
+ var handoff_HelpdeskEvent = /*#__PURE__*/ function(HelpdeskEvent) {
19
24
  HelpdeskEvent["StatusChanged"] = "status_changed";
20
25
  HelpdeskEvent["AgentMessageCreated"] = "agent_message_created";
21
26
  HelpdeskEvent["QueuePositionChanged"] = "queue_position_changed";
22
- })(HelpdeskEvent || (exports.HelpdeskEvent = HelpdeskEvent = {}));
27
+ return HelpdeskEvent;
28
+ }({});
23
29
  function contextDefaults(context) {
24
30
  return {
25
- timeoutMs: context.timeoutMs || 10000,
31
+ timeoutMs: context.timeoutMs || 10000
26
32
  };
27
33
  }
28
34
  async function getOpenQueues(session, context = {}) {
@@ -30,21 +36,20 @@ async function getOpenQueues(session, context = {}) {
30
36
  const baseUrl = session._hubtype_api || HUBTYPE_API_URL;
31
37
  const endpointUrl = `${baseUrl}/v1/queues/get_open_queues/`;
32
38
  context = contextDefaults(context);
33
- const resp = await (0, axios_1.default)({
39
+ const resp = await axios({
34
40
  headers: {
35
- Authorization: `Bearer ${session._access_token}`,
41
+ Authorization: `Bearer ${session._access_token}`
36
42
  },
37
43
  method: 'post',
38
44
  url: endpointUrl,
39
- data: { bot_id: session.bot.id },
40
- timeout: context.timeoutMs,
45
+ data: {
46
+ bot_id: session.bot.id
47
+ },
48
+ timeout: context.timeoutMs
41
49
  });
42
50
  return resp.data;
43
51
  }
44
52
  class HandOffBuilder {
45
- constructor(session) {
46
- this._session = session;
47
- }
48
53
  withQueue(queueNameOrId) {
49
54
  this._queue = queueNameOrId;
50
55
  return this;
@@ -54,7 +59,7 @@ class HandOffBuilder {
54
59
  return this;
55
60
  }
56
61
  withOnFinishPath(path) {
57
- this._onFinish = `${constants_1.PATH_PAYLOAD_IDENTIFIER}${path}`;
62
+ this._onFinish = `${PATH_PAYLOAD_IDENTIFIER}${path}`;
58
63
  return this;
59
64
  }
60
65
  withAgentEmail(email) {
@@ -95,11 +100,11 @@ class HandOffBuilder {
95
100
  }
96
101
  withBotEvent(botEvent) {
97
102
  this._bot_event = {
98
- format_version: models_1.EVENT_FORMAT_VERSION,
103
+ format_version: EVENT_FORMAT_VERSION,
99
104
  flow_id: botEvent.flowId,
100
105
  flow_name: botEvent.flowName,
101
106
  flow_node_id: botEvent.flowNodeId,
102
- flow_node_content_id: botEvent.flowNodeContentId,
107
+ flow_node_content_id: botEvent.flowNodeContentId
103
108
  };
104
109
  return this;
105
110
  }
@@ -110,12 +115,27 @@ class HandOffBuilder {
110
115
  async handOff() {
111
116
  return _humanHandOff(this._session, this._queue, this._onFinish, this._email, this._agentId, this._forceAssignIfNotAvailable, this._autoAssignOnWaiting, this._caseInfo, this._note, this._autoIdleMessage, this._shadowing, this._extraData, this._bot_event, this._subscribeHelpdeskEvents);
112
117
  }
118
+ constructor(session){
119
+ _define_property(this, "_session", void 0);
120
+ _define_property(this, "_queue", void 0);
121
+ _define_property(this, "_onFinish", void 0);
122
+ _define_property(this, "_email", void 0);
123
+ _define_property(this, "_agentId", void 0);
124
+ _define_property(this, "_forceAssignIfNotAvailable", void 0);
125
+ _define_property(this, "_autoAssignOnWaiting", void 0);
126
+ _define_property(this, "_note", void 0);
127
+ _define_property(this, "_caseInfo", void 0);
128
+ _define_property(this, "_autoIdleMessage", void 0);
129
+ _define_property(this, "_shadowing", void 0);
130
+ _define_property(this, "_extraData", void 0);
131
+ _define_property(this, "_bot_event", void 0);
132
+ _define_property(this, "_subscribeHelpdeskEvents", void 0);
133
+ this._session = session;
134
+ }
113
135
  }
114
- exports.HandOffBuilder = HandOffBuilder;
115
136
  /**
116
137
  * @deprecated use {@link HandOffBuilder} class instead
117
- */
118
- async function humanHandOff(session, queueNameOrId = '', onFinish) {
138
+ */ async function humanHandOff(session, queueNameOrId = '', onFinish) {
119
139
  const builder = new HandOffBuilder(session);
120
140
  if (queueNameOrId) {
121
141
  builder.withQueue(queueNameOrId);
@@ -123,11 +143,9 @@ async function humanHandOff(session, queueNameOrId = '', onFinish) {
123
143
  if (onFinish) {
124
144
  if (onFinish.path) {
125
145
  builder.withOnFinishPath(onFinish.path);
126
- }
127
- else if (onFinish.payload) {
146
+ } else if (onFinish.payload) {
128
147
  builder.withOnFinishPayload(onFinish.payload);
129
- }
130
- else {
148
+ } else {
131
149
  throw new Error('onFinish requires payload or path field');
132
150
  }
133
151
  }
@@ -172,67 +190,78 @@ async function _humanHandOff(session, queueNameOrId = '', onFinish, agentEmail =
172
190
  if (subscribeHelpdeskEvents.length > 0) {
173
191
  params.subscribe_helpdesk_events = subscribeHelpdeskEvents;
174
192
  }
175
- session._botonic_action = `${models_1.BotonicAction.CreateCase}:${JSON.stringify(params)}`;
193
+ session._botonic_action = `${BotonicAction.CreateCase}:${JSON.stringify(params)}`;
176
194
  }
177
195
  async function storeCaseRating(session, rating, context = {}) {
178
196
  const baseUrl = session._hubtype_api || HUBTYPE_API_URL;
179
197
  const chatId = session.user.id;
180
198
  context = contextDefaults(context);
181
- const resp = await (0, axios_1.default)({
199
+ const resp = await axios({
182
200
  headers: {
183
- Authorization: `Bearer ${session._access_token}`,
201
+ Authorization: `Bearer ${session._access_token}`
184
202
  },
185
203
  method: 'post',
186
204
  url: `${baseUrl}/v1/chats/${chatId}/store_case_rating/`,
187
- data: { chat_id: chatId, rating },
188
- timeout: context.timeoutMs,
205
+ data: {
206
+ chat_id: chatId,
207
+ rating
208
+ },
209
+ timeout: context.timeoutMs
189
210
  });
190
211
  return resp.data;
191
212
  }
192
213
  async function getAvailableAgentsByQueue(session, queueId) {
193
214
  const baseUrl = session._hubtype_api || HUBTYPE_API_URL;
194
- const resp = await (0, axios_1.default)({
215
+ const resp = await axios({
195
216
  headers: {
196
- Authorization: `Bearer ${session._access_token}`,
217
+ Authorization: `Bearer ${session._access_token}`
197
218
  },
198
219
  method: 'post',
199
- url: `${baseUrl}/v1/queues/${queueId}/get_available_agents/`,
220
+ url: `${baseUrl}/v1/queues/${queueId}/get_available_agents/`
200
221
  });
201
222
  return resp.data;
202
223
  }
203
224
  async function getAvailableAgents(session) {
204
225
  const baseUrl = session._hubtype_api || HUBTYPE_API_URL;
205
226
  const botId = session.bot.id;
206
- const resp = await (0, axios_1.default)({
227
+ const resp = await axios({
207
228
  headers: {
208
- Authorization: `Bearer ${session._access_token}`,
229
+ Authorization: `Bearer ${session._access_token}`
209
230
  },
210
231
  method: 'post',
211
- url: `${baseUrl}/v1/bots/${botId}/get_agents/`,
232
+ url: `${baseUrl}/v1/bots/${botId}/get_agents/`
212
233
  });
213
234
  return resp.data;
214
235
  }
215
236
  async function getAgentVacationRanges(session, { agentId, agentEmail }) {
216
237
  const baseUrl = session._hubtype_api || HUBTYPE_API_URL;
217
238
  const botId = session.bot.id;
218
- const resp = await (0, axios_1.default)({
239
+ const resp = await axios({
219
240
  headers: {
220
- Authorization: `Bearer ${session._access_token}`,
241
+ Authorization: `Bearer ${session._access_token}`
221
242
  },
222
243
  method: 'get',
223
244
  url: `${baseUrl}/v1/bots/${botId}/get_agent_vacation_ranges/`,
224
- params: { agent_id: agentId, agent_email: agentEmail },
245
+ params: {
246
+ agent_id: agentId,
247
+ agent_email: agentEmail
248
+ }
225
249
  });
226
250
  return resp.data;
227
251
  }
228
252
  function cancelHandoff(session, typification = null) {
229
- let action = models_1.BotonicAction.DiscardCase;
253
+ let action = BotonicAction.DiscardCase;
230
254
  if (typification) {
231
- action = `${action}:${JSON.stringify({ typification })}`;
255
+ action = `${action}:${JSON.stringify({
256
+ typification
257
+ })}`;
232
258
  }
233
259
  session._botonic_action = action;
234
260
  }
235
261
  function deleteUser(session) {
236
- session._botonic_action = models_1.BotonicAction.DeleteUser;
262
+ session._botonic_action = BotonicAction.DeleteUser;
237
263
  }
264
+
265
+ export { HandOffBuilder, cancelHandoff, deleteUser, getAgentVacationRanges, getAvailableAgents, getAvailableAgentsByQueue, getOpenQueues, handoff_HelpdeskEvent as HelpdeskEvent, humanHandOff, storeCaseRating };
266
+
238
267
  //# sourceMappingURL=handoff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/handoff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handoff.js","sources":["../../src/handoff.ts"],"sourcesContent":["import axios from 'axios'\n\nimport { PATH_PAYLOAD_IDENTIFIER } from './constants'\nimport {\n BotonicAction,\n type BotonicActionType,\n EVENT_FORMAT_VERSION,\n type Session,\n} from './models'\n\nconst HUBTYPE_API_URL = 'https://api.hubtype.com'\n\nexport interface HubtypeAgentsInfo {\n attending_count: number\n email: string\n idle_count: number\n last_message_sent: string\n status: string\n}\n\nexport interface BackendContext {\n timeoutMs: number\n}\n\nexport interface VacationRange {\n end_date: number // timestamp\n id: number\n start_date: number // timestamp\n}\n\nexport type HandoffExtraData = {\n language?: string\n url?: string\n location?: string\n}\n\nexport interface BotEventData {\n flowId: string\n flowName: string\n flowNodeId: string\n flowNodeContentId: string\n}\n\nexport interface FormattedBotEventData {\n format_version: number\n flow_id: string\n flow_name: string\n flow_node_id: string\n flow_node_content_id: string\n}\n\nexport enum HelpdeskEvent {\n StatusChanged = 'status_changed',\n AgentMessageCreated = 'agent_message_created',\n QueuePositionChanged = 'queue_position_changed',\n}\n\nfunction contextDefaults(context: any): BackendContext {\n return {\n timeoutMs: context.timeoutMs || 10000,\n }\n}\n\nexport async function getOpenQueues(\n session: Session,\n context = {}\n): Promise<{ queues: string[] }> {\n //be aware of https://github.com/axios/axios/issues/1543\n const baseUrl = session._hubtype_api || HUBTYPE_API_URL\n const endpointUrl = `${baseUrl}/v1/queues/get_open_queues/`\n context = contextDefaults(context)\n const resp = await axios({\n headers: {\n Authorization: `Bearer ${session._access_token}`,\n },\n method: 'post',\n url: endpointUrl,\n data: { bot_id: session.bot.id },\n timeout: (context as BackendContext).timeoutMs,\n })\n return resp.data\n}\n\nexport class HandOffBuilder {\n _session: Session\n _queue: string\n _onFinish: string\n _email: string\n _agentId: string\n _forceAssignIfNotAvailable: boolean\n _autoAssignOnWaiting: boolean\n _note: string\n _caseInfo: string\n _autoIdleMessage: string\n _shadowing: boolean\n _extraData: HandoffExtraData\n _bot_event: FormattedBotEventData\n _subscribeHelpdeskEvents: HelpdeskEvent[]\n\n constructor(session: Session) {\n this._session = session\n }\n\n withQueue(queueNameOrId: string): this {\n this._queue = queueNameOrId\n return this\n }\n\n withOnFinishPayload(payload: string): this {\n this._onFinish = payload\n return this\n }\n\n withOnFinishPath(path: string): this {\n this._onFinish = `${PATH_PAYLOAD_IDENTIFIER}${path}`\n return this\n }\n\n withAgentEmail(email: string): this {\n this._email = email\n return this\n }\n\n withAgentId(agentId: string): this {\n this._agentId = agentId\n return this\n }\n\n withForceAssignIfNotAvailable(forceAssign: boolean): this {\n this._forceAssignIfNotAvailable = forceAssign\n return this\n }\n\n withAutoAssignOnWaiting(autoAssignOnWaiting: boolean): this {\n this._autoAssignOnWaiting = autoAssignOnWaiting\n return this\n }\n\n withNote(note: string): this {\n this._note = note\n return this\n }\n\n withCaseInfo(caseInfo: string): this {\n this._caseInfo = caseInfo\n return this\n }\n\n withAutoIdleMessage(message: string): this {\n this._autoIdleMessage = message\n return this\n }\n\n withShadowing(shadowing = true): this {\n this._shadowing = shadowing\n return this\n }\n\n withExtraData(extraData: HandoffExtraData): this {\n this._extraData = extraData\n return this\n }\n\n withBotEvent(botEvent: BotEventData): this {\n this._bot_event = {\n format_version: EVENT_FORMAT_VERSION,\n flow_id: botEvent.flowId,\n flow_name: botEvent.flowName,\n flow_node_id: botEvent.flowNodeId,\n flow_node_content_id: botEvent.flowNodeContentId,\n }\n return this\n }\n\n withSubscribeHelpdeskEvents(events: HelpdeskEvent[]): this {\n this._subscribeHelpdeskEvents = events\n return this\n }\n\n async handOff(): Promise<void> {\n return _humanHandOff(\n this._session,\n this._queue,\n this._onFinish,\n this._email,\n this._agentId,\n this._forceAssignIfNotAvailable,\n this._autoAssignOnWaiting,\n this._caseInfo,\n this._note,\n this._autoIdleMessage,\n this._shadowing,\n this._extraData,\n this._bot_event,\n this._subscribeHelpdeskEvents\n )\n }\n}\n\n/**\n * @deprecated use {@link HandOffBuilder} class instead\n */\nexport async function humanHandOff(session, queueNameOrId = '', onFinish) {\n const builder = new HandOffBuilder(session)\n if (queueNameOrId) {\n builder.withQueue(queueNameOrId)\n }\n if (onFinish) {\n if (onFinish.path) {\n builder.withOnFinishPath(onFinish.path)\n } else if (onFinish.payload) {\n builder.withOnFinishPayload(onFinish.payload)\n } else {\n throw new Error('onFinish requires payload or path field')\n }\n }\n return builder.handOff()\n}\n\nexport interface HubtypeHandoffParams {\n queue?: string\n agent_email?: string\n agent_id?: string\n force_assign_if_not_available?: boolean\n auto_assign_on_waiting?: boolean\n case_info?: string\n note?: string\n auto_idle_message?: string\n shadowing?: boolean\n on_finish?: string\n case_extra_data?: HandoffExtraData\n bot_event?: FormattedBotEventData\n subscribe_helpdesk_events?: HelpdeskEvent[]\n}\nasync function _humanHandOff(\n session: Session,\n queueNameOrId = '',\n onFinish: string,\n agentEmail = '',\n agentId = '',\n forceAssignIfNotAvailable = true,\n autoAssignOnWaiting = false,\n caseInfo = '',\n note = '',\n autoIdleMessage = '',\n shadowing = false,\n extraData: HandoffExtraData | undefined = undefined,\n botEvent: FormattedBotEventData,\n subscribeHelpdeskEvents: HelpdeskEvent[] = []\n) {\n const params: HubtypeHandoffParams = {}\n\n params.force_assign_if_not_available = forceAssignIfNotAvailable\n\n if (queueNameOrId) {\n params.queue = queueNameOrId\n }\n if (agentEmail) {\n params.agent_email = agentEmail\n }\n if (agentId) {\n params.agent_id = agentId\n }\n if (autoAssignOnWaiting) {\n params.auto_assign_on_waiting = autoAssignOnWaiting\n }\n if (caseInfo) {\n params.case_info = caseInfo\n }\n if (note) {\n params.note = note\n }\n if (autoIdleMessage) {\n params.auto_idle_message = autoIdleMessage\n }\n if (shadowing) {\n params.shadowing = shadowing\n }\n if (onFinish) {\n params.on_finish = onFinish\n }\n if (extraData) {\n params.case_extra_data = extraData\n }\n if (botEvent) {\n params.bot_event = botEvent\n }\n if (subscribeHelpdeskEvents.length > 0) {\n params.subscribe_helpdesk_events = subscribeHelpdeskEvents\n }\n session._botonic_action = `${BotonicAction.CreateCase}:${JSON.stringify(params)}`\n}\n\nexport async function storeCaseRating(\n session: Session,\n rating: number,\n context: any = {}\n): Promise<{ status: string }> {\n const baseUrl = session._hubtype_api || HUBTYPE_API_URL\n const chatId = session.user.id\n context = contextDefaults(context)\n const resp = await axios({\n headers: {\n Authorization: `Bearer ${session._access_token}`,\n },\n method: 'post',\n url: `${baseUrl}/v1/chats/${chatId}/store_case_rating/`,\n data: { chat_id: chatId, rating },\n timeout: (context as BackendContext).timeoutMs,\n })\n return resp.data\n}\n\nexport async function getAvailableAgentsByQueue(\n session: Session,\n queueId: string\n): Promise<{ agents: string[] }> {\n const baseUrl = session._hubtype_api || HUBTYPE_API_URL\n const resp = await axios({\n headers: {\n Authorization: `Bearer ${session._access_token}`,\n },\n method: 'post',\n url: `${baseUrl}/v1/queues/${queueId}/get_available_agents/`,\n })\n return resp.data\n}\n\nexport async function getAvailableAgents(\n session: Session\n): Promise<{ agents: HubtypeAgentsInfo[] }> {\n const baseUrl = session._hubtype_api || HUBTYPE_API_URL\n const botId = session.bot.id\n const resp = await axios({\n headers: {\n Authorization: `Bearer ${session._access_token}`,\n },\n method: 'post',\n url: `${baseUrl}/v1/bots/${botId}/get_agents/`,\n })\n return resp.data\n}\n\nexport async function getAgentVacationRanges(\n session: Session,\n { agentId, agentEmail }: { agentId?: string; agentEmail?: string }\n): Promise<{ vacation_ranges: VacationRange[] }> {\n const baseUrl = session._hubtype_api || HUBTYPE_API_URL\n const botId = session.bot.id\n const resp = await axios({\n headers: {\n Authorization: `Bearer ${session._access_token}`,\n },\n method: 'get',\n url: `${baseUrl}/v1/bots/${botId}/get_agent_vacation_ranges/`,\n params: { agent_id: agentId, agent_email: agentEmail },\n })\n return resp.data\n}\n\nexport function cancelHandoff(\n session: Session,\n typification: string | null = null\n): void {\n let action: BotonicActionType = BotonicAction.DiscardCase\n if (typification) {\n action = `${action}:${JSON.stringify({ typification })}`\n }\n session._botonic_action = action\n}\n\nexport function deleteUser(session: Session): void {\n session._botonic_action = BotonicAction.DeleteUser\n}\n"],"names":["axios","PATH_PAYLOAD_IDENTIFIER","BotonicAction","EVENT_FORMAT_VERSION","HUBTYPE_API_URL","HelpdeskEvent","contextDefaults","context","getOpenQueues","session","baseUrl","endpointUrl","resp","HandOffBuilder","queueNameOrId","payload","path","email","agentId","forceAssign","autoAssignOnWaiting","note","caseInfo","message","shadowing","extraData","botEvent","events","_humanHandOff","humanHandOff","onFinish","builder","Error","agentEmail","forceAssignIfNotAvailable","autoIdleMessage","undefined","subscribeHelpdeskEvents","params","JSON","storeCaseRating","rating","chatId","getAvailableAgentsByQueue","queueId","getAvailableAgents","botId","getAgentVacationRanges","cancelHandoff","typification","action","deleteUser"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { type AxiosResponse } from 'axios';
2
- import Pusher, { type Channel } from 'pusher-js';
3
- import type { Input, SessionUser } from './models';
2
+ import { type Channel, type Runtime } from 'pusher-js';
3
+ import type { Input, SessionUser } from './models/index.js';
4
4
  interface UnsentInput {
5
5
  id: string;
6
6
  ack: number;
@@ -34,7 +34,7 @@ export declare class HubtypeService {
34
34
  lastMessageUpdateDate?: string;
35
35
  onEvent: (event: any) => void;
36
36
  unsentInputs: () => UnsentInput[];
37
- pusher: Pusher | null;
37
+ pusher: InstanceType<Parameters<Runtime['setup']>[0]> | null;
38
38
  channel: Channel;
39
39
  server?: ServerConfig;
40
40
  PUSHER_CONNECT_TIMEOUT_MS: number;
@@ -1,34 +1,34 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HubtypeService = void 0;
4
- const tslib_1 = require("tslib");
5
- const axios_1 = tslib_1.__importDefault(require("axios"));
6
- const pusher_js_1 = tslib_1.__importDefault(require("pusher-js"));
7
- const pusher_utils_1 = require("./pusher-utils");
8
- const WEBCHAT_PUSHER_KEY = process.env.WEBCHAT_PUSHER_KEY || '434ca667c8e6cb3f641c'; // pragma: allowlist secret
1
+ import axios from "axios";
2
+ import pusher_js from "pusher-js";
3
+ import { decompressData } from "./pusher-utils.js";
4
+
5
+
6
+
7
+
8
+ function _define_property(obj, key, value) {
9
+ if (key in obj) {
10
+ Object.defineProperty(obj, key, {
11
+ value: value,
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true
15
+ });
16
+ } else obj[key] = value;
17
+ return obj;
18
+ }
19
+
20
+
21
+
22
+ const WEBCHAT_PUSHER_KEY = process.env.WEBCHAT_PUSHER_KEY || '434ca667c8e6cb3f641c' // pragma: allowlist secret
23
+ ;
9
24
  const HUBTYPE_API_URL = process.env.HUBTYPE_API_URL || 'https://api.hubtype.com';
10
- const ACTIVITY_TIMEOUT = 20 * 1000; // https://pusher.com/docs/channels/using_channels/connection#activitytimeout-integer-
11
- const PONG_TIMEOUT = 5 * 1000; // https://pusher.com/docs/channels/using_channels/connection#pongtimeout-integer-
25
+ const ACTIVITY_TIMEOUT = 20 * 1000 // https://pusher.com/docs/channels/using_channels/connection#activitytimeout-integer-
26
+ ;
27
+ const PONG_TIMEOUT = 5 * 1000 // https://pusher.com/docs/channels/using_channels/connection#pongtimeout-integer-
28
+ ;
12
29
  /**
13
30
  * Calls Hubtype APIs from Webchat
14
- */
15
- class HubtypeService {
16
- constructor({ appId, user, lastMessageId, lastMessageUpdateDate, onEvent, unsentInputs, server, }) {
17
- this.PUSHER_CONNECT_TIMEOUT_MS = 10000;
18
- this.appId = appId;
19
- this.user = user || {};
20
- this.lastMessageId = lastMessageId;
21
- this.lastMessageUpdateDate = lastMessageUpdateDate;
22
- this.onEvent = onEvent;
23
- this.unsentInputs = unsentInputs;
24
- this.server = server;
25
- if (this.user.id && (lastMessageId || lastMessageUpdateDate)) {
26
- // It's safe not awaiting Promise because:
27
- // * it will never be called from AWS lambda
28
- // * though init() is called again from postMesage, it does nothing if Pusher already created
29
- this.init();
30
- }
31
- }
31
+ */ class HubtypeService {
32
32
  init(user, lastMessageId, lastMessageUpdateDate) {
33
33
  if (user) {
34
34
  this.user = user;
@@ -49,54 +49,50 @@ class HubtypeService {
49
49
  // TODO recover user & appId somehow
50
50
  return Promise.reject('No User or appId. Clear cache and reload');
51
51
  }
52
- this.pusher = new pusher_js_1.default(WEBCHAT_PUSHER_KEY, {
52
+ this.pusher = new pusher_js(WEBCHAT_PUSHER_KEY, {
53
53
  cluster: 'eu',
54
54
  authEndpoint: `${HUBTYPE_API_URL}/v1/provider_accounts/webhooks/webchat/${this.appId}/auth/`,
55
55
  forceTLS: true,
56
56
  auth: {
57
- headers: this.constructHeaders(),
57
+ headers: this.constructHeaders()
58
58
  },
59
- ...this.resolveServerConfig(),
59
+ ...this.resolveServerConfig()
60
60
  });
61
61
  this.channel = this.pusher.subscribe(this.pusherChannel);
62
- const connectionPromise = new Promise((resolve, reject) => {
63
- const cleanAndReject = msg => {
62
+ const connectionPromise = new Promise((resolve, reject)=>{
63
+ const cleanAndReject = (msg)=>{
64
64
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
65
65
  clearTimeout(connectTimeout);
66
66
  this.destroyPusher();
67
67
  reject(msg);
68
68
  };
69
- const connectTimeout = setTimeout(() => cleanAndReject('Connection Timeout'), this.PUSHER_CONNECT_TIMEOUT_MS);
70
- this.channel.bind('pusher:subscription_succeeded', () => {
69
+ const connectTimeout = setTimeout(()=>cleanAndReject('Connection Timeout'), this.PUSHER_CONNECT_TIMEOUT_MS);
70
+ this.channel.bind('pusher:subscription_succeeded', ()=>{
71
71
  // Once subscribed, we know that authentication has been done: https://pusher.com/docs/channels/server_api/authenticating-users
72
72
  this.onConnectionRegained();
73
73
  clearTimeout(connectTimeout);
74
74
  resolve();
75
75
  });
76
- this.channel.bind('botonic_response', data => this.onPusherEvent(data));
77
- this.channel.bind('botonic_response_compressed', compressedData => {
76
+ this.channel.bind('botonic_response', (data)=>this.onPusherEvent(data));
77
+ this.channel.bind('botonic_response_compressed', (compressedData)=>{
78
78
  try {
79
- const data = JSON.parse((0, pusher_utils_1.decompressData)(compressedData));
79
+ const data = JSON.parse(decompressData(compressedData));
80
80
  this.onPusherEvent(data);
81
- }
82
- catch (e) {
81
+ } catch (e) {
83
82
  console.error('Error: Unable to decompress data', e);
84
83
  }
85
84
  });
86
- this.channel.bind('update_message_info', data => this.onPusherEvent(data));
87
- this.pusher?.connection.bind('error', event => {
85
+ this.channel.bind('update_message_info', (data)=>this.onPusherEvent(data));
86
+ this.pusher?.connection.bind('error', (event)=>{
88
87
  if (event.type === 'WebSocketError') {
89
88
  this.handleConnectionChange(false);
90
- }
91
- else {
92
- const errorMsg = event.error?.data
93
- ? event.error.data.code || event.error.data.message
94
- : 'Connection error';
89
+ } else {
90
+ const errorMsg = event.error?.data ? event.error.data.code || event.error.data.message : 'Connection error';
95
91
  cleanAndReject(`Pusher error (${errorMsg})`);
96
92
  }
97
93
  });
98
94
  });
99
- this.pusher.connection.bind('state_change', states => {
95
+ this.pusher.connection.bind('state_change', (states)=>{
100
96
  if (states.current === 'connecting') {
101
97
  this.updateAuthHeaders();
102
98
  }
@@ -124,23 +120,29 @@ class HubtypeService {
124
120
  }
125
121
  resolveServerConfig() {
126
122
  if (!this.server) {
127
- return { activityTimeout: ACTIVITY_TIMEOUT, pongTimeout: PONG_TIMEOUT };
123
+ return {
124
+ activityTimeout: ACTIVITY_TIMEOUT,
125
+ pongTimeout: PONG_TIMEOUT
126
+ };
128
127
  }
129
128
  return {
130
129
  activityTimeout: this.server.activityTimeout || ACTIVITY_TIMEOUT,
131
- pongTimeout: this.server.pongTimeout || PONG_TIMEOUT,
130
+ pongTimeout: this.server.pongTimeout || PONG_TIMEOUT
132
131
  };
133
132
  }
134
133
  updateAuthHeaders() {
135
134
  if (this.pusher) {
136
135
  this.pusher.config.auth.headers = {
137
136
  ...this.pusher.config.auth.headers,
138
- ...this.constructHeaders(),
137
+ ...this.constructHeaders()
139
138
  };
140
139
  }
141
140
  }
142
141
  handleConnectionChange(online) {
143
- this.onPusherEvent({ action: 'connectionChange', online });
142
+ this.onPusherEvent({
143
+ action: 'connectionChange',
144
+ online
145
+ });
144
146
  }
145
147
  onPusherEvent(event) {
146
148
  if (this.onEvent && typeof this.onEvent === 'function') {
@@ -153,33 +155,39 @@ class HubtypeService {
153
155
  handleSentInput(message) {
154
156
  this.onEvent({
155
157
  action: 'update_message_info',
156
- message: { id: message.id, ack: 1 },
158
+ message: {
159
+ id: message.id,
160
+ ack: 1
161
+ }
157
162
  });
158
163
  }
159
164
  handleUnsentInput(message) {
160
165
  this.onEvent({
161
166
  action: 'update_message_info',
162
- message: { id: message.id, ack: 0, unsentInput: message },
167
+ message: {
168
+ id: message.id,
169
+ ack: 0,
170
+ unsentInput: message
171
+ }
163
172
  });
164
173
  }
165
174
  async postMessage(user, message) {
166
175
  try {
167
176
  await this.init(user);
168
- await axios_1.default.post(`${HUBTYPE_API_URL}/v1/provider_accounts/webhooks/webchat/${this.appId}/`, {
177
+ await axios.post(`${HUBTYPE_API_URL}/v1/provider_accounts/webhooks/webchat/${this.appId}/`, {
169
178
  sender: this.user,
170
- message: message,
179
+ message: message
171
180
  }, {
172
- validateStatus: status => status === 200,
181
+ validateStatus: (status)=>status === 200
173
182
  });
174
183
  this.handleSentInput(message);
175
- }
176
- catch (_e) {
184
+ } catch (_e) {
177
185
  this.handleUnsentInput(message);
178
186
  }
179
187
  return Promise.resolve();
180
188
  }
181
189
  static async getWebchatVisibility(appId) {
182
- return axios_1.default.get(`${HUBTYPE_API_URL}/v1/provider_accounts/${appId}/visibility/`);
190
+ return axios.get(`${HUBTYPE_API_URL}/v1/provider_accounts/${appId}/visibility/`);
183
191
  }
184
192
  destroyPusher() {
185
193
  if (!this.pusher) {
@@ -195,11 +203,39 @@ class HubtypeService {
195
203
  await this.resendUnsentInputs();
196
204
  }
197
205
  async resendUnsentInputs() {
198
- for (const message of this.unsentInputs()) {
199
- message.unsentInput &&
200
- (await this.postMessage(this.user, message.unsentInput));
206
+ for (const message of this.unsentInputs()){
207
+ message.unsentInput && await this.postMessage(this.user, message.unsentInput);
208
+ }
209
+ }
210
+ constructor({ appId, user, lastMessageId, lastMessageUpdateDate, onEvent, unsentInputs, server }){
211
+ _define_property(this, "appId", void 0);
212
+ _define_property(this, "user", void 0);
213
+ _define_property(this, "lastMessageId", void 0);
214
+ _define_property(this, "lastMessageUpdateDate", void 0);
215
+ _define_property(this, "onEvent", void 0);
216
+ _define_property(this, "unsentInputs", void 0);
217
+ // Pusher 5's CJS default is a namespace under NodeNext. Its named Runtime
218
+ // interface exposes the same constructor without that interop ambiguity.
219
+ _define_property(this, "pusher", void 0);
220
+ _define_property(this, "channel", void 0);
221
+ _define_property(this, "server", void 0);
222
+ _define_property(this, "PUSHER_CONNECT_TIMEOUT_MS", 10000);
223
+ this.appId = appId;
224
+ this.user = user || {};
225
+ this.lastMessageId = lastMessageId;
226
+ this.lastMessageUpdateDate = lastMessageUpdateDate;
227
+ this.onEvent = onEvent;
228
+ this.unsentInputs = unsentInputs;
229
+ this.server = server;
230
+ if (this.user.id && (lastMessageId || lastMessageUpdateDate)) {
231
+ // It's safe not awaiting Promise because:
232
+ // * it will never be called from AWS lambda
233
+ // * though init() is called again from postMesage, it does nothing if Pusher already created
234
+ this.init();
201
235
  }
202
236
  }
203
237
  }
204
- exports.HubtypeService = HubtypeService;
238
+
239
+ export { HubtypeService };
240
+
205
241
  //# sourceMappingURL=hubtype-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hubtype-service.js","sourceRoot":"","sources":["../../src/hubtype-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hubtype-service.js","sources":["../../src/hubtype-service.ts"],"sourcesContent":["import axios, { type AxiosResponse } from 'axios'\nimport Pusher, { type AuthOptions, type Channel, type Runtime } from 'pusher-js'\nimport type Channels from 'pusher-js/types/src/core/channels/channels'\n\nimport type { Input, SessionUser } from './models'\nimport { decompressData } from './pusher-utils'\n\ninterface UnsentInput {\n id: string\n ack: number\n unsentInput: Input\n}\n\ninterface BotonicHeaders {\n 'X-BOTONIC-USER-ID': string\n 'X-BOTONIC-LAST-MESSAGE-ID': string\n 'X-BOTONIC-LAST-MESSAGE-UPDATE-DATE': string\n}\n\nexport interface ServerConfig {\n activityTimeout?: number\n pongTimeout?: number\n}\n\ninterface HubtypeServiceArgs {\n appId: string\n user: SessionUser\n lastMessageId?: string\n lastMessageUpdateDate?: string\n onEvent: any\n unsentInputs: () => UnsentInput[]\n server?: ServerConfig\n}\n\nconst WEBCHAT_PUSHER_KEY =\n process.env.WEBCHAT_PUSHER_KEY || '434ca667c8e6cb3f641c' // pragma: allowlist secret\n\nconst HUBTYPE_API_URL = process.env.HUBTYPE_API_URL || 'https://api.hubtype.com'\n\nconst ACTIVITY_TIMEOUT = 20 * 1000 // https://pusher.com/docs/channels/using_channels/connection#activitytimeout-integer-\nconst PONG_TIMEOUT = 5 * 1000 // https://pusher.com/docs/channels/using_channels/connection#pongtimeout-integer-\n\n/**\n * Calls Hubtype APIs from Webchat\n */\nexport class HubtypeService {\n public appId: string\n public user: SessionUser\n public lastMessageId?: string\n public lastMessageUpdateDate?: string\n public onEvent: (event: any) => void\n public unsentInputs: () => UnsentInput[]\n // Pusher 5's CJS default is a namespace under NodeNext. Its named Runtime\n // interface exposes the same constructor without that interop ambiguity.\n public pusher: InstanceType<Parameters<Runtime['setup']>[0]> | null\n public channel: Channel\n public server?: ServerConfig\n public PUSHER_CONNECT_TIMEOUT_MS = 10000\n\n constructor({\n appId,\n user,\n lastMessageId,\n lastMessageUpdateDate,\n onEvent,\n unsentInputs,\n server,\n }: HubtypeServiceArgs) {\n this.appId = appId\n this.user = user || {}\n this.lastMessageId = lastMessageId\n this.lastMessageUpdateDate = lastMessageUpdateDate\n this.onEvent = onEvent\n this.unsentInputs = unsentInputs\n this.server = server\n\n if (this.user.id && (lastMessageId || lastMessageUpdateDate)) {\n // It's safe not awaiting Promise because:\n // * it will never be called from AWS lambda\n // * though init() is called again from postMesage, it does nothing if Pusher already created\n this.init()\n }\n }\n\n init(\n user?: SessionUser,\n lastMessageId?: string,\n lastMessageUpdateDate?: string\n ): Promise<void> {\n if (user) {\n this.user = user\n }\n\n if (lastMessageId) {\n this.lastMessageId = lastMessageId\n }\n\n if (lastMessageUpdateDate) {\n this.lastMessageUpdateDate = lastMessageUpdateDate\n }\n\n return this._initPusher()\n }\n\n _initPusher(): Promise<void> {\n if (this.pusher) {\n return Promise.resolve()\n }\n if (!this.user.id || !this.appId) {\n // TODO recover user & appId somehow\n return Promise.reject('No User or appId. Clear cache and reload')\n }\n this.pusher = new Pusher(WEBCHAT_PUSHER_KEY, {\n cluster: 'eu',\n authEndpoint: `${HUBTYPE_API_URL}/v1/provider_accounts/webhooks/webchat/${this.appId}/auth/`,\n forceTLS: true,\n auth: {\n headers: this.constructHeaders(),\n } as AuthOptions,\n ...this.resolveServerConfig(),\n })\n this.channel = this.pusher.subscribe(this.pusherChannel)\n const connectionPromise = new Promise<void>((resolve, reject) => {\n const cleanAndReject = msg => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n clearTimeout(connectTimeout)\n this.destroyPusher()\n reject(msg)\n }\n const connectTimeout = setTimeout(\n () => cleanAndReject('Connection Timeout'),\n this.PUSHER_CONNECT_TIMEOUT_MS\n )\n this.channel.bind('pusher:subscription_succeeded', () => {\n // Once subscribed, we know that authentication has been done: https://pusher.com/docs/channels/server_api/authenticating-users\n this.onConnectionRegained()\n clearTimeout(connectTimeout)\n resolve()\n })\n this.channel.bind('botonic_response', data => this.onPusherEvent(data))\n this.channel.bind('botonic_response_compressed', compressedData => {\n try {\n const data = JSON.parse(decompressData(compressedData))\n this.onPusherEvent(data)\n } catch (e) {\n console.error('Error: Unable to decompress data', e)\n }\n })\n this.channel.bind('update_message_info', data => this.onPusherEvent(data))\n\n this.pusher?.connection.bind('error', event => {\n if (event.type === 'WebSocketError') {\n this.handleConnectionChange(false)\n } else {\n const errorMsg = event.error?.data\n ? event.error.data.code || event.error.data.message\n : 'Connection error'\n cleanAndReject(`Pusher error (${errorMsg})`)\n }\n })\n })\n this.pusher.connection.bind('state_change', states => {\n if (states.current === 'connecting') {\n this.updateAuthHeaders()\n }\n if (states.current === 'connected') {\n this.handleConnectionChange(true)\n }\n if (states.current === 'unavailable') {\n this.handleConnectionChange(false)\n }\n })\n\n return connectionPromise\n }\n\n constructHeaders(): BotonicHeaders {\n const headers = {}\n if (this.user?.id) {\n headers['X-BOTONIC-USER-ID'] = this.user.id\n }\n\n if (this.lastMessageId) {\n headers['X-BOTONIC-LAST-MESSAGE-ID'] = this.lastMessageId\n }\n\n if (this.lastMessageUpdateDate) {\n headers['X-BOTONIC-LAST-MESSAGE-UPDATE-DATE'] = this.lastMessageUpdateDate\n }\n\n return headers as BotonicHeaders\n }\n\n resolveServerConfig(): ServerConfig {\n if (!this.server) {\n return { activityTimeout: ACTIVITY_TIMEOUT, pongTimeout: PONG_TIMEOUT }\n }\n return {\n activityTimeout: this.server.activityTimeout || ACTIVITY_TIMEOUT,\n pongTimeout: this.server.pongTimeout || PONG_TIMEOUT,\n }\n }\n\n updateAuthHeaders(): void {\n if (this.pusher) {\n this.pusher.config.auth.headers = {\n ...this.pusher.config.auth.headers,\n ...this.constructHeaders(),\n }\n }\n }\n\n handleConnectionChange(online: boolean): void {\n this.onPusherEvent({ action: 'connectionChange', online })\n }\n\n onPusherEvent(event: any): void {\n if (this.onEvent && typeof this.onEvent === 'function') {\n this.onEvent(event)\n }\n }\n\n get pusherChannel(): string {\n return `private-encrypted-${this.appId}-${this.user.id}`\n }\n\n handleSentInput(message: any): void {\n this.onEvent({\n action: 'update_message_info',\n message: { id: message.id, ack: 1 },\n })\n }\n\n handleUnsentInput(message: any): void {\n this.onEvent({\n action: 'update_message_info',\n message: { id: message.id, ack: 0, unsentInput: message },\n })\n }\n\n async postMessage(user: SessionUser, message: any): Promise<void> {\n try {\n await this.init(user)\n await axios.post(\n `${HUBTYPE_API_URL}/v1/provider_accounts/webhooks/webchat/${this.appId}/`,\n {\n sender: this.user,\n message: message,\n },\n {\n validateStatus: status => status === 200,\n }\n )\n this.handleSentInput(message)\n } catch (_e) {\n this.handleUnsentInput(message)\n }\n return Promise.resolve()\n }\n\n static async getWebchatVisibility(\n appId: string\n ): Promise<AxiosResponse<any>> {\n return axios.get(\n `${HUBTYPE_API_URL}/v1/provider_accounts/${appId}/visibility/`\n )\n }\n\n destroyPusher(): void {\n if (!this.pusher) {\n return\n }\n\n this.pusher.disconnect()\n this.pusher.unsubscribe(this.pusherChannel)\n this.pusher.unbind_all()\n this.pusher.channels = {} as Channels\n this.pusher = null\n }\n\n async onConnectionRegained(): Promise<void> {\n await this.resendUnsentInputs()\n }\n\n async resendUnsentInputs(): Promise<void> {\n for (const message of this.unsentInputs()) {\n message.unsentInput &&\n (await this.postMessage(this.user, message.unsentInput))\n }\n }\n}\n"],"names":["axios","Pusher","decompressData","WEBCHAT_PUSHER_KEY","process","HUBTYPE_API_URL","ACTIVITY_TIMEOUT","PONG_TIMEOUT","HubtypeService","user","lastMessageId","lastMessageUpdateDate","Promise","connectionPromise","resolve","reject","cleanAndReject","msg","clearTimeout","connectTimeout","setTimeout","data","compressedData","JSON","e","console","event","errorMsg","states","headers","online","message","status","_e","appId","onEvent","unsentInputs","server"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- export * from './constants';
2
- export * from './core-bot';
3
- export * from './debug';
4
- export * from './handoff';
5
- export * from './hubtype-service';
6
- export * from './models';
7
- export * from './plugins';
8
- export * from './routing';
9
- export * from './utils';
1
+ export * from './constants.js';
2
+ export * from './core-bot.js';
3
+ export * from './debug/index.js';
4
+ export * from './handoff.js';
5
+ export * from './hubtype-service.js';
6
+ export * from './models/index.js';
7
+ export * from './plugins.js';
8
+ export * from './routing/index.js';
9
+ export * from './utils/index.js';