@botonic/core 0.56.0-alpha.0 → 0.57.0-rslib-esm.1
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/lib/constants.js +8 -0
- package/lib/constants.js.map +1 -0
- package/lib/{esm/core-bot.d.ts → core-bot.d.ts} +3 -3
- package/lib/{cjs/core-bot.js → core-bot.js} +87 -50
- package/lib/core-bot.js.map +1 -0
- package/lib/debug/index.d.ts +1 -0
- package/lib/debug/index.js +6 -0
- package/lib/debug/index.js.map +1 -0
- package/lib/{cjs/debug → debug}/inspector.d.ts +1 -1
- package/lib/{cjs/debug → debug}/inspector.js +27 -21
- package/lib/debug/inspector.js.map +1 -0
- package/lib/{cjs/handoff.d.ts → handoff.d.ts} +1 -1
- package/lib/{esm/handoff.js → handoff.js} +82 -53
- package/lib/handoff.js.map +1 -0
- package/lib/{esm/hubtype-service.d.ts → hubtype-service.d.ts} +3 -3
- package/lib/{cjs/hubtype-service.js → hubtype-service.js} +100 -64
- package/lib/hubtype-service.js.map +1 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.js +22 -0
- package/lib/index.js.map +1 -0
- package/lib/{esm/models → models}/ai-agents.d.ts +1 -8
- package/lib/models/ai-agents.js +30 -0
- package/lib/models/ai-agents.js.map +1 -0
- package/lib/models/bot-config.js +10 -0
- package/lib/models/bot-config.js.map +1 -0
- package/lib/{esm/models → models}/hubtype-analytics.d.ts +1 -1
- package/lib/{esm/models → models}/hubtype-analytics.js +10 -10
- package/lib/models/hubtype-analytics.js.map +1 -0
- package/lib/models/index.d.ts +4 -0
- package/lib/models/index.js +12 -0
- package/lib/models/index.js.map +1 -0
- package/lib/{esm/models → models}/legacy-types.js +24 -24
- package/lib/models/legacy-types.js.map +1 -0
- package/lib/{cjs/plugins.d.ts → plugins.d.ts} +1 -1
- package/lib/{esm/plugins.js → plugins.js} +7 -8
- package/lib/plugins.js.map +1 -0
- package/lib/pusher-utils.js +23 -0
- package/lib/pusher-utils.js.map +1 -0
- package/lib/routing/index.d.ts +2 -0
- package/lib/routing/index.js +8 -0
- package/lib/routing/index.js.map +1 -0
- package/lib/{cjs/routing → routing}/router-utils.d.ts +1 -1
- package/lib/{cjs/routing → routing}/router-utils.js +37 -30
- package/lib/routing/router-utils.js.map +1 -0
- package/lib/{cjs/routing → routing}/router.d.ts +2 -2
- package/lib/routing/router.js +333 -0
- package/lib/routing/router.js.map +1 -0
- package/lib/{esm/testing → testing}/index.d.ts +1 -1
- package/lib/testing/index.js +162 -0
- package/lib/testing/index.js.map +1 -0
- package/lib/{cjs/utils → utils}/bot-config.d.ts +1 -1
- package/lib/{esm/utils → utils}/bot-config.js +57 -28
- package/lib/utils/bot-config.js.map +1 -0
- package/lib/{cjs/utils → utils}/check-providers.d.ts +1 -1
- package/lib/utils/check-providers.js +31 -0
- package/lib/utils/check-providers.js.map +1 -0
- package/lib/utils/functional.js +69 -0
- package/lib/utils/functional.js.map +1 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +10 -0
- package/lib/utils/index.js.map +1 -0
- package/package.json +14 -12
- package/src/hubtype-service.ts +4 -2
- package/src/models/ai-agents.ts +0 -9
- package/lib/cjs/constants.js +0 -8
- package/lib/cjs/constants.js.map +0 -1
- package/lib/cjs/core-bot.d.ts +0 -43
- package/lib/cjs/core-bot.js.map +0 -1
- package/lib/cjs/debug/index.d.ts +0 -1
- package/lib/cjs/debug/index.js +0 -5
- package/lib/cjs/debug/index.js.map +0 -1
- package/lib/cjs/debug/inspector.js.map +0 -1
- package/lib/cjs/handoff.js +0 -238
- package/lib/cjs/handoff.js.map +0 -1
- package/lib/cjs/hubtype-service.d.ts +0 -58
- package/lib/cjs/hubtype-service.js.map +0 -1
- package/lib/cjs/index.d.ts +0 -9
- package/lib/cjs/index.js +0 -13
- package/lib/cjs/index.js.map +0 -1
- package/lib/cjs/models/ai-agents.d.ts +0 -147
- package/lib/cjs/models/ai-agents.js +0 -31
- package/lib/cjs/models/ai-agents.js.map +0 -1
- package/lib/cjs/models/bot-config.js +0 -10
- package/lib/cjs/models/bot-config.js.map +0 -1
- package/lib/cjs/models/hubtype-analytics.d.ts +0 -210
- package/lib/cjs/models/hubtype-analytics.js +0 -38
- package/lib/cjs/models/hubtype-analytics.js.map +0 -1
- package/lib/cjs/models/index.d.ts +0 -4
- package/lib/cjs/models/index.js +0 -8
- package/lib/cjs/models/index.js.map +0 -1
- package/lib/cjs/models/legacy-types.js +0 -84
- package/lib/cjs/models/legacy-types.js.map +0 -1
- package/lib/cjs/plugins.js +0 -24
- package/lib/cjs/plugins.js.map +0 -1
- package/lib/cjs/pusher-utils.js +0 -18
- package/lib/cjs/pusher-utils.js.map +0 -1
- package/lib/cjs/routing/index.d.ts +0 -2
- package/lib/cjs/routing/index.js +0 -6
- package/lib/cjs/routing/index.js.map +0 -1
- package/lib/cjs/routing/router-utils.js.map +0 -1
- package/lib/cjs/routing/router.js +0 -330
- package/lib/cjs/routing/router.js.map +0 -1
- package/lib/cjs/testing/index.d.ts +0 -91
- package/lib/cjs/testing/index.js +0 -196
- package/lib/cjs/testing/index.js.map +0 -1
- package/lib/cjs/utils/bot-config.js +0 -94
- package/lib/cjs/utils/bot-config.js.map +0 -1
- package/lib/cjs/utils/check-providers.js +0 -34
- package/lib/cjs/utils/check-providers.js.map +0 -1
- package/lib/cjs/utils/functional.js +0 -88
- package/lib/cjs/utils/functional.js.map +0 -1
- package/lib/cjs/utils/index.d.ts +0 -3
- package/lib/cjs/utils/index.js +0 -7
- package/lib/cjs/utils/index.js.map +0 -1
- package/lib/esm/constants.d.ts +0 -4
- package/lib/esm/constants.js +0 -8
- package/lib/esm/constants.js.map +0 -1
- package/lib/esm/core-bot.js +0 -205
- package/lib/esm/core-bot.js.map +0 -1
- package/lib/esm/debug/index.d.ts +0 -1
- package/lib/esm/debug/index.js +0 -5
- package/lib/esm/debug/index.js.map +0 -1
- package/lib/esm/debug/inspector.d.ts +0 -24
- package/lib/esm/debug/inspector.js +0 -70
- package/lib/esm/debug/inspector.js.map +0 -1
- package/lib/esm/handoff.d.ts +0 -110
- package/lib/esm/handoff.js.map +0 -1
- package/lib/esm/hubtype-service.js +0 -205
- package/lib/esm/hubtype-service.js.map +0 -1
- package/lib/esm/index.d.ts +0 -9
- package/lib/esm/index.js +0 -13
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/models/ai-agents.js +0 -31
- package/lib/esm/models/ai-agents.js.map +0 -1
- package/lib/esm/models/bot-config.d.ts +0 -24
- package/lib/esm/models/bot-config.js +0 -10
- package/lib/esm/models/bot-config.js.map +0 -1
- package/lib/esm/models/hubtype-analytics.js.map +0 -1
- package/lib/esm/models/index.d.ts +0 -4
- package/lib/esm/models/index.js +0 -8
- package/lib/esm/models/index.js.map +0 -1
- package/lib/esm/models/legacy-types.d.ts +0 -332
- package/lib/esm/models/legacy-types.js.map +0 -1
- package/lib/esm/plugins.d.ts +0 -9
- package/lib/esm/plugins.js.map +0 -1
- package/lib/esm/pusher-utils.d.ts +0 -7
- package/lib/esm/pusher-utils.js +0 -18
- package/lib/esm/pusher-utils.js.map +0 -1
- package/lib/esm/routing/index.d.ts +0 -2
- package/lib/esm/routing/index.js +0 -6
- package/lib/esm/routing/index.js.map +0 -1
- package/lib/esm/routing/router-utils.d.ts +0 -11
- package/lib/esm/routing/router-utils.js +0 -96
- package/lib/esm/routing/router-utils.js.map +0 -1
- package/lib/esm/routing/router.d.ts +0 -54
- package/lib/esm/routing/router.js +0 -330
- package/lib/esm/routing/router.js.map +0 -1
- package/lib/esm/testing/index.js +0 -196
- package/lib/esm/testing/index.js.map +0 -1
- package/lib/esm/utils/bot-config.d.ts +0 -4
- package/lib/esm/utils/bot-config.js.map +0 -1
- package/lib/esm/utils/check-providers.d.ts +0 -8
- package/lib/esm/utils/check-providers.js +0 -34
- package/lib/esm/utils/check-providers.js.map +0 -1
- package/lib/esm/utils/functional.d.ts +0 -10
- package/lib/esm/utils/functional.js +0 -88
- package/lib/esm/utils/functional.js.map +0 -1
- package/lib/esm/utils/index.d.ts +0 -3
- package/lib/esm/utils/index.js +0 -7
- package/lib/esm/utils/index.js.map +0 -1
- /package/lib/{cjs/constants.d.ts → constants.d.ts} +0 -0
- /package/lib/{cjs/models → models}/bot-config.d.ts +0 -0
- /package/lib/{cjs/models → models}/legacy-types.d.ts +0 -0
- /package/lib/{cjs/pusher-utils.d.ts → pusher-utils.d.ts} +0 -0
- /package/lib/{cjs/utils → utils}/functional.d.ts +0 -0
|
@@ -1,28 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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 (
|
|
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: {
|
|
40
|
-
|
|
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 = `${
|
|
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:
|
|
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 = `${
|
|
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 (
|
|
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: {
|
|
188
|
-
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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: {
|
|
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 =
|
|
253
|
+
let action = BotonicAction.DiscardCase;
|
|
230
254
|
if (typification) {
|
|
231
|
-
action = `${action}:${JSON.stringify({
|
|
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 =
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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":";;;;;;;;;;;;;;;;;;AAAyB;AAE4B;AAMpC;AAEjB,MAAMI,eAAeA,GAAG;AAyCjB,IAAKC,qBAAaA,0BAAbA;;;;WAAAA;MAIX;AAED,SAASC,eAAeA,CAACC,OAAY;IACnC,OAAO;QACL,WAAWA,QAAQ,SAAS,IAAI;IAClC;AACF;AAEO,eAAeC,aAAaA,CACjCC,OAAgB,EAChBF,UAAU,CAAC,CAAC;IAEZ,wDAAwD;IACxD,MAAMG,UAAUD,QAAQ,YAAY,IAAIL,eAAeA;IACvD,MAAMO,cAAc,GAAGD,QAAQ,2BAA2B,CAAC;IAC3DH,UAAUD,eAAeA,CAACC;IAC1B,MAAMK,OAAO,MAAMZ,KAAKA,CAAC;QACvB,SAAS;YACP,eAAe,CAAC,OAAO,EAAES,QAAQ,aAAa,EAAE;QAClD;QACA,QAAQ;QACR,KAAKE;QACL,MAAM;YAAE,QAAQF,QAAQ,GAAG,CAAC,EAAE;QAAC;QAC/B,SAAUF,QAA2B,SAAS;IAChD;IACA,OAAOK,KAAK,IAAI;AAClB;AAEO,MAAMC,cAAcA;IAoBzB,UAAUC,aAAqB,EAAQ;QACrC,IAAI,CAAC,MAAM,GAAGA;QACd,OAAO,IAAI;IACb;IAEA,oBAAoBC,OAAe,EAAQ;QACzC,IAAI,CAAC,SAAS,GAAGA;QACjB,OAAO,IAAI;IACb;IAEA,iBAAiBC,IAAY,EAAQ;QACnC,IAAI,CAAC,SAAS,GAAG,GAAGf,uBAAuBA,GAAGe,MAAM;QACpD,OAAO,IAAI;IACb;IAEA,eAAeC,KAAa,EAAQ;QAClC,IAAI,CAAC,MAAM,GAAGA;QACd,OAAO,IAAI;IACb;IAEA,YAAYC,OAAe,EAAQ;QACjC,IAAI,CAAC,QAAQ,GAAGA;QAChB,OAAO,IAAI;IACb;IAEA,8BAA8BC,WAAoB,EAAQ;QACxD,IAAI,CAAC,0BAA0B,GAAGA;QAClC,OAAO,IAAI;IACb;IAEA,wBAAwBC,mBAA4B,EAAQ;QAC1D,IAAI,CAAC,oBAAoB,GAAGA;QAC5B,OAAO,IAAI;IACb;IAEA,SAASC,IAAY,EAAQ;QAC3B,IAAI,CAAC,KAAK,GAAGA;QACb,OAAO,IAAI;IACb;IAEA,aAAaC,QAAgB,EAAQ;QACnC,IAAI,CAAC,SAAS,GAAGA;QACjB,OAAO,IAAI;IACb;IAEA,oBAAoBC,OAAe,EAAQ;QACzC,IAAI,CAAC,gBAAgB,GAAGA;QACxB,OAAO,IAAI;IACb;IAEA,cAAcC,YAAY,IAAI,EAAQ;QACpC,IAAI,CAAC,UAAU,GAAGA;QAClB,OAAO,IAAI;IACb;IAEA,cAAcC,SAA2B,EAAQ;QAC/C,IAAI,CAAC,UAAU,GAAGA;QAClB,OAAO,IAAI;IACb;IAEA,aAAaC,QAAsB,EAAQ;QACzC,IAAI,CAAC,UAAU,GAAG;YAChB,gBAAgBvB,oBAAoBA;YACpC,SAASuB,SAAS,MAAM;YACxB,WAAWA,SAAS,QAAQ;YAC5B,cAAcA,SAAS,UAAU;YACjC,sBAAsBA,SAAS,iBAAiB;QAClD;QACA,OAAO,IAAI;IACb;IAEA,4BAA4BC,MAAuB,EAAQ;QACzD,IAAI,CAAC,wBAAwB,GAAGA;QAChC,OAAO,IAAI;IACb;IAEA,MAAM,UAAyB;QAC7B,OAAOC,aAAaA,CAClB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,0BAA0B,EAC/B,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,wBAAwB;IAEjC;IAjGA,YAAYnB,OAAgB,CAAE;QAf9B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QAGE,IAAI,CAAC,QAAQ,GAAGA;IAClB;AAgGF;AAEA;;CAEC,GACM,eAAeoB,YAAYA,CAACpB,OAAO,EAAEK,gBAAgB,EAAE,EAAEgB,QAAQ;IACtE,MAAMC,UAAU,IAAIlB,cAAcA,CAACJ;IACnC,IAAIK,eAAe;QACjBiB,QAAQ,SAAS,CAACjB;IACpB;IACA,IAAIgB,UAAU;QACZ,IAAIA,SAAS,IAAI,EAAE;YACjBC,QAAQ,gBAAgB,CAACD,SAAS,IAAI;QACxC,OAAO,IAAIA,SAAS,OAAO,EAAE;YAC3BC,QAAQ,mBAAmB,CAACD,SAAS,OAAO;QAC9C,OAAO;YACL,MAAM,IAAIE,MAAM;QAClB;IACF;IACA,OAAOD,QAAQ,OAAO;AACxB;AAiBA,eAAeH,aAAaA,CAC1BnB,OAAgB,EAChBK,gBAAgB,EAAE,EAClBgB,QAAgB,EAChBG,aAAa,EAAE,EACff,UAAU,EAAE,EACZgB,4BAA4B,IAAI,EAChCd,sBAAsB,KAAK,EAC3BE,WAAW,EAAE,EACbD,OAAO,EAAE,EACTc,kBAAkB,EAAE,EACpBX,YAAY,KAAK,EACjBC,YAA0CW,SAAS,EACnDV,QAA+B,EAC/BW,0BAA2C,EAAE;IAE7C,MAAMC,SAA+B,CAAC;IAEtCA,OAAO,6BAA6B,GAAGJ;IAEvC,IAAIpB,eAAe;QACjBwB,OAAO,KAAK,GAAGxB;IACjB;IACA,IAAImB,YAAY;QACdK,OAAO,WAAW,GAAGL;IACvB;IACA,IAAIf,SAAS;QACXoB,OAAO,QAAQ,GAAGpB;IACpB;IACA,IAAIE,qBAAqB;QACvBkB,OAAO,sBAAsB,GAAGlB;IAClC;IACA,IAAIE,UAAU;QACZgB,OAAO,SAAS,GAAGhB;IACrB;IACA,IAAID,MAAM;QACRiB,OAAO,IAAI,GAAGjB;IAChB;IACA,IAAIc,iBAAiB;QACnBG,OAAO,iBAAiB,GAAGH;IAC7B;IACA,IAAIX,WAAW;QACbc,OAAO,SAAS,GAAGd;IACrB;IACA,IAAIM,UAAU;QACZQ,OAAO,SAAS,GAAGR;IACrB;IACA,IAAIL,WAAW;QACba,OAAO,eAAe,GAAGb;IAC3B;IACA,IAAIC,UAAU;QACZY,OAAO,SAAS,GAAGZ;IACrB;IACA,IAAIW,wBAAwB,MAAM,GAAG,GAAG;QACtCC,OAAO,yBAAyB,GAAGD;IACrC;IACA5B,QAAQ,eAAe,GAAG,GAAGP,wBAAwB,CAAC,CAAC,EAAEqC,KAAK,SAAS,CAACD,SAAS;AACnF;AAEO,eAAeE,eAAeA,CACnC/B,OAAgB,EAChBgC,MAAc,EACdlC,UAAe,CAAC,CAAC;IAEjB,MAAMG,UAAUD,QAAQ,YAAY,IAAIL,eAAeA;IACvD,MAAMsC,SAASjC,QAAQ,IAAI,CAAC,EAAE;IAC9BF,UAAUD,eAAeA,CAACC;IAC1B,MAAMK,OAAO,MAAMZ,KAAKA,CAAC;QACvB,SAAS;YACP,eAAe,CAAC,OAAO,EAAES,QAAQ,aAAa,EAAE;QAClD;QACA,QAAQ;QACR,KAAK,GAAGC,QAAQ,UAAU,EAAEgC,OAAO,mBAAmB,CAAC;QACvD,MAAM;YAAE,SAASA;YAAQD;QAAO;QAChC,SAAUlC,QAA2B,SAAS;IAChD;IACA,OAAOK,KAAK,IAAI;AAClB;AAEO,eAAe+B,yBAAyBA,CAC7ClC,OAAgB,EAChBmC,OAAe;IAEf,MAAMlC,UAAUD,QAAQ,YAAY,IAAIL,eAAeA;IACvD,MAAMQ,OAAO,MAAMZ,KAAKA,CAAC;QACvB,SAAS;YACP,eAAe,CAAC,OAAO,EAAES,QAAQ,aAAa,EAAE;QAClD;QACA,QAAQ;QACR,KAAK,GAAGC,QAAQ,WAAW,EAAEkC,QAAQ,sBAAsB,CAAC;IAC9D;IACA,OAAOhC,KAAK,IAAI;AAClB;AAEO,eAAeiC,kBAAkBA,CACtCpC,OAAgB;IAEhB,MAAMC,UAAUD,QAAQ,YAAY,IAAIL,eAAeA;IACvD,MAAM0C,QAAQrC,QAAQ,GAAG,CAAC,EAAE;IAC5B,MAAMG,OAAO,MAAMZ,KAAKA,CAAC;QACvB,SAAS;YACP,eAAe,CAAC,OAAO,EAAES,QAAQ,aAAa,EAAE;QAClD;QACA,QAAQ;QACR,KAAK,GAAGC,QAAQ,SAAS,EAAEoC,MAAM,YAAY,CAAC;IAChD;IACA,OAAOlC,KAAK,IAAI;AAClB;AAEO,eAAemC,sBAAsBA,CAC1CtC,OAAgB,EAChB,EAAES,OAAO,EAAEe,UAAU,EAA6C;IAElE,MAAMvB,UAAUD,QAAQ,YAAY,IAAIL,eAAeA;IACvD,MAAM0C,QAAQrC,QAAQ,GAAG,CAAC,EAAE;IAC5B,MAAMG,OAAO,MAAMZ,KAAKA,CAAC;QACvB,SAAS;YACP,eAAe,CAAC,OAAO,EAAES,QAAQ,aAAa,EAAE;QAClD;QACA,QAAQ;QACR,KAAK,GAAGC,QAAQ,SAAS,EAAEoC,MAAM,2BAA2B,CAAC;QAC7D,QAAQ;YAAE,UAAU5B;YAAS,aAAae;QAAW;IACvD;IACA,OAAOrB,KAAK,IAAI;AAClB;AAEO,SAASoC,aAAaA,CAC3BvC,OAAgB,EAChBwC,eAA8B,IAAI;IAElC,IAAIC,SAA4BhD,yBAAyB;IACzD,IAAI+C,cAAc;QAChBC,SAAS,GAAGA,OAAO,CAAC,EAAEX,KAAK,SAAS,CAAC;YAAEU;QAAa,IAAI;IAC1D;IACAxC,QAAQ,eAAe,GAAGyC;AAC5B;AAEO,SAASC,UAAUA,CAAC1C,OAAgB;IACzCA,QAAQ,eAAe,GAAGP,wBAAwB;AACpD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type AxiosResponse } from 'axios';
|
|
2
|
-
import
|
|
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:
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
|
11
|
-
|
|
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
|
|
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(()
|
|
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
|
|
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(
|
|
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
|
|
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
|
-
|
|
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 {
|
|
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({
|
|
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: {
|
|
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: {
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
238
|
+
|
|
239
|
+
export { HubtypeService };
|
|
240
|
+
|
|
205
241
|
//# sourceMappingURL=hubtype-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
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';
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
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";
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
export {};
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["export * from './constants'\nexport * from './core-bot'\nexport * from './debug'\nexport * from './handoff'\nexport * from './hubtype-service'\nexport * from './models'\nexport * from './plugins'\nexport * from './routing'\nexport * from './utils'\n"],"names":[],"mappings":";;;;;;;;;AAA2B;AACD;AACH;AACE;AACQ;AACT;AACC;AACA;AACF"}
|