Spaces:
Paused
Paused
Commit
·
4f1ca17
1
Parent(s):
78cd2ff
added html and screenshot endpoints
Browse files- Dockerfile +2 -0
- index.js +133 -13
- package-lock.json +154 -0
- package.json +3 -1
Dockerfile
CHANGED
|
@@ -1,5 +1,7 @@
|
|
| 1 |
FROM node:slim AS app
|
| 2 |
|
|
|
|
|
|
|
| 3 |
# We don't need the standalone Chromium
|
| 4 |
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
| 5 |
ENV CHROME_BIN=/usr/bin/google-chrome
|
|
|
|
| 1 |
FROM node:slim AS app
|
| 2 |
|
| 3 |
+
# referenced :- https://dev.to/cloudx/how-to-use-puppeteer-inside-a-docker-container-568c
|
| 4 |
+
|
| 5 |
# We don't need the standalone Chromium
|
| 6 |
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
| 7 |
ENV CHROME_BIN=/usr/bin/google-chrome
|
index.js
CHANGED
|
@@ -1,34 +1,53 @@
|
|
| 1 |
const express = require("express")
|
| 2 |
const app = express();
|
| 3 |
const puppeteer = require("puppeteer");
|
|
|
|
|
|
|
| 4 |
|
|
|
|
|
|
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
const browser = await puppeteer.launch({
|
| 11 |
executablePath: process.env.CHROME_BIN || null,
|
| 12 |
defaultViewport: null,
|
| 13 |
headless: true,
|
| 14 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
|
| 16 |
-
console.log("Scrapping started");
|
| 17 |
-
// Open a new page
|
| 18 |
-
const page = await browser.newPage();
|
| 19 |
await page.setRequestInterception(true);
|
| 20 |
page.on("request", (request) => {
|
| 21 |
// return request.continue();
|
| 22 |
-
if(request.resourceType()
|
| 23 |
request.continue();
|
| 24 |
}
|
| 25 |
-
else{
|
| 26 |
request.abort();
|
| 27 |
}
|
| 28 |
});
|
| 29 |
|
| 30 |
-
|
| 31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
await page.goto(url, {
|
| 33 |
// waitUntil: "domcontentloaded",
|
| 34 |
});
|
|
@@ -54,17 +73,118 @@ const getData = async () => {
|
|
| 54 |
|
| 55 |
|
| 56 |
page.close();
|
| 57 |
-
return {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
};
|
| 59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
app.get("/", async (req, res) => {
|
| 61 |
res.send('go to /test');
|
| 62 |
})
|
| 63 |
|
|
|
|
|
|
|
|
|
|
| 64 |
app.get("/test", async (req, res) => {
|
| 65 |
-
const data = await getData();
|
| 66 |
res.type("json");
|
| 67 |
res.send(JSON.stringify(data));
|
| 68 |
})
|
| 69 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 70 |
app.listen(8080, () => console.log("Server running at port 8080"));
|
|
|
|
| 1 |
const express = require("express")
|
| 2 |
const app = express();
|
| 3 |
const puppeteer = require("puppeteer");
|
| 4 |
+
const bodyParser = require("body-parser");
|
| 5 |
+
const mutler = require("multer");
|
| 6 |
|
| 7 |
+
// parse application/json
|
| 8 |
+
app.use(bodyParser.json());
|
| 9 |
|
| 10 |
+
// parse application/x-www-form-urlencoded
|
| 11 |
+
app.use(bodyParser.urlencoded({ extended: false }));
|
| 12 |
+
|
| 13 |
+
// app.use(express.urlencoded());
|
| 14 |
+
app.use(mutler().array(""));
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
const initBrowser = async () => {
|
| 18 |
const browser = await puppeteer.launch({
|
| 19 |
executablePath: process.env.CHROME_BIN || null,
|
| 20 |
defaultViewport: null,
|
| 21 |
headless: true,
|
| 22 |
});
|
| 23 |
+
return browser;
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
async function addRequestFilter(page) {
|
| 27 |
+
|
| 28 |
+
const resourcetypes = ['document'];
|
| 29 |
|
|
|
|
|
|
|
|
|
|
| 30 |
await page.setRequestInterception(true);
|
| 31 |
page.on("request", (request) => {
|
| 32 |
// return request.continue();
|
| 33 |
+
if (resourcetypes.includes(request.resourceType())) {
|
| 34 |
request.continue();
|
| 35 |
}
|
| 36 |
+
else {
|
| 37 |
request.abort();
|
| 38 |
}
|
| 39 |
});
|
| 40 |
|
| 41 |
+
return page;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
const getData = async (url) => {
|
| 45 |
+
|
| 46 |
+
// Open a new page
|
| 47 |
+
const browser = await initBrowser();
|
| 48 |
+
var page = await browser.newPage();
|
| 49 |
+
page = await addRequestFilter(page);
|
| 50 |
+
|
| 51 |
await page.goto(url, {
|
| 52 |
// waitUntil: "domcontentloaded",
|
| 53 |
});
|
|
|
|
| 73 |
|
| 74 |
|
| 75 |
page.close();
|
| 76 |
+
return {
|
| 77 |
+
title: title,
|
| 78 |
+
price: price,
|
| 79 |
+
image: image,
|
| 80 |
+
};
|
| 81 |
};
|
| 82 |
|
| 83 |
+
const getHTML = async (url) => {
|
| 84 |
+
|
| 85 |
+
const browser = await initBrowser();
|
| 86 |
+
var page = await browser.newPage();
|
| 87 |
+
page = await addRequestFilter(page);
|
| 88 |
+
|
| 89 |
+
await page.goto(url, {
|
| 90 |
+
// waitUntil: "domcontentloaded",
|
| 91 |
+
});
|
| 92 |
+
|
| 93 |
+
return await page.content();
|
| 94 |
+
|
| 95 |
+
}
|
| 96 |
+
const getScreenshot = async (url) => {
|
| 97 |
+
|
| 98 |
+
const browser = await initBrowser();
|
| 99 |
+
var page = await browser.newPage();
|
| 100 |
+
|
| 101 |
+
await page.goto(url, {
|
| 102 |
+
// waitUntil: "domcontentloaded",
|
| 103 |
+
});
|
| 104 |
+
|
| 105 |
+
const image = await page.screenshot({
|
| 106 |
+
type: "png",
|
| 107 |
+
});
|
| 108 |
+
page.close();
|
| 109 |
+
return image;
|
| 110 |
+
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
app.get("/", async (req, res) => {
|
| 114 |
res.send('go to /test');
|
| 115 |
})
|
| 116 |
|
| 117 |
+
url = "https://www.flipkart.com/apple-iphone-15-blue-128-gb/p/itmbf14ef54f645d";
|
| 118 |
+
|
| 119 |
+
|
| 120 |
app.get("/test", async (req, res) => {
|
| 121 |
+
const data = await getData(url);
|
| 122 |
res.type("json");
|
| 123 |
res.send(JSON.stringify(data));
|
| 124 |
})
|
| 125 |
|
| 126 |
+
app.get("/testhtml", async (req, res) => {
|
| 127 |
+
const html = await getHTML(url);
|
| 128 |
+
res.type("json");
|
| 129 |
+
res.send(JSON.stringify({
|
| 130 |
+
html: html
|
| 131 |
+
}));
|
| 132 |
+
})
|
| 133 |
+
app.get("/testscreenshot", async (req, res) => {
|
| 134 |
+
const image = await getScreenshot(url);
|
| 135 |
+
// convert buffer to base64 string
|
| 136 |
+
const base64Image = await image.toString('base64');
|
| 137 |
+
|
| 138 |
+
res.type("json");
|
| 139 |
+
return res.send(JSON.stringify({
|
| 140 |
+
"screenshot": "data:image/png;base64," + base64Image
|
| 141 |
+
}));
|
| 142 |
+
})
|
| 143 |
+
app.post("/html", async (req, res) => {
|
| 144 |
+
const data = req.body;
|
| 145 |
+
if(!("url" in data)){
|
| 146 |
+
res.type("json");
|
| 147 |
+
return res.send(JSON.stringify({
|
| 148 |
+
"error":"no url parameter in request",
|
| 149 |
+
}));
|
| 150 |
+
}
|
| 151 |
+
const url = data['url'];
|
| 152 |
+
|
| 153 |
+
try{
|
| 154 |
+
const html = await getHTML(url);
|
| 155 |
+
res.type("json").send(JSON.stringify({
|
| 156 |
+
html: html
|
| 157 |
+
}));
|
| 158 |
+
}
|
| 159 |
+
catch(e){
|
| 160 |
+
return res.type("json").send(JSON.stringify({
|
| 161 |
+
"error":"can't open page",
|
| 162 |
+
}));
|
| 163 |
+
}
|
| 164 |
+
})
|
| 165 |
+
app.post("/screenshot", async (req, res) => {
|
| 166 |
+
const data = req.body;
|
| 167 |
+
if(!("url" in data)){
|
| 168 |
+
return res.type("json").send(JSON.stringify({
|
| 169 |
+
"error":"no url parameter in request",
|
| 170 |
+
}));
|
| 171 |
+
}
|
| 172 |
+
const url = data['url'];
|
| 173 |
+
|
| 174 |
+
try{
|
| 175 |
+
const image = await getScreenshot(url);
|
| 176 |
+
// convert buffer to base64 string
|
| 177 |
+
const base64Image = await image.toString('base64');
|
| 178 |
+
|
| 179 |
+
return res.type("json").send(JSON.stringify({
|
| 180 |
+
"screenshot": "data:image/png;base64," + base64Image
|
| 181 |
+
}));
|
| 182 |
+
}
|
| 183 |
+
catch(e){
|
| 184 |
+
return res.type("json").send(JSON.stringify({
|
| 185 |
+
"error":"can't open page",
|
| 186 |
+
}));
|
| 187 |
+
}
|
| 188 |
+
})
|
| 189 |
+
|
| 190 |
app.listen(8080, () => console.log("Server running at port 8080"));
|
package-lock.json
CHANGED
|
@@ -5,7 +5,9 @@
|
|
| 5 |
"packages": {
|
| 6 |
"": {
|
| 7 |
"dependencies": {
|
|
|
|
| 8 |
"express": "^4.19.1",
|
|
|
|
| 9 |
"puppeteer": "^22.6.0"
|
| 10 |
}
|
| 11 |
},
|
|
@@ -171,6 +173,11 @@
|
|
| 171 |
"node": ">=4"
|
| 172 |
}
|
| 173 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 174 |
"node_modules/argparse": {
|
| 175 |
"version": "2.0.1",
|
| 176 |
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
|
@@ -311,6 +318,22 @@
|
|
| 311 |
"node": "*"
|
| 312 |
}
|
| 313 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 314 |
"node_modules/bytes": {
|
| 315 |
"version": "3.1.2",
|
| 316 |
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
|
@@ -397,6 +420,20 @@
|
|
| 397 |
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
| 398 |
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
|
| 399 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 400 |
"node_modules/content-disposition": {
|
| 401 |
"version": "0.5.4",
|
| 402 |
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
|
|
@@ -429,6 +466,11 @@
|
|
| 429 |
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
| 430 |
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
| 431 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 432 |
"node_modules/cosmiconfig": {
|
| 433 |
"version": "9.0.0",
|
| 434 |
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
|
|
@@ -1114,6 +1156,11 @@
|
|
| 1114 |
"node": ">=8"
|
| 1115 |
}
|
| 1116 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1117 |
"node_modules/js-tokens": {
|
| 1118 |
"version": "4.0.0",
|
| 1119 |
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
|
@@ -1215,16 +1262,52 @@
|
|
| 1215 |
"node": ">= 0.6"
|
| 1216 |
}
|
| 1217 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1218 |
"node_modules/mitt": {
|
| 1219 |
"version": "3.0.1",
|
| 1220 |
"resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
|
| 1221 |
"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
|
| 1222 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1223 |
"node_modules/ms": {
|
| 1224 |
"version": "2.0.0",
|
| 1225 |
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
| 1226 |
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
| 1227 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1228 |
"node_modules/negotiator": {
|
| 1229 |
"version": "0.6.3",
|
| 1230 |
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
|
@@ -1241,6 +1324,14 @@
|
|
| 1241 |
"node": ">= 0.4.0"
|
| 1242 |
}
|
| 1243 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1244 |
"node_modules/object-inspect": {
|
| 1245 |
"version": "1.13.1",
|
| 1246 |
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
|
|
@@ -1370,6 +1461,11 @@
|
|
| 1370 |
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
| 1371 |
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
|
| 1372 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1373 |
"node_modules/progress": {
|
| 1374 |
"version": "2.0.3",
|
| 1375 |
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
|
|
@@ -1538,6 +1634,25 @@
|
|
| 1538 |
"node": ">= 0.8"
|
| 1539 |
}
|
| 1540 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1541 |
"node_modules/require-directory": {
|
| 1542 |
"version": "2.1.1",
|
| 1543 |
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
|
@@ -1761,6 +1876,14 @@
|
|
| 1761 |
"node": ">= 0.8"
|
| 1762 |
}
|
| 1763 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1764 |
"node_modules/streamx": {
|
| 1765 |
"version": "2.16.1",
|
| 1766 |
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz",
|
|
@@ -1773,6 +1896,19 @@
|
|
| 1773 |
"bare-events": "^2.2.0"
|
| 1774 |
}
|
| 1775 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1776 |
"node_modules/string-width": {
|
| 1777 |
"version": "4.2.3",
|
| 1778 |
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
|
@@ -1861,6 +1997,11 @@
|
|
| 1861 |
"node": ">= 0.6"
|
| 1862 |
}
|
| 1863 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1864 |
"node_modules/unbzip2-stream": {
|
| 1865 |
"version": "1.4.3",
|
| 1866 |
"resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
|
|
@@ -1897,6 +2038,11 @@
|
|
| 1897 |
"resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz",
|
| 1898 |
"integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg=="
|
| 1899 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1900 |
"node_modules/utils-merge": {
|
| 1901 |
"version": "1.0.1",
|
| 1902 |
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
|
@@ -1984,6 +2130,14 @@
|
|
| 1984 |
}
|
| 1985 |
}
|
| 1986 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1987 |
"node_modules/y18n": {
|
| 1988 |
"version": "5.0.8",
|
| 1989 |
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
|
|
|
| 5 |
"packages": {
|
| 6 |
"": {
|
| 7 |
"dependencies": {
|
| 8 |
+
"body-parser": "^1.20.2",
|
| 9 |
"express": "^4.19.1",
|
| 10 |
+
"multer": "^1.4.5-lts.1",
|
| 11 |
"puppeteer": "^22.6.0"
|
| 12 |
}
|
| 13 |
},
|
|
|
|
| 173 |
"node": ">=4"
|
| 174 |
}
|
| 175 |
},
|
| 176 |
+
"node_modules/append-field": {
|
| 177 |
+
"version": "1.0.0",
|
| 178 |
+
"resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
|
| 179 |
+
"integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw=="
|
| 180 |
+
},
|
| 181 |
"node_modules/argparse": {
|
| 182 |
"version": "2.0.1",
|
| 183 |
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
|
|
|
| 318 |
"node": "*"
|
| 319 |
}
|
| 320 |
},
|
| 321 |
+
"node_modules/buffer-from": {
|
| 322 |
+
"version": "1.1.2",
|
| 323 |
+
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
| 324 |
+
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
|
| 325 |
+
},
|
| 326 |
+
"node_modules/busboy": {
|
| 327 |
+
"version": "1.6.0",
|
| 328 |
+
"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
|
| 329 |
+
"integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
|
| 330 |
+
"dependencies": {
|
| 331 |
+
"streamsearch": "^1.1.0"
|
| 332 |
+
},
|
| 333 |
+
"engines": {
|
| 334 |
+
"node": ">=10.16.0"
|
| 335 |
+
}
|
| 336 |
+
},
|
| 337 |
"node_modules/bytes": {
|
| 338 |
"version": "3.1.2",
|
| 339 |
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
|
|
|
| 420 |
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
| 421 |
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
|
| 422 |
},
|
| 423 |
+
"node_modules/concat-stream": {
|
| 424 |
+
"version": "1.6.2",
|
| 425 |
+
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
|
| 426 |
+
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
|
| 427 |
+
"engines": [
|
| 428 |
+
"node >= 0.8"
|
| 429 |
+
],
|
| 430 |
+
"dependencies": {
|
| 431 |
+
"buffer-from": "^1.0.0",
|
| 432 |
+
"inherits": "^2.0.3",
|
| 433 |
+
"readable-stream": "^2.2.2",
|
| 434 |
+
"typedarray": "^0.0.6"
|
| 435 |
+
}
|
| 436 |
+
},
|
| 437 |
"node_modules/content-disposition": {
|
| 438 |
"version": "0.5.4",
|
| 439 |
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
|
|
|
|
| 466 |
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
| 467 |
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
| 468 |
},
|
| 469 |
+
"node_modules/core-util-is": {
|
| 470 |
+
"version": "1.0.3",
|
| 471 |
+
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
|
| 472 |
+
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
|
| 473 |
+
},
|
| 474 |
"node_modules/cosmiconfig": {
|
| 475 |
"version": "9.0.0",
|
| 476 |
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
|
|
|
|
| 1156 |
"node": ">=8"
|
| 1157 |
}
|
| 1158 |
},
|
| 1159 |
+
"node_modules/isarray": {
|
| 1160 |
+
"version": "1.0.0",
|
| 1161 |
+
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
| 1162 |
+
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
|
| 1163 |
+
},
|
| 1164 |
"node_modules/js-tokens": {
|
| 1165 |
"version": "4.0.0",
|
| 1166 |
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
|
|
|
| 1262 |
"node": ">= 0.6"
|
| 1263 |
}
|
| 1264 |
},
|
| 1265 |
+
"node_modules/minimist": {
|
| 1266 |
+
"version": "1.2.8",
|
| 1267 |
+
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
| 1268 |
+
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
|
| 1269 |
+
"funding": {
|
| 1270 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 1271 |
+
}
|
| 1272 |
+
},
|
| 1273 |
"node_modules/mitt": {
|
| 1274 |
"version": "3.0.1",
|
| 1275 |
"resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
|
| 1276 |
"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
|
| 1277 |
},
|
| 1278 |
+
"node_modules/mkdirp": {
|
| 1279 |
+
"version": "0.5.6",
|
| 1280 |
+
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
|
| 1281 |
+
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
|
| 1282 |
+
"dependencies": {
|
| 1283 |
+
"minimist": "^1.2.6"
|
| 1284 |
+
},
|
| 1285 |
+
"bin": {
|
| 1286 |
+
"mkdirp": "bin/cmd.js"
|
| 1287 |
+
}
|
| 1288 |
+
},
|
| 1289 |
"node_modules/ms": {
|
| 1290 |
"version": "2.0.0",
|
| 1291 |
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
| 1292 |
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
| 1293 |
},
|
| 1294 |
+
"node_modules/multer": {
|
| 1295 |
+
"version": "1.4.5-lts.1",
|
| 1296 |
+
"resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz",
|
| 1297 |
+
"integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==",
|
| 1298 |
+
"dependencies": {
|
| 1299 |
+
"append-field": "^1.0.0",
|
| 1300 |
+
"busboy": "^1.0.0",
|
| 1301 |
+
"concat-stream": "^1.5.2",
|
| 1302 |
+
"mkdirp": "^0.5.4",
|
| 1303 |
+
"object-assign": "^4.1.1",
|
| 1304 |
+
"type-is": "^1.6.4",
|
| 1305 |
+
"xtend": "^4.0.0"
|
| 1306 |
+
},
|
| 1307 |
+
"engines": {
|
| 1308 |
+
"node": ">= 6.0.0"
|
| 1309 |
+
}
|
| 1310 |
+
},
|
| 1311 |
"node_modules/negotiator": {
|
| 1312 |
"version": "0.6.3",
|
| 1313 |
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
|
|
|
| 1324 |
"node": ">= 0.4.0"
|
| 1325 |
}
|
| 1326 |
},
|
| 1327 |
+
"node_modules/object-assign": {
|
| 1328 |
+
"version": "4.1.1",
|
| 1329 |
+
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
| 1330 |
+
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
| 1331 |
+
"engines": {
|
| 1332 |
+
"node": ">=0.10.0"
|
| 1333 |
+
}
|
| 1334 |
+
},
|
| 1335 |
"node_modules/object-inspect": {
|
| 1336 |
"version": "1.13.1",
|
| 1337 |
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
|
|
|
|
| 1461 |
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
| 1462 |
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
|
| 1463 |
},
|
| 1464 |
+
"node_modules/process-nextick-args": {
|
| 1465 |
+
"version": "2.0.1",
|
| 1466 |
+
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
| 1467 |
+
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
|
| 1468 |
+
},
|
| 1469 |
"node_modules/progress": {
|
| 1470 |
"version": "2.0.3",
|
| 1471 |
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
|
|
|
|
| 1634 |
"node": ">= 0.8"
|
| 1635 |
}
|
| 1636 |
},
|
| 1637 |
+
"node_modules/readable-stream": {
|
| 1638 |
+
"version": "2.3.8",
|
| 1639 |
+
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
| 1640 |
+
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
| 1641 |
+
"dependencies": {
|
| 1642 |
+
"core-util-is": "~1.0.0",
|
| 1643 |
+
"inherits": "~2.0.3",
|
| 1644 |
+
"isarray": "~1.0.0",
|
| 1645 |
+
"process-nextick-args": "~2.0.0",
|
| 1646 |
+
"safe-buffer": "~5.1.1",
|
| 1647 |
+
"string_decoder": "~1.1.1",
|
| 1648 |
+
"util-deprecate": "~1.0.1"
|
| 1649 |
+
}
|
| 1650 |
+
},
|
| 1651 |
+
"node_modules/readable-stream/node_modules/safe-buffer": {
|
| 1652 |
+
"version": "5.1.2",
|
| 1653 |
+
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
| 1654 |
+
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
| 1655 |
+
},
|
| 1656 |
"node_modules/require-directory": {
|
| 1657 |
"version": "2.1.1",
|
| 1658 |
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
|
|
|
| 1876 |
"node": ">= 0.8"
|
| 1877 |
}
|
| 1878 |
},
|
| 1879 |
+
"node_modules/streamsearch": {
|
| 1880 |
+
"version": "1.1.0",
|
| 1881 |
+
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
|
| 1882 |
+
"integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
|
| 1883 |
+
"engines": {
|
| 1884 |
+
"node": ">=10.0.0"
|
| 1885 |
+
}
|
| 1886 |
+
},
|
| 1887 |
"node_modules/streamx": {
|
| 1888 |
"version": "2.16.1",
|
| 1889 |
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz",
|
|
|
|
| 1896 |
"bare-events": "^2.2.0"
|
| 1897 |
}
|
| 1898 |
},
|
| 1899 |
+
"node_modules/string_decoder": {
|
| 1900 |
+
"version": "1.1.1",
|
| 1901 |
+
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
| 1902 |
+
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
| 1903 |
+
"dependencies": {
|
| 1904 |
+
"safe-buffer": "~5.1.0"
|
| 1905 |
+
}
|
| 1906 |
+
},
|
| 1907 |
+
"node_modules/string_decoder/node_modules/safe-buffer": {
|
| 1908 |
+
"version": "5.1.2",
|
| 1909 |
+
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
| 1910 |
+
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
| 1911 |
+
},
|
| 1912 |
"node_modules/string-width": {
|
| 1913 |
"version": "4.2.3",
|
| 1914 |
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
|
|
|
| 1997 |
"node": ">= 0.6"
|
| 1998 |
}
|
| 1999 |
},
|
| 2000 |
+
"node_modules/typedarray": {
|
| 2001 |
+
"version": "0.0.6",
|
| 2002 |
+
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
|
| 2003 |
+
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
|
| 2004 |
+
},
|
| 2005 |
"node_modules/unbzip2-stream": {
|
| 2006 |
"version": "1.4.3",
|
| 2007 |
"resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
|
|
|
|
| 2038 |
"resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz",
|
| 2039 |
"integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg=="
|
| 2040 |
},
|
| 2041 |
+
"node_modules/util-deprecate": {
|
| 2042 |
+
"version": "1.0.2",
|
| 2043 |
+
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
| 2044 |
+
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
| 2045 |
+
},
|
| 2046 |
"node_modules/utils-merge": {
|
| 2047 |
"version": "1.0.1",
|
| 2048 |
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
|
|
|
| 2130 |
}
|
| 2131 |
}
|
| 2132 |
},
|
| 2133 |
+
"node_modules/xtend": {
|
| 2134 |
+
"version": "4.0.2",
|
| 2135 |
+
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
| 2136 |
+
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
|
| 2137 |
+
"engines": {
|
| 2138 |
+
"node": ">=0.4"
|
| 2139 |
+
}
|
| 2140 |
+
},
|
| 2141 |
"node_modules/y18n": {
|
| 2142 |
"version": "5.0.8",
|
| 2143 |
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
package.json
CHANGED
|
@@ -4,7 +4,9 @@
|
|
| 4 |
"dev": "nodemon index.js"
|
| 5 |
},
|
| 6 |
"dependencies": {
|
|
|
|
| 7 |
"express": "^4.19.1",
|
|
|
|
| 8 |
"puppeteer": "^22.6.0"
|
| 9 |
}
|
| 10 |
-
}
|
|
|
|
| 4 |
"dev": "nodemon index.js"
|
| 5 |
},
|
| 6 |
"dependencies": {
|
| 7 |
+
"body-parser": "^1.20.2",
|
| 8 |
"express": "^4.19.1",
|
| 9 |
+
"multer": "^1.4.5-lts.1",
|
| 10 |
"puppeteer": "^22.6.0"
|
| 11 |
}
|
| 12 |
+
}
|