1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const Promise = require("bluebird");
|
4 | const config_1 = require("./config");
|
5 | const OutgoingMessageComparator_1 = require("./OutgoingMessageComparator");
|
6 | function expectedResponsesAreEmpty(expectedResponses) {
|
7 | return !expectedResponses || !expectedResponses.length || !expectedResponses[0].length;
|
8 | }
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | class MessageService {
|
14 | constructor(bot, config) {
|
15 | this.bot = bot;
|
16 | this.applyOutgoingMessageListener();
|
17 |
|
18 |
|
19 | this.botToUserMessageChecker = (msg) => { };
|
20 |
|
21 | this.config = config;
|
22 | }
|
23 | |
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 | sendMessageToBot(message, expectedResponses, ignoreOrder = false) {
|
30 | const outgoingMessageComparator = new OutgoingMessageComparator_1.OutgoingMessageComparator(expectedResponses, ignoreOrder);
|
31 | const responsesFullyProcessedPromise = this.setBotToUserMessageChecker(expectedResponses, outgoingMessageComparator);
|
32 | const receiveMessagePromise = new Promise((res, rej) => {
|
33 | this.bot.receive(message, (e) => e ? rej(e) : res());
|
34 | });
|
35 | let promiseToReturn = expectedResponses && expectedResponses.length ? responsesFullyProcessedPromise : receiveMessagePromise;
|
36 | if (this.config.timeout !== config_1.NO_TIMEOUT) {
|
37 | promiseToReturn = promiseToReturn.timeout(this.config.timeout);
|
38 | }
|
39 | return promiseToReturn
|
40 | .catch(Promise.TimeoutError, (e) => {
|
41 | return Promise.reject(outgoingMessageComparator.getTimeoutErrorMessage());
|
42 | });
|
43 | }
|
44 | |
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 | setBotToUserMessageChecker(expectedResponses, outgoingMessageComparator) {
|
52 | return new Promise((res, rej) => {
|
53 | if (!outgoingMessageComparator.expectsAdditionalMessages()) {
|
54 | return res();
|
55 | }
|
56 | this.botToUserMessageChecker = (messages) => {
|
57 | if (!(messages instanceof Array)) {
|
58 | messages = [messages];
|
59 | }
|
60 | messages.forEach((msg) => {
|
61 | try {
|
62 | outgoingMessageComparator.compareOutgoingMessageToExpectedResponses(msg);
|
63 | }
|
64 | catch (e) {
|
65 | return rej(e);
|
66 | }
|
67 | });
|
68 | if (!outgoingMessageComparator.expectsAdditionalMessages()) {
|
69 | return res();
|
70 | }
|
71 | };
|
72 | });
|
73 | }
|
74 | |
75 |
|
76 |
|
77 | applyOutgoingMessageListener() {
|
78 | this.bot.on('outgoing', (e) => {
|
79 | if (!(e instanceof Array)) {
|
80 | e = [e];
|
81 | }
|
82 | this.botToUserMessageChecker(e);
|
83 | });
|
84 | }
|
85 | }
|
86 | exports.MessageService = MessageService;
|
87 |
|
\ | No newline at end of file |