barryle commited on
Commit
4f4fbc7
1 Parent(s): 70cab3e
.env ADDED
@@ -0,0 +1 @@
 
 
1
+ NODE_NAME=hugging_ppteesr
.gitignore CHANGED
@@ -21,6 +21,4 @@ logs
21
  .idea
22
 
23
  # Local env files
24
- .env
25
- .env.*
26
  !.env.example
 
21
  .idea
22
 
23
  # Local env files
 
 
24
  !.env.example
Dockerfile CHANGED
@@ -7,6 +7,7 @@ RUN yum install -y chromium pango libXcomposite libXcursor libXdamage libXext l
7
  yum clean all && \
8
  rm -rf /var/cache/yum
9
 
 
10
  # Set up a new user named "user" with user ID 1000 and create the working directory
11
  RUN useradd -m -u 1000 -s /bin/bash user && \
12
  mkdir -p /work && \
@@ -15,7 +16,7 @@ RUN useradd -m -u 1000 -s /bin/bash user && \
15
  # Symbolic link for libnss3
16
  RUN ln -s /usr/lib/x86_64-linux-gnu/libnss3.so /usr/lib/libnss3.so
17
 
18
- RUN curl -sL https://rpm.nodesource.com/setup_20.x | bash -
19
  RUN yum install -y nodejs
20
  RUN npm install pm2@latest -g
21
  RUN npm install colors@1.4.0 -g
@@ -42,8 +43,15 @@ WORKDIR /work/source
42
  # Install global npm packages
43
  RUN npm install
44
 
 
 
 
 
 
 
 
45
  # Expose the port the app runs on
46
  EXPOSE 7860
47
 
48
  # Execute the application with PM2
49
- CMD xvfb-run --server-args="-screen 0 1024x768x24" pm2-runtime start app.js
 
7
  yum clean all && \
8
  rm -rf /var/cache/yum
9
 
10
+
11
  # Set up a new user named "user" with user ID 1000 and create the working directory
12
  RUN useradd -m -u 1000 -s /bin/bash user && \
13
  mkdir -p /work && \
 
16
  # Symbolic link for libnss3
17
  RUN ln -s /usr/lib/x86_64-linux-gnu/libnss3.so /usr/lib/libnss3.so
18
 
19
+ RUN curl -sL https://rpm.nodesource.com/setup_18.x | bash -
20
  RUN yum install -y nodejs
21
  RUN npm install pm2@latest -g
22
  RUN npm install colors@1.4.0 -g
 
43
  # Install global npm packages
44
  RUN npm install
45
 
46
+ # Set a build argument for NODE_NAME
47
+ ARG NODE_NAME
48
+ ENV NODE_NAME=${NODE_NAME}
49
+ # Rename .env.prod to .env and replace NODE_NAME
50
+ RUN mv /work/source/.env.prod /work/source/.env \
51
+ && sed -i "s/{NODE_NAME}/${NODE_NAME}/g" /work/source/.env
52
+
53
  # Expose the port the app runs on
54
  EXPOSE 7860
55
 
56
  # Execute the application with PM2
57
+ CMD xvfb-run --server-args="-screen 0 1024x768x24" pm2-runtime start server.js && pm2 save
Makefile CHANGED
@@ -1,9 +1,15 @@
 
 
 
 
 
 
1
  all:
2
  @make stop
3
  @make build
4
  @make up
5
  build:
6
- docker build -t my-node-app:v1 .
7
  down:
8
  docker stop my_node
9
  stop:
 
1
+ include .env
2
+
3
+ ifeq ($(wildcard .env),)
4
+ ENV_FILE_PARAM = --env-file .env
5
+ endif
6
+
7
  all:
8
  @make stop
9
  @make build
10
  @make up
11
  build:
12
+ docker build --build-arg NODE_NAME=$(NODE_NAME) $(ENV_FILE_PARAM) -t my-node-app:v1 .
13
  down:
14
  docker stop my_node
15
  stop:
README.md DELETED
@@ -1,11 +0,0 @@
1
- ---
2
- title: Ppteesr
3
- emoji: 💻
4
- colorFrom: red
5
- colorTo: pink
6
- sdk: docker
7
- pinned: false
8
- license: apache-2.0
9
- ---
10
-
11
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
README.txt CHANGED
@@ -5,4 +5,4 @@ docker stop my_node && docker remove my_node
5
 
6
  --
7
  Deleting unused images
8
- docker image prune -f
 
5
 
6
  --
7
  Deleting unused images
8
+ docker image prune -f && docker rmi $(docker images -q) -f
build.sh ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # Get the value of NODE_NAME environment variable
4
+ custom_node_name="$NODE_NAME"
5
+
6
+ # Check if NODE_NAME is set
7
+ if [ -z "$custom_node_name" ]; then
8
+ echo "Error: NODE_NAME environment variable is not set."
9
+ exit 1
10
+ fi
11
+
12
+ # Build Docker image with the custom node name
13
+ docker build --build-arg NODE_NAME="$custom_node_name" -t my-node-app:v1 . && docker run -d -p 7860:7860 --name my_node_"$custom_node_name" my-node-app:v1
source/.env.example ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ BUILD_ENV=local
2
+ PORT=7860
3
+ NODE_NAME={NODE_NAME}
4
+ CHROME_BIN=/usr/bin/chromium-browser
source/.env.prod ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ BUILD_ENV=prod
2
+ PORT=7860
3
+ NODE_NAME={NODE_NAME}
source/Helpers/utils.js CHANGED
@@ -243,7 +243,13 @@ module.exports = {
243
 
244
  saveStringToFile: async function (fileName, content) {
245
  try {
246
- await fs.writeFile(fileName, content, 'utf-8');
 
 
 
 
 
 
247
  console.log(`Content saved to ${fileName}`);
248
  } catch (error) {
249
  console.error(`Error saving content to ${fileName}:`, error.message);
@@ -261,5 +267,32 @@ module.exports = {
261
  fs.unlinkSync(filePath);
262
  console.log(`Deleted existing file: ${filePath}`);
263
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
  }
265
  }
 
243
 
244
  saveStringToFile: async function (fileName, content) {
245
  try {
246
+ // if folder is not existed
247
+ const dirname = path.dirname(fileName);
248
+ if (!fs.existsSync(dirname)) {
249
+ fs.mkdirSync(dirname);
250
+ }
251
+
252
+ fs.writeFileSync(fileName, content, 'utf-8');
253
  console.log(`Content saved to ${fileName}`);
254
  } catch (error) {
255
  console.error(`Error saving content to ${fileName}:`, error.message);
 
267
  fs.unlinkSync(filePath);
268
  console.log(`Deleted existing file: ${filePath}`);
269
  }
270
+ },
271
+ readFileToBuffer: function (filePath){
272
+ try {
273
+ const data = fs.readFileSync(filePath);
274
+ return data.buffer;
275
+ } catch (err) {
276
+ throw err;
277
+ }
278
+ },
279
+ arrayBufferToUInt8Array: function(buffer) {
280
+ const array = new Uint8Array(buffer);
281
+ return Array.from(array);
282
+ },
283
+ saveBinaryToFile: async function(buffer, filename){
284
+ try {
285
+ // if folder is not existed
286
+ const dirname = path.dirname(filename);
287
+ if (!fs.existsSync(dirname)) {
288
+ fs.mkdirSync(dirname);
289
+ }
290
+
291
+ await fs.writeFile(filename, Buffer.from(buffer, 'binary'));
292
+ console.log(`Binary was saved to ${filename}`);
293
+
294
+ } catch (error) {
295
+ console.error(`Error saving content to ${filename}:`, error.message);
296
+ }
297
  }
298
  }
source/Models/Proxy.js DELETED
@@ -1,15 +0,0 @@
1
- const FactoryProxy = (server, port, username, password) => {
2
- return {
3
- server,
4
- port,
5
- username,
6
- password,
7
- string () {
8
- return `${server}:${port}@${username}:${password}`
9
- }
10
- }
11
- }
12
-
13
- module.exports = {
14
- FactoryProxy
15
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
source/Models/Report.js DELETED
File without changes
source/Models/Task.js DELETED
@@ -1,11 +0,0 @@
1
- const FactoryTask = (task) => {
2
- return {
3
- info () {
4
- return `${task.id}: ${task.title} - ${task.url}`
5
- }
6
- }
7
- }
8
-
9
- module.exports = {
10
- FactoryTask
11
- }
 
 
 
 
 
 
 
 
 
 
 
 
source/Models/Websocket.js DELETED
@@ -1,35 +0,0 @@
1
- var Websocket = (function () {
2
- // instance stores a reference to the Singleton
3
- var instance;
4
-
5
- function createInstance() {
6
- // private variables and methods
7
- var _privateVariable = 'I am a private variable';
8
- function _privateMethod() {
9
- console.log('I am a private method');
10
- }
11
-
12
- return {
13
- // public methods and variables
14
- publicMethod: function() {
15
- console.log('I am a public method');
16
- },
17
- publicVariable: 'I am a public variable'
18
- };
19
- }
20
-
21
- return {
22
- // Get the Singleton instance if it exists
23
- // or create one if doesn't
24
- getInstance: function () {
25
- if (!instance) {
26
- instance = createInstance();
27
- }
28
- return instance;
29
- }
30
- };
31
- })();
32
-
33
- module.exports = {
34
- Websocket
35
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
source/Scenario/Comic.js CHANGED
@@ -97,15 +97,10 @@ var service = (function () {
97
  fileSuffix = isFree ? "_Free.txt" : "_Vip.txt"; // Adjust file suffix based on isFree condition
98
  }
99
 
100
- utils.createFolder("truyen", folderName);
101
-
102
- const filePath = `truyen/${folderName}/${trackName}${fileSuffix}`;
103
-
104
- utils.deleteFileIfExists(filePath); // Delete the old file if it exists
105
-
106
  //fs.writeFileSync(filePath, textCleaned, 'utf-8');
107
-
108
- utils.saveStringToFile(filePath, textCleaned)
109
 
110
  }
111
 
 
97
  fileSuffix = isFree ? "_Free.txt" : "_Vip.txt"; // Adjust file suffix based on isFree condition
98
  }
99
 
100
+ let fileComicPath = path.resolve('storage', 'comics', folderName, `${trackName}${fileSuffix}`)
101
+ utils.deleteFileIfExists(fileComicPath); // Delete the old file if it exists
 
 
 
 
102
  //fs.writeFileSync(filePath, textCleaned, 'utf-8');
103
+ utils.saveStringToFile(fileComicPath, textCleaned)
 
104
 
105
  }
106
 
source/Scenario/chatGPT.js CHANGED
@@ -1,732 +1,289 @@
1
 
2
  const utils = require("../Helpers/utils");
3
- const browser = require("../Helpers/browser");
4
- const fse = require("fs-extra");
5
- const path = require("path");
6
- const cheerio = require('cheerio');
7
- const { until, Key, By } = require("selenium-webdriver");
8
- const { randomInt } = require("crypto");
9
- var moment = require("moment"); // require
10
- const { exit } = require("process");
11
- const { forEach } = require("lodash");
12
- const { STATUS } = require(path.resolve("Enums", "Task.js"));
13
  const { v4: uuidv4 } = require('uuid');
14
-
15
- const CHATGPT = JSON.parse(
16
- fse.readFileSync(path.resolve("config", "chatgpt.json"))
17
- );
18
-
 
19
 
20
  var service = (function () {
21
  // instance stores a reference to the Singleton
22
  var instance;
23
 
24
  function createInstance() {
25
- var audioStack = new Map()
26
- var audioList = []
27
-
28
- // private variables and methods
29
- async function takeScreenShot(driver, ip) {
30
- try {
31
- // Capture a screenshot of the current page
32
- const screenshot = await driver.takeScreenshot({
33
- format: "webp",
34
- quality: 10,
35
- });
36
- // Save the screenshot to a file
37
- var now = moment().tz("Asia/Bangkok");
38
- const screenshotsDir = path.join(
39
- process.cwd(),
40
- "storage",
41
- "screenshots",
42
- ip,
43
- now.format("YYYY_MM_DD").toString()
44
- );
45
- if (!fse.existsSync(screenshotsDir)) {
46
- fse.mkdirSync(screenshotsDir, { recursive: true });
47
- }
48
- var rand = randomInt(1000);
49
- var fileName = `${now
50
- .format("HH_mm_ss")
51
- .toString()}_${rand}.webp`;
52
- fse.writeFileSync(
53
- path.join(screenshotsDir, fileName),
54
- screenshot,
55
- "base64"
56
- );
57
- utils.log("Screenshot saved to " + fileName);
58
- return path.join(screenshotsDir, fileName);
59
- } catch (error) {
60
- utils.log("Error taking screenshot:", error);
61
- }
62
- return "";
63
- }
64
-
65
- async function cleanAndSaveText(text, folderName, trackName, isFree) {
66
- let textCleaned;
67
- let fileSuffix;
68
-
69
- if (!text || text === "" || [
70
- "Nguồn Text Không Có Chữ",
71
- "Hoặc Cần Scan Ảnh",
72
- "Cần Uỷ Quyền Mua Truyện Từ Tác Giả Hoặc Mua Text Từ Faloo"
73
- ].includes(text)) {
74
- textCleaned = "Error";
75
- fileSuffix = "_error.";
76
- } else {
77
- const $ = cheerio.load(text);
78
- textCleaned = $.text();
79
-
80
-
81
- // Cleaning logic
82
- textCleaned = textCleaned.replace(/\.[\n.]{1,}/g, '.\n\n'); // Replace multiple line breaks with just two
83
- textCleaned = textCleaned.replace(/Cách Chương\.?/g, ''); // Remove "Cách Chương" or "Cách Chương."
84
-
85
- const regexPattern = /(.*?),(.*?),{0,}\s{0,}Nguồn Truyện Audio CV chấm com./g;
86
-
87
- const regexMatch = regexPattern.exec(textCleaned);
88
- var chapterName;
89
-
90
- if (regexMatch) {
91
- //console.log("FOUND Regrex",regexMatch);
92
- chapterName = regexMatch[2].trim();
93
- //console.log("Chapter Name:", chapterName);
94
- } else {
95
- console.log("No match found.");
96
- }
97
 
98
- textCleaned = textCleaned.replace(regexPattern, ''); // Remove "Cách Chương" or "Cách Chương."
 
 
 
 
 
99
 
100
- textCleaned = chapterName + '.\n\n' + "Nguồn Truyện: Truyện Fox chấm net." + '\n' + textCleaned;
 
101
 
102
- fileSuffix = isFree ? "_Free.txt" : "_Vip.txt"; // Adjust file suffix based on isFree condition
103
- }
 
 
 
104
 
105
- utils.createFolder("truyen", folderName);
106
 
107
- const filePath = `truyen/${folderName}/${trackName}${fileSuffix}`;
108
 
109
- utils.deleteFileIfExists(filePath); // Delete the old file if it exists
110
 
111
- //fs.writeFileSync(filePath, textCleaned, 'utf-8');
112
 
113
- utils.saveStringToFile(filePath, textCleaned)
114
 
115
- }
116
 
117
- async function setCookieGPT(driver, sessionToken) {
118
- // Tạo cookie
119
- const cookie = {
120
- name: '__Secure-next-auth.session-token',
121
- value: sessionToken,
122
- domain: 'chat.openai.com', // Đặt domain tùy thuộc vào trang web cụ thể
123
- path: '/',
124
- expiry: 9999999999 // Đặt thời gian hết hạn của cookie (epoch time)
125
- };
126
 
127
- // Thêm cookie vào trình duyệt
128
- await driver.manage().addCookie(cookie);
129
- }
130
 
131
- async function deleteGPTCookie(driver) {
132
 
133
- //Delete cookie
134
- await driver.manage().deleteCookie('__Secure-next-auth.session-token', 'chat.openai.com');
135
- }
136
 
137
- async function getSpecificCookie(driver, cookieName) {
138
- const cookies = await driver.manage().getCookies();
139
- const specificCookie = cookies.find(cookie => cookie.name === cookieName);
140
 
141
- if (specificCookie) {
142
- //console.log(`Cookie ${cookieName}:`, specificCookie.value);
143
- return specificCookie.value;
144
- } else {
145
- console.log(`Cookie ${cookieName} not found.`);
146
- return null;
147
- }
148
- }
149
-
150
-
151
- async function getBearerToken(driver, sessionToken) {
152
-
153
- await setCookieGPT(driver, sessionToken)
154
-
155
- const script = `
156
- return fetch("https://chat.openai.com/api/auth/session", {
157
-
158
- "credentials": "include",
159
- "headers": {
160
-
161
- "Accept": "*/*",
162
- "Accept-Language": "en-US,en;q=0.5",
163
- "Alt-Used": "chat.openai.com",
164
- "Sec-Fetch-Dest": "empty",
165
- "Sec-Fetch-Mode": "cors",
166
- "Sec-Fetch-Site": "same-origin"
167
-
168
- },
169
- "referrer": "https://chat.openai.com/",
170
- "method": "GET",
171
- "mode": "cors"
172
- })
173
- .then(response => response.json());
174
- `;
175
-
176
- const responseData = await driver.executeScript(script);
177
-
178
- let newCookie = await getSpecificCookie(driver, '__Secure-next-auth.session-token');
179
-
180
- const result = {
181
- newcookie: newCookie,
182
- responseData: responseData
183
- };
184
-
185
- await deleteGPTCookie(driver);
186
-
187
- //const sessionObject = JSON.parse(response);
188
- return result;
189
- }
190
-
191
- async function getRequirementToken(driver, bearToken) {
192
-
193
- const script = `
194
- return fetch("https://chat.openai.com/backend-api/sentinel/chat-requirements", {
195
-
196
- "credentials": "include",
197
- "headers": {
198
-
199
- "Accept": "*/*",
200
- "Accept-Language": "en-US,en;q=0.5",
201
- "OAI-Language": "en-US",
202
- "Authorization": "Bearer ${bearToken}",
203
- "OAI-Device-Id": "d8e8a53e-700d-4baf-b15f-171a77737a49",
204
- "Content-Type": "application/json",
205
- "Alt-Used": "chat.openai.com",
206
- "Sec-Fetch-Dest": "empty",
207
- "Sec-Fetch-Mode": "cors",
208
- "Sec-Fetch-Site": "same-origin"
209
- },
210
- "referrer": "https://chat.openai.com/",
211
- "body": "{}",
212
- "method": "POST",
213
- "mode": "cors"
214
- })
215
- .then(response => response.json());
216
- `;
217
-
218
- const requirementToken = await driver.executeScript(script);
219
-
220
- //console.log(requirementToken)
221
-
222
- return requirementToken.token;
223
- }
224
-
225
- async function getAllConversations(driver, bearToken) {
226
-
227
- const script = `
228
- return fetch("https://chat.openai.com/backend-api/conversations?offset=0&limit=28&order=updated", {
229
- "credentials": "include",
230
- "headers": {
231
- "Accept": "*/*",
232
- "Accept-Language": "en-US,en;q=0.5",
233
- "OAI-Language": "en-US",
234
- "Authorization": "Bearer ${bearToken}",
235
- "Alt-Used": "chat.openai.com",
236
- "Sec-Fetch-Dest": "empty",
237
- "Sec-Fetch-Mode": "cors",
238
- "Sec-Fetch-Site": "same-origin"
239
- },
240
- "referrer": "https://chat.openai.com/",
241
- "method": "GET",
242
- "mode": "cors"
243
- })
244
- .then(response => response.json());
245
- `;
246
-
247
- const responseData = await driver.executeScript(script);
248
-
249
- //console.log(responseData)
250
-
251
- return responseData.items;
252
- }
253
-
254
- async function postConversation(driver, message, bearToken, requirementToken, conversationId = null) {
255
-
256
-
257
- let body = JSON.stringify({
258
- "action": "next",
259
- "messages": message,
260
- "conversation_id": conversationId,
261
- "parent_message_id": "aaa142b6-d456-401a-bee5-f741c4271320",
262
- "model": "text-davinci-003-render-sha",
263
- "timezone_offset_min": -420,
264
- "history_and_training_disabled": false,
265
- "force_paragen": false,
266
- "model_slug": "text-davinci-003-render-sha",
267
- "force_paragen_model_slug": "text-davinci-003-render-sha",
268
- "force_nulligen": false,
269
- "force_rate_limit": false,
270
- "websocket_request_id": "8cf0ba98-12dd-43ea-bd21-a2261f74c423"
271
- })
272
-
273
- // Chuyển chuỗi JSON thành một chuỗi JavaScript
274
- let bodyAsString = `"${body.replace(/"/g, '\\"')}"`;
275
-
276
- bodyAsString = bodyAsString.replace(/\\\\"/g, '\\"');
277
-
278
-
279
- const script = `
280
- async function getSseData(callback) {
281
- try {
282
- const response = await fetch("https://chat.openai.com/backend-api/conversation", {
283
- "credentials": "include",
284
- "headers": {
285
- "content-type": "application/json",
286
- "Accept": "*/*",
287
- "Accept-Language": "en-US,en;q=0.5",
288
- "OAI-Language": "en-US",
289
- "Authorization": "Bearer ${bearToken}",
290
- "Alt-Used": "chat.openai.com",
291
- "Sec-Fetch-Dest": "empty",
292
- "Sec-Fetch-Mode": "cors",
293
- "Sec-Fetch-Site": "same-origin",
294
- "openai-sentinel-chat-requirements-token": "${requirementToken}"
295
- },
296
- "referrer": "https://chat.openai.com/",
297
- "method": "POST",
298
- "mode": "cors",
299
- "body": ${bodyAsString}
300
- });
301
-
302
- const reader = response.body.getReader();
303
- let firstEvent = '';
304
- let streamEnded = false;
305
-
306
- // Read the response stream
307
- while (!streamEnded) {
308
- const { done, value } = await reader.read();
309
- if (done) {
310
- streamEnded = true;
311
- } else {
312
- const chunk = new TextDecoder().decode(value);
313
- firstEvent += chunk;
314
- if (firstEvent.includes("\\n\\n")) {
315
- // Found the end of the first event
316
- streamEnded = true;
317
- }
318
- }
319
- }
320
-
321
- // Parse the first event
322
- callback(parseSseData(firstEvent));
323
-
324
- } catch (error) {
325
- console.error(error);
326
- // Handle potential errors during request
327
- callback(null);
328
- }
329
- }
330
-
331
- function parseSseData(body) {
332
- const data = {};
333
-
334
- body.split("\\n\\n").some(line => {
335
- if (line.trim() !== '') {
336
- try {
337
- const eventData = JSON.parse(line.replace(/^data: /, ''));
338
- data.conversation_id = eventData.conversation_id;
339
- } catch (error) {
340
- console.error('Error parsing SSE data:', error);
341
- }
342
- return true; // Stop parsing after the first event
343
- }
344
- return false;
345
- });
346
-
347
- return data.conversation_id;
348
- }
349
-
350
- // Gọi hàm getSseData với hàm callback nhận result
351
- getSseData(arguments[arguments.length - 1]);
352
- `;
353
-
354
- //utils.saveStringToFile('script.txt', script)
355
-
356
- const responseData = await driver.executeAsyncScript(script);
357
-
358
- //console.log(responseData)
359
-
360
- return responseData;
361
-
362
- }
363
-
364
- async function downloadAudio(driver, bearToken, message_id, conversation_id, voice) {
365
-
366
- const script = `
367
- async function getAudio(callback) {
368
- try {
369
- let response = await fetch('https://chat.openai.com/backend-api/synthesize?message_id=${message_id}&conversation_id=${conversation_id}&voice=${voice}', {
370
- "credentials": "include",
371
- "headers": {
372
- "Accept": "*/*",
373
- "Accept-Language": "en-US,en;q=0.5",
374
- "OAI-Language": "en-US",
375
- "Authorization": "Bearer ${bearToken}",
376
- "OAI-Device-Id": "d8e8a53e-700d-4baf-b15f-171a77737a49",
377
- "Sec-Fetch-Dest": "empty",
378
- "Sec-Fetch-Mode": "cors",
379
- "Sec-Fetch-Site": "same-origin"
380
- },
381
- "referrer": "https://chat.openai.com/c/${conversation_id}",
382
- "method": "GET",
383
- "mode": "cors"
384
- });
385
- let result = await response.arrayBuffer();
386
- let uint8Array = new Uint8Array(result); // Chuyển đổi thành Uint8Array
387
-
388
- callback(Array.from(uint8Array)); // Truyền result vào callback
389
- } catch (error) {
390
- console.error(error);
391
- callback(null); // Trường hợp có lỗi, trả về null
392
- }
393
  }
394
 
395
- // Gọi hàm getAudio với hàm callback nhận result
396
- getAudio(arguments[arguments.length - 1]);
397
- `;
398
-
399
- // Introduce some randomness in the sleep duration
400
- //const sleepDuration = utils.randomRanger(5000, 10000);
401
- //await utils.sleep(sleepDuration);
402
-
403
- //const response = await driver.executeScript(script);
404
- let audio = await driver.executeAsyncScript(script);
405
-
406
- console.log('audio', audio.length);
407
- audioList.push({
408
- voice, audio
409
- })
410
- console.log('voice Done :>> ', voice);
411
- audioStack.delete(voice)
412
- return audio.length;
413
- }
414
-
415
- async function downloadAll(driver, messageid, conversationid, voices, bearTokens) {
416
- let currentIndex = 0;
417
- for (let i = 0; i < voices.length; i++) {
418
- let voice = voices[i]
419
- let tokenTemp = currentIndex < bearTokens.length ? bearTokens[currentIndex] : '';
420
- if (tokenTemp) {
421
- audioStack.set(voice, true)
422
- downloadAudio(driver, tokenTemp, messageid, conversationid, voice)
423
- currentIndex++;
424
- } else {
425
- console.log('sleeping 1:>> ');
426
- await utils.sleep(3000)
427
- console.log('sleeping 2:>> ');
428
- currentIndex = 0;
429
- i--
430
- }
431
- }
432
- console.log('audioStack.size :>> ', audioStack.size);
433
- while (audioStack.size > 0) {
434
- await utils.sleep(2000)
435
- }
436
- return true
437
- }
438
 
439
- return {
440
- handle: async (params, driver) => {
441
- var myparrams =
442
- {
443
- telegrambot: [
444
- {
445
- "chatID": "-1001482381399",
446
- "TELEGRAM_BOT_TOKEN": "6525526908:AAE4sLKWALT7YmDFMx4toFcbF3Bz8csU-tE"
447
- },
448
- {
449
- "chatID": "-1001482381399",
450
- "TELEGRAM_BOT_TOKEN": "7198790593:AAEcGgvERcca_wISmu73qA2-ZPcCs1K6ozw"
451
- },
452
- {
453
- "chatID": "-1001482381399",
454
- "TELEGRAM_BOT_TOKEN": "7022876326:AAH7SZhPc5zKAQPOdYs7tQkKhsfRLVw4FaA"
455
  }
456
 
457
- ],
458
- sessionTokens: [
459
- {
460
- "id": 1,
461
- "token": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..NzQQFjbkFEVF8qJ1.OpFaozhhakF7m1pktHoAf_84NHqEu6DDYBKV16S6XE_4kj2ygpjVG6bM1j1NqrFxD756v0CSs0v74IuqIS6SL_duCPhS7AkIERMXpRQS01u8udHBCA3a9NRQhhBns-B3ibrpdyPdiWlFyWFUh6JNNs5C75zezvc-YrWcOZNLa8UfHpMADIY_VjujvbKQ4lZ44PVVAH-FSpNI9lW-q62C2kPZxUDPWBHfcY-9SWPx0co9YAKxvNV4qyXvLIXxjrFXQWvcObqbY_1LPqJDW0OP77RhkWd9S6LTbgatQCkYossEQul7RanA4I6NvuBDw0vK5IaKdwEKXX4jkVBz3zUIEatOsKdmKq8jUE3xM_MhIVbq7n6kk34rlx5_fiuWS_Zj-dS6moK0Oq-GiQ63N3QUN3HYjuKpLskMeHceL6rO_PBNIAzUknL9NCUK8tS18EQIc_6tHkem-S0qxyD9oxvuoxgmF4n8qZO2eyG_XeyCwDcNJjlSUFDjTImUrGsWV6LLSyO45n-40eRfbl7-iA26dHZVx0jluoXAxxkNSJcFurcVZoMVzgffEVCJZK7F9af-A8Sb3l5_ggE7-sIozLUeu38yTmHJrbxxhG3b6aiLwvXdT_TdNTlENcinqgv36abYffHNLoa8UEbtEVsc1p3IIevnboFe10yQqa9YBb4YqB10Wu_Zw03DaA0QHTRx033NIbnI7Jfw9r6be5L95lruI-X-6ZiD_qPfa2hj2H_pk_dWqfnXsamS6mVz3n6GFBdehuF0NyvdjuWxh7VHoCjsALCePFKIGHspCqYLUPKuo8mWqwfkPHy3HC2eowj2jfUdUXnwpVdAJ6P_aqFBRzWAzaC3RRF7DZeHIuhcoGo52RhZRNKiKjrzY6PG-8DPLvkSnSmlnfUkJakAckbfMMAk-XvANhPpCBeeEXjI7smngI0QRKKJudIsLrseomSMYLK6bQJ8lqXcuCPZOk6iL71MSZvhi-on6Ngy2bvlTvXKNJ7B3LP4iIZfAgrX81NJ5KtRglGHc6CsGnocP4_Uf6zMqLoEgwExoQQLqW29RnLA5OdabrAFHs-JQt2TqTZD6WtCSi3xCc__XtpiapgQF8IYrKAl-b26qznRQygqb17hypJ2HkHMxiXxTchdL1htkas6NCCauv5UpjQTNFJPX3M2WgifKwB4qB002NXO_0f4DbDXxRCOOUJ5tEytAMZPWOmOVbEnNK8_9ltKMSJ9ZML2PyVhA-AUiMCw7_Rme2ANNBeDls9YdmKgMESjvc5wVZfgS25S5Kp9pnysuf7BAZrVCPN2hqu1fi0zfZA10qQZ2w-oPhrCikLekh2xTJtTavutKSTjUeA2_Qf4uVgrpjkCg2-gPGTJik3IWZ9NV1tYOOSCXxvKPrPY8w0rs9jxYAZwsvc_L8q05izMCsjw9JPiaxD_5ii6G30ncHGl5REZK_qwNCBr31CM_ldGdHTDohSKlCym_Mk6bbGxiBHQ34a9jfZdXA2k8Qqrgl0xvRYUHF0V1r89Ny-a5byxCyGp7_Mq3MoQZOO-p5gHQItVUKhTbUHKdkby6dJy18ToMizWyTUi_GGcbsiuW2PP7Se70OYT2x7LyJ0Qwjv26vs8Cc8xIbE-lNY8muK_JWyrvBQL-5eyAIdKPSA0NJYCKbVymrHgOF-H0rbRRHaG9zt9mNshG1KtU1dXc75QD0QcyEhd0GbJU2wdn1Ag0WuYG055mnX5JOwozVpsUmQD1TZ8H0gxZN_dOEej1vmLZbUEPcpg1omcSs3T487ILK6GMjQvMR9-vxxnTI8Xe09tVQSF4Bm8TgsxA65VRUHViQkh6wF-My35wvLLfMOK1-0P3mzXuYQonXY1LCobyuW0WpZi5y_usdeEcvJHEIu0IVRVprTL_Mw0gJVCp6tx6LgRu2yvJaYRuSb7mOmAUS_L3qgJUv1J1s1PD0svbvKfkOvPSPq1yEIgmcDxiUcyuex1Y-LSc54lvtJMMb_mI96CAjL88kx72tS9frubmBjeUpJecMxT52E2pkHZ4QX5aorUlpXK_tIN6s5MiOax4rGarseHNcncS-tDImZVXMluHtupuuiJFE-B-xIhFaIZwiXrjYqnHtWRrCttpyySxFWFqazIIXxexrjArwTeMddaMFI1-lvUlpax9jKv0atG-qzbyh5q50zPS2JxzwFBgvctwywpSrmHRdo1LgUpXmczZc30G6LkTB9AFYh4wSO0ao8f-_Ks1NToq10ny0ISHNLu93sv0d_ve7ushDxsJBY4IyU9NdSwoBKHRUTg_Nt2IMCIey_XywN9BIKNqVFleHtNhvi9az1Es0jMmgBXKmH8yksTdWplfIYsZQlQ3RiI-qDGBdNlMu57oPLa_1eBXsZid70pQxMKWF48OiBaSKX9SanXo3yGg2ff82QFtedwRfHJSW7ubwiwmlrHnsRnl2mawswHD41fk3YkwIHSsVjp8ewFRc0mHdXXyNZZ7ynLGbffq6HuXR5pVCqkfY2JcLxYRVK8GmGvwZ8bKZBxcC0ETgt9By2er-GSe0twmu_aAYnwW96G2dtDyAgArXI2CnY1kGTJ766MuO_qnb2UcXBm9o8y0sDnrMvnrmDszUBjHCevJ4yQU8Z8j8iKLut6YS1is4pGUTdeGDW3GZeQt68yq9HeiNEg3EeL6HU9qbg9pgfq8lUI_VGYtznUaCdlm3k4JbpvP87RI4n_ZeC5iVTgSedxKZZiqtpJ4bevcJWKQe5753NHDKoozXl855uQd6vwR2ej9fxWTPfDCZ-Uuiz_pAzVJ2PIsFKGnIhUHU7QNKcNg_m-0U8sWzz3hdQ2O8SC7LBdAakedvI_6lFeOHEhtHjY1jmuAMH8fTHUUoY7ESD5Dr4zItklsHRMvwoVRVk_gNmPizz850ICUrkpUvk7p7IzeJNSwehKOO_pxhe4b1eo0X_yMef0Czv7znlYJ8lbCU8jGyLfVv0Gzfd-pWuU1E3sAh3CM9rFmtVqT9luM3qNPMVr_SAlRAY.H9zW3hwhZ_sHe5zycItzbA"
462
- },
463
- {
464
- "id": 2,
465
- "token": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..eFl8JpqWPDddtJk0.2DZJ77yi2ND0FGT4qMOphmLgNezb4Q3gH9xI94DfYgpe7Bpmafq8HUW099lcEYjhg0O0H_gsmSQxUERhU950grf2t9qTEBcTXyG_jj5jaWSUNBJXiwGaZpidBOKiYky8wqkRwufSFP8IvtjFyZ9_dehYDzUq_8OqbcgIalkmcgwgXchfm5JlW0E-WH6BNdU5CvfvoywwP5awgClmTNgiXO40uGCPyqAwx-jyTE_ZTxTZxiDgwbbN7zGPuwF9PlUL42yxD3j-QZ-_T_UaTyjeXw4bSFpN-7mdWGtl5e09hw0BEEeAcVVbPA7_oX00Btt72XtO5_OQLmgPv5fQDOmtoFAT6sQZt0rCTMF4rGg80ebUZ7CQnBzbH4qPSi27RSIgJGoA3mCgxfv_CQo0PS94TWspCKoXvnFC5f7nFIbFYXYfnmTbABC2wW2EX_KMHfXfXIkwMZAODyg7HVDLIDh3c4Y_8NDmCoapqgJvZmUp95gEAMbswJCh7-tJYZPKkFjFZTm4qERtPKCJyx6WIk8I9FhMsjgWnNbEGbSjSf0E4A9C8Av1Byr_bzJ0WxhOVY5JsVVXrneHUdAAMd2xMNZKgTHP-0nIFhHy3fnIeqh8pa-xqMNpEWz5DtU6PCXs-76NRuX5aS6YR7HkYkd073bMxTJoifk3LOs2HTeOV5KNL9X_BAqu3RBBc8gLry0ZTbhVTC6MBgSdTGuBT9vMUg0F95SGwnulW70IcIiLR294R-2C1ym-UTmKyovZ53kcMPCY-cScvwNLI2rox1xK4iICDzyk3rYs2kpVQ2H-WH5-7Smo_dany1om-hyNKpqKj2TYw3McstrTDckyBH9S1-HJUSxP2hehDAv8kV7vFeqBut9dQ18VbAeCbeldiVf8q_AaRCNvuzHE3icrHPASz2bLT1mk1HLTcJg0fzOzLV8joHFrcodETuMZ7CjNZuqpP6s75Rn9n_d8HU5OmqbuKwX7H1SfwN6xEmwQsXh4s5lvAZct3uFxfzBxPe_oEHLQbMZP3awNvth1uJzfDRpyBuIJnzB0G5Y81egF4-s8vganaaDEZda7dxLRSrh6U2WOefZS187gArvAKu7Si6PyFPcX3SmZ3bikjyOLasZLqQGXzQYeI8KQyCHJH2p6TNPQ0Le3TiYg43HcLKbaTszCpRfBkNQB--nIdQ2KfoXITUqG0vimt1fUskqnKwLEGrcqclYugf2r2KEJr3Qt71akjmlR62AsPG7JREqKZtYHwuqdD6amG-4LtPupYgvRAkJf7BEjQEwPduA2wHS14siREEaeteifleqFvTdVvJ4MNrASelUACb9K9k2IdeGc9Bgn67ucBTi9pOfLo3KlQDJN5paDAgb2lvVHDLyksaE5VlEZ9UBAr7wEjiXnNJa7QGCDfD0sFL3ewTnKsHXGmj_FuN37wir__Dr1_ijrnYmBP2b489EJsjfDWStqiybN7g6z2CHUh19uiU6RaSotu2nwBxzYNcTyXrqDBSTLojh3mdYfQjjCtqfJKXClCctr4iu4-rAhUpdGvRm3sIyXFgxBg9g4zH0MCySwP0aCJ_LgPymgC4HAuJrQU4PAVKsdBD_Y6NKiGMj313a98-PpRGzaS3UoEfGvcOO2V3mMXKemOyV2R0DGRPlRnmYbhEt_mPIwmyFKkLXldKvbI6jJsdyiy2jbA19huB8gXzRil2nCHBKXcSSz4CSq_1OqnqmLV_fxf7ZhRUBUUqkaIJ2Z11B0fpOdV_cevSAjbZZ15661jQVq89QVqMGARyhD1PquX76E9oZTF9TUmSDbjvZeFEFGncUWS4PEt1x52wAyu_hQ69CwHa-4MtGQLF5A9WKK4mUQH157LwabeS3XIX6poXCK41Qa-ckSBHQk55ML8rSwN5kerJB0VbRiy6ggjUT2h8Sc5RHpaBy1pDL2dhHVioNeHTeYd5B5Chsv3nJzCHigA0Yiyp-kqKYv0gjadud9bH_M0yd7etwv-6gTRW5gDb9rJfUqUqTNHf20WyLmStEa0w0KAo7RAJxzskjTSQlpVtj-PiWydZZoAjZMGSm_9Q_JiWbZsESRCcmuAv-HgVr8jgX1Fi2b5JrOIe9R2jeU6KYpLmWM6mPHN3fiS6Tsbg1zCwQz_rQBHJNwBBNStSI80U92vN9bJIaeRO9wHCzApPJShymHyPPKxs8QoxcDQIQSSKfnI_FotJK-zxtK1IW51Y93e2pKSX0czaFAUA6Hf-c_6gorLj_atC25Evb8Uc2FRshRr4labLV5_PiMpBTX6Vl9eSn21L460EgkxUxvC_mXWq2Zb7sWk1F6FK0wTmF7ASQ5EoHN6hrq8P6gcf-mVdOMFSIIaWpWnoqeAOt9C4BpnJb55jinjwzzWVS7d8VNbVLrUk9PuVYEpfAQtYstS9PHX0iZpxKrr51vwkZnK9bTm9otXhKZnnKRZsKLTCxRguvzYydYe3L9nLiythX-_eHwefsAIEC_3642gWX2TUnVkoivf6pPiYEMzQggeb-TnpZf27zvxze6RHpAjRVBK-ZtyICJNxB6i-qcrlkpp5CkndaEv7fox4F0WC1RRW_5JdkKKKMbVXod1fp-GPXNqqonOV6S6gmJtxers4KVFGjuPUpPQYdwOXXKrx3dhnlVYYPgim1dZtQJIOeeKhiQzKSHA0729JbLLfow-Ikp8ZD0bfJh2gbMK3u6RfthudNYX84altcUHDHI4OOJezpaJ5M3rj_7vnMwcrBrbeYpV_1FqLHdHTHrxIcIkYFpyhl2qmszcRVOM6TvOr7yF0k_reWw5ruiOgUmso3gJuRN3enQrQA53o5Gn9G9HWu_6-qrbA8BK1coP8ZOOUJ6T84E_KnK98M38e8Lh6J-DEFddmXzcD9svxLk-_cVnivuXjcUGRWpLIDkHi0wLdAwx84A05BbzL63YqwDTdsMFDa3SlcV-pXiHvcobkol6gc91sySp3xpBEDfS4BhXj2xIa8h8_R3dgbrRH5lW0AOhWMz10t7Sb-Nhqc.AbbRu7fd_zwtlaQrhMVFdA"
466
- },
467
- {
468
- "id": 3,
469
- "token": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..32BhWUtlg7cDFebD.pu75EHzoe6cKlw2VgQyMMQkUOUF0pVLuwCH1riYcqIKrMMjZxlPkLCEH5ViG1DpAVPgP69f2S6kEtPMlTOfvPgogFKhuH7VSDnUMOcSY6bE63OsCBTieW5M2iEzwzMX3RfVR-18xMcVuDH9wvPTuTSDFTNJO1pAPmaWWJvTc0Gc9OwfKpMxaepT7FLwLLBFoajptWl3GCBN82sVMDVQWddh-pOZ96USeeVaQAPdlgmJYeA1l0oDAH0MvFa7auQHRZWlr110VcFj5jQXAEXaCokt01FOPbME-QMiIJLqEF-8WT_xZt374zNB2XgANLODYryXEpcr6YSoa_icy7ihKe_CQK9EkkXQP9aaiXCFnjWBborlOuTCglo3_4Y9-elrK_70McgXsHmdmCh0VxBN5lbd5tiWAFJOOECM3bPMciRI6WEQfEYFEtBg_Q971VzGqRX70y0ndCMdAh34xSkbP2Fyr9pBBTJK6RRoSPMJMZHmKAVR5BmlOY8jtH6ookJsjWyiEt7cU7YQTbWfwqDxtT587o8E-eCvEPNauzJEGCQpM6atK3y_Ay836NJbAZE1vbnddU2ompwlniUYxEDRnD2nijTx6ACLqZXNW8DV_Nyg0No3jqEMLa16BpkVnWPBRaFBybznbrClUs-nJEI6xxzTCeoJ3RTm4l1cKwKNT-TpAz_cLbj8Ys7wPzN0kenE4ROacD0-C5982Gwicwba90vQOICVhGtvuvlbpnQrbbA2q6VmhKevM5R2NxOm98lNG8oSvj2NVICfQier5tJv8O0iOT02iCULSLbjLfzP8vrdRgdFM37jUPIVeKrzkRv3I9Iaisd8NpPPArMCiF9LgUxLQ5iAXpdznIsQG57JWhvQ1fP_YEXFBkaXsBb9L0i2aGoNdiZ7CMLI2-NMA1FZsWjvMESCkcnBMFtx-Y5t2njV-aBNpFsZjnPsazs1CsLU_ojpHrzto1DVDd4NSxffaah3Cg4zD_quZX1X2bdkBHDuCkhXXUIT9-VOM1h50zchAc2F3CR4MvCwSADwh-T5mwhjZ3o9qMRhmmP2mWXWYj8Nf4mDjk2G1p6W404DDnYEtby-XL1H637ozbX4gN9YaYlfge7h5xr9dzYdTXpkiB1V4MmlRRJ4WkCI9jJfWv3DQWASSISSvRrXRAQSKXKbWtN5GSH0q5FkYTwXmAxSJ0GZKn-QeMXcvnUg6dXf9luConTf7BiZA58VBRegXhHOtuFH0MncZaQE7kSf4G0Pcaf34ZgLIkNf2ABMN9qthmbhp_L4I1LVVcotlTQn5rq33hyvqEFWBkJhP6w2DXB8ETXShD--_GEU_6gLEtlNquG9m7f-9WgWIE0K9SHq5hnx3p9uaaVaYU0sLQRKhKEmPRH0R3bzz-hA7IAIMm-7v0R3SSfQy6rmURSs9TbuieYKBKAGI2hqSeQFpyKDyh7ISWNWXCmZF78Ay04eA_02HYL6-9DbVBt1B2wUSEbn3kfpTGRRQwZhv7hMrDYza0tb4uqL9nNk6-tXIfjXFoSKHvMccG3_DJkSj-KeQVWADmpaqqPOvy-t0wATxTyMu_Doiu75pD_8e3jvR3q3ssQy3skkzbuWDbNVzpHdge1Rext0HxtnJkcsGV3qsBXPonW33nIGMfenbSsra00NL9OWH3rpCcBXEbBpGCAL6EesEeGvSsr-a3uXSSbYwP29_jMGA8Zo3xYRxkF14LwnFsMz_xouWGTulKbHMAbvm2wRmhJztdV6tUxVR2dOrbkHNpX0x36cmebyJOaQ7QSu9x5e8D2JPL5jFLrWjbj2KB6QXZeEwXq7pJsoeHIWa_RMd6bAHy-loJO7W4LovhaHviouGv9zjAAQfahdkqbNXI78jN2nAeN4t-56ZsZ4TPk0KSRAwasBwU_QkbQA-8YWeNE39J5ueV_icFCovHEOGZOa1vjiexRRI_ASmf3QMxhhKp_hq69MDa4OFg-TXLmfOku_E6TV5hBCyFEwUCKdSI9-XH5aRXW_N5LUhguSaFl78PGQ7URtT57Ud3vSZp42QZviq2XKUSMbbHfRExBLwepwhQnYnteRRjoFa18FB3Jk8iI0sCTX4GqarSuYHygRxDFfLNQ_PbNDVeD33CDYwIgMx9M9W4cA4p3Ljoh8jLkh6a9yCuAYSJ_OBMtg3r-NEf-IINAdzqYNebakJiZz9fD9N1J6juEmSoU9wJsUHpaF-lyRDOlRe961wMwi6-GZOWjpu1oADl8sVZly5ZPjBtGXQ2UxC7LfboHutzhZXq24f9tMdVDzfSJ0zn7WGyjdFEW1LOBGb9TMkRDr92d2rKi0O1gxT7v6MQzs-dzjp_rZr8K8Tuq87i8qiOmi5Clb5qiurl9yIHWNFeFd3tmZadr7pIBusVwFde9zHhi2B-5dkA1viCeM7l-CsN0R13fYrALLBr1_i2ZjWohQFJuIHrQ_xHs0n597V4wc2oVavKECRC1CuGE0QZwKTASti5D9uwVOHYLUN1L5s1kWm-rV8-GlHRS_sFEADSCMYEqwZXeMli20zullwFLmCvobOEeH57AnlnaYKK9cEGk6D-P4HzDLKSDKbOo9RIUeTAvHK0qWglh22gyPSu54Iv39qrLPqCPEMnKKtUTgv4hDa6W_pXlgaxOQzO_z6GfycFw1JT1EfthkOZII6UAuKOI3S1D7WMpNYNzaSo4cISUH0pT9GNMc0Wrmr07Hbls2nOiOVRKNo3bQnmPpL03vcPRA6p5pyawE1gxdi5xk5aV36PmPIW4SLMziNx8niBnDs8Q8jacmfz8AndY5xyDYMRBRac6CCSUzETJgLQ_9eQXpXlL43pE8c3FaiKgmIHV74hm0dIjFAdwdhzPpeV-KjaeShuoebrjkzYV2J0j_1aAVEVricyE9axZZTYo-_b4Wx_eiWVsATPP1XS84sVdXIWUNZivxur2-RahQ9lmRtIIedWYyBQrUYUz-xMOe5Eof-mAf2m19ZB_zmuChh2PYRMZkUF7YPUAgPqP_jh9w.IzmdfFuM87ZPLhXrJf78kA"
470
- },
471
- {
472
- "id": 4,
473
- "token": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..ftDbAhM8JWxlmemg.9-NNo8-DX5b8FQM-GR_kvtL2mH08aqEDZ8pyCuU3VAadbpnbRXi_FK3Ff98vEnsK6Z_-WNl3MNEIhdaIwcAwY49pHSLoFlPu2Ph7PylcBhQQpjQ5FB-tO0UjzOAHCxIprryIqgZJLdiDHGxGBfE8TWUFfdRqn6ZiOrCd4Ad9LGA3_p-K75z_wqSmgsSXFNGhJzbLZOCp54ZderaGXFXQE6aow7rFQESZferkn9AyVf_3FQEIimnXnwJ9C-VvLM2cl7NLJW36y8XqBGMk03LH1QaTV3LHet7K9mg4oNCiCJ2OxHBRa4zV8tYvr4T8nun0iB6R5sm6E4XSdx2IYHTz7zjCT7jBgXjB1lvwL3PeYoaal9rJ1j87KRse35lkVYy16BDTYZUj0y-mwy8hW_vMAAUsdJYSxMSYY9Fq3j4X4VJyvrXPhC6Fo9wThFn4lnbhrPG3YaiSY4gdsGOSrMCIeDrOi1xFFHJ6WrYOtfI3ZsUSMAbGCgQi4G_1S_Hp3E0JTPwIDrzM0yPLjuASXi5POYYRI8LFpaSDi7xStYYppUwo66hMyjop9cbCOiLsfYnCqX59t8pZbjJOArqH12tybmSgmj1Pa86LAnevv_OxEqpOGL_RIqlW3CMElLQXS7Dk4VvXjBFhHpz2JQxFk4FUOpdeVJS0tsIUqwmfQwnHxOR-x19fJXNgs_-lFmFQ3vHebH0N7Xif9H-t8U918ceD_fAIj9-tmjTIfKhZ1tUxbd1yCvmN7cZw5ISBcn2iJ_3NqSs3sIORWCXxzeTQWZmm5F3Z1i5rUinZH2ryCPRBOMf4FpyopapkFcmTDywZ5GRe5fJWG3NpfXuVQGKc-0WbpEtMBaRLpcicqpYz3AhQLZUUHrBiMUs_J3381zt75lJZBhz4dKq3fjdA21CoyFsfrUIMYF8j5x11oUkdsQON3m8W8PRH67RA6HpzqUTLwlmr6IlEbuQub3PVRwEKJHW7ARfikUcRV6VYJJSuIv6s5poGnwRD3dlx-r9S1C96LqsDN9_I2Cf0SZNHyBgz8C4FzSoGThBeiAVnKPILCleJwQvCWMvlP9TgtuXU6SqYLU6Wu4zP282KhtZzdcOwLCKEbOsbI40_1vjdtY9Rgq_5e1XuvTQEsw_FDKKnsaRyT2_aT-av0RptSb0AG1ru6ldNVSQ-jZ0tbrkbZjVCQJfWOE2JGRl_kkyaQrkw0yCuK1_SSJRSJtJzHBGLA96DbwlIrY1_Cr39C8VMPjubwXBuZ7g_oyuIrkWJZg2VYSAK8blRGpmaPGV-xLsU3cnDJZcCogExb8wqhMziiFgF5lsWwuxRe6kkWicvM_VP-UmzTllNsKR4o7sIGhZBDF9nllQxQyYLh-XrXEJNfsXdzBE3TSB6Jg-1nHlk45bkdMuWcQ4oNNZHH36xCb-l65FL8kOT_bAnr4z1Lr9-i7xgn7Yh5WxTudnKbPrpUFWFDoodcQXydq3F8HQjYC3qvg7v77bChTnM9lT2xRdDV6i2BVFSBB8i7DZyoUAvqdsw98lHtFFnhP1Kw-BqsHPExSzVEgYmrzKy-UiBG0N4fGNCQYtWKZSTcLlcwnixgROkn_UXC_hbBrizF2YIotcgZVMkdKBw5SxjHkFTbJ3iDrMLiQ7f3esMlN2lNM9mhsJjPzYu-h4z2Jc11udeGlOcMOSjAhuLRuDcVm-dY-ePayYfg3wguhuOc0ZQusNHKIOIkdRoMWJly-zYKxrbIejITz85dNWcE6_cJkfiFXcBC7GZ6rIhDxAWQ8XGOmc1J6L4joLVQbEOCxl1D2uftc7FYBcDxTZbh8hQB1CqowTlvVFKeYn4u-fhc4stIw1v41wwKcVZlyH2CE7s3AJvB44ZLMdpICLx9CN_GsP8r04CNuHQOD9x5N0oTzqhWMHtmjYX2DeAsgv35B5pyrNfSdndTqUD9OFVXBmw6mjVME4efSM72zeR-PdcQWoc4htQr-WWvz4i9JZ53_Hlv2EWetsq5pUiLhcvu1OE2DL4Hy0bdUiDc8_DvKfnMY5hN4KXZUOoyrTQMKgdp8PjbbsCMUnjVT1Eo_TeTRzCoL8RuUhn7RUD3HGnf6d9cQb2WutLQB4yPE_1CEUtsUdNewqhBGXxQsWcObpAM-AQyFiXrOOAoJADnCfMRT1nWAbvM2zRuz3Wp9v_zPQCOrlh-GbCpjpc-GrOfVr1CNkp8An5h1-9cy1A6iBnOZFukVKshFzPWobDvauvcStvYR4ydcrYVeo5Ra-glYPi2WWbw-lR4IOQe-iCLWbriIGPFKzOOALvd05l9HsCIJElPl55yg8SRy6iqSrw2WIsrU-Q9iHsn1W-51Q3RGzM3UrolL8-w_jKBNBlYXYDzQ4u8tDaWnv6xYfB8bZhDqIqWVeBM1JoTCPYD-YZCZRnQbeKJ9g7Z1-gztO_stS-fJ1nNS8ClMqRpGBwoUJCB9XvtqRvP5Qz1bpR4q-WtixUGUCtkLHAsuFuCOSewdATYglHKUWHnX87y_V5JUi0otGH0kX7oSzqRAwJ252lcsTZe7QJmJe2caR7yywZoQztO80nMMAufMdtQiEJ5ZKtaMXvA72Qxy1z5JT72bUaXCRE0RC79iU6GxtM9179dZ-5giRpXFb6DD1zChXOH9yEs-uuZ5r0JzbCwudZYNK75KK7mSW9zS970CriqTC0VFvCv1IW-hwIH3tEfXZNtS0EBo1t5YsIxSHOQyiF2V3azYulSlvqfuxQp9j1bKNR7AHYJZpAkIodmK2sRfDBvtsV0eHl0ZpSaMo6ItbDzoQzi7OvrExAII3WzdsKGJfjkaANrYPM6yIMlXqKVMBRtZ-TqOGejhULyYVDE9crxjHJbNzCL-I7yP5IXCImAUmcBJlL9WYjomwzXCVZwet8wLC217ooxogfPWe-iQuBM2ypCkDh3OH31-G6Bk3pi0M06UKHHFlHIPhVUevx5OkpNQ.iFCbDBfR2651LNRkulvNMA"
474
- }
475
- ],
476
-
477
- workers: [
478
- 'https://createaudio.conmeomatreocaycau.workers.dev',
479
- 'https://createaudio.conbomaydidauthe.workers.dev',
480
- 'https://createaudio.conkhinodanglamgi.workers.dev',
481
- 'https://createaudio.ongioicaudayroi.workers.dev',
482
- 'https://createaudio.haiquanbodoi.workers.dev',
483
- 'https://createaudio.thanglongtrungtam.workers.dev',
484
- 'https://createaudio.maybaxonxon.workers.dev',
485
- 'https://createaudio.dihoccalithoi.workers.dev',
486
- 'https://createaudio.phieulumao.workers.dev'
487
- ],
488
- paragraphs: [
489
- {
490
- 'id': 1,
491
- 'content': `Chương 333: Hợp tác nhóm, tuyệt vời.
492
-
493
- Nguồn Truyện: Truyện Fox chấm net.
494
-
495
- Hầu Dương Đức không chỉ quay lại một mình, trong tay hắn còn cầm một chiếc chậu.
496
-
497
- Trong chiếc chậu này có rất nhiều chất lỏng màu vàng, thậm chí còn bốc lên từng đợt hơi nóng.
498
-
499
- Hầu Dương Đức đi qua chỗ nào, mọi người đều sợ hãi lùi lại vài bước, sợ dính vào chất lỏng màu vàng đó.
500
-
501
- Mọi người đều là con người, chỉ cần ngửi thấy mùi hôi thối của chất lỏng bốc ra, cũng biết trong chậu này đựng cái gì!
502
-
503
- Tốt lắm, rất tuyệt vời a.
504
-
505
- Sĩ quan quân đội cầm một chậu này để làm gì?
506
-
507
- Lúc này, Hầu Dương Đức cũng đỏ bừng mặt, trong lòng hắn hối hận không thôi.
508
-
509
- Vừa rồi trong lúc nóng giận, nghe theo cách của đại lão "Nhai Tí" nên hắn đã đồng ý.
510
-
511
- Bây giờ muốn hối hận cũng không kịp, hoàn toàn là tiến thoái lưỡng nan.
512
-
513
- Chỉ có thể mong rằng chuyện này thực sự có thể thành công như lời đại lão "Nhai Tí" nói!
514
-
515
- Nghĩ như vậy, hắn cũng lao thẳng về phía trước.
516
-
517
- Còn hiện tại, cuộc đối đầu giữa quân đội và nhà họ Lý vẫn tiếp tục.
518
-
519
- Phá Quân và Lý Nhất đã đứng ở hàng đầu tiên, cả hai đều im lặng, đều cố gắng dùng khí thế để áp đảo đối phương.
520
-
521
- Còn những người tranh cãi khác thì cũng đang đấu khẩu với nhau, không ai để ý đến Hầu Dương Đức đã đột phá đám đông, bắt đầu bưng chậu xông về phía này.
522
-
523
- Hầu Dương Đức cứ như vậy, không quan tâm đến điều gì, giữ cho bộ não trống rỗng.
524
-
525
- Dù sao thì cứ theo hướng mà đại lão "Nhai Tí" đã vạch ra trước đó mà xông lên là được.
526
-
527
- Đúng lúc hắn xông ra khỏi vòng vây của quân đội thì đột nhiên cảm thấy mình dẫm phải một hòn đá không nhỏ.
528
-
529
- Hòn đá này được đặt ở một vị trí rất khó xử, sau khi tiếp xúc với trạng thái xông lên của Hầu Dương Đức, nó đã trực tiếp thay đổi quỹ đạo chuyển động của hắn.
530
-
531
- Khiến hắn vô tình ngã ra ngoài.
532
-
533
- Ngã thì không sao, chậu trong tay Hầu Dương Đức trực tiếp văng ra khỏi tay.
534
-
535
- Chất lỏng màu vàng trong chậu trực tiếp hắt về phía người nhà họ Lý.
536
-
537
- Lý Nhất quả nhiên là một cường giả một thời, chỉ trong chớp mắt đã phản ứng lại, quay người bỏ chạy.
538
-
539
- Nhưng những người nhà họ Lý đứng ở phía trước thì không may mắn như vậy.
540
-
541
- Họ đều đang toàn tâm toàn ý đối đầu, làm sao có thể để ý đến chất lỏng màu vàng bất ngờ ập đến?
542
-
543
- Bây giờ thì thôi toi cơm.
544
-
545
- Chất lỏng màu vàng từ trên trời giáng xuống, đổ ập vào người hơn mười người nhà họ Lý đang đứng ở phía trước.
546
-
547
- Hơn nữa, còn có khá nhiều người đang há miệng, trong miệng còn đang chế giễu.
548
-
549
- Chất lỏng màu vàng đó trực tiếp theo miệng họ phun vào.
550
-
551
- "Hít ... hà. Phê!"
552
-
553
- Tất cả những người chứng kiến ​​đều không kìm được hít vào một hơi.
554
-
555
- Ngay cả Phá Quân cũng không nhịn được mà toàn thân run lên.
556
-
557
- Kiểu sỉ nhục này!
558
-
559
- Đơn giản là không thể tin được!
560
-
561
- Nhưng ngay giây sau, Phá Quân lại bắt đầu lo lắng cho Hầu Dương Đức.
562
-
563
- Làm ra hành vi sỉ nhục người như vậy, liệu có bị sét đánh không a?
564
-
565
- Câu trả lời đương nhiên là: không có.
566
-
567
- Hầu Dương Đức ngã trên mặt đất, mặt ngơ ngác, đứng im tại chỗ, chỉ ôm chân mình, xoa bóp chỗ bị thương.
568
-
569
- Nhưng chắc chắn người nhà họ Lý sẽ không bình tĩnh như vậy.`
570
- }
571
 
572
- ]
573
- };
 
574
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
575
 
 
576
 
577
- var keyCode = 0;
578
 
579
- utils.log("CHATPGT handle :>> ");
 
580
 
581
- try {
582
- // CONFIGURATION
583
- var {
584
- getSessionUrl
585
- } = CHATGPT;
586
 
587
- // Open the browser window with the maximum size
588
- //await driver.manage().window().maximize();
589
 
590
- let url = CHATGPT.getSessionUrl;
591
 
592
- await browser.accessSite(driver, url);
593
 
594
- //await utils.sleep(5000)
 
 
595
 
596
- //let sessionToken = 'eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..ftDbAhM8JWxlmemg.9-NNo8-DX5b8FQM-GR_kvtL2mH08aqEDZ8pyCuU3VAadbpnbRXi_FK3Ff98vEnsK6Z_-WNl3MNEIhdaIwcAwY49pHSLoFlPu2Ph7PylcBhQQpjQ5FB-tO0UjzOAHCxIprryIqgZJLdiDHGxGBfE8TWUFfdRqn6ZiOrCd4Ad9LGA3_p-K75z_wqSmgsSXFNGhJzbLZOCp54ZderaGXFXQE6aow7rFQESZferkn9AyVf_3FQEIimnXnwJ9C-VvLM2cl7NLJW36y8XqBGMk03LH1QaTV3LHet7K9mg4oNCiCJ2OxHBRa4zV8tYvr4T8nun0iB6R5sm6E4XSdx2IYHTz7zjCT7jBgXjB1lvwL3PeYoaal9rJ1j87KRse35lkVYy16BDTYZUj0y-mwy8hW_vMAAUsdJYSxMSYY9Fq3j4X4VJyvrXPhC6Fo9wThFn4lnbhrPG3YaiSY4gdsGOSrMCIeDrOi1xFFHJ6WrYOtfI3ZsUSMAbGCgQi4G_1S_Hp3E0JTPwIDrzM0yPLjuASXi5POYYRI8LFpaSDi7xStYYppUwo66hMyjop9cbCOiLsfYnCqX59t8pZbjJOArqH12tybmSgmj1Pa86LAnevv_OxEqpOGL_RIqlW3CMElLQXS7Dk4VvXjBFhHpz2JQxFk4FUOpdeVJS0tsIUqwmfQwnHxOR-x19fJXNgs_-lFmFQ3vHebH0N7Xif9H-t8U918ceD_fAIj9-tmjTIfKhZ1tUxbd1yCvmN7cZw5ISBcn2iJ_3NqSs3sIORWCXxzeTQWZmm5F3Z1i5rUinZH2ryCPRBOMf4FpyopapkFcmTDywZ5GRe5fJWG3NpfXuVQGKc-0WbpEtMBaRLpcicqpYz3AhQLZUUHrBiMUs_J3381zt75lJZBhz4dKq3fjdA21CoyFsfrUIMYF8j5x11oUkdsQON3m8W8PRH67RA6HpzqUTLwlmr6IlEbuQub3PVRwEKJHW7ARfikUcRV6VYJJSuIv6s5poGnwRD3dlx-r9S1C96LqsDN9_I2Cf0SZNHyBgz8C4FzSoGThBeiAVnKPILCleJwQvCWMvlP9TgtuXU6SqYLU6Wu4zP282KhtZzdcOwLCKEbOsbI40_1vjdtY9Rgq_5e1XuvTQEsw_FDKKnsaRyT2_aT-av0RptSb0AG1ru6ldNVSQ-jZ0tbrkbZjVCQJfWOE2JGRl_kkyaQrkw0yCuK1_SSJRSJtJzHBGLA96DbwlIrY1_Cr39C8VMPjubwXBuZ7g_oyuIrkWJZg2VYSAK8blRGpmaPGV-xLsU3cnDJZcCogExb8wqhMziiFgF5lsWwuxRe6kkWicvM_VP-UmzTllNsKR4o7sIGhZBDF9nllQxQyYLh-XrXEJNfsXdzBE3TSB6Jg-1nHlk45bkdMuWcQ4oNNZHH36xCb-l65FL8kOT_bAnr4z1Lr9-i7xgn7Yh5WxTudnKbPrpUFWFDoodcQXydq3F8HQjYC3qvg7v77bChTnM9lT2xRdDV6i2BVFSBB8i7DZyoUAvqdsw98lHtFFnhP1Kw-BqsHPExSzVEgYmrzKy-UiBG0N4fGNCQYtWKZSTcLlcwnixgROkn_UXC_hbBrizF2YIotcgZVMkdKBw5SxjHkFTbJ3iDrMLiQ7f3esMlN2lNM9mhsJjPzYu-h4z2Jc11udeGlOcMOSjAhuLRuDcVm-dY-ePayYfg3wguhuOc0ZQusNHKIOIkdRoMWJly-zYKxrbIejITz85dNWcE6_cJkfiFXcBC7GZ6rIhDxAWQ8XGOmc1J6L4joLVQbEOCxl1D2uftc7FYBcDxTZbh8hQB1CqowTlvVFKeYn4u-fhc4stIw1v41wwKcVZlyH2CE7s3AJvB44ZLMdpICLx9CN_GsP8r04CNuHQOD9x5N0oTzqhWMHtmjYX2DeAsgv35B5pyrNfSdndTqUD9OFVXBmw6mjVME4efSM72zeR-PdcQWoc4htQr-WWvz4i9JZ53_Hlv2EWetsq5pUiLhcvu1OE2DL4Hy0bdUiDc8_DvKfnMY5hN4KXZUOoyrTQMKgdp8PjbbsCMUnjVT1Eo_TeTRzCoL8RuUhn7RUD3HGnf6d9cQb2WutLQB4yPE_1CEUtsUdNewqhBGXxQsWcObpAM-AQyFiXrOOAoJADnCfMRT1nWAbvM2zRuz3Wp9v_zPQCOrlh-GbCpjpc-GrOfVr1CNkp8An5h1-9cy1A6iBnOZFukVKshFzPWobDvauvcStvYR4ydcrYVeo5Ra-glYPi2WWbw-lR4IOQe-iCLWbriIGPFKzOOALvd05l9HsCIJElPl55yg8SRy6iqSrw2WIsrU-Q9iHsn1W-51Q3RGzM3UrolL8-w_jKBNBlYXYDzQ4u8tDaWnv6xYfB8bZhDqIqWVeBM1JoTCPYD-YZCZRnQbeKJ9g7Z1-gztO_stS-fJ1nNS8ClMqRpGBwoUJCB9XvtqRvP5Qz1bpR4q-WtixUGUCtkLHAsuFuCOSewdATYglHKUWHnX87y_V5JUi0otGH0kX7oSzqRAwJ252lcsTZe7QJmJe2caR7yywZoQztO80nMMAufMdtQiEJ5ZKtaMXvA72Qxy1z5JT72bUaXCRE0RC79iU6GxtM9179dZ-5giRpXFb6DD1zChXOH9yEs-uuZ5r0JzbCwudZYNK75KK7mSW9zS970CriqTC0VFvCv1IW-hwIH3tEfXZNtS0EBo1t5YsIxSHOQyiF2V3azYulSlvqfuxQp9j1bKNR7AHYJZpAkIodmK2sRfDBvtsV0eHl0ZpSaMo6ItbDzoQzi7OvrExAII3WzdsKGJfjkaANrYPM6yIMlXqKVMBRtZ-TqOGejhULyYVDE9crxjHJbNzCL-I7yP5IXCImAUmcBJlL9WYjomwzXCVZwet8wLC217ooxogfPWe-iQuBM2ypCkDh3OH31-G6Bk3pi0M06UKHHFlHIPhVUevx5OkpNQ.iFCbDBfR2651LNRkulvNMA';
597
 
598
- /*
599
- let newAccountTokens = [];
600
- let bearTokens = [];
601
 
602
 
603
- for (accountToken of myparrams.sessionTokens) {
 
 
 
 
 
 
 
 
 
 
604
 
 
 
 
605
 
606
- let importantData = await getBearerToken(driver, accountToken.token);
607
 
608
- let newCookie = importantData.newcookie;
 
 
609
 
610
- let bearerToken = importantData.responseData.accessToken;
611
 
612
- let isError = importantData.responseData.hasOwnProperty('error') && importantData.responseData.error !== undefined;
613
 
614
- newAccountTokens.push({ id: accountToken.id, token: newCookie, isError: isError });
615
 
616
- if (!isError) {
617
- bearTokens.push(bearerToken);
618
- }
619
 
620
- }
621
- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
622
 
623
- let bearTokens = [
624
- "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik1UaEVOVUpHTkVNMVFURTRNMEZCTWpkQ05UZzVNRFUxUlRVd1FVSkRNRU13UmtGRVFrRXpSZyJ9.eyJodHRwczovL2FwaS5vcGVuYWkuY29tL3Byb2ZpbGUiOnsiZW1haWwiOiJhZG1pbkBiYW1odXlldHhvYWJvcC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZX0sImh0dHBzOi8vYXBpLm9wZW5haS5jb20vYXV0aCI6eyJwb2lkIjoib3JnLVJpV051SWJlRDRwMVRhR2VOa1ZqNHFYNyIsInVzZXJfaWQiOiJ1c2VyLWNZRzZwZW1ZT3hCaFNIc04xak5reTVkeCJ9LCJwd2RfYXV0aF90aW1lIjoxNzEzNzI2NTY5NjY1LCJpc3MiOiJodHRwczovL2F1dGgwLm9wZW5haS5jb20vIiwic3ViIjoiYXV0aDB8NjVkYjc2MDljMDgxMWFhZDJjNTQwYjA4IiwiYXVkIjpbImh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEiLCJodHRwczovL29wZW5haS5vcGVuYWkuYXV0aDBhcHAuY29tL3VzZXJpbmZvIl0sImlhdCI6MTcxMzcyNjU3MSwiZXhwIjoxNzE0NTkwNTcxLCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIG1vZGVsLnJlYWQgbW9kZWwucmVxdWVzdCBvcmdhbml6YXRpb24ucmVhZCBvcmdhbml6YXRpb24ud3JpdGUgb2ZmbGluZV9hY2Nlc3MiLCJhenAiOiJUZEpJY2JlMTZXb1RIdE45NW55eXdoNUU0eU9vNkl0RyJ9.IDDPe7_dyk_9iXdH4DBExny4lFEQ7Y9BkkyZM2lT559KaslKZxTVy5GbuwasXks4e6sH3xG9P8nlb9f7qpSad-_dZwL3u_fpDXkMIuniiV3lf2fBr2WjQwUy-phMuevbUeECNmYGKwSkfET1WL_xwvMgh_-ZE2rxHkmNA9eUkgQDyk-fj91RM46-leAzM_powMf1uuqpyNTRQVrBOX3c-UeDxzXJXj3FLwgjLDn8oowwdRlz3MkwH-h0MPnVLX3eF0iaPf3HMO-MzWZLO651fmzHHAjziKM_05DfILW-wSSvtSUGAmUt8-ALmeSFNcM0bZKKylXvcYTMOFUsBVpWbQ"
625
- ];
626
 
627
- //Send updateSessionToken
 
 
 
628
 
 
629
 
 
 
630
 
631
- //get all conversations
632
- let allConversations = await getAllConversations(driver, bearTokens[0]);
633
- let conversationId;
 
634
 
635
- if (allConversations.length > 0) {
636
- conversationId = allConversations[0].id
637
- }
638
- else {
639
- do {
640
- let requireToken = await getRequirementToken(driver, bearTokens[0])
641
-
642
- let fakeMessage = [
643
- {
644
- "id": "aaa24123-607c-48b2-9f0b-ee6ce7a141b3",
645
- "author": {
646
- "role": "assistant"
647
- },
648
- "content": {
649
- "content_type": "text",
650
- "parts": ["Repeat after me", "Hello Handsome Boy"]
651
- },
652
- "metadata": {}
653
  }
654
- ]
655
 
656
- conversationId = await postConversation(driver, fakeMessage, bearTokens[0], requireToken);
 
 
 
 
657
 
658
- if (!conversationId || conversationId === '') {
659
-
660
- await utils. sleep(1000)
661
- }
662
 
663
- } while (!conversationId || conversationId === '');
664
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
665
 
 
666
 
667
- //Post Message
668
-
669
- let randomUUID;
670
-
671
- let messages = [];
672
- let messageIDs = [];
673
- for (paragraph of myparrams.paragraphs) {
674
-
675
- randomUUID = uuidv4();
676
-
677
-
678
-
679
- let message = {
680
- "id": randomUUID,
681
- "author": {
682
- "role": "assistant"
683
- },
684
- "content": {
685
- "content_type": "text",
686
- "parts": [paragraph.content.replace(/\n/g, "\\n").replace(/"/g, '\\\"')]
687
- },
688
- "metadata": {}
689
  }
690
-
691
- messages.push(message);
692
- messageIDs.push(randomUUID);
693
  }
694
-
695
- console.log('conversationId', conversationId)
696
- //console.log('messages', JSON.stringify(messages))
697
-
698
- do {
699
-
700
-
701
- let requireToken = await getRequirementToken(driver, bearTokens[0]);
702
-
703
- let selectedConversationId = conversationId;
704
-
705
- conversationId = await postConversation(driver, messages, bearTokens[0], requireToken, selectedConversationId);
706
-
707
- if (!conversationId || conversationId === '') {
708
-
709
- await utils. sleep(1000)
710
- }
711
 
712
- } while (!conversationId || conversationId === '');
 
713
 
714
- console.log('conversationId', conversationId);
715
-
716
-
717
- let voices = ['cove', 'ember', 'juniper', 'sky', 'breeze', '__internal_only_shimmer', '__internal_only_santa'];
718
-
719
- // Call the function
720
- var result = await downloadAll(driver, "decfe93d-8df7-446f-a31c-3b85a21ae69e", "27217df8-1963-4014-98e3-9ce94a654012",voices, bearTokens);
721
-
722
- if (result) {
723
- console.log("Return values:", audioList);
724
- }
725
  } catch (error) {
726
  utils.log("Error CHATGPT:", error);
727
  } finally {
728
- await takeScreenShot(driver, '12.1.2.2')
729
- // await browser.quit(driver, keyCode)
730
  }
731
  },
732
  };
 
1
 
2
  const utils = require("../Helpers/utils");
 
 
 
 
 
 
 
 
 
 
3
  const { v4: uuidv4 } = require('uuid');
4
+ const fse = require('fs-extra')
5
+ const ChatGpt = require("../Service/ChatGpt");
6
+ const { GenerationParam } = require("../Types/GenerationParam");
7
+ const path = require("path");
8
+ const { timeStamp } = require("console");
9
+ require("dotenv").config();
10
 
11
  var service = (function () {
12
  // instance stores a reference to the Singleton
13
  var instance;
14
 
15
  function createInstance() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
+ return {
18
+ /**
19
+ * @param {GenerationParam} params
20
+ */
21
+ handle: async (params) => {
22
+ // params = JSON.parse(fse.readFileSync(path.resolve('chatgpt.json')))
23
 
24
+ const chatGpt = new ChatGpt(params)
25
+ utils.log("CHATPGT handle by Puppeteer :>> ");
26
 
27
+ try {
28
+ // Open the browser window with the maximum size
29
+ await chatGpt.accessSite()
30
+ let newAccountTokens = [];
31
+ let bearTokens = [];
32
 
 
33
 
34
+ for (let accountToken of params.sessionTokens) {
35
 
36
+ let importantData = await chatGpt.getBearerToken(accountToken.session);
37
 
38
+ let newCookie = importantData.newcookie;
39
 
40
+ let bearerToken = importantData.responseData.accessToken;
41
 
42
+ let isError = importantData.responseData.hasOwnProperty('error') && importantData.responseData.error !== undefined;
43
 
44
+ newAccountTokens.push({
45
+ id: accountToken.id,
46
+ session: newCookie,
47
+ message: "",
48
+ status: isError ? "0" : "1" // "0": NOT_GOOD, "1": GOOD
49
+ });
 
 
 
50
 
51
+ if (!isError) {
52
+ bearTokens.push(bearerToken);
53
+ }
54
 
55
+ }
56
 
57
+ //Send updateSessionToken (Report new Token, die ...)
58
+ console.log('update session token:>> ');
59
+ await chatGpt.updateSessionToken(newAccountTokens)
60
 
 
 
 
61
 
62
+ let finishTaskBody = {
63
+ note: "Test",
64
+ status: "1"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
66
 
67
+ //Case: all sessions got error
68
+ if (!bearTokens.length) {
69
+ console.log('All sessions are error.');
70
+ let file_ids = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
 
72
+ for (paragraph of params.paragraphs){
73
+ file_ids.push(paragraph.id)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  }
75
 
76
+ finishTaskBody.file_ids = file_ids;
77
+
78
+
79
+ }
80
+ else {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
 
82
+ //get all conversations
83
+ let allConversations = await chatGpt.getAllConversations(bearTokens[0]);
84
+ let conversationId;
85
 
86
+ if (allConversations.length > 0) {
87
+ conversationId = allConversations[0].id
88
+ }
89
+ else {
90
+ do {
91
+ let requireToken = await chatGpt.getRequirementToken(bearTokens[0]);
92
+
93
+ let fakeMessage = [
94
+ {
95
+ "id": "aaa24123-607c-48b2-9f0b-ee6ce7a141b3",
96
+ "author": {
97
+ "role": "assistant"
98
+ },
99
+ "content": {
100
+ "content_type": "text",
101
+ "parts": ["Repeat after me", "Hello Handsome Boy"]
102
+ },
103
+ "metadata": {}
104
+ }
105
+ ]
106
 
107
+ conversationId = await chatGpt.postConversation(fakeMessage, bearTokens[0], requireToken);
108
 
109
+ if (!conversationId || conversationId === '' || conversationId === null) {
110
 
111
+ await utils.sleep(1000)
112
+ }
113
 
114
+ } while (!conversationId || conversationId === '' || conversationId === null);
115
+ }
 
 
 
116
 
 
 
117
 
118
+ //Post Message
119
 
120
+ let randomUUID;
121
 
122
+ let messages = [];
123
+ let messageChatGPTs = [];
124
+ for (paragraph of params.paragraphs) {
125
 
126
+ randomUUID = uuidv4();
127
 
 
 
 
128
 
129
 
130
+ let message = {
131
+ "id": randomUUID,
132
+ "author": {
133
+ "role": "assistant"
134
+ },
135
+ "content": {
136
+ "content_type": "text",
137
+ "parts": [paragraph.content.replace(/\n/g, "\\n").replace(/"/g, '\\\"')]
138
+ },
139
+ "metadata": {}
140
+ }
141
 
142
+ messages.push(message);
143
+ messageChatGPTs.push({contentID: paragraph.id, messId: randomUUID});
144
+ }
145
 
146
+ console.log('selected conversationId', conversationId)
147
 
148
+ //POST to ChatGPT, GEN AUdio
149
+ do {
150
+ let requireToken = await chatGpt.getRequirementToken(bearTokens[0]);
151
 
152
+ let selectedConversationId = conversationId;
153
 
154
+ conversationId = await chatGpt.postConversation(messages, bearTokens[0], requireToken, selectedConversationId);
155
 
156
+ if (!conversationId || conversationId === '' || conversationId === null) {
157
 
158
+ await utils.sleep(1000)
159
+ }
 
160
 
161
+ } while (!conversationId || conversationId === '' || conversationId === null);
162
+
163
+ console.log('conversationId', conversationId);
164
+ // return
165
+
166
+ for (let messageChatGPT of messageChatGPTs) {
167
+
168
+ // Call the function
169
+ //var result = await downloadAll(driver, "decfe93d-8df7-446f-a31c-3b85a21ae69e", "27217df8-1963-4014-98e3-9ce94a654012", voices, bearTokens);
170
+
171
+ var result = await chatGpt.downloadAll(messageChatGPT.messId, conversationId, params.voices, bearTokens);
172
+
173
+ if (result) {
174
+ console.log("Starting uploading to telegram");
175
+
176
+ let currentTelegramIndex = 0
177
+ let currentWorkerIndex = 0
178
+ for (let audio of chatGpt.audioList) {
179
+ let fileData = audio.audio;
180
+ let voice = audio.voice;
181
+ let voice_id = voice.voice_id;
182
+ let voice_slug = voice.voice_slug;
183
+ let getTelegram = chatGpt.getTelegrams(currentTelegramIndex)
184
+ let getWorker = chatGpt.getWorkers(currentWorkerIndex)
185
+
186
+ if (getWorker.worker && getTelegram.telegramBot) {
187
+ chatGpt.uploadToTelegramViaWorker(getWorker.worker.id, getWorker.worker.url,
188
+ fileData, getTelegram.telegramBot.chatID, getTelegram.telegramBot.TELEGRAM_BOT_TOKEN, voice_id, voice_slug);
189
+
190
+ //save audio to file for testing.
191
+ // await chatGpt.saveAudioToFile(messageChatGPT.contentID, voice_slug, fileData);
192
+
193
+ // handling index
194
+ if (getTelegram.resetIndex) {
195
+ currentTelegramIndex = 1
196
+ } else {
197
+ currentTelegramIndex++
198
+ }
199
+ if (getWorker.resetIndex) {
200
+ currentWorkerIndex = 1
201
+ } else {
202
+ currentWorkerIndex++
203
+ }
204
+ }
205
 
206
+ chatGpt.getWorkerStack().set(voice_slug, true);
207
+ }
 
208
 
209
+ //Chờ tới khi toàn bộ upload xong
210
+ while (chatGpt.getWorkerStack().size > 0) {
211
+ console.log('Chờ đợi là hạnh phúc.')
212
+ await utils.sleep(2000);
213
 
214
+ }
215
 
216
+ //send success report
217
+ console.log('Upload telegram completed. Sending report.');
218
 
219
+ let bodyReport = {
220
+ "id": messageChatGPT.contentID,
221
+ "node_name": process.env.NODE_NAME,
222
+ }
223
 
224
+ if (chatGpt.getWorkerResultList().length) {
225
+ bodyReport.audios = chatGpt.getWorkerResultList()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
226
  }
 
227
 
228
+ let randomFileName = ''
229
+ let errorCOUNT = chatGpt.getWorkerErrorList().length;
230
+ if (errorCOUNT > 0) {
231
+ //send FAILED report
232
+ console.log('Sending FAILED report.');
233
 
234
+ let errorReport = {
235
+ "id": messageChatGPT.contentID,
236
+ "errors": chatGpt.getWorkerErrorList()
237
+ }
238
 
239
+ randomFileName = uuidv4() + ".json";
240
+
241
+ let errorFilePath = path.resolve('storage', 'errorTasks', `${randomFileName}`)
242
+ utils.saveStringToFile(errorFilePath, JSON.stringify(errorReport, null, 2))
243
+
244
+ /* Example json file
245
+ {
246
+ "id": 1,
247
+ "errors": [
248
+ {
249
+ voice_id: voice_id,
250
+ voice_slug: voice_slug,
251
+ fileData: [65,65,66,67,68],
252
+ chatID: chatID,
253
+ TELEGRAM_BOT_TOKEN: TELEGRAM_BOT_TOKEN
254
+ },
255
+ {
256
+ voice_id: voice_id,
257
+ voice_slug: voice_slug,
258
+ fileData: [65,65,66,67,68],
259
+ chatID: chatID,
260
+ TELEGRAM_BOT_TOKEN: TELEGRAM_BOT_TOKEN
261
+ }
262
+ ]
263
+ }
264
+ */
265
 
266
+ }
267
 
268
+ if (randomFileName) {
269
+ bodyReport.error_file = randomFileName
270
+ }
271
+ await chatGpt.sendAudioReport(bodyReport)
272
+ }
273
+ chatGpt.resetAudioList();
274
+ chatGpt.resetAudioStack();
275
+ chatGpt.resetWorkerStack();
276
+ chatGpt.resetWorkerResultList();
277
+ chatGpt.resetWorkerErrorList();
 
 
 
 
 
 
 
 
 
 
 
 
278
  }
 
 
 
279
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
 
281
+ //release BOT for next TASK.
282
+ await chatGpt.sendFinishTask(finishTaskBody, process.env.NODE_NAME)
283
 
 
 
 
 
 
 
 
 
 
 
 
284
  } catch (error) {
285
  utils.log("Error CHATGPT:", error);
286
  } finally {
 
 
287
  }
288
  },
289
  };
source/Scenario/chatGPT_selenium.js ADDED
@@ -0,0 +1,808 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ const utils = require("../Helpers/utils");
3
+ const browser = require("../Helpers/browser");
4
+ const fse = require("fs-extra");
5
+ const path = require("path");
6
+ const { randomInt } = require("crypto");
7
+ var moment = require("moment"); // require
8
+ const { v4: uuidv4 } = require('uuid');
9
+
10
+ const CHATGPT = JSON.parse(
11
+ fse.readFileSync(path.resolve("config", "chatgpt.json"))
12
+ );
13
+
14
+
15
+ var service = (function () {
16
+ // instance stores a reference to the Singleton
17
+ var instance;
18
+
19
+ function createInstance() {
20
+ var audioStack = new Map()
21
+ var audioList = []
22
+
23
+ // private variables and methods
24
+ async function takeScreenShot(driver, ip) {
25
+ try {
26
+ // Capture a screenshot of the current page
27
+ const screenshot = await driver.takeScreenshot({
28
+ format: "webp",
29
+ quality: 10,
30
+ });
31
+ // Save the screenshot to a file
32
+ var now = moment().tz("Asia/Bangkok");
33
+ const screenshotsDir = path.join(
34
+ process.cwd(),
35
+ "storage",
36
+ "screenshots",
37
+ ip,
38
+ now.format("YYYY_MM_DD").toString()
39
+ );
40
+ if (!fse.existsSync(screenshotsDir)) {
41
+ fse.mkdirSync(screenshotsDir, { recursive: true });
42
+ }
43
+ var rand = randomInt(1000);
44
+ var fileName = `${now
45
+ .format("HH_mm_ss")
46
+ .toString()}_${rand}.webp`;
47
+ fse.writeFileSync(
48
+ path.join(screenshotsDir, fileName),
49
+ screenshot,
50
+ "base64"
51
+ );
52
+ utils.log("Screenshot saved to " + fileName);
53
+ return path.join(screenshotsDir, fileName);
54
+ } catch (error) {
55
+ utils.log("Error taking screenshot:", error);
56
+ }
57
+ return "";
58
+ }
59
+
60
+ async function convertErrorToResult(error, customMessage) {
61
+
62
+ let errorCode = error.response ? error.response.status : 'unknown';
63
+
64
+ let errorMessage = `${customMessage}. ErrorCode: ${errorCode} ${error.message}`;
65
+
66
+ if (errorCode === 'unknown') {
67
+ errorCode = 500;
68
+ }
69
+
70
+ let result = {
71
+ status: errorCode,
72
+ data: {
73
+ result: "Failed",
74
+ message: errorMessage
75
+ }
76
+ };
77
+
78
+ return result;
79
+ }
80
+
81
+ async function uploadToTelegramViaWorker(workerURL, fileDataArray, chatID, TELEGRAM_BOT_TOKEN) {
82
+ // Dynamic import statement inside the async function
83
+ const fetch = await import('node-fetch');
84
+
85
+ let url = workerURL + '/uploadBufferToTele';
86
+
87
+ // Ví dụ về cách sử dụng hàm chuyển đổi
88
+ //const fileDataArray = arrayBufferToUInt8Array(fileData);
89
+
90
+ let result;
91
+ let response;
92
+
93
+ try {
94
+
95
+ const body = {
96
+ fileData: fileDataArray,
97
+ chatID: chatID,
98
+ TELEGRAM_BOT_TOKEN: TELEGRAM_BOT_TOKEN
99
+ }
100
+
101
+ let options = {
102
+ method: 'POST',
103
+ headers: {
104
+ // Add additional headers if necessary
105
+ "User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
106
+ "Accept": "*/*",
107
+ "Content-Type": "application/json"
108
+ },
109
+ redirect: 'follow',
110
+ // For an empty body, set the body option to an empty object
111
+ body: JSON.stringify(body)
112
+ };
113
+
114
+ // Make POST request
115
+ response = await fetch.default(url, options);
116
+
117
+ // Handle response
118
+
119
+ let data = JSON.parse(await response.text());
120
+
121
+ result = {
122
+ status: 200,
123
+ data: data
124
+ };
125
+
126
+
127
+
128
+ } catch (error) {
129
+
130
+ result = await convertErrorToResult(error, `Error while uploading file to telegram`);
131
+ }
132
+
133
+ return result
134
+ }
135
+
136
+ async function setCookieGPT(driver, sessionToken) {
137
+ // Tạo cookie
138
+ const cookie = {
139
+ name: '__Secure-next-auth.session-token',
140
+ value: sessionToken,
141
+ domain: 'chat.openai.com', // Đặt domain tùy thuộc vào trang web cụ thể
142
+ path: '/',
143
+ expiry: 9999999999 // Đặt thời gian hết hạn của cookie (epoch time)
144
+ };
145
+
146
+ // Thêm cookie vào trình duyệt
147
+ await driver.manage().addCookie(cookie);
148
+ }
149
+
150
+ async function deleteGPTCookie(driver) {
151
+
152
+ //Delete cookie
153
+ await driver.manage().deleteCookie('__Secure-next-auth.session-token', 'chat.openai.com');
154
+ }
155
+
156
+ async function getSpecificCookie(driver, cookieName) {
157
+ const cookies = await driver.manage().getCookies();
158
+ const specificCookie = cookies.find(cookie => cookie.name === cookieName);
159
+
160
+ if (specificCookie) {
161
+ //console.log(`Cookie ${cookieName}:`, specificCookie.value);
162
+ return specificCookie.value;
163
+ } else {
164
+ console.log(`Cookie ${cookieName} not found.`);
165
+ return null;
166
+ }
167
+ }
168
+
169
+
170
+ async function getBearerToken(driver, sessionToken) {
171
+
172
+ await setCookieGPT(driver, sessionToken)
173
+
174
+ const script = `
175
+ return fetch("https://chat.openai.com/api/auth/session", {
176
+
177
+ "credentials": "include",
178
+ "headers": {
179
+
180
+ "Accept": "*/*",
181
+ "Accept-Language": "en-US,en;q=0.5",
182
+ "Alt-Used": "chat.openai.com",
183
+ "Sec-Fetch-Dest": "empty",
184
+ "Sec-Fetch-Mode": "cors",
185
+ "Sec-Fetch-Site": "same-origin"
186
+
187
+ },
188
+ "referrer": "https://chat.openai.com/",
189
+ "method": "GET",
190
+ "mode": "cors"
191
+ })
192
+ .then(response => response.json());
193
+ `;
194
+
195
+ const responseData = await driver.executeScript(script);
196
+
197
+ let newCookie = await getSpecificCookie(driver, '__Secure-next-auth.session-token');
198
+
199
+ const result = {
200
+ newcookie: newCookie,
201
+ responseData: responseData
202
+ };
203
+
204
+ await deleteGPTCookie(driver);
205
+
206
+ //const sessionObject = JSON.parse(response);
207
+ return result;
208
+ }
209
+
210
+ async function getRequirementToken(driver, bearToken) {
211
+
212
+ const script = `
213
+ return fetch("https://chat.openai.com/backend-api/sentinel/chat-requirements", {
214
+
215
+ "credentials": "include",
216
+ "headers": {
217
+
218
+ "Accept": "*/*",
219
+ "Accept-Language": "en-US,en;q=0.5",
220
+ "OAI-Language": "en-US",
221
+ "Authorization": "Bearer ${bearToken}",
222
+ "OAI-Device-Id": "d8e8a53e-700d-4baf-b15f-171a77737a49",
223
+ "Content-Type": "application/json",
224
+ "Alt-Used": "chat.openai.com",
225
+ "Sec-Fetch-Dest": "empty",
226
+ "Sec-Fetch-Mode": "cors",
227
+ "Sec-Fetch-Site": "same-origin"
228
+ },
229
+ "referrer": "https://chat.openai.com/",
230
+ "body": "{}",
231
+ "method": "POST",
232
+ "mode": "cors"
233
+ })
234
+ .then(response => response.json());
235
+ `;
236
+
237
+ const requirementToken = await driver.executeScript(script);
238
+
239
+ //console.log(requirementToken)
240
+
241
+ if (requirementToken.token) {
242
+ return requirementToken.token;
243
+ }
244
+ else {
245
+ console.log('Cloudflare. Retried after 2 second.');
246
+ await utils.sleep(2000);
247
+ return await getRequirementToken(driver, bearToken);
248
+ }
249
+
250
+ }
251
+
252
+ async function getAllConversations(driver, bearToken) {
253
+
254
+ const script = `
255
+ return fetch("https://chat.openai.com/backend-api/conversations?offset=0&limit=28&order=updated", {
256
+ "credentials": "include",
257
+ "headers": {
258
+ "Accept": "*/*",
259
+ "Accept-Language": "en-US,en;q=0.5",
260
+ "OAI-Language": "en-US",
261
+ "Authorization": "Bearer ${bearToken}",
262
+ "Alt-Used": "chat.openai.com",
263
+ "Sec-Fetch-Dest": "empty",
264
+ "Sec-Fetch-Mode": "cors",
265
+ "Sec-Fetch-Site": "same-origin"
266
+ },
267
+ "referrer": "https://chat.openai.com/",
268
+ "method": "GET",
269
+ "mode": "cors"
270
+ })
271
+ .then(response => response.json());
272
+ `;
273
+
274
+ const responseData = await driver.executeScript(script);
275
+
276
+ //console.log(responseData)
277
+
278
+ return responseData.items;
279
+ }
280
+
281
+ async function postConversation(driver, message, bearToken, requirementToken, conversationId = null) {
282
+
283
+
284
+ let body = JSON.stringify({
285
+ "action": "next",
286
+ "messages": message,
287
+ "conversation_id": conversationId,
288
+ "parent_message_id": "aaa142b6-d456-401a-bee5-f741c4271320",
289
+ "model": "text-davinci-003-render-sha",
290
+ "timezone_offset_min": -420,
291
+ "history_and_training_disabled": false,
292
+ "force_paragen": false,
293
+ "model_slug": "text-davinci-003-render-sha",
294
+ "force_paragen_model_slug": "text-davinci-003-render-sha",
295
+ "force_nulligen": false,
296
+ "force_rate_limit": false,
297
+ "websocket_request_id": "8cf0ba98-12dd-43ea-bd21-a2261f74c423"
298
+ })
299
+
300
+ // Chuyển chuỗi JSON thành một chuỗi JavaScript
301
+ let bodyAsString = `"${body.replace(/"/g, '\\"')}"`;
302
+
303
+ bodyAsString = bodyAsString.replace(/\\\\"/g, '\\"');
304
+
305
+
306
+ const script = `
307
+ async function getSseData(callback) {
308
+ try {
309
+ const response = await fetch("https://chat.openai.com/backend-api/conversation", {
310
+ "credentials": "include",
311
+ "headers": {
312
+ "content-type": "application/json",
313
+ "Accept": "*/*",
314
+ "Accept-Language": "en-US,en;q=0.5",
315
+ "OAI-Language": "en-US",
316
+ "Authorization": "Bearer ${bearToken}",
317
+ "Alt-Used": "chat.openai.com",
318
+ "Sec-Fetch-Dest": "empty",
319
+ "Sec-Fetch-Mode": "cors",
320
+ "Sec-Fetch-Site": "same-origin",
321
+ "openai-sentinel-chat-requirements-token": "${requirementToken}"
322
+ },
323
+ "referrer": "https://chat.openai.com/",
324
+ "method": "POST",
325
+ "mode": "cors",
326
+ "body": ${bodyAsString}
327
+ });
328
+
329
+ const reader = response.body.getReader();
330
+ let firstEvent = '';
331
+ let streamEnded = false;
332
+
333
+ // Read the response stream
334
+ while (!streamEnded) {
335
+ const { done, value } = await reader.read();
336
+ if (done) {
337
+ streamEnded = true;
338
+ } else {
339
+ const chunk = new TextDecoder().decode(value);
340
+ firstEvent += chunk;
341
+ if (firstEvent.includes("\\n\\n")) {
342
+ // Found the end of the first event
343
+ streamEnded = true;
344
+ }
345
+ }
346
+ }
347
+
348
+ // Parse the first event
349
+ callback(parseSseData(firstEvent));
350
+
351
+ } catch (error) {
352
+ console.error(error);
353
+ // Handle potential errors during request
354
+ callback(null);
355
+ }
356
+ }
357
+
358
+ function parseSseData(body) {
359
+ const data = {};
360
+
361
+ body.split("\\n\\n").some(line => {
362
+ if (line.trim() !== '') {
363
+ try {
364
+ const eventData = JSON.parse(line.replace(/^data: /, ''));
365
+ data.conversation_id = eventData.conversation_id;
366
+ } catch (error) {
367
+ console.error('Error parsing SSE data:', error);
368
+ }
369
+ return true; // Stop parsing after the first event
370
+ }
371
+ return false;
372
+ });
373
+
374
+ if(data.conversation_id){
375
+ return data.conversation_id;
376
+ }
377
+ else{
378
+ return null;
379
+ }
380
+
381
+
382
+ }
383
+
384
+ // Gọi hàm getSseData với hàm callback nhận result
385
+ getSseData(arguments[arguments.length - 1]);
386
+ `;
387
+
388
+ //utils.saveStringToFile('script.txt', script)
389
+
390
+ const responseData = await driver.executeAsyncScript(script);
391
+
392
+ //console.log(responseData)
393
+
394
+ return responseData;
395
+
396
+ }
397
+
398
+ async function downloadAudio(driver, bearToken, message_id, conversation_id, voice) {
399
+
400
+ const script = `
401
+ async function getAudio(callback) {
402
+ try {
403
+ let response = await fetch('https://chat.openai.com/backend-api/synthesize?message_id=${message_id}&conversation_id=${conversation_id}&voice=${voice}', {
404
+ "credentials": "include",
405
+ "headers": {
406
+ "Accept": "*/*",
407
+ "Accept-Language": "en-US,en;q=0.5",
408
+ "OAI-Language": "en-US",
409
+ "Authorization": "Bearer ${bearToken}",
410
+ "OAI-Device-Id": "d8e8a53e-700d-4baf-b15f-171a77737a49",
411
+ "Sec-Fetch-Dest": "empty",
412
+ "Sec-Fetch-Mode": "cors",
413
+ "Sec-Fetch-Site": "same-origin"
414
+ },
415
+ "referrer": "https://chat.openai.com/c/${conversation_id}",
416
+ "method": "GET",
417
+ "mode": "cors"
418
+ });
419
+ let result = await response.arrayBuffer();
420
+ let uint8Array = new Uint8Array(result); // Chuyển đổi thành Uint8Array
421
+
422
+ callback(Array.from(uint8Array)); // Truyền result vào callback
423
+ } catch (error) {
424
+ console.error(error);
425
+ callback(null); // Trường hợp có lỗi, trả về null
426
+ }
427
+ }
428
+
429
+ // Gọi hàm getAudio với hàm callback nhận result
430
+ getAudio(arguments[arguments.length - 1]);
431
+ `;
432
+
433
+ // Introduce some randomness in the sleep duration
434
+ //const sleepDuration = utils.randomRanger(5000, 10000);
435
+ //await utils.sleep(sleepDuration);
436
+
437
+ //const response = await driver.executeScript(script);
438
+ let audio = await driver.executeAsyncScript(script);
439
+
440
+ if (audio !== null && audio.length > 5000) {
441
+ console.log('voice Done :>> ', voice);
442
+ audioStack.delete(voice)
443
+
444
+ console.log('audio', audio.length);
445
+
446
+ audioList.push({
447
+ voice, audio
448
+ })
449
+
450
+ } else {
451
+ console.log('Error. Try after 1 seconds');
452
+ await utils.sleep (1000)
453
+ downloadAudio(driver, bearToken, message_id, conversation_id, voice);
454
+ }
455
+
456
+ }
457
+
458
+ async function downloadAll(driver, messageid, conversationid, voices, bearTokens) {
459
+ let currentIndex = 0;
460
+ for (let i = 0; i < voices.length; i++) {
461
+ let voice = voices[i]
462
+ let tokenTemp = currentIndex < bearTokens.length ? bearTokens[currentIndex] : '';
463
+ if (tokenTemp) {
464
+ audioStack.set(voice, true)
465
+ downloadAudio(driver, tokenTemp, messageid, conversationid, voice)
466
+ currentIndex++;
467
+ } else {
468
+ console.log('sleeping 1:>> ');
469
+ await utils.sleep(3000)
470
+ console.log('sleeping 2:>> ');
471
+ currentIndex = 0;
472
+ i--
473
+ }
474
+ }
475
+ console.log('audioStack.size :>> ', audioStack.size);
476
+ while (audioStack.size > 0) {
477
+ await utils.sleep(2000)
478
+ }
479
+ return true
480
+ }
481
+
482
+ return {
483
+ handle: async (params, driver) => {
484
+ var myparrams =
485
+ {
486
+ telegrambot: [
487
+ {
488
+ "chatID": "-1001482381399",
489
+ "TELEGRAM_BOT_TOKEN": "6525526908:AAE4sLKWALT7YmDFMx4toFcbF3Bz8csU-tE"
490
+ },
491
+ {
492
+ "chatID": "-1001482381399",
493
+ "TELEGRAM_BOT_TOKEN": "7198790593:AAEcGgvERcca_wISmu73qA2-ZPcCs1K6ozw"
494
+ },
495
+ {
496
+ "chatID": "-1001482381399",
497
+ "TELEGRAM_BOT_TOKEN": "7022876326:AAH7SZhPc5zKAQPOdYs7tQkKhsfRLVw4FaA"
498
+ }
499
+
500
+ ],
501
+ sessionTokens: [
502
+ {
503
+ "id": 1,
504
+ "token": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..NzQQFjbkFEVF8qJ1.OpFaozhhakF7m1pktHoAf_84NHqEu6DDYBKV16S6XE_4kj2ygpjVG6bM1j1NqrFxD756v0CSs0v74IuqIS6SL_duCPhS7AkIERMXpRQS01u8udHBCA3a9NRQhhBns-B3ibrpdyPdiWlFyWFUh6JNNs5C75zezvc-YrWcOZNLa8UfHpMADIY_VjujvbKQ4lZ44PVVAH-FSpNI9lW-q62C2kPZxUDPWBHfcY-9SWPx0co9YAKxvNV4qyXvLIXxjrFXQWvcObqbY_1LPqJDW0OP77RhkWd9S6LTbgatQCkYossEQul7RanA4I6NvuBDw0vK5IaKdwEKXX4jkVBz3zUIEatOsKdmKq8jUE3xM_MhIVbq7n6kk34rlx5_fiuWS_Zj-dS6moK0Oq-GiQ63N3QUN3HYjuKpLskMeHceL6rO_PBNIAzUknL9NCUK8tS18EQIc_6tHkem-S0qxyD9oxvuoxgmF4n8qZO2eyG_XeyCwDcNJjlSUFDjTImUrGsWV6LLSyO45n-40eRfbl7-iA26dHZVx0jluoXAxxkNSJcFurcVZoMVzgffEVCJZK7F9af-A8Sb3l5_ggE7-sIozLUeu38yTmHJrbxxhG3b6aiLwvXdT_TdNTlENcinqgv36abYffHNLoa8UEbtEVsc1p3IIevnboFe10yQqa9YBb4YqB10Wu_Zw03DaA0QHTRx033NIbnI7Jfw9r6be5L95lruI-X-6ZiD_qPfa2hj2H_pk_dWqfnXsamS6mVz3n6GFBdehuF0NyvdjuWxh7VHoCjsALCePFKIGHspCqYLUPKuo8mWqwfkPHy3HC2eowj2jfUdUXnwpVdAJ6P_aqFBRzWAzaC3RRF7DZeHIuhcoGo52RhZRNKiKjrzY6PG-8DPLvkSnSmlnfUkJakAckbfMMAk-XvANhPpCBeeEXjI7smngI0QRKKJudIsLrseomSMYLK6bQJ8lqXcuCPZOk6iL71MSZvhi-on6Ngy2bvlTvXKNJ7B3LP4iIZfAgrX81NJ5KtRglGHc6CsGnocP4_Uf6zMqLoEgwExoQQLqW29RnLA5OdabrAFHs-JQt2TqTZD6WtCSi3xCc__XtpiapgQF8IYrKAl-b26qznRQygqb17hypJ2HkHMxiXxTchdL1htkas6NCCauv5UpjQTNFJPX3M2WgifKwB4qB002NXO_0f4DbDXxRCOOUJ5tEytAMZPWOmOVbEnNK8_9ltKMSJ9ZML2PyVhA-AUiMCw7_Rme2ANNBeDls9YdmKgMESjvc5wVZfgS25S5Kp9pnysuf7BAZrVCPN2hqu1fi0zfZA10qQZ2w-oPhrCikLekh2xTJtTavutKSTjUeA2_Qf4uVgrpjkCg2-gPGTJik3IWZ9NV1tYOOSCXxvKPrPY8w0rs9jxYAZwsvc_L8q05izMCsjw9JPiaxD_5ii6G30ncHGl5REZK_qwNCBr31CM_ldGdHTDohSKlCym_Mk6bbGxiBHQ34a9jfZdXA2k8Qqrgl0xvRYUHF0V1r89Ny-a5byxCyGp7_Mq3MoQZOO-p5gHQItVUKhTbUHKdkby6dJy18ToMizWyTUi_GGcbsiuW2PP7Se70OYT2x7LyJ0Qwjv26vs8Cc8xIbE-lNY8muK_JWyrvBQL-5eyAIdKPSA0NJYCKbVymrHgOF-H0rbRRHaG9zt9mNshG1KtU1dXc75QD0QcyEhd0GbJU2wdn1Ag0WuYG055mnX5JOwozVpsUmQD1TZ8H0gxZN_dOEej1vmLZbUEPcpg1omcSs3T487ILK6GMjQvMR9-vxxnTI8Xe09tVQSF4Bm8TgsxA65VRUHViQkh6wF-My35wvLLfMOK1-0P3mzXuYQonXY1LCobyuW0WpZi5y_usdeEcvJHEIu0IVRVprTL_Mw0gJVCp6tx6LgRu2yvJaYRuSb7mOmAUS_L3qgJUv1J1s1PD0svbvKfkOvPSPq1yEIgmcDxiUcyuex1Y-LSc54lvtJMMb_mI96CAjL88kx72tS9frubmBjeUpJecMxT52E2pkHZ4QX5aorUlpXK_tIN6s5MiOax4rGarseHNcncS-tDImZVXMluHtupuuiJFE-B-xIhFaIZwiXrjYqnHtWRrCttpyySxFWFqazIIXxexrjArwTeMddaMFI1-lvUlpax9jKv0atG-qzbyh5q50zPS2JxzwFBgvctwywpSrmHRdo1LgUpXmczZc30G6LkTB9AFYh4wSO0ao8f-_Ks1NToq10ny0ISHNLu93sv0d_ve7ushDxsJBY4IyU9NdSwoBKHRUTg_Nt2IMCIey_XywN9BIKNqVFleHtNhvi9az1Es0jMmgBXKmH8yksTdWplfIYsZQlQ3RiI-qDGBdNlMu57oPLa_1eBXsZid70pQxMKWF48OiBaSKX9SanXo3yGg2ff82QFtedwRfHJSW7ubwiwmlrHnsRnl2mawswHD41fk3YkwIHSsVjp8ewFRc0mHdXXyNZZ7ynLGbffq6HuXR5pVCqkfY2JcLxYRVK8GmGvwZ8bKZBxcC0ETgt9By2er-GSe0twmu_aAYnwW96G2dtDyAgArXI2CnY1kGTJ766MuO_qnb2UcXBm9o8y0sDnrMvnrmDszUBjHCevJ4yQU8Z8j8iKLut6YS1is4pGUTdeGDW3GZeQt68yq9HeiNEg3EeL6HU9qbg9pgfq8lUI_VGYtznUaCdlm3k4JbpvP87RI4n_ZeC5iVTgSedxKZZiqtpJ4bevcJWKQe5753NHDKoozXl855uQd6vwR2ej9fxWTPfDCZ-Uuiz_pAzVJ2PIsFKGnIhUHU7QNKcNg_m-0U8sWzz3hdQ2O8SC7LBdAakedvI_6lFeOHEhtHjY1jmuAMH8fTHUUoY7ESD5Dr4zItklsHRMvwoVRVk_gNmPizz850ICUrkpUvk7p7IzeJNSwehKOO_pxhe4b1eo0X_yMef0Czv7znlYJ8lbCU8jGyLfVv0Gzfd-pWuU1E3sAh3CM9rFmtVqT9luM3qNPMVr_SAlRAY.H9zW3hwhZ_sHe5zycItzbA"
505
+ },
506
+ {
507
+ "id": 2,
508
+ "token": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..eFl8JpqWPDddtJk0.2DZJ77yi2ND0FGT4qMOphmLgNezb4Q3gH9xI94DfYgpe7Bpmafq8HUW099lcEYjhg0O0H_gsmSQxUERhU950grf2t9qTEBcTXyG_jj5jaWSUNBJXiwGaZpidBOKiYky8wqkRwufSFP8IvtjFyZ9_dehYDzUq_8OqbcgIalkmcgwgXchfm5JlW0E-WH6BNdU5CvfvoywwP5awgClmTNgiXO40uGCPyqAwx-jyTE_ZTxTZxiDgwbbN7zGPuwF9PlUL42yxD3j-QZ-_T_UaTyjeXw4bSFpN-7mdWGtl5e09hw0BEEeAcVVbPA7_oX00Btt72XtO5_OQLmgPv5fQDOmtoFAT6sQZt0rCTMF4rGg80ebUZ7CQnBzbH4qPSi27RSIgJGoA3mCgxfv_CQo0PS94TWspCKoXvnFC5f7nFIbFYXYfnmTbABC2wW2EX_KMHfXfXIkwMZAODyg7HVDLIDh3c4Y_8NDmCoapqgJvZmUp95gEAMbswJCh7-tJYZPKkFjFZTm4qERtPKCJyx6WIk8I9FhMsjgWnNbEGbSjSf0E4A9C8Av1Byr_bzJ0WxhOVY5JsVVXrneHUdAAMd2xMNZKgTHP-0nIFhHy3fnIeqh8pa-xqMNpEWz5DtU6PCXs-76NRuX5aS6YR7HkYkd073bMxTJoifk3LOs2HTeOV5KNL9X_BAqu3RBBc8gLry0ZTbhVTC6MBgSdTGuBT9vMUg0F95SGwnulW70IcIiLR294R-2C1ym-UTmKyovZ53kcMPCY-cScvwNLI2rox1xK4iICDzyk3rYs2kpVQ2H-WH5-7Smo_dany1om-hyNKpqKj2TYw3McstrTDckyBH9S1-HJUSxP2hehDAv8kV7vFeqBut9dQ18VbAeCbeldiVf8q_AaRCNvuzHE3icrHPASz2bLT1mk1HLTcJg0fzOzLV8joHFrcodETuMZ7CjNZuqpP6s75Rn9n_d8HU5OmqbuKwX7H1SfwN6xEmwQsXh4s5lvAZct3uFxfzBxPe_oEHLQbMZP3awNvth1uJzfDRpyBuIJnzB0G5Y81egF4-s8vganaaDEZda7dxLRSrh6U2WOefZS187gArvAKu7Si6PyFPcX3SmZ3bikjyOLasZLqQGXzQYeI8KQyCHJH2p6TNPQ0Le3TiYg43HcLKbaTszCpRfBkNQB--nIdQ2KfoXITUqG0vimt1fUskqnKwLEGrcqclYugf2r2KEJr3Qt71akjmlR62AsPG7JREqKZtYHwuqdD6amG-4LtPupYgvRAkJf7BEjQEwPduA2wHS14siREEaeteifleqFvTdVvJ4MNrASelUACb9K9k2IdeGc9Bgn67ucBTi9pOfLo3KlQDJN5paDAgb2lvVHDLyksaE5VlEZ9UBAr7wEjiXnNJa7QGCDfD0sFL3ewTnKsHXGmj_FuN37wir__Dr1_ijrnYmBP2b489EJsjfDWStqiybN7g6z2CHUh19uiU6RaSotu2nwBxzYNcTyXrqDBSTLojh3mdYfQjjCtqfJKXClCctr4iu4-rAhUpdGvRm3sIyXFgxBg9g4zH0MCySwP0aCJ_LgPymgC4HAuJrQU4PAVKsdBD_Y6NKiGMj313a98-PpRGzaS3UoEfGvcOO2V3mMXKemOyV2R0DGRPlRnmYbhEt_mPIwmyFKkLXldKvbI6jJsdyiy2jbA19huB8gXzRil2nCHBKXcSSz4CSq_1OqnqmLV_fxf7ZhRUBUUqkaIJ2Z11B0fpOdV_cevSAjbZZ15661jQVq89QVqMGARyhD1PquX76E9oZTF9TUmSDbjvZeFEFGncUWS4PEt1x52wAyu_hQ69CwHa-4MtGQLF5A9WKK4mUQH157LwabeS3XIX6poXCK41Qa-ckSBHQk55ML8rSwN5kerJB0VbRiy6ggjUT2h8Sc5RHpaBy1pDL2dhHVioNeHTeYd5B5Chsv3nJzCHigA0Yiyp-kqKYv0gjadud9bH_M0yd7etwv-6gTRW5gDb9rJfUqUqTNHf20WyLmStEa0w0KAo7RAJxzskjTSQlpVtj-PiWydZZoAjZMGSm_9Q_JiWbZsESRCcmuAv-HgVr8jgX1Fi2b5JrOIe9R2jeU6KYpLmWM6mPHN3fiS6Tsbg1zCwQz_rQBHJNwBBNStSI80U92vN9bJIaeRO9wHCzApPJShymHyPPKxs8QoxcDQIQSSKfnI_FotJK-zxtK1IW51Y93e2pKSX0czaFAUA6Hf-c_6gorLj_atC25Evb8Uc2FRshRr4labLV5_PiMpBTX6Vl9eSn21L460EgkxUxvC_mXWq2Zb7sWk1F6FK0wTmF7ASQ5EoHN6hrq8P6gcf-mVdOMFSIIaWpWnoqeAOt9C4BpnJb55jinjwzzWVS7d8VNbVLrUk9PuVYEpfAQtYstS9PHX0iZpxKrr51vwkZnK9bTm9otXhKZnnKRZsKLTCxRguvzYydYe3L9nLiythX-_eHwefsAIEC_3642gWX2TUnVkoivf6pPiYEMzQggeb-TnpZf27zvxze6RHpAjRVBK-ZtyICJNxB6i-qcrlkpp5CkndaEv7fox4F0WC1RRW_5JdkKKKMbVXod1fp-GPXNqqonOV6S6gmJtxers4KVFGjuPUpPQYdwOXXKrx3dhnlVYYPgim1dZtQJIOeeKhiQzKSHA0729JbLLfow-Ikp8ZD0bfJh2gbMK3u6RfthudNYX84altcUHDHI4OOJezpaJ5M3rj_7vnMwcrBrbeYpV_1FqLHdHTHrxIcIkYFpyhl2qmszcRVOM6TvOr7yF0k_reWw5ruiOgUmso3gJuRN3enQrQA53o5Gn9G9HWu_6-qrbA8BK1coP8ZOOUJ6T84E_KnK98M38e8Lh6J-DEFddmXzcD9svxLk-_cVnivuXjcUGRWpLIDkHi0wLdAwx84A05BbzL63YqwDTdsMFDa3SlcV-pXiHvcobkol6gc91sySp3xpBEDfS4BhXj2xIa8h8_R3dgbrRH5lW0AOhWMz10t7Sb-Nhqc.AbbRu7fd_zwtlaQrhMVFdA"
509
+ },
510
+ {
511
+ "id": 3,
512
+ "token": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..32BhWUtlg7cDFebD.pu75EHzoe6cKlw2VgQyMMQkUOUF0pVLuwCH1riYcqIKrMMjZxlPkLCEH5ViG1DpAVPgP69f2S6kEtPMlTOfvPgogFKhuH7VSDnUMOcSY6bE63OsCBTieW5M2iEzwzMX3RfVR-18xMcVuDH9wvPTuTSDFTNJO1pAPmaWWJvTc0Gc9OwfKpMxaepT7FLwLLBFoajptWl3GCBN82sVMDVQWddh-pOZ96USeeVaQAPdlgmJYeA1l0oDAH0MvFa7auQHRZWlr110VcFj5jQXAEXaCokt01FOPbME-QMiIJLqEF-8WT_xZt374zNB2XgANLODYryXEpcr6YSoa_icy7ihKe_CQK9EkkXQP9aaiXCFnjWBborlOuTCglo3_4Y9-elrK_70McgXsHmdmCh0VxBN5lbd5tiWAFJOOECM3bPMciRI6WEQfEYFEtBg_Q971VzGqRX70y0ndCMdAh34xSkbP2Fyr9pBBTJK6RRoSPMJMZHmKAVR5BmlOY8jtH6ookJsjWyiEt7cU7YQTbWfwqDxtT587o8E-eCvEPNauzJEGCQpM6atK3y_Ay836NJbAZE1vbnddU2ompwlniUYxEDRnD2nijTx6ACLqZXNW8DV_Nyg0No3jqEMLa16BpkVnWPBRaFBybznbrClUs-nJEI6xxzTCeoJ3RTm4l1cKwKNT-TpAz_cLbj8Ys7wPzN0kenE4ROacD0-C5982Gwicwba90vQOICVhGtvuvlbpnQrbbA2q6VmhKevM5R2NxOm98lNG8oSvj2NVICfQier5tJv8O0iOT02iCULSLbjLfzP8vrdRgdFM37jUPIVeKrzkRv3I9Iaisd8NpPPArMCiF9LgUxLQ5iAXpdznIsQG57JWhvQ1fP_YEXFBkaXsBb9L0i2aGoNdiZ7CMLI2-NMA1FZsWjvMESCkcnBMFtx-Y5t2njV-aBNpFsZjnPsazs1CsLU_ojpHrzto1DVDd4NSxffaah3Cg4zD_quZX1X2bdkBHDuCkhXXUIT9-VOM1h50zchAc2F3CR4MvCwSADwh-T5mwhjZ3o9qMRhmmP2mWXWYj8Nf4mDjk2G1p6W404DDnYEtby-XL1H637ozbX4gN9YaYlfge7h5xr9dzYdTXpkiB1V4MmlRRJ4WkCI9jJfWv3DQWASSISSvRrXRAQSKXKbWtN5GSH0q5FkYTwXmAxSJ0GZKn-QeMXcvnUg6dXf9luConTf7BiZA58VBRegXhHOtuFH0MncZaQE7kSf4G0Pcaf34ZgLIkNf2ABMN9qthmbhp_L4I1LVVcotlTQn5rq33hyvqEFWBkJhP6w2DXB8ETXShD--_GEU_6gLEtlNquG9m7f-9WgWIE0K9SHq5hnx3p9uaaVaYU0sLQRKhKEmPRH0R3bzz-hA7IAIMm-7v0R3SSfQy6rmURSs9TbuieYKBKAGI2hqSeQFpyKDyh7ISWNWXCmZF78Ay04eA_02HYL6-9DbVBt1B2wUSEbn3kfpTGRRQwZhv7hMrDYza0tb4uqL9nNk6-tXIfjXFoSKHvMccG3_DJkSj-KeQVWADmpaqqPOvy-t0wATxTyMu_Doiu75pD_8e3jvR3q3ssQy3skkzbuWDbNVzpHdge1Rext0HxtnJkcsGV3qsBXPonW33nIGMfenbSsra00NL9OWH3rpCcBXEbBpGCAL6EesEeGvSsr-a3uXSSbYwP29_jMGA8Zo3xYRxkF14LwnFsMz_xouWGTulKbHMAbvm2wRmhJztdV6tUxVR2dOrbkHNpX0x36cmebyJOaQ7QSu9x5e8D2JPL5jFLrWjbj2KB6QXZeEwXq7pJsoeHIWa_RMd6bAHy-loJO7W4LovhaHviouGv9zjAAQfahdkqbNXI78jN2nAeN4t-56ZsZ4TPk0KSRAwasBwU_QkbQA-8YWeNE39J5ueV_icFCovHEOGZOa1vjiexRRI_ASmf3QMxhhKp_hq69MDa4OFg-TXLmfOku_E6TV5hBCyFEwUCKdSI9-XH5aRXW_N5LUhguSaFl78PGQ7URtT57Ud3vSZp42QZviq2XKUSMbbHfRExBLwepwhQnYnteRRjoFa18FB3Jk8iI0sCTX4GqarSuYHygRxDFfLNQ_PbNDVeD33CDYwIgMx9M9W4cA4p3Ljoh8jLkh6a9yCuAYSJ_OBMtg3r-NEf-IINAdzqYNebakJiZz9fD9N1J6juEmSoU9wJsUHpaF-lyRDOlRe961wMwi6-GZOWjpu1oADl8sVZly5ZPjBtGXQ2UxC7LfboHutzhZXq24f9tMdVDzfSJ0zn7WGyjdFEW1LOBGb9TMkRDr92d2rKi0O1gxT7v6MQzs-dzjp_rZr8K8Tuq87i8qiOmi5Clb5qiurl9yIHWNFeFd3tmZadr7pIBusVwFde9zHhi2B-5dkA1viCeM7l-CsN0R13fYrALLBr1_i2ZjWohQFJuIHrQ_xHs0n597V4wc2oVavKECRC1CuGE0QZwKTASti5D9uwVOHYLUN1L5s1kWm-rV8-GlHRS_sFEADSCMYEqwZXeMli20zullwFLmCvobOEeH57AnlnaYKK9cEGk6D-P4HzDLKSDKbOo9RIUeTAvHK0qWglh22gyPSu54Iv39qrLPqCPEMnKKtUTgv4hDa6W_pXlgaxOQzO_z6GfycFw1JT1EfthkOZII6UAuKOI3S1D7WMpNYNzaSo4cISUH0pT9GNMc0Wrmr07Hbls2nOiOVRKNo3bQnmPpL03vcPRA6p5pyawE1gxdi5xk5aV36PmPIW4SLMziNx8niBnDs8Q8jacmfz8AndY5xyDYMRBRac6CCSUzETJgLQ_9eQXpXlL43pE8c3FaiKgmIHV74hm0dIjFAdwdhzPpeV-KjaeShuoebrjkzYV2J0j_1aAVEVricyE9axZZTYo-_b4Wx_eiWVsATPP1XS84sVdXIWUNZivxur2-RahQ9lmRtIIedWYyBQrUYUz-xMOe5Eof-mAf2m19ZB_zmuChh2PYRMZkUF7YPUAgPqP_jh9w.IzmdfFuM87ZPLhXrJf78kA"
513
+ },
514
+ {
515
+ "id": 4,
516
+ "token": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..ftDbAhM8JWxlmemg.9-NNo8-DX5b8FQM-GR_kvtL2mH08aqEDZ8pyCuU3VAadbpnbRXi_FK3Ff98vEnsK6Z_-WNl3MNEIhdaIwcAwY49pHSLoFlPu2Ph7PylcBhQQpjQ5FB-tO0UjzOAHCxIprryIqgZJLdiDHGxGBfE8TWUFfdRqn6ZiOrCd4Ad9LGA3_p-K75z_wqSmgsSXFNGhJzbLZOCp54ZderaGXFXQE6aow7rFQESZferkn9AyVf_3FQEIimnXnwJ9C-VvLM2cl7NLJW36y8XqBGMk03LH1QaTV3LHet7K9mg4oNCiCJ2OxHBRa4zV8tYvr4T8nun0iB6R5sm6E4XSdx2IYHTz7zjCT7jBgXjB1lvwL3PeYoaal9rJ1j87KRse35lkVYy16BDTYZUj0y-mwy8hW_vMAAUsdJYSxMSYY9Fq3j4X4VJyvrXPhC6Fo9wThFn4lnbhrPG3YaiSY4gdsGOSrMCIeDrOi1xFFHJ6WrYOtfI3ZsUSMAbGCgQi4G_1S_Hp3E0JTPwIDrzM0yPLjuASXi5POYYRI8LFpaSDi7xStYYppUwo66hMyjop9cbCOiLsfYnCqX59t8pZbjJOArqH12tybmSgmj1Pa86LAnevv_OxEqpOGL_RIqlW3CMElLQXS7Dk4VvXjBFhHpz2JQxFk4FUOpdeVJS0tsIUqwmfQwnHxOR-x19fJXNgs_-lFmFQ3vHebH0N7Xif9H-t8U918ceD_fAIj9-tmjTIfKhZ1tUxbd1yCvmN7cZw5ISBcn2iJ_3NqSs3sIORWCXxzeTQWZmm5F3Z1i5rUinZH2ryCPRBOMf4FpyopapkFcmTDywZ5GRe5fJWG3NpfXuVQGKc-0WbpEtMBaRLpcicqpYz3AhQLZUUHrBiMUs_J3381zt75lJZBhz4dKq3fjdA21CoyFsfrUIMYF8j5x11oUkdsQON3m8W8PRH67RA6HpzqUTLwlmr6IlEbuQub3PVRwEKJHW7ARfikUcRV6VYJJSuIv6s5poGnwRD3dlx-r9S1C96LqsDN9_I2Cf0SZNHyBgz8C4FzSoGThBeiAVnKPILCleJwQvCWMvlP9TgtuXU6SqYLU6Wu4zP282KhtZzdcOwLCKEbOsbI40_1vjdtY9Rgq_5e1XuvTQEsw_FDKKnsaRyT2_aT-av0RptSb0AG1ru6ldNVSQ-jZ0tbrkbZjVCQJfWOE2JGRl_kkyaQrkw0yCuK1_SSJRSJtJzHBGLA96DbwlIrY1_Cr39C8VMPjubwXBuZ7g_oyuIrkWJZg2VYSAK8blRGpmaPGV-xLsU3cnDJZcCogExb8wqhMziiFgF5lsWwuxRe6kkWicvM_VP-UmzTllNsKR4o7sIGhZBDF9nllQxQyYLh-XrXEJNfsXdzBE3TSB6Jg-1nHlk45bkdMuWcQ4oNNZHH36xCb-l65FL8kOT_bAnr4z1Lr9-i7xgn7Yh5WxTudnKbPrpUFWFDoodcQXydq3F8HQjYC3qvg7v77bChTnM9lT2xRdDV6i2BVFSBB8i7DZyoUAvqdsw98lHtFFnhP1Kw-BqsHPExSzVEgYmrzKy-UiBG0N4fGNCQYtWKZSTcLlcwnixgROkn_UXC_hbBrizF2YIotcgZVMkdKBw5SxjHkFTbJ3iDrMLiQ7f3esMlN2lNM9mhsJjPzYu-h4z2Jc11udeGlOcMOSjAhuLRuDcVm-dY-ePayYfg3wguhuOc0ZQusNHKIOIkdRoMWJly-zYKxrbIejITz85dNWcE6_cJkfiFXcBC7GZ6rIhDxAWQ8XGOmc1J6L4joLVQbEOCxl1D2uftc7FYBcDxTZbh8hQB1CqowTlvVFKeYn4u-fhc4stIw1v41wwKcVZlyH2CE7s3AJvB44ZLMdpICLx9CN_GsP8r04CNuHQOD9x5N0oTzqhWMHtmjYX2DeAsgv35B5pyrNfSdndTqUD9OFVXBmw6mjVME4efSM72zeR-PdcQWoc4htQr-WWvz4i9JZ53_Hlv2EWetsq5pUiLhcvu1OE2DL4Hy0bdUiDc8_DvKfnMY5hN4KXZUOoyrTQMKgdp8PjbbsCMUnjVT1Eo_TeTRzCoL8RuUhn7RUD3HGnf6d9cQb2WutLQB4yPE_1CEUtsUdNewqhBGXxQsWcObpAM-AQyFiXrOOAoJADnCfMRT1nWAbvM2zRuz3Wp9v_zPQCOrlh-GbCpjpc-GrOfVr1CNkp8An5h1-9cy1A6iBnOZFukVKshFzPWobDvauvcStvYR4ydcrYVeo5Ra-glYPi2WWbw-lR4IOQe-iCLWbriIGPFKzOOALvd05l9HsCIJElPl55yg8SRy6iqSrw2WIsrU-Q9iHsn1W-51Q3RGzM3UrolL8-w_jKBNBlYXYDzQ4u8tDaWnv6xYfB8bZhDqIqWVeBM1JoTCPYD-YZCZRnQbeKJ9g7Z1-gztO_stS-fJ1nNS8ClMqRpGBwoUJCB9XvtqRvP5Qz1bpR4q-WtixUGUCtkLHAsuFuCOSewdATYglHKUWHnX87y_V5JUi0otGH0kX7oSzqRAwJ252lcsTZe7QJmJe2caR7yywZoQztO80nMMAufMdtQiEJ5ZKtaMXvA72Qxy1z5JT72bUaXCRE0RC79iU6GxtM9179dZ-5giRpXFb6DD1zChXOH9yEs-uuZ5r0JzbCwudZYNK75KK7mSW9zS970CriqTC0VFvCv1IW-hwIH3tEfXZNtS0EBo1t5YsIxSHOQyiF2V3azYulSlvqfuxQp9j1bKNR7AHYJZpAkIodmK2sRfDBvtsV0eHl0ZpSaMo6ItbDzoQzi7OvrExAII3WzdsKGJfjkaANrYPM6yIMlXqKVMBRtZ-TqOGejhULyYVDE9crxjHJbNzCL-I7yP5IXCImAUmcBJlL9WYjomwzXCVZwet8wLC217ooxogfPWe-iQuBM2ypCkDh3OH31-G6Bk3pi0M06UKHHFlHIPhVUevx5OkpNQ.iFCbDBfR2651LNRkulvNMA"
517
+ }
518
+ ],
519
+
520
+ workers: [
521
+ 'https://createaudio.conmeomatreocaycau.workers.dev',
522
+ 'https://createaudio.conbomaydidauthe.workers.dev',
523
+ 'https://createaudio.conkhinodanglamgi.workers.dev',
524
+ 'https://createaudio.ongioicaudayroi.workers.dev',
525
+ 'https://createaudio.haiquanbodoi.workers.dev',
526
+ 'https://createaudio.thanglongtrungtam.workers.dev',
527
+ 'https://createaudio.maybaxonxon.workers.dev',
528
+ 'https://createaudio.dihoccalithoi.workers.dev',
529
+ 'https://createaudio.phieulumao.workers.dev'
530
+ ],
531
+ paragraphs: [
532
+ {
533
+ 'id': 1,
534
+ 'content': `Chương 333: Hợp tác nhóm, tuyệt vời.
535
+
536
+ Nguồn Truyện: Truyện Fox chấm net.
537
+
538
+ Hầu Dương Đức không chỉ quay lại một mình, trong tay hắn còn cầm một chiếc chậu.
539
+
540
+ Trong chiếc chậu này có rất nhiều chất lỏng màu vàng, thậm chí còn bốc lên từng đợt hơi nóng.
541
+
542
+ Hầu Dương Đức đi qua chỗ nào, mọi người đều sợ hãi lùi lại vài bước, sợ dính vào chất lỏng màu vàng đó.
543
+
544
+ Mọi người đều là con người, chỉ cần ngửi thấy mùi hôi thối của chất lỏng bốc ra, cũng biết trong chậu này đựng cái gì!
545
+
546
+ Tốt lắm, rất tuyệt vời a.
547
+
548
+ Sĩ quan quân đội cầm một chậu này để làm gì?
549
+
550
+ Lúc này, Hầu Dương Đức cũng đỏ bừng mặt, trong lòng hắn hối hận không thôi.
551
+
552
+ Vừa rồi trong lúc nóng giận, nghe theo cách của đại lão "Nhai Tí" nên hắn đã đồng ý.
553
+
554
+ Bây giờ muốn hối hận cũng không kịp, hoàn toàn là tiến thoái lưỡng nan.
555
+
556
+ Chỉ có thể mong rằng chuyện này thực sự có thể thành công như lời đại lão "Nhai Tí" nói!
557
+
558
+ Nghĩ như vậy, hắn cũng lao thẳng về phía trước.
559
+
560
+ Còn hiện tại, cuộc đối đầu giữa quân đội và nhà họ Lý vẫn tiếp tục.
561
+
562
+ Phá Quân và Lý Nhất đã đứng ở hàng đầu tiên, cả hai đều im lặng, đều cố gắng dùng khí thế để áp đảo đối phương.
563
+
564
+ Còn những người tranh cãi khác thì cũng đang đấu khẩu với nhau, không ai để ý đến Hầu Dương Đức đã đột phá đám đông, bắt đầu bưng chậu xông về phía này.
565
+
566
+ Hầu Dương Đức cứ như vậy, không quan tâm đến điều gì, giữ cho bộ não trống rỗng.
567
+
568
+ Dù sao thì cứ theo hướng mà đại lão "Nhai Tí" đã vạch ra trước đó mà xông lên là được.
569
+
570
+ Đúng lúc hắn xông ra khỏi vòng vây của quân đội thì đột nhiên cảm thấy mình dẫm phải một hòn đá không nhỏ.
571
+
572
+ Hòn đá này được đặt ở một vị trí rất khó xử, sau khi tiếp xúc với trạng thái xông lên của Hầu Dương Đức, nó đã trực tiếp thay đổi quỹ đạo chuyển động của hắn.
573
+
574
+ Khiến hắn vô tình ngã ra ngoài.
575
+
576
+ Ngã thì không sao, chậu trong tay Hầu Dương Đức trực tiếp văng ra khỏi tay.
577
+
578
+ Chất lỏng màu vàng trong chậu trực tiếp hắt về phía người nhà họ Lý.
579
+
580
+ Lý Nhất quả nhiên là một cường giả một thời, chỉ trong chớp mắt đã phản ứng lại, quay người bỏ chạy.
581
+
582
+ Nhưng những người nhà họ Lý đứng ở phía trước thì không may mắn như vậy.
583
+
584
+ Họ đều đang toàn tâm toàn ý đối đầu, làm sao có thể để ý đến chất lỏng màu vàng bất ngờ ập đến?
585
+
586
+ Bây giờ thì thôi toi cơm.
587
+
588
+ Chất lỏng màu vàng từ trên trời giáng xuống, đổ ập vào người hơn mười người nhà họ Lý đang đứng ở phía trước.
589
+
590
+ Hơn nữa, còn có khá nhiều người đang há miệng, trong miệng còn đang chế giễu.
591
+
592
+ Chất lỏng màu vàng đó trực tiếp theo miệng họ phun vào.
593
+
594
+ "Hít ... hà. Phê!"
595
+
596
+ Tất cả những người chứng kiến ​​đều không kìm được hít vào một hơi.
597
+
598
+ Ngay cả Phá Quân cũng không nhịn được mà toàn thân run lên.
599
+
600
+ Kiểu sỉ nhục này!
601
+
602
+ Đơn giản là không thể tin được!
603
+
604
+ Nhưng ngay giây sau, Phá Quân lại bắt đầu lo lắng cho Hầu Dương Đức.
605
+
606
+ Làm ra hành vi sỉ nhục người như vậy, liệu có bị sét đánh không a?
607
+
608
+ Câu trả lời đương nhiên là: không có.
609
+
610
+ Hầu Dương Đức ngã trên mặt đất, mặt ngơ ngác, đứng im tại chỗ, chỉ ôm chân mình, xoa bóp chỗ bị thương.
611
+
612
+ Nhưng chắc chắn người nhà họ Lý sẽ không bình tĩnh như vậy.`
613
+ }
614
+
615
+ ]
616
+ };
617
+
618
+
619
+
620
+ var keyCode = 0;
621
+
622
+ utils.log("CHATPGT handle :>> ");
623
+
624
+ try {
625
+ // CONFIGURATION
626
+ var {
627
+ getSessionUrl
628
+ } = CHATGPT;
629
+
630
+ // Open the browser window with the maximum size
631
+ //await driver.manage().window().maximize();
632
+
633
+ let url = CHATGPT.getSessionUrl;
634
+
635
+ await browser.accessSite(driver, url);
636
+
637
+ //await utils.sleep(5000)
638
+
639
+ //let sessionToken = 'eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..ftDbAhM8JWxlmemg.9-NNo8-DX5b8FQM-GR_kvtL2mH08aqEDZ8pyCuU3VAadbpnbRXi_FK3Ff98vEnsK6Z_-WNl3MNEIhdaIwcAwY49pHSLoFlPu2Ph7PylcBhQQpjQ5FB-tO0UjzOAHCxIprryIqgZJLdiDHGxGBfE8TWUFfdRqn6ZiOrCd4Ad9LGA3_p-K75z_wqSmgsSXFNGhJzbLZOCp54ZderaGXFXQE6aow7rFQESZferkn9AyVf_3FQEIimnXnwJ9C-VvLM2cl7NLJW36y8XqBGMk03LH1QaTV3LHet7K9mg4oNCiCJ2OxHBRa4zV8tYvr4T8nun0iB6R5sm6E4XSdx2IYHTz7zjCT7jBgXjB1lvwL3PeYoaal9rJ1j87KRse35lkVYy16BDTYZUj0y-mwy8hW_vMAAUsdJYSxMSYY9Fq3j4X4VJyvrXPhC6Fo9wThFn4lnbhrPG3YaiSY4gdsGOSrMCIeDrOi1xFFHJ6WrYOtfI3ZsUSMAbGCgQi4G_1S_Hp3E0JTPwIDrzM0yPLjuASXi5POYYRI8LFpaSDi7xStYYppUwo66hMyjop9cbCOiLsfYnCqX59t8pZbjJOArqH12tybmSgmj1Pa86LAnevv_OxEqpOGL_RIqlW3CMElLQXS7Dk4VvXjBFhHpz2JQxFk4FUOpdeVJS0tsIUqwmfQwnHxOR-x19fJXNgs_-lFmFQ3vHebH0N7Xif9H-t8U918ceD_fAIj9-tmjTIfKhZ1tUxbd1yCvmN7cZw5ISBcn2iJ_3NqSs3sIORWCXxzeTQWZmm5F3Z1i5rUinZH2ryCPRBOMf4FpyopapkFcmTDywZ5GRe5fJWG3NpfXuVQGKc-0WbpEtMBaRLpcicqpYz3AhQLZUUHrBiMUs_J3381zt75lJZBhz4dKq3fjdA21CoyFsfrUIMYF8j5x11oUkdsQON3m8W8PRH67RA6HpzqUTLwlmr6IlEbuQub3PVRwEKJHW7ARfikUcRV6VYJJSuIv6s5poGnwRD3dlx-r9S1C96LqsDN9_I2Cf0SZNHyBgz8C4FzSoGThBeiAVnKPILCleJwQvCWMvlP9TgtuXU6SqYLU6Wu4zP282KhtZzdcOwLCKEbOsbI40_1vjdtY9Rgq_5e1XuvTQEsw_FDKKnsaRyT2_aT-av0RptSb0AG1ru6ldNVSQ-jZ0tbrkbZjVCQJfWOE2JGRl_kkyaQrkw0yCuK1_SSJRSJtJzHBGLA96DbwlIrY1_Cr39C8VMPjubwXBuZ7g_oyuIrkWJZg2VYSAK8blRGpmaPGV-xLsU3cnDJZcCogExb8wqhMziiFgF5lsWwuxRe6kkWicvM_VP-UmzTllNsKR4o7sIGhZBDF9nllQxQyYLh-XrXEJNfsXdzBE3TSB6Jg-1nHlk45bkdMuWcQ4oNNZHH36xCb-l65FL8kOT_bAnr4z1Lr9-i7xgn7Yh5WxTudnKbPrpUFWFDoodcQXydq3F8HQjYC3qvg7v77bChTnM9lT2xRdDV6i2BVFSBB8i7DZyoUAvqdsw98lHtFFnhP1Kw-BqsHPExSzVEgYmrzKy-UiBG0N4fGNCQYtWKZSTcLlcwnixgROkn_UXC_hbBrizF2YIotcgZVMkdKBw5SxjHkFTbJ3iDrMLiQ7f3esMlN2lNM9mhsJjPzYu-h4z2Jc11udeGlOcMOSjAhuLRuDcVm-dY-ePayYfg3wguhuOc0ZQusNHKIOIkdRoMWJly-zYKxrbIejITz85dNWcE6_cJkfiFXcBC7GZ6rIhDxAWQ8XGOmc1J6L4joLVQbEOCxl1D2uftc7FYBcDxTZbh8hQB1CqowTlvVFKeYn4u-fhc4stIw1v41wwKcVZlyH2CE7s3AJvB44ZLMdpICLx9CN_GsP8r04CNuHQOD9x5N0oTzqhWMHtmjYX2DeAsgv35B5pyrNfSdndTqUD9OFVXBmw6mjVME4efSM72zeR-PdcQWoc4htQr-WWvz4i9JZ53_Hlv2EWetsq5pUiLhcvu1OE2DL4Hy0bdUiDc8_DvKfnMY5hN4KXZUOoyrTQMKgdp8PjbbsCMUnjVT1Eo_TeTRzCoL8RuUhn7RUD3HGnf6d9cQb2WutLQB4yPE_1CEUtsUdNewqhBGXxQsWcObpAM-AQyFiXrOOAoJADnCfMRT1nWAbvM2zRuz3Wp9v_zPQCOrlh-GbCpjpc-GrOfVr1CNkp8An5h1-9cy1A6iBnOZFukVKshFzPWobDvauvcStvYR4ydcrYVeo5Ra-glYPi2WWbw-lR4IOQe-iCLWbriIGPFKzOOALvd05l9HsCIJElPl55yg8SRy6iqSrw2WIsrU-Q9iHsn1W-51Q3RGzM3UrolL8-w_jKBNBlYXYDzQ4u8tDaWnv6xYfB8bZhDqIqWVeBM1JoTCPYD-YZCZRnQbeKJ9g7Z1-gztO_stS-fJ1nNS8ClMqRpGBwoUJCB9XvtqRvP5Qz1bpR4q-WtixUGUCtkLHAsuFuCOSewdATYglHKUWHnX87y_V5JUi0otGH0kX7oSzqRAwJ252lcsTZe7QJmJe2caR7yywZoQztO80nMMAufMdtQiEJ5ZKtaMXvA72Qxy1z5JT72bUaXCRE0RC79iU6GxtM9179dZ-5giRpXFb6DD1zChXOH9yEs-uuZ5r0JzbCwudZYNK75KK7mSW9zS970CriqTC0VFvCv1IW-hwIH3tEfXZNtS0EBo1t5YsIxSHOQyiF2V3azYulSlvqfuxQp9j1bKNR7AHYJZpAkIodmK2sRfDBvtsV0eHl0ZpSaMo6ItbDzoQzi7OvrExAII3WzdsKGJfjkaANrYPM6yIMlXqKVMBRtZ-TqOGejhULyYVDE9crxjHJbNzCL-I7yP5IXCImAUmcBJlL9WYjomwzXCVZwet8wLC217ooxogfPWe-iQuBM2ypCkDh3OH31-G6Bk3pi0M06UKHHFlHIPhVUevx5OkpNQ.iFCbDBfR2651LNRkulvNMA';
640
+
641
+
642
+ let newAccountTokens = [];
643
+ let bearTokens = [];
644
+
645
+
646
+ for (let accountToken of myparrams.sessionTokens) {
647
+
648
+
649
+ let importantData = await getBearerToken(driver, accountToken.token);
650
+
651
+ let newCookie = importantData.newcookie;
652
+
653
+ let bearerToken = importantData.responseData.accessToken;
654
+
655
+ let isError = importantData.responseData.hasOwnProperty('error') && importantData.responseData.error !== undefined;
656
+
657
+ newAccountTokens.push({ id: accountToken.id, token: newCookie, isError: isError });
658
+
659
+ if (!isError) {
660
+ bearTokens.push(bearerToken);
661
+ }
662
+
663
+ }
664
+
665
+
666
+ /*
667
+ let bearTokens = [
668
+ "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik1UaEVOVUpHTkVNMVFURTRNMEZCTWpkQ05UZzVNRFUxUlRVd1FVSkRNRU13UmtGRVFrRXpSZyJ9.eyJodHRwczovL2FwaS5vcGVuYWkuY29tL3Byb2ZpbGUiOnsiZW1haWwiOiJhZG1pbkBiYW1odXlldHhvYWJvcC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZX0sImh0dHBzOi8vYXBpLm9wZW5haS5jb20vYXV0aCI6eyJwb2lkIjoib3JnLVJpV051SWJlRDRwMVRhR2VOa1ZqNHFYNyIsInVzZXJfaWQiOiJ1c2VyLWNZRzZwZW1ZT3hCaFNIc04xak5reTVkeCJ9LCJwd2RfYXV0aF90aW1lIjoxNzEzNzI2NTY5NjY1LCJpc3MiOiJodHRwczovL2F1dGgwLm9wZW5haS5jb20vIiwic3ViIjoiYXV0aDB8NjVkYjc2MDljMDgxMWFhZDJjNTQwYjA4IiwiYXVkIjpbImh0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEiLCJodHRwczovL29wZW5haS5vcGVuYWkuYXV0aDBhcHAuY29tL3VzZXJpbmZvIl0sImlhdCI6MTcxMzcyNjU3MSwiZXhwIjoxNzE0NTkwNTcxLCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIG1vZGVsLnJlYWQgbW9kZWwucmVxdWVzdCBvcmdhbml6YXRpb24ucmVhZCBvcmdhbml6YXRpb24ud3JpdGUgb2ZmbGluZV9hY2Nlc3MiLCJhenAiOiJUZEpJY2JlMTZXb1RIdE45NW55eXdoNUU0eU9vNkl0RyJ9.IDDPe7_dyk_9iXdH4DBExny4lFEQ7Y9BkkyZM2lT559KaslKZxTVy5GbuwasXks4e6sH3xG9P8nlb9f7qpSad-_dZwL3u_fpDXkMIuniiV3lf2fBr2WjQwUy-phMuevbUeECNmYGKwSkfET1WL_xwvMgh_-ZE2rxHkmNA9eUkgQDyk-fj91RM46-leAzM_powMf1uuqpyNTRQVrBOX3c-UeDxzXJXj3FLwgjLDn8oowwdRlz3MkwH-h0MPnVLX3eF0iaPf3HMO-MzWZLO651fmzHHAjziKM_05DfILW-wSSvtSUGAmUt8-ALmeSFNcM0bZKKylXvcYTMOFUsBVpWbQ"
669
+ ];
670
+ */
671
+
672
+ //Send updateSessionToken (Report new Token, die ...)
673
+
674
+
675
+
676
+ //get all conversations
677
+ let allConversations = await getAllConversations(driver, bearTokens[0]);
678
+ let conversationId;
679
+
680
+ if (allConversations.length > 0) {
681
+ conversationId = allConversations[0].id
682
+ }
683
+ else {
684
+ do {
685
+ let requireToken = await getRequirementToken(driver, bearTokens[0]);
686
+
687
+ let fakeMessage = [
688
+ {
689
+ "id": "aaa24123-607c-48b2-9f0b-ee6ce7a141b3",
690
+ "author": {
691
+ "role": "assistant"
692
+ },
693
+ "content": {
694
+ "content_type": "text",
695
+ "parts": ["Repeat after me", "Hello Handsome Boy"]
696
+ },
697
+ "metadata": {}
698
+ }
699
+ ]
700
+
701
+ conversationId = await postConversation(driver, fakeMessage, bearTokens[0], requireToken);
702
+
703
+ if (!conversationId || conversationId === '' || conversationId === null) {
704
+
705
+ await utils.sleep(1000)
706
+ }
707
+
708
+ } while (!conversationId || conversationId === '' || conversationId === null);
709
+ }
710
+
711
+
712
+ //Post Message
713
+
714
+ let randomUUID;
715
+
716
+ let messages = [];
717
+ let messageIDs = [];
718
+ for (paragraph of myparrams.paragraphs) {
719
+
720
+ randomUUID = uuidv4();
721
+
722
+
723
+
724
+ let message = {
725
+ "id": randomUUID,
726
+ "author": {
727
+ "role": "assistant"
728
+ },
729
+ "content": {
730
+ "content_type": "text",
731
+ "parts": [paragraph.content.replace(/\n/g, "\\n").replace(/"/g, '\\\"')]
732
+ },
733
+ "metadata": {}
734
+ }
735
+
736
+ messages.push(message);
737
+ messageIDs.push(randomUUID);
738
+ }
739
+
740
+ console.log('selected conversationId', conversationId)
741
+ //console.log('messages', JSON.stringify(messages))
742
+
743
+ //POST to ChatGPT, GEN AUdio
744
+ do {
745
+
746
+
747
+ let requireToken = await getRequirementToken(driver, bearTokens[0]);
748
+
749
+ let selectedConversationId = conversationId;
750
+
751
+ conversationId = await postConversation(driver, messages, bearTokens[0], requireToken, selectedConversationId);
752
+
753
+ if (!conversationId || conversationId === '' || conversationId === null) {
754
+
755
+ await utils.sleep(1000)
756
+ }
757
+
758
+ } while (!conversationId || conversationId === '' || conversationId === null);
759
+
760
+ console.log('conversationId', conversationId);
761
+
762
+
763
+ let voices = ['cove', 'ember', 'juniper', 'sky', 'breeze', '__internal_only_shimmer', '__internal_only_santa'];
764
+
765
+ for (messID of messageIDs) {
766
+
767
+ // Call the function
768
+ //var result = await downloadAll(driver, "decfe93d-8df7-446f-a31c-3b85a21ae69e", "27217df8-1963-4014-98e3-9ce94a654012", voices, bearTokens);
769
+ var result = await downloadAll(driver, messID, conversationId, voices, bearTokens);
770
+
771
+ if (result) {
772
+ console.log("Starting uploading to telegram");
773
+
774
+ for (audio of audioList){
775
+ let fileData = audio.audio;
776
+
777
+ // let resultUpload = await uploadToTelegramViaWorker(workerURL, fileData, chatID, TELEGRAM_BOT_TOKEN)
778
+ }
779
+ }
780
+ }
781
+
782
+
783
+
784
+ } catch (error) {
785
+ utils.log("Error CHATGPT:", error);
786
+ } finally {
787
+ await takeScreenShot(driver, '12.1.2.2')
788
+ // await browser.quit(driver, keyCode)
789
+ }
790
+ },
791
+ };
792
+ }
793
+
794
+ return {
795
+ // Get the Singleton instance if it exists
796
+ // or create one if doesn't
797
+ getInstance: function () {
798
+ if (!instance) {
799
+ instance = createInstance();
800
+ }
801
+ return instance;
802
+ },
803
+ };
804
+ })();
805
+
806
+ module.exports = {
807
+ service,
808
+ };
source/Service/Axios.js CHANGED
@@ -3,8 +3,9 @@ const fse = require('fs-extra');
3
  const utils = require('../Helpers/utils');
4
  const CONFIG = JSON.parse(fse.readFileSync('./config.json'))
5
  var END_POINT = CONFIG.END_POINT;
6
-
7
- if (CONFIG.BUILD_ENV !== 'prod') {
 
8
  END_POINT = CONFIG.END_POINT_LOCAL
9
  }
10
 
 
3
  const utils = require('../Helpers/utils');
4
  const CONFIG = JSON.parse(fse.readFileSync('./config.json'))
5
  var END_POINT = CONFIG.END_POINT;
6
+ require('dotenv').config()
7
+ const BUILD_ENV = process.env.BUILD_ENV || 'prod'
8
+ if (BUILD_ENV !== 'prod') {
9
  END_POINT = CONFIG.END_POINT_LOCAL
10
  }
11
 
source/Service/Browser.js CHANGED
@@ -1,396 +1,17 @@
1
- const utils = require('../Helpers/utils')
2
- const fse = require('fs-extra')
3
- const path = require('path')
4
- const webdriver = require('selenium-webdriver');
5
- const chrome = require('selenium-webdriver/chrome');
6
- const browser = require("../Helpers/browser");
7
- const { ServiceBuilder } = require("selenium-webdriver/chrome");
8
- const { exec, execSync } = require('child_process');
9
- const { randomInt } = require('crypto');
10
- const CONFIG = JSON.parse(fse.readFileSync('./config.json'))
11
 
12
  var service = (function () {
13
  // instance stores a reference to the Singleton
14
  var instance
15
-
16
-
17
  function createInstance() {
18
- // private variables and methods
19
- const screenSizes = [
20
- { width: 1366, height: 768 },
21
- { width: 1280, height: 720 },
22
- { width: 1440, height: 900 },
23
- { width: 1600, height: 900 },
24
- { width: 1600, height: 1200 },
25
- { width: 1680, height: 1050 },
26
- { width: 1920, height: 1080 },
27
- { width: 1920, height: 1200 },
28
- { width: 1280, height: 800 },
29
- { width: 1360, height: 768 },
30
- { width: 1440, height: 768 },
31
- { width: 1440, height: 800 },
32
- { width: 1536, height: 864 },
33
- { width: 1600, height: 768 },
34
- { width: 1600, height: 1000 },
35
- { width: 1600, height: 1024 },
36
- { width: 1680, height: 900 },
37
- { width: 1920, height: 900 },
38
- { width: 1920, height: 960 },
39
- { width: 1920, height: 1024 },
40
- ]
41
-
42
- const userAgents = [
43
- // Chrome 104
44
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
45
- // Chrome 103
46
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
47
- // Chrome 102
48
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',
49
- // Chrome 101
50
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36',
51
- // Chrome 100
52
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36',
53
- // Chrome 99
54
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.0.0 Safari/537.36',
55
- // Chrome 98
56
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Safari/537.36',
57
- // Chrome 97
58
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.0.0 Safari/537.36',
59
- // Chrome 96
60
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.0.0 Safari/537.36',
61
- // Chrome 95
62
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Safari/537.36',
63
- // Chrome 94
64
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.0.0 Safari/537.36',
65
- // Chrome 93
66
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36',
67
- // Chrome 92
68
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.0.0 Safari/537.36',
69
- // Chrome 91
70
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.0.0 Safari/537.36',
71
- // Chrome 90
72
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.0.0 Safari/537.36',
73
- // Chrome 89
74
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.0.0 Safari/537.36',
75
- // Chrome 88
76
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.0.0 Safari/537.36',
77
- // Chrome 87
78
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.0.0 Safari/537.36',
79
- // Chrome 86
80
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.0.0 Safari/537.36',
81
- // Chrome 85
82
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.0.0 Safari/537.36',
83
- // Chrome 84
84
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.0.0 Safari/537.36',
85
- // Chrome 83
86
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.0.0 Safari/537.36',
87
- // Chrome 82
88
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/82.0.0.0 Safari/537.36',
89
- // Chrome 81
90
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.0.0 Safari/537.36',
91
- // Chrome 80
92
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.0.0 Safari/537.36',
93
- // Chrome 79
94
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.0.0 Safari/537.36',
95
- // Chrome 78
96
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.0.0 Safari/537.36',
97
- // Chrome 77
98
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.0.0 Safari/537.36',
99
- // Chrome 76
100
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.0.0 Safari/537.36',
101
-
102
- ]
103
-
104
- async function setChromeSize(driver, react) {
105
- try {
106
- await driver.manage().window().setRect(react);
107
- } catch (error) {
108
- utils.log('setChromeSize error :>> ', error);
109
- }
110
- }
111
-
112
- function startDisplay(pid) {
113
- try {
114
- exec(`Xvfb :${pid} -ac -screen 0, 500x500x24`)
115
- let core = (pid % 4 + 1) * 2
116
- let ram = core * (pid % 2 + 1) * 2
117
- execSync(`sed -i '241 s/"value":.*/"value":${core}/' trace/js/background/prefs.js;sed -i '245 s/"value":.*/"value":${ram}/' trace/js/background/prefs.js`)
118
- if (pid % 15 < 0) {
119
- execSync(`sed -i '404 s/"enabled":.*/"enabled":false,/' trace/js/background/prefs.js`)
120
- }
121
- else {
122
- execSync(`sed -i '404 s/"enabled":.*/"enabled":true,/' trace/js/background/prefs.js`)
123
- }
124
- }
125
- catch (e) {
126
- }
127
- }
128
-
129
- function getRandomDevice () {
130
- const randomDevice = mobileDevices[Math.floor(Math.random() * mobileDevices.length)];
131
- utils.log('randomDevice', randomDevice)
132
- return randomDevice
133
- }
134
-
135
- function proxyPlugin(proxy, pid) {
136
- const proxyPath = path.resolve('pluginsDir', 'proxy')
137
- if (!fse.existsSync(proxyPath)) {
138
- fse.mkdirSync(proxyPath)
139
- }
140
-
141
- // each profile has different plugin folder which is basing on pid
142
- var dirPath = path.resolve('pluginsDir', 'proxy', pid.toString())
143
- if (fse.existsSync(dirPath)) {
144
- fse.removeSync(dirPath)
145
- }
146
- fse.mkdirSync(dirPath)
147
-
148
- // Writing JSON
149
- const manifestJson = {
150
- "manifest_version": 2,
151
- "name": "Private Proxy Extension",
152
- "version": "1.0",
153
- "description": "Set up a private proxy.",
154
- "permissions": ["proxy", "storage", "activeTab", "webRequest", "webRequestBlocking", "<all_urls>"],
155
- "background": {
156
- "scripts": ["background.js"]
157
- }
158
- }
159
- fse.writeFileSync(path.join(dirPath, 'manifest.json'), JSON.stringify(manifestJson, null, 2))
160
-
161
- // Writing JS
162
- const backgroundJs = `
163
- chrome.runtime.onInstalled.addListener(function () {
164
- // Set static proxy information
165
- const staticProxyInfo = {
166
- host: "${proxy.server}",
167
- port: "${proxy.port}",
168
- username: "${proxy.username}",
169
- password: "${proxy.password}",
170
- };
171
-
172
- chrome.storage.sync.set({ proxyInfo: staticProxyInfo }, function () {
173
- console.log("Static Proxy information initialized.");
174
- applyProxySettings(staticProxyInfo);
175
- });
176
- });
177
-
178
- // Function to apply static proxy settings
179
- function applyProxySettings(proxyInfo) {
180
- chrome.proxy.settings.set(
181
- {
182
- value: {
183
- mode: "fixed_servers",
184
- rules: {
185
- singleProxy: {
186
- scheme: "http",
187
- host: proxyInfo.host,
188
- port: parseInt(proxyInfo.port),
189
- },
190
- bypassList: ${JSON.stringify(CONFIG.PROXY_BYPASS, null, 2)}
191
- },
192
- },
193
- scope: "regular",
194
- },
195
- function () {
196
- console.log("Static Proxy settings applied.");
197
- }
198
- );
199
-
200
- // Include username and password if available
201
- if (proxyInfo.username && proxyInfo.password) {
202
- chrome.webRequest.onAuthRequired.addListener(
203
- function (details, callback) {
204
- callback({
205
- authCredentials: {
206
- username: proxyInfo.username,
207
- password: proxyInfo.password,
208
- },
209
- });
210
- },
211
- { urls: ["<all_urls>"] },
212
- ["asyncBlocking"]
213
- );
214
- }
215
- }
216
- `;
217
-
218
- fse.writeFileSync(path.join(dirPath, 'background.js'), backgroundJs)
219
- }
220
-
221
- async function getDriver(action, isLoadingAddon = false, hostRule = '', isUsingProxy = false) {
222
- // Set up the Chrome options
223
- const options = new chrome.Options();
224
- options.setChromeBinaryPath(
225
- CONFIG.BUILD_ENV == 'prod' ? '/opt/google/chrome/chrome' : path.resolve("Browser", "gologin", "orbita", 'chrome')
226
- //CONFIG.BUILD_ENV == 'prod' ? '/opt/google/chrome/chrome' : '/home/thai/Downloads/test/twitter-bot-app/Browser/gologin/orbita/chrome'
227
- );
228
- if (CONFIG.BUILD_ENV == 'prod') {
229
- options.addArguments('--disable-render');
230
- options.addArguments('--headless');
231
- }
232
- options.addArguments('--no-sandbox');
233
- options.addArguments('--disable-dev-shm-usage');
234
- options.addArguments('--disable-gpu')
235
- options.addArguments('--disable-sync')
236
- options.addArguments('--disable-infobars');
237
- options.addArguments('--disable-web-security');
238
- options.addArguments('--disable-popup-blocking');
239
- options.addArguments('--disable-blink-features=AutomationControlled');
240
- options.addArguments("--disable-renderer-backgrounding");
241
- options.addArguments("--no-initial-navigation");
242
- options.addArguments("--disable-notifications");
243
- options.addArguments("--animation-duration-scale=0.0");
244
- options.addArguments("--disable-remote-fonts");
245
- options.addArguments("--ignore-certificate-errors");
246
- options.addArguments("--webview-safebrowsing-block-all-resources");
247
- options.addArguments("--network-quiet-timeout=15");
248
- options.addArguments("--enable-low-end-device-mode");
249
- // options.addArguments(`--proxy-bypass-list=${CONFIG.PROXY_BYPASS.join(',')}`);
250
- options.excludeSwitches("enable-automation");
251
- // options.setExperimentalOption
252
- options.setPageLoadStrategy("normal");
253
- options.setUserPreferences({
254
- 'profile.managed_default_content_settings.notifications': 2
255
- })
256
-
257
- // options.setUserPreferences({
258
- // profile: {
259
- // content_settings: {
260
- // exceptions: {
261
- // notifications: {
262
- // ['https://www.google.com,*']:
263
- // {
264
- // "expiration": "0",
265
- // "last_modified": Date.now(),
266
- // "model": 0,
267
- // "setting": 2
268
- // },
269
- // },
270
- // }
271
- // }
272
- // }
273
- // })
274
-
275
- // SET a random UA
276
- const userAgent = userAgents[Math.floor(Math.random() * userAgents.length)];
277
- options.addArguments(`user-agent=${userAgent}`);
278
-
279
- if (hostRule) {
280
- options.addArguments(`--host-rules=MAP ${hostRule} 127.0.0.1:4433`)
281
- }
282
-
283
- // SET folder
284
- let folderPath = path.resolve('storage', 'profiles', action.ip)
285
- if (fse.existsSync(folderPath)) {
286
- // removing folder before working
287
- // fse.removeSync(folderPath)
288
- } else {
289
- fse.mkdirSync(folderPath)
290
- }
291
- options.addArguments(`--user-data-dir=${folderPath}`);
292
-
293
- // CREATE SERVICE
294
- const serviceBuilder = new ServiceBuilder(
295
- CONFIG.BUILD_ENV == 'prod' ? '/work/source/Browser/gologin/chromedriver_114' : path.resolve("Browser", "gologin", "orbita", 'chromedriver')
296
- //CONFIG.BUILD_ENV == 'prod' ? '/work/Browser/gologin/chromedriver_114' : '/home/thai/Downloads/test/twitter-bot-app/Browser/gologin/orbita/chromedriver'
297
- );
298
-
299
-
300
- // serviceBuilder.addArguments(`profiles/${action.ip}`);
301
-
302
- // SET number of SCREEN
303
- process.env.DISPLAY = `:${action.pid}`;
304
-
305
- // CREATE Proxy Plugin
306
- var proxyPluginFolder = []
307
- if (action.proxy && isUsingProxy) {
308
- proxyPlugin(action.proxy, action.pid)
309
- proxyPluginFolder = path.resolve('pluginsDir', 'proxy', action.pid.toString())
310
- }
311
-
312
- // LOAD extensions
313
- if (isLoadingAddon) {
314
- var commonPluginList = []
315
- try {
316
- var pluginsDir = path.resolve('pluginsDir', 'common');
317
- commonPluginList = fse.readdirSync(pluginsDir, {withFileTypes: true}).filter(dirent => dirent.isDirectory())
318
- .map(dirent => pluginsDir + "/" + dirent.name)
319
-
320
- var plugins = commonPluginList
321
- if (CONFIG.BUILD_ENV == 'prod') {
322
- plugins.push(proxyPluginFolder)
323
- }
324
-
325
- if (plugins.length) {
326
- // utils.log('plugins', plugins)
327
- options.addArguments(`--load-extension=${plugins.join(',')}`);
328
- }
329
- } catch (error) {
330
- }
331
- }
332
-
333
-
334
- // Set up the Chrome driver
335
- const driver = new webdriver.Builder()
336
- .forBrowser('chrome')
337
- .setChromeService(serviceBuilder)
338
- .setChromeOptions(options)
339
- .build();
340
-
341
- driver.executeScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
342
-
343
- return driver
344
- }
345
-
346
- async function initAction(action, isLoadingAddon, isHostRules, isUsingProxy) {
347
- console.log('initAction :>> ');
348
- var driver = null
349
- try {
350
- var driver = await getDriver(action, isLoadingAddon, isHostRules, isUsingProxy)
351
- } catch (e) {
352
- // reporting
353
- utils.notifyRaw('[REPORT]\r' + e)
354
- browser.quit(driver, 0)
355
- }
356
- return driver
357
- }
358
-
359
  return {
360
- handle: async (action, script = '') => {
361
  if (script) {
362
  script = require('../Scenario/' + script)
363
- }
364
-
365
- // set display by XVFB
366
- startDisplay(action.pid)
367
-
368
- // Creating Chrome
369
- var driver = await initAction(action, true, '', true)
370
-
371
- // resize window
372
- const react = screenSizes[Math.floor(Math.random() * screenSizes.length)];
373
- await setChromeSize(driver, react)
374
-
375
- if (script) {
376
- // creating scenario
377
- if (driver) {
378
- script.service.getInstance().handle(action, driver)
379
- } else {
380
- await utils.processExit(true, 0, "Browsing is not working");
381
- }
382
  }
383
  },
384
- downloadChrome: () => {
385
- if (CONFIG.BUILD_ENV == 'prod') {
386
- utils.log('downloadChromium :>> ');
387
- try{
388
- execSync('rm -rf /work/source/core.*;rm -rf /work/source/Browser/gologin/core.*;for i in /work/.pm2/logs/*.log; do cat /dev/null > $i; done;')
389
- // execSync('chmod +x get_chromium_beta2.sh')
390
- // execSync('./get_chromium_beta2.sh')
391
- } catch (e) {}
392
- }
393
- }
394
  };
395
  }
396
 
 
1
+ require('dotenv').config()
 
 
 
 
 
 
 
 
 
2
 
3
  var service = (function () {
4
  // instance stores a reference to the Singleton
5
  var instance
 
 
6
  function createInstance() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  return {
8
+ handle: async (params, script = '') => {
9
  if (script) {
10
  script = require('../Scenario/' + script)
11
+ script.service.getInstance().handle(params)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  }
13
  },
14
+
 
 
 
 
 
 
 
 
 
15
  };
16
  }
17
 
source/Service/ChatGpt.js ADDED
@@ -0,0 +1,783 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const utils = require("../Helpers/utils");
2
+ const fse = require("fs-extra");
3
+ const path = require("path");
4
+ const { randomInt } = require("crypto");
5
+ const Puppeteer = require("../Service/Puppeteer");
6
+ const { GenerationParam } = require("../Types/GenerationParam");
7
+ var moment = require("moment"); // require
8
+ const CHATGPT = JSON.parse(
9
+ fse.readFileSync(path.resolve("config", "chatgpt.json"))
10
+ );
11
+
12
+ class ChatGpt {
13
+ /**
14
+ *
15
+ * @param {GenerationParam} params
16
+ */
17
+ constructor(params) {
18
+ this.params = params;
19
+ this.puppeteer = new Puppeteer();
20
+ this.audioStack = new Map();
21
+ this.audioList = new Array();
22
+ this.workerStack = new Map();
23
+ this.workerResultList = new Array();
24
+ this.workerErrorList = new Array();
25
+ this.sessionUrl = CHATGPT.getSessionUrl;
26
+ this.homeUrl = CHATGPT.homeUrl;
27
+ this.endpointAPI = CHATGPT.endpointAPI;
28
+ }
29
+
30
+ checkAACSignature(signature) {
31
+ // Thực hiện kiểm tra signature để xác định liệu nó phù hợp với định dạng AAC hay không
32
+ // Ví dụ: kiểm tra các giá trị của signature để xác định xem chúng có phù hợp với định dạng AAC hay không.
33
+ // Trong trường hợp này, bạn cần kiểm tra các giá trị của signature với các giá trị phổ biến của chữ ký AAC.
34
+ // Ví dụ: 'FF F1', 'FF F9',...
35
+ return signature[0] === 0xFF && (signature[1] === 0xF1 || signature[1] === 0xF9);
36
+ }
37
+
38
+ async accessSite() {
39
+ await this.puppeteer.accessSite(this.sessionUrl);
40
+ }
41
+ // private variables and methods
42
+ async takeScreenShot() {
43
+ try {
44
+ // Save the screenshot to a file
45
+ var now = moment().tz("Asia/Bangkok");
46
+ const screenshotsDir = path.join(
47
+ process.cwd(),
48
+ "storage",
49
+ "screenshots",
50
+ "chatgpt",
51
+ now.format("YYYY_MM_DD").toString()
52
+ );
53
+ if (!fse.existsSync(screenshotsDir)) {
54
+ fse.mkdirSync(screenshotsDir, { recursive: true });
55
+ }
56
+ var rand = randomInt(1000);
57
+ var fileName = `${now.format("HH_mm_ss").toString()}_${rand}.webp`;
58
+
59
+ return await this.puppeteer.takeScreenShot(
60
+ path.join(screenshotsDir, fileName)
61
+ );
62
+ } catch (error) {
63
+ utils.log("Error taking screenshot:", error);
64
+ }
65
+ return "";
66
+ }
67
+
68
+ async convertErrorToResult(error, customMessage) {
69
+ let errorCode = error.response ? error.response.status : "unknown";
70
+
71
+ let errorMessage = `${customMessage}. ErrorCode: ${errorCode} ${error.message}`;
72
+
73
+ if (errorCode === "unknown") {
74
+ errorCode = 500;
75
+ }
76
+
77
+ let result = {
78
+ status: errorCode,
79
+ data: {
80
+ result: "Failed",
81
+ message: errorMessage,
82
+ },
83
+ };
84
+
85
+ return result;
86
+ }
87
+
88
+ async sendReDeployWorker(ids) {
89
+ const fetch = await import("node-fetch");
90
+ let url = this.endpointAPI + "/api/worker-url/redeploy";
91
+
92
+ let result;
93
+ let response;
94
+
95
+ try {
96
+
97
+ let body = {
98
+ ids: ids
99
+ }
100
+
101
+ let options = {
102
+ method: "POST",
103
+ headers: {
104
+ // Add additional headers if necessary
105
+ "User-Agent":
106
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
107
+ Accept: "*/*",
108
+ "Content-Type": "application/json",
109
+ "X-from": "cas",
110
+ },
111
+ redirect: "follow",
112
+ // For an empty body, set the body option to an empty object
113
+ body: JSON.stringify(body),
114
+ };
115
+
116
+ // Make POST request
117
+ response = await fetch.default(url, options);
118
+
119
+ // Handle response
120
+
121
+ let data = JSON.parse(await response.text());
122
+
123
+ } catch (error) {
124
+ }
125
+
126
+ }
127
+
128
+ async sendFailedTask(bodyReport) {
129
+ const fetch = await import("node-fetch");
130
+ let url = this.endpointAPI + "/api/file/failedTask";
131
+
132
+ let result;
133
+ let response;
134
+
135
+ try {
136
+
137
+ let options = {
138
+ method: "POST",
139
+ headers: {
140
+ // Add additional headers if necessary
141
+ "User-Agent":
142
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
143
+ Accept: "*/*",
144
+ "Content-Type": "application/json",
145
+ "X-from": "cas",
146
+ },
147
+ redirect: "follow",
148
+ // For an empty body, set the body option to an empty object
149
+ body: JSON.stringify(bodyReport),
150
+ };
151
+
152
+ // Make POST request
153
+ response = await fetch.default(url, options);
154
+
155
+ // Handle response
156
+
157
+ let data = JSON.parse(await response.text());
158
+
159
+ } catch (error) {
160
+ }
161
+
162
+ }
163
+
164
+ async sendAudioReport(bodyReport) {
165
+ const fetch = await import("node-fetch");
166
+ let url = this.endpointAPI + "/api/file/update";
167
+
168
+ let result;
169
+ let response;
170
+
171
+ try {
172
+
173
+ let options = {
174
+ method: "POST",
175
+ headers: {
176
+ // Add additional headers if necessary
177
+ "User-Agent":
178
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
179
+ Accept: "*/*",
180
+ "Content-Type": "application/json",
181
+ "X-from": "cas",
182
+ },
183
+ redirect: "follow",
184
+ // For an empty body, set the body option to an empty object
185
+ body: JSON.stringify(bodyReport),
186
+ };
187
+
188
+ // Make POST request
189
+ response = await fetch.default(url, options);
190
+
191
+ // Handle response
192
+
193
+ let data = JSON.parse(await response.text());
194
+
195
+
196
+
197
+ } catch (error) {
198
+
199
+ }
200
+
201
+ }
202
+
203
+ /**
204
+ *
205
+ * @param {*} fileData : Unint8 Array
206
+ */
207
+
208
+ async saveAudioToFile(messId, voice_slug, fileData){
209
+ let audioBufferArrays = new Uint8Array(fileData).buffer;
210
+
211
+ let filePath = path.resolve('storage', 'audios', `${messId}_${voice_slug}.aac`)
212
+ await utils.saveBinaryToFile(audioBufferArrays, filePath)
213
+ }
214
+
215
+ async updateSessionToken(bodyReport) {
216
+ const fetch = await import("node-fetch");
217
+ let url = this.endpointAPI + "/api/chat-gpt-token/update";
218
+
219
+ let result;
220
+ let response;
221
+
222
+ try {
223
+ let options = {
224
+ method: "POST",
225
+ headers: {
226
+ // Add additional headers if necessary
227
+ "User-Agent":
228
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
229
+ Accept: "*/*",
230
+ "Content-Type": "application/json",
231
+ "X-from": "cas",
232
+ },
233
+ redirect: "follow",
234
+ // For an empty body, set the body option to an empty object
235
+ body: JSON.stringify(bodyReport),
236
+ };
237
+
238
+ // Make POST request
239
+ response = await fetch.default(url, options);
240
+
241
+ // Handle response
242
+ let data = JSON.parse(await response.text());
243
+ } catch (error) {
244
+ }
245
+ }
246
+
247
+ async uploadToTelegramViaWorker(
248
+ workerId,
249
+ workerURL,
250
+ fileDataArray,
251
+ chatID,
252
+ TELEGRAM_BOT_TOKEN,
253
+ voice_id,
254
+ voice_slug
255
+ ) {
256
+ // Dynamic import statement inside the async function
257
+ const fetch = await import("node-fetch");
258
+
259
+ let url = workerURL + "/uploadBufferToTele";
260
+
261
+ let result;
262
+ let response;
263
+
264
+ try {
265
+ const body = {
266
+ fileData: fileDataArray,
267
+ chatID: chatID,
268
+ TELEGRAM_BOT_TOKEN: TELEGRAM_BOT_TOKEN,
269
+ };
270
+
271
+ let options = {
272
+ method: "POST",
273
+ headers: {
274
+ // Add additional headers if necessary
275
+ "User-Agent":
276
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
277
+ Accept: "*/*",
278
+ "Content-Type": "application/json",
279
+ },
280
+ redirect: "follow",
281
+ // For an empty body, set the body option to an empty object
282
+ body: JSON.stringify(body),
283
+ };
284
+
285
+ // Make POST request
286
+ response = await fetch.default(url, options);
287
+
288
+ // Handle response
289
+
290
+ let data = JSON.parse(await response.text());
291
+
292
+ let fileId = data.fileId;
293
+
294
+ this.workerResultList.push({
295
+ voice_id: voice_id,
296
+ voice_slug: voice_slug,
297
+ audio_cloud_id: TELEGRAM_BOT_TOKEN + '|' + fileId,
298
+ });
299
+
300
+ this.workerStack.delete(voice_slug);
301
+
302
+ } catch (error) {
303
+ let errorCode = error.response ? error.response.status : "unknown";
304
+
305
+ if (errorCode === 503) {
306
+ //redeploy worker
307
+
308
+ console.log('Gửi yêu cầu ReDeploy.')
309
+
310
+ await this.sendReDeployWorker([workerId]);
311
+
312
+ await utils.sleep(10000);
313
+ }
314
+ else {
315
+
316
+ console.log('Upload telegram error');
317
+
318
+ }
319
+
320
+ this.workerErrorList.push({
321
+ voice_id: voice_id,
322
+ voice_slug: voice_slug,
323
+ fileData: fileDataArray,
324
+ chatID: chatID,
325
+ TELEGRAM_BOT_TOKEN: TELEGRAM_BOT_TOKEN
326
+ });
327
+ }
328
+
329
+ }
330
+
331
+ async setCookieGPT(sessionToken) {
332
+ // Tạo cookie
333
+ const cookies = [
334
+ {
335
+ name: "__Secure-next-auth.session-token",
336
+ value: sessionToken,
337
+ domain: "chat.openai.com", // Đặt domain tùy thuộc vào trang web cụ thể
338
+ path: "/",
339
+ expiry: 9999999999, // Đặt thời gian hết hạn của cookie (epoch time)
340
+ },
341
+ ];
342
+
343
+ // Thêm cookie vào trình duyệt
344
+ await this.puppeteer.setCookie(cookies);
345
+ }
346
+
347
+ async deleteGPTCookie() {
348
+ //Delete cookie
349
+ await this.puppeteer.delCookie({
350
+ name: "__Secure-next-auth.session-token",
351
+ domain: "chat.openai.com",
352
+ });
353
+ }
354
+
355
+ async getSpecificCookie(cookieName) {
356
+ const cookies = await this.puppeteer.getCookies(this.homeUrl);
357
+
358
+ const specificCookie = cookies.find(
359
+ (cookie) => cookie.name === cookieName
360
+ );
361
+
362
+ if (specificCookie) {
363
+ return specificCookie.value;
364
+ } else {
365
+ console.log(`Cookie ${cookieName} not found.`);
366
+ return null;
367
+ }
368
+ }
369
+
370
+ async getBearerToken(sessionToken) {
371
+ await this.setCookieGPT(sessionToken);
372
+ const script = `
373
+ (() => {
374
+ return fetch("https://chat.openai.com/api/auth/session", {
375
+ "credentials": "include",
376
+ "headers": {
377
+ "Accept": "*/*",
378
+ "Accept-Language": "en-US,en;q=0.5",
379
+ "Alt-Used": "chx.com",
380
+ "Sec-Fetch-Dest": "empty",
381
+ "Sec-Fetch-Mode": "cors",
382
+ "Sec-Fetch-Site": "same-origin"
383
+ },
384
+ "referrer": "https://chat.openai.com",
385
+ "method": "GET",
386
+ "mode": "cors"
387
+ })
388
+ .then(response => response.json());
389
+ })();
390
+ `;
391
+
392
+ const responseData = await this.puppeteer.executingJS(script);
393
+ let newCookie = await this.getSpecificCookie(
394
+ "__Secure-next-auth.session-token"
395
+ );
396
+
397
+ const result = {
398
+ newcookie: newCookie,
399
+ responseData: responseData,
400
+ };
401
+
402
+ await this.deleteGPTCookie();
403
+
404
+ return result;
405
+ }
406
+
407
+ async getRequirementToken(bearToken) {
408
+ const script = `
409
+ (() => {
410
+ return fetch("https://chat.openai.com/backend-api/sentinel/chat-requirements", {
411
+ "credentials": "include",
412
+ "headers": {
413
+ "Accept": "*/*",
414
+ "Accept-Language": "en-US,en;q=0.5",
415
+ "OAI-Language": "en-US",
416
+ "Authorization": "Bearer ${bearToken}",
417
+ "OAI-Device-Id": "d8e8a53e-700d-4baf-b15f-171a77737a49",
418
+ "Content-Type": "application/json",
419
+ "Alt-Used": "chat.openai.com",
420
+ "Sec-Fetch-Dest": "empty",
421
+ "Sec-Fetch-Mode": "cors",
422
+ "Sec-Fetch-Site": "same-origin"
423
+ },
424
+ "referrer": "https://chat.openai.com/",
425
+ "body": "{}",
426
+ "method": "POST",
427
+ "mode": "cors"
428
+ })
429
+ .then(response => response.json());
430
+ })();
431
+ `;
432
+
433
+ const requirementToken = await this.puppeteer.executingJS(script);
434
+
435
+ if (requirementToken.token) {
436
+ return requirementToken.token;
437
+ } else {
438
+ console.log("Cloudflare. Retried after 2 second.");
439
+ await utils.sleep(2000);
440
+ return await this.getRequirementToken(bearToken);
441
+ }
442
+ }
443
+
444
+ async getAllConversations(bearToken) {
445
+ const script = `
446
+ (() => {
447
+ return fetch("https://chat.openai.com/backend-api/conversations?offset=0&limit=28&order=updated", {
448
+ "credentials": "include",
449
+ "headers": {
450
+ "Accept": "*/*",
451
+ "Accept-Language": "en-US,en;q=0.5",
452
+ "OAI-Language": "en-US",
453
+ "Authorization": "Bearer ${bearToken}",
454
+ "Alt-Used": "chat.openai.com",
455
+ "Sec-Fetch-Dest": "empty",
456
+ "Sec-Fetch-Mode": "cors",
457
+ "Sec-Fetch-Site": "same-origin"
458
+ },
459
+ "referrer": "https://chat.openai.com/",
460
+ "method": "GET",
461
+ "mode": "cors"
462
+ })
463
+ .then(response => response.json());
464
+ })();
465
+ `;
466
+
467
+ const responseData = await this.puppeteer.executingJS(script);
468
+
469
+ return responseData.items;
470
+ }
471
+
472
+ async postConversation(
473
+ message,
474
+ bearToken,
475
+ requirementToken,
476
+ conversationId = null
477
+ ) {
478
+ let body = JSON.stringify({
479
+ action: "next",
480
+ messages: message,
481
+ conversation_id: conversationId,
482
+ parent_message_id: "aaa142b6-d456-401a-bee5-f741c4271320",
483
+ model: "text-davinci-003-render-sha",
484
+ timezone_offset_min: -420,
485
+ history_and_training_disabled: false,
486
+ force_paragen: false,
487
+ model_slug: "text-davinci-003-render-sha",
488
+ force_paragen_model_slug: "text-davinci-003-render-sha",
489
+ force_nulligen: false,
490
+ force_rate_limit: false,
491
+ websocket_request_id: "8cf0ba98-12dd-43ea-bd21-a2261f74c423",
492
+ });
493
+
494
+ // Chuyển chuỗi JSON thành một chuỗi JavaScript
495
+ let bodyAsString = `"${body.replace(/"/g, '\\"')}"`;
496
+
497
+ bodyAsString = bodyAsString.replace(/\\\\"/g, '\\"');
498
+
499
+ const script = `
500
+ (async () => {
501
+ async function getSseData() {
502
+ try {
503
+ const response = await fetch("https://chat.openai.com/backend-api/conversation", {
504
+ "credentials": "include",
505
+ "headers": {
506
+ "content-type": "application/json",
507
+ "Accept": "*/*",
508
+ "Accept-Language": "en-US,en;q=0.5",
509
+ "OAI-Language": "en-US",
510
+ "Authorization": "Bearer ${bearToken}",
511
+ "Alt-Used": "chat.openai.com",
512
+ "Sec-Fetch-Dest": "empty",
513
+ "Sec-Fetch-Mode": "cors",
514
+ "Sec-Fetch-Site": "same-origin",
515
+ "openai-sentinel-chat-requirements-token": "${requirementToken}"
516
+ },
517
+ "referrer": "https://chat.openai.com/",
518
+ "method": "POST",
519
+ "mode": "cors",
520
+ "body": ${bodyAsString}
521
+ });
522
+
523
+ const reader = response.body.getReader();
524
+ let firstEvent = '';
525
+
526
+ // Read the response stream until we get the first event
527
+ while (true) {
528
+ const { done, value } = await reader.read();
529
+ if (done) {
530
+ break;
531
+ }
532
+ const chunk = new TextDecoder().decode(value);
533
+ firstEvent += chunk;
534
+ if (firstEvent.includes("\\n\\n")) {
535
+ // Found the end of the first event, stop reading
536
+ break;
537
+ }
538
+ }
539
+
540
+ // Parse the first event
541
+ const conversationId = parseSseData(firstEvent);
542
+ return conversationId;
543
+ } catch (error) {
544
+ console.error(error);
545
+ return null;
546
+ }
547
+ }
548
+
549
+ function parseSseData(body) {
550
+ const data = {};
551
+
552
+ body.split("\\n\\n").some(line => {
553
+ if (line.trim()!== '') {
554
+ try {
555
+ const eventData = JSON.parse(line.replace(/^data: /, ''));
556
+ data.conversation_id = eventData.conversation_id;
557
+ } catch (error) {
558
+ console.error('Error parsing SSE data:', error);
559
+ }
560
+ return true; // Stop parsing after the first event
561
+ }
562
+ return false;
563
+ });
564
+
565
+ if (data.conversation_id) {
566
+ return data.conversation_id;
567
+ } else {
568
+ return null;
569
+ }
570
+ }
571
+
572
+ // Call getSseData with a callback function
573
+ return getSseData();
574
+ })();
575
+ `;
576
+
577
+
578
+ const responseData = await this.puppeteer.executingJS(script);
579
+
580
+ return responseData;
581
+ }
582
+
583
+ async sendFinishTask(finishTaskBody, botname) {
584
+ const fetch = await import("node-fetch");
585
+ let url = this.endpointAPI + `/api/node/update/${botname}`;
586
+
587
+ let result;
588
+ let response;
589
+
590
+ try {
591
+
592
+ let options = {
593
+ method: "POST",
594
+ headers: {
595
+ // Add additional headers if necessary
596
+ "User-Agent":
597
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
598
+ Accept: "*/*",
599
+ "Content-Type": "application/json",
600
+ "X-from": "cas",
601
+ },
602
+ redirect: "follow",
603
+ // For an empty body, set the body option to an empty object
604
+ body: JSON.stringify(finishTaskBody),
605
+ };
606
+
607
+ // Make POST request
608
+ response = await fetch.default(url, options);
609
+
610
+ // Handle response
611
+
612
+ //let data = JSON.parse(await response.text());
613
+
614
+ } catch (error) {
615
+ }
616
+
617
+ }
618
+
619
+ // async finishTask(){
620
+ // method: POST
621
+ // {{localhost}}/api/node/update/{node_name}
622
+ // {
623
+ // "note": "Test",
624
+ // "status": "1"
625
+ // "file_ids": [1,2,3]
626
+ // }
627
+ // }
628
+
629
+ async downloadAudio(bearToken, message_id, conversation_id, voice) {
630
+ const script = `
631
+ (async () => {
632
+ async function getAudio() {
633
+ try {
634
+ let response = await fetch('https://chat.openai.com/backend-api/synthesize?message_id=${message_id}&conversation_id=${conversation_id}&voice=${voice.voice_slug}', {
635
+ "credentials": "include",
636
+ "headers": {
637
+ "Accept": "*/*",
638
+ "Accept-Language": "en-US,en;q=0.5",
639
+ "OAI-Language": "en-US",
640
+ "Authorization": "Bearer ${bearToken}",
641
+ "OAI-Device-Id": "d8e8a53e-700d-4baf-b15f-171a77737a49",
642
+ "Sec-Fetch-Dest": "empty",
643
+ "Sec-Fetch-Mode": "cors",
644
+ "Sec-Fetch-Site": "same-origin"
645
+ },
646
+ "referrer": "https://chat.openai.com/c/${conversation_id}",
647
+ "method": "GET",
648
+ "mode": "cors"
649
+ });
650
+ const result = await response.arrayBuffer();
651
+ const uint8Array = new Uint8Array(result); // Convert to Uint8Array
652
+ return Array.from(uint8Array); // Return the result
653
+ } catch (error) {
654
+ console.error(error);
655
+ return null; // Return null on error
656
+ }
657
+ }
658
+
659
+ // Call getAudio with callback function
660
+ return getAudio();
661
+ })();
662
+ `;
663
+
664
+ let audio = await this.puppeteer.executingJS(script);
665
+
666
+ if (audio !== null && audio.length > 5000) {
667
+ // Lấy 2 byte đầu tiên
668
+ const signature = audio.slice(0, 2);
669
+ let isValidAudio = this.checkAACSignature(signature);
670
+
671
+ if (isValidAudio) {
672
+ this.audioStack.delete(voice.voice_slug);
673
+
674
+ this.audioList.push({
675
+ voice,
676
+ audio,
677
+ });
678
+ }
679
+
680
+
681
+ } else {
682
+ await utils.sleep(1000);
683
+ console.log('Download Audio lỗi. Retry')
684
+ this.downloadAudio(bearToken, message_id, conversation_id, voice);
685
+ }
686
+ }
687
+
688
+ async downloadAll(messageId, conversationId, voices, bearTokens) {
689
+ let currentIndex = 0;
690
+
691
+ for (let i = 0; i < voices.length; i++) {
692
+ let voice = voices[i];
693
+ let tokenTemp =
694
+ currentIndex < bearTokens.length
695
+ ? bearTokens[currentIndex]
696
+ : "";
697
+ if (tokenTemp) {
698
+ this.audioStack.set(voice.voice_slug, true);
699
+ this.downloadAudio(tokenTemp, messageId, conversationId, voice);
700
+
701
+ currentIndex++;
702
+ } else {
703
+ await utils.sleep(3000);
704
+ currentIndex = 0;
705
+ i--;
706
+ }
707
+ }
708
+ while (this.audioStack.size > 0) {
709
+ await utils.sleep(2000);
710
+ }
711
+ return true;
712
+ }
713
+
714
+ getSessionUrl() {
715
+ return this.sessionUrl;
716
+ }
717
+
718
+ getTelegrams(index, resetIndex = false) {
719
+ let result = {
720
+ resetIndex: resetIndex,
721
+ telegramBot: null
722
+ }
723
+
724
+ if (this.params.telegramBots !== undefined && this.params.telegramBots.length) {
725
+ result.telegramBot = this.params.telegramBots[index] !== undefined ? this.params.telegramBots[index] : null
726
+ if (!result.telegramBot) {
727
+ return this.getTelegrams(0, true)
728
+ }
729
+ }
730
+
731
+ return result
732
+ }
733
+ getWorkers(index, resetIndex = false) {
734
+ let result = {
735
+ resetIndex: resetIndex,
736
+ worker: null
737
+ }
738
+
739
+ if (this.params.workers !== undefined && this.params.workers.length) {
740
+ result.worker = this.params.workers[index] !== undefined ? this.params.workers[index] : null
741
+ if (!result.worker) {
742
+ return this.getWorkers(0, true)
743
+ }
744
+ }
745
+
746
+ return result
747
+ }
748
+
749
+ resetAudioList() {
750
+ this.audioList = new Array()
751
+ }
752
+
753
+ resetAudioStack() {
754
+ this.audioStack = new Map()
755
+ }
756
+
757
+ getWorkerResultList() {
758
+ return this.workerResultList;
759
+ }
760
+
761
+ getWorkerStack() {
762
+ return this.workerStack;
763
+ }
764
+
765
+ resetWorkerResultList() {
766
+ this.workerResultList = new Array();
767
+ }
768
+
769
+ resetWorkerStack() {
770
+ this.workerStack = new Map();
771
+ }
772
+
773
+ resetWorkerErrorList() {
774
+ this.workerErrorList = new Array();
775
+ }
776
+
777
+ getWorkerErrorList() {
778
+ return this.workerErrorList;
779
+ }
780
+
781
+ }
782
+
783
+ module.exports = ChatGpt;
source/Service/Express.js CHANGED
@@ -11,7 +11,10 @@ class ExpressServer {
11
  constructor(port) {
12
  this.port = port;
13
  this.app = express();
14
- this.httpsOptions = {};
 
 
 
15
  this.server = https.createServer(this.httpsOptions, this.app);
16
  // Serve static files from the "storage/screenshots" directory
17
  this.app.use(
@@ -34,153 +37,10 @@ class ExpressServer {
34
  utils.log(`Server started on port ${ipAddress}:${this.port}`);
35
  });
36
 
37
-
38
  this.app.get("/", (req, res) => {
39
  res.send("Hello, world!!!!");
40
  });
41
- this.app.get("/call", (req, res) => {
42
- var taskScript = path.resolve("apps", "handleTask.js");
43
-
44
- // Create a new child process to execute the asynchronous task
45
- const childProcess = fork(taskScript); // Path to the file where you define the asynchronous task
46
-
47
- // Listen for messages from the child process
48
- childProcess.on('message', message => {
49
- console.log('Message from child process:', message);
50
- res.send("Done!!!!"); // Send response to the client after the task is done
51
- });
52
-
53
- // Handle errors from the child process
54
- childProcess.on('error', err => {
55
- console.error('Error in child process:', err);
56
- res.status(500).send('Internal Server Error');
57
- });
58
-
59
- // Send a message to the child process to start the task
60
- childProcess.send({ action: 'startTask' });
61
- });
62
-
63
- // screenshot page
64
- // Define a route that shows the image gallery
65
- this.app.get("/screenshots/:folder?/:sub_folder?", (req, res) => {
66
- const folder = req.params.folder || "";
67
- const sub_folder = req.params.sub_folder || "";
68
- const folderPath = path.resolve(
69
- "storage",
70
- "screenshots",
71
- folder,
72
- sub_folder
73
- );
74
- const baseUrl = url.format({
75
- protocol: req.protocol,
76
- host: req.get("host"),
77
- pathname: req.originalUrl.split("?")[0],
78
- });
79
-
80
- // Read the contents of the current folder
81
- fs.readdir(folderPath, { withFileTypes: true }, (err, files) => {
82
- if (err) {
83
- console.error(err);
84
- res.status(500).send("Internal Server Error");
85
- return;
86
- }
87
-
88
- // Filter out any files that are not subfolders
89
- const subfolders = files.filter((file) => file.isDirectory());
90
-
91
- // Generate HTML for the subfolder list
92
- const sidebarHtml = `
93
- <ul>
94
- ${subfolders
95
- .map(
96
- (subfolder) =>
97
- `<li><a href="${url.resolve(
98
- baseUrl,
99
- path.join("/screenshots", folder, subfolder.name)
100
- )}">${subfolder.name}</a></li>`
101
- )
102
- .join("")}
103
- </ul>
104
- `;
105
-
106
- // Generate HTML for the image gallery
107
- const galleryHtml = `
108
- <!DOCTYPE html>
109
- <html>
110
- <head>
111
- <title>Image Gallery</title>
112
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/lightbox2@2.11.4/dist/css/lightbox.min.css">
113
- <style>
114
- body {
115
- display: flex;
116
- }
117
-
118
- aside {
119
- flex-basis: 20%;
120
- padding: 1rem;
121
- }
122
-
123
- main {
124
- flex-basis: 80%;
125
- padding: 1rem;
126
- }
127
- </style>
128
- </head>
129
- <body>
130
- <aside>
131
- <h2>Subfolders</h2>
132
- ${sidebarHtml}
133
- </aside>
134
- <main>
135
- <h1>Image Gallery</h1>
136
- <div>
137
- ${files
138
- .filter((file) => file.isFile())
139
- .map(
140
- (file) =>
141
- `<a href="${url.resolve(
142
- baseUrl,
143
- path.join(
144
- "/screenshots",
145
- folder,
146
- sub_folder,
147
- file.name
148
- )
149
- )}" data-lightbox="gallery"><img width="100" height="100" src="${url.resolve(
150
- baseUrl,
151
- path.join(
152
- "/screenshots",
153
- folder,
154
- sub_folder,
155
- file.name
156
- )
157
- )}" /></a>`
158
- )
159
- .join("")}
160
- </div>
161
- </main>
162
- <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js" integrity="sha512-3gJwYpMe3QewGELv8k/BX9vcqhryRdzRMxVfq6ngyWXwo03GFEzjsUm8Q7RZcHPHksttq7/GFoxjCVUjkjvPdw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
163
- <script src="https://cdn.jsdelivr.net/npm/lightbox2@2.11.4/dist/js/lightbox.min.js"></script>
164
- <script>
165
- lightbox.option({
166
- 'resizeDuration': 200,
167
- 'wrapAround': true
168
- })
169
- </script>
170
- </body>
171
- </html>
172
- `;
173
-
174
- // Send the HTML response
175
- res.send(galleryHtml);
176
- });
177
- });
178
 
179
- this.app.get("/:id/:filename", (req, res) => {
180
- var id = req.params.id;
181
- var filename = req.params.filename;
182
- res.send("Hello, world! " + id + " - " + filename);
183
- });
184
  }
185
 
186
  get(path, handler) {
 
11
  constructor(port) {
12
  this.port = port;
13
  this.app = express();
14
+ this.httpsOptions = {
15
+ key: fs.readFileSync(path.resolve("ssh_key", "index.key")),
16
+ cert: fs.readFileSync(path.resolve("ssh_key", "index.crt")),
17
+ };
18
  this.server = https.createServer(this.httpsOptions, this.app);
19
  // Serve static files from the "storage/screenshots" directory
20
  this.app.use(
 
37
  utils.log(`Server started on port ${ipAddress}:${this.port}`);
38
  });
39
 
 
40
  this.app.get("/", (req, res) => {
41
  res.send("Hello, world!!!!");
42
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
 
 
 
 
 
 
44
  }
45
 
46
  get(path, handler) {
source/Service/Init.js CHANGED
@@ -23,9 +23,13 @@ var service = (function () {
23
  initDir: (folders) => {
24
  utils.log('initDir :>> ');
25
  if (!fse.existsSync(path.resolve('storage'))) {
 
26
  fse.mkdirSync(`storage`);
 
27
  }
 
28
  if (folders.length) {
 
29
  folders.forEach(folder => {
30
  if (fse.existsSync(path.resolve('storage', folder))) {
31
  if (!CONFIG.KEPT_FOLDER.includes(folder)) {
 
23
  initDir: (folders) => {
24
  utils.log('initDir :>> ');
25
  if (!fse.existsSync(path.resolve('storage'))) {
26
+
27
  fse.mkdirSync(`storage`);
28
+
29
  }
30
+
31
  if (folders.length) {
32
+
33
  folders.forEach(folder => {
34
  if (fse.existsSync(path.resolve('storage', folder))) {
35
  if (!CONFIG.KEPT_FOLDER.includes(folder)) {
source/Service/Puppeteer.js ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const puppeteer = require("puppeteer-extra");
2
+ const os = require('os');
3
+
4
+ class Puppeteer {
5
+ constructor() {
6
+ // Enable stealth plugin with all evasions
7
+ this.puppeteer = puppeteer.use(
8
+ require("puppeteer-extra-plugin-stealth")()
9
+ );
10
+
11
+ this.browser = null;
12
+ this.page = null;
13
+ this.options = {
14
+ //executablePath: process.env.CHROME_BIN,
15
+ //executablePath: '/chrome/chrome',
16
+ headless: false,
17
+ args: [
18
+ "--ignore-certificate-errors",
19
+ "--window-size=1024,768",
20
+ "--no-sandbox",
21
+ "--disable-setuid-sandbox",
22
+ "--disable-dev-shm-usage",
23
+ "--disable-accelerated-2d-canvas",
24
+ "--no-first-run",
25
+ "--no-zygote",
26
+ "--single-process", // <- this one doesn't work in Windows
27
+ "--disable-gpu",
28
+ ],
29
+ ignoreHTTPSErrors: true,
30
+ ignoreDefaultArgs: ["--disable-extensions"],
31
+ };
32
+
33
+ if (os.platform() === 'linux') {
34
+ // Xử lý cho hệ điều hành Linux
35
+ console.log('Running on Linux');
36
+ this.options.executablePath = process.env.CHROME_BIN;
37
+ } else if (os.platform() === 'win32') {
38
+ // Xử lý cho hệ điều hành Windows
39
+ console.log('Running on Windows');
40
+ //this.options.executablePath = '/chrome/chrome.exe';
41
+ }
42
+ }
43
+
44
+ async initAction() {
45
+
46
+ return await this.puppeteer.launch(this.options);
47
+ }
48
+
49
+ async getCookies(url) {
50
+ // Set the cookies on the page
51
+ return await this.page.cookies(url);
52
+ }
53
+
54
+ async setCookie(cookies) {
55
+ // Set the cookies on the page
56
+ await this.page.setCookie(...cookies);
57
+ }
58
+
59
+ async delCookie(cookie) {
60
+ // Set the cookies on the page
61
+ await this.page.deleteCookie(cookie);
62
+ }
63
+
64
+ async accessSite(url, cookieJsonFile = "") {
65
+ if (this.browser == null) {
66
+ this.browser = await this.initAction();
67
+ }
68
+
69
+ this.page = await this.browser.newPage();
70
+ if (cookieJsonFile) {
71
+ // Parse the text file as JSON
72
+ const cookies = JSON.parse(cookieJsonFile);
73
+ await this.setCookie(cookies);
74
+ }
75
+
76
+ const response = await this.page.goto(url, {
77
+ waitUntil: "domcontentloaded",
78
+ });
79
+
80
+ // const html = await this.page.content();
81
+ return response;
82
+ }
83
+ async takeScreenShot(screenshotPath) {
84
+ await this.page.screenshot({ path: screenshotPath });
85
+ return screenshotPath;
86
+ }
87
+
88
+ async executingJS(script) {
89
+ return await this.page.evaluate(script);
90
+ }
91
+
92
+ async close() {
93
+ await this.browser.close();
94
+ }
95
+
96
+ getBrowser() {
97
+ return this.browser;
98
+ }
99
+
100
+ getPage() {
101
+ return this.page;
102
+ }
103
+
104
+ getOptions() {
105
+ return this.options;
106
+ }
107
+ }
108
+
109
+ module.exports = Puppeteer;
source/Service/Task.js CHANGED
@@ -1,55 +1,36 @@
1
  const utils = require("../Helpers/utils");
2
  const fse = require("fs-extra");
3
  const path = require("path");
4
- const { spawn } = require("child_process");
5
  const os = require("os");
6
  const { Buffer } = require("buffer");
7
  const { random } = require("lodash");
 
8
 
 
9
  const CONFIG = JSON.parse(fse.readFileSync("./config.json"));
10
  const MAX_PROCESS = CONFIG.MAX_PROCESS;
11
  const RUNNING_CHECK_INTERVAL = CONFIG.WAITING_TIME_NEXT_PROCESS * 1000; // seconds
 
12
 
13
  var service = (function () {
14
  // instance stores a reference to the Singleton
15
  var instance;
16
- var thresholdToReset = 350;
17
  var totalProcesses = 0;
18
  var currentProcesses = 0;
19
  var currentPid = 0;
20
  var maxPid = 8;
21
  var processesIds = [];
22
- const MyAxios = require("./Axios");
23
 
24
  function createInstance() {
25
  // private variables and methods
26
 
27
- /**
28
- * Fetching Task List
29
- */
30
- async function _fetchTask(country_code) {
31
- let result = await MyAxios.service
32
- .getInstance()
33
- .get("task", { country_code });
34
- return result;
35
- }
36
-
37
- /**
38
- * Reporting task
39
- * @param number id
40
- * @returns
41
- */
42
- async function _reportTask(id) {
43
- var result = await MyAxios.service
44
- .getInstance()
45
- .get("report_task", { id });
46
- console.log("_reportTask :>> ", result);
47
- }
48
-
49
  /**
50
  * Starting Process
 
 
51
  */
52
- async function startChildProcesses() {
53
  try {
54
  currentProcesses++;
55
  totalProcesses++;
@@ -59,135 +40,67 @@ var service = (function () {
59
  currentPid = 0;
60
  }
61
 
62
- // check app.lock
63
- if (fse.existsSync(path.resolve("app.lock"))) {
64
- await utils.notifyRaw(
65
- "APP is LOCKED for some reason: checking and updating"
66
- );
67
- return;
68
- }
69
-
70
  //double check
71
  if (currentProcesses > MAX_PROCESS) {
72
  currentProcesses--;
73
  return;
74
  }
75
 
76
- // Hard-coded proxy information for non-prod environment
77
- var resultProxy = {
78
- ipAddress: "2602:fafe:18:8d8a:e8b3:f993:d12e:4866",
79
- proxyUrl: "http://user49148:NwBlxe4sif@23.142.83.208:49148",
80
- username: "user49148",
81
- password: "NwBlxe4sif",
82
- server: "23.142.83.208",
83
- port: "49148",
84
- };
85
-
86
- // Use ProxyService to get proxy information in prod environment
87
- // var resultProxy = await ProxyService.service
88
- // .getInstance()
89
- // .gettingIpByProxy(
90
- // server,
91
- // port,
92
- // username,
93
- // password,
94
- // format
95
- // );
96
-
97
- var ipAddress = resultProxy.ipAddress;
98
- if (!ipAddress) {
99
- await utils.notifyRaw("No ipAddress");
100
- currentProcesses--;
101
- return;
102
- }
103
-
104
  var taskScript = path.resolve("apps", "chatgpt.js");
105
 
106
- // Creating action
107
- const action = JSON.stringify({
108
- pid: currentPid.toString(),
109
- ip: utils.replaceAll(ipAddress, ".", "_"),
110
- proxy: resultProxy,
111
- });
112
- const actionBase64String = Buffer.from(
113
- action,
114
- "utf-8"
115
- ).toString("base64");
116
- const args = [taskScript, actionBase64String];
117
 
118
  // Starting process
119
- spawnChildProcesses(args);
120
  } catch (error) {
121
  currentProcesses--;
122
- await utils.notifyRaw(`error process: ${error}`);
123
- console.log('error :>> ', error);
124
  }
125
  }
126
 
127
  // Function to spawn child processes
128
- async function spawnChildProcesses(args) {
129
- await utils.sleep(1000);
130
- const child = spawn("node", args);
131
- processesIds.push(child);
132
-
133
- child.stdout.on("data", (data) => {
134
- const buffer = Buffer.from(data, "utf-8");
135
- // Convert the buffer to a string with the appropriate encoding (e.g., 'utf-8')
136
- const messageString = buffer.toString("utf-8");
137
- utils.log(messageString);
138
  });
139
 
140
- child.on("close", async (code) => {
141
- if (CONFIG.BUILD_ENV == "prod") {
142
- currentProcesses--;
143
- if (currentProcesses < 0) {
144
- currentProcesses = 0;
145
- }
146
- }
147
  });
148
 
149
- child.stderr.on("data", (data) => {
150
- utils.log(`stderr: ${data}`);
151
- if (CONFIG.BUILD_ENV == "prod") {
152
- currentProcesses--;
153
- if (currentProcesses < 0) {
154
- currentProcesses = 0;
155
- }
156
- }
157
  });
158
 
159
- child.on("exit", (code, signal) => {
160
- utils.log(
161
- `exit - child process exited with code ${code} and signal ${signal}`
 
 
 
162
  );
163
  });
164
  return child;
165
  }
166
 
167
- // Function to stop all child processes except the main process
168
- function stopChildProcesses() {
169
- // Loop through child processes and terminate them
170
- processesIds.forEach((childProcess) => {
171
- try {
172
- if (
173
- childProcess.pid &&
174
- !child.killed &&
175
- childProcess.pid !== process.pid
176
- ) {
177
- childProcess.kill();
178
- }
179
- } catch (error) {}
180
- });
181
- }
182
-
183
  return {
184
  // public methods and variables
185
- gettingTask: (country_code) => {
186
- return _fetchTask(country_code);
187
- },
188
-
189
- handle: async () => {
190
- startChildProcesses();
191
  },
192
  };
193
  }
 
1
  const utils = require("../Helpers/utils");
2
  const fse = require("fs-extra");
3
  const path = require("path");
4
+ const { spawn, fork } = require("child_process");
5
  const os = require("os");
6
  const { Buffer } = require("buffer");
7
  const { random } = require("lodash");
8
+ const { GenerationParam } = require("../Types/GenerationParam");
9
 
10
+ require("dotenv").config();
11
  const CONFIG = JSON.parse(fse.readFileSync("./config.json"));
12
  const MAX_PROCESS = CONFIG.MAX_PROCESS;
13
  const RUNNING_CHECK_INTERVAL = CONFIG.WAITING_TIME_NEXT_PROCESS * 1000; // seconds
14
+ const BUILD_ENV = process.env.BUILD_ENV || "prod";
15
 
16
  var service = (function () {
17
  // instance stores a reference to the Singleton
18
  var instance;
 
19
  var totalProcesses = 0;
20
  var currentProcesses = 0;
21
  var currentPid = 0;
22
  var maxPid = 8;
23
  var processesIds = [];
 
24
 
25
  function createInstance() {
26
  // private variables and methods
27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  /**
29
  * Starting Process
30
+ *
31
+ * @param {GenerationParam} params
32
  */
33
+ async function startChildProcesses(params) {
34
  try {
35
  currentProcesses++;
36
  totalProcesses++;
 
40
  currentPid = 0;
41
  }
42
 
 
 
 
 
 
 
 
 
43
  //double check
44
  if (currentProcesses > MAX_PROCESS) {
45
  currentProcesses--;
46
  return;
47
  }
48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  var taskScript = path.resolve("apps", "chatgpt.js");
50
 
51
+ // Creating data
52
+ const data = JSON.stringify(params);
53
+ const actionBase64String = Buffer.from(data, "utf-8").toString(
54
+ "base64"
55
+ );
56
+ const args = [actionBase64String];
 
 
 
 
 
57
 
58
  // Starting process
59
+ spawnChildProcesses(taskScript, args);
60
  } catch (error) {
61
  currentProcesses--;
 
 
62
  }
63
  }
64
 
65
  // Function to spawn child processes
66
+ async function spawnChildProcesses(taskScript, args) {
67
+ const child = fork(taskScript, args);
68
+ child.on("start", (data) => {
69
+ console.log("Child process started:", data);
 
 
 
 
 
 
70
  });
71
 
72
+ child.on("exit", (code, signal) => {
73
+ console.log(
74
+ "Child process exited with code:",
75
+ code,
76
+ "and signal:",
77
+ signal
78
+ );
79
  });
80
 
81
+ child.on("error", (error) => {
82
+ console.error("Child process encountered an error:", error);
 
 
 
 
 
 
83
  });
84
 
85
+ child.on("close", (code, signal) => {
86
+ console.log(
87
+ "Child process closed with code:",
88
+ code,
89
+ "and signal:",
90
+ signal
91
  );
92
  });
93
  return child;
94
  }
95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  return {
97
  // public methods and variables
98
+ /**
99
+ *
100
+ * @param {GenerationParam} params
101
+ */
102
+ handle: async (params) => {
103
+ await startChildProcesses(params);
104
  },
105
  };
106
  }
source/Types/GenerationParam.js ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ "use strict";
2
+ exports.__esModule = true;
source/Types/GenerationParam.ts ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export interface GenerationParam {
2
+ telegramBots: TelegramBot[]
3
+ sessionTokens: SessionToken[]
4
+ workers: Worker[]
5
+ paragraphs: Paragraph[]
6
+ voices: Voice[]
7
+ }
8
+
9
+ export interface TelegramBot {
10
+ id: number
11
+ chatID: string
12
+ TELEGRAM_BOT_TOKEN: string
13
+ }
14
+
15
+ export interface SessionToken {
16
+ id: number
17
+ session: string
18
+ }
19
+
20
+ export interface Worker {
21
+ id: number
22
+ url: string
23
+ }
24
+
25
+ export interface Paragraph {
26
+ id: number
27
+ content: string
28
+ }
29
+
30
+ export interface Voice {
31
+ voice_id: number
32
+ voice_slug: string
33
+ }
source/app.js CHANGED
@@ -5,13 +5,54 @@ const version = "1.1.1";
5
  const express = require("express");
6
  const bodyParser = require("body-parser");
7
  const path = require("path");
 
8
  const url = require("url");
9
  const fs = require("fs");
 
10
  const { fork } = require("child_process");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
  // Khởi tạo Express app
13
- const app = express();
14
- const port = 7860;
 
 
 
 
 
15
 
16
  // create application/json parser
17
  var jsonParser = bodyParser.json();
@@ -21,37 +62,24 @@ var urlencodedParser = bodyParser.urlencoded({
21
  extended: false,
22
  });
23
 
24
- // app.get("/:id/:filename", (req, res) => {
25
- // var id = req.params.id;
26
- // var filename = req.params.filename;
27
- // res.send("Hello, world! " + id + " - " + filename);
28
- // });
29
-
30
  // Handling GET requests to the root URL ('/')
31
  app.get("/", (req, res) => {
32
  res.send("Welcome to the Hugging Face API: " + version);
33
  });
34
 
35
  // Xử lý các request POST đến '/api'
36
- app.post("/downloadGPT", jsonParser, (req, res) => {
37
  try {
38
- var taskScript = path.resolve("pup.js");
39
-
40
- // Create a new child process to execute the asynchronous task
41
- const childProcess = fork(taskScript); // Path to the file where you define the asynchronous task
42
 
43
- // Listen for messages from the child process
44
- childProcess.on("message", (message) => {
45
- // You can handle messages from the child process here if needed
46
- });
47
-
48
- // Handle errors from the child process
49
- childProcess.on("error", (err) => {
50
- console.error("Child process error:", err);
51
- });
52
-
53
- // Send a message to the child process to start the task
54
- childProcess.send({ action: "startTask" });
55
 
56
  res.send("Task started!"); // Send response to the client immediately
57
  } catch (err) {
@@ -196,6 +224,18 @@ app.use((req, res) => {
196
  });
197
 
198
 
199
- app.listen(port, () => {
200
- console.log("API đang chạy trên cổng", port);
 
 
 
 
 
 
 
 
 
 
 
201
  });
 
 
5
  const express = require("express");
6
  const bodyParser = require("body-parser");
7
  const path = require("path");
8
+ const os = require("os");
9
  const url = require("url");
10
  const fs = require("fs");
11
+ const https = require("https");
12
  const { fork } = require("child_process");
13
+ const { exit } = require("process");
14
+ const terminate = require("./terminate.js");
15
+ const utils = require("./Helpers/utils");
16
+ require('dotenv').config()
17
+
18
+ const PORT = process.env.PORT || 7860
19
+ const InitService = require("./Service/Init.js");
20
+ const TaskService = require("./Service/Task.js");
21
+
22
+ /**
23
+ * Processing EXIT
24
+ */
25
+ //catches uncaught exceptions
26
+ const exitHandler = terminate(() => {}, {
27
+ coredump: false,
28
+ timeout: 1500,
29
+ });
30
+ process.on("uncaughtException", exitHandler(1, "Unexpected Error"));
31
+ process.on("unhandledRejection", exitHandler(1, "Unhandled Promise"));
32
+ process.on("SIGTERM", exitHandler(0, "SIGTERM"));
33
+ process.on("SIGINT", exitHandler(0, "SIGINT"));
34
+ process.on("SIGUSR1", exitHandler(0, "SIGUSR1"));
35
+ process.on("SIGUSR2", exitHandler(0, "SIGUSR2"));
36
+
37
+ var initService = InitService.service.getInstance();
38
+ // initializing dir
39
+ initService.initDir([
40
+ "logs",
41
+ "profiles",
42
+ "proxies",
43
+ "screenshots",
44
+ "tasks",
45
+ "reports",
46
+ ]);
47
 
48
  // Khởi tạo Express app
49
+ let app = express();
50
+
51
+ let httpsOptions = {
52
+ key: fs.readFileSync(path.resolve("ssh_key", "index.key")),
53
+ cert: fs.readFileSync(path.resolve("ssh_key", "index.crt")),
54
+ };
55
+ let server = https.createServer(httpsOptions, app);
56
 
57
  // create application/json parser
58
  var jsonParser = bodyParser.json();
 
62
  extended: false,
63
  });
64
 
 
 
 
 
 
 
65
  // Handling GET requests to the root URL ('/')
66
  app.get("/", (req, res) => {
67
  res.send("Welcome to the Hugging Face API: " + version);
68
  });
69
 
70
  // Xử lý các request POST đến '/api'
71
+ app.get("/downloadGPT", (req, res) => {
72
  try {
73
+ new TaskService.service.getInstance().handle();
 
 
 
74
 
75
+ res.send("Task started!"); // Send response to the client immediately
76
+ } catch (err) {
77
+ res.status(500).send("Internal Server Error"); // Handle any errors
78
+ }
79
+ });
80
+ app.post("/downloadGPT", jsonParser, (req, res) => {
81
+ try {
82
+ new TaskService.service.getInstance().handle();
 
 
 
 
83
 
84
  res.send("Task started!"); // Send response to the client immediately
85
  } catch (err) {
 
224
  });
225
 
226
 
227
+ server.listen(PORT, '127.0.0.1', () => {
228
+ //console.log("API đang chạy trên cổng", process.env.PORT);
229
+
230
+ // Get the network interfaces of the machine
231
+ const networkInterfaces = os.networkInterfaces();
232
+
233
+ // Find the first IPv4 address that is not a loopback address
234
+ const ipAddress = Object.values(networkInterfaces)
235
+ .flat()
236
+ .find((iface) => iface.family === "IPv4" && !iface.internal).address;
237
+
238
+
239
+ utils.log(`Server started on port ${ipAddress}:${PORT}`);
240
  });
241
+
source/apps/chatgpt.js CHANGED
@@ -5,10 +5,10 @@ const utils = require('../Helpers/utils.js')
5
  /**import classes */
6
  const BrowserService = require('../Service/Browser.js');
7
 
8
- async function start(action, script) {
9
  try {
10
  // starting browser
11
- BrowserService.service.getInstance().handle(action, script)
12
  }
13
  catch (error) {
14
  utils.log(error)
@@ -22,8 +22,8 @@ try {
22
  var base64String = args[0]
23
  const decodedBuffer = Buffer.from(base64String, 'base64');
24
  const decodedString = decodedBuffer.toString('utf-8');
25
- var action = JSON.parse(decodedString)
26
- start(action, 'chatGPT')
27
  } catch (error) {
28
  utils.log(error)
29
  }
 
5
  /**import classes */
6
  const BrowserService = require('../Service/Browser.js');
7
 
8
+ async function start(data, script) {
9
  try {
10
  // starting browser
11
+ BrowserService.service.getInstance().handle(data, script)
12
  }
13
  catch (error) {
14
  utils.log(error)
 
22
  var base64String = args[0]
23
  const decodedBuffer = Buffer.from(base64String, 'base64');
24
  const decodedString = decodedBuffer.toString('utf-8');
25
+ var data = JSON.parse(decodedString)
26
+ start(data, 'chatGPT')
27
  } catch (error) {
28
  utils.log(error)
29
  }
source/apps/handleTask.js DELETED
@@ -1,14 +0,0 @@
1
- // handleTask.js
2
- const TaskService = require("../Service/Task.js");
3
-
4
- process.on('message', async (message) => {
5
- if (message.action === 'startTask') {
6
- try {
7
- TaskService.service.getInstance().handle();
8
- process.send({ status: 'done' }); // Send message back to parent process
9
- } catch (error) {
10
- console.error('Error in handling task:', error);
11
- process.send({ status: 'error', error: error.message }); // Send error message back to parent process
12
- }
13
- }
14
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
source/chatgpt.json ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "telegramBots": [
3
+ {
4
+ "id": 1,
5
+ "chatID": "-1001482381399",
6
+ "TELEGRAM_BOT_TOKEN": "6525526908:AAE4sLKWALT7YmDFMx4toFcbF3Bz8csU-tE"
7
+ },
8
+ {
9
+ "id": 2,
10
+ "chatID": "-1001482381399",
11
+ "TELEGRAM_BOT_TOKEN": "7198790593:AAEcGgvERcca_wISmu73qA2-ZPcCs1K6ozw"
12
+ },
13
+ {
14
+ "id": 3,
15
+ "chatID": "-1001482381399",
16
+ "TELEGRAM_BOT_TOKEN": "7022876326:AAH7SZhPc5zKAQPOdYs7tQkKhsfRLVw4FaA"
17
+ }
18
+ ],
19
+ "sessionTokens": [
20
+ {
21
+ "id": 1,
22
+ "session": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..NzQQFjbkFEVF8qJ1.OpFaozhhakF7m1pktHoAf_84NHqEu6DDYBKV16S6XE_4kj2ygpjVG6bM1j1NqrFxD756v0CSs0v74IuqIS6SL_duCPhS7AkIERMXpRQS01u8udHBCA3a9NRQhhBns-B3ibrpdyPdiWlFyWFUh6JNNs5C75zezvc-YrWcOZNLa8UfHpMADIY_VjujvbKQ4lZ44PVVAH-FSpNI9lW-q62C2kPZxUDPWBHfcY-9SWPx0co9YAKxvNV4qyXvLIXxjrFXQWvcObqbY_1LPqJDW0OP77RhkWd9S6LTbgatQCkYossEQul7RanA4I6NvuBDw0vK5IaKdwEKXX4jkVBz3zUIEatOsKdmKq8jUE3xM_MhIVbq7n6kk34rlx5_fiuWS_Zj-dS6moK0Oq-GiQ63N3QUN3HYjuKpLskMeHceL6rO_PBNIAzUknL9NCUK8tS18EQIc_6tHkem-S0qxyD9oxvuoxgmF4n8qZO2eyG_XeyCwDcNJjlSUFDjTImUrGsWV6LLSyO45n-40eRfbl7-iA26dHZVx0jluoXAxxkNSJcFurcVZoMVzgffEVCJZK7F9af-A8Sb3l5_ggE7-sIozLUeu38yTmHJrbxxhG3b6aiLwvXdT_TdNTlENcinqgv36abYffHNLoa8UEbtEVsc1p3IIevnboFe10yQqa9YBb4YqB10Wu_Zw03DaA0QHTRx033NIbnI7Jfw9r6be5L95lruI-X-6ZiD_qPfa2hj2H_pk_dWqfnXsamS6mVz3n6GFBdehuF0NyvdjuWxh7VHoCjsALCePFKIGHspCqYLUPKuo8mWqwfkPHy3HC2eowj2jfUdUXnwpVdAJ6P_aqFBRzWAzaC3RRF7DZeHIuhcoGo52RhZRNKiKjrzY6PG-8DPLvkSnSmlnfUkJakAckbfMMAk-XvANhPpCBeeEXjI7smngI0QRKKJudIsLrseomSMYLK6bQJ8lqXcuCPZOk6iL71MSZvhi-on6Ngy2bvlTvXKNJ7B3LP4iIZfAgrX81NJ5KtRglGHc6CsGnocP4_Uf6zMqLoEgwExoQQLqW29RnLA5OdabrAFHs-JQt2TqTZD6WtCSi3xCc__XtpiapgQF8IYrKAl-b26qznRQygqb17hypJ2HkHMxiXxTchdL1htkas6NCCauv5UpjQTNFJPX3M2WgifKwB4qB002NXO_0f4DbDXxRCOOUJ5tEytAMZPWOmOVbEnNK8_9ltKMSJ9ZML2PyVhA-AUiMCw7_Rme2ANNBeDls9YdmKgMESjvc5wVZfgS25S5Kp9pnysuf7BAZrVCPN2hqu1fi0zfZA10qQZ2w-oPhrCikLekh2xTJtTavutKSTjUeA2_Qf4uVgrpjkCg2-gPGTJik3IWZ9NV1tYOOSCXxvKPrPY8w0rs9jxYAZwsvc_L8q05izMCsjw9JPiaxD_5ii6G30ncHGl5REZK_qwNCBr31CM_ldGdHTDohSKlCym_Mk6bbGxiBHQ34a9jfZdXA2k8Qqrgl0xvRYUHF0V1r89Ny-a5byxCyGp7_Mq3MoQZOO-p5gHQItVUKhTbUHKdkby6dJy18ToMizWyTUi_GGcbsiuW2PP7Se70OYT2x7LyJ0Qwjv26vs8Cc8xIbE-lNY8muK_JWyrvBQL-5eyAIdKPSA0NJYCKbVymrHgOF-H0rbRRHaG9zt9mNshG1KtU1dXc75QD0QcyEhd0GbJU2wdn1Ag0WuYG055mnX5JOwozVpsUmQD1TZ8H0gxZN_dOEej1vmLZbUEPcpg1omcSs3T487ILK6GMjQvMR9-vxxnTI8Xe09tVQSF4Bm8TgsxA65VRUHViQkh6wF-My35wvLLfMOK1-0P3mzXuYQonXY1LCobyuW0WpZi5y_usdeEcvJHEIu0IVRVprTL_Mw0gJVCp6tx6LgRu2yvJaYRuSb7mOmAUS_L3qgJUv1J1s1PD0svbvKfkOvPSPq1yEIgmcDxiUcyuex1Y-LSc54lvtJMMb_mI96CAjL88kx72tS9frubmBjeUpJecMxT52E2pkHZ4QX5aorUlpXK_tIN6s5MiOax4rGarseHNcncS-tDImZVXMluHtupuuiJFE-B-xIhFaIZwiXrjYqnHtWRrCttpyySxFWFqazIIXxexrjArwTeMddaMFI1-lvUlpax9jKv0atG-qzbyh5q50zPS2JxzwFBgvctwywpSrmHRdo1LgUpXmczZc30G6LkTB9AFYh4wSO0ao8f-_Ks1NToq10ny0ISHNLu93sv0d_ve7ushDxsJBY4IyU9NdSwoBKHRUTg_Nt2IMCIey_XywN9BIKNqVFleHtNhvi9az1Es0jMmgBXKmH8yksTdWplfIYsZQlQ3RiI-qDGBdNlMu57oPLa_1eBXsZid70pQxMKWF48OiBaSKX9SanXo3yGg2ff82QFtedwRfHJSW7ubwiwmlrHnsRnl2mawswHD41fk3YkwIHSsVjp8ewFRc0mHdXXyNZZ7ynLGbffq6HuXR5pVCqkfY2JcLxYRVK8GmGvwZ8bKZBxcC0ETgt9By2er-GSe0twmu_aAYnwW96G2dtDyAgArXI2CnY1kGTJ766MuO_qnb2UcXBm9o8y0sDnrMvnrmDszUBjHCevJ4yQU8Z8j8iKLut6YS1is4pGUTdeGDW3GZeQt68yq9HeiNEg3EeL6HU9qbg9pgfq8lUI_VGYtznUaCdlm3k4JbpvP87RI4n_ZeC5iVTgSedxKZZiqtpJ4bevcJWKQe5753NHDKoozXl855uQd6vwR2ej9fxWTPfDCZ-Uuiz_pAzVJ2PIsFKGnIhUHU7QNKcNg_m-0U8sWzz3hdQ2O8SC7LBdAakedvI_6lFeOHEhtHjY1jmuAMH8fTHUUoY7ESD5Dr4zItklsHRMvwoVRVk_gNmPizz850ICUrkpUvk7p7IzeJNSwehKOO_pxhe4b1eo0X_yMef0Czv7znlYJ8lbCU8jGyLfVv0Gzfd-pWuU1E3sAh3CM9rFmtVqT9luM3qNPMVr_SAlRAY.H9zW3hwhZ_sHe5zycItzbA"
23
+ },
24
+ {
25
+ "id": 2,
26
+ "session": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..eFl8JpqWPDddtJk0.2DZJ77yi2ND0FGT4qMOphmLgNezb4Q3gH9xI94DfYgpe7Bpmafq8HUW099lcEYjhg0O0H_gsmSQxUERhU950grf2t9qTEBcTXyG_jj5jaWSUNBJXiwGaZpidBOKiYky8wqkRwufSFP8IvtjFyZ9_dehYDzUq_8OqbcgIalkmcgwgXchfm5JlW0E-WH6BNdU5CvfvoywwP5awgClmTNgiXO40uGCPyqAwx-jyTE_ZTxTZxiDgwbbN7zGPuwF9PlUL42yxD3j-QZ-_T_UaTyjeXw4bSFpN-7mdWGtl5e09hw0BEEeAcVVbPA7_oX00Btt72XtO5_OQLmgPv5fQDOmtoFAT6sQZt0rCTMF4rGg80ebUZ7CQnBzbH4qPSi27RSIgJGoA3mCgxfv_CQo0PS94TWspCKoXvnFC5f7nFIbFYXYfnmTbABC2wW2EX_KMHfXfXIkwMZAODyg7HVDLIDh3c4Y_8NDmCoapqgJvZmUp95gEAMbswJCh7-tJYZPKkFjFZTm4qERtPKCJyx6WIk8I9FhMsjgWnNbEGbSjSf0E4A9C8Av1Byr_bzJ0WxhOVY5JsVVXrneHUdAAMd2xMNZKgTHP-0nIFhHy3fnIeqh8pa-xqMNpEWz5DtU6PCXs-76NRuX5aS6YR7HkYkd073bMxTJoifk3LOs2HTeOV5KNL9X_BAqu3RBBc8gLry0ZTbhVTC6MBgSdTGuBT9vMUg0F95SGwnulW70IcIiLR294R-2C1ym-UTmKyovZ53kcMPCY-cScvwNLI2rox1xK4iICDzyk3rYs2kpVQ2H-WH5-7Smo_dany1om-hyNKpqKj2TYw3McstrTDckyBH9S1-HJUSxP2hehDAv8kV7vFeqBut9dQ18VbAeCbeldiVf8q_AaRCNvuzHE3icrHPASz2bLT1mk1HLTcJg0fzOzLV8joHFrcodETuMZ7CjNZuqpP6s75Rn9n_d8HU5OmqbuKwX7H1SfwN6xEmwQsXh4s5lvAZct3uFxfzBxPe_oEHLQbMZP3awNvth1uJzfDRpyBuIJnzB0G5Y81egF4-s8vganaaDEZda7dxLRSrh6U2WOefZS187gArvAKu7Si6PyFPcX3SmZ3bikjyOLasZLqQGXzQYeI8KQyCHJH2p6TNPQ0Le3TiYg43HcLKbaTszCpRfBkNQB--nIdQ2KfoXITUqG0vimt1fUskqnKwLEGrcqclYugf2r2KEJr3Qt71akjmlR62AsPG7JREqKZtYHwuqdD6amG-4LtPupYgvRAkJf7BEjQEwPduA2wHS14siREEaeteifleqFvTdVvJ4MNrASelUACb9K9k2IdeGc9Bgn67ucBTi9pOfLo3KlQDJN5paDAgb2lvVHDLyksaE5VlEZ9UBAr7wEjiXnNJa7QGCDfD0sFL3ewTnKsHXGmj_FuN37wir__Dr1_ijrnYmBP2b489EJsjfDWStqiybN7g6z2CHUh19uiU6RaSotu2nwBxzYNcTyXrqDBSTLojh3mdYfQjjCtqfJKXClCctr4iu4-rAhUpdGvRm3sIyXFgxBg9g4zH0MCySwP0aCJ_LgPymgC4HAuJrQU4PAVKsdBD_Y6NKiGMj313a98-PpRGzaS3UoEfGvcOO2V3mMXKemOyV2R0DGRPlRnmYbhEt_mPIwmyFKkLXldKvbI6jJsdyiy2jbA19huB8gXzRil2nCHBKXcSSz4CSq_1OqnqmLV_fxf7ZhRUBUUqkaIJ2Z11B0fpOdV_cevSAjbZZ15661jQVq89QVqMGARyhD1PquX76E9oZTF9TUmSDbjvZeFEFGncUWS4PEt1x52wAyu_hQ69CwHa-4MtGQLF5A9WKK4mUQH157LwabeS3XIX6poXCK41Qa-ckSBHQk55ML8rSwN5kerJB0VbRiy6ggjUT2h8Sc5RHpaBy1pDL2dhHVioNeHTeYd5B5Chsv3nJzCHigA0Yiyp-kqKYv0gjadud9bH_M0yd7etwv-6gTRW5gDb9rJfUqUqTNHf20WyLmStEa0w0KAo7RAJxzskjTSQlpVtj-PiWydZZoAjZMGSm_9Q_JiWbZsESRCcmuAv-HgVr8jgX1Fi2b5JrOIe9R2jeU6KYpLmWM6mPHN3fiS6Tsbg1zCwQz_rQBHJNwBBNStSI80U92vN9bJIaeRO9wHCzApPJShymHyPPKxs8QoxcDQIQSSKfnI_FotJK-zxtK1IW51Y93e2pKSX0czaFAUA6Hf-c_6gorLj_atC25Evb8Uc2FRshRr4labLV5_PiMpBTX6Vl9eSn21L460EgkxUxvC_mXWq2Zb7sWk1F6FK0wTmF7ASQ5EoHN6hrq8P6gcf-mVdOMFSIIaWpWnoqeAOt9C4BpnJb55jinjwzzWVS7d8VNbVLrUk9PuVYEpfAQtYstS9PHX0iZpxKrr51vwkZnK9bTm9otXhKZnnKRZsKLTCxRguvzYydYe3L9nLiythX-_eHwefsAIEC_3642gWX2TUnVkoivf6pPiYEMzQggeb-TnpZf27zvxze6RHpAjRVBK-ZtyICJNxB6i-qcrlkpp5CkndaEv7fox4F0WC1RRW_5JdkKKKMbVXod1fp-GPXNqqonOV6S6gmJtxers4KVFGjuPUpPQYdwOXXKrx3dhnlVYYPgim1dZtQJIOeeKhiQzKSHA0729JbLLfow-Ikp8ZD0bfJh2gbMK3u6RfthudNYX84altcUHDHI4OOJezpaJ5M3rj_7vnMwcrBrbeYpV_1FqLHdHTHrxIcIkYFpyhl2qmszcRVOM6TvOr7yF0k_reWw5ruiOgUmso3gJuRN3enQrQA53o5Gn9G9HWu_6-qrbA8BK1coP8ZOOUJ6T84E_KnK98M38e8Lh6J-DEFddmXzcD9svxLk-_cVnivuXjcUGRWpLIDkHi0wLdAwx84A05BbzL63YqwDTdsMFDa3SlcV-pXiHvcobkol6gc91sySp3xpBEDfS4BhXj2xIa8h8_R3dgbrRH5lW0AOhWMz10t7Sb-Nhqc.AbbRu7fd_zwtlaQrhMVFdA"
27
+ },
28
+ {
29
+ "id": 3,
30
+ "session": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..32BhWUtlg7cDFebD.pu75EHzoe6cKlw2VgQyMMQkUOUF0pVLuwCH1riYcqIKrMMjZxlPkLCEH5ViG1DpAVPgP69f2S6kEtPMlTOfvPgogFKhuH7VSDnUMOcSY6bE63OsCBTieW5M2iEzwzMX3RfVR-18xMcVuDH9wvPTuTSDFTNJO1pAPmaWWJvTc0Gc9OwfKpMxaepT7FLwLLBFoajptWl3GCBN82sVMDVQWddh-pOZ96USeeVaQAPdlgmJYeA1l0oDAH0MvFa7auQHRZWlr110VcFj5jQXAEXaCokt01FOPbME-QMiIJLqEF-8WT_xZt374zNB2XgANLODYryXEpcr6YSoa_icy7ihKe_CQK9EkkXQP9aaiXCFnjWBborlOuTCglo3_4Y9-elrK_70McgXsHmdmCh0VxBN5lbd5tiWAFJOOECM3bPMciRI6WEQfEYFEtBg_Q971VzGqRX70y0ndCMdAh34xSkbP2Fyr9pBBTJK6RRoSPMJMZHmKAVR5BmlOY8jtH6ookJsjWyiEt7cU7YQTbWfwqDxtT587o8E-eCvEPNauzJEGCQpM6atK3y_Ay836NJbAZE1vbnddU2ompwlniUYxEDRnD2nijTx6ACLqZXNW8DV_Nyg0No3jqEMLa16BpkVnWPBRaFBybznbrClUs-nJEI6xxzTCeoJ3RTm4l1cKwKNT-TpAz_cLbj8Ys7wPzN0kenE4ROacD0-C5982Gwicwba90vQOICVhGtvuvlbpnQrbbA2q6VmhKevM5R2NxOm98lNG8oSvj2NVICfQier5tJv8O0iOT02iCULSLbjLfzP8vrdRgdFM37jUPIVeKrzkRv3I9Iaisd8NpPPArMCiF9LgUxLQ5iAXpdznIsQG57JWhvQ1fP_YEXFBkaXsBb9L0i2aGoNdiZ7CMLI2-NMA1FZsWjvMESCkcnBMFtx-Y5t2njV-aBNpFsZjnPsazs1CsLU_ojpHrzto1DVDd4NSxffaah3Cg4zD_quZX1X2bdkBHDuCkhXXUIT9-VOM1h50zchAc2F3CR4MvCwSADwh-T5mwhjZ3o9qMRhmmP2mWXWYj8Nf4mDjk2G1p6W404DDnYEtby-XL1H637ozbX4gN9YaYlfge7h5xr9dzYdTXpkiB1V4MmlRRJ4WkCI9jJfWv3DQWASSISSvRrXRAQSKXKbWtN5GSH0q5FkYTwXmAxSJ0GZKn-QeMXcvnUg6dXf9luConTf7BiZA58VBRegXhHOtuFH0MncZaQE7kSf4G0Pcaf34ZgLIkNf2ABMN9qthmbhp_L4I1LVVcotlTQn5rq33hyvqEFWBkJhP6w2DXB8ETXShD--_GEU_6gLEtlNquG9m7f-9WgWIE0K9SHq5hnx3p9uaaVaYU0sLQRKhKEmPRH0R3bzz-hA7IAIMm-7v0R3SSfQy6rmURSs9TbuieYKBKAGI2hqSeQFpyKDyh7ISWNWXCmZF78Ay04eA_02HYL6-9DbVBt1B2wUSEbn3kfpTGRRQwZhv7hMrDYza0tb4uqL9nNk6-tXIfjXFoSKHvMccG3_DJkSj-KeQVWADmpaqqPOvy-t0wATxTyMu_Doiu75pD_8e3jvR3q3ssQy3skkzbuWDbNVzpHdge1Rext0HxtnJkcsGV3qsBXPonW33nIGMfenbSsra00NL9OWH3rpCcBXEbBpGCAL6EesEeGvSsr-a3uXSSbYwP29_jMGA8Zo3xYRxkF14LwnFsMz_xouWGTulKbHMAbvm2wRmhJztdV6tUxVR2dOrbkHNpX0x36cmebyJOaQ7QSu9x5e8D2JPL5jFLrWjbj2KB6QXZeEwXq7pJsoeHIWa_RMd6bAHy-loJO7W4LovhaHviouGv9zjAAQfahdkqbNXI78jN2nAeN4t-56ZsZ4TPk0KSRAwasBwU_QkbQA-8YWeNE39J5ueV_icFCovHEOGZOa1vjiexRRI_ASmf3QMxhhKp_hq69MDa4OFg-TXLmfOku_E6TV5hBCyFEwUCKdSI9-XH5aRXW_N5LUhguSaFl78PGQ7URtT57Ud3vSZp42QZviq2XKUSMbbHfRExBLwepwhQnYnteRRjoFa18FB3Jk8iI0sCTX4GqarSuYHygRxDFfLNQ_PbNDVeD33CDYwIgMx9M9W4cA4p3Ljoh8jLkh6a9yCuAYSJ_OBMtg3r-NEf-IINAdzqYNebakJiZz9fD9N1J6juEmSoU9wJsUHpaF-lyRDOlRe961wMwi6-GZOWjpu1oADl8sVZly5ZPjBtGXQ2UxC7LfboHutzhZXq24f9tMdVDzfSJ0zn7WGyjdFEW1LOBGb9TMkRDr92d2rKi0O1gxT7v6MQzs-dzjp_rZr8K8Tuq87i8qiOmi5Clb5qiurl9yIHWNFeFd3tmZadr7pIBusVwFde9zHhi2B-5dkA1viCeM7l-CsN0R13fYrALLBr1_i2ZjWohQFJuIHrQ_xHs0n597V4wc2oVavKECRC1CuGE0QZwKTASti5D9uwVOHYLUN1L5s1kWm-rV8-GlHRS_sFEADSCMYEqwZXeMli20zullwFLmCvobOEeH57AnlnaYKK9cEGk6D-P4HzDLKSDKbOo9RIUeTAvHK0qWglh22gyPSu54Iv39qrLPqCPEMnKKtUTgv4hDa6W_pXlgaxOQzO_z6GfycFw1JT1EfthkOZII6UAuKOI3S1D7WMpNYNzaSo4cISUH0pT9GNMc0Wrmr07Hbls2nOiOVRKNo3bQnmPpL03vcPRA6p5pyawE1gxdi5xk5aV36PmPIW4SLMziNx8niBnDs8Q8jacmfz8AndY5xyDYMRBRac6CCSUzETJgLQ_9eQXpXlL43pE8c3FaiKgmIHV74hm0dIjFAdwdhzPpeV-KjaeShuoebrjkzYV2J0j_1aAVEVricyE9axZZTYo-_b4Wx_eiWVsATPP1XS84sVdXIWUNZivxur2-RahQ9lmRtIIedWYyBQrUYUz-xMOe5Eof-mAf2m19ZB_zmuChh2PYRMZkUF7YPUAgPqP_jh9w.IzmdfFuM87ZPLhXrJf78kA"
31
+ },
32
+ {
33
+ "id": 4,
34
+ "session": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..ftDbAhM8JWxlmemg.9-NNo8-DX5b8FQM-GR_kvtL2mH08aqEDZ8pyCuU3VAadbpnbRXi_FK3Ff98vEnsK6Z_-WNl3MNEIhdaIwcAwY49pHSLoFlPu2Ph7PylcBhQQpjQ5FB-tO0UjzOAHCxIprryIqgZJLdiDHGxGBfE8TWUFfdRqn6ZiOrCd4Ad9LGA3_p-K75z_wqSmgsSXFNGhJzbLZOCp54ZderaGXFXQE6aow7rFQESZferkn9AyVf_3FQEIimnXnwJ9C-VvLM2cl7NLJW36y8XqBGMk03LH1QaTV3LHet7K9mg4oNCiCJ2OxHBRa4zV8tYvr4T8nun0iB6R5sm6E4XSdx2IYHTz7zjCT7jBgXjB1lvwL3PeYoaal9rJ1j87KRse35lkVYy16BDTYZUj0y-mwy8hW_vMAAUsdJYSxMSYY9Fq3j4X4VJyvrXPhC6Fo9wThFn4lnbhrPG3YaiSY4gdsGOSrMCIeDrOi1xFFHJ6WrYOtfI3ZsUSMAbGCgQi4G_1S_Hp3E0JTPwIDrzM0yPLjuASXi5POYYRI8LFpaSDi7xStYYppUwo66hMyjop9cbCOiLsfYnCqX59t8pZbjJOArqH12tybmSgmj1Pa86LAnevv_OxEqpOGL_RIqlW3CMElLQXS7Dk4VvXjBFhHpz2JQxFk4FUOpdeVJS0tsIUqwmfQwnHxOR-x19fJXNgs_-lFmFQ3vHebH0N7Xif9H-t8U918ceD_fAIj9-tmjTIfKhZ1tUxbd1yCvmN7cZw5ISBcn2iJ_3NqSs3sIORWCXxzeTQWZmm5F3Z1i5rUinZH2ryCPRBOMf4FpyopapkFcmTDywZ5GRe5fJWG3NpfXuVQGKc-0WbpEtMBaRLpcicqpYz3AhQLZUUHrBiMUs_J3381zt75lJZBhz4dKq3fjdA21CoyFsfrUIMYF8j5x11oUkdsQON3m8W8PRH67RA6HpzqUTLwlmr6IlEbuQub3PVRwEKJHW7ARfikUcRV6VYJJSuIv6s5poGnwRD3dlx-r9S1C96LqsDN9_I2Cf0SZNHyBgz8C4FzSoGThBeiAVnKPILCleJwQvCWMvlP9TgtuXU6SqYLU6Wu4zP282KhtZzdcOwLCKEbOsbI40_1vjdtY9Rgq_5e1XuvTQEsw_FDKKnsaRyT2_aT-av0RptSb0AG1ru6ldNVSQ-jZ0tbrkbZjVCQJfWOE2JGRl_kkyaQrkw0yCuK1_SSJRSJtJzHBGLA96DbwlIrY1_Cr39C8VMPjubwXBuZ7g_oyuIrkWJZg2VYSAK8blRGpmaPGV-xLsU3cnDJZcCogExb8wqhMziiFgF5lsWwuxRe6kkWicvM_VP-UmzTllNsKR4o7sIGhZBDF9nllQxQyYLh-XrXEJNfsXdzBE3TSB6Jg-1nHlk45bkdMuWcQ4oNNZHH36xCb-l65FL8kOT_bAnr4z1Lr9-i7xgn7Yh5WxTudnKbPrpUFWFDoodcQXydq3F8HQjYC3qvg7v77bChTnM9lT2xRdDV6i2BVFSBB8i7DZyoUAvqdsw98lHtFFnhP1Kw-BqsHPExSzVEgYmrzKy-UiBG0N4fGNCQYtWKZSTcLlcwnixgROkn_UXC_hbBrizF2YIotcgZVMkdKBw5SxjHkFTbJ3iDrMLiQ7f3esMlN2lNM9mhsJjPzYu-h4z2Jc11udeGlOcMOSjAhuLRuDcVm-dY-ePayYfg3wguhuOc0ZQusNHKIOIkdRoMWJly-zYKxrbIejITz85dNWcE6_cJkfiFXcBC7GZ6rIhDxAWQ8XGOmc1J6L4joLVQbEOCxl1D2uftc7FYBcDxTZbh8hQB1CqowTlvVFKeYn4u-fhc4stIw1v41wwKcVZlyH2CE7s3AJvB44ZLMdpICLx9CN_GsP8r04CNuHQOD9x5N0oTzqhWMHtmjYX2DeAsgv35B5pyrNfSdndTqUD9OFVXBmw6mjVME4efSM72zeR-PdcQWoc4htQr-WWvz4i9JZ53_Hlv2EWetsq5pUiLhcvu1OE2DL4Hy0bdUiDc8_DvKfnMY5hN4KXZUOoyrTQMKgdp8PjbbsCMUnjVT1Eo_TeTRzCoL8RuUhn7RUD3HGnf6d9cQb2WutLQB4yPE_1CEUtsUdNewqhBGXxQsWcObpAM-AQyFiXrOOAoJADnCfMRT1nWAbvM2zRuz3Wp9v_zPQCOrlh-GbCpjpc-GrOfVr1CNkp8An5h1-9cy1A6iBnOZFukVKshFzPWobDvauvcStvYR4ydcrYVeo5Ra-glYPi2WWbw-lR4IOQe-iCLWbriIGPFKzOOALvd05l9HsCIJElPl55yg8SRy6iqSrw2WIsrU-Q9iHsn1W-51Q3RGzM3UrolL8-w_jKBNBlYXYDzQ4u8tDaWnv6xYfB8bZhDqIqWVeBM1JoTCPYD-YZCZRnQbeKJ9g7Z1-gztO_stS-fJ1nNS8ClMqRpGBwoUJCB9XvtqRvP5Qz1bpR4q-WtixUGUCtkLHAsuFuCOSewdATYglHKUWHnX87y_V5JUi0otGH0kX7oSzqRAwJ252lcsTZe7QJmJe2caR7yywZoQztO80nMMAufMdtQiEJ5ZKtaMXvA72Qxy1z5JT72bUaXCRE0RC79iU6GxtM9179dZ-5giRpXFb6DD1zChXOH9yEs-uuZ5r0JzbCwudZYNK75KK7mSW9zS970CriqTC0VFvCv1IW-hwIH3tEfXZNtS0EBo1t5YsIxSHOQyiF2V3azYulSlvqfuxQp9j1bKNR7AHYJZpAkIodmK2sRfDBvtsV0eHl0ZpSaMo6ItbDzoQzi7OvrExAII3WzdsKGJfjkaANrYPM6yIMlXqKVMBRtZ-TqOGejhULyYVDE9crxjHJbNzCL-I7yP5IXCImAUmcBJlL9WYjomwzXCVZwet8wLC217ooxogfPWe-iQuBM2ypCkDh3OH31-G6Bk3pi0M06UKHHFlHIPhVUevx5OkpNQ.iFCbDBfR2651LNRkulvNMA"
35
+ }
36
+ ],
37
+ "workers": [
38
+ {
39
+ "id": 1,
40
+ "url": "https://createaudio.conmeomatreocaycau.workers.dev"
41
+ },
42
+ {
43
+ "id": 2,
44
+ "url": "https://createaudio.conbomaydidauthe.workers.dev"
45
+ },
46
+ {
47
+ "id": 3,
48
+ "url": "https://createaudio.conkhinodanglamgi.workers.dev"
49
+ },
50
+ {
51
+ "id": 4,
52
+ "url": "https://createaudio.ongioicaudayroi.workers.dev"
53
+ }
54
+ ],
55
+ "paragraphs": [
56
+ {
57
+ "id": 1,
58
+ "content": "Chương 333: Hợp tác nhóm, tuyệt vời.\n\n Nguồn Truyện: Truyện Fox chấm net.\n\n Hầu Dương Đức không chỉ quay lại một mình, trong tay hắn còn cầm một chiếc chậu.\n\n Trong chiếc chậu này có rất nhiều chất lỏng màu vàng, thậm chí còn bốc lên từng đợt hơi nóng.\n\n Hầu Dương Đức đi qua chỗ nào, mọi người đều sợ hãi lùi lại vài bước, sợ dính vào chất lỏng màu vàng đó.\n\n Mọi người đều là con người, chỉ cần ngửi thấy mùi hôi thối của chất lỏng bốc ra, cũng biết trong chậu này đựng cái gì!\n\n Tốt lắm, rất tuyệt vời a.\n\n Sĩ quan quân đội cầm một chậu này để làm gì?\n\n Lúc này, Hầu Dương Đức cũng đỏ bừng mặt, trong lòng hắn hối hận không thôi.\n\n Vừa rồi trong lúc nóng giận, nghe theo cách của đại lão \"Nhai Tí\" nên hắn đã đồng ý.\n\n Bây giờ muốn hối hận cũng không kịp, hoàn toàn là tiến thoái lưỡng nan.\n\n Chỉ có thể mong rằng chuyện này thực sự có thể thành công như lời đại lão \"Nhai Tí\" nói!\n\n Nghĩ như vậy, hắn cũng lao thẳng về phía trước.\n\n Còn hiện tại, cuộc đối đầu giữa quân đội và nhà họ Lý vẫn tiếp tục.\n\n Phá Quân và Lý Nhất đã đứng ở hàng đầu tiên, cả hai đều im lặng, đều cố gắng dùng khí thế để áp đảo đối phương.\n\n Còn những người tranh cãi khác thì cũng ��ang đấu khẩu với nhau, không ai để ý đến Hầu Dương Đức đã đột phá đám đông, bắt đầu bưng chậu xông về phía này.\n\n Hầu Dương Đức cứ như vậy, không quan tâm đến điều gì, giữ cho bộ não trống rỗng.\n\n Dù sao thì cứ theo hướng mà đại lão \"Nhai Tí\" đã vạch ra trước đó mà xông lên là được.\n\n Đúng lúc hắn xông ra khỏi vòng vây của quân đội thì đột nhiên cảm thấy mình dẫm phải một hòn đá không nhỏ.\n\n Hòn đá này được đặt ở một vị trí rất khó xử, sau khi tiếp xúc với trạng thái xông lên của Hầu Dương Đức, nó đã trực tiếp thay đổi quỹ đạo chuyển động của hắn.\n\n Khiến hắn vô tình ngã ra ngoài.\n\n Ngã thì không sao, chậu trong tay Hầu Dương Đức trực tiếp văng ra khỏi tay.\n\n Chất lỏng màu vàng trong chậu trực tiếp hắt về phía người nhà họ Lý.\n\n Lý Nhất quả nhiên là một cường giả một thời, chỉ trong chớp mắt đã phản ứng lại, quay người bỏ chạy.\n\n Nhưng những người nhà họ Lý đứng ở phía trước thì không may mắn như vậy.\n\n Họ đều đang toàn tâm toàn ý đối đầu, làm sao có thể để ý đến chất lỏng màu vàng bất ngờ ập đến?\n\n Bây giờ thì thôi toi cơm.\n\n Chất lỏng màu vàng từ trên trời giáng xuống, đổ ập vào người hơn mười người nhà họ Lý đang đứng ở phía trước.\n\n Hơn nữa, còn có khá nhiều người đang há miệng, trong miệng còn đang chế giễu.\n\n Chất lỏng màu vàng đó trực tiếp theo miệng họ phun vào.\n\n \"Hít ... hà. Phê!\"\n\n Tất cả những người chứng kiến ​​đều không kìm được hít vào một hơi.\n\n Ngay cả Phá Quân cũng không nhịn được mà toàn thân run lên.\n\n Kiểu sỉ nhục này!\n\n Đơn giản là không thể tin được!\n\n Nhưng ngay giây sau, Phá Quân lại bắt đầu lo lắng cho Hầu Dương Đức.\n\n Làm ra hành vi sỉ nhục người như vậy, liệu có bị sét đánh không a?\n\n Câu trả lời đương nhiên là: không có.\n\n Hầu Dương Đức ngã trên mặt đất, mặt ngơ ngác, đứng im tại chỗ, chỉ ôm chân mình, xoa bóp chỗ bị thương.\n\n Nhưng chắc chắn người nhà họ Lý sẽ không bình tĩnh như vậy."
59
+ },
60
+ {
61
+ "id": 2,
62
+ "content": "Họ đã bị người ta tạt chất lỏng màu vàng vào người!\n\n Một người bình thường sau khi bị tạt, phản ứng đầu tiên chắc chắn là cởi bỏ quần áo bẩn.\n\n Người nhà họ Lý trong lúc hoảng loạn cũng làm như vậy.\n\n Mặc dù có thể cởi quần áo, nhưng khi vội vàng cởi quần áo, luôn có sự sơ suất, vô tình vượt qua lằn ranh đỏ.\n\n Vừa có mấy người nhà họ Lý cởi quần áo thì nghe thấy trên bầu trời truyền đến tiếng sấm \"ầm ầm\".\n\n Giây tiếp theo, sấm sét ập đến, bao trùm lấy những người nhà họ Lý.\n\n Sau khi ánh sáng kết thúc, nhìn lại vị trí ban đầu, bỗng dưng không còn ba người nhà họ Lý.\n\n Những người nhà họ Lý còn lại trừng mắt nhìn nhau, hoàn toàn không dám cởi tiếp quần áo.\n\n Họ muốn rời đi, nhưng lối ra đã bị quân đội chặn hết.\n\n Chỉ có thể đứng tại chỗ, mặc quần áo dính chất lỏng màu vàng, vừa thấy ghê tởm vừa chết điếng.\n\n \"Phụt!\"\n\n Không biết từ đâu trong đám đông phát ra một tiếng cười.\n\n Tiếp theo, không ít người chứng kiến ​​cảnh này đều bật cười.\n\n Trong chớp mắt, xung quanh cửa hàng này trở thành biển vui.\n\n Đối với cảnh tượng bị tạt nước tiểu của nhà họ Lý, mọi người đều tỏ ra hả hê!\n\n Còn Lâm Tử Lạc, người đầu tiên phát ra tiếng cười \"phụt\", lúc này cũng đang dắt theo Đại Ngốc, ẩn mình trong đám đông, lặng lẽ rời đi.\n\n Cái gọi là \"Xong việc phủi tay áo, ẩn danh ẩn tích.\". Đẳng cấp của \"Phịch dạo\" là đây.\n\n Đùa chứ, so với việc chơi trò chơi theo luật, thì ai có thể chơi được tốt hơn Lâm Tử Lạc, người có mười năm kinh nghiệm?\n\n Lần này, Lâm Tử Lạc chính là lợi dụng sự hiểu biết của mình về luật chơi, để sỉ nhục nhà họ Lý.\n\n Đầu tiên, hắn chỉ nói với Hầu Dương Đức đi lấy một chậu chất lỏng màu vàng, sau đó chạy theo hướng cố định là được.\n\n Vậy nên Hầu Dương Đức căn bản không hề muốn tạt nước nhà họ Lý, tức là không có động cơ gây án.\n\n Anh ta hoàn toàn bị một viên đá vô tình đánh rơi của một gã được gọi là Quỷ đồng làm vấp ngã, bản thân anh ta mới là người bị thương.\n\n Vậy còn Quỷ đồng thì sao?\n\n Tôi chỉ vô tình đánh rơi một viên đá, trong đầu tôi chẳng có khái niệm muốn hại người đâu ... à nha.?\n\n Vậy nên, những chuyện xảy ra này đều nằm trong phạm vi được cho phép.\n\n Đồng thời cũng có thể gọi đây là một lần phối hợp nhóm cực kỳ hiệu quả.\n\n Nhưng người nhà họ Lý thì khác.\n\n Cởi đồ ở nơi công cộng thì được, nhưng một khi cởi quá nhiều, tức là vi phạm quy tắc, sẽ phải chịu sự trừng phạt của thiên lôi.\n\n Vậy nên chỉ trong chốc lát, nhà họ Lý vừa mất mặt, vừa chịu thiệt lớn, có thể nói là thảm không thể thảm hơn.\n\n Nhưng mà, phương pháp này chỉ dùng được một lần thôi.\n\n Hệ thống giám sát của Trò Chơi Tận Thế không phải kẻ ngốc, nó sẽ tự sửa lỗi.\n\n Ma nào biết được nếu dùng lại quy tắc \"phối hợp nhóm\", hệ thống sau khi sửa lỗi có giáng cho bạn một cú điện giật hay không.\n\n \"Hầu Dương Đức! Tốt lắm Hầu Dương Đức! Mày chờ đấy!\" Lý Nhất đè nén cơn tức giận ngút trời, nghiến răng nghiến lợi nói.\n\n Thiếu chút nữa!\n\n Thiếu chút nữa thôi là anh ta bị dội một đầu nước!\n\n Lúc này, Hầu Dương Đức nằm dưới đất cũng đã bò dậy.\n\n Anh ta cũng là người thông minh, khi đứng dậy đã kịp phản ứng.\n\n Hóa ra Lão đại \"Nhai Tí\" đã sớm sắp xếp mọi thứ ổn thỏa."
63
+ },
64
+ {
65
+ "id": 3,
66
+ "content": "Vậy nên đối mặt với cơn thịnh nộ vô năng của Lý Nhất, anh ta chẳng hề bận tâm, ngược lại còn lên tiếng: \"Sao nào, bố mày chỉ vô tình ngã một cái thôi mà, ai mà biết được mấy người nhà họ Lý các người lại thích thứ này đến thế, còn nhào cả mặt vào nữa cơ. Bố còn thấy có thằng nào đó há mồm đớp lấy đớp để nữa cơ. Quả nhiên Lý gia toàn là lũ có sở thích thật là ... VÃI a.\"\n\n Câu nói này vừa thốt ra, ngay cả Phá Quân thường ngày mặt mày nghiêm nghị cũng không nhịn được phá lên cười ha hả.\n\n Ông ta vừa cười vừa giơ ngón tay cái lên với Hầu Dương Đức.\n\n Những người xung quanh càng kêu la chế giễu.\n\n Lý Nhất sắp tức nổ tung rồi, anh ta không ngờ có một ngày mình lại bị làm nhục theo kiểu này.\n\n \"Khụ khụ, các vị đồng chí à, chúng ta cũng mệt mỏi rồi, nghỉ ngơi thêm chút ở đây đi.\" Hầu Dương Đức tiếp tục lên tiếng đâm sau lưng.\n\n Câu nói này nhận được sự đồng tình của không ít người trong quân đội, họ ầm ầm ở lại, không chịu đi.\n\n Tuyệt, đây là muốn chặn người nhà họ Lý ở đây luôn, không cho tham gia cả buổi đấu giá a.\n\n Lý Nhất rõ ràng hơi hoảng.\n\n Mất mặt thì không sao, nhưng không thể không tham gia buổi đấu giá được!\n\n Lần này, toàn bộ hy vọng của nhà họ Lý đều đặt hết vào buổi đấu giá này.\n\n Nếu không tham gia được thì tổn thất sẽ lớn lắm lắm!\n\n Hầu Dương Đức nhìn người nhà họ Lý sốt ruột như kiến trên chảo nóng, nở một nụ cười hài lòng.\n\n Tuy nhiên, thực ra anh ta vẫn luôn nhớ những lời Lão đại Nhai Tí dặn dò khi đi.\n\n \"Chặn cũng chặn đủ rồi, đợi đến khi buổi đấu giá sắp bắt đầu thì tìm cơ hội cho người nhà họ Lý vào.\"\n\n He he he, nói vậy tức là Lão đại Nhai Tí vẫn còn cách chơi bọn này sao?"
67
+ }
68
+ ],
69
+ "voices": [
70
+ {
71
+ "voice_id": 1,
72
+ "voice_slug": "cove"
73
+ },
74
+ {
75
+ "voice_id": 2,
76
+ "voice_slug": "ember"
77
+ },
78
+ {
79
+ "voice_id": 3,
80
+ "voice_slug": "juniper"
81
+ },
82
+ {
83
+ "voice_id": 4,
84
+ "voice_slug": "sky"
85
+ },
86
+ {
87
+ "voice_id": 5,
88
+ "voice_slug": "breeze"
89
+ },
90
+ {
91
+ "voice_id": 6,
92
+ "voice_slug": "__internal_only_shimmer"
93
+ },
94
+ {
95
+ "voice_id": 7,
96
+ "voice_slug": "__internal_only_santa"
97
+ }
98
+ ]
99
+ }
source/config.json CHANGED
@@ -4,7 +4,6 @@
4
  "GOOD": 1,
5
  "NG": 2
6
  },
7
- "BUILD_ENV": "prod",
8
  "DEBUG": false,
9
  "NOTIFICATION": {
10
  "TELEGRAM": {
@@ -23,7 +22,6 @@
23
  "API_CHECKER_URL": "http://api.ipify.org",
24
  "END_POINT": "http://api.browser-bot.local/v1/",
25
  "END_POINT_LOCAL": "http://192.168.99.82/v1/",
26
- "LOCAL_PORT": 3000,
27
  "PROD_ENV": true,
28
  "WAITING_TIME_NEXT_PROCESS": 30,
29
  "MAX_PROCESS": 1,
 
4
  "GOOD": 1,
5
  "NG": 2
6
  },
 
7
  "DEBUG": false,
8
  "NOTIFICATION": {
9
  "TELEGRAM": {
 
22
  "API_CHECKER_URL": "http://api.ipify.org",
23
  "END_POINT": "http://api.browser-bot.local/v1/",
24
  "END_POINT_LOCAL": "http://192.168.99.82/v1/",
 
25
  "PROD_ENV": true,
26
  "WAITING_TIME_NEXT_PROCESS": 30,
27
  "MAX_PROCESS": 1,
source/config/chatgpt.json CHANGED
@@ -1,7 +1,7 @@
1
  {
2
  "getSessionUrl": "https://chat.openai.com/api/auth/session",
 
 
3
  "sessionXpath":"/html/body/pre"
4
-
5
-
6
  }
7
 
 
1
  {
2
  "getSessionUrl": "https://chat.openai.com/api/auth/session",
3
+ "homeUrl": "https://chat.openai.com",
4
+ "endpointAPI": "https://api.truyenfox.net",
5
  "sessionXpath":"/html/body/pre"
 
 
6
  }
7
 
source/connectVM.bat DELETED
@@ -1,9 +0,0 @@
1
- @echo off
2
- set HOST=192.168.44.128
3
- set USER=thai
4
- set PASS=123456789
5
- set COMMAND=cd /home/thai/Downloads/myTest/
6
-
7
- echo Running commands on %HOST%...
8
- ssh -t %USER%@%HOST%
9
- echo Commands executed successfully.
 
 
 
 
 
 
 
 
 
 
source/cookies.json CHANGED
@@ -1 +1 @@
1
- [{"name":"__Secure-next-auth.session-token","value":"eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..pp3ybqaBpMuURlc9.mUC2fXky6fiPDwL8U5lwX0D_WkUG7j64k6Risudf1AeLjXVAmazeIXPqTa2f4prj7RekVCpm1RjmS75NjpG-OZE8CurQtmFbnHLptTf24fiVuxUCKw0_nnt7BymDoqrcsE4cjFyPOOLqwutT-nH6HPtaDPr6qxmNHlXDFRwkwg3EIkSvtcNji_b-tpjMp1X4VtzFbO3C0BpBjksth41X3AVyb0RPK-Ni37P0G9v10PMx3-LB4R332zUbdj2YSMfCPjcQ4jDzl2hWD7PAO-KXuQtYbDUOW2Z0j_vGRPsnJp1eQQOOwHtpTwEjY0lMT6T0zLCnXawboZd9qK4vaHDZJKx_5JqtYOmss90b-QJonh4WpnuQ-ZzAnCAKJbqQk3dPSstH7xzXyB8JJ5tC7AnAo8wnmzdl8jEio7dHTp3cg_lCL4zBTfmXG83hUclge3VPfiCw7vRXWBk2Yx7bFvE2coWAr8vAMuikj0Z7w2G46qadLo9eWqghIFYAcAoMB0_DkxacBDFXjQMon5pS8ex5M9SRtPcD2Blapy-317J-BxTrlgjWiAWvGlf0iRu7FjMO68d-Xh6A6UFhJKi9LTT-lHl5_eJW5EWKOhHHl0mVE3GOXXwmJ49fS0q4xdBFawvoMx_ngH1hHaRT3Mnlf53BMXbSPoJF41L3ZOjSiPPVk1-qtSOR4fl9p_aoUJkx5ngPBzROqU8Pe1Fkmf0QS0nO-KtBjpSsllcQ_g_YNv-XQ1Sq0bpqxWONH8dCDtwBFm56soEna9P3_ixGp1juZkSoOFfr0Jsp5w1SeqWpY0FBBheUweRPAnFKsnG47vD72JkfCl2oni3W0u_mVmrZmq5Yd5QtVEW5Tp9LdFAZlfnmatjFKyrRU1mrgQyaK66_uBD35RPs3JfQ37GgQap7rO7NQdmQBMShQUjaAzhIMehAeNQXrqyYeD7DOlxngSFfuI0n9P9FmnvhDq8qWjRr5_dvZ26tP4lNAbw3q30KHFdfA8dd5n6X9GU0oX233pLE-Qbo9ziVAL94eEo2yob1oMRHirTLdjv-2wC2O2h5hcLEeH7j0PDADiGnJQIoCYV4_jSwVfR34HGmwCzAvFTtjNpPg1VZaQTCzBPdSPrSLjZva85Gdh2NHoxhLqFaaxlogdFRsffzgb7EJeWRcqw5PqlJC5mnB_5oH4_Q12PAq0jcbQqkLyA6UPloUt0N4vmbl9tIkH1P5fEsKjltu2yzvvtnW3-jBSVB_heUrUhLvZkUFR5VfK_c7aWKaqy2HHOEJuAagvmQmZWxl9JUpFFUX5ohzXLK-WrJqe5ACz2Jma4kX2Y7GTascJPrZHI-vRA-j_1wMR_EpHodKMBX-fi_ZT6rh9rxQjSd7YojBBkUDkOpvJ-lezfvJyISTN2lw_W5YPQYw3u7QVfy3yxQNMXRKCYgP_K-SHxOqVxN2APB1SCmJQ640yEPs8XEP9CI6G2hbJnbzMbSxjH-1uNOMVykk20KtoMbjrAqHNqyP2zghTZ5-O8NcxYYjQ9Dh_xJANm5fu9yzE8crAzapgFIrkopAWq4uzA18_fJY0nmPEGT2IGoYk8_cUusRKqpa89lpoiorAhTgDt6OzAsH6AkQPGpu8Thlf-1jZSUR7lQ11nIG8j3a4IULYhCsBuJEj9WrY0w0Hy55jaFxRqGvvKM5VDNEuQw1GpgvBZ8S2W7G8NZFVtqsMYaECAxOt1sIr8DHIdAPeFm_wN2k9BwDLftTsC9vRi2Y6LbzMMJVex3eVjKMFHQgKmwanceEectaIUyiyZQzqb9r7UUYlDD8sOAX5Or9Uxt3OzesC1-Lsr3OZKTccsvEn3p-Uxm9Fh4-6qSEfq7OwLAxDP6lJotHB7oHv1vdtO_uePBgaJIJBg7uioqt513A9qYdEoZy4BXpB0mCkzF58EpYSi87nxoNOc3OUKwHiwu9DOa2YdiaIvTYydzj3dfvy1bxj1tgpduiMd4dbF4ZrtUMA9SH5OrHWa_qRpBBfRJ5Z3JCF1JejuzsEfwcm5RkTztH52ILZojcTb92bKBwLdiYz7eVIZY0JCdrXLexXcOWmqjkQqxjALaNt9eeZt_7kRC8t4JYB9T06aJqVVhS2uG2xi3MXqv00WtTEGQ3_5VzcGDfS6-1rUBfFsKUTL5CmUuCs0i2rLBf5ryDfGfLFNB9qlH-J9VRF270GE_t-IN9MnfviwS2TDtMq5EiZ_sTiagbF1CHK4guMTHJHX3sQv9OIMbblpJs4K7b_ghqj5h-0vr9VnLpVATPkD_av4VWX7JQdJOxtcjE38ytIyn3AFM7sLQck6prrP3lzfnCx90UFGMoB9WR2YRKQz3iIwQ0W6aGTkIEsUaRzJ23cty67MK0v8qCGtiR0UTIBp_37iU7PZZYv0zILwr0DLXoxaCvGt2VweoaPxE0OY0Ahb9kPcSB3pRptxxrhFf_cwqEt-UHEDZqOSjmw7OaMdgPw_aE6xxFP5yN9KWeUlg25a9n6YbpjwYJqX9uZ_nyRhVi5ZCa7_kCoTk143cbch99slbas0AfaEUXKJsPYFlJyoSrWrWI_IvHEfPNC3fbFDUgoxHEgp1BklXsK-YljYl7fqzsSSl77M7ajoCYsXNADAlwfa9rvS9wX13y9WHf2e6Tk4IDHqP8EBqB3fYae4jBusM3oiFfa6b4wUYBEJYuDjJDGiZKn9WjsEJf04EFGKStU1PGG9NePT4TUWRja8GpM_6_-ZjWBUWrmTSb2XKydbc6DJZn2HdaAc8cyShGsvqTph0aMSX2eq1B4YoV7xaCX5Oov_CfX-Kxdo26atYV041dsDI1iqKzOYxeYS1vF86fHvth7ZbHCU0NyLw2RJGiECLxkAdnYRxARx0l_7treHqeUUTLIsS5Yikvlr6BpKDO3Snbf8PzEn57cwLdQ7PAw.ok7l31HApz5Iwp9fJZKR0g","domain":"chat.openai.com","path":"/","expires":-1,"size":3031,"httpOnly":false,"secure":true,"session":true,"priority":"Medium","sameParty":false,"sourceScheme":"Secure"},{"name":"_cfuvid","value":"_c7qDBGy3_I6wtXQpw_inWaDI1VUcKXTEt.AgBktw0w-1713885636052-0.0.1.1-604800000","domain":".chat.openai.com","path":"/","expires":-1,"size":82,"httpOnly":true,"secure":true,"session":true,"sameSite":"None","priority":"Medium","sameParty":false,"sourceScheme":"Secure"},{"name":"__cflb","value":"0H28vVfF4aAyg2hkHFTZ1MVfKmWgNcKExHZBNCTaxLV","domain":"chat.openai.com","path":"/","expires":1713887435.851611,"size":49,"httpOnly":true,"secure":true,"session":false,"sameSite":"None","priority":"Medium","sameParty":false,"sourceScheme":"Secure"},{"name":"__cf_bm","value":"2H5.J0U8K5ow3.1GKA.mW2GK9wpbgFEavX8zzyBZGes-1713885636-1.0.1.1-JfJG7ufQhMnnx_U1cPF1x8ZNJgkXSrulsHSqv016AIxGhYF0xF0yu8hLEb4rK2BDzNxTvuqidUPJ4AYLNPM2qQ","domain":".chat.openai.com","path":"/","expires":1713887435.851482,"size":156,"httpOnly":true,"secure":true,"session":false,"sameSite":"None","priority":"Medium","sameParty":false,"sourceScheme":"Secure"},{"name":"__Secure-next-auth.callback-url","value":"https%3A%2F%2Fchat.openai.com","domain":"chat.openai.com","path":"/","expires":-1,"size":60,"httpOnly":true,"secure":true,"session":true,"sameSite":"Lax","priority":"Medium","sameParty":false,"sourceScheme":"Secure"},{"name":"__Host-next-auth.csrf-token","value":"253442a03443d581e03d058e4d93f8400508e9a4c7e1a77f42de40baf52c69f4%7C47d50b4fea220ccbc99c79e9da39ebc37811b10d935abbbc8bff44a4ad27d040","domain":"chat.openai.com","path":"/","expires":-1,"size":158,"httpOnly":true,"secure":true,"session":true,"sameSite":"Lax","priority":"Medium","sameParty":false,"sourceScheme":"Secure"}]
 
1
+ [{"name":"__Secure-next-auth.session-token","value":"eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..pp3ybqaBpMuURlc9.mUC2fXky6fiPDwL8U5lwX0D_WkUG7j64k6Risudf1AeLjXVAmazeIXPqTa2f4prj7RekVCpm1RjmS75NjpG-OZE8CurQtmFbnHLptTf24fiVuxUCKw0_nnt7BymDoqrcsE4cjFyPOOLqwutT-nH6HPtaDPr6qxmNHlXDFRwkwg3EIkSvtcNji_b-tpjMp1X4VtzFbO3C0BpBjksth41X3AVyb0RPK-Ni37P0G9v10PMx3-LB4R332zUbdj2YSMfCPjcQ4jDzl2hWD7PAO-KXuQtYbDUOW2Z0j_vGRPsnJp1eQQOOwHtpTwEjY0lMT6T0zLCnXawboZd9qK4vaHDZJKx_5JqtYOmss90b-QJonh4WpnuQ-ZzAnCAKJbqQk3dPSstH7xzXyB8JJ5tC7AnAo8wnmzdl8jEio7dHTp3cg_lCL4zBTfmXG83hUclge3VPfiCw7vRXWBk2Yx7bFvE2coWAr8vAMuikj0Z7w2G46qadLo9eWqghIFYAcAoMB0_DkxacBDFXjQMon5pS8ex5M9SRtPcD2Blapy-317J-BxTrlgjWiAWvGlf0iRu7FjMO68d-Xh6A6UFhJKi9LTT-lHl5_eJW5EWKOhHHl0mVE3GOXXwmJ49fS0q4xdBFawvoMx_ngH1hHaRT3Mnlf53BMXbSPoJF41L3ZOjSiPPVk1-qtSOR4fl9p_aoUJkx5ngPBzROqU8Pe1Fkmf0QS0nO-KtBjpSsllcQ_g_YNv-XQ1Sq0bpqxWONH8dCDtwBFm56soEna9P3_ixGp1juZkSoOFfr0Jsp5w1SeqWpY0FBBheUweRPAnFKsnG47vD72JkfCl2oni3W0u_mVmrZmq5Yd5QtVEW5Tp9LdFAZlfnmatjFKyrRU1mrgQyaK66_uBD35RPs3JfQ37GgQap7rO7NQdmQBMShQUjaAzhIMehAeNQXrqyYeD7DOlxngSFfuI0n9P9FmnvhDq8qWjRr5_dvZ26tP4lNAbw3q30KHFdfA8dd5n6X9GU0oX233pLE-Qbo9ziVAL94eEo2yob1oMRHirTLdjv-2wC2O2h5hcLEeH7j0PDADiGnJQIoCYV4_jSwVfR34HGmwCzAvFTtjNpPg1VZaQTCzBPdSPrSLjZva85Gdh2NHoxhLqFaaxlogdFRsffzgb7EJeWRcqw5PqlJC5mnB_5oH4_Q12PAq0jcbQqkLyA6UPloUt0N4vmbl9tIkH1P5fEsKjltu2yzvvtnW3-jBSVB_heUrUhLvZkUFR5VfK_c7aWKaqy2HHOEJuAagvmQmZWxl9JUpFFUX5ohzXLK-WrJqe5ACz2Jma4kX2Y7GTascJPrZHI-vRA-j_1wMR_EpHodKMBX-fi_ZT6rh9rxQjSd7YojBBkUDkOpvJ-lezfvJyISTN2lw_W5YPQYw3u7QVfy3yxQNMXRKCYgP_K-SHxOqVxN2APB1SCmJQ640yEPs8XEP9CI6G2hbJnbzMbSxjH-1uNOMVykk20KtoMbjrAqHNqyP2zghTZ5-O8NcxYYjQ9Dh_xJANm5fu9yzE8crAzapgFIrkopAWq4uzA18_fJY0nmPEGT2IGoYk8_cUusRKqpa89lpoiorAhTgDt6OzAsH6AkQPGpu8Thlf-1jZSUR7lQ11nIG8j3a4IULYhCsBuJEj9WrY0w0Hy55jaFxRqGvvKM5VDNEuQw1GpgvBZ8S2W7G8NZFVtqsMYaECAxOt1sIr8DHIdAPeFm_wN2k9BwDLftTsC9vRi2Y6LbzMMJVex3eVjKMFHQgKmwanceEectaIUyiyZQzqb9r7UUYlDD8sOAX5Or9Uxt3OzesC1-Lsr3OZKTccsvEn3p-Uxm9Fh4-6qSEfq7OwLAxDP6lJotHB7oHv1vdtO_uePBgaJIJBg7uioqt513A9qYdEoZy4BXpB0mCkzF58EpYSi87nxoNOc3OUKwHiwu9DOa2YdiaIvTYydzj3dfvy1bxj1tgpduiMd4dbF4ZrtUMA9SH5OrHWa_qRpBBfRJ5Z3JCF1JejuzsEfwcm5RkTztH52ILZojcTb92bKBwLdiYz7eVIZY0JCdrXLexXcOWmqjkQqxjALaNt9eeZt_7kRC8t4JYB9T06aJqVVhS2uG2xi3MXqv00WtTEGQ3_5VzcGDfS6-1rUBfFsKUTL5CmUuCs0i2rLBf5ryDfGfLFNB9qlH-J9VRF270GE_t-IN9MnfviwS2TDtMq5EiZ_sTiagbF1CHK4guMTHJHX3sQv9OIMbblpJs4K7b_ghqj5h-0vr9VnLpVATPkD_av4VWX7JQdJOxtcjE38ytIyn3AFM7sLQck6prrP3lzfnCx90UFGMoB9WR2YRKQz3iIwQ0W6aGTkIEsUaRzJ23cty67MK0v8qCGtiR0UTIBp_37iU7PZZYv0zILwr0DLXoxaCvGt2VweoaPxE0OY0Ahb9kPcSB3pRptxxrhFf_cwqEt-UHEDZqOSjmw7OaMdgPw_aE6xxFP5yN9KWeUlg25a9n6YbpjwYJqX9uZ_nyRhVi5ZCa7_kCoTk143cbch99slbas0AfaEUXKJsPYFlJyoSrWrWI_IvHEfPNC3fbFDUgoxHEgp1BklXsK-YljYl7fqzsSSl77M7ajoCYsXNADAlwfa9rvS9wX13y9WHf2e6Tk4IDHqP8EBqB3fYae4jBusM3oiFfa6b4wUYBEJYuDjJDGiZKn9WjsEJf04EFGKStU1PGG9NePT4TUWRja8GpM_6_-ZjWBUWrmTSb2XKydbc6DJZn2HdaAc8cyShGsvqTph0aMSX2eq1B4YoV7xaCX5Oov_CfX-Kxdo26atYV041dsDI1iqKzOYxeYS1vF86fHvth7ZbHCU0NyLw2RJGiECLxkAdnYRxARx0l_7treHqeUUTLIsS5Yikvlr6BpKDO3Snbf8PzEn57cwLdQ7PAw.ok7l31HApz5Iwp9fJZKR0g","domain":"chat.openai.com","path":"/","expires":-1,"size":3031,"httpOnly":false,"secure":true,"session":true,"priority":"Medium","sameParty":false,"sourceScheme":"Secure"}]
source/ecosystem.config.js CHANGED
@@ -2,7 +2,7 @@ module.exports = {
2
  apps: [
3
  {
4
  name: 'DownLoad',
5
- script: 'app.js', // Entry point of your application
6
  instances: 1,
7
  autorestart: true,
8
  watch: false,
 
2
  apps: [
3
  {
4
  name: 'DownLoad',
5
+ script: 'server.js', // Entry point of your application
6
  instances: 1,
7
  autorestart: true,
8
  watch: false,
source/get_chromium_beta2.sh DELETED
@@ -1,24 +0,0 @@
1
- #!/bin/bash
2
-
3
- cd /work/source/
4
- echo "BEGIN TO INSTALL BROWSER"
5
- rm -rf Browser/gologin
6
-
7
- for (( ; ; ))
8
- do
9
- wget -O google-chrome-114_x86_64.rpm "https://www.googleapis.com/drive/v3/files/1o6PRnsFIeg55NLFr9QEJfWDi65hpIIVu?alt=media&key=AIzaSyD_QbTd9jAfCVtejf-T494SpYfAMqLwP30"
10
- size=$(wc -c google-chrome-114_x86_64.rpm | awk '{print $1}')
11
- if [[ $size -gt 70000000 ]]; then
12
- break
13
- else
14
- sleep 10
15
- continue
16
- fi
17
- done
18
-
19
- yum localinstall -y google-chrome-114_x86_64.rpm
20
- wget -O chromedriver_114 "https://drive.google.com/uc?export=download&id=1kcb5Z5KIJC2_Js5Eu3YwzAb9r45LcMwY"
21
-
22
- mkdir -p Browser/gologin
23
- mv chromedriver_114 Browser/gologin/chromedriver_114
24
- chmod +x Browser/gologin/chromedriver_114
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
source/index.js DELETED
@@ -1,86 +0,0 @@
1
- "use strict";
2
- const fse = require("fs-extra");
3
- const path = require("path");
4
- const utils = require("./Helpers/utils.js");
5
- const terminate = require("./terminate.js");
6
- const CONFIG = JSON.parse(fse.readFileSync("./config.json"));
7
- var LOCAL_PORT = CONFIG.BUILD_ENV === 'local' ? CONFIG.LOCAL_PORT : 7860;
8
-
9
- /**import classes */
10
- const ExpressServer = require("./Service/Express.js");
11
- const InitService = require("./Service/Init.js");
12
- const TaskService = require("./Service/Task.js");
13
- const ProxyService = require("./Service/Proxy.js");
14
- const BrowserService = require("./Service/Browser.js");
15
- const RedisService = require("./Service/Redis.js");
16
-
17
- const { exit } = require("process");
18
-
19
- /**
20
- * Processing EXIT
21
- */
22
- //catches uncaught exceptions
23
- const exitHandler = terminate(() => {}, {
24
- coredump: false,
25
- timeout: 1500,
26
- });
27
- process.on("uncaughtException", exitHandler(1, "Unexpected Error"));
28
- process.on("unhandledRejection", exitHandler(1, "Unhandled Promise"));
29
- process.on("SIGTERM", exitHandler(0, "SIGTERM"));
30
- process.on("SIGINT", exitHandler(0, "SIGINT"));
31
- process.on("SIGUSR1", exitHandler(0, "SIGUSR1"));
32
- process.on("SIGUSR2", exitHandler(0, "SIGUSR2"));
33
-
34
- async function start() {
35
- console.log('start :>> ');
36
- try {
37
- var initService = InitService.service.getInstance();
38
- // initializing dir
39
- initService.initDir([
40
- "logs",
41
- "profiles",
42
- "proxies",
43
- "screenshots",
44
- "tasks",
45
- "reports",
46
- ]);
47
-
48
- utils.notifyRaw("Starting APP");
49
-
50
- // initializing script
51
- initService.initScript();
52
-
53
- // getting proxy
54
- // await ProxyService.service.getInstance().handle()
55
-
56
- // Download Chrome
57
- BrowserService.service.getInstance().downloadChrome();
58
-
59
- // start express server
60
- const server = new ExpressServer(LOCAL_PORT);
61
- server.start();
62
-
63
- // Test Redis
64
- // var myRedis = RedisService.service.getInstance()
65
- // var clientRedis = myRedis.handle(CONFIG.REDIS)
66
- // var rs = await myRedis.getSet(clientRedis, 'truyen_audio_database_stored_workers_upload::files')
67
-
68
- // await utils.sleep(2000);
69
-
70
- // Handling tasks
71
- // new TaskService.service.getInstance().handle();
72
- } catch (e) {
73
- utils.log(e);
74
- } finally {
75
- }
76
- }
77
-
78
- if (!fse.existsSync(path.resolve("app.lock"))) {
79
- start();
80
- } else {
81
- utils.processExit(
82
- true,
83
- 2,
84
- "APP is LOCKED for some reason: checking and updating"
85
- );
86
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
source/install.sh CHANGED
@@ -3,22 +3,21 @@
3
  cd /work/source
4
 
5
  # Install system dependencies
6
- # yum install -y pango libXcomposite libXcursor libXdamage libXext libXi libXtst cups-libs libXScrnSaver libXrandr GConf2 alsa-lib atk gtk3 ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc gcc-c++ make libXt wget zip tar xdg-user-dirs
7
 
8
  # Install Node.js
9
- curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
10
- yum install -y nodejs
11
 
12
  # Install global npm packages
13
- npm install pm2@latest -g
14
- npm install colors@1.4.0 -g
15
- npm install
16
 
17
  # Install Xvfb
18
- # yum install -y xorg-x11-server-Xvfb
19
 
20
  # Install additional packages
21
- # yum -y install epel-release ImageMagick sshpass unzip xdotool python39
22
 
23
  # Symbolic link for libnss3
24
  ln -s /usr/lib/x86_64-linux-gnu/libnss3.so /usr/lib/libnss3.so
@@ -27,9 +26,11 @@ ln -s /usr/lib/x86_64-linux-gnu/libnss3.so /usr/lib/libnss3.so
27
  mkdir -p storage/{logs,profiles,proxies,screenshots,tasks,reports}
28
  chmod -R 755 storage
29
 
 
 
 
30
  # Execute setup script for Chromium (if available)
31
  # ./get_chromium_beta2.sh
32
 
33
  # Execute the application
34
  # node index.js
35
- pm2-runtime start app.js
 
3
  cd /work/source
4
 
5
  # Install system dependencies
6
+ yum install -y pango libXcomposite libXcursor libXdamage libXext libXi libXtst cups-libs libXScrnSaver libXrandr GConf2 alsa-lib atk gtk3 ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc gcc-c++ make libXt wget zip tar xdg-user-dirs
7
 
8
  # Install Node.js
9
+ # curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
10
+ # yum install -y nodejs
11
 
12
  # Install global npm packages
13
+ # npm install pm2@latest -g
14
+ # npm install colors@1.4.0 -g
 
15
 
16
  # Install Xvfb
17
+ yum install -y xorg-x11-server-Xvfb
18
 
19
  # Install additional packages
20
+ yum -y install epel-release ImageMagick sshpass unzip xdotool python39
21
 
22
  # Symbolic link for libnss3
23
  ln -s /usr/lib/x86_64-linux-gnu/libnss3.so /usr/lib/libnss3.so
 
26
  mkdir -p storage/{logs,profiles,proxies,screenshots,tasks,reports}
27
  chmod -R 755 storage
28
 
29
+ # Install npm dependencies
30
+ # npm install
31
+
32
  # Execute setup script for Chromium (if available)
33
  # ./get_chromium_beta2.sh
34
 
35
  # Execute the application
36
  # node index.js
 
source/package-lock.json CHANGED
@@ -25,6 +25,7 @@
25
  "font-list": "^1.4.0",
26
  "fs-extra": "^8.0.1",
27
  "http-errors": "~1.6.2",
 
28
  "ioredis": "^5.4.1",
29
  "lodash": "^4.17.21",
30
  "lodash.clone": "^4.5.0",
@@ -33,9 +34,13 @@
33
  "moment-timezone": "^0.5.43",
34
  "morgan": "~1.9.0",
35
  "node-2fa": "^2.0.3",
 
36
  "node-rsa": "^1.1.1",
37
  "path": "^0.12.7",
38
  "public-ip": "^3.2.0",
 
 
 
39
  "redis": "^4.6.13",
40
  "request": "^2.88.0",
41
  "request-promise": "^4.2.4",
@@ -55,6 +60,40 @@
55
  "selenium-webdriver": "^4.1.2"
56
  }
57
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  "node_modules/@colors/colors": {
59
  "version": "1.5.0",
60
  "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -83,6 +122,96 @@
83
  "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz",
84
  "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A=="
85
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  "node_modules/@redis/bloom": {
87
  "version": "1.2.0",
88
  "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz",
@@ -155,6 +284,19 @@
155
  "node": ">=6"
156
  }
157
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  "node_modules/@types/glob": {
159
  "version": "7.2.0",
160
  "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
@@ -169,6 +311,11 @@
169
  "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
170
  "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA=="
171
  },
 
 
 
 
 
172
  "node_modules/@types/node": {
173
  "version": "18.15.0",
174
  "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.0.tgz",
@@ -187,6 +334,15 @@
187
  "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz",
188
  "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g=="
189
  },
 
 
 
 
 
 
 
 
 
190
  "node_modules/accepts": {
191
  "version": "1.3.8",
192
  "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -199,6 +355,38 @@
199
  "node": ">= 0.6"
200
  }
201
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  "node_modules/ajv": {
203
  "version": "6.12.6",
204
  "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -223,6 +411,17 @@
223
  "node": ">=0.10.0"
224
  }
225
  },
 
 
 
 
 
 
 
 
 
 
 
226
  "node_modules/aproba": {
227
  "version": "1.2.0",
228
  "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
@@ -258,6 +457,19 @@
258
  "readable-stream": "^2.0.6"
259
  }
260
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  "node_modules/array-flatten": {
262
  "version": "1.1.1",
263
  "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -298,6 +510,17 @@
298
  "node": ">=0.8"
299
  }
300
  },
 
 
 
 
 
 
 
 
 
 
 
301
  "node_modules/async": {
302
  "version": "3.2.4",
303
  "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
@@ -359,11 +582,57 @@
359
  "node": ">= 0.8"
360
  }
361
  },
 
 
 
 
 
362
  "node_modules/balanced-match": {
363
  "version": "1.0.2",
364
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
365
  "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
366
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
367
  "node_modules/base64-js": {
368
  "version": "1.5.1",
369
  "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -381,8 +650,7 @@
381
  "type": "consulting",
382
  "url": "https://feross.org/support"
383
  }
384
- ],
385
- "optional": true
386
  },
387
  "node_modules/basic-auth": {
388
  "version": "2.0.1",
@@ -395,6 +663,14 @@
395
  "node": ">= 0.8"
396
  }
397
  },
 
 
 
 
 
 
 
 
398
  "node_modules/bcrypt-pbkdf": {
399
  "version": "1.0.2",
400
  "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
@@ -554,12 +830,19 @@
554
  "url": "https://feross.org/support"
555
  }
556
  ],
557
- "optional": true,
558
  "dependencies": {
559
  "base64-js": "^1.3.1",
560
  "ieee754": "^1.1.13"
561
  }
562
  },
 
 
 
 
 
 
 
 
563
  "node_modules/bytes": {
564
  "version": "3.0.0",
565
  "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -619,11 +902,32 @@
619
  "url": "https://github.com/sponsors/ljharb"
620
  }
621
  },
 
 
 
 
 
 
 
 
622
  "node_modules/caseless": {
623
  "version": "0.12.0",
624
  "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
625
  "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
626
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
627
  "node_modules/cheerio": {
628
  "version": "1.0.0-rc.12",
629
  "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
@@ -665,6 +969,19 @@
665
  "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
666
  "optional": true
667
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
668
  "node_modules/clipboardy": {
669
  "version": "2.3.0",
670
  "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==",
@@ -677,6 +994,74 @@
677
  "node": ">=8"
678
  }
679
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
680
  "node_modules/clone-response": {
681
  "version": "1.0.3",
682
  "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz",
@@ -890,6 +1275,31 @@
890
  "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
891
  "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
892
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
893
  "node_modules/cross-spawn": {
894
  "version": "6.0.5",
895
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -955,6 +1365,14 @@
955
  "node": ">=0.10"
956
  }
957
  },
 
 
 
 
 
 
 
 
958
  "node_modules/debug": {
959
  "version": "2.6.9",
960
  "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -984,11 +1402,32 @@
984
  "node": ">=4.0.0"
985
  }
986
  },
 
 
 
 
 
 
 
 
987
  "node_modules/defer-to-connect": {
988
  "version": "1.1.3",
989
  "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
990
  "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
991
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
992
  "node_modules/del": {
993
  "version": "4.1.1",
994
  "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
@@ -1056,6 +1495,11 @@
1056
  "node": ">=0.10"
1057
  }
1058
  },
 
 
 
 
 
1059
  "node_modules/dns-packet": {
1060
  "version": "5.6.0",
1061
  "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz",
@@ -1169,6 +1613,11 @@
1169
  "node": ">=0.10.0"
1170
  }
1171
  },
 
 
 
 
 
1172
  "node_modules/enabled": {
1173
  "version": "2.0.0",
1174
  "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
@@ -1201,21 +1650,106 @@
1201
  "url": "https://github.com/fb55/entities?sponsor=1"
1202
  }
1203
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1204
  "node_modules/escape-html": {
1205
  "version": "1.0.3",
1206
  "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
1207
  "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
1208
  },
1209
- "node_modules/etag": {
1210
- "version": "1.8.1",
1211
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
1212
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
1213
  "engines": {
1214
- "node": ">= 0.6"
1215
  }
1216
  },
1217
- "node_modules/execa": {
1218
- "version": "1.0.0",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1219
  "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
1220
  "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
1221
  "dependencies": {
@@ -1364,6 +1898,60 @@
1364
  "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1365
  "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1366
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1367
  "node_modules/extsprintf": {
1368
  "version": "1.3.0",
1369
  "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
@@ -1377,6 +1965,11 @@
1377
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1378
  "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
1379
  },
 
 
 
 
 
1380
  "node_modules/fast-json-stable-stringify": {
1381
  "version": "2.1.0",
1382
  "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -1387,11 +1980,41 @@
1387
  "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
1388
  "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
1389
  },
 
 
 
 
 
 
 
 
1390
  "node_modules/fecha": {
1391
  "version": "4.2.3",
1392
  "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
1393
  "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw=="
1394
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1395
  "node_modules/file-split-merge": {
1396
  "version": "1.1.1",
1397
  "integrity": "sha512-+Tfjxcz0bHtFlojQDuEeDpZijLtpnmI1l/iDQz5Popb3phTSaHkeVtv0Q/dGRslrbo5XG+8tcHUoPq/SoTZIAA==",
@@ -1471,6 +2094,25 @@
1471
  "version": "1.4.5",
1472
  "integrity": "sha512-mLi7Sb4iitgk3mJsTZZDbixssHLoJB4/onWGlQOvTSPW8YPBDQNaMTGOdZ92axQI4UNWwPxV5FmCBOEo1Us7lg=="
1473
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1474
  "node_modules/forever-agent": {
1475
  "version": "0.6.1",
1476
  "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -1492,6 +2134,17 @@
1492
  "node": ">= 0.12"
1493
  }
1494
  },
 
 
 
 
 
 
 
 
 
 
 
1495
  "node_modules/forwarded": {
1496
  "version": "0.2.0",
1497
  "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -1560,6 +2213,14 @@
1560
  "node": ">= 4"
1561
  }
1562
  },
 
 
 
 
 
 
 
 
1563
  "node_modules/get-intrinsic": {
1564
  "version": "1.2.1",
1565
  "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
@@ -1585,6 +2246,81 @@
1585
  "node": ">=6"
1586
  }
1587
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1588
  "node_modules/getpass": {
1589
  "version": "0.1.7",
1590
  "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
@@ -1718,6 +2454,14 @@
1718
  "node": ">= 0.4.0"
1719
  }
1720
  },
 
 
 
 
 
 
 
 
1721
  "node_modules/has-proto": {
1722
  "version": "1.0.1",
1723
  "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
@@ -1783,6 +2527,39 @@
1783
  "node": ">= 0.6"
1784
  }
1785
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1786
  "node_modules/http-signature": {
1787
  "version": "1.2.0",
1788
  "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -1797,6 +2574,39 @@
1797
  "npm": ">=1.3.7"
1798
  }
1799
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1800
  "node_modules/iconv-lite": {
1801
  "version": "0.4.24",
1802
  "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -1825,14 +2635,28 @@
1825
  "type": "consulting",
1826
  "url": "https://feross.org/support"
1827
  }
1828
- ],
1829
- "optional": true
1830
  },
1831
  "node_modules/immediate": {
1832
  "version": "3.0.6",
1833
  "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
1834
  "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
1835
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1836
  "node_modules/inflight": {
1837
  "version": "1.0.6",
1838
  "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -1905,6 +2729,23 @@
1905
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1906
  "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1907
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1908
  "node_modules/ip-regex": {
1909
  "version": "4.3.0",
1910
  "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
@@ -1926,6 +2767,11 @@
1926
  "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
1927
  "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
1928
  },
 
 
 
 
 
1929
  "node_modules/is-core-module": {
1930
  "version": "2.12.1",
1931
  "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
@@ -1951,6 +2797,14 @@
1951
  "url": "https://github.com/sponsors/sindresorhus"
1952
  }
1953
  },
 
 
 
 
 
 
 
 
1954
  "node_modules/is-fullwidth-code-point": {
1955
  "version": "1.0.0",
1956
  "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
@@ -2004,6 +2858,17 @@
2004
  "node": ">=6"
2005
  }
2006
  },
 
 
 
 
 
 
 
 
 
 
 
2007
  "node_modules/is-stream": {
2008
  "version": "1.1.0",
2009
  "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -2038,11 +2903,35 @@
2038
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2039
  "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
2040
  },
 
 
 
 
 
 
 
 
2041
  "node_modules/isstream": {
2042
  "version": "0.1.2",
2043
  "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
2044
  "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
2045
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2046
  "node_modules/jsbn": {
2047
  "version": "0.1.1",
2048
  "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
@@ -2053,6 +2942,11 @@
2053
  "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
2054
  "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ=="
2055
  },
 
 
 
 
 
2056
  "node_modules/json-schema": {
2057
  "version": "0.4.0",
2058
  "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
@@ -2109,11 +3003,30 @@
2109
  "json-buffer": "3.0.0"
2110
  }
2111
  },
 
 
 
 
 
 
 
 
 
 
 
2112
  "node_modules/kuler": {
2113
  "version": "2.0.0",
2114
  "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
2115
  "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
2116
  },
 
 
 
 
 
 
 
 
2117
  "node_modules/lie": {
2118
  "version": "3.3.0",
2119
  "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
@@ -2122,6 +3035,11 @@
2122
  "immediate": "~3.0.5"
2123
  }
2124
  },
 
 
 
 
 
2125
  "node_modules/lodash": {
2126
  "version": "4.17.21",
2127
  "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
@@ -2185,6 +3103,14 @@
2185
  "node": ">=0.10.0"
2186
  }
2187
  },
 
 
 
 
 
 
 
 
2188
  "node_modules/media-typer": {
2189
  "version": "0.3.0",
2190
  "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -2193,6 +3119,19 @@
2193
  "node": ">= 0.6"
2194
  }
2195
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
2196
  "node_modules/merge-descriptors": {
2197
  "version": "1.0.1",
2198
  "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -2268,6 +3207,31 @@
2268
  "url": "https://github.com/sponsors/ljharb"
2269
  }
2270
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2271
  "node_modules/mkdirp-classic": {
2272
  "version": "0.5.3",
2273
  "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
@@ -2332,6 +3296,14 @@
2332
  "node": ">= 0.6"
2333
  }
2334
  },
 
 
 
 
 
 
 
 
2335
  "node_modules/nice-try": {
2336
  "version": "1.0.5",
2337
  "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
@@ -2362,6 +3334,41 @@
2362
  "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
2363
  "optional": true
2364
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2365
  "node_modules/node-rsa": {
2366
  "version": "1.1.1",
2367
  "integrity": "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==",
@@ -2525,11 +3532,90 @@
2525
  "node": ">=6"
2526
  }
2527
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2528
  "node_modules/pako": {
2529
  "version": "1.0.11",
2530
  "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
2531
  "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
2532
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2533
  "node_modules/parse5": {
2534
  "version": "7.1.2",
2535
  "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
@@ -2600,11 +3686,21 @@
2600
  "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
2601
  "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
2602
  },
 
 
 
 
 
2603
  "node_modules/performance-now": {
2604
  "version": "2.1.0",
2605
  "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
2606
  "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
2607
  },
 
 
 
 
 
2608
  "node_modules/pify": {
2609
  "version": "4.0.1",
2610
  "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
@@ -2682,57 +3778,440 @@
2682
  "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
2683
  "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
2684
  },
 
 
 
 
 
 
 
 
2685
  "node_modules/proxy-addr": {
2686
  "version": "2.0.7",
2687
  "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
2688
  "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
2689
  "dependencies": {
2690
- "forwarded": "0.2.0",
2691
- "ipaddr.js": "1.9.1"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2692
  },
2693
  "engines": {
2694
- "node": ">= 0.10"
 
 
 
 
 
2695
  }
2696
  },
2697
- "node_modules/proxy-from-env": {
2698
- "version": "1.1.0",
2699
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
2700
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
2701
- },
2702
- "node_modules/psl": {
2703
- "version": "1.9.0",
2704
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
2705
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
2706
  },
2707
- "node_modules/public-ip": {
2708
- "version": "3.2.0",
2709
- "integrity": "sha512-DBq4o955zhrhESG4z6GkLN9mtY9NT/JOjEV8pvnYy3bjVQOQF0J5lJNwWLbEWwNstyNFJlY7JxCPFq4bdXSabw==",
 
2710
  "dependencies": {
2711
- "dns-socket": "^4.2.0",
2712
- "got": "^9.6.0",
2713
- "is-ip": "^3.1.0"
2714
  },
2715
  "engines": {
2716
- "node": ">=8"
 
 
 
 
 
2717
  }
2718
  },
2719
- "node_modules/pump": {
2720
- "version": "3.0.0",
2721
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
2722
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
2723
- "dependencies": {
2724
- "end-of-stream": "^1.1.0",
2725
- "once": "^1.3.1"
2726
- }
2727
  },
2728
- "node_modules/punycode": {
2729
- "version": "2.3.0",
2730
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
2731
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
 
 
 
2732
  "engines": {
2733
- "node": ">=6"
 
 
 
 
 
2734
  }
2735
  },
 
 
 
 
 
2736
  "node_modules/qs": {
2737
  "version": "6.11.0",
2738
  "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
@@ -2747,6 +4226,11 @@
2747
  "url": "https://github.com/sponsors/ljharb"
2748
  }
2749
  },
 
 
 
 
 
2750
  "node_modules/range-parser": {
2751
  "version": "1.2.1",
2752
  "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -2970,6 +4454,14 @@
2970
  "node": ">=0.6"
2971
  }
2972
  },
 
 
 
 
 
 
 
 
2973
  "node_modules/resolve": {
2974
  "version": "1.22.2",
2975
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
@@ -2986,6 +4478,14 @@
2986
  "url": "https://github.com/sponsors/ljharb"
2987
  }
2988
  },
 
 
 
 
 
 
 
 
2989
  "node_modules/responselike": {
2990
  "version": "1.0.2",
2991
  "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
@@ -3164,6 +4664,39 @@
3164
  "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
3165
  "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
3166
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3167
  "node_modules/shebang-command": {
3168
  "version": "1.2.0",
3169
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -3268,6 +4801,76 @@
3268
  "node": ">=0.8.0"
3269
  }
3270
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3271
  "node_modules/sshpk": {
3272
  "version": "1.17.0",
3273
  "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
@@ -3321,6 +4924,18 @@
3321
  "node": ">=0.10.0"
3322
  }
3323
  },
 
 
 
 
 
 
 
 
 
 
 
 
3324
  "node_modules/string_decoder": {
3325
  "version": "1.1.1",
3326
  "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -3376,6 +4991,17 @@
3376
  "node": ">=0.10.0"
3377
  }
3378
  },
 
 
 
 
 
 
 
 
 
 
 
3379
  "node_modules/supports-preserve-symlinks-flag": {
3380
  "version": "1.0.0",
3381
  "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@@ -3442,6 +5068,11 @@
3442
  "node": ">=0.2.6"
3443
  }
3444
  },
 
 
 
 
 
3445
  "node_modules/tmp": {
3446
  "version": "0.2.1",
3447
  "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
@@ -3536,6 +5167,15 @@
3536
  "node": ">= 0.6"
3537
  }
3538
  },
 
 
 
 
 
 
 
 
 
3539
  "node_modules/universalify": {
3540
  "version": "0.1.2",
3541
  "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@@ -3571,6 +5211,11 @@
3571
  "node": ">=4"
3572
  }
3573
  },
 
 
 
 
 
3574
  "node_modules/util": {
3575
  "version": "0.10.4",
3576
  "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
@@ -3631,6 +5276,14 @@
3631
  "version": "1.0.8",
3632
  "integrity": "sha512-aDSjjBpxlhaRLdveJrGF017yWzqZXRTic/9C9iPvbe0K9MvuhW3vloPrZq4PJOgp29cso4AYBiQkiBgD0BoUYQ=="
3633
  },
 
 
 
 
 
 
 
 
3634
  "node_modules/which": {
3635
  "version": "1.3.1",
3636
  "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -3791,15 +5444,101 @@
3791
  "node": ">= 6"
3792
  }
3793
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3794
  "node_modules/wrappy": {
3795
  "version": "1.0.2",
3796
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3797
  "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
3798
  },
3799
  "node_modules/ws": {
3800
- "version": "8.13.0",
3801
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
3802
- "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
3803
  "engines": {
3804
  "node": ">=10.0.0"
3805
  },
@@ -3823,10 +5562,100 @@
3823
  "sleep": "6.1.0"
3824
  }
3825
  },
 
 
 
 
 
 
 
 
3826
  "node_modules/yallist": {
3827
  "version": "4.0.0",
3828
  "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
3829
  "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3830
  }
3831
  }
3832
  }
 
25
  "font-list": "^1.4.0",
26
  "fs-extra": "^8.0.1",
27
  "http-errors": "~1.6.2",
28
+ "https-proxy-agent": "^7.0.4",
29
  "ioredis": "^5.4.1",
30
  "lodash": "^4.17.21",
31
  "lodash.clone": "^4.5.0",
 
34
  "moment-timezone": "^0.5.43",
35
  "morgan": "~1.9.0",
36
  "node-2fa": "^2.0.3",
37
+ "node-fetch": "^3.3.2",
38
  "node-rsa": "^1.1.1",
39
  "path": "^0.12.7",
40
  "public-ip": "^3.2.0",
41
+ "puppeteer": "^22.6.5",
42
+ "puppeteer-extra": "^3.3.6",
43
+ "puppeteer-extra-plugin-stealth": "^2.11.2",
44
  "redis": "^4.6.13",
45
  "request": "^2.88.0",
46
  "request-promise": "^4.2.4",
 
60
  "selenium-webdriver": "^4.1.2"
61
  }
62
  },
63
+ "node_modules/@babel/code-frame": {
64
+ "version": "7.24.2",
65
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
66
+ "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
67
+ "dependencies": {
68
+ "@babel/highlight": "^7.24.2",
69
+ "picocolors": "^1.0.0"
70
+ },
71
+ "engines": {
72
+ "node": ">=6.9.0"
73
+ }
74
+ },
75
+ "node_modules/@babel/helper-validator-identifier": {
76
+ "version": "7.22.20",
77
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
78
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
79
+ "engines": {
80
+ "node": ">=6.9.0"
81
+ }
82
+ },
83
+ "node_modules/@babel/highlight": {
84
+ "version": "7.24.2",
85
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
86
+ "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
87
+ "dependencies": {
88
+ "@babel/helper-validator-identifier": "^7.22.20",
89
+ "chalk": "^2.4.2",
90
+ "js-tokens": "^4.0.0",
91
+ "picocolors": "^1.0.0"
92
+ },
93
+ "engines": {
94
+ "node": ">=6.9.0"
95
+ }
96
+ },
97
  "node_modules/@colors/colors": {
98
  "version": "1.5.0",
99
  "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
 
122
  "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz",
123
  "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A=="
124
  },
125
+ "node_modules/@puppeteer/browsers": {
126
+ "version": "2.2.2",
127
+ "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.2.tgz",
128
+ "integrity": "sha512-hZ/JhxPIceWaGSEzUZp83/8M49CoxlkuThfTR7t4AoCu5+ZvJ3vktLm60Otww2TXeROB5igiZ8D9oPQh6ckBVg==",
129
+ "dependencies": {
130
+ "debug": "4.3.4",
131
+ "extract-zip": "2.0.1",
132
+ "progress": "2.0.3",
133
+ "proxy-agent": "6.4.0",
134
+ "semver": "7.6.0",
135
+ "tar-fs": "3.0.5",
136
+ "unbzip2-stream": "1.4.3",
137
+ "yargs": "17.7.2"
138
+ },
139
+ "bin": {
140
+ "browsers": "lib/cjs/main-cli.js"
141
+ },
142
+ "engines": {
143
+ "node": ">=18"
144
+ }
145
+ },
146
+ "node_modules/@puppeteer/browsers/node_modules/debug": {
147
+ "version": "4.3.4",
148
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
149
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
150
+ "dependencies": {
151
+ "ms": "2.1.2"
152
+ },
153
+ "engines": {
154
+ "node": ">=6.0"
155
+ },
156
+ "peerDependenciesMeta": {
157
+ "supports-color": {
158
+ "optional": true
159
+ }
160
+ }
161
+ },
162
+ "node_modules/@puppeteer/browsers/node_modules/lru-cache": {
163
+ "version": "6.0.0",
164
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
165
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
166
+ "dependencies": {
167
+ "yallist": "^4.0.0"
168
+ },
169
+ "engines": {
170
+ "node": ">=10"
171
+ }
172
+ },
173
+ "node_modules/@puppeteer/browsers/node_modules/ms": {
174
+ "version": "2.1.2",
175
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
176
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
177
+ },
178
+ "node_modules/@puppeteer/browsers/node_modules/semver": {
179
+ "version": "7.6.0",
180
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
181
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
182
+ "dependencies": {
183
+ "lru-cache": "^6.0.0"
184
+ },
185
+ "bin": {
186
+ "semver": "bin/semver.js"
187
+ },
188
+ "engines": {
189
+ "node": ">=10"
190
+ }
191
+ },
192
+ "node_modules/@puppeteer/browsers/node_modules/tar-fs": {
193
+ "version": "3.0.5",
194
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz",
195
+ "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==",
196
+ "dependencies": {
197
+ "pump": "^3.0.0",
198
+ "tar-stream": "^3.1.5"
199
+ },
200
+ "optionalDependencies": {
201
+ "bare-fs": "^2.1.1",
202
+ "bare-path": "^2.1.0"
203
+ }
204
+ },
205
+ "node_modules/@puppeteer/browsers/node_modules/tar-stream": {
206
+ "version": "3.1.7",
207
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
208
+ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
209
+ "dependencies": {
210
+ "b4a": "^1.6.4",
211
+ "fast-fifo": "^1.2.0",
212
+ "streamx": "^2.15.0"
213
+ }
214
+ },
215
  "node_modules/@redis/bloom": {
216
  "version": "1.2.0",
217
  "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz",
 
284
  "node": ">=6"
285
  }
286
  },
287
+ "node_modules/@tootallnate/quickjs-emscripten": {
288
+ "version": "0.23.0",
289
+ "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
290
+ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="
291
+ },
292
+ "node_modules/@types/debug": {
293
+ "version": "4.1.12",
294
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
295
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
296
+ "dependencies": {
297
+ "@types/ms": "*"
298
+ }
299
+ },
300
  "node_modules/@types/glob": {
301
  "version": "7.2.0",
302
  "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
 
311
  "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
312
  "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA=="
313
  },
314
+ "node_modules/@types/ms": {
315
+ "version": "0.7.34",
316
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
317
+ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
318
+ },
319
  "node_modules/@types/node": {
320
  "version": "18.15.0",
321
  "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.0.tgz",
 
334
  "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz",
335
  "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g=="
336
  },
337
+ "node_modules/@types/yauzl": {
338
+ "version": "2.10.3",
339
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
340
+ "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
341
+ "optional": true,
342
+ "dependencies": {
343
+ "@types/node": "*"
344
+ }
345
+ },
346
  "node_modules/accepts": {
347
  "version": "1.3.8",
348
  "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
 
355
  "node": ">= 0.6"
356
  }
357
  },
358
+ "node_modules/agent-base": {
359
+ "version": "7.1.1",
360
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
361
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
362
+ "dependencies": {
363
+ "debug": "^4.3.4"
364
+ },
365
+ "engines": {
366
+ "node": ">= 14"
367
+ }
368
+ },
369
+ "node_modules/agent-base/node_modules/debug": {
370
+ "version": "4.3.4",
371
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
372
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
373
+ "dependencies": {
374
+ "ms": "2.1.2"
375
+ },
376
+ "engines": {
377
+ "node": ">=6.0"
378
+ },
379
+ "peerDependenciesMeta": {
380
+ "supports-color": {
381
+ "optional": true
382
+ }
383
+ }
384
+ },
385
+ "node_modules/agent-base/node_modules/ms": {
386
+ "version": "2.1.2",
387
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
388
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
389
+ },
390
  "node_modules/ajv": {
391
  "version": "6.12.6",
392
  "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
 
411
  "node": ">=0.10.0"
412
  }
413
  },
414
+ "node_modules/ansi-styles": {
415
+ "version": "3.2.1",
416
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
417
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
418
+ "dependencies": {
419
+ "color-convert": "^1.9.0"
420
+ },
421
+ "engines": {
422
+ "node": ">=4"
423
+ }
424
+ },
425
  "node_modules/aproba": {
426
  "version": "1.2.0",
427
  "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
 
457
  "readable-stream": "^2.0.6"
458
  }
459
  },
460
+ "node_modules/argparse": {
461
+ "version": "2.0.1",
462
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
463
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
464
+ },
465
+ "node_modules/arr-union": {
466
+ "version": "3.1.0",
467
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
468
+ "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
469
+ "engines": {
470
+ "node": ">=0.10.0"
471
+ }
472
+ },
473
  "node_modules/array-flatten": {
474
  "version": "1.1.1",
475
  "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
 
510
  "node": ">=0.8"
511
  }
512
  },
513
+ "node_modules/ast-types": {
514
+ "version": "0.13.4",
515
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
516
+ "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
517
+ "dependencies": {
518
+ "tslib": "^2.0.1"
519
+ },
520
+ "engines": {
521
+ "node": ">=4"
522
+ }
523
+ },
524
  "node_modules/async": {
525
  "version": "3.2.4",
526
  "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
 
582
  "node": ">= 0.8"
583
  }
584
  },
585
+ "node_modules/b4a": {
586
+ "version": "1.6.6",
587
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
588
+ "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg=="
589
+ },
590
  "node_modules/balanced-match": {
591
  "version": "1.0.2",
592
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
593
  "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
594
  },
595
+ "node_modules/bare-events": {
596
+ "version": "2.2.2",
597
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz",
598
+ "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==",
599
+ "optional": true
600
+ },
601
+ "node_modules/bare-fs": {
602
+ "version": "2.3.0",
603
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.0.tgz",
604
+ "integrity": "sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw==",
605
+ "optional": true,
606
+ "dependencies": {
607
+ "bare-events": "^2.0.0",
608
+ "bare-path": "^2.0.0",
609
+ "bare-stream": "^1.0.0"
610
+ }
611
+ },
612
+ "node_modules/bare-os": {
613
+ "version": "2.3.0",
614
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.3.0.tgz",
615
+ "integrity": "sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==",
616
+ "optional": true
617
+ },
618
+ "node_modules/bare-path": {
619
+ "version": "2.1.1",
620
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.1.tgz",
621
+ "integrity": "sha512-OHM+iwRDRMDBsSW7kl3dO62JyHdBKO3B25FB9vNQBPcGHMo4+eA8Yj41Lfbk3pS/seDY+siNge0LdRTulAau/A==",
622
+ "optional": true,
623
+ "dependencies": {
624
+ "bare-os": "^2.1.0"
625
+ }
626
+ },
627
+ "node_modules/bare-stream": {
628
+ "version": "1.0.0",
629
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-1.0.0.tgz",
630
+ "integrity": "sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==",
631
+ "optional": true,
632
+ "dependencies": {
633
+ "streamx": "^2.16.1"
634
+ }
635
+ },
636
  "node_modules/base64-js": {
637
  "version": "1.5.1",
638
  "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
 
650
  "type": "consulting",
651
  "url": "https://feross.org/support"
652
  }
653
+ ]
 
654
  },
655
  "node_modules/basic-auth": {
656
  "version": "2.0.1",
 
663
  "node": ">= 0.8"
664
  }
665
  },
666
+ "node_modules/basic-ftp": {
667
+ "version": "5.0.5",
668
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz",
669
+ "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==",
670
+ "engines": {
671
+ "node": ">=10.0.0"
672
+ }
673
+ },
674
  "node_modules/bcrypt-pbkdf": {
675
  "version": "1.0.2",
676
  "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
 
830
  "url": "https://feross.org/support"
831
  }
832
  ],
 
833
  "dependencies": {
834
  "base64-js": "^1.3.1",
835
  "ieee754": "^1.1.13"
836
  }
837
  },
838
+ "node_modules/buffer-crc32": {
839
+ "version": "0.2.13",
840
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
841
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
842
+ "engines": {
843
+ "node": "*"
844
+ }
845
+ },
846
  "node_modules/bytes": {
847
  "version": "3.0.0",
848
  "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
 
902
  "url": "https://github.com/sponsors/ljharb"
903
  }
904
  },
905
+ "node_modules/callsites": {
906
+ "version": "3.1.0",
907
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
908
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
909
+ "engines": {
910
+ "node": ">=6"
911
+ }
912
+ },
913
  "node_modules/caseless": {
914
  "version": "0.12.0",
915
  "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
916
  "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
917
  },
918
+ "node_modules/chalk": {
919
+ "version": "2.4.2",
920
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
921
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
922
+ "dependencies": {
923
+ "ansi-styles": "^3.2.1",
924
+ "escape-string-regexp": "^1.0.5",
925
+ "supports-color": "^5.3.0"
926
+ },
927
+ "engines": {
928
+ "node": ">=4"
929
+ }
930
+ },
931
  "node_modules/cheerio": {
932
  "version": "1.0.0-rc.12",
933
  "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
 
969
  "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
970
  "optional": true
971
  },
972
+ "node_modules/chromium-bidi": {
973
+ "version": "0.5.17",
974
+ "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.17.tgz",
975
+ "integrity": "sha512-BqOuIWUgTPj8ayuBFJUYCCuwIcwjBsb3/614P7tt1bEPJ4i1M0kCdIl0Wi9xhtswBXnfO2bTpTMkHD71H8rJMg==",
976
+ "dependencies": {
977
+ "mitt": "3.0.1",
978
+ "urlpattern-polyfill": "10.0.0",
979
+ "zod": "3.22.4"
980
+ },
981
+ "peerDependencies": {
982
+ "devtools-protocol": "*"
983
+ }
984
+ },
985
  "node_modules/clipboardy": {
986
  "version": "2.3.0",
987
  "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==",
 
994
  "node": ">=8"
995
  }
996
  },
997
+ "node_modules/cliui": {
998
+ "version": "8.0.1",
999
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
1000
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
1001
+ "dependencies": {
1002
+ "string-width": "^4.2.0",
1003
+ "strip-ansi": "^6.0.1",
1004
+ "wrap-ansi": "^7.0.0"
1005
+ },
1006
+ "engines": {
1007
+ "node": ">=12"
1008
+ }
1009
+ },
1010
+ "node_modules/cliui/node_modules/ansi-regex": {
1011
+ "version": "5.0.1",
1012
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1013
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1014
+ "engines": {
1015
+ "node": ">=8"
1016
+ }
1017
+ },
1018
+ "node_modules/cliui/node_modules/is-fullwidth-code-point": {
1019
+ "version": "3.0.0",
1020
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1021
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1022
+ "engines": {
1023
+ "node": ">=8"
1024
+ }
1025
+ },
1026
+ "node_modules/cliui/node_modules/string-width": {
1027
+ "version": "4.2.3",
1028
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1029
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1030
+ "dependencies": {
1031
+ "emoji-regex": "^8.0.0",
1032
+ "is-fullwidth-code-point": "^3.0.0",
1033
+ "strip-ansi": "^6.0.1"
1034
+ },
1035
+ "engines": {
1036
+ "node": ">=8"
1037
+ }
1038
+ },
1039
+ "node_modules/cliui/node_modules/strip-ansi": {
1040
+ "version": "6.0.1",
1041
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1042
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1043
+ "dependencies": {
1044
+ "ansi-regex": "^5.0.1"
1045
+ },
1046
+ "engines": {
1047
+ "node": ">=8"
1048
+ }
1049
+ },
1050
+ "node_modules/clone-deep": {
1051
+ "version": "0.2.4",
1052
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
1053
+ "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==",
1054
+ "dependencies": {
1055
+ "for-own": "^0.1.3",
1056
+ "is-plain-object": "^2.0.1",
1057
+ "kind-of": "^3.0.2",
1058
+ "lazy-cache": "^1.0.3",
1059
+ "shallow-clone": "^0.1.2"
1060
+ },
1061
+ "engines": {
1062
+ "node": ">=0.10.0"
1063
+ }
1064
+ },
1065
  "node_modules/clone-response": {
1066
  "version": "1.0.3",
1067
  "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz",
 
1275
  "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
1276
  "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
1277
  },
1278
+ "node_modules/cosmiconfig": {
1279
+ "version": "9.0.0",
1280
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
1281
+ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
1282
+ "dependencies": {
1283
+ "env-paths": "^2.2.1",
1284
+ "import-fresh": "^3.3.0",
1285
+ "js-yaml": "^4.1.0",
1286
+ "parse-json": "^5.2.0"
1287
+ },
1288
+ "engines": {
1289
+ "node": ">=14"
1290
+ },
1291
+ "funding": {
1292
+ "url": "https://github.com/sponsors/d-fischer"
1293
+ },
1294
+ "peerDependencies": {
1295
+ "typescript": ">=4.9.5"
1296
+ },
1297
+ "peerDependenciesMeta": {
1298
+ "typescript": {
1299
+ "optional": true
1300
+ }
1301
+ }
1302
+ },
1303
  "node_modules/cross-spawn": {
1304
  "version": "6.0.5",
1305
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
 
1365
  "node": ">=0.10"
1366
  }
1367
  },
1368
+ "node_modules/data-uri-to-buffer": {
1369
+ "version": "4.0.1",
1370
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
1371
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
1372
+ "engines": {
1373
+ "node": ">= 12"
1374
+ }
1375
+ },
1376
  "node_modules/debug": {
1377
  "version": "2.6.9",
1378
  "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 
1402
  "node": ">=4.0.0"
1403
  }
1404
  },
1405
+ "node_modules/deepmerge": {
1406
+ "version": "4.3.1",
1407
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
1408
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
1409
+ "engines": {
1410
+ "node": ">=0.10.0"
1411
+ }
1412
+ },
1413
  "node_modules/defer-to-connect": {
1414
  "version": "1.1.3",
1415
  "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
1416
  "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
1417
  },
1418
+ "node_modules/degenerator": {
1419
+ "version": "5.0.1",
1420
+ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
1421
+ "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
1422
+ "dependencies": {
1423
+ "ast-types": "^0.13.4",
1424
+ "escodegen": "^2.1.0",
1425
+ "esprima": "^4.0.1"
1426
+ },
1427
+ "engines": {
1428
+ "node": ">= 14"
1429
+ }
1430
+ },
1431
  "node_modules/del": {
1432
  "version": "4.1.1",
1433
  "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
 
1495
  "node": ">=0.10"
1496
  }
1497
  },
1498
+ "node_modules/devtools-protocol": {
1499
+ "version": "0.0.1273771",
1500
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1273771.tgz",
1501
+ "integrity": "sha512-QDbb27xcTVReQQW/GHJsdQqGKwYBE7re7gxehj467kKP2DKuYBUj6i2k5LRiAC66J1yZG/9gsxooz/s9pcm0Og=="
1502
+ },
1503
  "node_modules/dns-packet": {
1504
  "version": "5.6.0",
1505
  "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz",
 
1613
  "node": ">=0.10.0"
1614
  }
1615
  },
1616
+ "node_modules/emoji-regex": {
1617
+ "version": "8.0.0",
1618
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1619
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
1620
+ },
1621
  "node_modules/enabled": {
1622
  "version": "2.0.0",
1623
  "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
 
1650
  "url": "https://github.com/fb55/entities?sponsor=1"
1651
  }
1652
  },
1653
+ "node_modules/env-paths": {
1654
+ "version": "2.2.1",
1655
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
1656
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
1657
+ "engines": {
1658
+ "node": ">=6"
1659
+ }
1660
+ },
1661
+ "node_modules/error-ex": {
1662
+ "version": "1.3.2",
1663
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
1664
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
1665
+ "dependencies": {
1666
+ "is-arrayish": "^0.2.1"
1667
+ }
1668
+ },
1669
+ "node_modules/error-ex/node_modules/is-arrayish": {
1670
+ "version": "0.2.1",
1671
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1672
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
1673
+ },
1674
+ "node_modules/escalade": {
1675
+ "version": "3.1.2",
1676
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
1677
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
1678
+ "engines": {
1679
+ "node": ">=6"
1680
+ }
1681
+ },
1682
  "node_modules/escape-html": {
1683
  "version": "1.0.3",
1684
  "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
1685
  "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
1686
  },
1687
+ "node_modules/escape-string-regexp": {
1688
+ "version": "1.0.5",
1689
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1690
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
1691
  "engines": {
1692
+ "node": ">=0.8.0"
1693
  }
1694
  },
1695
+ "node_modules/escodegen": {
1696
+ "version": "2.1.0",
1697
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
1698
+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
1699
+ "dependencies": {
1700
+ "esprima": "^4.0.1",
1701
+ "estraverse": "^5.2.0",
1702
+ "esutils": "^2.0.2"
1703
+ },
1704
+ "bin": {
1705
+ "escodegen": "bin/escodegen.js",
1706
+ "esgenerate": "bin/esgenerate.js"
1707
+ },
1708
+ "engines": {
1709
+ "node": ">=6.0"
1710
+ },
1711
+ "optionalDependencies": {
1712
+ "source-map": "~0.6.1"
1713
+ }
1714
+ },
1715
+ "node_modules/esprima": {
1716
+ "version": "4.0.1",
1717
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
1718
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
1719
+ "bin": {
1720
+ "esparse": "bin/esparse.js",
1721
+ "esvalidate": "bin/esvalidate.js"
1722
+ },
1723
+ "engines": {
1724
+ "node": ">=4"
1725
+ }
1726
+ },
1727
+ "node_modules/estraverse": {
1728
+ "version": "5.3.0",
1729
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1730
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1731
+ "engines": {
1732
+ "node": ">=4.0"
1733
+ }
1734
+ },
1735
+ "node_modules/esutils": {
1736
+ "version": "2.0.3",
1737
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1738
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1739
+ "engines": {
1740
+ "node": ">=0.10.0"
1741
+ }
1742
+ },
1743
+ "node_modules/etag": {
1744
+ "version": "1.8.1",
1745
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
1746
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
1747
+ "engines": {
1748
+ "node": ">= 0.6"
1749
+ }
1750
+ },
1751
+ "node_modules/execa": {
1752
+ "version": "1.0.0",
1753
  "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
1754
  "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
1755
  "dependencies": {
 
1898
  "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1899
  "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1900
  },
1901
+ "node_modules/extract-zip": {
1902
+ "version": "2.0.1",
1903
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
1904
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
1905
+ "dependencies": {
1906
+ "debug": "^4.1.1",
1907
+ "get-stream": "^5.1.0",
1908
+ "yauzl": "^2.10.0"
1909
+ },
1910
+ "bin": {
1911
+ "extract-zip": "cli.js"
1912
+ },
1913
+ "engines": {
1914
+ "node": ">= 10.17.0"
1915
+ },
1916
+ "optionalDependencies": {
1917
+ "@types/yauzl": "^2.9.1"
1918
+ }
1919
+ },
1920
+ "node_modules/extract-zip/node_modules/debug": {
1921
+ "version": "4.3.4",
1922
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1923
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1924
+ "dependencies": {
1925
+ "ms": "2.1.2"
1926
+ },
1927
+ "engines": {
1928
+ "node": ">=6.0"
1929
+ },
1930
+ "peerDependenciesMeta": {
1931
+ "supports-color": {
1932
+ "optional": true
1933
+ }
1934
+ }
1935
+ },
1936
+ "node_modules/extract-zip/node_modules/get-stream": {
1937
+ "version": "5.2.0",
1938
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
1939
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
1940
+ "dependencies": {
1941
+ "pump": "^3.0.0"
1942
+ },
1943
+ "engines": {
1944
+ "node": ">=8"
1945
+ },
1946
+ "funding": {
1947
+ "url": "https://github.com/sponsors/sindresorhus"
1948
+ }
1949
+ },
1950
+ "node_modules/extract-zip/node_modules/ms": {
1951
+ "version": "2.1.2",
1952
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1953
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1954
+ },
1955
  "node_modules/extsprintf": {
1956
  "version": "1.3.0",
1957
  "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
 
1965
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1966
  "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
1967
  },
1968
+ "node_modules/fast-fifo": {
1969
+ "version": "1.3.2",
1970
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
1971
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
1972
+ },
1973
  "node_modules/fast-json-stable-stringify": {
1974
  "version": "2.1.0",
1975
  "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
 
1980
  "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
1981
  "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
1982
  },
1983
+ "node_modules/fd-slicer": {
1984
+ "version": "1.1.0",
1985
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
1986
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
1987
+ "dependencies": {
1988
+ "pend": "~1.2.0"
1989
+ }
1990
+ },
1991
  "node_modules/fecha": {
1992
  "version": "4.2.3",
1993
  "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
1994
  "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw=="
1995
  },
1996
+ "node_modules/fetch-blob": {
1997
+ "version": "3.2.0",
1998
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
1999
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
2000
+ "funding": [
2001
+ {
2002
+ "type": "github",
2003
+ "url": "https://github.com/sponsors/jimmywarting"
2004
+ },
2005
+ {
2006
+ "type": "paypal",
2007
+ "url": "https://paypal.me/jimmywarting"
2008
+ }
2009
+ ],
2010
+ "dependencies": {
2011
+ "node-domexception": "^1.0.0",
2012
+ "web-streams-polyfill": "^3.0.3"
2013
+ },
2014
+ "engines": {
2015
+ "node": "^12.20 || >= 14.13"
2016
+ }
2017
+ },
2018
  "node_modules/file-split-merge": {
2019
  "version": "1.1.1",
2020
  "integrity": "sha512-+Tfjxcz0bHtFlojQDuEeDpZijLtpnmI1l/iDQz5Popb3phTSaHkeVtv0Q/dGRslrbo5XG+8tcHUoPq/SoTZIAA==",
 
2094
  "version": "1.4.5",
2095
  "integrity": "sha512-mLi7Sb4iitgk3mJsTZZDbixssHLoJB4/onWGlQOvTSPW8YPBDQNaMTGOdZ92axQI4UNWwPxV5FmCBOEo1Us7lg=="
2096
  },
2097
+ "node_modules/for-in": {
2098
+ "version": "1.0.2",
2099
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
2100
+ "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
2101
+ "engines": {
2102
+ "node": ">=0.10.0"
2103
+ }
2104
+ },
2105
+ "node_modules/for-own": {
2106
+ "version": "0.1.5",
2107
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
2108
+ "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==",
2109
+ "dependencies": {
2110
+ "for-in": "^1.0.1"
2111
+ },
2112
+ "engines": {
2113
+ "node": ">=0.10.0"
2114
+ }
2115
+ },
2116
  "node_modules/forever-agent": {
2117
  "version": "0.6.1",
2118
  "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
 
2134
  "node": ">= 0.12"
2135
  }
2136
  },
2137
+ "node_modules/formdata-polyfill": {
2138
+ "version": "4.0.10",
2139
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
2140
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
2141
+ "dependencies": {
2142
+ "fetch-blob": "^3.1.2"
2143
+ },
2144
+ "engines": {
2145
+ "node": ">=12.20.0"
2146
+ }
2147
+ },
2148
  "node_modules/forwarded": {
2149
  "version": "0.2.0",
2150
  "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
 
2213
  "node": ">= 4"
2214
  }
2215
  },
2216
+ "node_modules/get-caller-file": {
2217
+ "version": "2.0.5",
2218
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
2219
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
2220
+ "engines": {
2221
+ "node": "6.* || 8.* || >= 10.*"
2222
+ }
2223
+ },
2224
  "node_modules/get-intrinsic": {
2225
  "version": "1.2.1",
2226
  "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
 
2246
  "node": ">=6"
2247
  }
2248
  },
2249
+ "node_modules/get-uri": {
2250
+ "version": "6.0.3",
2251
+ "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz",
2252
+ "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==",
2253
+ "dependencies": {
2254
+ "basic-ftp": "^5.0.2",
2255
+ "data-uri-to-buffer": "^6.0.2",
2256
+ "debug": "^4.3.4",
2257
+ "fs-extra": "^11.2.0"
2258
+ },
2259
+ "engines": {
2260
+ "node": ">= 14"
2261
+ }
2262
+ },
2263
+ "node_modules/get-uri/node_modules/data-uri-to-buffer": {
2264
+ "version": "6.0.2",
2265
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
2266
+ "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
2267
+ "engines": {
2268
+ "node": ">= 14"
2269
+ }
2270
+ },
2271
+ "node_modules/get-uri/node_modules/debug": {
2272
+ "version": "4.3.4",
2273
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
2274
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
2275
+ "dependencies": {
2276
+ "ms": "2.1.2"
2277
+ },
2278
+ "engines": {
2279
+ "node": ">=6.0"
2280
+ },
2281
+ "peerDependenciesMeta": {
2282
+ "supports-color": {
2283
+ "optional": true
2284
+ }
2285
+ }
2286
+ },
2287
+ "node_modules/get-uri/node_modules/fs-extra": {
2288
+ "version": "11.2.0",
2289
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
2290
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
2291
+ "dependencies": {
2292
+ "graceful-fs": "^4.2.0",
2293
+ "jsonfile": "^6.0.1",
2294
+ "universalify": "^2.0.0"
2295
+ },
2296
+ "engines": {
2297
+ "node": ">=14.14"
2298
+ }
2299
+ },
2300
+ "node_modules/get-uri/node_modules/jsonfile": {
2301
+ "version": "6.1.0",
2302
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
2303
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
2304
+ "dependencies": {
2305
+ "universalify": "^2.0.0"
2306
+ },
2307
+ "optionalDependencies": {
2308
+ "graceful-fs": "^4.1.6"
2309
+ }
2310
+ },
2311
+ "node_modules/get-uri/node_modules/ms": {
2312
+ "version": "2.1.2",
2313
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2314
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2315
+ },
2316
+ "node_modules/get-uri/node_modules/universalify": {
2317
+ "version": "2.0.1",
2318
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
2319
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
2320
+ "engines": {
2321
+ "node": ">= 10.0.0"
2322
+ }
2323
+ },
2324
  "node_modules/getpass": {
2325
  "version": "0.1.7",
2326
  "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
 
2454
  "node": ">= 0.4.0"
2455
  }
2456
  },
2457
+ "node_modules/has-flag": {
2458
+ "version": "3.0.0",
2459
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
2460
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
2461
+ "engines": {
2462
+ "node": ">=4"
2463
+ }
2464
+ },
2465
  "node_modules/has-proto": {
2466
  "version": "1.0.1",
2467
  "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
 
2527
  "node": ">= 0.6"
2528
  }
2529
  },
2530
+ "node_modules/http-proxy-agent": {
2531
+ "version": "7.0.2",
2532
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
2533
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
2534
+ "dependencies": {
2535
+ "agent-base": "^7.1.0",
2536
+ "debug": "^4.3.4"
2537
+ },
2538
+ "engines": {
2539
+ "node": ">= 14"
2540
+ }
2541
+ },
2542
+ "node_modules/http-proxy-agent/node_modules/debug": {
2543
+ "version": "4.3.4",
2544
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
2545
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
2546
+ "dependencies": {
2547
+ "ms": "2.1.2"
2548
+ },
2549
+ "engines": {
2550
+ "node": ">=6.0"
2551
+ },
2552
+ "peerDependenciesMeta": {
2553
+ "supports-color": {
2554
+ "optional": true
2555
+ }
2556
+ }
2557
+ },
2558
+ "node_modules/http-proxy-agent/node_modules/ms": {
2559
+ "version": "2.1.2",
2560
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2561
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2562
+ },
2563
  "node_modules/http-signature": {
2564
  "version": "1.2.0",
2565
  "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
 
2574
  "npm": ">=1.3.7"
2575
  }
2576
  },
2577
+ "node_modules/https-proxy-agent": {
2578
+ "version": "7.0.4",
2579
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
2580
+ "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
2581
+ "dependencies": {
2582
+ "agent-base": "^7.0.2",
2583
+ "debug": "4"
2584
+ },
2585
+ "engines": {
2586
+ "node": ">= 14"
2587
+ }
2588
+ },
2589
+ "node_modules/https-proxy-agent/node_modules/debug": {
2590
+ "version": "4.3.4",
2591
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
2592
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
2593
+ "dependencies": {
2594
+ "ms": "2.1.2"
2595
+ },
2596
+ "engines": {
2597
+ "node": ">=6.0"
2598
+ },
2599
+ "peerDependenciesMeta": {
2600
+ "supports-color": {
2601
+ "optional": true
2602
+ }
2603
+ }
2604
+ },
2605
+ "node_modules/https-proxy-agent/node_modules/ms": {
2606
+ "version": "2.1.2",
2607
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2608
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2609
+ },
2610
  "node_modules/iconv-lite": {
2611
  "version": "0.4.24",
2612
  "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
 
2635
  "type": "consulting",
2636
  "url": "https://feross.org/support"
2637
  }
2638
+ ]
 
2639
  },
2640
  "node_modules/immediate": {
2641
  "version": "3.0.6",
2642
  "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
2643
  "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
2644
  },
2645
+ "node_modules/import-fresh": {
2646
+ "version": "3.3.0",
2647
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
2648
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
2649
+ "dependencies": {
2650
+ "parent-module": "^1.0.0",
2651
+ "resolve-from": "^4.0.0"
2652
+ },
2653
+ "engines": {
2654
+ "node": ">=6"
2655
+ },
2656
+ "funding": {
2657
+ "url": "https://github.com/sponsors/sindresorhus"
2658
+ }
2659
+ },
2660
  "node_modules/inflight": {
2661
  "version": "1.0.6",
2662
  "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
 
2729
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2730
  "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2731
  },
2732
+ "node_modules/ip-address": {
2733
+ "version": "9.0.5",
2734
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
2735
+ "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
2736
+ "dependencies": {
2737
+ "jsbn": "1.1.0",
2738
+ "sprintf-js": "^1.1.3"
2739
+ },
2740
+ "engines": {
2741
+ "node": ">= 12"
2742
+ }
2743
+ },
2744
+ "node_modules/ip-address/node_modules/jsbn": {
2745
+ "version": "1.1.0",
2746
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
2747
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
2748
+ },
2749
  "node_modules/ip-regex": {
2750
  "version": "4.3.0",
2751
  "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
 
2767
  "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
2768
  "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
2769
  },
2770
+ "node_modules/is-buffer": {
2771
+ "version": "1.1.6",
2772
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
2773
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
2774
+ },
2775
  "node_modules/is-core-module": {
2776
  "version": "2.12.1",
2777
  "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
 
2797
  "url": "https://github.com/sponsors/sindresorhus"
2798
  }
2799
  },
2800
+ "node_modules/is-extendable": {
2801
+ "version": "0.1.1",
2802
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
2803
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
2804
+ "engines": {
2805
+ "node": ">=0.10.0"
2806
+ }
2807
+ },
2808
  "node_modules/is-fullwidth-code-point": {
2809
  "version": "1.0.0",
2810
  "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
 
2858
  "node": ">=6"
2859
  }
2860
  },
2861
+ "node_modules/is-plain-object": {
2862
+ "version": "2.0.4",
2863
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
2864
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
2865
+ "dependencies": {
2866
+ "isobject": "^3.0.1"
2867
+ },
2868
+ "engines": {
2869
+ "node": ">=0.10.0"
2870
+ }
2871
+ },
2872
  "node_modules/is-stream": {
2873
  "version": "1.1.0",
2874
  "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
 
2903
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2904
  "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
2905
  },
2906
+ "node_modules/isobject": {
2907
+ "version": "3.0.1",
2908
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
2909
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
2910
+ "engines": {
2911
+ "node": ">=0.10.0"
2912
+ }
2913
+ },
2914
  "node_modules/isstream": {
2915
  "version": "0.1.2",
2916
  "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
2917
  "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
2918
  },
2919
+ "node_modules/js-tokens": {
2920
+ "version": "4.0.0",
2921
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
2922
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
2923
+ },
2924
+ "node_modules/js-yaml": {
2925
+ "version": "4.1.0",
2926
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
2927
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
2928
+ "dependencies": {
2929
+ "argparse": "^2.0.1"
2930
+ },
2931
+ "bin": {
2932
+ "js-yaml": "bin/js-yaml.js"
2933
+ }
2934
+ },
2935
  "node_modules/jsbn": {
2936
  "version": "0.1.1",
2937
  "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
 
2942
  "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
2943
  "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ=="
2944
  },
2945
+ "node_modules/json-parse-even-better-errors": {
2946
+ "version": "2.3.1",
2947
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
2948
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
2949
+ },
2950
  "node_modules/json-schema": {
2951
  "version": "0.4.0",
2952
  "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
 
3003
  "json-buffer": "3.0.0"
3004
  }
3005
  },
3006
+ "node_modules/kind-of": {
3007
+ "version": "3.2.2",
3008
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
3009
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
3010
+ "dependencies": {
3011
+ "is-buffer": "^1.1.5"
3012
+ },
3013
+ "engines": {
3014
+ "node": ">=0.10.0"
3015
+ }
3016
+ },
3017
  "node_modules/kuler": {
3018
  "version": "2.0.0",
3019
  "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
3020
  "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
3021
  },
3022
+ "node_modules/lazy-cache": {
3023
+ "version": "1.0.4",
3024
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
3025
+ "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==",
3026
+ "engines": {
3027
+ "node": ">=0.10.0"
3028
+ }
3029
+ },
3030
  "node_modules/lie": {
3031
  "version": "3.3.0",
3032
  "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
 
3035
  "immediate": "~3.0.5"
3036
  }
3037
  },
3038
+ "node_modules/lines-and-columns": {
3039
+ "version": "1.2.4",
3040
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
3041
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
3042
+ },
3043
  "node_modules/lodash": {
3044
  "version": "4.17.21",
3045
  "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
 
3103
  "node": ">=0.10.0"
3104
  }
3105
  },
3106
+ "node_modules/lru-cache": {
3107
+ "version": "7.18.3",
3108
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
3109
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
3110
+ "engines": {
3111
+ "node": ">=12"
3112
+ }
3113
+ },
3114
  "node_modules/media-typer": {
3115
  "version": "0.3.0",
3116
  "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
 
3119
  "node": ">= 0.6"
3120
  }
3121
  },
3122
+ "node_modules/merge-deep": {
3123
+ "version": "3.0.3",
3124
+ "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz",
3125
+ "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==",
3126
+ "dependencies": {
3127
+ "arr-union": "^3.1.0",
3128
+ "clone-deep": "^0.2.4",
3129
+ "kind-of": "^3.0.2"
3130
+ },
3131
+ "engines": {
3132
+ "node": ">=0.10.0"
3133
+ }
3134
+ },
3135
  "node_modules/merge-descriptors": {
3136
  "version": "1.0.1",
3137
  "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
 
3207
  "url": "https://github.com/sponsors/ljharb"
3208
  }
3209
  },
3210
+ "node_modules/mitt": {
3211
+ "version": "3.0.1",
3212
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
3213
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
3214
+ },
3215
+ "node_modules/mixin-object": {
3216
+ "version": "2.0.1",
3217
+ "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
3218
+ "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==",
3219
+ "dependencies": {
3220
+ "for-in": "^0.1.3",
3221
+ "is-extendable": "^0.1.1"
3222
+ },
3223
+ "engines": {
3224
+ "node": ">=0.10.0"
3225
+ }
3226
+ },
3227
+ "node_modules/mixin-object/node_modules/for-in": {
3228
+ "version": "0.1.8",
3229
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
3230
+ "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==",
3231
+ "engines": {
3232
+ "node": ">=0.10.0"
3233
+ }
3234
+ },
3235
  "node_modules/mkdirp-classic": {
3236
  "version": "0.5.3",
3237
  "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
 
3296
  "node": ">= 0.6"
3297
  }
3298
  },
3299
+ "node_modules/netmask": {
3300
+ "version": "2.0.2",
3301
+ "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
3302
+ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
3303
+ "engines": {
3304
+ "node": ">= 0.4.0"
3305
+ }
3306
+ },
3307
  "node_modules/nice-try": {
3308
  "version": "1.0.5",
3309
  "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
 
3334
  "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
3335
  "optional": true
3336
  },
3337
+ "node_modules/node-domexception": {
3338
+ "version": "1.0.0",
3339
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
3340
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
3341
+ "funding": [
3342
+ {
3343
+ "type": "github",
3344
+ "url": "https://github.com/sponsors/jimmywarting"
3345
+ },
3346
+ {
3347
+ "type": "github",
3348
+ "url": "https://paypal.me/jimmywarting"
3349
+ }
3350
+ ],
3351
+ "engines": {
3352
+ "node": ">=10.5.0"
3353
+ }
3354
+ },
3355
+ "node_modules/node-fetch": {
3356
+ "version": "3.3.2",
3357
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
3358
+ "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
3359
+ "dependencies": {
3360
+ "data-uri-to-buffer": "^4.0.0",
3361
+ "fetch-blob": "^3.1.4",
3362
+ "formdata-polyfill": "^4.0.10"
3363
+ },
3364
+ "engines": {
3365
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
3366
+ },
3367
+ "funding": {
3368
+ "type": "opencollective",
3369
+ "url": "https://opencollective.com/node-fetch"
3370
+ }
3371
+ },
3372
  "node_modules/node-rsa": {
3373
  "version": "1.1.1",
3374
  "integrity": "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==",
 
3532
  "node": ">=6"
3533
  }
3534
  },
3535
+ "node_modules/pac-proxy-agent": {
3536
+ "version": "7.0.1",
3537
+ "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz",
3538
+ "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==",
3539
+ "dependencies": {
3540
+ "@tootallnate/quickjs-emscripten": "^0.23.0",
3541
+ "agent-base": "^7.0.2",
3542
+ "debug": "^4.3.4",
3543
+ "get-uri": "^6.0.1",
3544
+ "http-proxy-agent": "^7.0.0",
3545
+ "https-proxy-agent": "^7.0.2",
3546
+ "pac-resolver": "^7.0.0",
3547
+ "socks-proxy-agent": "^8.0.2"
3548
+ },
3549
+ "engines": {
3550
+ "node": ">= 14"
3551
+ }
3552
+ },
3553
+ "node_modules/pac-proxy-agent/node_modules/debug": {
3554
+ "version": "4.3.4",
3555
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
3556
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
3557
+ "dependencies": {
3558
+ "ms": "2.1.2"
3559
+ },
3560
+ "engines": {
3561
+ "node": ">=6.0"
3562
+ },
3563
+ "peerDependenciesMeta": {
3564
+ "supports-color": {
3565
+ "optional": true
3566
+ }
3567
+ }
3568
+ },
3569
+ "node_modules/pac-proxy-agent/node_modules/ms": {
3570
+ "version": "2.1.2",
3571
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
3572
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
3573
+ },
3574
+ "node_modules/pac-resolver": {
3575
+ "version": "7.0.1",
3576
+ "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz",
3577
+ "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
3578
+ "dependencies": {
3579
+ "degenerator": "^5.0.0",
3580
+ "netmask": "^2.0.2"
3581
+ },
3582
+ "engines": {
3583
+ "node": ">= 14"
3584
+ }
3585
+ },
3586
  "node_modules/pako": {
3587
  "version": "1.0.11",
3588
  "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
3589
  "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
3590
  },
3591
+ "node_modules/parent-module": {
3592
+ "version": "1.0.1",
3593
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
3594
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
3595
+ "dependencies": {
3596
+ "callsites": "^3.0.0"
3597
+ },
3598
+ "engines": {
3599
+ "node": ">=6"
3600
+ }
3601
+ },
3602
+ "node_modules/parse-json": {
3603
+ "version": "5.2.0",
3604
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
3605
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
3606
+ "dependencies": {
3607
+ "@babel/code-frame": "^7.0.0",
3608
+ "error-ex": "^1.3.1",
3609
+ "json-parse-even-better-errors": "^2.3.0",
3610
+ "lines-and-columns": "^1.1.6"
3611
+ },
3612
+ "engines": {
3613
+ "node": ">=8"
3614
+ },
3615
+ "funding": {
3616
+ "url": "https://github.com/sponsors/sindresorhus"
3617
+ }
3618
+ },
3619
  "node_modules/parse5": {
3620
  "version": "7.1.2",
3621
  "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
 
3686
  "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
3687
  "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
3688
  },
3689
+ "node_modules/pend": {
3690
+ "version": "1.2.0",
3691
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
3692
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
3693
+ },
3694
  "node_modules/performance-now": {
3695
  "version": "2.1.0",
3696
  "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
3697
  "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
3698
  },
3699
+ "node_modules/picocolors": {
3700
+ "version": "1.0.0",
3701
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
3702
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
3703
+ },
3704
  "node_modules/pify": {
3705
  "version": "4.0.1",
3706
  "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
 
3778
  "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
3779
  "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
3780
  },
3781
+ "node_modules/progress": {
3782
+ "version": "2.0.3",
3783
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
3784
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
3785
+ "engines": {
3786
+ "node": ">=0.4.0"
3787
+ }
3788
+ },
3789
  "node_modules/proxy-addr": {
3790
  "version": "2.0.7",
3791
  "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
3792
  "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
3793
  "dependencies": {
3794
+ "forwarded": "0.2.0",
3795
+ "ipaddr.js": "1.9.1"
3796
+ },
3797
+ "engines": {
3798
+ "node": ">= 0.10"
3799
+ }
3800
+ },
3801
+ "node_modules/proxy-agent": {
3802
+ "version": "6.4.0",
3803
+ "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz",
3804
+ "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==",
3805
+ "dependencies": {
3806
+ "agent-base": "^7.0.2",
3807
+ "debug": "^4.3.4",
3808
+ "http-proxy-agent": "^7.0.1",
3809
+ "https-proxy-agent": "^7.0.3",
3810
+ "lru-cache": "^7.14.1",
3811
+ "pac-proxy-agent": "^7.0.1",
3812
+ "proxy-from-env": "^1.1.0",
3813
+ "socks-proxy-agent": "^8.0.2"
3814
+ },
3815
+ "engines": {
3816
+ "node": ">= 14"
3817
+ }
3818
+ },
3819
+ "node_modules/proxy-agent/node_modules/debug": {
3820
+ "version": "4.3.4",
3821
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
3822
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
3823
+ "dependencies": {
3824
+ "ms": "2.1.2"
3825
+ },
3826
+ "engines": {
3827
+ "node": ">=6.0"
3828
+ },
3829
+ "peerDependenciesMeta": {
3830
+ "supports-color": {
3831
+ "optional": true
3832
+ }
3833
+ }
3834
+ },
3835
+ "node_modules/proxy-agent/node_modules/ms": {
3836
+ "version": "2.1.2",
3837
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
3838
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
3839
+ },
3840
+ "node_modules/proxy-from-env": {
3841
+ "version": "1.1.0",
3842
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
3843
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
3844
+ },
3845
+ "node_modules/psl": {
3846
+ "version": "1.9.0",
3847
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
3848
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
3849
+ },
3850
+ "node_modules/public-ip": {
3851
+ "version": "3.2.0",
3852
+ "integrity": "sha512-DBq4o955zhrhESG4z6GkLN9mtY9NT/JOjEV8pvnYy3bjVQOQF0J5lJNwWLbEWwNstyNFJlY7JxCPFq4bdXSabw==",
3853
+ "dependencies": {
3854
+ "dns-socket": "^4.2.0",
3855
+ "got": "^9.6.0",
3856
+ "is-ip": "^3.1.0"
3857
+ },
3858
+ "engines": {
3859
+ "node": ">=8"
3860
+ }
3861
+ },
3862
+ "node_modules/pump": {
3863
+ "version": "3.0.0",
3864
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
3865
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
3866
+ "dependencies": {
3867
+ "end-of-stream": "^1.1.0",
3868
+ "once": "^1.3.1"
3869
+ }
3870
+ },
3871
+ "node_modules/punycode": {
3872
+ "version": "2.3.0",
3873
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
3874
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
3875
+ "engines": {
3876
+ "node": ">=6"
3877
+ }
3878
+ },
3879
+ "node_modules/puppeteer": {
3880
+ "version": "22.7.0",
3881
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.7.0.tgz",
3882
+ "integrity": "sha512-s1ulKFZKW3lwWCtNu0VrRLfRaanFHxIv7F8UFYpLo8dPTZcI4wB4EAOD0sKT3SKP+1Rsjodb9WFsK78yKQ6i9Q==",
3883
+ "hasInstallScript": true,
3884
+ "dependencies": {
3885
+ "@puppeteer/browsers": "2.2.2",
3886
+ "cosmiconfig": "9.0.0",
3887
+ "devtools-protocol": "0.0.1273771",
3888
+ "puppeteer-core": "22.7.0"
3889
+ },
3890
+ "bin": {
3891
+ "puppeteer": "lib/esm/puppeteer/node/cli.js"
3892
+ },
3893
+ "engines": {
3894
+ "node": ">=18"
3895
+ }
3896
+ },
3897
+ "node_modules/puppeteer-core": {
3898
+ "version": "22.7.0",
3899
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.7.0.tgz",
3900
+ "integrity": "sha512-9Q+L3VD7cfhXnxv6AqwTHsVb/+/uXENByhPrgvwQ49wvzQwtf1d6b7v6gpoG3tpRdwYjxoV1eHTD8tFahww09g==",
3901
+ "dependencies": {
3902
+ "@puppeteer/browsers": "2.2.2",
3903
+ "chromium-bidi": "0.5.17",
3904
+ "debug": "4.3.4",
3905
+ "devtools-protocol": "0.0.1273771",
3906
+ "ws": "8.16.0"
3907
+ },
3908
+ "engines": {
3909
+ "node": ">=18"
3910
+ }
3911
+ },
3912
+ "node_modules/puppeteer-core/node_modules/debug": {
3913
+ "version": "4.3.4",
3914
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
3915
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
3916
+ "dependencies": {
3917
+ "ms": "2.1.2"
3918
+ },
3919
+ "engines": {
3920
+ "node": ">=6.0"
3921
+ },
3922
+ "peerDependenciesMeta": {
3923
+ "supports-color": {
3924
+ "optional": true
3925
+ }
3926
+ }
3927
+ },
3928
+ "node_modules/puppeteer-core/node_modules/ms": {
3929
+ "version": "2.1.2",
3930
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
3931
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
3932
+ },
3933
+ "node_modules/puppeteer-extra": {
3934
+ "version": "3.3.6",
3935
+ "resolved": "https://registry.npmjs.org/puppeteer-extra/-/puppeteer-extra-3.3.6.tgz",
3936
+ "integrity": "sha512-rsLBE/6mMxAjlLd06LuGacrukP2bqbzKCLzV1vrhHFavqQE/taQ2UXv3H5P0Ls7nsrASa+6x3bDbXHpqMwq+7A==",
3937
+ "dependencies": {
3938
+ "@types/debug": "^4.1.0",
3939
+ "debug": "^4.1.1",
3940
+ "deepmerge": "^4.2.2"
3941
+ },
3942
+ "engines": {
3943
+ "node": ">=8"
3944
+ },
3945
+ "peerDependencies": {
3946
+ "@types/puppeteer": "*",
3947
+ "puppeteer": "*",
3948
+ "puppeteer-core": "*"
3949
+ },
3950
+ "peerDependenciesMeta": {
3951
+ "@types/puppeteer": {
3952
+ "optional": true
3953
+ },
3954
+ "puppeteer": {
3955
+ "optional": true
3956
+ },
3957
+ "puppeteer-core": {
3958
+ "optional": true
3959
+ }
3960
+ }
3961
+ },
3962
+ "node_modules/puppeteer-extra-plugin": {
3963
+ "version": "3.2.3",
3964
+ "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin/-/puppeteer-extra-plugin-3.2.3.tgz",
3965
+ "integrity": "sha512-6RNy0e6pH8vaS3akPIKGg28xcryKscczt4wIl0ePciZENGE2yoaQJNd17UiEbdmh5/6WW6dPcfRWT9lxBwCi2Q==",
3966
+ "dependencies": {
3967
+ "@types/debug": "^4.1.0",
3968
+ "debug": "^4.1.1",
3969
+ "merge-deep": "^3.0.1"
3970
+ },
3971
+ "engines": {
3972
+ "node": ">=9.11.2"
3973
+ },
3974
+ "peerDependencies": {
3975
+ "playwright-extra": "*",
3976
+ "puppeteer-extra": "*"
3977
+ },
3978
+ "peerDependenciesMeta": {
3979
+ "playwright-extra": {
3980
+ "optional": true
3981
+ },
3982
+ "puppeteer-extra": {
3983
+ "optional": true
3984
+ }
3985
+ }
3986
+ },
3987
+ "node_modules/puppeteer-extra-plugin-stealth": {
3988
+ "version": "2.11.2",
3989
+ "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-2.11.2.tgz",
3990
+ "integrity": "sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==",
3991
+ "dependencies": {
3992
+ "debug": "^4.1.1",
3993
+ "puppeteer-extra-plugin": "^3.2.3",
3994
+ "puppeteer-extra-plugin-user-preferences": "^2.4.1"
3995
+ },
3996
+ "engines": {
3997
+ "node": ">=8"
3998
+ },
3999
+ "peerDependencies": {
4000
+ "playwright-extra": "*",
4001
+ "puppeteer-extra": "*"
4002
+ },
4003
+ "peerDependenciesMeta": {
4004
+ "playwright-extra": {
4005
+ "optional": true
4006
+ },
4007
+ "puppeteer-extra": {
4008
+ "optional": true
4009
+ }
4010
+ }
4011
+ },
4012
+ "node_modules/puppeteer-extra-plugin-stealth/node_modules/debug": {
4013
+ "version": "4.3.4",
4014
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
4015
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
4016
+ "dependencies": {
4017
+ "ms": "2.1.2"
4018
+ },
4019
+ "engines": {
4020
+ "node": ">=6.0"
4021
+ },
4022
+ "peerDependenciesMeta": {
4023
+ "supports-color": {
4024
+ "optional": true
4025
+ }
4026
+ }
4027
+ },
4028
+ "node_modules/puppeteer-extra-plugin-stealth/node_modules/ms": {
4029
+ "version": "2.1.2",
4030
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4031
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
4032
+ },
4033
+ "node_modules/puppeteer-extra-plugin-user-data-dir": {
4034
+ "version": "2.4.1",
4035
+ "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-data-dir/-/puppeteer-extra-plugin-user-data-dir-2.4.1.tgz",
4036
+ "integrity": "sha512-kH1GnCcqEDoBXO7epAse4TBPJh9tEpVEK/vkedKfjOVOhZAvLkHGc9swMs5ChrJbRnf8Hdpug6TJlEuimXNQ+g==",
4037
+ "dependencies": {
4038
+ "debug": "^4.1.1",
4039
+ "fs-extra": "^10.0.0",
4040
+ "puppeteer-extra-plugin": "^3.2.3",
4041
+ "rimraf": "^3.0.2"
4042
+ },
4043
+ "engines": {
4044
+ "node": ">=8"
4045
+ },
4046
+ "peerDependencies": {
4047
+ "playwright-extra": "*",
4048
+ "puppeteer-extra": "*"
4049
+ },
4050
+ "peerDependenciesMeta": {
4051
+ "playwright-extra": {
4052
+ "optional": true
4053
+ },
4054
+ "puppeteer-extra": {
4055
+ "optional": true
4056
+ }
4057
+ }
4058
+ },
4059
+ "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/debug": {
4060
+ "version": "4.3.4",
4061
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
4062
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
4063
+ "dependencies": {
4064
+ "ms": "2.1.2"
4065
+ },
4066
+ "engines": {
4067
+ "node": ">=6.0"
4068
+ },
4069
+ "peerDependenciesMeta": {
4070
+ "supports-color": {
4071
+ "optional": true
4072
+ }
4073
+ }
4074
+ },
4075
+ "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/fs-extra": {
4076
+ "version": "10.1.0",
4077
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
4078
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
4079
+ "dependencies": {
4080
+ "graceful-fs": "^4.2.0",
4081
+ "jsonfile": "^6.0.1",
4082
+ "universalify": "^2.0.0"
4083
+ },
4084
+ "engines": {
4085
+ "node": ">=12"
4086
+ }
4087
+ },
4088
+ "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/jsonfile": {
4089
+ "version": "6.1.0",
4090
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
4091
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
4092
+ "dependencies": {
4093
+ "universalify": "^2.0.0"
4094
+ },
4095
+ "optionalDependencies": {
4096
+ "graceful-fs": "^4.1.6"
4097
+ }
4098
+ },
4099
+ "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/ms": {
4100
+ "version": "2.1.2",
4101
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4102
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
4103
+ },
4104
+ "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/rimraf": {
4105
+ "version": "3.0.2",
4106
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
4107
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
4108
+ "dependencies": {
4109
+ "glob": "^7.1.3"
4110
+ },
4111
+ "bin": {
4112
+ "rimraf": "bin.js"
4113
+ },
4114
+ "funding": {
4115
+ "url": "https://github.com/sponsors/isaacs"
4116
+ }
4117
+ },
4118
+ "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/universalify": {
4119
+ "version": "2.0.1",
4120
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
4121
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
4122
+ "engines": {
4123
+ "node": ">= 10.0.0"
4124
+ }
4125
+ },
4126
+ "node_modules/puppeteer-extra-plugin-user-preferences": {
4127
+ "version": "2.4.1",
4128
+ "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-preferences/-/puppeteer-extra-plugin-user-preferences-2.4.1.tgz",
4129
+ "integrity": "sha512-i1oAZxRbc1bk8MZufKCruCEC3CCafO9RKMkkodZltI4OqibLFXF3tj6HZ4LZ9C5vCXZjYcDWazgtY69mnmrQ9A==",
4130
+ "dependencies": {
4131
+ "debug": "^4.1.1",
4132
+ "deepmerge": "^4.2.2",
4133
+ "puppeteer-extra-plugin": "^3.2.3",
4134
+ "puppeteer-extra-plugin-user-data-dir": "^2.4.1"
4135
+ },
4136
+ "engines": {
4137
+ "node": ">=8"
4138
+ },
4139
+ "peerDependencies": {
4140
+ "playwright-extra": "*",
4141
+ "puppeteer-extra": "*"
4142
+ },
4143
+ "peerDependenciesMeta": {
4144
+ "playwright-extra": {
4145
+ "optional": true
4146
+ },
4147
+ "puppeteer-extra": {
4148
+ "optional": true
4149
+ }
4150
+ }
4151
+ },
4152
+ "node_modules/puppeteer-extra-plugin-user-preferences/node_modules/debug": {
4153
+ "version": "4.3.4",
4154
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
4155
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
4156
+ "dependencies": {
4157
+ "ms": "2.1.2"
4158
  },
4159
  "engines": {
4160
+ "node": ">=6.0"
4161
+ },
4162
+ "peerDependenciesMeta": {
4163
+ "supports-color": {
4164
+ "optional": true
4165
+ }
4166
  }
4167
  },
4168
+ "node_modules/puppeteer-extra-plugin-user-preferences/node_modules/ms": {
4169
+ "version": "2.1.2",
4170
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4171
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
 
 
 
 
 
4172
  },
4173
+ "node_modules/puppeteer-extra-plugin/node_modules/debug": {
4174
+ "version": "4.3.4",
4175
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
4176
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
4177
  "dependencies": {
4178
+ "ms": "2.1.2"
 
 
4179
  },
4180
  "engines": {
4181
+ "node": ">=6.0"
4182
+ },
4183
+ "peerDependenciesMeta": {
4184
+ "supports-color": {
4185
+ "optional": true
4186
+ }
4187
  }
4188
  },
4189
+ "node_modules/puppeteer-extra-plugin/node_modules/ms": {
4190
+ "version": "2.1.2",
4191
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4192
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
 
 
 
 
4193
  },
4194
+ "node_modules/puppeteer-extra/node_modules/debug": {
4195
+ "version": "4.3.4",
4196
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
4197
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
4198
+ "dependencies": {
4199
+ "ms": "2.1.2"
4200
+ },
4201
  "engines": {
4202
+ "node": ">=6.0"
4203
+ },
4204
+ "peerDependenciesMeta": {
4205
+ "supports-color": {
4206
+ "optional": true
4207
+ }
4208
  }
4209
  },
4210
+ "node_modules/puppeteer-extra/node_modules/ms": {
4211
+ "version": "2.1.2",
4212
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4213
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
4214
+ },
4215
  "node_modules/qs": {
4216
  "version": "6.11.0",
4217
  "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
 
4226
  "url": "https://github.com/sponsors/ljharb"
4227
  }
4228
  },
4229
+ "node_modules/queue-tick": {
4230
+ "version": "1.0.1",
4231
+ "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
4232
+ "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
4233
+ },
4234
  "node_modules/range-parser": {
4235
  "version": "1.2.1",
4236
  "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
 
4454
  "node": ">=0.6"
4455
  }
4456
  },
4457
+ "node_modules/require-directory": {
4458
+ "version": "2.1.1",
4459
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
4460
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
4461
+ "engines": {
4462
+ "node": ">=0.10.0"
4463
+ }
4464
+ },
4465
  "node_modules/resolve": {
4466
  "version": "1.22.2",
4467
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
 
4478
  "url": "https://github.com/sponsors/ljharb"
4479
  }
4480
  },
4481
+ "node_modules/resolve-from": {
4482
+ "version": "4.0.0",
4483
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
4484
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
4485
+ "engines": {
4486
+ "node": ">=4"
4487
+ }
4488
+ },
4489
  "node_modules/responselike": {
4490
  "version": "1.0.2",
4491
  "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
 
4664
  "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
4665
  "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
4666
  },
4667
+ "node_modules/shallow-clone": {
4668
+ "version": "0.1.2",
4669
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz",
4670
+ "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==",
4671
+ "dependencies": {
4672
+ "is-extendable": "^0.1.1",
4673
+ "kind-of": "^2.0.1",
4674
+ "lazy-cache": "^0.2.3",
4675
+ "mixin-object": "^2.0.1"
4676
+ },
4677
+ "engines": {
4678
+ "node": ">=0.10.0"
4679
+ }
4680
+ },
4681
+ "node_modules/shallow-clone/node_modules/kind-of": {
4682
+ "version": "2.0.1",
4683
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
4684
+ "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==",
4685
+ "dependencies": {
4686
+ "is-buffer": "^1.0.2"
4687
+ },
4688
+ "engines": {
4689
+ "node": ">=0.10.0"
4690
+ }
4691
+ },
4692
+ "node_modules/shallow-clone/node_modules/lazy-cache": {
4693
+ "version": "0.2.7",
4694
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz",
4695
+ "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==",
4696
+ "engines": {
4697
+ "node": ">=0.10.0"
4698
+ }
4699
+ },
4700
  "node_modules/shebang-command": {
4701
  "version": "1.2.0",
4702
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
 
4801
  "node": ">=0.8.0"
4802
  }
4803
  },
4804
+ "node_modules/smart-buffer": {
4805
+ "version": "4.2.0",
4806
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
4807
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
4808
+ "engines": {
4809
+ "node": ">= 6.0.0",
4810
+ "npm": ">= 3.0.0"
4811
+ }
4812
+ },
4813
+ "node_modules/socks": {
4814
+ "version": "2.8.3",
4815
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
4816
+ "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
4817
+ "dependencies": {
4818
+ "ip-address": "^9.0.5",
4819
+ "smart-buffer": "^4.2.0"
4820
+ },
4821
+ "engines": {
4822
+ "node": ">= 10.0.0",
4823
+ "npm": ">= 3.0.0"
4824
+ }
4825
+ },
4826
+ "node_modules/socks-proxy-agent": {
4827
+ "version": "8.0.3",
4828
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz",
4829
+ "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==",
4830
+ "dependencies": {
4831
+ "agent-base": "^7.1.1",
4832
+ "debug": "^4.3.4",
4833
+ "socks": "^2.7.1"
4834
+ },
4835
+ "engines": {
4836
+ "node": ">= 14"
4837
+ }
4838
+ },
4839
+ "node_modules/socks-proxy-agent/node_modules/debug": {
4840
+ "version": "4.3.4",
4841
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
4842
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
4843
+ "dependencies": {
4844
+ "ms": "2.1.2"
4845
+ },
4846
+ "engines": {
4847
+ "node": ">=6.0"
4848
+ },
4849
+ "peerDependenciesMeta": {
4850
+ "supports-color": {
4851
+ "optional": true
4852
+ }
4853
+ }
4854
+ },
4855
+ "node_modules/socks-proxy-agent/node_modules/ms": {
4856
+ "version": "2.1.2",
4857
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4858
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
4859
+ },
4860
+ "node_modules/source-map": {
4861
+ "version": "0.6.1",
4862
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
4863
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
4864
+ "optional": true,
4865
+ "engines": {
4866
+ "node": ">=0.10.0"
4867
+ }
4868
+ },
4869
+ "node_modules/sprintf-js": {
4870
+ "version": "1.1.3",
4871
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
4872
+ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
4873
+ },
4874
  "node_modules/sshpk": {
4875
  "version": "1.17.0",
4876
  "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
 
4924
  "node": ">=0.10.0"
4925
  }
4926
  },
4927
+ "node_modules/streamx": {
4928
+ "version": "2.16.1",
4929
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz",
4930
+ "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==",
4931
+ "dependencies": {
4932
+ "fast-fifo": "^1.1.0",
4933
+ "queue-tick": "^1.0.1"
4934
+ },
4935
+ "optionalDependencies": {
4936
+ "bare-events": "^2.2.0"
4937
+ }
4938
+ },
4939
  "node_modules/string_decoder": {
4940
  "version": "1.1.1",
4941
  "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
 
4991
  "node": ">=0.10.0"
4992
  }
4993
  },
4994
+ "node_modules/supports-color": {
4995
+ "version": "5.5.0",
4996
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
4997
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
4998
+ "dependencies": {
4999
+ "has-flag": "^3.0.0"
5000
+ },
5001
+ "engines": {
5002
+ "node": ">=4"
5003
+ }
5004
+ },
5005
  "node_modules/supports-preserve-symlinks-flag": {
5006
  "version": "1.0.0",
5007
  "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
 
5068
  "node": ">=0.2.6"
5069
  }
5070
  },
5071
+ "node_modules/through": {
5072
+ "version": "2.3.8",
5073
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
5074
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
5075
+ },
5076
  "node_modules/tmp": {
5077
  "version": "0.2.1",
5078
  "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
 
5167
  "node": ">= 0.6"
5168
  }
5169
  },
5170
+ "node_modules/unbzip2-stream": {
5171
+ "version": "1.4.3",
5172
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
5173
+ "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
5174
+ "dependencies": {
5175
+ "buffer": "^5.2.1",
5176
+ "through": "^2.3.8"
5177
+ }
5178
+ },
5179
  "node_modules/universalify": {
5180
  "version": "0.1.2",
5181
  "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
 
5211
  "node": ">=4"
5212
  }
5213
  },
5214
+ "node_modules/urlpattern-polyfill": {
5215
+ "version": "10.0.0",
5216
+ "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz",
5217
+ "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg=="
5218
+ },
5219
  "node_modules/util": {
5220
  "version": "0.10.4",
5221
  "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
 
5276
  "version": "1.0.8",
5277
  "integrity": "sha512-aDSjjBpxlhaRLdveJrGF017yWzqZXRTic/9C9iPvbe0K9MvuhW3vloPrZq4PJOgp29cso4AYBiQkiBgD0BoUYQ=="
5278
  },
5279
+ "node_modules/web-streams-polyfill": {
5280
+ "version": "3.3.3",
5281
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
5282
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
5283
+ "engines": {
5284
+ "node": ">= 8"
5285
+ }
5286
+ },
5287
  "node_modules/which": {
5288
  "version": "1.3.1",
5289
  "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
 
5444
  "node": ">= 6"
5445
  }
5446
  },
5447
+ "node_modules/wrap-ansi": {
5448
+ "version": "7.0.0",
5449
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
5450
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
5451
+ "dependencies": {
5452
+ "ansi-styles": "^4.0.0",
5453
+ "string-width": "^4.1.0",
5454
+ "strip-ansi": "^6.0.0"
5455
+ },
5456
+ "engines": {
5457
+ "node": ">=10"
5458
+ },
5459
+ "funding": {
5460
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
5461
+ }
5462
+ },
5463
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
5464
+ "version": "5.0.1",
5465
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
5466
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
5467
+ "engines": {
5468
+ "node": ">=8"
5469
+ }
5470
+ },
5471
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
5472
+ "version": "4.3.0",
5473
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
5474
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
5475
+ "dependencies": {
5476
+ "color-convert": "^2.0.1"
5477
+ },
5478
+ "engines": {
5479
+ "node": ">=8"
5480
+ },
5481
+ "funding": {
5482
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
5483
+ }
5484
+ },
5485
+ "node_modules/wrap-ansi/node_modules/color-convert": {
5486
+ "version": "2.0.1",
5487
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
5488
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
5489
+ "dependencies": {
5490
+ "color-name": "~1.1.4"
5491
+ },
5492
+ "engines": {
5493
+ "node": ">=7.0.0"
5494
+ }
5495
+ },
5496
+ "node_modules/wrap-ansi/node_modules/color-name": {
5497
+ "version": "1.1.4",
5498
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
5499
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
5500
+ },
5501
+ "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
5502
+ "version": "3.0.0",
5503
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
5504
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
5505
+ "engines": {
5506
+ "node": ">=8"
5507
+ }
5508
+ },
5509
+ "node_modules/wrap-ansi/node_modules/string-width": {
5510
+ "version": "4.2.3",
5511
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
5512
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
5513
+ "dependencies": {
5514
+ "emoji-regex": "^8.0.0",
5515
+ "is-fullwidth-code-point": "^3.0.0",
5516
+ "strip-ansi": "^6.0.1"
5517
+ },
5518
+ "engines": {
5519
+ "node": ">=8"
5520
+ }
5521
+ },
5522
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
5523
+ "version": "6.0.1",
5524
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
5525
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
5526
+ "dependencies": {
5527
+ "ansi-regex": "^5.0.1"
5528
+ },
5529
+ "engines": {
5530
+ "node": ">=8"
5531
+ }
5532
+ },
5533
  "node_modules/wrappy": {
5534
  "version": "1.0.2",
5535
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
5536
  "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
5537
  },
5538
  "node_modules/ws": {
5539
+ "version": "8.16.0",
5540
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
5541
+ "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
5542
  "engines": {
5543
  "node": ">=10.0.0"
5544
  },
 
5562
  "sleep": "6.1.0"
5563
  }
5564
  },
5565
+ "node_modules/y18n": {
5566
+ "version": "5.0.8",
5567
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
5568
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
5569
+ "engines": {
5570
+ "node": ">=10"
5571
+ }
5572
+ },
5573
  "node_modules/yallist": {
5574
  "version": "4.0.0",
5575
  "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
5576
  "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
5577
+ },
5578
+ "node_modules/yargs": {
5579
+ "version": "17.7.2",
5580
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
5581
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
5582
+ "dependencies": {
5583
+ "cliui": "^8.0.1",
5584
+ "escalade": "^3.1.1",
5585
+ "get-caller-file": "^2.0.5",
5586
+ "require-directory": "^2.1.1",
5587
+ "string-width": "^4.2.3",
5588
+ "y18n": "^5.0.5",
5589
+ "yargs-parser": "^21.1.1"
5590
+ },
5591
+ "engines": {
5592
+ "node": ">=12"
5593
+ }
5594
+ },
5595
+ "node_modules/yargs-parser": {
5596
+ "version": "21.1.1",
5597
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
5598
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
5599
+ "engines": {
5600
+ "node": ">=12"
5601
+ }
5602
+ },
5603
+ "node_modules/yargs/node_modules/ansi-regex": {
5604
+ "version": "5.0.1",
5605
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
5606
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
5607
+ "engines": {
5608
+ "node": ">=8"
5609
+ }
5610
+ },
5611
+ "node_modules/yargs/node_modules/is-fullwidth-code-point": {
5612
+ "version": "3.0.0",
5613
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
5614
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
5615
+ "engines": {
5616
+ "node": ">=8"
5617
+ }
5618
+ },
5619
+ "node_modules/yargs/node_modules/string-width": {
5620
+ "version": "4.2.3",
5621
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
5622
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
5623
+ "dependencies": {
5624
+ "emoji-regex": "^8.0.0",
5625
+ "is-fullwidth-code-point": "^3.0.0",
5626
+ "strip-ansi": "^6.0.1"
5627
+ },
5628
+ "engines": {
5629
+ "node": ">=8"
5630
+ }
5631
+ },
5632
+ "node_modules/yargs/node_modules/strip-ansi": {
5633
+ "version": "6.0.1",
5634
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
5635
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
5636
+ "dependencies": {
5637
+ "ansi-regex": "^5.0.1"
5638
+ },
5639
+ "engines": {
5640
+ "node": ">=8"
5641
+ }
5642
+ },
5643
+ "node_modules/yauzl": {
5644
+ "version": "2.10.0",
5645
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
5646
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
5647
+ "dependencies": {
5648
+ "buffer-crc32": "~0.2.3",
5649
+ "fd-slicer": "~1.1.0"
5650
+ }
5651
+ },
5652
+ "node_modules/zod": {
5653
+ "version": "3.22.4",
5654
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",
5655
+ "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==",
5656
+ "funding": {
5657
+ "url": "https://github.com/sponsors/colinhacks"
5658
+ }
5659
  }
5660
  }
5661
  }
source/package.json CHANGED
@@ -3,7 +3,8 @@
3
  "version": "0.0.0",
4
  "private": true,
5
  "scripts": {
6
- "start": "node --max-old-space-size=8192 index.js"
 
7
  },
8
  "dependencies": {
9
  "axios": "^1.4.0",
@@ -23,6 +24,7 @@
23
  "font-list": "^1.4.0",
24
  "fs-extra": "^8.0.1",
25
  "http-errors": "~1.6.2",
 
26
  "ioredis": "^5.4.1",
27
  "lodash": "^4.17.21",
28
  "lodash.clone": "^4.5.0",
@@ -31,9 +33,13 @@
31
  "moment-timezone": "^0.5.43",
32
  "morgan": "~1.9.0",
33
  "node-2fa": "^2.0.3",
 
34
  "node-rsa": "^1.1.1",
35
  "path": "^0.12.7",
36
  "public-ip": "^3.2.0",
 
 
 
37
  "redis": "^4.6.13",
38
  "request": "^2.88.0",
39
  "request-promise": "^4.2.4",
@@ -44,12 +50,7 @@
44
  "wayang": "^1.0.8",
45
  "winston": "^3.2.1",
46
  "winston-daily-rotate-file": "^3.8.0",
47
- "xvfb": "^0.4.0",
48
- "https-proxy-agent": "^7.0.4",
49
- "node-fetch": "^3.3.2",
50
- "puppeteer": "^22.6.5",
51
- "puppeteer-extra": "^3.3.6",
52
- "puppeteer-extra-plugin-stealth": "^2.11.2"
53
  },
54
  "devDependencies": {
55
  "selenium-webdriver": "^4.1.2"
 
3
  "version": "0.0.0",
4
  "private": true,
5
  "scripts": {
6
+ "start": "node --max-old-space-size=8192 app.js",
7
+ "test": "xvfb-run --server-args=\"-screen 1 1024x768x24\" node --max-old-space-size=8192 test.js"
8
  },
9
  "dependencies": {
10
  "axios": "^1.4.0",
 
24
  "font-list": "^1.4.0",
25
  "fs-extra": "^8.0.1",
26
  "http-errors": "~1.6.2",
27
+ "https-proxy-agent": "^7.0.4",
28
  "ioredis": "^5.4.1",
29
  "lodash": "^4.17.21",
30
  "lodash.clone": "^4.5.0",
 
33
  "moment-timezone": "^0.5.43",
34
  "morgan": "~1.9.0",
35
  "node-2fa": "^2.0.3",
36
+ "node-fetch": "^3.3.2",
37
  "node-rsa": "^1.1.1",
38
  "path": "^0.12.7",
39
  "public-ip": "^3.2.0",
40
+ "puppeteer": "^22.6.5",
41
+ "puppeteer-extra": "^3.3.6",
42
+ "puppeteer-extra-plugin-stealth": "^2.11.2",
43
  "redis": "^4.6.13",
44
  "request": "^2.88.0",
45
  "request-promise": "^4.2.4",
 
50
  "wayang": "^1.0.8",
51
  "winston": "^3.2.1",
52
  "winston-daily-rotate-file": "^3.8.0",
53
+ "xvfb": "^0.4.0"
 
 
 
 
 
54
  },
55
  "devDependencies": {
56
  "selenium-webdriver": "^4.1.2"
source/page.html ADDED
@@ -0,0 +1 @@
 
 
1
+ <html><head><meta name="color-scheme" content="light dark"><meta charset="utf-8"></head><body><pre>{}</pre><div class="json-formatter-container"></div></body></html>
source/pup.js CHANGED
@@ -7,7 +7,7 @@
7
  const puppeteer = require("puppeteer-extra");
8
  // Enable stealth plugin with all evasions
9
  puppeteer.use(require("puppeteer-extra-plugin-stealth")());
10
-
11
  let options = {
12
  executablePath: process.env.CHROME_BIN,
13
  headless: false,
@@ -20,9 +20,8 @@
20
  "--disable-accelerated-2d-canvas",
21
  "--no-first-run",
22
  "--no-zygote",
23
- "--single-process",
24
  "--disable-gpu",
25
- '--proxy-server=http://user39913:BEF6@x8836.proxyfb.com:39913'
26
  ],
27
  ignoreHTTPSErrors: true,
28
  ignoreDefaultArgs: ["--disable-extensions"],
@@ -35,13 +34,13 @@
35
 
36
  console.log("cookieJson :>> ");
37
  // Load the cookie JSON file
38
- const cookieJson = await fs.readFileSync("./cookies.json");
39
  // Parse the text file as JSON
40
- const cookies = JSON.parse(cookieJson);
41
 
42
- console.log("setCookie :>> ");
43
  // Set the cookies on the page
44
- await page.setCookie(...cookies);
45
 
46
  // Navigate to the page that will perform the tests.
47
  const testUrl = url;
@@ -51,20 +50,47 @@
51
  });
52
 
53
  // Save a screenshot of the results.
54
- let folder = path.join("storage", "screenshots", "123", "images");
55
- if (!fs.existsSync(folder)) {
56
- fs.mkdirSync(folder, { recursive: true });
57
- }``
58
- console.log("screenshotPath :>> ");
59
- const screenshotPath = path.join(folder, "headless-test-result.png");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
- await page.screenshot({ path: screenshotPath });
62
- console.log("screenshotPath :>> ", screenshotPath);
63
 
64
- await browser.close();
65
  console.log("done :>> ");
66
  } catch (error) {
67
  console.log("error :>> ", error);
68
  }
69
  })();
70
- ``
 
7
  const puppeteer = require("puppeteer-extra");
8
  // Enable stealth plugin with all evasions
9
  puppeteer.use(require("puppeteer-extra-plugin-stealth")());
10
+ console.log('process.env.CHROME_BIN :>> ', process.env.CHROME_BIN);
11
  let options = {
12
  executablePath: process.env.CHROME_BIN,
13
  headless: false,
 
20
  "--disable-accelerated-2d-canvas",
21
  "--no-first-run",
22
  "--no-zygote",
23
+ "--single-process", // <- this one doesn't work in Windows
24
  "--disable-gpu",
 
25
  ],
26
  ignoreHTTPSErrors: true,
27
  ignoreDefaultArgs: ["--disable-extensions"],
 
34
 
35
  console.log("cookieJson :>> ");
36
  // Load the cookie JSON file
37
+ // const cookieJson = await fs.readFileSync("./cookies.json");
38
  // Parse the text file as JSON
39
+ // const cookies = JSON.parse(cookieJson);
40
 
41
+ // console.log("setCookie :>> ");
42
  // Set the cookies on the page
43
+ // await page.setCookie(...cookies);
44
 
45
  // Navigate to the page that will perform the tests.
46
  const testUrl = url;
 
50
  });
51
 
52
  // Save a screenshot of the results.
53
+ // let folder = path.join("storage", "screenshots", "123", "images");
54
+ // if (!fs.existsSync(folder)) {
55
+ // fs.mkdirSync(folder, { recursive: true });
56
+ // }
57
+ // console.log("screenshotPath :>> ");
58
+ // const screenshotPath = path.join(folder, "headless-test-result.png");
59
+
60
+ // await page.screenshot({ path: screenshotPath });
61
+ // console.log("screenshotPath :>> ", screenshotPath);
62
+
63
+ // js
64
+ // const script = `
65
+ // (() => {
66
+ // return fetch("https://chat.openai.com/api/auth/session", {
67
+ // "credentials": "include",
68
+ // "headers": {
69
+ // "Accept": "*/*",
70
+ // "Accept-Language": "en-US,en;q=0.5",
71
+ // "Alt-Used": "chx.com",
72
+ // "Sec-Fetch-Dest": "empty",
73
+ // "Sec-Fetch-Mode": "cors",
74
+ // "Sec-Fetch-Site": "same-origin"
75
+ // },
76
+ // "referrer": "https://chat.openai.com",
77
+ // "method": "GET",
78
+ // "mode": "cors"
79
+ // })
80
+ // .then(response => response.json());
81
+ // })();
82
+ // `;
83
+
84
+ // const responseData = await page.evaluate(script);
85
+ // console.log('responseData :>> ', responseData);
86
+
87
+ const html = await page.content();
88
 
89
+ fs.writeFileSync('page.html', html);
 
90
 
91
+ // await browser.close();
92
  console.log("done :>> ");
93
  } catch (error) {
94
  console.log("error :>> ", error);
95
  }
96
  })();
 
source/server.js ADDED
@@ -0,0 +1,223 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+
3
+ const version = "1.1.1";
4
+ // Import framework Express
5
+ const express = require("express");
6
+ const bodyParser = require("body-parser");
7
+ const path = require("path");
8
+ const url = require("url");
9
+ const fs = require("fs");
10
+ const { fork } = require("child_process");
11
+ const { exit } = require("process");
12
+ const terminate = require("./terminate.js");
13
+ require('dotenv').config()
14
+
15
+ const PORT = process.env.PORT || 7860
16
+ const InitService = require("./Service/Init.js");
17
+ const TaskService = require("./Service/Task.js");
18
+
19
+ /**
20
+ * Processing EXIT
21
+ */
22
+ //catches uncaught exceptions
23
+ const exitHandler = terminate(() => {}, {
24
+ coredump: false,
25
+ timeout: 1500,
26
+ });
27
+ process.on("uncaughtException", exitHandler(1, "Unexpected Error"));
28
+ process.on("unhandledRejection", exitHandler(1, "Unhandled Promise"));
29
+ process.on("SIGTERM", exitHandler(0, "SIGTERM"));
30
+ process.on("SIGINT", exitHandler(0, "SIGINT"));
31
+ process.on("SIGUSR1", exitHandler(0, "SIGUSR1"));
32
+ process.on("SIGUSR2", exitHandler(0, "SIGUSR2"));
33
+
34
+ var initService = InitService.service.getInstance();
35
+ // initializing dir
36
+ initService.initDir([
37
+ "logs",
38
+ "audios",
39
+ "errorTasks",
40
+ "comics",
41
+ "profiles",
42
+ "proxies",
43
+ "screenshots",
44
+ "tasks",
45
+ "reports",
46
+ ]);
47
+
48
+ // Khởi tạo Express app
49
+ const app = express();
50
+
51
+ // create application/json parser
52
+ var jsonParser = bodyParser.json();
53
+
54
+ // create application/x-www-form-urlencoded parser
55
+ var urlencodedParser = bodyParser.urlencoded({
56
+ extended: false,
57
+ });
58
+
59
+ // Handling GET requests to the root URL ('/')
60
+ app.get("/", (req, res) => {
61
+ res.send("Welcome to the API("+process.env.NODE_NAME+"): " + version);
62
+ });
63
+
64
+ // Xử lý các request POST đến '/api'
65
+ app.get("/downloadGPT", (req, res) => {
66
+ try {
67
+ new TaskService.service.getInstance().handle();
68
+
69
+ res.send("Task started!"); // Send response to the client immediately
70
+ } catch (err) {
71
+ res.status(500).send("Internal Server Error"); // Handle any errors
72
+ }
73
+ });
74
+
75
+ app.post("/downloadGPT", jsonParser, (req, res) => {
76
+ try {
77
+ new TaskService.service.getInstance().handle(req.body);
78
+ res.send("Task started!"); // Send response to the client immediately
79
+ } catch (err) {
80
+ console.error("Error:", err.message);
81
+ res.status(500).send("Internal Server Error"); // Handle any errors
82
+ }
83
+ });
84
+
85
+ // screenshot page
86
+ // Define a route that shows the image gallery
87
+ app.get("/screenshots/:folder?/:sub_folder?", (req, res) => {
88
+ const folder = req.params.folder || "";
89
+ const sub_folder = req.params.sub_folder || "";
90
+ const folderPath = path.resolve(
91
+ "storage",
92
+ "screenshots",
93
+ folder,
94
+ sub_folder
95
+ );
96
+ const baseUrl = url.format({
97
+ protocol: req.protocol,
98
+ host: req.get("host"),
99
+ pathname: req.originalUrl.split("?")[0],
100
+ });
101
+
102
+ // Read the contents of the current folder
103
+ fs.readdir(folderPath, { withFileTypes: true }, (err, files) => {
104
+ if (err) {
105
+ console.error(err);
106
+ res.status(500).send("Internal Server Error");
107
+ return;
108
+ }
109
+
110
+ // Filter out any files that are not subfolders
111
+ const subfolders = files.filter((file) => file.isDirectory());
112
+
113
+ // Generate HTML for the subfolder list
114
+ const sidebarHtml = `
115
+ <ul>
116
+ ${subfolders
117
+ .map(
118
+ (subfolder) =>
119
+ `<li><a href="${url.resolve(
120
+ baseUrl,
121
+ path.join(
122
+ "/screenshots",
123
+ folder,
124
+ subfolder.name
125
+ )
126
+ )}">${subfolder.name}</a></li>`
127
+ )
128
+ .join("")}
129
+ </ul>
130
+ `;
131
+
132
+ // Generate HTML for the image gallery
133
+ const galleryHtml = `
134
+ <!DOCTYPE html>
135
+ <html>
136
+ <head>
137
+ <title>Image Gallery</title>
138
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/lightbox2@2.11.4/dist/css/lightbox.min.css">
139
+ <style>
140
+ body {
141
+ display: flex;
142
+ }
143
+
144
+ aside {
145
+ flex-basis: 20%;
146
+ padding: 1rem;
147
+ }
148
+
149
+ main {
150
+ flex-basis: 80%;
151
+ padding: 1rem;
152
+ }
153
+ </style>
154
+ </head>
155
+ <body>
156
+ <aside>
157
+ <h2>Subfolders</h2>
158
+ ${sidebarHtml}
159
+ </aside>
160
+ <main>
161
+ <h1>Image Gallery</h1>
162
+ <div>
163
+ ${files
164
+ .filter((file) => file.isFile())
165
+ .map(
166
+ (file) =>
167
+ `<a href="${url.resolve(
168
+ baseUrl,
169
+ path.join(
170
+ "/screenshots",
171
+ folder,
172
+ sub_folder,
173
+ file.name
174
+ )
175
+ )}" data-lightbox="gallery"><img width="100" height="100" src="${url.resolve(
176
+ baseUrl,
177
+ path.join(
178
+ "/screenshots",
179
+ folder,
180
+ sub_folder,
181
+ file.name
182
+ )
183
+ )}" /></a>`
184
+ )
185
+ .join("")}
186
+ </div>
187
+ </main>
188
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js" integrity="sha512-3gJwYpMe3QewGELv8k/BX9vcqhryRdzRMxVfq6ngyWXwo03GFEzjsUm8Q7RZcHPHksttq7/GFoxjCVUjkjvPdw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
189
+ <script src="https://cdn.jsdelivr.net/npm/lightbox2@2.11.4/dist/js/lightbox.min.js"></script>
190
+ <script>
191
+ lightbox.option({
192
+ 'resizeDuration': 200,
193
+ 'wrapAround': true
194
+ })
195
+ </script>
196
+ </body>
197
+ </html>
198
+ `;
199
+
200
+ // Send the HTML response
201
+ res.send(galleryHtml);
202
+ });
203
+ });
204
+
205
+ app.use("/screenshots", express.static(path.resolve("storage", "screenshots")));
206
+
207
+ // Middleware cuối cùng để xử lý các yêu cầu không hợp lệ
208
+ app.use((req, res) => {
209
+ const result = {
210
+ status: 404,
211
+ data: {
212
+ result: "Failed",
213
+ message: "BÒ LẠC? Stop stop. Dừng lại thôi bò ơi.",
214
+ },
215
+ };
216
+
217
+ res.status(result.status).send(JSON.stringify(result.data));
218
+ });
219
+
220
+
221
+ app.listen(PORT, () => {
222
+ console.log("API đang chạy trên cổng", PORT);
223
+ });
source/ssh_key/index.crt ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIE5DCCAsygAwIBAgIJAODjzJe3dGo7MA0GCSqGSIb3DQEBCwUAMBcxFTATBgNV
3
+ BAMMDGFwa2FkbWluLmNvbTAeFw0yMjExMjcxMDE1MTVaFw0zMjExMjQxMDE1MTVa
4
+ MBcxFTATBgNVBAMMDGFwa2FkbWluLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
5
+ ADCCAgoCggIBALycebI0gBI/SbHe1zj9mDOwX8z0ITlBiaAOryg7HGOcP22up63A
6
+ XHYDEpqxWObTLz1VXf2DAFUf9ccWIBluRKYn3O87hXN0JlhHHA1afPlj+Z54nEyQ
7
+ LbqDOMS/zMnGAg9vPotjSbUxv19OqX7FddmegRbJzk52VvE1svwMh8J3lYaC2xAm
8
+ eK5QGT0eFgOvC3DMWNKWp/zyl5IRqyRXug4C1dJvqlttLh2mnSD8ADTYo15sqZms
9
+ bhMmQVRXOWqVSqIBA1mnG9EDAkcWYLM0/Zjp7/xFy1q/GJfE/fCVme625Y8GN8gM
10
+ fQEfk9sZWktgH1C3tKw0EnyMZ/L/GewOQqtPTkJsVgk1yzmHptMVHP12+7RLZITG
11
+ dR6xtx5o3ydHknqCQ0t80yjlG7ZvCQPbAegAUWZ6Rv/lQl/5DRfwOluH8A63/yfy
12
+ xIkfOYa2i8feuw7SLrSz/Km12wfFc3r17EGptQnyye+vuRx1Vc8fYerRznILhaB6
13
+ Mx7G+vrQ4pOotJlqgDWNn/GGmEErD++AnOOIvJz1qhpn/uRl/4oX3IrlV6WtMtSU
14
+ TtFiWCeEdiFYy7FEgyaljS2U0rtM2vDQGtXluvf0NqR2HffBMGDOTVAkEA21ZX5O
15
+ gN6b6VWmyduaOBbQwm3JaJ3mm3t5wWiRvJBAJrhKgk8bJ2OO8WfPX2c9AgMBAAGj
16
+ MzAxMC8GA1UdEQQoMCaCDGFwa2FkbWluLmNvbYIQd3d3LmFwa2FkbWluLm5ldIcE
17
+ fwAAATANBgkqhkiG9w0BAQsFAAOCAgEADZjk+AIWMsOkAcFki2YBr+ZxgNZJiM6f
18
+ 01shrEtAg4j4lfCAgHWI5sK7L6IvU+KBmePeLKR467di/Yyrf3UlR19bWhLoJzPS
19
+ MpQrR5x5HLEkI3DmljXW1xnNIbbyawYWgKDg2gj2HcIH9Fw3/Pq3OVG1Q4wVU3X4
20
+ CqlgCf5uz6dC0PySjwjJ6ohTMeL9fJQ9/VNNV52bu9EV9seUHmr9eo3Cdfk3dR73
21
+ SDQhMpD6HZKqYCWiY0KVacqm0V6dnSaGybbsXWb8IdWS6tCT/40XR7vYjBgWoP7v
22
+ IbhXblG+mu0Fy7tmX4fwZLZIOmEQc9AzYtm23FnFCVJFbiPamge1xndBIi8PuMBk
23
+ tlVT0Bi+9pcYFrqmivlfaIfCfvQiBNNIy/5RsiEQsmmp4ri951v4yf2+RrITVeud
24
+ 30omaDEtAr8zsEVvQby3uZS7uMjBjas3xMaCmKzxDh5pFj0sb6+DTPHLTrOK2L5V
25
+ Sa9G3UE27TpCCggj/zKiTcGQufEXMejMUQHWm+UfIkXM/7NLzKdmgzUhnbR2+gW/
26
+ zIE6NIIDQNN61An4KZHPV5LKfjT/p9Ut3BfWLvsVqpj1hHhgKothkaYHlwQa7ktm
27
+ F9L8YlUSHtA3QpOanbVKSamMws6J9fVf3f7IsQ6bs21yQ5OUpXCe4yshQBiVqeYX
28
+ RVL1HrKVkpQ=
29
+ -----END CERTIFICATE-----
source/ssh_key/index.key ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQC8nHmyNIASP0mx
3
+ 3tc4/ZgzsF/M9CE5QYmgDq8oOxxjnD9trqetwFx2AxKasVjm0y89VV39gwBVH/XH
4
+ FiAZbkSmJ9zvO4VzdCZYRxwNWnz5Y/meeJxMkC26gzjEv8zJxgIPbz6LY0m1Mb9f
5
+ Tql+xXXZnoEWyc5OdlbxNbL8DIfCd5WGgtsQJniuUBk9HhYDrwtwzFjSlqf88peS
6
+ EaskV7oOAtXSb6pbbS4dpp0g/AA02KNebKmZrG4TJkFUVzlqlUqiAQNZpxvRAwJH
7
+ FmCzNP2Y6e/8RctavxiXxP3wlZnutuWPBjfIDH0BH5PbGVpLYB9Qt7SsNBJ8jGfy
8
+ /xnsDkKrT05CbFYJNcs5h6bTFRz9dvu0S2SExnUesbceaN8nR5J6gkNLfNMo5Ru2
9
+ bwkD2wHoAFFmekb/5UJf+Q0X8Dpbh/AOt/8n8sSJHzmGtovH3rsO0i60s/yptdsH
10
+ xXN69exBqbUJ8snvr7kcdVXPH2Hq0c5yC4WgejMexvr60OKTqLSZaoA1jZ/xhphB
11
+ Kw/vgJzjiLyc9aoaZ/7kZf+KF9yK5VelrTLUlE7RYlgnhHYhWMuxRIMmpY0tlNK7
12
+ TNrw0BrV5br39Dakdh33wTBgzk1QJBANtWV+ToDem+lVpsnbmjgW0MJtyWid5pt7
13
+ ecFokbyQQCa4SoJPGydjjvFnz19nPQIDAQABAoICAHhEGoFcYrG/80DdBEWNxshm
14
+ 1Z99p9W3iYcq9dtkXcTSc8t/i+IJ/6ssaGeFYFfHH58vWQB20PZ2q6Sn4g31Nwbv
15
+ 8jwFqyGkVXMC3MtTAM+RRTEcXSWg5dfBJqimWHHstZGb8Li2teA4+XtPUFrKlEwQ
16
+ euXKBqgXY3bpM9juMH76+7hKpl7U+SzFXGKRVZ5BtrzVQGn/sNxk3+s/Iu7IlZWr
17
+ jyZhF7K2mqpDfHv01DjeTsW96iNYRNQnF48tEyp4SZ+ln7pCCUWscn5bsYtz5aTk
18
+ vqcQ5gtWQNs9vGL1MbN6okQhxd3kwKy/susJbn8TqsQwb59CkOskKIBU0/WmXjF/
19
+ 25iGsC+bjhsMBZja4h9X5RBjJxzLKqzPqup6mfRbQKDf4O1V79w/GBO1lfRHOUAz
20
+ Z//MGu4vDvBbFdh1Di45oBnx6s14kGiwwDTyZ247blLCLfid4cE/e1kzr2F+32r9
21
+ TpkJT4g9r+eRoHKYpOpTqXvhW3RjdnCht7nylrK0JnqGzoSYbhBu/UYQKZzqAIWT
22
+ PagetYOyOhqRlW6GwZk4I1sU/J2tJFbcy0F0F8UZ3mofcuzqW62qv9idxu4xLiFE
23
+ 99hWr349mXOduI1jxsh/BYfGZTiWG4XoZozacDellDMsgmKkXzIiY3ZyMIZHLx8i
24
+ ysdKD02o9fembOzrLighAoIBAQDfKFH5nLAJfB3TksXDYfF3Rve4YeuSnJXag54S
25
+ lQkC56YWq+zIp/KsVff3w+cJiK8JLR87mzmWg+bJA8e5Kj45byU0ATCe4SHcJ6Tm
26
+ WWXcgV81lUhW9zZlEkakJKT1HTHpGoZqQw/0GIA3ruHM5OgtXRjYJ8Y3jEeWqR2Q
27
+ 4UOaMmu34bYUVjvKW0I+DZ+hMKlJlyuVBogqlAfOtIYEmf5a/5b7eZT2tP6e3ZAW
28
+ 24Tr+CviFDjhm/Jxtf/13s7FYMSjMpQM7Rby2fiPD/zy+VOWJGzyEJ2yhpjIi80r
29
+ i0z25mIQ8FaCxypHyHOZTHWZ7MXhMGpqHeRdkvdP2h60wjQVAoIBAQDYXpccWVbx
30
+ 3lyCfx38Ni2pQ/R5CfZVqJes/Q1qfyB8DX0KtafX1U/MU+fOaiIGNxuka8Fg5hFp
31
+ n83UpCH9IabLQgG7SwqPpfbJksAyMs7KBytyLaZKtuh0rECDpTF5qdKEtkl7169Z
32
+ K1BfffeWv1MZDwjrkuSmjLf7W7LU4baD41CHS7I/GuoDrn+Oo8fwWKUvDtRdknJR
33
+ n0ulMWVw4hB9gBVbc+wmcZTcAbe1yRA7xahtF5/tMPWzyYOHKaMfWeRyj12riQM6
34
+ y/fymtefyDtrtNtF5TND/TBLDXh/rExOhhjknb/UGxfB2viZw0eR7wG4UqQgLDTU
35
+ eylapfuaZWiJAoIBAQDJkcUB/9suphLW8gN6aXTPtaW6wZAk3RWqzCozRLVgD1gB
36
+ sIfv82wK6JhUD3sYLINWeZB1qc9Jupjyx1xXT+XmwRNMtypwyJBqKNEVVHjixWT3
37
+ pIE0NJbIksqGJ6ds1FMp6FCzmSHG7X6bTXceOUHS//2Z+ctcj3R2jQlsvVzv4k1U
38
+ SifKlN3q+aWLIYkn8ylmlIrEUKMcOpwWxQ8tBuAu2CFLw1WfxnsbiqxFSUH2VzNk
39
+ QbnjZ5aFycyLDReeR7s2YlBCoMGS2PpgVyO3YSh0PTC/Me0Pve4xb74CcBA0EINS
40
+ I5UxCa+SKWjpdpvfTnSq5K2qbpfBQifr0+zaf3TFAoIBAQDM4+Xcpo06xQJ9YLqY
41
+ VwWuP/eFlvV58AiRe5/0tSWh03QRbCvgqtLB/sKIKODHWfAHJzMb+0GJ8BYNws+c
42
+ 0P0NhRf2r/z0QokMILd30b0YeumdWbUbE1HVCjidcRUEzNfZbHTxnTEjE20swDBw
43
+ xASAukgMLDHxtVeT4yXZiVQ4WE2tkPTd5TKtAdUw0c9HvenOQhC/+yneOSZ86+XP
44
+ m4NaFKwkygVZ8jywib/ZmOiScX4osDJ1feNtuOmgWMFrssgt460j/r7cMsI9Lnv5
45
+ hrceK0lpSr3dKClPKRZucE5iHYH9G5TH2lAI9r5rfQyNGPNcBIX/IV11yJtEh+FW
46
+ N6lhAoIBAQCOZZR85UdM9r3fXsBayqlQ4/VTgiwBcFpGz6HNjpfFN3KQBX7xoqdf
47
+ 8fz3tjCxvQQJ2sT8a/P6LsI8O9bhdOVb2ZCRcFConLEOeHwVTaIwMVKvYhSctB/A
48
+ Fkj7nzSNMl4X5M8kc2MoWPaK4+XfwP9oK6/yNB79YC5FeVBr70gtIthIBWYNY0na
49
+ LUeF6COdkTbU6sSfJ+c6dL97cQbmQh3LVibTUW2gYACGODpOTM2fXAIMgKU7P4rF
50
+ 9cN4kJGBL6wjG5ViOrnc0C+vPWi+ODp9hrVWSaWDkzSpByp1hLpcEb8p7vsncj4r
51
+ jxlY2nyey/k5r9QlXClbqJ7rJyRKKlEw
52
+ -----END PRIVATE KEY-----
source/syncWinToUbuntu.sh DELETED
@@ -1,4 +0,0 @@
1
- #!/bin/bash
2
- echo "$(date): Running"
3
-
4
- rsync -av --delete --exclude='Browser/' --exclude='syncWinToUbuntu.sh' --exclude='storage/' /mnt/hgfs/twitter-bot-app/ /home/thai/Downloads/myTest/
 
 
 
 
 
source/test.js ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 'use strict'
2
+ const utils = require('./Helpers/utils.js')
3
+
4
+ /**import classes */
5
+ const BrowserService = require('./Service/Browser.js');
6
+
7
+ async function start(data, script) {
8
+ try {
9
+ // starting browser
10
+ BrowserService.service.getInstance().handle(data, script)
11
+ }
12
+ catch (error) {
13
+ utils.log(error)
14
+ }
15
+ finally {
16
+ }
17
+ }
18
+
19
+ try {
20
+ start({}, 'chatGPT')
21
+ } catch (error) {
22
+ utils.log(error)
23
+ }
24
+