barryle
commited on
Commit
•
4f4fbc7
1
Parent(s):
70cab3e
test
Browse files- .env +1 -0
- .gitignore +0 -2
- Dockerfile +10 -2
- Makefile +7 -1
- README.md +0 -11
- README.txt +1 -1
- build.sh +13 -0
- source/.env.example +4 -0
- source/.env.prod +3 -0
- source/Helpers/utils.js +34 -1
- source/Models/Proxy.js +0 -15
- source/Models/Report.js +0 -0
- source/Models/Task.js +0 -11
- source/Models/Websocket.js +0 -35
- source/Scenario/Comic.js +3 -8
- source/Scenario/chatGPT.js +216 -659
- source/Scenario/chatGPT_selenium.js +808 -0
- source/Service/Axios.js +3 -2
- source/Service/Browser.js +4 -383
- source/Service/ChatGpt.js +783 -0
- source/Service/Express.js +4 -144
- source/Service/Init.js +4 -0
- source/Service/Puppeteer.js +109 -0
- source/Service/Task.js +39 -126
- source/Types/GenerationParam.js +2 -0
- source/Types/GenerationParam.ts +33 -0
- source/app.js +67 -27
- source/apps/chatgpt.js +4 -4
- source/apps/handleTask.js +0 -14
- source/chatgpt.json +99 -0
- source/config.json +0 -2
- source/config/chatgpt.json +2 -2
- source/connectVM.bat +0 -9
- source/cookies.json +1 -1
- source/ecosystem.config.js +1 -1
- source/get_chromium_beta2.sh +0 -24
- source/index.js +0 -86
- source/install.sh +10 -9
- source/package-lock.json +1876 -47
- source/package.json +8 -7
- source/page.html +1 -0
- source/pup.js +43 -17
- source/server.js +223 -0
- source/ssh_key/index.crt +29 -0
- source/ssh_key/index.key +52 -0
- source/syncWinToUbuntu.sh +0 -4
- source/test.js +24 -0
.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/
|
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
|
|
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
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
|
16 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
99 |
|
100 |
-
|
|
|
101 |
|
102 |
-
|
103 |
-
|
|
|
|
|
|
|
104 |
|
105 |
-
utils.createFolder("truyen", folderName);
|
106 |
|
107 |
-
|
108 |
|
109 |
-
|
110 |
|
111 |
-
|
112 |
|
113 |
-
|
114 |
|
115 |
-
|
116 |
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
path: '/',
|
124 |
-
expiry: 9999999999 // Đặt thời gian hết hạn của cookie (epoch time)
|
125 |
-
};
|
126 |
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
|
131 |
-
|
132 |
|
133 |
-
|
134 |
-
|
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 |
-
|
142 |
-
|
143 |
-
|
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 |
-
//
|
396 |
-
|
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 |
-
|
440 |
-
|
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 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
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 |
-
|
578 |
|
579 |
-
|
|
|
580 |
|
581 |
-
|
582 |
-
|
583 |
-
var {
|
584 |
-
getSessionUrl
|
585 |
-
} = CHATGPT;
|
586 |
|
587 |
-
// Open the browser window with the maximum size
|
588 |
-
//await driver.manage().window().maximize();
|
589 |
|
590 |
-
|
591 |
|
592 |
-
|
593 |
|
594 |
-
|
|
|
|
|
595 |
|
596 |
-
|
597 |
|
598 |
-
/*
|
599 |
-
let newAccountTokens = [];
|
600 |
-
let bearTokens = [];
|
601 |
|
602 |
|
603 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
604 |
|
|
|
|
|
|
|
605 |
|
606 |
-
|
607 |
|
608 |
-
|
|
|
|
|
609 |
|
610 |
-
|
611 |
|
612 |
-
|
613 |
|
614 |
-
|
615 |
|
616 |
-
|
617 |
-
|
618 |
-
}
|
619 |
|
620 |
-
|
621 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
622 |
|
623 |
-
|
624 |
-
|
625 |
-
];
|
626 |
|
627 |
-
|
|
|
|
|
|
|
628 |
|
|
|
629 |
|
|
|
|
|
630 |
|
631 |
-
|
632 |
-
|
633 |
-
|
|
|
634 |
|
635 |
-
|
636 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
657 |
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
|
663 |
-
|
664 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
665 |
|
|
|
666 |
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
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 |
-
|
|
|
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 |
-
|
|
|
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 |
-
|
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 (
|
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 |
-
|
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
|
107 |
-
const
|
108 |
-
|
109 |
-
|
110 |
-
|
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 |
-
|
130 |
-
|
131 |
-
|
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("
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
});
|
148 |
|
149 |
-
child.
|
150 |
-
|
151 |
-
if (CONFIG.BUILD_ENV == "prod") {
|
152 |
-
currentProcesses--;
|
153 |
-
if (currentProcesses < 0) {
|
154 |
-
currentProcesses = 0;
|
155 |
-
}
|
156 |
-
}
|
157 |
});
|
158 |
|
159 |
-
child.on("
|
160 |
-
|
161 |
-
|
|
|
|
|
|
|
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 |
-
|
186 |
-
|
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 |
-
|
14 |
-
|
|
|
|
|
|
|
|
|
|
|
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.
|
37 |
try {
|
38 |
-
|
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 |
-
//
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
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 |
-
|
200 |
-
console.log("API đang chạy trên cổng",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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(
|
9 |
try {
|
10 |
// starting browser
|
11 |
-
BrowserService.service.getInstance().handle(
|
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
|
26 |
-
start(
|
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"}
|
|
|
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: '
|
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 |
-
|
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 |
-
|
19 |
|
20 |
# Install additional packages
|
21 |
-
|
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/
|
1210 |
-
"version": "1.
|
1211 |
-
"resolved": "https://registry.npmjs.org/
|
1212 |
-
"integrity": "sha512-
|
1213 |
"engines": {
|
1214 |
-
"node": ">=
|
1215 |
}
|
1216 |
},
|
1217 |
-
"node_modules/
|
1218 |
-
"version": "1.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": ">=
|
|
|
|
|
|
|
|
|
|
|
2695 |
}
|
2696 |
},
|
2697 |
-
"node_modules/
|
2698 |
-
"version": "
|
2699 |
-
"resolved": "https://registry.npmjs.org/
|
2700 |
-
"integrity": "sha512-
|
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/
|
2708 |
-
"version": "3.
|
2709 |
-
"
|
|
|
2710 |
"dependencies": {
|
2711 |
-
"
|
2712 |
-
"got": "^9.6.0",
|
2713 |
-
"is-ip": "^3.1.0"
|
2714 |
},
|
2715 |
"engines": {
|
2716 |
-
"node": ">=
|
|
|
|
|
|
|
|
|
|
|
2717 |
}
|
2718 |
},
|
2719 |
-
"node_modules/
|
2720 |
-
"version": "
|
2721 |
-
"resolved": "https://registry.npmjs.org/
|
2722 |
-
"integrity": "sha512-
|
2723 |
-
"dependencies": {
|
2724 |
-
"end-of-stream": "^1.1.0",
|
2725 |
-
"once": "^1.3.1"
|
2726 |
-
}
|
2727 |
},
|
2728 |
-
"node_modules/
|
2729 |
-
"version": "
|
2730 |
-
"resolved": "https://registry.npmjs.org/
|
2731 |
-
"integrity": "sha512-
|
|
|
|
|
|
|
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.
|
3801 |
-
"resolved": "https://registry.npmjs.org/ws/-/ws-8.
|
3802 |
-
"integrity": "sha512-
|
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
|
|
|
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 |
-
|
57 |
-
}
|
58 |
-
console.log("screenshotPath :>> ");
|
59 |
-
const screenshotPath = path.join(folder, "headless-test-result.png");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
|
61 |
-
|
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 |
+
|