Vo Hoang Minh commited on
Commit ·
2f6eb56
1
Parent(s): 4ee0878
up
Browse files- .gitignore +39 -42
- .vscode/settings.json +3 -0
- Dockerfile +52 -12
- README.md +1 -1
- app.mjs +109 -22
- bun.lockb +0 -0
- entrypoint.sh +16 -0
- index.js +29 -0
- logging.mjs +9 -0
- main.py +2 -0
- orbita.conf +23 -0
- package.json +17 -12
- pnpm-lock.yaml +642 -0
- screenshot.png +0 -0
- screenshots/facf039b-8c09-4990-bae8-04194d222f10.png +0 -0
- src/index.ts +87 -0
- start.sh +5 -0
- tsconfig.json +103 -0
.gitignore
CHANGED
|
@@ -1,45 +1,42 @@
|
|
| 1 |
-
#
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
#
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
# Distribution / packaging
|
| 12 |
-
dist/
|
| 13 |
-
build/
|
| 14 |
-
*.egg-info/
|
| 15 |
-
|
| 16 |
-
# Virtual environments
|
| 17 |
-
venv/
|
| 18 |
-
env/
|
| 19 |
-
.env/
|
| 20 |
-
.venv/
|
| 21 |
-
ENV/
|
| 22 |
-
|
| 23 |
-
# IDE specific files
|
| 24 |
-
.idea/
|
| 25 |
-
.vscode/
|
| 26 |
-
*.swp
|
| 27 |
-
*.swo
|
| 28 |
-
|
| 29 |
-
# Jupyter Notebook
|
| 30 |
-
.ipynb_checkpoints
|
| 31 |
-
|
| 32 |
-
# Local development settings
|
| 33 |
-
.env
|
| 34 |
-
.env.local
|
| 35 |
|
| 36 |
-
#
|
| 37 |
-
.
|
| 38 |
-
|
| 39 |
-
htmlcov/
|
| 40 |
|
| 41 |
-
#
|
| 42 |
-
|
| 43 |
|
| 44 |
-
#
|
| 45 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
| 2 |
+
|
| 3 |
+
# dependencies
|
| 4 |
+
/node_modules
|
| 5 |
+
/.pnp
|
| 6 |
+
.pnp.js
|
| 7 |
+
|
| 8 |
+
# testing
|
| 9 |
+
/coverage
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
|
| 11 |
+
# next.js
|
| 12 |
+
/.next/
|
| 13 |
+
/out/
|
|
|
|
| 14 |
|
| 15 |
+
# production
|
| 16 |
+
/build
|
| 17 |
|
| 18 |
+
# misc
|
| 19 |
+
.DS_Store
|
| 20 |
+
*.pem
|
| 21 |
+
|
| 22 |
+
# debug
|
| 23 |
+
npm-debug.log*
|
| 24 |
+
yarn-debug.log*
|
| 25 |
+
yarn-error.log*
|
| 26 |
+
|
| 27 |
+
# local env files
|
| 28 |
+
.env.local
|
| 29 |
+
.env.development.local
|
| 30 |
+
.env.test.local
|
| 31 |
+
.env.production.local
|
| 32 |
+
|
| 33 |
+
# vercel
|
| 34 |
+
.vercel
|
| 35 |
+
|
| 36 |
+
**/*.trace
|
| 37 |
+
**/*.zip
|
| 38 |
+
**/*.tar.gz
|
| 39 |
+
**/*.tgz
|
| 40 |
+
**/*.log
|
| 41 |
+
package-lock.json
|
| 42 |
+
**/*.bun
|
.vscode/settings.json
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"python.analysis.autoImportCompletions": true
|
| 3 |
+
}
|
Dockerfile
CHANGED
|
@@ -1,23 +1,63 @@
|
|
| 1 |
-
FROM
|
| 2 |
|
|
|
|
|
|
|
|
|
|
| 3 |
|
| 4 |
-
|
| 5 |
-
ENV DISPLAY=:99
|
| 6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
-
|
| 10 |
-
COPY . /app
|
| 11 |
|
| 12 |
-
|
|
|
|
|
|
|
|
|
|
| 13 |
|
| 14 |
-
RUN
|
| 15 |
|
| 16 |
-
|
| 17 |
-
RUN python -m playwright install --with-deps --only-shell chromium
|
| 18 |
|
| 19 |
-
|
|
|
|
|
|
|
| 20 |
|
| 21 |
-
# CMD ["uvicorn", "main:app", "--port", "8000", "--reload"]
|
| 22 |
-
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
| 23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM ubuntu:20.04
|
| 2 |
|
| 3 |
+
# Install vnc, xvfb in order to create a 'fake' display and chrome
|
| 4 |
+
RUN export DEBIAN_FRONTEND=noninteractive
|
| 5 |
+
RUN export DISPLAY=0
|
| 6 |
|
| 7 |
+
RUN ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime
|
|
|
|
| 8 |
|
| 9 |
+
RUN apt-get update &&\
|
| 10 |
+
apt-get install -y tzdata &&\
|
| 11 |
+
dpkg-reconfigure --frontend noninteractive tzdata &&\
|
| 12 |
+
apt-get install -y x11vnc xvfb zip wget curl psmisc supervisor gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-bin libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils libgbm-dev nginx libcurl3-gnutls
|
| 13 |
|
| 14 |
+
RUN curl --silent --location https://deb.nodesource.com/setup_18.x | bash - &&\
|
| 15 |
+
apt-get -y -qq install nodejs &&\
|
| 16 |
+
apt-get -y -qq install build-essential &&\
|
| 17 |
+
fc-cache -f -v
|
| 18 |
|
| 19 |
+
RUN wget https://orbita-browser-linux.gologin.com/orbita-browser-latest.tar.gz -O /tmp/orbita-browser.tar.gz
|
|
|
|
| 20 |
|
| 21 |
+
# GOLOGIN INSTALL
|
| 22 |
+
RUN cd /tmp &&\
|
| 23 |
+
tar -xzf /tmp/orbita-browser.tar.gz -C /usr/bin &&\
|
| 24 |
+
rm -f /tmp/orbita-browser.tar.gz
|
| 25 |
|
| 26 |
+
RUN apt-get -qq clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
| 27 |
|
| 28 |
+
# WORKER INSTALL
|
|
|
|
| 29 |
|
| 30 |
+
COPY package.json /opt/orbita/package.json
|
| 31 |
+
RUN cd /opt/orbita &&\
|
| 32 |
+
npm install
|
| 33 |
|
|
|
|
|
|
|
| 34 |
|
| 35 |
+
# Add the browser user (orbita)
|
| 36 |
+
RUN groupadd -r orbita && useradd -r -g orbita -s/bin/bash -G audio,video,sudo -p $(echo 1 | openssl passwd -1 -stdin) orbita \
|
| 37 |
+
&& mkdir -p /home/orbita/Downloads \
|
| 38 |
+
&& chown -R orbita:orbita /home/orbita
|
| 39 |
+
|
| 40 |
+
RUN echo 'orbita ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
|
| 41 |
+
|
| 42 |
+
RUN mkdir -p /home/orbita/.gologin/browser
|
| 43 |
+
COPY fonts /home/orbita/.gologin/browser/fonts
|
| 44 |
+
|
| 45 |
+
RUN rm /etc/nginx/sites-enabled/default
|
| 46 |
+
COPY orbita.conf /etc/nginx/conf.d/orbita.conf
|
| 47 |
+
RUN chmod 777 /var/lib/nginx -R
|
| 48 |
+
RUN chmod 777 /var/log -R
|
| 49 |
+
RUN chmod 777 /run -R
|
| 50 |
+
#sudo orbita
|
| 51 |
+
RUN usermod -a -G sudo orbita
|
| 52 |
+
|
| 53 |
+
EXPOSE 3000
|
| 54 |
+
|
| 55 |
+
COPY index.js /opt/orbita/index.js
|
| 56 |
+
COPY entrypoint.sh /entrypoint.sh
|
| 57 |
+
|
| 58 |
+
RUN chmod 777 /entrypoint.sh \
|
| 59 |
+
&& mkdir /tmp/.X11-unix \
|
| 60 |
+
&& chmod 1777 /tmp/.X11-unix
|
| 61 |
+
|
| 62 |
+
USER orbita
|
| 63 |
+
ENTRYPOINT ["/entrypoint.sh"]
|
README.md
CHANGED
|
@@ -5,7 +5,7 @@ colorFrom: red
|
|
| 5 |
colorTo: purple
|
| 6 |
sdk: docker
|
| 7 |
pinned: false
|
| 8 |
-
app_port:
|
| 9 |
---
|
| 10 |
|
| 11 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 5 |
colorTo: purple
|
| 6 |
sdk: docker
|
| 7 |
pinned: false
|
| 8 |
+
app_port: 3000
|
| 9 |
---
|
| 10 |
|
| 11 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
app.mjs
CHANGED
|
@@ -1,31 +1,118 @@
|
|
| 1 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
-
|
|
|
|
|
|
|
| 4 |
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
|
|
|
|
|
|
| 18 |
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
});
|
| 23 |
|
| 24 |
-
|
| 25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
|
| 27 |
-
|
|
|
|
| 28 |
|
| 29 |
-
|
| 30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
})();
|
|
|
|
| 1 |
+
/**
|
| 2 |
+
* @typedef {import('playwright').Page} Page
|
| 3 |
+
* @typedef {import('playwright').Browser} Browser
|
| 4 |
+
*/
|
| 5 |
+
import { chromium } from "playwright-extra";
|
| 6 |
+
import stealth from "puppeteer-extra-plugin-stealth";
|
| 7 |
|
| 8 |
+
import { log } from "./logging.mjs";
|
| 9 |
+
import fs from "fs";
|
| 10 |
+
chromium.use(stealth())
|
| 11 |
|
| 12 |
+
const STORAGE_PATH = "./auth.json";
|
| 13 |
+
|
| 14 |
+
const sleep = (s) => new Promise((resolve) => setTimeout(resolve, s * 1000));
|
| 15 |
+
|
| 16 |
+
class ZaloBot {
|
| 17 |
+
/** @type {Browser | null} */
|
| 18 |
+
browser = null;
|
| 19 |
+
/** @type {Page | null} */
|
| 20 |
+
page = null;
|
| 21 |
+
|
| 22 |
+
async init() {
|
| 23 |
+
log.info("🚀 Launching browser...");
|
| 24 |
+
this.browser = await chromium.launch({
|
| 25 |
+
executablePath:
|
| 26 |
+
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
|
| 27 |
+
headless: false,
|
| 28 |
+
});
|
| 29 |
+
|
| 30 |
+
const context = await this.browser.newContext({
|
| 31 |
+
storageState: fs.existsSync(STORAGE_PATH) ? STORAGE_PATH : undefined,
|
| 32 |
+
});
|
| 33 |
+
|
| 34 |
+
this.page = await context.newPage(); // Trả về page thay vì lưu toàn cục
|
| 35 |
+
return this.page;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* Kiểm tra và chờ đăng nhập Zalo
|
| 40 |
+
* @param {Page} page - Trang web cần kiểm tra đăng nhập
|
| 41 |
+
*/
|
| 42 |
+
async ensureLogin(page = this.page) {
|
| 43 |
+
log.info("🔄 Checking login...");
|
| 44 |
+
await page.goto("https://chat.zalo.me/", { waitUntil: "domcontentloaded" });
|
| 45 |
|
| 46 |
+
await sleep(8);
|
| 47 |
+
if (page.url().startsWith("https://chat.zalo.me")) {
|
| 48 |
+
log.info(`page url: ${page.url()}`);
|
| 49 |
+
log.info("✅ Already logged in!");
|
| 50 |
+
return true;
|
| 51 |
+
}
|
| 52 |
|
| 53 |
+
log.info("📷 QR Code detected, waiting...");
|
| 54 |
+
await page.waitForURL("https://chat.zalo.me/", {
|
| 55 |
+
waitUntil: "domcontentloaded",
|
| 56 |
+
timeout: 30000,
|
| 57 |
+
});
|
| 58 |
|
| 59 |
+
log.info("✅ Login successful!");
|
| 60 |
+
await this.saveSession(page);
|
| 61 |
+
}
|
|
|
|
| 62 |
|
| 63 |
+
async testDetect() {
|
| 64 |
+
const testSites = [
|
| 65 |
+
"https://bot.sannysoft.com/", // Kiểm tra bot detection
|
| 66 |
+
"https://abrahamjuliot.github.io/creepjs/", // Xem fingerprint
|
| 67 |
+
"https://browserleaks.com/webgl", // Test WebGL detection
|
| 68 |
+
"https://pixelscan.net/", // Kiểm tra fingerprint toàn diện
|
| 69 |
+
"https://www.whatismybrowser.com/detect/are-you-bot", // Kiểm tra bot đơn giản
|
| 70 |
+
];
|
| 71 |
|
| 72 |
+
let ctx = await this.browser.newContext();
|
| 73 |
+
const pages = await Promise.all(testSites.map(() => ctx.newPage()));
|
| 74 |
|
| 75 |
+
testSites.forEach(async (url, i) => {
|
| 76 |
+
console.log(`🕵️ Testing: ${url}`);
|
| 77 |
+
await pages[i].goto(url);
|
| 78 |
+
});
|
| 79 |
+
|
| 80 |
+
await sleep(100);
|
| 81 |
+
console.log("✅ Opened all test sites!");
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
/** Chạy toàn bộ bot */
|
| 85 |
+
async run() {
|
| 86 |
+
const page = await this.init();
|
| 87 |
+
await this.ensureLogin(page);
|
| 88 |
+
await page.screenshot({ path: "screenshot.png" });
|
| 89 |
+
|
| 90 |
+
await this.saveSession(page);
|
| 91 |
+
await sleep(60);
|
| 92 |
+
}
|
| 93 |
+
async saveSession(page) {
|
| 94 |
+
log.info("💾 Saving session...");
|
| 95 |
+
await page.context().storageState({ path: STORAGE_PATH });
|
| 96 |
+
log.info("✅ Session saved!");
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
async close() {
|
| 100 |
+
if (this.browser) {
|
| 101 |
+
await this.browser.close();
|
| 102 |
+
log.info("🛑 Browser closed!");
|
| 103 |
+
}
|
| 104 |
+
}
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
// Main function to handle errors
|
| 108 |
+
(async () => {
|
| 109 |
+
let bot = new ZaloBot();
|
| 110 |
+
try {
|
| 111 |
+
await bot.init();
|
| 112 |
+
await bot.testDetect();
|
| 113 |
+
} catch (err) {
|
| 114 |
+
log.error(err);
|
| 115 |
+
} finally {
|
| 116 |
+
await bot.close();
|
| 117 |
+
}
|
| 118 |
})();
|
bun.lockb
ADDED
|
Binary file (4.15 kB). View file
|
|
|
entrypoint.sh
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
mkdir ~/.vnc
|
| 4 |
+
DISPLAY=:0
|
| 5 |
+
export DISPLAY=:0
|
| 6 |
+
echo $SCREEN_WIDTH
|
| 7 |
+
echo $SCREEN_HEIGHT
|
| 8 |
+
echo `echo $SCREEN_WIDTH`x`echo $SCREEN_HEIGHT`x16
|
| 9 |
+
|
| 10 |
+
cd /opt/orbita
|
| 11 |
+
Xvfb $DISPLAY -screen 0 `echo $SCREEN_WIDTH`x`echo $SCREEN_HEIGHT`x16 &
|
| 12 |
+
sleep 3
|
| 13 |
+
x11vnc -storepasswd 12345678 ~/.vnc/passwd
|
| 14 |
+
x11vnc -display $DISPLAY -bg -forever -usepw -quiet -rfbport 5901 -xkb
|
| 15 |
+
/usr/sbin/nginx -c /etc/nginx/nginx.conf
|
| 16 |
+
node index.js
|
index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
const GoLogin = require('gologin')
|
| 2 |
+
|
| 3 |
+
const SCREEN_WIDTH = process.env.SCREEN_WIDTH;
|
| 4 |
+
const SCREEN_HEIGHT = process.env.SCREEN_HEIGHT;
|
| 5 |
+
|
| 6 |
+
const gologinParams = {
|
| 7 |
+
token: process.env.TOKEN,
|
| 8 |
+
profile_id: process.env.PROFILE_ID,
|
| 9 |
+
remote_debugging_port: 3500,
|
| 10 |
+
executablePath: '/usr/bin/orbita-browser/chrome',
|
| 11 |
+
extra_params: ['--start-maximized', '--disable-dev-shm-usage', '--no-sandbox', '--no-zygote', '--window-position=0,0', `--window-size=${SCREEN_WIDTH},${SCREEN_HEIGHT}`],
|
| 12 |
+
};
|
| 13 |
+
|
| 14 |
+
const GL = new GoLogin(gologinParams);
|
| 15 |
+
console.log(gologinParams)
|
| 16 |
+
|
| 17 |
+
function checkBrowser(){
|
| 18 |
+
console.log('working port', 3000, 'profile', process.env.PROFILE_ID)
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
async function startBrowser(){
|
| 22 |
+
const wsUrl = await GL.start({
|
| 23 |
+
uploadCookiesToServer: true,
|
| 24 |
+
autoUpdateBrowser: false,
|
| 25 |
+
});
|
| 26 |
+
setInterval(checkBrowser, 1000);
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
startBrowser();
|
logging.mjs
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import pino from "pino";
|
| 2 |
+
|
| 3 |
+
export const log = pino({
|
| 4 |
+
level: "info",
|
| 5 |
+
transport: {
|
| 6 |
+
target: "pino-pretty",
|
| 7 |
+
options: { colorize: true },
|
| 8 |
+
},
|
| 9 |
+
});
|
main.py
CHANGED
|
@@ -103,6 +103,8 @@ async def browse(
|
|
| 103 |
|
| 104 |
await page.wait_for_selector(".qrcode", timeout=10000)
|
| 105 |
|
|
|
|
|
|
|
| 106 |
path = SS_DIR / f"{uuid.uuid4()}.png"
|
| 107 |
await page.screenshot(path=str(path))
|
| 108 |
return FileResponse(str(path), media_type="image/png")
|
|
|
|
| 103 |
|
| 104 |
await page.wait_for_selector(".qrcode", timeout=10000)
|
| 105 |
|
| 106 |
+
await asyncio.sleep(2)
|
| 107 |
+
|
| 108 |
path = SS_DIR / f"{uuid.uuid4()}.png"
|
| 109 |
await page.screenshot(path=str(path))
|
| 110 |
return FileResponse(str(path), media_type="image/png")
|
orbita.conf
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
server {
|
| 2 |
+
listen 3000 default_server;
|
| 3 |
+
|
| 4 |
+
server_name _;
|
| 5 |
+
|
| 6 |
+
location /json {
|
| 7 |
+
proxy_pass http://127.0.0.1:3500;
|
| 8 |
+
proxy_http_version 1.1;
|
| 9 |
+
proxy_set_header X-Real-IP $server_addr;
|
| 10 |
+
proxy_set_header X-Forwarded-for $server_addr;
|
| 11 |
+
proxy_set_header Host '127.0.0.1';
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
location /devtools {
|
| 15 |
+
proxy_pass http://127.0.0.1:3500;
|
| 16 |
+
proxy_http_version 1.1;
|
| 17 |
+
proxy_set_header Upgrade $http_upgrade;
|
| 18 |
+
proxy_set_header Connection "upgrade";
|
| 19 |
+
proxy_set_header X-Real-IP $server_addr;
|
| 20 |
+
proxy_set_header X-Forwarded-for $server_addr;
|
| 21 |
+
proxy_set_header Host '127.0.0.1';
|
| 22 |
+
}
|
| 23 |
+
}
|
package.json
CHANGED
|
@@ -1,16 +1,21 @@
|
|
| 1 |
{
|
| 2 |
-
"name": "
|
| 3 |
-
"version": "1.0.
|
| 4 |
-
"description": "",
|
| 5 |
-
"main": "index.js",
|
| 6 |
"scripts": {
|
| 7 |
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
|
|
| 8 |
},
|
| 9 |
-
"keywords": [],
|
| 10 |
-
"author": "",
|
| 11 |
-
"license": "ISC",
|
| 12 |
-
"packageManager": "pnpm@10.6.1",
|
| 13 |
"dependencies": {
|
| 14 |
-
"
|
| 15 |
-
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
{
|
| 2 |
+
"name": "app",
|
| 3 |
+
"version": "1.0.50",
|
|
|
|
|
|
|
| 4 |
"scripts": {
|
| 5 |
+
"test": "echo \"Error: no test specified\" && exit 1",
|
| 6 |
+
"dev": "bun run --watch src/index.ts"
|
| 7 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
"dependencies": {
|
| 9 |
+
"elysia": "latest",
|
| 10 |
+
"pino": "^9.6.0",
|
| 11 |
+
"pino-pretty": "^13.0.0",
|
| 12 |
+
"playwright": "^1.51.1",
|
| 13 |
+
"playwright-extra": "^4.3.6",
|
| 14 |
+
"playwright-extra-plugin-stealth": "^0.0.1",
|
| 15 |
+
"puppeteer-extra-plugin-stealth": "^2.11.2"
|
| 16 |
+
},
|
| 17 |
+
"devDependencies": {
|
| 18 |
+
"bun-types": "latest"
|
| 19 |
+
},
|
| 20 |
+
"module": "src/index.js"
|
| 21 |
+
}
|
pnpm-lock.yaml
CHANGED
|
@@ -8,36 +8,678 @@ importers:
|
|
| 8 |
|
| 9 |
.:
|
| 10 |
dependencies:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
playwright:
|
| 12 |
specifier: ^1.51.1
|
| 13 |
version: 1.51.1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
packages:
|
| 16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
fsevents@2.3.2:
|
| 18 |
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
| 19 |
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
| 20 |
os: [darwin]
|
| 21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
playwright-core@1.51.1:
|
| 23 |
resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==}
|
| 24 |
engines: {node: '>=18'}
|
| 25 |
hasBin: true
|
| 26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
playwright@1.51.1:
|
| 28 |
resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==}
|
| 29 |
engines: {node: '>=18'}
|
| 30 |
hasBin: true
|
| 31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
snapshots:
|
| 33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
fsevents@2.3.2:
|
| 35 |
optional: true
|
| 36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
playwright-core@1.51.1: {}
|
| 38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
playwright@1.51.1:
|
| 40 |
dependencies:
|
| 41 |
playwright-core: 1.51.1
|
| 42 |
optionalDependencies:
|
| 43 |
fsevents: 2.3.2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
.:
|
| 10 |
dependencies:
|
| 11 |
+
elysia:
|
| 12 |
+
specifier: latest
|
| 13 |
+
version: 1.2.25(@sinclair/typebox@0.34.31)
|
| 14 |
+
pino:
|
| 15 |
+
specifier: ^9.6.0
|
| 16 |
+
version: 9.6.0
|
| 17 |
+
pino-pretty:
|
| 18 |
+
specifier: ^13.0.0
|
| 19 |
+
version: 13.0.0
|
| 20 |
playwright:
|
| 21 |
specifier: ^1.51.1
|
| 22 |
version: 1.51.1
|
| 23 |
+
playwright-extra:
|
| 24 |
+
specifier: ^4.3.6
|
| 25 |
+
version: 4.3.6(playwright-core@1.51.1)(playwright@1.51.1)
|
| 26 |
+
playwright-extra-plugin-stealth:
|
| 27 |
+
specifier: ^0.0.1
|
| 28 |
+
version: 0.0.1
|
| 29 |
+
puppeteer-extra-plugin-stealth:
|
| 30 |
+
specifier: ^2.11.2
|
| 31 |
+
version: 2.11.2(playwright-extra@4.3.6(playwright-core@1.51.1)(playwright@1.51.1))
|
| 32 |
+
devDependencies:
|
| 33 |
+
bun-types:
|
| 34 |
+
specifier: latest
|
| 35 |
+
version: 1.2.7
|
| 36 |
|
| 37 |
packages:
|
| 38 |
|
| 39 |
+
'@sinclair/typebox@0.34.31':
|
| 40 |
+
resolution: {integrity: sha512-qQ71T9DsITbX3dVCrcBERbs11YuSMg3wZPnT472JhqhWGPdiLgyvihJXU8m+ADJtJvRdjATIiACJD22dEknBrQ==}
|
| 41 |
+
|
| 42 |
+
'@types/debug@4.1.12':
|
| 43 |
+
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
|
| 44 |
+
|
| 45 |
+
'@types/ms@2.1.0':
|
| 46 |
+
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
|
| 47 |
+
|
| 48 |
+
'@types/node@22.13.14':
|
| 49 |
+
resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==}
|
| 50 |
+
|
| 51 |
+
'@types/ws@8.18.0':
|
| 52 |
+
resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==}
|
| 53 |
+
|
| 54 |
+
arr-union@3.1.0:
|
| 55 |
+
resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==}
|
| 56 |
+
engines: {node: '>=0.10.0'}
|
| 57 |
+
|
| 58 |
+
atomic-sleep@1.0.0:
|
| 59 |
+
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
|
| 60 |
+
engines: {node: '>=8.0.0'}
|
| 61 |
+
|
| 62 |
+
balanced-match@1.0.2:
|
| 63 |
+
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
| 64 |
+
|
| 65 |
+
brace-expansion@1.1.11:
|
| 66 |
+
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
|
| 67 |
+
|
| 68 |
+
bun-types@1.2.7:
|
| 69 |
+
resolution: {integrity: sha512-P4hHhk7kjF99acXqKvltyuMQ2kf/rzIw3ylEDpCxDS9Xa0X0Yp/gJu/vDCucmWpiur5qJ0lwB2bWzOXa2GlHqA==}
|
| 70 |
+
|
| 71 |
+
clone-deep@0.2.4:
|
| 72 |
+
resolution: {integrity: sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==}
|
| 73 |
+
engines: {node: '>=0.10.0'}
|
| 74 |
+
|
| 75 |
+
colorette@2.0.20:
|
| 76 |
+
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
|
| 77 |
+
|
| 78 |
+
concat-map@0.0.1:
|
| 79 |
+
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
|
| 80 |
+
|
| 81 |
+
cookie@1.0.2:
|
| 82 |
+
resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
|
| 83 |
+
engines: {node: '>=18'}
|
| 84 |
+
|
| 85 |
+
dateformat@4.6.3:
|
| 86 |
+
resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
|
| 87 |
+
|
| 88 |
+
debug@4.4.0:
|
| 89 |
+
resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
|
| 90 |
+
engines: {node: '>=6.0'}
|
| 91 |
+
peerDependencies:
|
| 92 |
+
supports-color: '*'
|
| 93 |
+
peerDependenciesMeta:
|
| 94 |
+
supports-color:
|
| 95 |
+
optional: true
|
| 96 |
+
|
| 97 |
+
deepmerge@4.3.1:
|
| 98 |
+
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
|
| 99 |
+
engines: {node: '>=0.10.0'}
|
| 100 |
+
|
| 101 |
+
elysia@1.2.25:
|
| 102 |
+
resolution: {integrity: sha512-WsdQpORJvb4uszzeqYT0lg97knw1iBW1NTzJ1Jm57tiHg+DfAotlWXYbjmvQ039ssV0fYELDHinLLoUazZkEHg==}
|
| 103 |
+
peerDependencies:
|
| 104 |
+
'@sinclair/typebox': '>= 0.34.0'
|
| 105 |
+
openapi-types: '>= 12.0.0'
|
| 106 |
+
typescript: '>= 5.0.0'
|
| 107 |
+
peerDependenciesMeta:
|
| 108 |
+
openapi-types:
|
| 109 |
+
optional: true
|
| 110 |
+
typescript:
|
| 111 |
+
optional: true
|
| 112 |
+
|
| 113 |
+
end-of-stream@1.4.4:
|
| 114 |
+
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
|
| 115 |
+
|
| 116 |
+
fast-copy@3.0.2:
|
| 117 |
+
resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==}
|
| 118 |
+
|
| 119 |
+
fast-redact@3.5.0:
|
| 120 |
+
resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==}
|
| 121 |
+
engines: {node: '>=6'}
|
| 122 |
+
|
| 123 |
+
fast-safe-stringify@2.1.1:
|
| 124 |
+
resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
|
| 125 |
+
|
| 126 |
+
for-in@0.1.8:
|
| 127 |
+
resolution: {integrity: sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==}
|
| 128 |
+
engines: {node: '>=0.10.0'}
|
| 129 |
+
|
| 130 |
+
for-in@1.0.2:
|
| 131 |
+
resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
|
| 132 |
+
engines: {node: '>=0.10.0'}
|
| 133 |
+
|
| 134 |
+
for-own@0.1.5:
|
| 135 |
+
resolution: {integrity: sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==}
|
| 136 |
+
engines: {node: '>=0.10.0'}
|
| 137 |
+
|
| 138 |
+
fs-extra@10.1.0:
|
| 139 |
+
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
|
| 140 |
+
engines: {node: '>=12'}
|
| 141 |
+
|
| 142 |
+
fs.realpath@1.0.0:
|
| 143 |
+
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
|
| 144 |
+
|
| 145 |
fsevents@2.3.2:
|
| 146 |
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
| 147 |
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
| 148 |
os: [darwin]
|
| 149 |
|
| 150 |
+
glob@7.2.3:
|
| 151 |
+
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
| 152 |
+
deprecated: Glob versions prior to v9 are no longer supported
|
| 153 |
+
|
| 154 |
+
graceful-fs@4.2.11:
|
| 155 |
+
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
|
| 156 |
+
|
| 157 |
+
help-me@5.0.0:
|
| 158 |
+
resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==}
|
| 159 |
+
|
| 160 |
+
inflight@1.0.6:
|
| 161 |
+
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
|
| 162 |
+
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
|
| 163 |
+
|
| 164 |
+
inherits@2.0.4:
|
| 165 |
+
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
|
| 166 |
+
|
| 167 |
+
is-buffer@1.1.6:
|
| 168 |
+
resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
|
| 169 |
+
|
| 170 |
+
is-extendable@0.1.1:
|
| 171 |
+
resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
|
| 172 |
+
engines: {node: '>=0.10.0'}
|
| 173 |
+
|
| 174 |
+
is-plain-object@2.0.4:
|
| 175 |
+
resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
|
| 176 |
+
engines: {node: '>=0.10.0'}
|
| 177 |
+
|
| 178 |
+
isobject@3.0.1:
|
| 179 |
+
resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
|
| 180 |
+
engines: {node: '>=0.10.0'}
|
| 181 |
+
|
| 182 |
+
joycon@3.1.1:
|
| 183 |
+
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
|
| 184 |
+
engines: {node: '>=10'}
|
| 185 |
+
|
| 186 |
+
jsonfile@6.1.0:
|
| 187 |
+
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
|
| 188 |
+
|
| 189 |
+
kind-of@2.0.1:
|
| 190 |
+
resolution: {integrity: sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==}
|
| 191 |
+
engines: {node: '>=0.10.0'}
|
| 192 |
+
|
| 193 |
+
kind-of@3.2.2:
|
| 194 |
+
resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==}
|
| 195 |
+
engines: {node: '>=0.10.0'}
|
| 196 |
+
|
| 197 |
+
lazy-cache@0.2.7:
|
| 198 |
+
resolution: {integrity: sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==}
|
| 199 |
+
engines: {node: '>=0.10.0'}
|
| 200 |
+
|
| 201 |
+
lazy-cache@1.0.4:
|
| 202 |
+
resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==}
|
| 203 |
+
engines: {node: '>=0.10.0'}
|
| 204 |
+
|
| 205 |
+
memoirist@0.3.0:
|
| 206 |
+
resolution: {integrity: sha512-wR+4chMgVPq+T6OOsk40u9Wlpw1Pjx66NMNiYxCQQ4EUJ7jDs3D9kTCeKdBOkvAiqXlHLVJlvYL01PvIJ1MPNg==}
|
| 207 |
+
|
| 208 |
+
merge-deep@3.0.3:
|
| 209 |
+
resolution: {integrity: sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==}
|
| 210 |
+
engines: {node: '>=0.10.0'}
|
| 211 |
+
|
| 212 |
+
minimatch@3.1.2:
|
| 213 |
+
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
|
| 214 |
+
|
| 215 |
+
minimist@1.2.8:
|
| 216 |
+
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
|
| 217 |
+
|
| 218 |
+
mixin-object@2.0.1:
|
| 219 |
+
resolution: {integrity: sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==}
|
| 220 |
+
engines: {node: '>=0.10.0'}
|
| 221 |
+
|
| 222 |
+
ms@2.1.3:
|
| 223 |
+
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
|
| 224 |
+
|
| 225 |
+
on-exit-leak-free@2.1.2:
|
| 226 |
+
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
|
| 227 |
+
engines: {node: '>=14.0.0'}
|
| 228 |
+
|
| 229 |
+
once@1.4.0:
|
| 230 |
+
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
| 231 |
+
|
| 232 |
+
path-is-absolute@1.0.1:
|
| 233 |
+
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
|
| 234 |
+
engines: {node: '>=0.10.0'}
|
| 235 |
+
|
| 236 |
+
pino-abstract-transport@2.0.0:
|
| 237 |
+
resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
|
| 238 |
+
|
| 239 |
+
pino-pretty@13.0.0:
|
| 240 |
+
resolution: {integrity: sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA==}
|
| 241 |
+
hasBin: true
|
| 242 |
+
|
| 243 |
+
pino-std-serializers@7.0.0:
|
| 244 |
+
resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}
|
| 245 |
+
|
| 246 |
+
pino@9.6.0:
|
| 247 |
+
resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==}
|
| 248 |
+
hasBin: true
|
| 249 |
+
|
| 250 |
playwright-core@1.51.1:
|
| 251 |
resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==}
|
| 252 |
engines: {node: '>=18'}
|
| 253 |
hasBin: true
|
| 254 |
|
| 255 |
+
playwright-extra-plugin-stealth@0.0.1:
|
| 256 |
+
resolution: {integrity: sha512-eI0Ujf4MXbcupzlVEXaaOnb+Exjt1sFi7t/3KxIA5pVww+WRAXRWdhqTz0glX62jJq2YM8fLu+GyvULpjTpZrw==}
|
| 257 |
+
|
| 258 |
+
playwright-extra@4.3.6:
|
| 259 |
+
resolution: {integrity: sha512-q2rVtcE8V8K3vPVF1zny4pvwZveHLH8KBuVU2MoE3Jw4OKVoBWsHI9CH9zPydovHHOCDxjGN2Vg+2m644q3ijA==}
|
| 260 |
+
engines: {node: '>=12'}
|
| 261 |
+
peerDependencies:
|
| 262 |
+
playwright: '*'
|
| 263 |
+
playwright-core: '*'
|
| 264 |
+
peerDependenciesMeta:
|
| 265 |
+
playwright:
|
| 266 |
+
optional: true
|
| 267 |
+
playwright-core:
|
| 268 |
+
optional: true
|
| 269 |
+
|
| 270 |
playwright@1.51.1:
|
| 271 |
resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==}
|
| 272 |
engines: {node: '>=18'}
|
| 273 |
hasBin: true
|
| 274 |
|
| 275 |
+
process-warning@4.0.1:
|
| 276 |
+
resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}
|
| 277 |
+
|
| 278 |
+
pump@3.0.2:
|
| 279 |
+
resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
|
| 280 |
+
|
| 281 |
+
puppeteer-extra-plugin-stealth@2.11.2:
|
| 282 |
+
resolution: {integrity: sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==}
|
| 283 |
+
engines: {node: '>=8'}
|
| 284 |
+
peerDependencies:
|
| 285 |
+
playwright-extra: '*'
|
| 286 |
+
puppeteer-extra: '*'
|
| 287 |
+
peerDependenciesMeta:
|
| 288 |
+
playwright-extra:
|
| 289 |
+
optional: true
|
| 290 |
+
puppeteer-extra:
|
| 291 |
+
optional: true
|
| 292 |
+
|
| 293 |
+
puppeteer-extra-plugin-user-data-dir@2.4.1:
|
| 294 |
+
resolution: {integrity: sha512-kH1GnCcqEDoBXO7epAse4TBPJh9tEpVEK/vkedKfjOVOhZAvLkHGc9swMs5ChrJbRnf8Hdpug6TJlEuimXNQ+g==}
|
| 295 |
+
engines: {node: '>=8'}
|
| 296 |
+
peerDependencies:
|
| 297 |
+
playwright-extra: '*'
|
| 298 |
+
puppeteer-extra: '*'
|
| 299 |
+
peerDependenciesMeta:
|
| 300 |
+
playwright-extra:
|
| 301 |
+
optional: true
|
| 302 |
+
puppeteer-extra:
|
| 303 |
+
optional: true
|
| 304 |
+
|
| 305 |
+
puppeteer-extra-plugin-user-preferences@2.4.1:
|
| 306 |
+
resolution: {integrity: sha512-i1oAZxRbc1bk8MZufKCruCEC3CCafO9RKMkkodZltI4OqibLFXF3tj6HZ4LZ9C5vCXZjYcDWazgtY69mnmrQ9A==}
|
| 307 |
+
engines: {node: '>=8'}
|
| 308 |
+
peerDependencies:
|
| 309 |
+
playwright-extra: '*'
|
| 310 |
+
puppeteer-extra: '*'
|
| 311 |
+
peerDependenciesMeta:
|
| 312 |
+
playwright-extra:
|
| 313 |
+
optional: true
|
| 314 |
+
puppeteer-extra:
|
| 315 |
+
optional: true
|
| 316 |
+
|
| 317 |
+
puppeteer-extra-plugin@3.2.3:
|
| 318 |
+
resolution: {integrity: sha512-6RNy0e6pH8vaS3akPIKGg28xcryKscczt4wIl0ePciZENGE2yoaQJNd17UiEbdmh5/6WW6dPcfRWT9lxBwCi2Q==}
|
| 319 |
+
engines: {node: '>=9.11.2'}
|
| 320 |
+
peerDependencies:
|
| 321 |
+
playwright-extra: '*'
|
| 322 |
+
puppeteer-extra: '*'
|
| 323 |
+
peerDependenciesMeta:
|
| 324 |
+
playwright-extra:
|
| 325 |
+
optional: true
|
| 326 |
+
puppeteer-extra:
|
| 327 |
+
optional: true
|
| 328 |
+
|
| 329 |
+
quick-format-unescaped@4.0.4:
|
| 330 |
+
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
|
| 331 |
+
|
| 332 |
+
real-require@0.2.0:
|
| 333 |
+
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
|
| 334 |
+
engines: {node: '>= 12.13.0'}
|
| 335 |
+
|
| 336 |
+
rimraf@3.0.2:
|
| 337 |
+
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
|
| 338 |
+
deprecated: Rimraf versions prior to v4 are no longer supported
|
| 339 |
+
hasBin: true
|
| 340 |
+
|
| 341 |
+
safe-stable-stringify@2.5.0:
|
| 342 |
+
resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
|
| 343 |
+
engines: {node: '>=10'}
|
| 344 |
+
|
| 345 |
+
secure-json-parse@2.7.0:
|
| 346 |
+
resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
|
| 347 |
+
|
| 348 |
+
shallow-clone@0.1.2:
|
| 349 |
+
resolution: {integrity: sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==}
|
| 350 |
+
engines: {node: '>=0.10.0'}
|
| 351 |
+
|
| 352 |
+
sonic-boom@4.2.0:
|
| 353 |
+
resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==}
|
| 354 |
+
|
| 355 |
+
split2@4.2.0:
|
| 356 |
+
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
|
| 357 |
+
engines: {node: '>= 10.x'}
|
| 358 |
+
|
| 359 |
+
strip-json-comments@3.1.1:
|
| 360 |
+
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
| 361 |
+
engines: {node: '>=8'}
|
| 362 |
+
|
| 363 |
+
thread-stream@3.1.0:
|
| 364 |
+
resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
|
| 365 |
+
|
| 366 |
+
undici-types@6.20.0:
|
| 367 |
+
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
|
| 368 |
+
|
| 369 |
+
universalify@2.0.1:
|
| 370 |
+
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
|
| 371 |
+
engines: {node: '>= 10.0.0'}
|
| 372 |
+
|
| 373 |
+
wrappy@1.0.2:
|
| 374 |
+
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
| 375 |
+
|
| 376 |
snapshots:
|
| 377 |
|
| 378 |
+
'@sinclair/typebox@0.34.31': {}
|
| 379 |
+
|
| 380 |
+
'@types/debug@4.1.12':
|
| 381 |
+
dependencies:
|
| 382 |
+
'@types/ms': 2.1.0
|
| 383 |
+
|
| 384 |
+
'@types/ms@2.1.0': {}
|
| 385 |
+
|
| 386 |
+
'@types/node@22.13.14':
|
| 387 |
+
dependencies:
|
| 388 |
+
undici-types: 6.20.0
|
| 389 |
+
|
| 390 |
+
'@types/ws@8.18.0':
|
| 391 |
+
dependencies:
|
| 392 |
+
'@types/node': 22.13.14
|
| 393 |
+
|
| 394 |
+
arr-union@3.1.0: {}
|
| 395 |
+
|
| 396 |
+
atomic-sleep@1.0.0: {}
|
| 397 |
+
|
| 398 |
+
balanced-match@1.0.2: {}
|
| 399 |
+
|
| 400 |
+
brace-expansion@1.1.11:
|
| 401 |
+
dependencies:
|
| 402 |
+
balanced-match: 1.0.2
|
| 403 |
+
concat-map: 0.0.1
|
| 404 |
+
|
| 405 |
+
bun-types@1.2.7:
|
| 406 |
+
dependencies:
|
| 407 |
+
'@types/node': 22.13.14
|
| 408 |
+
'@types/ws': 8.18.0
|
| 409 |
+
|
| 410 |
+
clone-deep@0.2.4:
|
| 411 |
+
dependencies:
|
| 412 |
+
for-own: 0.1.5
|
| 413 |
+
is-plain-object: 2.0.4
|
| 414 |
+
kind-of: 3.2.2
|
| 415 |
+
lazy-cache: 1.0.4
|
| 416 |
+
shallow-clone: 0.1.2
|
| 417 |
+
|
| 418 |
+
colorette@2.0.20: {}
|
| 419 |
+
|
| 420 |
+
concat-map@0.0.1: {}
|
| 421 |
+
|
| 422 |
+
cookie@1.0.2: {}
|
| 423 |
+
|
| 424 |
+
dateformat@4.6.3: {}
|
| 425 |
+
|
| 426 |
+
debug@4.4.0:
|
| 427 |
+
dependencies:
|
| 428 |
+
ms: 2.1.3
|
| 429 |
+
|
| 430 |
+
deepmerge@4.3.1: {}
|
| 431 |
+
|
| 432 |
+
elysia@1.2.25(@sinclair/typebox@0.34.31):
|
| 433 |
+
dependencies:
|
| 434 |
+
'@sinclair/typebox': 0.34.31
|
| 435 |
+
cookie: 1.0.2
|
| 436 |
+
memoirist: 0.3.0
|
| 437 |
+
|
| 438 |
+
end-of-stream@1.4.4:
|
| 439 |
+
dependencies:
|
| 440 |
+
once: 1.4.0
|
| 441 |
+
|
| 442 |
+
fast-copy@3.0.2: {}
|
| 443 |
+
|
| 444 |
+
fast-redact@3.5.0: {}
|
| 445 |
+
|
| 446 |
+
fast-safe-stringify@2.1.1: {}
|
| 447 |
+
|
| 448 |
+
for-in@0.1.8: {}
|
| 449 |
+
|
| 450 |
+
for-in@1.0.2: {}
|
| 451 |
+
|
| 452 |
+
for-own@0.1.5:
|
| 453 |
+
dependencies:
|
| 454 |
+
for-in: 1.0.2
|
| 455 |
+
|
| 456 |
+
fs-extra@10.1.0:
|
| 457 |
+
dependencies:
|
| 458 |
+
graceful-fs: 4.2.11
|
| 459 |
+
jsonfile: 6.1.0
|
| 460 |
+
universalify: 2.0.1
|
| 461 |
+
|
| 462 |
+
fs.realpath@1.0.0: {}
|
| 463 |
+
|
| 464 |
fsevents@2.3.2:
|
| 465 |
optional: true
|
| 466 |
|
| 467 |
+
glob@7.2.3:
|
| 468 |
+
dependencies:
|
| 469 |
+
fs.realpath: 1.0.0
|
| 470 |
+
inflight: 1.0.6
|
| 471 |
+
inherits: 2.0.4
|
| 472 |
+
minimatch: 3.1.2
|
| 473 |
+
once: 1.4.0
|
| 474 |
+
path-is-absolute: 1.0.1
|
| 475 |
+
|
| 476 |
+
graceful-fs@4.2.11: {}
|
| 477 |
+
|
| 478 |
+
help-me@5.0.0: {}
|
| 479 |
+
|
| 480 |
+
inflight@1.0.6:
|
| 481 |
+
dependencies:
|
| 482 |
+
once: 1.4.0
|
| 483 |
+
wrappy: 1.0.2
|
| 484 |
+
|
| 485 |
+
inherits@2.0.4: {}
|
| 486 |
+
|
| 487 |
+
is-buffer@1.1.6: {}
|
| 488 |
+
|
| 489 |
+
is-extendable@0.1.1: {}
|
| 490 |
+
|
| 491 |
+
is-plain-object@2.0.4:
|
| 492 |
+
dependencies:
|
| 493 |
+
isobject: 3.0.1
|
| 494 |
+
|
| 495 |
+
isobject@3.0.1: {}
|
| 496 |
+
|
| 497 |
+
joycon@3.1.1: {}
|
| 498 |
+
|
| 499 |
+
jsonfile@6.1.0:
|
| 500 |
+
dependencies:
|
| 501 |
+
universalify: 2.0.1
|
| 502 |
+
optionalDependencies:
|
| 503 |
+
graceful-fs: 4.2.11
|
| 504 |
+
|
| 505 |
+
kind-of@2.0.1:
|
| 506 |
+
dependencies:
|
| 507 |
+
is-buffer: 1.1.6
|
| 508 |
+
|
| 509 |
+
kind-of@3.2.2:
|
| 510 |
+
dependencies:
|
| 511 |
+
is-buffer: 1.1.6
|
| 512 |
+
|
| 513 |
+
lazy-cache@0.2.7: {}
|
| 514 |
+
|
| 515 |
+
lazy-cache@1.0.4: {}
|
| 516 |
+
|
| 517 |
+
memoirist@0.3.0: {}
|
| 518 |
+
|
| 519 |
+
merge-deep@3.0.3:
|
| 520 |
+
dependencies:
|
| 521 |
+
arr-union: 3.1.0
|
| 522 |
+
clone-deep: 0.2.4
|
| 523 |
+
kind-of: 3.2.2
|
| 524 |
+
|
| 525 |
+
minimatch@3.1.2:
|
| 526 |
+
dependencies:
|
| 527 |
+
brace-expansion: 1.1.11
|
| 528 |
+
|
| 529 |
+
minimist@1.2.8: {}
|
| 530 |
+
|
| 531 |
+
mixin-object@2.0.1:
|
| 532 |
+
dependencies:
|
| 533 |
+
for-in: 0.1.8
|
| 534 |
+
is-extendable: 0.1.1
|
| 535 |
+
|
| 536 |
+
ms@2.1.3: {}
|
| 537 |
+
|
| 538 |
+
on-exit-leak-free@2.1.2: {}
|
| 539 |
+
|
| 540 |
+
once@1.4.0:
|
| 541 |
+
dependencies:
|
| 542 |
+
wrappy: 1.0.2
|
| 543 |
+
|
| 544 |
+
path-is-absolute@1.0.1: {}
|
| 545 |
+
|
| 546 |
+
pino-abstract-transport@2.0.0:
|
| 547 |
+
dependencies:
|
| 548 |
+
split2: 4.2.0
|
| 549 |
+
|
| 550 |
+
pino-pretty@13.0.0:
|
| 551 |
+
dependencies:
|
| 552 |
+
colorette: 2.0.20
|
| 553 |
+
dateformat: 4.6.3
|
| 554 |
+
fast-copy: 3.0.2
|
| 555 |
+
fast-safe-stringify: 2.1.1
|
| 556 |
+
help-me: 5.0.0
|
| 557 |
+
joycon: 3.1.1
|
| 558 |
+
minimist: 1.2.8
|
| 559 |
+
on-exit-leak-free: 2.1.2
|
| 560 |
+
pino-abstract-transport: 2.0.0
|
| 561 |
+
pump: 3.0.2
|
| 562 |
+
secure-json-parse: 2.7.0
|
| 563 |
+
sonic-boom: 4.2.0
|
| 564 |
+
strip-json-comments: 3.1.1
|
| 565 |
+
|
| 566 |
+
pino-std-serializers@7.0.0: {}
|
| 567 |
+
|
| 568 |
+
pino@9.6.0:
|
| 569 |
+
dependencies:
|
| 570 |
+
atomic-sleep: 1.0.0
|
| 571 |
+
fast-redact: 3.5.0
|
| 572 |
+
on-exit-leak-free: 2.1.2
|
| 573 |
+
pino-abstract-transport: 2.0.0
|
| 574 |
+
pino-std-serializers: 7.0.0
|
| 575 |
+
process-warning: 4.0.1
|
| 576 |
+
quick-format-unescaped: 4.0.4
|
| 577 |
+
real-require: 0.2.0
|
| 578 |
+
safe-stable-stringify: 2.5.0
|
| 579 |
+
sonic-boom: 4.2.0
|
| 580 |
+
thread-stream: 3.1.0
|
| 581 |
+
|
| 582 |
playwright-core@1.51.1: {}
|
| 583 |
|
| 584 |
+
playwright-extra-plugin-stealth@0.0.1: {}
|
| 585 |
+
|
| 586 |
+
playwright-extra@4.3.6(playwright-core@1.51.1)(playwright@1.51.1):
|
| 587 |
+
dependencies:
|
| 588 |
+
debug: 4.4.0
|
| 589 |
+
optionalDependencies:
|
| 590 |
+
playwright: 1.51.1
|
| 591 |
+
playwright-core: 1.51.1
|
| 592 |
+
transitivePeerDependencies:
|
| 593 |
+
- supports-color
|
| 594 |
+
|
| 595 |
playwright@1.51.1:
|
| 596 |
dependencies:
|
| 597 |
playwright-core: 1.51.1
|
| 598 |
optionalDependencies:
|
| 599 |
fsevents: 2.3.2
|
| 600 |
+
|
| 601 |
+
process-warning@4.0.1: {}
|
| 602 |
+
|
| 603 |
+
pump@3.0.2:
|
| 604 |
+
dependencies:
|
| 605 |
+
end-of-stream: 1.4.4
|
| 606 |
+
once: 1.4.0
|
| 607 |
+
|
| 608 |
+
puppeteer-extra-plugin-stealth@2.11.2(playwright-extra@4.3.6(playwright-core@1.51.1)(playwright@1.51.1)):
|
| 609 |
+
dependencies:
|
| 610 |
+
debug: 4.4.0
|
| 611 |
+
puppeteer-extra-plugin: 3.2.3(playwright-extra@4.3.6(playwright-core@1.51.1)(playwright@1.51.1))
|
| 612 |
+
puppeteer-extra-plugin-user-preferences: 2.4.1(playwright-extra@4.3.6(playwright-core@1.51.1)(playwright@1.51.1))
|
| 613 |
+
optionalDependencies:
|
| 614 |
+
playwright-extra: 4.3.6(playwright-core@1.51.1)(playwright@1.51.1)
|
| 615 |
+
transitivePeerDependencies:
|
| 616 |
+
- supports-color
|
| 617 |
+
|
| 618 |
+
puppeteer-extra-plugin-user-data-dir@2.4.1(playwright-extra@4.3.6(playwright-core@1.51.1)(playwright@1.51.1)):
|
| 619 |
+
dependencies:
|
| 620 |
+
debug: 4.4.0
|
| 621 |
+
fs-extra: 10.1.0
|
| 622 |
+
puppeteer-extra-plugin: 3.2.3(playwright-extra@4.3.6(playwright-core@1.51.1)(playwright@1.51.1))
|
| 623 |
+
rimraf: 3.0.2
|
| 624 |
+
optionalDependencies:
|
| 625 |
+
playwright-extra: 4.3.6(playwright-core@1.51.1)(playwright@1.51.1)
|
| 626 |
+
transitivePeerDependencies:
|
| 627 |
+
- supports-color
|
| 628 |
+
|
| 629 |
+
puppeteer-extra-plugin-user-preferences@2.4.1(playwright-extra@4.3.6(playwright-core@1.51.1)(playwright@1.51.1)):
|
| 630 |
+
dependencies:
|
| 631 |
+
debug: 4.4.0
|
| 632 |
+
deepmerge: 4.3.1
|
| 633 |
+
puppeteer-extra-plugin: 3.2.3(playwright-extra@4.3.6(playwright-core@1.51.1)(playwright@1.51.1))
|
| 634 |
+
puppeteer-extra-plugin-user-data-dir: 2.4.1(playwright-extra@4.3.6(playwright-core@1.51.1)(playwright@1.51.1))
|
| 635 |
+
optionalDependencies:
|
| 636 |
+
playwright-extra: 4.3.6(playwright-core@1.51.1)(playwright@1.51.1)
|
| 637 |
+
transitivePeerDependencies:
|
| 638 |
+
- supports-color
|
| 639 |
+
|
| 640 |
+
puppeteer-extra-plugin@3.2.3(playwright-extra@4.3.6(playwright-core@1.51.1)(playwright@1.51.1)):
|
| 641 |
+
dependencies:
|
| 642 |
+
'@types/debug': 4.1.12
|
| 643 |
+
debug: 4.4.0
|
| 644 |
+
merge-deep: 3.0.3
|
| 645 |
+
optionalDependencies:
|
| 646 |
+
playwright-extra: 4.3.6(playwright-core@1.51.1)(playwright@1.51.1)
|
| 647 |
+
transitivePeerDependencies:
|
| 648 |
+
- supports-color
|
| 649 |
+
|
| 650 |
+
quick-format-unescaped@4.0.4: {}
|
| 651 |
+
|
| 652 |
+
real-require@0.2.0: {}
|
| 653 |
+
|
| 654 |
+
rimraf@3.0.2:
|
| 655 |
+
dependencies:
|
| 656 |
+
glob: 7.2.3
|
| 657 |
+
|
| 658 |
+
safe-stable-stringify@2.5.0: {}
|
| 659 |
+
|
| 660 |
+
secure-json-parse@2.7.0: {}
|
| 661 |
+
|
| 662 |
+
shallow-clone@0.1.2:
|
| 663 |
+
dependencies:
|
| 664 |
+
is-extendable: 0.1.1
|
| 665 |
+
kind-of: 2.0.1
|
| 666 |
+
lazy-cache: 0.2.7
|
| 667 |
+
mixin-object: 2.0.1
|
| 668 |
+
|
| 669 |
+
sonic-boom@4.2.0:
|
| 670 |
+
dependencies:
|
| 671 |
+
atomic-sleep: 1.0.0
|
| 672 |
+
|
| 673 |
+
split2@4.2.0: {}
|
| 674 |
+
|
| 675 |
+
strip-json-comments@3.1.1: {}
|
| 676 |
+
|
| 677 |
+
thread-stream@3.1.0:
|
| 678 |
+
dependencies:
|
| 679 |
+
real-require: 0.2.0
|
| 680 |
+
|
| 681 |
+
undici-types@6.20.0: {}
|
| 682 |
+
|
| 683 |
+
universalify@2.0.1: {}
|
| 684 |
+
|
| 685 |
+
wrappy@1.0.2: {}
|
screenshot.png
DELETED
|
Binary file (65.8 kB)
|
|
|
screenshots/facf039b-8c09-4990-bae8-04194d222f10.png
DELETED
|
Binary file (5.5 kB)
|
|
|
src/index.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { Elysia } from 'elysia';
|
| 2 |
+
import { chromium, Browser, BrowserContext, Page } from 'playwright';
|
| 3 |
+
import { randomUUID } from 'crypto';
|
| 4 |
+
import fs from 'fs/promises';
|
| 5 |
+
import path from 'path';
|
| 6 |
+
import { fileURLToPath } from 'url';
|
| 7 |
+
import { Worker } from 'worker_threads';
|
| 8 |
+
import { addStealth } from 'puppeteer-extra-plugin-stealth';
|
| 9 |
+
|
| 10 |
+
const __dirname: string = path.dirname(fileURLToPath(import.meta.url));
|
| 11 |
+
const app = new Elysia();
|
| 12 |
+
const PORT: number = 3000;
|
| 13 |
+
const MAX_IDLE_TIME: number = 600 * 1000; // 600s = 10 phút
|
| 14 |
+
const BROWSER_SESSIONS: Record<string, { browser: Browser; lastUsed: number }> = {};
|
| 15 |
+
const SCREENSHOT_DIR: string = path.join(__dirname, 'screenshots');
|
| 16 |
+
await fs.mkdir(SCREENSHOT_DIR, { recursive: true });
|
| 17 |
+
|
| 18 |
+
async function createBrowser(): Promise<Browser> {
|
| 19 |
+
return await chromium.launch({
|
| 20 |
+
headless: true,
|
| 21 |
+
args: [
|
| 22 |
+
'--no-sandbox',
|
| 23 |
+
'--disable-dev-shm-usage',
|
| 24 |
+
'--disable-blink-features=AutomationControlled',
|
| 25 |
+
'--disable-web-security',
|
| 26 |
+
'--disable-features=IsolateOrigins,site-per-process'
|
| 27 |
+
]
|
| 28 |
+
});
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
async function getBrowser(userId: string): Promise<Browser> {
|
| 32 |
+
const now: number = Date.now();
|
| 33 |
+
if (!BROWSER_SESSIONS[userId] || now - BROWSER_SESSIONS[userId].lastUsed > MAX_IDLE_TIME) {
|
| 34 |
+
if (BROWSER_SESSIONS[userId]) {
|
| 35 |
+
await BROWSER_SESSIONS[userId].browser.close();
|
| 36 |
+
}
|
| 37 |
+
BROWSER_SESSIONS[userId] = {
|
| 38 |
+
browser: await createBrowser(),
|
| 39 |
+
lastUsed: now
|
| 40 |
+
};
|
| 41 |
+
}
|
| 42 |
+
BROWSER_SESSIONS[userId].lastUsed = now;
|
| 43 |
+
return BROWSER_SESSIONS[userId].browser;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
app.get('/browse', async ({ query, set }) => {
|
| 47 |
+
const { url, user_id: userId, proxy }: { url?: string; user_id?: string; proxy?: string } = query;
|
| 48 |
+
if (!url || !userId) {
|
| 49 |
+
set.status = 400;
|
| 50 |
+
return { error: 'Missing parameters' };
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
try {
|
| 54 |
+
const browser: Browser = await getBrowser(userId);
|
| 55 |
+
const contextOptions: Record<string, any> = {};
|
| 56 |
+
if (proxy) {
|
| 57 |
+
contextOptions.proxy = { server: proxy };
|
| 58 |
+
}
|
| 59 |
+
const context: BrowserContext = await browser.newContext(contextOptions);
|
| 60 |
+
const page: Page = await context.newPage();
|
| 61 |
+
|
| 62 |
+
await addStealth(page); // Áp dụng stealth mode để tránh detection
|
| 63 |
+
|
| 64 |
+
await page.goto(url, { timeout: 30000, waitUntil: 'domcontentloaded' });
|
| 65 |
+
await page.waitForSelector('.qrcode', { timeout: 10000 });
|
| 66 |
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
| 67 |
+
|
| 68 |
+
const screenshotPath: string = path.join(SCREENSHOT_DIR, `${randomUUID()}.png`);
|
| 69 |
+
await page.screenshot({ path: screenshotPath });
|
| 70 |
+
await context.close();
|
| 71 |
+
|
| 72 |
+
return new Response(await fs.readFile(screenshotPath), { headers: { 'Content-Type': 'image/png' } });
|
| 73 |
+
} catch (error) {
|
| 74 |
+
console.error('⚠ Error:', error);
|
| 75 |
+
set.status = 500;
|
| 76 |
+
return { error: 'Failed' };
|
| 77 |
+
}
|
| 78 |
+
});
|
| 79 |
+
|
| 80 |
+
// Chạy cleanupBrowsers trong worker thread
|
| 81 |
+
const worker = new Worker(path.join(__dirname, 'worker.js'));
|
| 82 |
+
worker.on('error', (err) => console.error('Worker Error:', err));
|
| 83 |
+
worker.on('exit', (code) => console.log(`Cleanup worker exited with code ${code}`));
|
| 84 |
+
|
| 85 |
+
app.listen(PORT, () => {
|
| 86 |
+
console.log(`🚀 Server running on http://localhost:${PORT}`);
|
| 87 |
+
});
|
start.sh
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
export SCREEN_WIDTH=1920
|
| 2 |
+
export SCREEN_HEIGHT=1080
|
| 3 |
+
export PROFILE_ID=yU0Pr0f1leiD
|
| 4 |
+
export TOKEN=yU0token
|
| 5 |
+
docker run -e SCREEN_WIDTH=$SCREEN_WIDTH -e SCREEN_HEIGHT=$SCREEN_HEIGHT -e PROFILE_ID=$PROFILE_ID -e TOKEN=$TOKEN --rm -ti -p 5901:5901 -p 3000:3000 --name orbita-browser orbita-docker:latest
|
tsconfig.json
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"compilerOptions": {
|
| 3 |
+
/* Visit https://aka.ms/tsconfig to read more about this file */
|
| 4 |
+
|
| 5 |
+
/* Projects */
|
| 6 |
+
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
|
| 7 |
+
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
| 8 |
+
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
|
| 9 |
+
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
|
| 10 |
+
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
| 11 |
+
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
| 12 |
+
|
| 13 |
+
/* Language and Environment */
|
| 14 |
+
"target": "ES2021", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
| 15 |
+
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
| 16 |
+
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
| 17 |
+
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
|
| 18 |
+
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
| 19 |
+
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
|
| 20 |
+
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
| 21 |
+
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
|
| 22 |
+
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
|
| 23 |
+
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
| 24 |
+
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
| 25 |
+
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
| 26 |
+
|
| 27 |
+
/* Modules */
|
| 28 |
+
"module": "ES2022", /* Specify what module code is generated. */
|
| 29 |
+
// "rootDir": "./", /* Specify the root folder within your source files. */
|
| 30 |
+
"moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
|
| 31 |
+
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
| 32 |
+
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
| 33 |
+
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
| 34 |
+
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
|
| 35 |
+
"types": ["bun-types"], /* Specify type package names to be included without being referenced in a source file. */
|
| 36 |
+
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
| 37 |
+
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
|
| 38 |
+
// "resolveJsonModule": true, /* Enable importing .json files. */
|
| 39 |
+
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
|
| 40 |
+
|
| 41 |
+
/* JavaScript Support */
|
| 42 |
+
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
|
| 43 |
+
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
| 44 |
+
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
|
| 45 |
+
|
| 46 |
+
/* Emit */
|
| 47 |
+
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
| 48 |
+
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
| 49 |
+
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
| 50 |
+
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
| 51 |
+
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
|
| 52 |
+
// "outDir": "./", /* Specify an output folder for all emitted files. */
|
| 53 |
+
// "removeComments": true, /* Disable emitting comments. */
|
| 54 |
+
// "noEmit": true, /* Disable emitting files from a compilation. */
|
| 55 |
+
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
| 56 |
+
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
|
| 57 |
+
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
| 58 |
+
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
| 59 |
+
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
| 60 |
+
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
| 61 |
+
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
| 62 |
+
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
| 63 |
+
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
| 64 |
+
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
|
| 65 |
+
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
|
| 66 |
+
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
| 67 |
+
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
|
| 68 |
+
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
| 69 |
+
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
|
| 70 |
+
|
| 71 |
+
/* Interop Constraints */
|
| 72 |
+
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
| 73 |
+
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
| 74 |
+
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
|
| 75 |
+
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
| 76 |
+
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
| 77 |
+
|
| 78 |
+
/* Type Checking */
|
| 79 |
+
"strict": true, /* Enable all strict type-checking options. */
|
| 80 |
+
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
| 81 |
+
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
|
| 82 |
+
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
| 83 |
+
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
|
| 84 |
+
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
| 85 |
+
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
|
| 86 |
+
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
|
| 87 |
+
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
| 88 |
+
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
|
| 89 |
+
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
|
| 90 |
+
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
| 91 |
+
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
| 92 |
+
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
| 93 |
+
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
|
| 94 |
+
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
| 95 |
+
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
|
| 96 |
+
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
| 97 |
+
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
| 98 |
+
|
| 99 |
+
/* Completeness */
|
| 100 |
+
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
| 101 |
+
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
| 102 |
+
}
|
| 103 |
+
}
|