@wppconnect/server 1.8.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/config/upload.js +4 -4
  3. package/dist/config.js +78 -0
  4. package/dist/controller/catalogController.js +127 -22
  5. package/dist/controller/deviceController.js +324 -114
  6. package/dist/controller/encryptController.js +4 -2
  7. package/dist/controller/groupController.js +157 -44
  8. package/dist/controller/labelsController.js +46 -8
  9. package/dist/controller/messageController.js +104 -39
  10. package/dist/controller/orderController.js +19 -7
  11. package/dist/controller/sessionController.js +100 -35
  12. package/dist/controller/statusController.js +18 -10
  13. package/dist/index.js +47 -25
  14. package/dist/mapper/index.js +7 -5
  15. package/dist/mapper/tagone-chat.js +1 -1
  16. package/dist/mapper/tagone-device.js +1 -1
  17. package/dist/mapper/tagone-message-document.js +1 -1
  18. package/dist/mapper/tagone-message-image.js +1 -1
  19. package/dist/mapper/tagone-message-location.js +1 -1
  20. package/dist/mapper/tagone-message-video.js +1 -1
  21. package/dist/mapper/tagone-message.js +1 -1
  22. package/dist/mapper/tagone-onack.js +1 -1
  23. package/dist/mapper/tagone-return.js +4 -2
  24. package/dist/middleware/auth.js +29 -9
  25. package/dist/middleware/healthCheck.js +1 -1
  26. package/dist/middleware/statusConnection.js +9 -3
  27. package/dist/routes/index.js +618 -112
  28. package/dist/server.js +2 -2
  29. package/dist/swagger.json +76 -0
  30. package/dist/types/Request.js +2 -0
  31. package/dist/types/ServerOptions.js +2 -0
  32. package/dist/types/WhatsAppServer.js +2 -0
  33. package/dist/util/chatWootClient.js +55 -22
  34. package/dist/util/createSessionUtil.js +65 -17
  35. package/dist/util/db/mongodb/db.js +10 -7
  36. package/dist/util/db/redis/db.js +7 -5
  37. package/dist/util/functions.js +81 -37
  38. package/dist/util/getAllTokens.js +1 -1
  39. package/dist/util/logger.js +2 -3
  40. package/dist/util/sessionUtil.js +5 -4
  41. package/dist/util/tokenStore/FileTokenStore/FileTokenStore.js +178 -0
  42. package/dist/util/tokenStore/factory.js +8 -11
  43. package/dist/util/tokenStore/fileTokenStory.js +21 -15
  44. package/dist/util/tokenStore/firebaseTokenStory.js +1 -1
  45. package/dist/util/tokenStore/model/token.js +7 -5
  46. package/dist/util/tokenStore/mongodbTokenStory.js +18 -11
  47. package/dist/util/tokenStore/redisTokenStory.js +39 -19
  48. package/dist/util/tokenStore/types.js +2 -0
  49. package/package.json +50 -28
  50. package/tsconfig.json +105 -0
  51. package/types.d.ts +2 -0
  52. package/dist/config/upload.js.map +0 -1
  53. package/dist/config.json +0 -77
  54. package/dist/controller/catalogController.js.map +0 -1
  55. package/dist/controller/deviceController.js.map +0 -1
  56. package/dist/controller/encryptController.js.map +0 -1
  57. package/dist/controller/groupController.js.map +0 -1
  58. package/dist/controller/labelsController.js.map +0 -1
  59. package/dist/controller/messageController.js.map +0 -1
  60. package/dist/controller/orderController.js.map +0 -1
  61. package/dist/controller/sessionController.js.map +0 -1
  62. package/dist/controller/statusController.js.map +0 -1
  63. package/dist/index.js.map +0 -1
  64. package/dist/mapper/index.js.map +0 -1
  65. package/dist/mapper/tagone-chat.js.map +0 -1
  66. package/dist/mapper/tagone-device.js.map +0 -1
  67. package/dist/mapper/tagone-message-document.js.map +0 -1
  68. package/dist/mapper/tagone-message-image.js.map +0 -1
  69. package/dist/mapper/tagone-message-location.js.map +0 -1
  70. package/dist/mapper/tagone-message-video.js.map +0 -1
  71. package/dist/mapper/tagone-message.js.map +0 -1
  72. package/dist/mapper/tagone-onack.js.map +0 -1
  73. package/dist/mapper/tagone-return.js.map +0 -1
  74. package/dist/middleware/auth.js.map +0 -1
  75. package/dist/middleware/healthCheck.js.map +0 -1
  76. package/dist/middleware/statusConnection.js.map +0 -1
  77. package/dist/routes/index.js.map +0 -1
  78. package/dist/server.js.map +0 -1
  79. package/dist/util/chatWootClient.js.map +0 -1
  80. package/dist/util/createSessionUtil.js.map +0 -1
  81. package/dist/util/db/mongodb/db.js.map +0 -1
  82. package/dist/util/db/redis/db.js.map +0 -1
  83. package/dist/util/functions.js.map +0 -1
  84. package/dist/util/getAllTokens.js.map +0 -1
  85. package/dist/util/logger.js.map +0 -1
  86. package/dist/util/sessionUtil.js.map +0 -1
  87. package/dist/util/tokenStore/factory.js.map +0 -1
  88. package/dist/util/tokenStore/fileTokenStory.js.map +0 -1
  89. package/dist/util/tokenStore/firebaseTokenStory.js.map +0 -1
  90. package/dist/util/tokenStore/model/token.js.map +0 -1
  91. package/dist/util/tokenStore/mongodbTokenStory.js.map +0 -1
  92. package/dist/util/tokenStore/redisTokenStory.js.map +0 -1
@@ -14,11 +14,15 @@
14
14
 
15
15
 
16
16
  var _axios = _interopRequireDefault(require("axios"));
17
- var _path = _interopRequireDefault(require("path"));
17
+ var _crypto = _interopRequireDefault(require("crypto"));
18
18
  var _fs = _interopRequireDefault(require("fs"));
19
+ var _mimeTypes = _interopRequireDefault(require("mime-types"));
20
+ var _os = _interopRequireDefault(require("os"));
21
+ var _path = _interopRequireDefault(require("path"));
19
22
  var _util = require("util");
