@wppconnect/server 1.8.5 → 2.0.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/CHANGELOG.md +8 -0
- package/dist/config/upload.js +4 -4
- package/dist/config.js +78 -0
- package/dist/controller/catalogController.js +111 -22
- package/dist/controller/deviceController.js +324 -114
- package/dist/controller/encryptController.js +4 -2
- package/dist/controller/groupController.js +157 -44
- package/dist/controller/labelsController.js +46 -8
- package/dist/controller/messageController.js +104 -39
- package/dist/controller/orderController.js +19 -7
- package/dist/controller/sessionController.js +106 -35
- package/dist/controller/statusController.js +18 -10
- package/dist/index.js +47 -25
- package/dist/mapper/index.js +7 -5
- package/dist/mapper/tagone-chat.js +1 -1
- package/dist/mapper/tagone-device.js +1 -1
- package/dist/mapper/tagone-message-document.js +1 -1
- package/dist/mapper/tagone-message-image.js +1 -1
- package/dist/mapper/tagone-message-location.js +1 -1
- package/dist/mapper/tagone-message-video.js +1 -1
- package/dist/mapper/tagone-message.js +1 -1
- package/dist/mapper/tagone-onack.js +1 -1
- package/dist/mapper/tagone-return.js +4 -2
- package/dist/middleware/auth.js +29 -9
- package/dist/middleware/healthCheck.js +1 -1
- package/dist/middleware/statusConnection.js +9 -3
- package/dist/routes/index.js +618 -113
- package/dist/server.js +2 -2
- package/dist/types/Request.js +2 -0
- package/dist/types/ServerOptions.js +2 -0
- package/dist/types/WhatsAppServer.js +2 -0
- package/dist/util/chatWootClient.js +55 -22
- package/dist/util/createSessionUtil.js +65 -17
- package/dist/util/db/mongodb/db.js +10 -7
- package/dist/util/db/redis/db.js +7 -5
- package/dist/util/functions.js +81 -37
- package/dist/util/getAllTokens.js +1 -1
- package/dist/util/logger.js +2 -3
- package/dist/util/sessionUtil.js +5 -4
- package/dist/util/tokenStore/FileTokenStore/FileTokenStore.js +178 -0
- package/dist/util/tokenStore/factory.js +8 -11
- package/dist/util/tokenStore/fileTokenStory.js +21 -15
- package/dist/util/tokenStore/firebaseTokenStory.js +1 -1
- package/dist/util/tokenStore/model/token.js +7 -5
- package/dist/util/tokenStore/mongodbTokenStory.js +18 -11
- package/dist/util/tokenStore/redisTokenStory.js +39 -19
- package/dist/util/tokenStore/types.js +2 -0
- package/docker-compose.yml +7 -7
- package/package.json +46 -24
- package/tsconfig.json +105 -0
- package/types.d.ts +2 -0
- package/wppconnect_tokens/bugpromo.data.json +1 -0
- package/dist/config/upload.js.map +0 -1
- package/dist/config.json +0 -77
- package/dist/controller/catalogController.js.map +0 -1
- package/dist/controller/deviceController.js.map +0 -1
- package/dist/controller/encryptController.js.map +0 -1
- package/dist/controller/groupController.js.map +0 -1
- package/dist/controller/labelsController.js.map +0 -1
- package/dist/controller/messageController.js.map +0 -1
- package/dist/controller/orderController.js.map +0 -1
- package/dist/controller/sessionController.js.map +0 -1
- package/dist/controller/statusController.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/mapper/index.js.map +0 -1
- package/dist/mapper/tagone-chat.js.map +0 -1
- package/dist/mapper/tagone-device.js.map +0 -1
- package/dist/mapper/tagone-message-document.js.map +0 -1
- package/dist/mapper/tagone-message-image.js.map +0 -1
- package/dist/mapper/tagone-message-location.js.map +0 -1
- package/dist/mapper/tagone-message-video.js.map +0 -1
- package/dist/mapper/tagone-message.js.map +0 -1
- package/dist/mapper/tagone-onack.js.map +0 -1
- package/dist/mapper/tagone-return.js.map +0 -1
- package/dist/middleware/auth.js.map +0 -1
- package/dist/middleware/healthCheck.js.map +0 -1
- package/dist/middleware/statusConnection.js.map +0 -1
- package/dist/routes/index.js.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/util/chatWootClient.js.map +0 -1
- package/dist/util/createSessionUtil.js.map +0 -1
- package/dist/util/db/mongodb/db.js.map +0 -1
- package/dist/util/db/redis/db.js.map +0 -1
- package/dist/util/functions.js.map +0 -1
- package/dist/util/getAllTokens.js.map +0 -1
- package/dist/util/logger.js.map +0 -1
- package/dist/util/sessionUtil.js.map +0 -1
- package/dist/util/tokenStore/factory.js.map +0 -1
- package/dist/util/tokenStore/fileTokenStory.js.map +0 -1
- package/dist/util/tokenStore/firebaseTokenStory.js.map +0 -1
- package/dist/util/tokenStore/model/token.js.map +0 -1
- package/dist/util/tokenStore/mongodbTokenStory.js.map +0 -1
- package/dist/util/tokenStore/redisTokenStory.js.map +0 -1
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
16
19
|
var _functions = require("../util/functions"); /*
|
|
17
20
|
* Copyright 2021 WPPConnect Team
|
|
18
21
|
*
|
|
@@ -27,15 +30,20 @@ var _functions = require("../util/functions"); /*
|
|
|
27
30
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
28
31
|
* See the License for the specific language governing permissions and
|
|
29
32
|
* limitations under the License.
|
|
30
|
-
*/function returnError(req, res, error) {req.logger.error(error);res.status(500).json({ status: 'Error', message: 'Erro ao enviar a mensagem.', error: error });}async function returnSucess(res, data) {res.status(201).json({ status: 'success', response: data, mapper: 'return' });}
|
|
33
|
+
*/function returnError(req, res, error) {req.logger.error(error);res.status(500).json({ status: 'Error', message: 'Erro ao enviar a mensagem.', error: error });}async function returnSucess(res, data) {res.status(201).json({ status: 'success', response: data, mapper: 'return' });}
|
|
34
|
+
async function sendMessage(req, res) {
|
|
35
|
+
const { phone, message } = req.body;
|
|
36
|
+
|
|
37
|
+
const options = req.body.options || {};
|
|
31
38
|
|
|
32
39
|
try {
|
|
33
|
-
|
|
40
|
+
const results = [];
|
|
34
41
|
for (const contato of phone) {
|
|
35
42
|
results.push(await req.client.sendText(contato, message, options));
|
|
36
43
|
}
|
|
37
44
|
|
|
38
|
-
if (results.length === 0)
|
|
45
|
+
if (results.length === 0)
|
|
46
|
+
return res.status(400).json('Error sending message');
|
|
39
47
|
req.io.emit('mensagem-enviada', results);
|
|
40
48
|
returnSucess(res, results);
|
|
41
49
|
} catch (error) {
|
|
@@ -55,12 +63,18 @@ async function sendFile(req, res) {
|
|
|
55
63
|
const msg = message || caption;
|
|
56
64
|
|
|
57
65
|
try {
|
|
58
|
-
|
|
66
|
+
const results = [];
|
|
59
67
|
for (const contato of phone) {
|
|
60
|
-
results.push(
|
|
68
|
+
results.push(
|
|
69
|
+
await req.client.sendFile(contato, pathFile, {
|
|
70
|
+
filename: filename,
|
|
71
|
+
caption: msg
|
|
72
|
+
}));
|
|
73
|
+
|
|
61
74
|
}
|
|
62
75
|
|
|
63
|
-
if (results.length === 0)
|
|
76
|
+
if (results.length === 0)
|
|
77
|
+
return res.status(400).json('Error sending message');
|
|
64
78
|
if (req.file) await (0, _functions.unlinkAsync)(pathFile);
|
|
65
79
|
returnSucess(res, results);
|
|
66
80
|
} catch (error) {
|
|
@@ -69,15 +83,30 @@ async function sendFile(req, res) {
|
|
|
69
83
|
}
|
|
70
84
|
|
|
71
85
|
async function sendVoice(req, res) {
|
|
72
|
-
const {
|
|
86
|
+
const {
|
|
87
|
+
phone,
|
|
88
|
+
path,
|
|
89
|
+
filename = 'Voice Audio',
|
|
90
|
+
message,
|
|
91
|
+
quotedMessageId
|
|
92
|
+
} = req.body;
|
|
73
93
|
|
|
74
94
|
try {
|
|
75
|
-
|
|
95
|
+
const results = [];
|
|
76
96
|
for (const contato of phone) {
|
|
77
|
-
results.push(
|
|
97
|
+
results.push(
|
|
98
|
+
await req.client.sendPtt(
|
|
99
|
+
contato,
|
|
100
|
+
path,
|
|
101
|
+
filename,
|
|
102
|
+
message,
|
|
103
|
+
quotedMessageId));
|
|
104
|
+
|
|
105
|
+
|
|
78
106
|
}
|
|
79
107
|
|
|
80
|
-
if (results.length === 0)
|
|
108
|
+
if (results.length === 0)
|
|
109
|
+
return res.status(400).json('Error sending message');
|
|
81
110
|
returnSucess(res, results);
|
|
82
111
|
} catch (error) {
|
|
83
112
|
returnError(req, res, error);
|
|
@@ -88,12 +117,15 @@ async function sendVoice64(req, res) {
|
|
|
88
117
|
const { phone, base64Ptt } = req.body;
|
|
89
118
|
|
|
90
119
|
try {
|
|
91
|
-
|
|
120
|
+
const results = [];
|
|
92
121
|
for (const contato of phone) {
|
|
93
|
-
results.push(
|
|
122
|
+
results.push(
|
|
123
|
+
await req.client.sendPttFromBase64(contato, base64Ptt, 'Voice Audio'));
|
|
124
|
+
|
|
94
125
|
}
|
|
95
126
|
|
|
96
|
-
if (results.length === 0)
|
|
127
|
+
if (results.length === 0)
|
|
128
|
+
return res.status(400).json('Error sending message');
|
|
97
129
|
returnSucess(res, results);
|
|
98
130
|
} catch (error) {
|
|
99
131
|
returnError(req, res, error);
|
|
@@ -104,12 +136,15 @@ async function sendLinkPreview(req, res) {
|
|
|
104
136
|
const { phone, url, caption } = req.body;
|
|
105
137
|
|
|
106
138
|
try {
|
|
107
|
-
|
|
139
|
+
const results = [];
|
|
108
140
|
for (const contato of phone) {
|
|
109
|
-
results.push(
|
|
141
|
+
results.push(
|
|
142
|
+
await req.client.sendLinkPreview(`${contato}`, url, caption));
|
|
143
|
+
|
|
110
144
|
}
|
|
111
145
|
|
|
112
|
-
if (results.length === 0)
|
|
146
|
+
if (results.length === 0)
|
|
147
|
+
return res.status(400).json('Error sending message');
|
|
113
148
|
returnSucess(res, results);
|
|
114
149
|
} catch (error) {
|
|
115
150
|
returnError(req, res, error);
|
|
@@ -120,12 +155,20 @@ async function sendLocation(req, res) {
|
|
|
120
155
|
const { phone, lat, lng, title, address } = req.body;
|
|
121
156
|
|
|
122
157
|
try {
|
|
123
|
-
|
|
158
|
+
const results = [];
|
|
124
159
|
for (const contato of phone) {
|
|
125
|
-
results.push(
|
|
160
|
+
results.push(
|
|
161
|
+
await req.client.sendLocation(contato, {
|
|
162
|
+
lat: lat,
|
|
163
|
+
lng: lng,
|
|
164
|
+
address: address,
|
|
165
|
+
name: title
|
|
166
|
+
}));
|
|
167
|
+
|
|
126
168
|
}
|
|
127
169
|
|
|
128
|
-
if (results.length === 0)
|
|
170
|
+
if (results.length === 0)
|
|
171
|
+
return res.status(400).json('Error sending message');
|
|
129
172
|
returnSucess(res, results);
|
|
130
173
|
} catch (error) {
|
|
131
174
|
returnError(req, res, error);
|
|
@@ -136,25 +179,31 @@ async function sendButtons(req, res) {
|
|
|
136
179
|
const { phone, message, options } = req.body;
|
|
137
180
|
|
|
138
181
|
try {
|
|
139
|
-
|
|
182
|
+
const results = [];
|
|
140
183
|
|
|
141
184
|
for (const contact of phone) {
|
|
142
185
|
results.push(await req.client.sendText(contact, message, options));
|
|
143
186
|
}
|
|
144
187
|
|
|
145
|
-
if (results.length === 0)
|
|
188
|
+
if (results.length === 0)
|
|
189
|
+
return returnError(req, res, 'Error sending message with buttons');
|
|
146
190
|
|
|
147
|
-
returnSucess(res, phone
|
|
191
|
+
returnSucess(res, phone);
|
|
148
192
|
} catch (error) {
|
|
149
193
|
returnError(req, res, error);
|
|
150
194
|
}
|
|
151
195
|
}
|
|
152
196
|
|
|
153
197
|
async function sendListMessage(req, res) {
|
|
154
|
-
const {
|
|
198
|
+
const {
|
|
199
|
+
phone,
|
|
200
|
+
description = '',
|
|
201
|
+
sections,
|
|
202
|
+
buttonText = 'SELECIONE UMA OPÇÃO'
|
|
203
|
+
} = req.body;
|
|
155
204
|
|
|
156
205
|
try {
|
|
157
|
-
|
|
206
|
+
const results = [];
|
|
158
207
|
|
|
159
208
|
for (const contact of phone) {
|
|
160
209
|
results.push(
|
|
@@ -166,7 +215,8 @@ async function sendListMessage(req, res) {
|
|
|
166
215
|
|
|
167
216
|
}
|
|
168
217
|
|
|
169
|
-
if (results.length === 0)
|
|
218
|
+
if (results.length === 0)
|
|
219
|
+
return returnError(req, res, 'Error sending list buttons');
|
|
170
220
|
|
|
171
221
|
returnSucess(res, results);
|
|
172
222
|
} catch (error) {
|
|
@@ -178,13 +228,16 @@ async function sendPollMessage(req, res) {
|
|
|
178
228
|
const { phone, name, choices, options } = req.body;
|
|
179
229
|
|
|
180
230
|
try {
|
|
181
|
-
|
|
231
|
+
const results = [];
|
|
182
232
|
|
|
183
233
|
for (const contact of phone) {
|
|
184
|
-
results.push(
|
|
234
|
+
results.push(
|
|
235
|
+
await req.client.sendPollMessage(contact, name, choices, options));
|
|
236
|
+
|
|
185
237
|
}
|
|
186
238
|
|
|
187
|
-
if (results.length === 0)
|
|
239
|
+
if (results.length === 0)
|
|
240
|
+
return returnError(req, res, 'Error sending poll message');
|
|
188
241
|
|
|
189
242
|
returnSucess(res, results);
|
|
190
243
|
} catch (error) {
|
|
@@ -196,10 +249,11 @@ async function sendStatusText(req, res) {
|
|
|
196
249
|
const { message } = req.body;
|
|
197
250
|
|
|
198
251
|
try {
|
|
199
|
-
|
|
252
|
+
const results = [];
|
|
200
253
|
results.push(await req.client.sendText('status@broadcast', message));
|
|
201
254
|
|
|
202
|
-
if (results.length === 0)
|
|
255
|
+
if (results.length === 0)
|
|
256
|
+
return res.status(400).json('Error sending message');
|
|
203
257
|
returnSucess(res, results);
|
|
204
258
|
} catch (error) {
|
|
205
259
|
returnError(req, res, error);
|
|
@@ -210,12 +264,13 @@ async function replyMessage(req, res) {
|
|
|
210
264
|
const { phone, message, messageId } = req.body;
|
|
211
265
|
|
|
212
266
|
try {
|
|
213
|
-
|
|
267
|
+
const results = [];
|
|
214
268
|
for (const contato of phone) {
|
|
215
269
|
results.push(await req.client.reply(contato, message, messageId));
|
|
216
270
|
}
|
|
217
271
|
|
|
218
|
-
if (results.length === 0)
|
|
272
|
+
if (results.length === 0)
|
|
273
|
+
return res.status(400).json('Error sending message');
|
|
219
274
|
req.io.emit('mensagem-enviada', { message: message, to: phone });
|
|
220
275
|
returnSucess(res, results);
|
|
221
276
|
} catch (error) {
|
|
@@ -229,13 +284,21 @@ async function sendMentioned(req, res) {
|
|
|
229
284
|
try {
|
|
230
285
|
let response;
|
|
231
286
|
for (const contato of phone) {
|
|
232
|
-
response = await req.client.sendMentioned(
|
|
287
|
+
response = await req.client.sendMentioned(
|
|
288
|
+
`${contato}`,
|
|
289
|
+
message,
|
|
290
|
+
mentioned);
|
|
291
|
+
|
|
233
292
|
}
|
|
234
293
|
|
|
235
294
|
return res.status(201).json({ status: 'success', response: response });
|
|
236
295
|
} catch (error) {
|
|
237
296
|
req.logger.error(error);
|
|
238
|
-
return res.status(500).json({
|
|
297
|
+
return res.status(500).json({
|
|
298
|
+
status: 'error',
|
|
299
|
+
message: 'Error on send message mentioned',
|
|
300
|
+
error: error
|
|
301
|
+
});
|
|
239
302
|
}
|
|
240
303
|
}
|
|
241
304
|
async function sendImageAsSticker(req, res) {
|
|
@@ -249,12 +312,13 @@ async function sendImageAsSticker(req, res) {
|
|
|
249
312
|
const pathFile = path || req.file.path;
|
|
250
313
|
|
|
251
314
|
try {
|
|
252
|
-
|
|
315
|
+
const results = [];
|
|
253
316
|
for (const contato of phone) {
|
|
254
317
|
results.push(await req.client.sendImageAsSticker(contato, pathFile));
|
|
255
318
|
}
|
|
256
319
|
|
|
257
|
-
if (results.length === 0)
|
|
320
|
+
if (results.length === 0)
|
|
321
|
+
return res.status(400).json('Error sending message');
|
|
258
322
|
if (req.file) await (0, _functions.unlinkAsync)(pathFile);
|
|
259
323
|
returnSucess(res, results);
|
|
260
324
|
} catch (error) {
|
|
@@ -272,16 +336,17 @@ async function sendImageAsStickerGif(req, res) {
|
|
|
272
336
|
const pathFile = path || req.file.path;
|
|
273
337
|
|
|
274
338
|
try {
|
|
275
|
-
|
|
339
|
+
const results = [];
|
|
276
340
|
for (const contato of phone) {
|
|
277
341
|
results.push(await req.client.sendImageAsStickerGif(contato, pathFile));
|
|
278
342
|
}
|
|
279
343
|
|
|
280
|
-
if (results.length === 0)
|
|
344
|
+
if (results.length === 0)
|
|
345
|
+
return res.status(400).json('Error sending message');
|
|
281
346
|
if (req.file) await (0, _functions.unlinkAsync)(pathFile);
|
|
282
347
|
returnSucess(res, results);
|
|
283
348
|
} catch (error) {
|
|
284
349
|
returnError(req, res, error);
|
|
285
350
|
}
|
|
286
351
|
}
|
|
287
|
-
//# sourceMappingURL=messageController.js.map
|
|
352
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnVuY3Rpb25zIiwicmVxdWlyZSIsInJldHVybkVycm9yIiwicmVxIiwicmVzIiwiZXJyb3IiLCJsb2dnZXIiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsInJldHVyblN1Y2VzcyIsImRhdGEiLCJyZXNwb25zZSIsIm1hcHBlciIsInNlbmRNZXNzYWdlIiwicGhvbmUiLCJib2R5Iiwib3B0aW9ucyIsInJlc3VsdHMiLCJjb250YXRvIiwicHVzaCIsImNsaWVudCIsInNlbmRUZXh0IiwibGVuZ3RoIiwiaW8iLCJlbWl0Iiwic2VuZEZpbGUiLCJwYXRoIiwiYmFzZTY0IiwiZmlsZW5hbWUiLCJjYXB0aW9uIiwiZmlsZSIsInNlbmQiLCJwYXRoRmlsZSIsIm1zZyIsInVubGlua0FzeW5jIiwic2VuZFZvaWNlIiwicXVvdGVkTWVzc2FnZUlkIiwic2VuZFB0dCIsInNlbmRWb2ljZTY0IiwiYmFzZTY0UHR0Iiwic2VuZFB0dEZyb21CYXNlNjQiLCJzZW5kTGlua1ByZXZpZXciLCJ1cmwiLCJzZW5kTG9jYXRpb24iLCJsYXQiLCJsbmciLCJ0aXRsZSIsImFkZHJlc3MiLCJuYW1lIiwic2VuZEJ1dHRvbnMiLCJjb250YWN0Iiwic2VuZExpc3RNZXNzYWdlIiwiZGVzY3JpcHRpb24iLCJzZWN0aW9ucyIsImJ1dHRvblRleHQiLCJzZW5kUG9sbE1lc3NhZ2UiLCJjaG9pY2VzIiwic2VuZFN0YXR1c1RleHQiLCJyZXBseU1lc3NhZ2UiLCJtZXNzYWdlSWQiLCJyZXBseSIsInRvIiwic2VuZE1lbnRpb25lZCIsIm1lbnRpb25lZCIsInNlbmRJbWFnZUFzU3RpY2tlciIsInNlbmRJbWFnZUFzU3RpY2tlckdpZiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyL21lc3NhZ2VDb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBXUFBDb25uZWN0IFRlYW1cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5cbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICcuLi90eXBlcy9SZXF1ZXN0JztcbmltcG9ydCB7IHVubGlua0FzeW5jIH0gZnJvbSAnLi4vdXRpbC9mdW5jdGlvbnMnO1xuXG5mdW5jdGlvbiByZXR1cm5FcnJvcihyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIGVycm9yOiBhbnkpIHtcbiAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgbWVzc2FnZTogJ0Vycm8gYW8gZW52aWFyIGEgbWVuc2FnZW0uJyxcbiAgICBlcnJvcjogZXJyb3IsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXR1cm5TdWNlc3MocmVzOiBhbnksIGRhdGE6IGFueSkge1xuICByZXMuc3RhdHVzKDIwMSkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogZGF0YSwgbWFwcGVyOiAncmV0dXJuJyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRNZXNzYWdlKHJlcTogUmVxdWVzdCwgcmVzOiBhbnkpIHtcbiAgY29uc3QgeyBwaG9uZSwgbWVzc2FnZSB9ID0gcmVxLmJvZHk7XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHJlcS5ib2R5Lm9wdGlvbnMgfHwge307XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCByZXEuY2xpZW50LnNlbmRUZXh0KGNvbnRhdG8sIG1lc3NhZ2UsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIHJlcS5pby5lbWl0KCdtZW5zYWdlbS1lbnZpYWRhJywgcmVzdWx0cyk7XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZEZpbGUocmVxOiBSZXF1ZXN0LCByZXM6IGFueSkge1xuICBjb25zdCB7IHBob25lLCBwYXRoLCBiYXNlNjQsIGZpbGVuYW1lID0gJ2ZpbGUnLCBtZXNzYWdlLCBjYXB0aW9uIH0gPSByZXEuYm9keTtcblxuICBpZiAoIXBhdGggJiYgIXJlcS5maWxlICYmICFiYXNlNjQpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICdTZW5kaW5nIHRoZSBmaWxlIGlzIG1hbmRhdG9yeScsXG4gICAgfSk7XG5cbiAgY29uc3QgcGF0aEZpbGUgPSBwYXRoIHx8IGJhc2U2NCB8fCByZXEuZmlsZS5wYXRoO1xuICBjb25zdCBtc2cgPSBtZXNzYWdlIHx8IGNhcHRpb247XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgYXdhaXQgcmVxLmNsaWVudC5zZW5kRmlsZShjb250YXRvLCBwYXRoRmlsZSwge1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlbmFtZSxcbiAgICAgICAgICBjYXB0aW9uOiBtc2csXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbignRXJyb3Igc2VuZGluZyBtZXNzYWdlJyk7XG4gICAgaWYgKHJlcS5maWxlKSBhd2FpdCB1bmxpbmtBc3luYyhwYXRoRmlsZSk7XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFZvaWNlKHJlcTogUmVxdWVzdCwgcmVzOiBhbnkpIHtcbiAgY29uc3Qge1xuICAgIHBob25lLFxuICAgIHBhdGgsXG4gICAgZmlsZW5hbWUgPSAnVm9pY2UgQXVkaW8nLFxuICAgIG1lc3NhZ2UsXG4gICAgcXVvdGVkTWVzc2FnZUlkLFxuICB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgYXdhaXQgcmVxLmNsaWVudC5zZW5kUHR0KFxuICAgICAgICAgIGNvbnRhdG8sXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHF1b3RlZE1lc3NhZ2VJZFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbignRXJyb3Igc2VuZGluZyBtZXNzYWdlJyk7XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFZvaWNlNjQocmVxOiBSZXF1ZXN0LCByZXM6IGFueSkge1xuICBjb25zdCB7IHBob25lLCBiYXNlNjRQdHQgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgIGF3YWl0IHJlcS5jbGllbnQuc2VuZFB0dEZyb21CYXNlNjQoY29udGF0bywgYmFzZTY0UHR0LCAnVm9pY2UgQXVkaW8nKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRMaW5rUHJldmlldyhyZXE6IFJlcXVlc3QsIHJlczogYW55KSB7XG4gIGNvbnN0IHsgcGhvbmUsIHVybCwgY2FwdGlvbiB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgYXdhaXQgcmVxLmNsaWVudC5zZW5kTGlua1ByZXZpZXcoYCR7Y29udGF0b31gLCB1cmwsIGNhcHRpb24pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbignRXJyb3Igc2VuZGluZyBtZXNzYWdlJyk7XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZExvY2F0aW9uKHJlcTogUmVxdWVzdCwgcmVzOiBhbnkpIHtcbiAgY29uc3QgeyBwaG9uZSwgbGF0LCBsbmcsIHRpdGxlLCBhZGRyZXNzIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBwaG9uZSkge1xuICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICBhd2FpdCByZXEuY2xpZW50LnNlbmRMb2NhdGlvbihjb250YXRvLCB7XG4gICAgICAgICAgbGF0OiBsYXQsXG4gICAgICAgICAgbG5nOiBsbmcsXG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgICBuYW1lOiB0aXRsZSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKCdFcnJvciBzZW5kaW5nIG1lc3NhZ2UnKTtcbiAgICByZXR1cm5TdWNlc3MocmVzLCByZXN1bHRzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm5FcnJvcihyZXEsIHJlcywgZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kQnV0dG9ucyhyZXE6IFJlcXVlc3QsIHJlczogYW55KSB7XG4gIGNvbnN0IHsgcGhvbmUsIG1lc3NhZ2UsIG9wdGlvbnMgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRhY3Qgb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCByZXEuY2xpZW50LnNlbmRUZXh0KGNvbnRhY3QsIG1lc3NhZ2UsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmV0dXJuRXJyb3IocmVxLCByZXMsICdFcnJvciBzZW5kaW5nIG1lc3NhZ2Ugd2l0aCBidXR0b25zJyk7XG5cbiAgICByZXR1cm5TdWNlc3MocmVzLCBwaG9uZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZExpc3RNZXNzYWdlKHJlcTogUmVxdWVzdCwgcmVzOiBhbnkpIHtcbiAgY29uc3Qge1xuICAgIHBob25lLFxuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgc2VjdGlvbnMsXG4gICAgYnV0dG9uVGV4dCA9ICdTRUxFQ0lPTkUgVU1BIE9Qw4fDg08nLFxuICB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29udGFjdCBvZiBwaG9uZSkge1xuICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICBhd2FpdCByZXEuY2xpZW50LnNlbmRMaXN0TWVzc2FnZShjb250YWN0LCB7XG4gICAgICAgICAgYnV0dG9uVGV4dDogYnV0dG9uVGV4dCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgc2VjdGlvbnM6IHNlY3Rpb25zLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmV0dXJuRXJyb3IocmVxLCByZXMsICdFcnJvciBzZW5kaW5nIGxpc3QgYnV0dG9ucycpO1xuXG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFBvbGxNZXNzYWdlKHJlcTogUmVxdWVzdCwgcmVzOiBhbnkpIHtcbiAgY29uc3QgeyBwaG9uZSwgbmFtZSwgY2hvaWNlcywgb3B0aW9ucyB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29udGFjdCBvZiBwaG9uZSkge1xuICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICBhd2FpdCByZXEuY2xpZW50LnNlbmRQb2xsTWVzc2FnZShjb250YWN0LCBuYW1lLCBjaG9pY2VzLCBvcHRpb25zKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmV0dXJuRXJyb3IocmVxLCByZXMsICdFcnJvciBzZW5kaW5nIHBvbGwgbWVzc2FnZScpO1xuXG4gICAgcmV0dXJuU3VjZXNzKHJlcywgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFN0YXR1c1RleHQocmVxOiBSZXF1ZXN0LCByZXM6IGFueSkge1xuICBjb25zdCB7IG1lc3NhZ2UgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgcmVzdWx0cy5wdXNoKGF3YWl0IHJlcS5jbGllbnQuc2VuZFRleHQoJ3N0YXR1c0Bicm9hZGNhc3QnLCBtZXNzYWdlKSk7XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGx5TWVzc2FnZShyZXE6IFJlcXVlc3QsIHJlczogYW55KSB7XG4gIGNvbnN0IHsgcGhvbmUsIG1lc3NhZ2UsIG1lc3NhZ2VJZCB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCByZXEuY2xpZW50LnJlcGx5KGNvbnRhdG8sIG1lc3NhZ2UsIG1lc3NhZ2VJZCkpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbignRXJyb3Igc2VuZGluZyBtZXNzYWdlJyk7XG4gICAgcmVxLmlvLmVtaXQoJ21lbnNhZ2VtLWVudmlhZGEnLCB7IG1lc3NhZ2U6IG1lc3NhZ2UsIHRvOiBwaG9uZSB9KTtcbiAgICByZXR1cm5TdWNlc3MocmVzLCByZXN1bHRzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm5FcnJvcihyZXEsIHJlcywgZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kTWVudGlvbmVkKHJlcTogUmVxdWVzdCwgcmVzOiBhbnkpIHtcbiAgY29uc3QgeyBwaG9uZSwgbWVzc2FnZSwgbWVudGlvbmVkIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGxldCByZXNwb25zZTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgcGhvbmUpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5zZW5kTWVudGlvbmVkKFxuICAgICAgICBgJHtjb250YXRvfWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIG1lbnRpb25lZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gc2VuZCBtZXNzYWdlIG1lbnRpb25lZCcsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kSW1hZ2VBc1N0aWNrZXIocmVxOiBSZXF1ZXN0LCByZXM6IGFueSkge1xuICBjb25zdCB7IHBob25lLCBwYXRoIH0gPSByZXEuYm9keTtcblxuICBpZiAoIXBhdGggJiYgIXJlcS5maWxlKVxuICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuc2VuZCh7XG4gICAgICBtZXNzYWdlOiAnU2VuZGluZyB0aGUgZmlsZSBpcyBtYW5kYXRvcnknLFxuICAgIH0pO1xuXG4gIGNvbnN0IHBhdGhGaWxlID0gcGF0aCB8fCByZXEuZmlsZS5wYXRoO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goYXdhaXQgcmVxLmNsaWVudC5zZW5kSW1hZ2VBc1N0aWNrZXIoY29udGF0bywgcGF0aEZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIGlmIChyZXEuZmlsZSkgYXdhaXQgdW5saW5rQXN5bmMocGF0aEZpbGUpO1xuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kSW1hZ2VBc1N0aWNrZXJHaWYocmVxOiBSZXF1ZXN0LCByZXM6IGFueSkge1xuICBjb25zdCB7IHBob25lLCBwYXRoIH0gPSByZXEuYm9keTtcblxuICBpZiAoIXBhdGggJiYgIXJlcS5maWxlKVxuICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuc2VuZCh7XG4gICAgICBtZXNzYWdlOiAnU2VuZGluZyB0aGUgZmlsZSBpcyBtYW5kYXRvcnknLFxuICAgIH0pO1xuXG4gIGNvbnN0IHBhdGhGaWxlID0gcGF0aCB8fCByZXEuZmlsZS5wYXRoO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goYXdhaXQgcmVxLmNsaWVudC5zZW5kSW1hZ2VBc1N0aWNrZXJHaWYoY29udGF0bywgcGF0aEZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZScpO1xuICAgIGlmIChyZXEuZmlsZSkgYXdhaXQgdW5saW5rQXN5bmMocGF0aEZpbGUpO1xuICAgIHJldHVyblN1Y2VzcyhyZXMsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBlcnJvcik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLElBQUFBLFVBQUEsR0FBQUMsT0FBQSxzQkFBZ0QsQ0FsQmhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQU1BLFNBQVNDLFdBQVdBLENBQUNDLEdBQVksRUFBRUMsR0FBYSxFQUFFQyxLQUFVLEVBQUUsQ0FDNURGLEdBQUcsQ0FBQ0csTUFBTSxDQUFDRCxLQUFLLENBQUNBLEtBQUssQ0FBQyxDQUN2QkQsR0FBRyxDQUFDRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQyxFQUNuQkQsTUFBTSxFQUFFLE9BQU8sRUFDZkUsT0FBTyxFQUFFLDRCQUE0QixFQUNyQ0osS0FBSyxFQUFFQSxLQUFLLENBQ2QsQ0FBQyxDQUFDLENBQ0osQ0FFQSxlQUFlSyxZQUFZQSxDQUFDTixHQUFRLEVBQUVPLElBQVMsRUFBRSxDQUMvQ1AsR0FBRyxDQUFDRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQyxFQUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFSyxRQUFRLEVBQUVELElBQUksRUFBRUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDL0U7QUFFTyxlQUFlQyxXQUFXQSxDQUFDWCxHQUFZLEVBQUVDLEdBQVEsRUFBRTtFQUN4RCxNQUFNLEVBQUVXLEtBQUssRUFBRU4sT0FBTyxDQUFDLENBQUMsR0FBR04sR0FBRyxDQUFDYSxJQUFJOztFQUVuQyxNQUFNQyxPQUFPLEdBQUdkLEdBQUcsQ0FBQ2EsSUFBSSxDQUFDQyxPQUFP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
|
|
@@ -13,7 +13,16 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
function returnSucess(
|
|
21
|
+
res,
|
|
22
|
+
session,
|
|
23
|
+
phone,
|
|
24
|
+
data)
|
|
25
|
+
{
|
|
17
26
|
res.status(201).json({
|
|
18
27
|
status: 'Success',
|
|
19
28
|
response: {
|
|
@@ -25,7 +34,12 @@ function returnSucess(res, session, phone, data) {
|
|
|
25
34
|
});
|
|
26
35
|
}
|
|
27
36
|
|
|
28
|
-
function returnError(
|
|
37
|
+
function returnError(
|
|
38
|
+
req,
|
|
39
|
+
res,
|
|
40
|
+
session,
|
|
41
|
+
error)
|
|
42
|
+
{
|
|
29
43
|
req.logger.error(error);
|
|
30
44
|
res.status(400).json({
|
|
31
45
|
status: 'Error',
|
|
@@ -42,7 +56,7 @@ async function getBusinessProfilesProducts(req, res) {
|
|
|
42
56
|
const { phone } = req.body;
|
|
43
57
|
|
|
44
58
|
try {
|
|
45
|
-
|
|
59
|
+
const results = [];
|
|
46
60
|
|
|
47
61
|
for (const contato of phone) {
|
|
48
62
|
results.push(await req.client.getBusinessProfilesProducts(contato));
|
|
@@ -58,13 +72,11 @@ async function getOrderbyMsg(req, res) {
|
|
|
58
72
|
const { messageId } = req.body;
|
|
59
73
|
|
|
60
74
|
try {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
result = await req.client.getOrderbyMsg(messageId);
|
|
75
|
+
const result = await req.client.getOrderbyMsg(messageId);
|
|
64
76
|
|
|
65
77
|
returnSucess(res, session, null, result);
|
|
66
78
|
} catch (error) {
|
|
67
79
|
returnError(req, res, session, error);
|
|
68
80
|
}
|
|
69
81
|
}
|
|
70
|
-
//# sourceMappingURL=
|
|
82
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXR1cm5TdWNlc3MiLCJyZXMiLCJzZXNzaW9uIiwicGhvbmUiLCJkYXRhIiwic3RhdHVzIiwianNvbiIsInJlc3BvbnNlIiwibWVzc2FnZSIsImNvbnRhY3QiLCJyZXR1cm5FcnJvciIsInJlcSIsImVycm9yIiwibG9nZ2VyIiwibG9nIiwiZ2V0QnVzaW5lc3NQcm9maWxlc1Byb2R1Y3RzIiwiYm9keSIsInJlc3VsdHMiLCJjb250YXRvIiwicHVzaCIsImNsaWVudCIsImdldE9yZGVyYnlNc2ciLCJtZXNzYWdlSWQiLCJyZXN1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJvbGxlci9vcmRlckNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIxIFdQUENvbm5lY3QgVGVhbVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcblxuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJy4uL3R5cGVzL1JlcXVlc3QnO1xuXG5mdW5jdGlvbiByZXR1cm5TdWNlc3MoXG4gIHJlczogUmVzcG9uc2UsXG4gIHNlc3Npb246IHN0cmluZyxcbiAgcGhvbmU6IHN0cmluZyB8IG51bGwsXG4gIGRhdGE/OiBhbnlcbikge1xuICByZXMuc3RhdHVzKDIwMSkuanNvbih7XG4gICAgc3RhdHVzOiAnU3VjY2VzcycsXG4gICAgcmVzcG9uc2U6IHtcbiAgICAgIG1lc3NhZ2U6ICdJbmZvcm1hdGlvbiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LicsXG4gICAgICBjb250YWN0OiBwaG9uZSxcbiAgICAgIHNlc3Npb246IHNlc3Npb24sXG4gICAgICBkYXRhOiBkYXRhLFxuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXR1cm5FcnJvcihcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICBzZXNzaW9uOiBzdHJpbmcsXG4gIGVycm9yPzogYW55XG4pIHtcbiAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtcbiAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgcmVzcG9uc2U6IHtcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uJyxcbiAgICAgIHNlc3Npb246IHNlc3Npb24sXG4gICAgICBsb2c6IGVycm9yLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QnVzaW5lc3NQcm9maWxlc1Byb2R1Y3RzKHJlcTogUmVxdWVzdCwgcmVzOiBhbnkpIHtcbiAgY29uc3Qgc2Vzc2lvbiA9IHJlcS5zZXNzaW9uO1xuICBjb25zdCB7IHBob25lIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goYXdhaXQgcmVxLmNsaWVudC5nZXRCdXNpbmVzc1Byb2ZpbGVzUHJvZHVjdHMoY29udGF0bykpO1xuICAgIH1cblxuICAgIHJldHVyblN1Y2VzcyhyZXMsIHNlc3Npb24sIHBob25lLCByZXN1bHRzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm5FcnJvcihyZXEsIHJlcywgc2Vzc2lvbiwgZXJyb3IpO1xuICB9XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3JkZXJieU1zZyhyZXE6IFJlcXVlc3QsIHJlczogYW55KSB7XG4gIGNvbnN0IHNlc3Npb24gPSByZXEuc2Vzc2lvbjtcbiAgY29uc3QgeyBtZXNzYWdlSWQgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5nZXRPcmRlcmJ5TXNnKG1lc3NhZ2VJZCk7XG5cbiAgICByZXR1cm5TdWNlc3MocmVzLCBzZXNzaW9uLCBudWxsLCByZXN1bHQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBzZXNzaW9uLCBlcnJvcik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Im9MQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQSxTQUFTQSxZQUFZQTtBQUNuQkMsR0FBYTtBQUNiQyxPQUFlO0FBQ2ZDLEtBQW9CO0FBQ3BCQyxJQUFVO0FBQ1Y7RUFDQUgsR0FBRyxDQUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQztJQUNuQkQsTUFBTSxFQUFFLFNBQVM7SUFDakJFLFFBQVEsRUFBRTtNQUNSQyxPQUFPLEVBQUUscUNBQXFDO01BQzlDQyxPQUFPLEVBQUVOLEtBQUs7TUFDZEQsT0FBTyxFQUFFQSxPQUFPO01BQ2hCRSxJQUFJLEVBQUVBO0lBQ1I7RUFDRixDQUFDLENBQUM7QUFDSjs7QUFFQSxTQUFTTSxXQUFXQTtBQUNsQkMsR0FBWTtBQUNaVixHQUFhO0FBQ2JDLE9BQWU7QUFDZlUsS0FBVztBQUNYO0VBQ0FELEdBQUcsQ0FBQ0UsTUFBTSxDQUFDRCxLQUFLLENBQUNBLEtBQUssQ0FBQztFQUN2QlgsR0FBRyxDQUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQztJQUNuQkQsTUFBTSxFQUFFLE9BQU87SUFDZkUsUUFBUSxFQUFFO01BQ1JDLE9BQU8sRUFBRSw4QkFBOEI7TUFDdkNOLE9BQU8sRUFBRUEsT0FBTztNQUNoQlksR0FBRyxFQUFFRjtJQUNQO0VBQ0YsQ0FBQyxDQUFDO0FBQ0o7O0FBRU8sZUFBZUcsMkJBQTJCQSxDQUFDSixHQUFZLEVBQUVWLEdBQVEsRUFBRTtFQUN4RSxNQUFNQyxPQUFPLEdBQUdTLEdBQUcsQ0FBQ1QsT0FBTztFQUMzQixNQUFNLEVBQUVDLEtBQUssQ0FBQyxDQUFDLEdBQUdRLEdBQUcsQ0FBQ0ssSUFBSTs7RUFFMUIsSUFBSTtJQUNGLE1BQU1DLE9BQVksR0FBRyxFQUFFOztJQUV2QixLQUFLLE1BQU1DLE9BQU8sSUFBSWYsS0FBSyxFQUFFO01BQzNCYyxPQUFPLENBQUNFLElBQUksQ0FBQyxNQUFNUixHQUFHLENBQUNTLE1BQU0sQ0FBQ0wsMkJBQTJCLENBQUNHLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFOztJQUVBbEIsWUFBWSxDQUFDQyxHQUFHLEVBQUVDLE9BQU8sRUFBRUMsS0FBSyxFQUFFYyxPQUFPLENBQUM7RUFDNUMsQ0FBQyxDQUFDLE9BQU9MLEtBQUssRUFBRTtJQUNkRixXQUFXLENBQUNDLEdBQUcsRUFBRVYsR0FBRyxFQUFFQyxPQUFPLEVBQUVVLEtBQUssQ0FBQztFQUN2QztBQUNGO0FBQ08sZUFBZVMsYUFBYUEsQ0FBQ1YsR0FBWSxFQUFFVixHQUFRLEVBQUU7RUFDMUQsTUFBTUMsT0FBTyxHQUFHUyxHQUFHLENBQUNULE9BQU87RUFDM0IsTUFBTSxFQUFFb0IsU0FBUyxDQUFDLENBQUMsR0FBR1gsR0FBRyxDQUFDSyxJQUFJOztFQUU5QixJQUFJO0lBQ0YsTUFBTU8sTUFBTSxHQUFHLE1BQU1aLEdBQUcsQ0FBQ1MsTUFBTSxDQUFDQyxhQUFhLENBQUNDLFNBQVMsQ0FBQzs7SUFFeER0QixZQUFZLENBQUNDLEdBQUcsRUFBRUMsT0FBTyxFQUFFLElBQUksRUFBRXFCLE1BQU0sQ0FBQztFQUMxQyxDQUFDLENBQUMsT0FBT1gsS0FBSyxFQUFFO0lBQ2RGLFdBQVcsQ0FBQ0MsR0FBRyxFQUFFVixHQUFHLEVBQUVDLE9BQU8sRUFBRVUsS0FBSyxDQUFDO0VBQ3ZDO0FBQ0YifQ==
|