20
- var _index = require("../mapper/index");
21
- var _config = _interopRequireDefault(require("../config.json")); /*
23
+
24
+ var _config = _interopRequireDefault(require("../config"));
25
+ var _index = require("../mapper/index");function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function (nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;} /*
22
26
  * Copyright 2021 WPPConnect Team
23
27
  *
24
28
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -32,11 +36,19 @@ var _config = _interopRequireDefault(require("../config.json")); /*
32
36
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
33
37
  * See the License for the specific language governing permissions and
34
38
  * limitations under the License.
35
- */let mime = _config.default.webhook.uploadS3 ? require('mime-types') : null;let crypto = _config.default.webhook.uploadS3 ? require('crypto') : null;let aws = _config.default.webhook.uploadS3 ? require('aws-sdk') : null;function contactToArray(number, isGroup) {let localArr = [];if (Array.isArray(number)) {for (let contact of number) {isGroup ? contact = contact.split('@')[0] : contact = contact.split('@')[0]?.replace(/[^\w ]/g, '');if (contact !== '') if (isGroup) localArr.push(`${contact}@g.us`);else localArr.push(`${contact}@c.us`);}
39
+ */let mime, crypto, aws;if (_config.default.webhook.uploadS3) {mime = _config.default.webhook.uploadS3 ? _mimeTypes.default : null;crypto = _config.default.webhook.uploadS3 ? _crypto.default : null;aws = _config.default.webhook.uploadS3 ? Promise.resolve().then(() => _interopRequireWildcard(require('aws-sdk'))) : null;}function contactToArray(number, isGroup) {const localArr = [];if (Array.isArray(number)) {for (let contact of number) {isGroup ?
40
+ contact = contact.split('@')[0] :
41
+ contact = contact.split('@')[0]?.replace(/[^\w ]/g, '');
42
+ if (contact !== '')
43
+ if (isGroup) localArr.push(`${contact}@g.us`);else
44
+ localArr.push(`${contact}@c.us`);
45
+ }
36
46
  } else {
37
- let arrContacts = number.split(/\s*[,;]\s*/g);
47
+ const arrContacts = number.split(/\s*[,;]\s*/g);
38
48
  for (let contact of arrContacts) {
39
- isGroup ? contact = contact.split('@')[0] : contact = contact.split('@')[0]?.replace(/[^\w ]/g, '');
49
+ isGroup ?
50
+ contact = contact.split('@')[0] :
51
+ contact = contact.split('@')[0]?.replace(/[^\w ]/g, '');
40
52
  if (contact !== '')
41
53
  if (isGroup) localArr.push(`${contact}@g.us`);else
42
54
  localArr.push(`${contact}@c.us`);
@@ -47,14 +59,14 @@ var _config = _interopRequireDefault(require("../config.json")); /*
47
59
  }
48
60
 
49
61
  function groupToArray(group) {
50
- let localArr = [];
62
+ const localArr = [];
51
63
  if (Array.isArray(group)) {
52
64
  for (let contact of group) {
53
65
  contact = contact.split('@')[0];
54
66
  if (contact !== '') localArr.push(`${contact}@g.us`);
55
67
  }
56
68
  } else {
57
- let arrContacts = group.split(/\s*[,;]\s*/g);
69
+ const arrContacts = group.split(/\s*[,;]\s*/g);
58
70
  for (let contact of arrContacts) {
59
71
  contact = contact.split('@')[0];
60
72
  if (contact !== '') localArr.push(`${contact}@g.us`);
@@ -65,13 +77,13 @@ function groupToArray(group) {
65
77
  }
66
78
 
67
79
  function groupNameToArray(group) {
68
- let localArr = [];
80
+ const localArr = [];
69
81
  if (Array.isArray(group)) {
70
82
  for (const contact of group) {
71
83
  if (contact !== '') localArr.push(`${contact}`);
72
84
  }
73
85
  } else {
74
- let arrContacts = group.split(/\s*[,;]\s*/g);
86
+ const arrContacts = group.split(/\s*[,;]\s*/g);
75
87
  for (const contact of arrContacts) {
76
88
  if (contact !== '') localArr.push(`${contact}`);
77
89
  }
@@ -80,20 +92,32 @@ function groupNameToArray(group) {
80
92
  return localArr;
81
93
  }
82
94
 
83
- async function callWebHook(client, req, event, data) {
84
- const webhook = client?.config.webhook || req.serverOptions.webhook.url || false;
95
+ async function callWebHook(
96
+ client,
97
+ req,
98
+ event,
99
+ data)
100
+ {
101
+ const webhook =
102
+ client?.config.webhook || req.serverOptions.webhook.url || false;
85
103
  if (webhook) {
86
- if (req.serverOptions.webhook.autoDownload) await autoDownload(client, req, data);
104
+ if (req.serverOptions.webhook.autoDownload)
105
+ await autoDownload(client, req, data);
87
106
  try {
88
- const chatId = data.from || data.chatId || (data.chatId ? data.chatId._serialized : null);
107
+ const chatId =
108
+ data.from ||
109
+ data.chatId || (
110
+ data.chatId ? data.chatId._serialized : null);
89
111
  data = Object.assign({ event: event, session: client.session }, data);
90
- if (req.serverOptions.mapper.enable) data = await (0, _index.convert)(req.serverOptions.mapper.prefix, data);
112
+ if (req.serverOptions.mapper.enable)
113
+ data = await (0, _index.convert)(req.serverOptions.mapper.prefix, data);
91
114
  _axios.default.
92
115
  post(webhook, data).
93
116
  then(() => {
94
117
  try {
95
118
  const events = ['unreadmessages', 'onmessage'];
96
- if (events.includes(event) && req.serverOptions.webhook.readMessage) client.sendSeen(chatId);
119
+ if (events.includes(event) && req.serverOptions.webhook.readMessage)
120
+ client.sendSeen(chatId);
97
121
  } catch (e) {}
98
122
  }).
99
123
  catch((e) => {
@@ -108,14 +132,14 @@ async function callWebHook(client, req, event, data) {
108
132
  async function autoDownload(client, req, message) {
109
133
  try {
110
134
  if (message && (message['mimetype'] || message.isMedia || message.isMMS)) {
111
- let buffer = await client.decryptFile(message);
135
+ const buffer = await client.decryptFile(message);
112
136
  if (req.serverOptions.webhook.uploadS3) {
113
- var hashName = crypto.randomBytes(24).toString('hex');
114
- var fileName = `${hashName}.${mime.extension(message.mimetype)}`;
137
+ const hashName = crypto.randomBytes(24).toString('hex');
138
+ const fileName = `${hashName}.${mime.extension(message.mimetype)}`;
115
139
 
116
140
  const s3 = new aws.S3();
117
141
 
118
- var params = {
142
+ const params = {
119
143
  Bucket: client.session,
120
144
  Key: fileName,
121
145
  Body: buffer,
@@ -135,7 +159,9 @@ async function autoDownload(client, req, message) {
135
159
 
136
160
  async function startAllSessions(config, logger) {
137
161
  try {
138
- await _axios.default.post(`${config.host}:${config.port}/api/${config.secretKey}/start-all`);
162
+ await _axios.default.post(
163
+ `${config.host}:${config.port}/api/${config.secretKey}/start-all`);
164
+
139
165
  } catch (e) {
140
166
  logger.error(e);
141
167
  }
@@ -180,11 +206,16 @@ async function archive(client, req) {
180
206
  }
181
207
  if (chats && Array.isArray(chats) && chats.length > 0) {
182
208
  for (let i = 0; i < chats.length; i++) {
183
- let date = new Date(chats[i].t * 1000);
209
+ const date = new Date(chats[i].t * 1000);
184
210
 
185
211
  if (DaysBetween(date) > req.serverOptions.archive.daysToArchive) {
186
- await client.archiveChat(chats[i].id.id || chats[i].id._serialized, true);
187
- await sleep(Math.floor(Math.random() * req.serverOptions.archive.waitTime + 1));
212
+ await client.archiveChat(
213
+ chats[i].id.id || chats[i].id._serialized,
214
+ true);
215
+
216
+ await sleep(
217
+ Math.floor(Math.random() * req.serverOptions.archive.waitTime + 1));
218
+
188
219
  }
189
220
  }
190
221
  }
@@ -195,13 +226,21 @@ async function archive(client, req) {
195
226
  }
196
227
 
197
228
  function DaysBetween(StartDate) {
198
- let endDate = new Date();
229
+ const endDate = new Date();
199
230
  // The number of milliseconds in all UTC days (no DST)
200
231
  const oneDay = 1000 * 60 * 60 * 24;
201
232
 
202
233
  // A day in UTC always lasts 24 hours (unlike in other time formats)
203
- const start = Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());
204
- const end = Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate());
234
+ const start = Date.UTC(
235
+ endDate.getFullYear(),
236
+ endDate.getMonth(),
237
+ endDate.getDate());
238
+
239
+ const end = Date.UTC(
240
+ StartDate.getFullYear(),
241
+ StartDate.getMonth(),
242
+ StartDate.getDate());
243
+
205
244
 
206
245
  // so it's safe to divide by 24 hours
207
246
  return (start - end) / oneDay;
@@ -209,12 +248,12 @@ function DaysBetween(StartDate) {
209
248
 
210
249
  function createFolders() {
211
250
  const __dirname = _path.default.resolve(_path.default.dirname(''));
212
- let dirFiles = _path.default.resolve(__dirname, 'WhatsAppImages');
251
+ const dirFiles = _path.default.resolve(__dirname, 'WhatsAppImages');
213
252
  if (!_fs.default.existsSync(dirFiles)) {
214
253
  _fs.default.mkdirSync(dirFiles);
215
254
  }
216
255
 
217
- let dirUpload = _path.default.resolve(__dirname, 'uploads');
256
+ const dirUpload = _path.default.resolve(__dirname, 'uploads');
218
257
  if (!_fs.default.existsSync(dirUpload)) {
219
258
  _fs.default.mkdirSync(dirUpload);
220
259
  }
@@ -225,12 +264,17 @@ function strToBool(s) {
225
264
  }
226
265
 
227
266
  function getIPAddress() {
228
- var interfaces = require('os').networkInterfaces();
229
- for (var devName in interfaces) {
230
- var iface = interfaces[devName];
231
- for (var i = 0; i < iface.length; i++) {
232
- var alias = iface[i];
233
- if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) return alias.address;
267
+ const interfaces = _os.default.networkInterfaces();
268
+ for (const devName in interfaces) {
269
+ const iface = interfaces[devName];
270
+ for (let i = 0; i < iface.length; i++) {
271
+ const alias = iface[i];
272
+ if (
273
+ alias.family === 'IPv4' &&
274
+ alias.address !== '127.0.0.1' &&
275
+ !alias.internal)
276
+
277
+ return alias.address;
234
278
  }
235
279
  }
236
280
  return '0.0.0.0';
@@ -242,10 +286,10 @@ function setMaxListners(serverOptions) {
242
286
  }
243
287
  }
244
288
 
245
- let unlinkAsync = (0, _util.promisify)(_fs.default.unlink);exports.unlinkAsync = unlinkAsync;
289
+ const unlinkAsync = (0, _util.promisify)(_fs.default.unlink);exports.unlinkAsync = unlinkAsync;
246
290
 
247
291
  function createCatalogLink(session) {
248
292
  const [wid] = session.split('@');
249
293
  return `https://wa.me/c/${wid}`;
250
294
  }
251
- //# sourceMappingURL=functions.js.map
295
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9jcnlwdG8iLCJfZnMiLCJfbWltZVR5cGVzIiwiX29zIiwiX3BhdGgiLCJfdXRpbCIsIl9jb25maWciLCJfaW5kZXgiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJtaW1lIiwiY3J5cHRvIiwiYXdzIiwiY29uZmlnIiwid2ViaG9vayIsInVwbG9hZFMzIiwibWltZXR5cGVzIiwiQ3J5cHRvIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiY29udGFjdFRvQXJyYXkiLCJudW1iZXIiLCJpc0dyb3VwIiwibG9jYWxBcnIiLCJBcnJheSIsImlzQXJyYXkiLCJjb250YWN0Iiwic3BsaXQiLCJyZXBsYWNlIiwicHVzaCIsImFyckNvbnRhY3RzIiwiZ3JvdXBUb0FycmF5IiwiZ3JvdXAiLCJncm91cE5hbWVUb0FycmF5IiwiY2FsbFdlYkhvb2siLCJjbGllbnQiLCJyZXEiLCJldmVudCIsImRhdGEiLCJzZXJ2ZXJPcHRpb25zIiwidXJsIiwiYXV0b0Rvd25sb2FkIiwiY2hhdElkIiwiZnJvbSIsIl9zZXJpYWxpemVkIiwiYXNzaWduIiwic2Vzc2lvbiIsIm1hcHBlciIsImVuYWJsZSIsImNvbnZlcnQiLCJwcmVmaXgiLCJhcGkiLCJwb3N0IiwiZXZlbnRzIiwiaW5jbHVkZXMiLCJyZWFkTWVzc2FnZSIsInNlbmRTZWVuIiwiZSIsImNhdGNoIiwibG9nZ2VyIiwid2FybiIsImVycm9yIiwibWVzc2FnZSIsImlzTWVkaWEiLCJpc01NUyIsImJ1ZmZlciIsImRlY3J5cHRGaWxlIiwiaGFzaE5hbWUiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiZmlsZU5hbWUiLCJleHRlbnNpb24iLCJtaW1ldHlwZSIsInMzIiwiUzMiLCJwYXJhbXMiLCJCdWNrZXQiLCJLZXkiLCJCb2R5IiwiQUNMIiwiQ29udGVudFR5cGUiLCJ1cGxvYWQiLCJwcm9taXNlIiwiZmlsZVVybCIsIkxvY2F0aW9uIiwiYm9keSIsInN0YXJ0QWxsU2Vzc2lvbnMiLCJob3N0IiwicG9ydCIsInNlY3JldEtleSIsInN0YXJ0SGVscGVyIiwiYWxsVW5yZWFkT25TdGFydCIsInNlbmRVbnJlYWQiLCJhcmNoaXZlIiwiaW5mbyIsImNoYXRzIiwiZ2V0QWxsQ2hhdHNXaXRoTWVzc2FnZXMiLCJsZW5ndGgiLCJpIiwiaiIsIm1zZ3MiLCJleCIsInNsZWVwIiwidGltZSIsInNldFRpbWVvdXQiLCJnZXRBbGxDaGF0cyIsImZpbHRlciIsImMiLCJkYXRlIiwiRGF0ZSIsInQiLCJEYXlzQmV0d2VlbiIsImRheXNUb0FyY2hpdmUiLCJhcmNoaXZlQ2hhdCIsImlkIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwid2FpdFRpbWUiLCJTdGFydERhdGUiLCJlbmREYXRlIiwib25lRGF5Iiwic3RhcnQiLCJVVEMiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImVuZCIsImNyZWF0ZUZvbGRlcnMiLCJfX2Rpcm5hbWUiLCJwYXRoIiwiZGlybmFtZSIsImRpckZpbGVzIiwiZnMiLCJleGlzdHNTeW5jIiwibWtkaXJTeW5jIiwiZGlyVXBsb2FkIiwic3RyVG9Cb29sIiwicyIsInRlc3QiLCJnZXRJUEFkZHJlc3MiLCJpbnRlcmZhY2VzIiwib3MiLCJuZXR3b3JrSW50ZXJmYWNlcyIsImRldk5hbWUiLCJpZmFjZSIsImFsaWFzIiwiZmFtaWx5IiwiYWRkcmVzcyIsImludGVybmFsIiwic2V0TWF4TGlzdG5lcnMiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJtYXhMaXN0ZW5lcnMiLCJwcm9jZXNzIiwic2V0TWF4TGlzdGVuZXJzIiwidW5saW5rQXN5bmMiLCJwcm9taXNpZnkiLCJ1bmxpbmsiLCJleHBvcnRzIiwiY3JlYXRlQ2F0YWxvZ0xpbmsiLCJ3aWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9mdW5jdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIxIFdQUENvbm5lY3QgVGVhbVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IGFwaSBmcm9tICdheGlvcyc7XG5pbXBvcnQgQ3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IG1pbWV0eXBlcyBmcm9tICdtaW1lLXR5cGVzJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBjb252ZXJ0IH0gZnJvbSAnLi4vbWFwcGVyL2luZGV4JztcbmltcG9ydCB7IFNlcnZlck9wdGlvbnMgfSBmcm9tICcuLi90eXBlcy9TZXJ2ZXJPcHRpb25zJztcblxubGV0IG1pbWU6IGFueSwgY3J5cHRvOiBhbnksIGF3czogYW55O1xuaWYgKGNvbmZpZy53ZWJob29rLnVwbG9hZFMzKSB7XG4gIG1pbWUgPSBjb25maWcud2ViaG9vay51cGxvYWRTMyA/IG1pbWV0eXBlcyA6IG51bGw7XG4gIGNyeXB0byA9IGNvbmZpZy53ZWJob29rLnVwbG9hZFMzID8gQ3J5cHRvIDogbnVsbDtcbiAgYXdzID0gY29uZmlnLndlYmhvb2sudXBsb2FkUzMgPyBpbXBvcnQoJ2F3cy1zZGsnKSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWN0VG9BcnJheShudW1iZXI6IGFueSwgaXNHcm91cD86IGJvb2xlYW4pIHtcbiAgY29uc3QgbG9jYWxBcnI6IGFueSA9IFtdO1xuICBpZiAoQXJyYXkuaXNBcnJheShudW1iZXIpKSB7XG4gICAgZm9yIChsZXQgY29udGFjdCBvZiBudW1iZXIpIHtcbiAgICAgIGlzR3JvdXBcbiAgICAgICAgPyAoY29udGFjdCA9IGNvbnRhY3Quc3BsaXQoJ0AnKVswXSlcbiAgICAgICAgOiAoY29udGFjdCA9IGNvbnRhY3Quc3BsaXQoJ0AnKVswXT8ucmVwbGFjZSgvW15cXHcgXS9nLCAnJykpO1xuICAgICAgaWYgKGNvbnRhY3QgIT09ICcnKVxuICAgICAgICBpZiAoaXNHcm91cCkgKGxvY2FsQXJyIGFzIGFueSkucHVzaChgJHtjb250YWN0fUBnLnVzYCk7XG4gICAgICAgIGVsc2UgKGxvY2FsQXJyIGFzIGFueSkucHVzaChgJHtjb250YWN0fUBjLnVzYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGFyckNvbnRhY3RzID0gbnVtYmVyLnNwbGl0KC9cXHMqWyw7XVxccyovZyk7XG4gICAgZm9yIChsZXQgY29udGFjdCBvZiBhcnJDb250YWN0cykge1xuICAgICAgaXNHcm91cFxuICAgICAgICA/IChjb250YWN0ID0gY29udGFjdC5zcGxpdCgnQCcpWzBdKVxuICAgICAgICA6IChjb250YWN0ID0gY29udGFjdC5zcGxpdCgnQCcpWzBdPy5yZXBsYWNlKC9bXlxcdyBdL2csICcnKSk7XG4gICAgICBpZiAoY29udGFjdCAhPT0gJycpXG4gICAgICAgIGlmIChpc0dyb3VwKSAobG9jYWxBcnIgYXMgYW55KS5wdXNoKGAke2NvbnRhY3R9QGcudXNgKTtcbiAgICAgICAgZWxzZSAobG9jYWxBcnIgYXMgYW55KS5wdXNoKGAke2NvbnRhY3R9QGMudXNgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbG9jYWxBcnI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cFRvQXJyYXkoZ3JvdXA6IGFueSkge1xuICBjb25zdCBsb2NhbEFycjogYW55ID0gW107XG4gIGlmIChBcnJheS5pc0FycmF5KGdyb3VwKSkge1xuICAgIGZvciAobGV0IGNvbnRhY3Qgb2YgZ3JvdXApIHtcbiAgICAgIGNvbnRhY3QgPSBjb250YWN0LnNwbGl0KCdAJylbMF07XG4gICAgICBpZiAoY29udGFjdCAhPT0gJycpIChsb2NhbEFyciBhcyBhbnkpLnB1c2goYCR7Y29udGFjdH1AZy51c2ApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhcnJDb250YWN0cyA9IGdyb3VwLnNwbGl0KC9cXHMqWyw7XVxccyovZyk7XG4gICAgZm9yIChsZXQgY29udGFjdCBvZiBhcnJDb250YWN0cykge1xuICAgICAgY29udGFjdCA9IGNvbnRhY3Quc3BsaXQoJ0AnKVswXTtcbiAgICAgIGlmIChjb250YWN0ICE9PSAnJykgKGxvY2FsQXJyIGFzIGFueSkucHVzaChgJHtjb250YWN0fUBnLnVzYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxvY2FsQXJyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBOYW1lVG9BcnJheShncm91cDogYW55KSB7XG4gIGNvbnN0IGxvY2FsQXJyOiBhbnkgPSBbXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZ3JvdXApKSB7XG4gICAgZm9yIChjb25zdCBjb250YWN0IG9mIGdyb3VwKSB7XG4gICAgICBpZiAoY29udGFjdCAhPT0gJycpIChsb2NhbEFyciBhcyBhbnkpLnB1c2goYCR7Y29udGFjdH1gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXJyQ29udGFjdHMgPSBncm91cC5zcGxpdCgvXFxzKlssO11cXHMqL2cpO1xuICAgIGZvciAoY29uc3QgY29udGFjdCBvZiBhcnJDb250YWN0cykge1xuICAgICAgaWYgKGNvbnRhY3QgIT09ICcnKSAobG9jYWxBcnIgYXMgYW55KS5wdXNoKGAke2NvbnRhY3R9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxvY2FsQXJyO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FsbFdlYkhvb2soXG4gIGNsaWVudDogYW55LFxuICByZXE6IGFueSxcbiAgZXZlbnQ6IGFueSxcbiAgZGF0YTogYW55XG4pIHtcbiAgY29uc3Qgd2ViaG9vayA9XG4gICAgY2xpZW50Py5jb25maWcud2ViaG9vayB8fCByZXEuc2VydmVyT3B0aW9ucy53ZWJob29rLnVybCB8fCBmYWxzZTtcbiAgaWYgKHdlYmhvb2spIHtcbiAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMud2ViaG9vay5hdXRvRG93bmxvYWQpXG4gICAgICBhd2FpdCBhdXRvRG93bmxvYWQoY2xpZW50LCByZXEsIGRhdGEpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjaGF0SWQgPVxuICAgICAgICBkYXRhLmZyb20gfHxcbiAgICAgICAgZGF0YS5jaGF0SWQgfHxcbiAgICAgICAgKGRhdGEuY2hhdElkID8gZGF0YS5jaGF0SWQuX3NlcmlhbGl6ZWQgOiBudWxsKTtcbiAgICAgIGRhdGEgPSBPYmplY3QuYXNzaWduKHsgZXZlbnQ6IGV2ZW50LCBzZXNzaW9uOiBjbGllbnQuc2Vzc2lvbiB9LCBkYXRhKTtcbiAgICAgIGlmIChyZXEuc2VydmVyT3B0aW9ucy5tYXBwZXIuZW5hYmxlKVxuICAgICAgICBkYXRhID0gYXdhaXQgY29udmVydChyZXEuc2VydmVyT3B0aW9ucy5tYXBwZXIucHJlZml4LCBkYXRhKTtcbiAgICAgIGFwaVxuICAgICAgICAucG9zdCh3ZWJob29rLCBkYXRhKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IFsndW5yZWFkbWVzc2FnZXMnLCAnb25tZXNzYWdlJ107XG4gICAgICAgICAgICBpZiAoZXZlbnRzLmluY2x1ZGVzKGV2ZW50KSAmJiByZXEuc2VydmVyT3B0aW9ucy53ZWJob29rLnJlYWRNZXNzYWdlKVxuICAgICAgICAgICAgICBjbGllbnQuc2VuZFNlZW4oY2hhdElkKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICByZXEubG9nZ2VyLndhcm4oJ0Vycm9yIGNhbGxpbmcgV2ViaG9vay4nLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYXV0b0Rvd25sb2FkKGNsaWVudDogYW55LCByZXE6IGFueSwgbWVzc2FnZTogYW55KSB7XG4gIHRyeSB7XG4gICAgaWYgKG1lc3NhZ2UgJiYgKG1lc3NhZ2VbJ21pbWV0eXBlJ10gfHwgbWVzc2FnZS5pc01lZGlhIHx8IG1lc3NhZ2UuaXNNTVMpKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjbGllbnQuZGVjcnlwdEZpbGUobWVzc2FnZSk7XG4gICAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMud2ViaG9vay51cGxvYWRTMykge1xuICAgICAgICBjb25zdCBoYXNoTmFtZSA9IGNyeXB0by5yYW5kb21CeXRlcygyNCkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGAke2hhc2hOYW1lfS4ke21pbWUuZXh0ZW5zaW9uKG1lc3NhZ2UubWltZXR5cGUpfWA7XG5cbiAgICAgICAgY29uc3QgczMgPSBuZXcgYXdzLlMzKCk7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIEJ1Y2tldDogY2xpZW50LnNlc3Npb24sXG4gICAgICAgICAgS2V5OiBmaWxlTmFtZSxcbiAgICAgICAgICBCb2R5OiBidWZmZXIsXG4gICAgICAgICAgQUNMOiAncHVibGljLXJlYWQnLFxuICAgICAgICAgIENvbnRlbnRUeXBlOiBtZXNzYWdlLm1pbWV0eXBlLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgczMudXBsb2FkKHBhcmFtcykucHJvbWlzZSgpO1xuICAgICAgICBtZXNzYWdlLmZpbGVVcmwgPSBkYXRhLkxvY2F0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVzc2FnZS5ib2R5ID0gYXdhaXQgYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydEFsbFNlc3Npb25zKGNvbmZpZzogYW55LCBsb2dnZXI6IGFueSkge1xuICB0cnkge1xuICAgIGF3YWl0IGFwaS5wb3N0KFxuICAgICAgYCR7Y29uZmlnLmhvc3R9OiR7Y29uZmlnLnBvcnR9L2FwaS8ke2NvbmZpZy5zZWNyZXRLZXl9L3N0YXJ0LWFsbGBcbiAgICApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKGUpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydEhlbHBlcihjbGllbnQ6IGFueSwgcmVxOiBhbnkpIHtcbiAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLndlYmhvb2suYWxsVW5yZWFkT25TdGFydCkgYXdhaXQgc2VuZFVucmVhZChjbGllbnQsIHJlcSk7XG5cbiAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLmFyY2hpdmUuZW5hYmxlKSBhd2FpdCBhcmNoaXZlKGNsaWVudCwgcmVxKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VuZFVucmVhZChjbGllbnQ6IGFueSwgcmVxOiBhbnkpIHtcbiAgcmVxLmxvZ2dlci5pbmZvKGAke2NsaWVudC5zZXNzaW9ufSA6IEluaWNpbyBlbnZpYXIgbWVuc2FnZW5zIG7Do28gbGlkYXNgKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGNoYXRzID0gYXdhaXQgY2xpZW50LmdldEFsbENoYXRzV2l0aE1lc3NhZ2VzKHRydWUpO1xuXG4gICAgaWYgKGNoYXRzICYmIGNoYXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhdHMubGVuZ3RoOyBpKyspXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2hhdHNbaV0ubXNncy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAndW5yZWFkbWVzc2FnZXMnLCBjaGF0c1tpXS5tc2dzW2pdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlcS5sb2dnZXIuaW5mbyhgJHtjbGllbnQuc2Vzc2lvbn0gOiBGaW0gZW52aWFyIG1lbnNhZ2VucyBuw6NvIGxpZGFzYCk7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihleCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYXJjaGl2ZShjbGllbnQ6IGFueSwgcmVxOiBhbnkpIHtcbiAgYXN5bmMgZnVuY3Rpb24gc2xlZXAodGltZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWUgKiAxMCkpO1xuICB9XG5cbiAgcmVxLmxvZ2dlci5pbmZvKGAke2NsaWVudC5zZXNzaW9ufSA6IEluaWNpbyBhcnF1aXZhbmRvIGNoYXRzYCk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgY2hhdHMgPSBhd2FpdCBjbGllbnQuZ2V0QWxsQ2hhdHMoKTtcbiAgICBpZiAoY2hhdHMgJiYgQXJyYXkuaXNBcnJheShjaGF0cykgJiYgY2hhdHMubGVuZ3RoID4gMCkge1xuICAgICAgY2hhdHMgPSBjaGF0cy5maWx0ZXIoKGMpID0+ICFjLmFyY2hpdmUpO1xuICAgIH1cbiAgICBpZiAoY2hhdHMgJiYgQXJyYXkuaXNBcnJheShjaGF0cykgJiYgY2hhdHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGF0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY2hhdHNbaV0udCAqIDEwMDApO1xuXG4gICAgICAgIGlmIChEYXlzQmV0d2VlbihkYXRlKSA+IHJlcS5zZXJ2ZXJPcHRpb25zLmFyY2hpdmUuZGF5c1RvQXJjaGl2ZSkge1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5hcmNoaXZlQ2hhdChcbiAgICAgICAgICAgIGNoYXRzW2ldLmlkLmlkIHx8IGNoYXRzW2ldLmlkLl9zZXJpYWxpemVkLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgc2xlZXAoXG4gICAgICAgICAgICBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiByZXEuc2VydmVyT3B0aW9ucy5hcmNoaXZlLndhaXRUaW1lICsgMSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJlcS5sb2dnZXIuaW5mbyhgJHtjbGllbnQuc2Vzc2lvbn0gOiBGaW0gYXJxdWl2YW5kbyBjaGF0c2ApO1xuICB9IGNhdGNoIChleCkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIERheXNCZXR3ZWVuKFN0YXJ0RGF0ZTogRGF0ZSkge1xuICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoKTtcbiAgLy8gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYWxsIFVUQyBkYXlzIChubyBEU1QpXG4gIGNvbnN0IG9uZURheSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XG5cbiAgLy8gQSBkYXkgaW4gVVRDIGFsd2F5cyBsYXN0cyAyNCBob3VycyAodW5saWtlIGluIG90aGVyIHRpbWUgZm9ybWF0cylcbiAgY29uc3Qgc3RhcnQgPSBEYXRlLlVUQyhcbiAgICBlbmREYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgZW5kRGF0ZS5nZXRNb250aCgpLFxuICAgIGVuZERhdGUuZ2V0RGF0ZSgpXG4gICk7XG4gIGNvbnN0IGVuZCA9IERhdGUuVVRDKFxuICAgIFN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgIFN0YXJ0RGF0ZS5nZXRNb250aCgpLFxuICAgIFN0YXJ0RGF0ZS5nZXREYXRlKClcbiAgKTtcblxuICAvLyBzbyBpdCdzIHNhZmUgdG8gZGl2aWRlIGJ5IDI0IGhvdXJzXG4gIHJldHVybiAoc3RhcnQgLSBlbmQpIC8gb25lRGF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9sZGVycygpIHtcbiAgY29uc3QgX19kaXJuYW1lID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZSgnJykpO1xuICBjb25zdCBkaXJGaWxlcyA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdXaGF0c0FwcEltYWdlcycpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyRmlsZXMpKSB7XG4gICAgZnMubWtkaXJTeW5jKGRpckZpbGVzKTtcbiAgfVxuXG4gIGNvbnN0IGRpclVwbG9hZCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICd1cGxvYWRzJyk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhkaXJVcGxvYWQpKSB7XG4gICAgZnMubWtkaXJTeW5jKGRpclVwbG9hZCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0clRvQm9vbChzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIC9eKHRydWV8MSkkL2kudGVzdChzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElQQWRkcmVzcygpIHtcbiAgY29uc3QgaW50ZXJmYWNlcyA9IG9zLm5ldHdvcmtJbnRlcmZhY2VzKCk7XG4gIGZvciAoY29uc3QgZGV2TmFtZSBpbiBpbnRlcmZhY2VzKSB7XG4gICAgY29uc3QgaWZhY2U6IGFueSA9IGludGVyZmFjZXNbZGV2TmFtZV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZmFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYWxpYXMgPSBpZmFjZVtpXTtcbiAgICAgIGlmIChcbiAgICAgICAgYWxpYXMuZmFtaWx5ID09PSAnSVB2NCcgJiZcbiAgICAgICAgYWxpYXMuYWRkcmVzcyAhPT0gJzEyNy4wLjAuMScgJiZcbiAgICAgICAgIWFsaWFzLmludGVybmFsXG4gICAgICApXG4gICAgICAgIHJldHVybiBhbGlhcy5hZGRyZXNzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJzAuMC4wLjAnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TWF4TGlzdG5lcnMoc2VydmVyT3B0aW9uczogU2VydmVyT3B0aW9ucykge1xuICBpZiAoc2VydmVyT3B0aW9ucyAmJiBOdW1iZXIuaXNJbnRlZ2VyKHNlcnZlck9wdGlvbnMubWF4TGlzdGVuZXJzKSkge1xuICAgIHByb2Nlc3Muc2V0TWF4TGlzdGVuZXJzKHNlcnZlck9wdGlvbnMubWF4TGlzdGVuZXJzKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdW5saW5rQXN5bmMgPSBwcm9taXNpZnkoZnMudW5saW5rKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhdGFsb2dMaW5rKHNlc3Npb246IGFueSkge1xuICBjb25zdCBbd2lkXSA9IHNlc3Npb24uc3BsaXQoJ0AnKTtcbiAgcmV0dXJuIGBodHRwczovL3dhLm1lL2MvJHt3aWR9YDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBZUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsR0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksR0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssS0FBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sS0FBQSxHQUFBTixPQUFBOztBQUVBLElBQUFPLE9BQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLE1BQUEsR0FBQVIsT0FBQSxvQkFBMEMsU0FBQVMseUJBQUFDLFdBQUEsY0FBQUMsT0FBQSxpQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxPQUFBRSxnQkFBQSxPQUFBRixPQUFBLFdBQUFGLHdCQUFBLFlBQUFBLENBQUFDLFdBQUEsVUFBQUEsV0FBQSxHQUFBRyxnQkFBQSxHQUFBRCxpQkFBQSxJQUFBRixXQUFBLFlBQUFJLHdCQUFBQyxHQUFBLEVBQUFMLFdBQUEsUUFBQUEsV0FBQSxJQUFBSyxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxVQUFBRCxHQUFBLE1BQUFBLEdBQUEsb0JBQUFBLEdBQUEsd0JBQUFBLEdBQUEsMkJBQUFFLE9BQUEsRUFBQUYsR0FBQSxRQUFBRyxLQUFBLEdBQUFULHdCQUFBLENBQUFDLFdBQUEsTUFBQVEsS0FBQSxJQUFBQSxLQUFBLENBQUFDLEdBQUEsQ0FBQUosR0FBQSxXQUFBRyxLQUFBLENBQUFFLEdBQUEsQ0FBQUwsR0FBQSxPQUFBTSxNQUFBLFVBQUFDLHFCQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJ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
@@ -28,4 +28,4 @@ var _factory = _interopRequireDefault(require("./tokenStore/factory")); /*
28
28
  * See the License for the specific language governing permissions and
29
29
  * limitations under the License.
30
30
  */async function getAllTokens(req) {const tokenStore = new _factory.default();const myTokenStore = tokenStore.createTokenStory(null);try {return await myTokenStore.listTokens();} catch (e) {req.logger.error(e);}}
31
- //# sourceMappingURL=getAllTokens.js.map
31
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZmFjdG9yeSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZ2V0QWxsVG9rZW5zIiwicmVxIiwidG9rZW5TdG9yZSIsIkZhY3RvcnkiLCJteVRva2VuU3RvcmUiLCJjcmVhdGVUb2tlblN0b3J5IiwibGlzdFRva2VucyIsImUiLCJsb2dnZXIiLCJlcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2dldEFsbFRva2Vucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgRmFjdG9yeSBmcm9tICcuL3Rva2VuU3RvcmUvZmFjdG9yeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGdldEFsbFRva2VucyhyZXE6IGFueSkge1xuICBjb25zdCB0b2tlblN0b3JlID0gbmV3IEZhY3RvcnkoKTtcbiAgY29uc3QgbXlUb2tlblN0b3JlID0gdG9rZW5TdG9yZS5jcmVhdGVUb2tlblN0b3J5KG51bGwpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBteVRva2VuU3RvcmUubGlzdFRva2VucygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUEsMEJBQTJDLENBZjNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUdlLGVBQWVDLFlBQVlBLENBQUNDLEdBQVEsRUFBRSxDQUNuRCxNQUFNQyxVQUFVLEdBQUcsSUFBSUMsZ0JBQU8sRUFBRSxDQUNoQyxNQUFNQyxZQUFZLEdBQUdGLFVBQVUsQ0FBQ0csZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQ3RELElBQUksQ0FDRixPQUFPLE1BQU1ELFlBQVksQ0FBQ0UsVUFBVSxFQUFFLENBQ3hDLENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUUsQ0FDVk4sR0FBRyxDQUFDTyxNQUFNLENBQUNDLEtBQUssQ0FBQ0YsQ0FBQyxDQUFDLENBQ3JCLENBQ0YifQ==
@@ -31,8 +31,7 @@ var _winston = _interopRequireDefault(require("winston")); /*
31
31
  // Here winston.format.errors() just seem to work
32
32
  // because there is no winston.format.simple()
33
33
  const jsonLogFileFormat = _winston.default.format.combine(_winston.default.format.errors({ stack: true }), _winston.default.format.timestamp(), _winston.default.format.prettyPrint());function createLogger(options) {const log_level = options.level; // Create file loggers
34
- const logger = _winston.default.createLogger({ level: 'debug', format: jsonLogFileFormat, expressFormat: true });
35
-
34
+ const logger = _winston.default.createLogger({ level: 'debug', format: jsonLogFileFormat });
36
35
  // When running locally, write everything to the console
37
36
  // with proper stacktraces enabled
38
37
  if (options.logger.indexOf('console') > -1) {
@@ -65,4 +64,4 @@ const jsonLogFileFormat = _winston.default.format.combine(_winston.default.forma
65
64
 
66
65
  return logger;
67
66
  }
68
- //# sourceMappingURL=logger.js.map
67
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luc3RvbiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwianNvbkxvZ0ZpbGVGb3JtYXQiLCJ3aW5zdG9uIiwiZm9ybWF0IiwiY29tYmluZSIsImVycm9ycyIsInN0YWNrIiwidGltZXN0YW1wIiwicHJldHR5UHJpbnQiLCJjcmVhdGVMb2dnZXIiLCJvcHRpb25zIiwibG9nX2xldmVsIiwibGV2ZWwiLCJsb2dnZXIiLCJpbmRleE9mIiwiYWRkIiwidHJhbnNwb3J0cyIsIkNvbnNvbGUiLCJjb2xvcml6ZSIsInByaW50ZiIsIm1lc3NhZ2UiLCJGaWxlIiwiZmlsZW5hbWUiLCJtYXhzaXplIiwibWF4RmlsZXMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9sb2dnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIxIFdQUENvbm5lY3QgVGVhbVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHdpbnN0b24gZnJvbSAnd2luc3Rvbic7XG5cbi8vIFVzZSBKU09OIGxvZ2dpbmcgZm9yIGxvZyBmaWxlc1xuLy8gSGVyZSB3aW5zdG9uLmZvcm1hdC5lcnJvcnMoKSBqdXN0IHNlZW0gdG8gd29ya1xuLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB3aW5zdG9uLmZvcm1hdC5zaW1wbGUoKVxuY29uc3QganNvbkxvZ0ZpbGVGb3JtYXQgPSB3aW5zdG9uLmZvcm1hdC5jb21iaW5lKFxuICB3aW5zdG9uLmZvcm1hdC5lcnJvcnMoeyBzdGFjazogdHJ1ZSB9KSxcbiAgd2luc3Rvbi5mb3JtYXQudGltZXN0YW1wKCksXG4gIHdpbnN0b24uZm9ybWF0LnByZXR0eVByaW50KClcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2dnZXIob3B0aW9uczogYW55KSB7XG4gIGNvbnN0IGxvZ19sZXZlbCA9IG9wdGlvbnMubGV2ZWw7XG4gIC8vIENyZWF0ZSBmaWxlIGxvZ2dlcnNcbiAgY29uc3QgbG9nZ2VyID0gd2luc3Rvbi5jcmVhdGVMb2dnZXIoe1xuICAgIGxldmVsOiAnZGVidWcnLFxuICAgIGZvcm1hdDoganNvbkxvZ0ZpbGVGb3JtYXQsXG4gIH0pO1xuXG4gIC8vIFdoZW4gcnVubmluZyBsb2NhbGx5LCB3cml0ZSBldmVyeXRoaW5nIHRvIHRoZSBjb25zb2xlXG4gIC8vIHdpdGggcHJvcGVyIHN0YWNrdHJhY2VzIGVuYWJsZWRcbiAgaWYgKG9wdGlvbnMubG9nZ2VyLmluZGV4T2YoJ2NvbnNvbGUnKSA+IC0xKSB7XG4gICAgbG9nZ2VyLmFkZChcbiAgICAgIG5ldyB3aW5zdG9uLnRyYW5zcG9ydHMuQ29uc29sZSh7XG4gICAgICAgIGZvcm1hdDogd2luc3Rvbi5mb3JtYXQuY29tYmluZShcbiAgICAgICAgICB3aW5zdG9uLmZvcm1hdC5lcnJvcnMoeyBzdGFjazogdHJ1ZSB9KSxcbiAgICAgICAgICB3aW5zdG9uLmZvcm1hdC5jb2xvcml6ZSgpLFxuICAgICAgICAgIHdpbnN0b24uZm9ybWF0LnByaW50ZigoeyBsZXZlbCwgbWVzc2FnZSwgdGltZXN0YW1wLCBzdGFjayB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhY2spIHtcbiAgICAgICAgICAgICAgLy8gcHJpbnQgbG9nIHRyYWNlXG4gICAgICAgICAgICAgIHJldHVybiBgJHtsZXZlbH06ICR7dGltZXN0YW1wfSAke21lc3NhZ2V9IC0gJHtzdGFja31gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke2xldmVsfTogJHt0aW1lc3RhbXB9ICR7bWVzc2FnZX1gO1xuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgaWYgKG9wdGlvbnMubG9nZ2VyLmluZGV4T2YoJ2ZpbGUnKSA+IC0xKSB7XG4gICAgbG9nZ2VyLmFkZChcbiAgICAgIG5ldyB3aW5zdG9uLnRyYW5zcG9ydHMuRmlsZSh7XG4gICAgICAgIGZpbGVuYW1lOiAnLi9sb2cvYXBwLmxvZ2cnLFxuICAgICAgICBsZXZlbDogbG9nX2xldmVsLFxuICAgICAgICBtYXhzaXplOiAxMDQ4NTc2MCxcbiAgICAgICAgbWF4RmlsZXM6IDMsXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbG9nZ2VyO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUEsYUFBOEIsQ0FmOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBZEEsQ0FpQkE7QUFDQTtBQUNBO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUdDLGdCQUFPLENBQUNDLE1BQU0sQ0FBQ0MsT0FBTyxDQUM5Q0YsZ0JBQU8sQ0FBQ0MsTUFBTSxDQUFDRSxNQUFNLENBQUMsRUFBRUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDdENKLGdCQUFPLENBQUNDLE1BQU0sQ0FBQ0ksU0FBUyxFQUFFLEVBQzFCTCxnQkFBTyxDQUFDQyxNQUFNLENBQUNLLFdBQVcsRUFBRSxDQUM3QixDQUVNLFNBQVNDLFlBQVlBLENBQUNDLE9BQVksRUFBRSxDQUN6QyxNQUFNQyxTQUFTLEdBQUdELE9BQU8sQ0FBQ0UsS0FBSyxDQUFDLENBQ2hDO0VBQ0EsTUFBTUMsTUFBTSxHQUFHWCxnQkFBTyxDQUFDTyxZQUFZLENBQUMsRUFDbENHLEtBQUssRUFBRSxPQUFPLEVBQ2RULE1BQU0sRUFBRUYsaUJBQWlCLENBQzNCLENBQUMsQ0FBQztFQUVGO0VBQ0E7RUFDQSxJQUFJUyxPQUFPLENBQUNHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQzFDRCxNQUFNLENBQUNFLEdBQUc7SUFDUixJQUFJYixnQkFBTyxDQUFDYyxVQUFVLENBQUNDLE9BQU8sQ0FBQztNQUM3QmQsTUFBTSxFQUFFRCxnQkFBTyxDQUFDQyxNQUFNLENBQUNDLE9BQU87TUFDNUJGLGdCQUFPLENBQUNDLE1BQU0sQ0FBQ0UsTUFBTSxDQUFDLEVBQUVDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3RDSixnQkFBTyxDQUFDQyxNQUFNLENBQUNlLFFBQVEsRUFBRTtNQUN6QmhCLGdCQUFPLENBQUNDLE1BQU0sQ0FBQ2dCLE1BQU0sQ0FBQyxDQUFDLEVBQUVQLEtBQUssRUFBRVEsT0FBTyxFQUFFYixTQUFTLEVBQUVELEtBQUssQ0FBQyxDQUFDLEtBQUs7UUFDOUQsSUFBSUEsS0FBSyxFQUFFO1VBQ1Q7VUFDQSxPQUFRLEdBQUVNLEtBQU0sS0FBSUwsU0FBVSxJQUFHYSxPQUFRLE1BQUtkLEtBQU0sRUFBQztRQUN2RDtRQUNBLE9BQVEsR0FBRU0sS0FBTSxLQUFJTCxTQUFVLElBQUdhLE9BQVEsRUFBQztNQUM1QyxDQUFDLENBQUM7O0lBRU4sQ0FBQyxDQUFDLENBQ0g7O0VBQ0g7RUFDQSxJQUFJVixPQUFPLENBQUNHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3ZDRCxNQUFNLENBQUNFLEdBQUc7SUFDUixJQUFJYixnQkFBTyxDQUFDYyxVQUFVLENBQUNLLElBQUksQ0FBQztNQUMxQkMsUUFBUSxFQUFFLGdCQUFnQjtNQUMxQlYsS0FBSyxFQUFFRCxTQUFTO01BQ2hCWSxPQUFPLEVBQUUsUUFBUTtNQUNqQkMsUUFBUSxFQUFFO0lBQ1osQ0FBQyxDQUFDLENBQ0g7O0VBQ0g7O0VBRUEsT0FBT1gsTUFBTTtBQUNmIn0=
@@ -27,7 +27,8 @@ var _events = require("events"); /*
27
27
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28
28
  * See the License for the specific language governing permissions and
29
29
  * limitations under the License.
30
- */const chromiumArgs = ['--disable-web-security', '--no-sandbox', '--disable-web-security', '--aggressive-cache-discard', '--disable-cache', '--disable-application-cache', '--disable-offline-load-stale-cache', '--disk-cache-size=0', '--disable-background-networking', '--disable-default-apps', '--disable-extensions', '--disable-sync', '--disable-translate',
30
+ */const chromiumArgs = ['--disable-web-security', '--no-sandbox', '--disable-web-security', '--aggressive-cache-discard', '--disable-cache', '--disable-application-cache', '--disable-offline-load-stale-cache', '--disk-cache-size=0', '--disable-background-networking', '--disable-default-apps', '--disable-extensions', '--disable-sync',
31
+ '--disable-translate',
31
32
  '--hide-scrollbars',
32
33
  '--metrics-recording-only',
33
34
  '--mute-audio',
@@ -37,7 +38,7 @@ var _events = require("events"); /*
37
38
  '--ignore-ssl-errors',
38
39
  '--ignore-certificate-errors-spki-list'];exports.chromiumArgs = chromiumArgs;
39
40
 
40
- let clientsArray = [];exports.clientsArray = clientsArray;
41
- let sessions = [];exports.sessions = sessions;
41
+ const clientsArray = [];exports.clientsArray = clientsArray;
42
+ const sessions = [];exports.sessions = sessions;
42
43
  const eventEmitter = new _events.EventEmitter();exports.eventEmitter = eventEmitter;
43
- //# sourceMappingURL=sessionUtil.js.map
44
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsImNocm9taXVtQXJncyIsImV4cG9ydHMiLCJjbGllbnRzQXJyYXkiLCJzZXNzaW9ucyIsImV2ZW50RW1pdHRlciIsIkV2ZW50RW1pdHRlciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3Nlc3Npb25VdGlsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBXUFBDb25uZWN0IFRlYW1cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5cbmV4cG9ydCBjb25zdCBjaHJvbWl1bUFyZ3MgPSBbXG4gICctLWRpc2FibGUtd2ViLXNlY3VyaXR5JyxcbiAgJy0tbm8tc2FuZGJveCcsXG4gICctLWRpc2FibGUtd2ViLXNlY3VyaXR5JyxcbiAgJy0tYWdncmVzc2l2ZS1jYWNoZS1kaXNjYXJkJyxcbiAgJy0tZGlzYWJsZS1jYWNoZScsXG4gICctLWRpc2FibGUtYXBwbGljYXRpb24tY2FjaGUnLFxuICAnLS1kaXNhYmxlLW9mZmxpbmUtbG9hZC1zdGFsZS1jYWNoZScsXG4gICctLWRpc2stY2FjaGUtc2l6ZT0wJyxcbiAgJy0tZGlzYWJsZS1iYWNrZ3JvdW5kLW5ldHdvcmtpbmcnLFxuICAnLS1kaXNhYmxlLWRlZmF1bHQtYXBwcycsXG4gICctLWRpc2FibGUtZXh0ZW5zaW9ucycsXG4gICctLWRpc2FibGUtc3luYycsXG4gICctLWRpc2FibGUtdHJhbnNsYXRlJyxcbiAgJy0taGlkZS1zY3JvbGxiYXJzJyxcbiAgJy0tbWV0cmljcy1yZWNvcmRpbmctb25seScsXG4gICctLW11dGUtYXVkaW8nLFxuICAnLS1uby1maXJzdC1ydW4nLFxuICAnLS1zYWZlYnJvd3NpbmctZGlzYWJsZS1hdXRvLXVwZGF0ZScsXG4gICctLWlnbm9yZS1jZXJ0aWZpY2F0ZS1lcnJvcnMnLFxuICAnLS1pZ25vcmUtc3NsLWVycm9ycycsXG4gICctLWlnbm9yZS1jZXJ0aWZpY2F0ZS1lcnJvcnMtc3BraS1saXN0Jyxcbl07XG5leHBvcnQgY29uc3QgY2xpZW50c0FycmF5ID0gW107XG5leHBvcnQgY29uc3Qgc2Vzc2lvbnMgPSBbXTtcbmV4cG9ydCBjb25zdCBldmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQWVBLElBQUFBLE9BQUEsR0FBQUMsT0FBQSxXQUFzQyxDQWZ0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FHTyxNQUFNQyxZQUFZLEdBQUcsQ0FDMUIsd0JBQXdCLEVBQ3hCLGNBQWMsRUFDZCx3QkFBd0IsRUFDeEIsNEJBQTRCLEVBQzVCLGlCQUFpQixFQUNqQiw2QkFBNkIsRUFDN0Isb0NBQW9DLEVBQ3BDLHFCQUFxQixFQUNyQixpQ0FBaUMsRUFDakMsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixnQkFBZ0I7QUFDaEIscUJBQXFCO0FBQ3JCLG1CQUFtQjtBQUNuQiwwQkFBMEI7QUFDMUIsY0FBYztBQUNkLGdCQUFnQjtBQUNoQixvQ0FBb0M7QUFDcEMsNkJBQTZCO0FBQzdCLHFCQUFxQjtBQUNyQix1Q0FBdUMsQ0FDeEMsQ0FBQ0MsT0FBQSxDQUFBRCxZQUFBLEdBQUFBLFlBQUE7O0FBQ0ssTUFBTUUsWUFBWSxHQUFHLEVBQUUsQ0FBQ0QsT0FBQSxDQUFBQyxZQUFBLEdBQUFBLFlBQUE7QUFDeEIsTUFBTUMsUUFBUSxHQUFHLEVBQUUsQ0FBQ0YsT0FBQSxDQUFBRSxRQUFBLEdBQUFBLFFBQUE7QUFDcEIsTUFBTUMsWUFBWSxHQUFHLElBQUlDLG9CQUFZLEVBQUUsQ0FBQ0osT0FBQSxDQUFBRyxZQUFBLEdBQUFBLFlBQUEifQ==
@@ -0,0 +1,178 @@
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.defaultFileTokenStoreOptions = exports.FileTokenStore = void 0;
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+ var fs = _interopRequireWildcard(require("fs"));
19
+ var path = _interopRequireWildcard(require("path"));
20
+ var _sanitizeFilename = _interopRequireDefault(require("sanitize-filename"));
21
+
22
+ var _ = require("../../..");function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function (nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;} /*
23
+ * This file is part of WPPConnect.
24
+ *
25
+ * WPPConnect is free software: you can redistribute it and/or modify
26
+ * it under the terms of the GNU Lesser General Public License as published by
27
+ * the Free Software Foundation, either version 3 of the License, or
28
+ * (at your option) any later version.
29
+ *
30
+ * WPPConnect is distributed in the hope that it will be useful,
31
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
32
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33
+ * GNU Lesser General Public License for more details.
34
+ *
35
+ * You should have received a copy of the GNU Lesser General Public License
36
+ * along with WPPConnect. If not, see <https://www.gnu.org/licenses/>.
37
+ */ /// <reference types="node" />
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+ const defaultFileTokenStoreOptions = {
57
+ decodeFunction: JSON.parse,
58
+ encodeFunction: JSON.stringify,
59
+ encoding: 'utf8',
60
+ fileExtension: '.data.json',
61
+ path: './tokens'
62
+ };exports.defaultFileTokenStoreOptions = defaultFileTokenStoreOptions;
63
+
64
+ class FileTokenStore {
65
+ options;
66
+
67
+ constructor(options = {}) {
68
+ this.options = Object.assign(
69
+ {},
70
+ defaultFileTokenStoreOptions,
71
+ options);
72
+
73
+ }
74
+
75
+ /**
76
+ * Resolve the path of file
77
+ * @param sessionName Name of session
78
+ * @returns Full path of token file
79
+ */
80
+ resolverPath(sessionName) {
81
+ const filename = (0, _sanitizeFilename.default)(sessionName) + this.options.fileExtension;
82
+ return path.resolve(process.cwd(), path.join(this.options.path, filename));
83
+ }
84
+
85
+ async getToken(
86
+ sessionName)
87
+ {
88
+ const filePath = this.resolverPath(sessionName);
89
+
90
+ if (!fs.existsSync(filePath)) {
91
+ return undefined;
92
+ }
93
+
94
+ const text = await fs.promises.
95
+ readFile(filePath, {
96
+ encoding: this.options.encoding
97
+ }).
98
+ catch(() => null);
99
+
100
+ if (!text) {
101
+ return undefined;
102
+ }
103
+
104
+ try {
105
+ return this.options.decodeFunction(text);
106
+ } catch (error) {
107
+ _.logger.debug(error);
108
+ return undefined;
109
+ }
110
+ }
111
+
112
+ async setToken(
113
+ sessionName,
114
+ tokenData)
115
+ {
116
+ if (!tokenData) {
117
+ return false;
118
+ }
119
+
120
+ if (!fs.existsSync(this.options.path)) {
121
+ await fs.promises.mkdir(this.options.path, { recursive: true });
122
+ }
123
+
124
+ const filePath = this.resolverPath(sessionName);
125
+
126
+ try {
127
+ const text = this.options.encodeFunction(tokenData);
128
+
129
+ await fs.promises.writeFile(filePath, text, {
130
+ encoding: this.options.encoding
131
+ });
132
+ return true;
133
+ } catch (error) {
134
+ _.logger.debug(error);
135
+ return false;
136
+ }
137
+ }
138
+
139
+ async removeToken(sessionName) {
140
+ const filePath = this.resolverPath(sessionName);
141
+
142
+ if (!fs.existsSync(filePath)) {
143
+ return false;
144
+ }
145
+
146
+ try {
147
+ await fs.promises.unlink(filePath);
148
+ return true;
149
+ } catch (error) {
150
+ _.logger.debug(error);
151
+ return false;
152
+ }
153
+ }
154
+
155
+ async listTokens() {
156
+ if (!fs.existsSync(this.options.path)) {
157
+ return [];
158
+ }
159
+
160
+ try {
161
+ let files = await fs.promises.readdir(this.options.path);
162
+
163
+ // Only sessions with same fileExtension
164
+ files = files.filter((file) => file.endsWith(this.options.fileExtension));
165
+
166
+ // Return name only
167
+ files = files.map((file) =>
168
+ path.basename(file, this.options.fileExtension));
169
+
170
+
171
+ return files;
172
+ } catch (error) {
173
+ _.logger.debug(error);
174
+ return [];
175
+ }
176
+ }
177
+ }exports.FileTokenStore = FileTokenStore;
178
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsInBhdGgiLCJfc2FuaXRpemVGaWxlbmFtZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsImRlZmF1bHRGaWxlVG9rZW5TdG9yZU9wdGlvbnMiLCJkZWNvZGVGdW5jdGlvbiIsIkpTT04iLCJwYXJzZSIsImVuY29kZUZ1bmN0aW9uIiwic3RyaW5naWZ5IiwiZW5jb2RpbmciLCJmaWxlRXh0ZW5zaW9uIiwiZXhwb3J0cyIsIkZpbGVUb2tlblN0b3JlIiwib3B0aW9ucyIsImNvbnN0cnVjdG9yIiwiYXNzaWduIiwicmVzb2x2ZXJQYXRoIiwic2Vzc2lvbk5hbWUiLCJmaWxlbmFtZSIsInNhbml0aXplIiwicmVzb2x2ZSIsInByb2Nlc3MiLCJjd2QiLCJqb2luIiwiZ2V0VG9rZW4iLCJmaWxlUGF0aCIsImV4aXN0c1N5bmMiLCJ1bmRlZmluZWQiLCJ0ZXh0IiwicHJvbWlzZXMiLCJyZWFkRmlsZSIsImNhdGNoIiwiZXJyb3IiLCJsb2dnZXIiLCJkZWJ1ZyIsInNldFRva2VuIiwidG9rZW5EYXRhIiwibWtkaXIiLCJyZWN1cnNpdmUiLCJ3cml0ZUZpbGUiLCJyZW1vdmVUb2tlbiIsInVubGluayIsImxpc3RUb2tlbnMiLCJmaWxlcyIsInJlYWRkaXIiLCJmaWx0ZXIiLCJmaWxlIiwiZW5kc1dpdGgiLCJtYXAiLCJiYXNlbmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlsL3Rva2VuU3RvcmUvRmlsZVRva2VuU3RvcmUvRmlsZVRva2VuU3RvcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFdQUENvbm5lY3QuXG4gKlxuICogV1BQQ29ubmVjdCBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFdQUENvbm5lY3QgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggV1BQQ29ubmVjdC4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwibm9kZVwiIC8+XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHNhbml0aXplIGZyb20gJ3Nhbml0aXplLWZpbGVuYW1lJztcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vLi4nO1xuaW1wb3J0IHsgU2Vzc2lvblRva2VuLCBUb2tlblN0b3JlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVUb2tlblN0b3JlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEZWNvZGUgZnVuY3Rpb24gdG8gcGFyc2UgdG9rZW4gZmlsZSAoRGVmYXVsdCBgSlNPTi5wYXJzZWApIHtAbGluayBkZWZhdWx0RmlsZVRva2VuU3RvcmVPcHRpb25zfVxuICAgKiBAZGVmYXVsdCBgSlNPTi5wYXJzZWBcbiAgICovXG4gIGRlY29kZUZ1bmN0aW9uOiAodGV4dDogc3RyaW5nKSA9PiBhbnk7XG5cbiAgLyoqXG4gICAqIEVuY29kZSBmdW5jdGlvbiB0byBzYXZlIHRva2VucyAoRGVmYXVsdCBgSlNPTi5zdHJpbmdpZnlgKVxuICAgKiBAZGVmYXVsdCBgSlNPTi5zdHJpbmdpZnlgXG4gICAqL1xuICBlbmNvZGVGdW5jdGlvbjogKGRhdGE6IGFueSkgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmNvZGluZyB1c2VkIHRvIHJlYWQgYW5kIHNhdmUgZmlsZXNcbiAgICogQGRlZmF1bHQgJ3V0ZjgnXG4gICAqL1xuICBlbmNvZGluZzogQnVmZmVyRW5jb2Rpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0ICcuZGF0YS5qc29uJ1xuICAgKi9cbiAgZmlsZUV4dGVuc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb2xkZXIgcGF0aCB0byBzdG9yZSB0b2tlbnNcbiAgICogQGRlZmF1bHQgJy4vdG9rZW5zJ1xuICAgKi9cbiAgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdEZpbGVUb2tlblN0b3JlT3B0aW9uczogRmlsZVRva2VuU3RvcmVPcHRpb25zID0ge1xuICBkZWNvZGVGdW5jdGlvbjogSlNPTi5wYXJzZSxcbiAgZW5jb2RlRnVuY3Rpb246IEpTT04uc3RyaW5naWZ5LFxuICBlbmNvZGluZzogJ3V0ZjgnLFxuICBmaWxlRXh0ZW5zaW9uOiAnLmRhdGEuanNvbicsXG4gIHBhdGg6ICcuL3Rva2VucycsXG59O1xuXG5leHBvcnQgY2xhc3MgRmlsZVRva2VuU3RvcmUgaW1wbGVtZW50cyBUb2tlblN0b3JlIHtcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IEZpbGVUb2tlblN0b3JlT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQYXJ0aWFsPEZpbGVUb2tlblN0b3JlT3B0aW9ucz4gPSB7fSkge1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIGRlZmF1bHRGaWxlVG9rZW5TdG9yZU9wdGlvbnMsXG4gICAgICBvcHRpb25zXG4gICAgKSBhcyBGaWxlVG9rZW5TdG9yZU9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcGF0aCBvZiBmaWxlXG4gICAqIEBwYXJhbSBzZXNzaW9uTmFtZSBOYW1lIG9mIHNlc3Npb25cbiAgICogQHJldHVybnMgRnVsbCBwYXRoIG9mIHRva2VuIGZpbGVcbiAgICovXG4gIHByb3RlY3RlZCByZXNvbHZlclBhdGgoc2Vzc2lvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBzYW5pdGl6ZShzZXNzaW9uTmFtZSkgKyB0aGlzLm9wdGlvbnMuZmlsZUV4dGVuc2lvbjtcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHBhdGguam9pbih0aGlzLm9wdGlvbnMucGF0aCwgZmlsZW5hbWUpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUb2tlbihcbiAgICBzZXNzaW9uTmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8U2Vzc2lvblRva2VuIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLnJlc29sdmVyUGF0aChzZXNzaW9uTmFtZSk7XG5cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHQgPSBhd2FpdCBmcy5wcm9taXNlc1xuICAgICAgLnJlYWRGaWxlKGZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiB0aGlzLm9wdGlvbnMuZW5jb2RpbmcsXG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IG51bGwpO1xuXG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRlY29kZUZ1bmN0aW9uKHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoZXJyb3IpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0VG9rZW4oXG4gICAgc2Vzc2lvbk5hbWU6IHN0cmluZyxcbiAgICB0b2tlbkRhdGE6IFNlc3Npb25Ub2tlbiB8IG51bGxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0b2tlbkRhdGEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5vcHRpb25zLnBhdGgpKSB7XG4gICAgICBhd2FpdCBmcy5wcm9taXNlcy5ta2Rpcih0aGlzLm9wdGlvbnMucGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLnJlc29sdmVyUGF0aChzZXNzaW9uTmFtZSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMub3B0aW9ucy5lbmNvZGVGdW5jdGlvbih0b2tlbkRhdGEpO1xuXG4gICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoZmlsZVBhdGgsIHRleHQsIHtcbiAgICAgICAgZW5jb2Rpbmc6IHRoaXMub3B0aW9ucy5lbmNvZGluZyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlbW92ZVRva2VuKHNlc3Npb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMucmVzb2x2ZXJQYXRoKHNlc3Npb25OYW1lKTtcblxuICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMucHJvbWlzZXMudW5saW5rKGZpbGVQYXRoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsaXN0VG9rZW5zKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5vcHRpb25zLnBhdGgpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBmaWxlcyA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIodGhpcy5vcHRpb25zLnBhdGgpO1xuXG4gICAgICAvLyBPbmx5IHNlc3Npb25zIHdpdGggc2FtZSBmaWxlRXh0ZW5zaW9uXG4gICAgICBmaWxlcyA9IGZpbGVzLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aCh0aGlzLm9wdGlvbnMuZmlsZUV4dGVuc2lvbikpO1xuXG4gICAgICAvLyBSZXR1cm4gbmFtZSBvbmx5XG4gICAgICBmaWxlcyA9IGZpbGVzLm1hcCgoZmlsZSkgPT5cbiAgICAgICAgcGF0aC5iYXNlbmFtZShmaWxlLCB0aGlzLm9wdGlvbnMuZmlsZUV4dGVuc2lvbilcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBmaWxlcztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGVycm9yKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkEsSUFBQUEsRUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsSUFBQSxHQUFBRix1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTs7QUFFQSxJQUFBSSxDQUFBLEdBQUFKLE9BQUEsYUFBa0MsU0FBQUsseUJBQUFDLFdBQUEsY0FBQUMsT0FBQSxpQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxPQUFBRSxnQkFBQSxPQUFBRixPQUFBLFdBQUFGLHdCQUFBLFlBQUFBLENBQUFDLFdBQUEsVUFBQUEsV0FBQSxHQUFBRyxnQkFBQSxHQUFBRCxpQkFBQSxJQUFBRixXQUFBLFlBQUFQLHdCQUFBVyxHQUFBLEVBQUFKLFdBQUEsUUFBQUEsV0FBQSxJQUFBSSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxVQUFBRCxHQUFBLE1BQUFBLEdBQUEsb0JBQUFBLEdBQUEsd0JBQUFBLEdBQUEsMkJBQUFFLE9BQUEsRUFBQUYsR0FBQSxRQUFBRyxLQUFBLEdBQUFSLHdCQUFBLENBQUFDLFdBQUEsTUFBQU8sS0FBQSxJQUFBQSxLQUFBLENBQUFDLEdBQUEsQ0FBQUosR0FBQSxXQUFBRyxLQUFBLENBQUFFLEdBQUEsQ0FBQUwsR0FBQSxPQUFBTSxNQUFBLFVBQUFDLHFCQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFVBQUFDLEdBQUEsSUFBQVgsR0FBQSxP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
@@ -1,27 +1,24 @@
1
- "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");var _config = _interopRequireDefault(require("../../config.json"));
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _config = _interopRequireDefault(require("../../config"));
2
2
  var _fileTokenStory = _interopRequireDefault(require("./fileTokenStory"));
3
3
  var _mongodbTokenStory = _interopRequireDefault(require("./mongodbTokenStory"));
4
4
  var _redisTokenStory = _interopRequireDefault(require("./redisTokenStory"));
5
- var _firebaseTokenStory = _interopRequireDefault(require("./firebaseTokenStory"));
6
5
 
7
- var Factory = function () {
8
- this.createTokenStory = function (client) {
9
- var myTokenStore;
6
+ class Factory {
7
+ createTokenStory(client) {
8
+ let myTokenStore;
10
9
  const type = _config.default.tokenStoreType;
11
10
 
12
11
  if (type === 'mongodb') {
13
12
  myTokenStore = new _mongodbTokenStory.default(client);
14
13
  } else if (type === 'redis') {
15
14
  myTokenStore = new _redisTokenStory.default(client);
16
- } else if (type === 'firebase') {
17
- myTokenStore = new _firebaseTokenStory.default();
18
15
  } else {
19
16
  myTokenStore = new _fileTokenStory.default(client);
20
17
  }
21
18
 
22
19
  return myTokenStore.tokenStore;
23
- };
24
- };
20
+ }
21
+ }var _default =
25
22
 
26
- module.exports = Factory;
27
- //# sourceMappingURL=factory.js.map
23
+ Factory;exports.default = _default;
24
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uZmlnIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZmlsZVRva2VuU3RvcnkiLCJfbW9uZ29kYlRva2VuU3RvcnkiLCJfcmVkaXNUb2tlblN0b3J5IiwiRmFjdG9yeSIsImNyZWF0ZVRva2VuU3RvcnkiLCJjbGllbnQiLCJteVRva2VuU3RvcmUiLCJ0eXBlIiwiY29uZmlnIiwidG9rZW5TdG9yZVR5cGUiLCJNb25nb2RiVG9rZW5TdG9yZSIsIlJlZGlzVG9rZW5TdG9yZSIsIkZpbGVUb2tlblN0b3JlIiwidG9rZW5TdG9yZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbC90b2tlblN0b3JlL2ZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi8uLi9jb25maWcnO1xuaW1wb3J0IEZpbGVUb2tlblN0b3JlIGZyb20gJy4vZmlsZVRva2VuU3RvcnknO1xuaW1wb3J0IE1vbmdvZGJUb2tlblN0b3JlIGZyb20gJy4vbW9uZ29kYlRva2VuU3RvcnknO1xuaW1wb3J0IFJlZGlzVG9rZW5TdG9yZSBmcm9tICcuL3JlZGlzVG9rZW5TdG9yeSc7XG5cbmNsYXNzIEZhY3Rvcnkge1xuICBwdWJsaWMgY3JlYXRlVG9rZW5TdG9yeShjbGllbnQ6IGFueSkge1xuICAgIGxldCBteVRva2VuU3RvcmU7XG4gICAgY29uc3QgdHlwZSA9IGNvbmZpZy50b2tlblN0b3JlVHlwZTtcblxuICAgIGlmICh0eXBlID09PSAnbW9uZ29kYicpIHtcbiAgICAgIG15VG9rZW5TdG9yZSA9IG5ldyBNb25nb2RiVG9rZW5TdG9yZShjbGllbnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3JlZGlzJykge1xuICAgICAgbXlUb2tlblN0b3JlID0gbmV3IFJlZGlzVG9rZW5TdG9yZShjbGllbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBteVRva2VuU3RvcmUgPSBuZXcgRmlsZVRva2VuU3RvcmUoY2xpZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbXlUb2tlblN0b3JlLnRva2VuU3RvcmU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6InlMQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGVBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLGtCQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxnQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBOztBQUVBLE1BQU1JLE9BQU8sQ0FBQztFQUNMQyxnQkFBZ0JBLENBQUNDLE1BQVcsRUFBRTtJQUNuQyxJQUFJQyxZQUFZO0lBQ2hCLE1BQU1DLElBQUksR0FBR0MsZUFBTSxDQUFDQyxjQUFjOztJQUVsQyxJQUFJRixJQUFJLEtBQUssU0FBUyxFQUFFO01BQ3RCRCxZQUFZLEdBQUcsSUFBSUksMEJBQWlCLENBQUNMLE1BQU0sQ0FBQztJQUM5QyxDQUFDLE1BQU0sSUFBSUUsSUFBSSxLQUFLLE9BQU8sRUFBRTtNQUMzQkQsWUFBWSxHQUFHLElBQUlLLHdCQUFlLENBQUNOLE1BQU0sQ0FBQztJQUM1QyxDQUFDLE1BQU07TUFDTEMsWUFBWSxHQUFHLElBQUlNLHVCQUFjLENBQUNQLE1BQU0sQ0FBQztJQUMzQzs7SUFFQSxPQUFPQyxZQUFZLENBQUNPLFVBQVU7RUFDaEM7QUFDRixDQUFDLElBQUFDLFFBQUE7O0FBRWNYLE9BQU8sQ0FBQVksT0FBQSxDQUFBQyxPQUFBLEdBQUFGLFFBQUEifQ==