From b3f6fb715d2db078c396ad151d74704007242be6 Mon Sep 17 00:00:00 2001 From: Artemy Date: Thu, 16 May 2024 16:44:49 +0300 Subject: [PATCH] fix: docker, docs, workflows --- .dockerignore | 2 + .env.example | 12 +- .github/workflows/build.yml | 14 +- .github/workflows/deploy.yml | 14 +- .github/workflows/format-check.yml | 16 +- Dockerfile | 31 +- README.md | 13 +- docker-compose.yml | 6 +- package.json | 17 +- pnpm-lock.yaml | 710 ++++++++++++++++------------- src/app.ts | 26 +- src/config/config.service.ts | 6 +- src/config/main.ts | 2 +- 13 files changed, 503 insertions(+), 366 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f06235c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +node_modules +dist diff --git a/.env.example b/.env.example index 9619c02..ea7db1c 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,9 @@ HOST="0.0.0.0" -PORT=8080 -TIMEOUT=0 -WAIT_FOR_PAGE_LOAD_TIMEOUT=2000 -REVERSE_PROXY=false \ No newline at end of file +PORT=8080 +TIMEOUT=0 # Max timout for server response, 0 means no timeout +REVERSE_PROXY=false # Set true if app running behind reverse_proxy + +# Maximum timeout for waiting for page load, once the page is +# loaded or the timeout is exceeded, rendering is terminated +# and the page is rendered +WAIT_FOR_PAGE_LOAD_TIMEOUT=2000 \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 513a248..a022a78 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,15 +5,19 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '20' + + - uses: pnpm/action-setup@v4 + with: + version: 9 - name: Install dependencies - run: npm install + run: pnpm install - name: Start build - run: npm run build + run: pnpm run build diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 7195e30..01d3ea1 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -3,6 +3,10 @@ name: Create and publish a Docker image # Configures this workflow to run every time a change is pushed to the branch called `release`. on: + push: + branches: + - main + - dev release: types: - published @@ -20,13 +24,13 @@ jobs: permissions: contents: read packages: write - # + steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here. - name: Log in to the Container registry - uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -34,14 +38,14 @@ jobs: # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels. - name: Extract metadata (tags, labels) for Docker id: meta - uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages. # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository. # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step. - name: Build and push Docker image - uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + uses: docker/build-push-action@v5 with: context: . push: true diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml index 500f077..b45a939 100644 --- a/.github/workflows/format-check.yml +++ b/.github/workflows/format-check.yml @@ -5,15 +5,19 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '20' + + - uses: pnpm/action-setup@v4 + with: + version: 9 - name: Install dependencies - run: npm install + run: pnpm install - - name: Check formatting - run: npm run format:check + - name: Start build + run: pnpm run format:check diff --git a/Dockerfile b/Dockerfile index 9bd5954..6e5bbf4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,27 @@ -FROM node:18-alpine as build +FROM node:20-alpine as base +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable +COPY . /app WORKDIR /app -COPY . . -RUN npm install -RUN npm run build -FROM node:18-alpine as run +FROM base AS prod-deps +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile + +FROM base AS build +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile +RUN pnpm run build + +FROM node:20-alpine as run + +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable WORKDIR /app -COPY --from=build /app/dist/ /app/package*.json ./ -RUN npm install --omit=dev -CMD npm run start:docker + +COPY --from=prod-deps /app/node_modules /app/node_modules +COPY --from=build /app/dist /app/dist/ +COPY --from=build /app/package.json /app/package.json + EXPOSE 8080 +CMD [ "pnpm", "start" ] \ No newline at end of file diff --git a/README.md b/README.md index 0b23752..5081164 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,9 @@ Proxy that renders client-side JavaScript apps (e.g. React apps) on server and returns the resulting HTML code. -- JS is disabled/unsupported, no proxy: blank page or "Enable JS to continue" -- With webder: all desired content, no need to use JS interpreter +| Response without proxy | With webder | +| ----------------------------------------------------------------- | -------------------------------------------------- | +| JS is disabled/unsupported, blank page or "Enable JS to continue" | all desired content, no need to use JS interpreter | > [!WARNING] > No HTML purification is performed, so passing code directly from webder can lead to XSS attacks. Local network requests are not blocked too, check domains/IPs to avoid SSRF attacks. @@ -11,13 +12,13 @@ Proxy that renders client-side JavaScript apps (e.g. React apps) on server and r ## Usage -`/render?url=...` +The proxy is accessible at `/render?url=...` by default. For available config fields, check `.env.example`. Docker is supported. ```bash -npm install -npm run build -npm start +pnpm install +pnpm run build +pnpm start ``` diff --git a/docker-compose.yml b/docker-compose.yml index 9e520fd..e3aacf0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,10 @@ -version: "3" +version: '3' services: txtdot: image: ghcr.io/txtdot/webder:latest ports: - - "8080:8080" + - '8080:8080' restart: unless-stopped volumes: - - ".env:/app/.env" + - '.env:/app/.env' diff --git a/package.json b/package.json index 48f1be0..a1612c4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "webder", - "version": "1.0.0", + "version": "1.0.1", "description": "Http/s proxy that render pages with js and returns HTML", "main": "dist/app.js", "private": true, @@ -23,19 +23,20 @@ "license": "MIT", "devDependencies": { "@types/dompurify": "^3.0.5", - "@types/node": "^20.11.30", - "@typescript-eslint/eslint-plugin": "^7.3.1", - "@typescript-eslint/parser": "^7.3.1", + "@types/node": "^20.12.12", + "@typescript-eslint/eslint-plugin": "^7.9.0", + "@typescript-eslint/parser": "^7.9.0", "copyfiles": "^2.4.1", "eslint": "^8.57.0", - "tsc-watch": "^6.0.4", - "typescript": "^5.4.3" + "tsc-watch": "^6.2.0", + "typescript": "^5.4.5" }, "dependencies": { + "@fastify/one-line-logger": "^1.3.0", "dotenv": "^16.4.5", - "fastify": "^4.26.2", + "fastify": "^4.27.0", "prettier": "^3.2.5", - "puppeteer": "^22.6.0", + "puppeteer": "^22.9.0", "puppeteer-extra": "^3.3.6", "puppeteer-extra-plugin-adblocker": "^2.13.6", "puppeteer-extra-plugin-stealth": "^2.11.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 45d04ff..0027f7c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,40 +8,43 @@ importers: .: dependencies: + '@fastify/one-line-logger': + specifier: ^1.3.0 + version: 1.3.0 dotenv: specifier: ^16.4.5 version: 16.4.5 fastify: - specifier: ^4.26.2 - version: 4.26.2 + specifier: ^4.27.0 + version: 4.27.0 prettier: specifier: ^3.2.5 version: 3.2.5 puppeteer: - specifier: ^22.6.0 - version: 22.6.0(typescript@5.4.3) + specifier: ^22.9.0 + version: 22.9.0(typescript@5.4.5) puppeteer-extra: specifier: ^3.3.6 - version: 3.3.6(puppeteer@22.6.0) + version: 3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5)) puppeteer-extra-plugin-adblocker: specifier: ^2.13.6 - version: 2.13.6(puppeteer-extra@3.3.6)(puppeteer@22.6.0) + version: 2.13.6(puppeteer-core@22.9.0)(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5)))(puppeteer@22.9.0(typescript@5.4.5)) puppeteer-extra-plugin-stealth: specifier: ^2.11.2 - version: 2.11.2(puppeteer-extra@3.3.6) + version: 2.11.2(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5))) devDependencies: '@types/dompurify': specifier: ^3.0.5 version: 3.0.5 '@types/node': - specifier: ^20.11.30 - version: 20.11.30 + specifier: ^20.12.12 + version: 20.12.12 '@typescript-eslint/eslint-plugin': - specifier: ^7.3.1 - version: 7.3.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0)(typescript@5.4.3) + specifier: ^7.9.0 + version: 7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': - specifier: ^7.3.1 - version: 7.3.1(eslint@8.57.0)(typescript@5.4.3) + specifier: ^7.9.0 + version: 7.9.0(eslint@8.57.0)(typescript@5.4.5) copyfiles: specifier: ^2.4.1 version: 2.4.1 @@ -49,43 +52,39 @@ importers: specifier: ^8.57.0 version: 8.57.0 tsc-watch: - specifier: ^6.0.4 - version: 6.0.4(typescript@5.4.3) + specifier: ^6.2.0 + version: 6.2.0(typescript@5.4.5) typescript: - specifier: ^5.4.3 - version: 5.4.3 + specifier: ^5.4.5 + version: 5.4.5 packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - '@babel/code-frame@7.24.2': resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + '@babel/helper-validator-identifier@7.24.5': + resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.2': - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + '@babel/highlight@7.24.5': + resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} engines: {node: '>=6.9.0'} - '@cliqz/adblocker-content@1.26.16': - resolution: {integrity: sha512-N1pKg1gxfpnz47w2Sjs2sg3fxFZb113ClUhitgAFSVXeIhZ+S+bCaQtvwtP0mJT+SDfUx2NsPiLwZoPjVRI3wQ==} + '@cliqz/adblocker-content@1.27.3': + resolution: {integrity: sha512-fMyvLGzw2aQKO1yuNfc9Pw4wI+a9xAyOgCXgqQOLYn4uXELthdn9vbng/gYmBs5Z3zetJpJmIitoRkIBlwOPhA==} - '@cliqz/adblocker-extended-selectors@1.26.16': - resolution: {integrity: sha512-ePXS3aD1R+0XfCnOj0L2ms0NA5AxKHfFLfw92cZ87IPY8ZEZK/sWwQCv5wawbwBmXksr0YkMfFVCiH/IQgUNBQ==} + '@cliqz/adblocker-extended-selectors@1.27.3': + resolution: {integrity: sha512-aAmb6ExlqUO3m0Td0DWuUxcJhji9tZBisT1G+y+iETcynlv9oG7UR0///gNiceFGJZH2ARjehSIFAi2dPSc55g==} '@cliqz/adblocker-puppeteer@1.23.8': resolution: {integrity: sha512-Ca1/DBqQXsOpKTFVAHX6OpLTSEupXmUkUWHj6iXhLLleC7RPISN5B0b801VDmaGRqoC5zKRxn0vYbIfpgCWVug==} peerDependencies: puppeteer: '>5' - '@cliqz/adblocker@1.26.16': - resolution: {integrity: sha512-NQ5WdNeiWiggDhhT/IXbsjKgH44nA9k5GlW00gUWRUpfKHCCInyDJYjM5pbHqxhgC3LkMVmXmU5vIsMUZ4RxFQ==} + '@cliqz/adblocker@1.27.3': + resolution: {integrity: sha512-qPbQW1ZJBj2f7VhVOg8SCZws4G6WGJ9gmxF+tMpGXHeYN9PwFIvgdiYYmO6m+VH51ccgPu21rBvva9tfWi4I/w==} '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} @@ -117,6 +116,9 @@ packages: '@fastify/merge-json-schemas@0.1.1': resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==} + '@fastify/one-line-logger@1.3.0': + resolution: {integrity: sha512-91Rqm1UPCcF6eL/g0LkjNrIZBBK/7/lmUbKdIcqZAor5ZN8VV/CiHkEwK9SGl2IUN9CS1BFhSZBwTU6ovzH7Yw==} + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -125,8 +127,8 @@ packages: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.2': - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -140,8 +142,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@puppeteer/browsers@2.2.0': - resolution: {integrity: sha512-MC7LxpcBtdfTbzwARXIkqGZ1Osn3nnZJlm+i0+VqHl72t//Xwl9wICrXT8BwtgC6s1xJNHsxOpvzISUqe92+sw==} + '@puppeteer/browsers@2.2.3': + resolution: {integrity: sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==} engines: {node: '>=18'} hasBin: true @@ -166,8 +168,8 @@ packages: '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@types/chrome@0.0.260': - resolution: {integrity: sha512-lX6QpgfsZRTDpNcCJ+3vzfFnFXq9bScFRTlfhbK5oecSAjamsno+ejFTCbNtc5O/TPnVK9Tja/PyecvWQe0F2w==} + '@types/chrome@0.0.267': + resolution: {integrity: sha512-vnCWPpYjazSPRMNmybRH+0q4f738F+Pbbls4ZPFsPr9/4TTNJyK1OLZDpSnghnEWb4stfmIUtq/GegnlfD4sPA==} '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -175,8 +177,8 @@ packages: '@types/dompurify@3.0.5': resolution: {integrity: sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==} - '@types/filesystem@0.0.35': - resolution: {integrity: sha512-1eKvCaIBdrD2mmMgy5dwh564rVvfEhZTWVQQGRNn0Nt4ZEnJ0C8oSUCzvMKRA4lGde5oEVo+q2MrTTbV/GHDCQ==} + '@types/filesystem@0.0.36': + resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} '@types/filewriter@0.0.33': resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} @@ -187,17 +189,11 @@ packages: '@types/har-format@1.2.15': resolution: {integrity: sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==} - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.11.30': - resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} - - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -205,8 +201,8 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@7.3.1': - resolution: {integrity: sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==} + '@typescript-eslint/eslint-plugin@7.9.0': + resolution: {integrity: sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -216,8 +212,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.3.1': - resolution: {integrity: sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==} + '@typescript-eslint/parser@7.9.0': + resolution: {integrity: sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -226,12 +222,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@7.3.1': - resolution: {integrity: sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==} + '@typescript-eslint/scope-manager@7.9.0': + resolution: {integrity: sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/type-utils@7.3.1': - resolution: {integrity: sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==} + '@typescript-eslint/type-utils@7.9.0': + resolution: {integrity: sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -240,12 +236,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@7.3.1': - resolution: {integrity: sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==} + '@typescript-eslint/types@7.9.0': + resolution: {integrity: sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/typescript-estree@7.3.1': - resolution: {integrity: sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==} + '@typescript-eslint/typescript-estree@7.9.0': + resolution: {integrity: sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -253,14 +249,14 @@ packages: typescript: optional: true - '@typescript-eslint/utils@7.3.1': - resolution: {integrity: sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==} + '@typescript-eslint/utils@7.9.0': + resolution: {integrity: sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@7.3.1': - resolution: {integrity: sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==} + '@typescript-eslint/visitor-keys@7.9.0': + resolution: {integrity: sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==} engines: {node: ^18.18.0 || >=20.0.0} '@ungap/structured-clone@1.2.0': @@ -283,8 +279,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} ajv-formats@2.1.1: @@ -295,11 +291,19 @@ packages: ajv: optional: true + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.13.0: + resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -344,17 +348,20 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.2.1: - resolution: {integrity: sha512-9GYPpsPFvrWBkelIhOhTWtkeZxVxZOdb3VnFTCzlOo3OjvmTvzLoZFUT8kNFACx0vJej6QPney1Cf9BvzCNE/A==} + bare-events@2.2.2: + resolution: {integrity: sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==} - bare-fs@2.2.2: - resolution: {integrity: sha512-X9IqgvyB0/VA5OZJyb5ZstoN62AzD7YxVGog13kkfYWYqJYcK0kcqLZ6TrmH5qr4/8//ejVcX4x/a0UvaogXmA==} + bare-fs@2.3.0: + resolution: {integrity: sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw==} - bare-os@2.2.1: - resolution: {integrity: sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==} + bare-os@2.3.0: + resolution: {integrity: sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==} - bare-path@2.1.0: - resolution: {integrity: sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==} + bare-path@2.1.2: + resolution: {integrity: sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig==} + + bare-stream@1.0.0: + resolution: {integrity: sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -394,8 +401,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chromium-bidi@0.5.13: - resolution: {integrity: sha512-OHbYCetDxdW/xmlrafgOiLsIrw4Sp1BEeolbZ1UGJO5v/nekQOJBj/Kzyw6sqKcAVabUTo0GS3cTYgr6zIf00g==} + chromium-bidi@0.5.19: + resolution: {integrity: sha512-UA6zL77b7RYCjJkZBsZ0wlvCTD+jTjllZ8f6wdO4buevXgTZYjV+XLB9CiEa2OuuTGGTLnI7eN9I60YxuALGQg==} peerDependencies: devtools-protocol: '*' @@ -423,6 +430,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -454,6 +464,9 @@ packages: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -474,8 +487,8 @@ packages: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} - devtools-protocol@0.0.1262051: - resolution: {integrity: sha512-YJe4CT5SA8on3Spa+UDtNhEqtuV6Epwz3OZ4HQVLhlRccpZ9/PAYk0/cy/oKxFKRrZPBUPyxympQci4yWNWZ9g==} + devtools-protocol@0.0.1286932: + resolution: {integrity: sha512-wu58HMQll9voDjR4NlPyoDEw1syfzaBNHymMMZ/QOXiHRNluOnDgu9hp1yHOKYoMlxCh4lSSiugLITe6Fvu1eA==} dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} @@ -579,6 +592,9 @@ packages: fast-content-type-parse@1.1.0: resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} + fast-copy@3.0.2: + resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} + fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} @@ -595,8 +611,8 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-json-stringify@5.13.0: - resolution: {integrity: sha512-XjTDWKHP3GoMQUOfnjYUbqeHeEt+PvYgvBdG2fRSmYaORILbSr8xTJvZX+w1YSAP5pw2NwKrGRmQleYueZEoxw==} + fast-json-stringify@5.15.1: + resolution: {integrity: sha512-JopGtkvvguRqrS4gHXSSA2jf4pDgOZkeBAkLO1LbzOpiOMo7/kugoR+KiWifpLpluaVeYDkAuxCJOj4Gyc6L9A==} fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} @@ -608,11 +624,14 @@ packages: resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} engines: {node: '>=6'} + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-uri@2.3.0: resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} - fastify@4.26.2: - resolution: {integrity: sha512-90pjTuPGrfVKtdpLeLzND5nyC4woXZN5VadiNQCicj/iJU4viNHKhsAnb7jmv1vu2IzkLXyBiCzdWuzeXgQ5Ug==} + fastify@4.27.0: + resolution: {integrity: sha512-ci9IXzbigB8dyi0mSy3faa3Bsj0xWAPb9JeT4KRzubdSb6pNhcADRUaXCBml6V1Ss/a05kbtQls5LBmhHydoTA==} fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -628,8 +647,8 @@ packages: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} - find-my-way@8.1.0: - resolution: {integrity: sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA==} + find-my-way@8.2.0: + resolution: {integrity: sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==} engines: {node: '>=14'} find-up@5.0.0: @@ -718,6 +737,9 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -802,6 +824,10 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -856,8 +882,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - light-my-request@5.12.0: - resolution: {integrity: sha512-P526OX6E7aeCIfw/9UyJNsAISfcFETghysaWHQAlQYayynShT08MOj4c6fBCvTWBrHXSvqBAKDp3amUPSCQI4w==} + light-my-request@5.13.0: + resolution: {integrity: sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==} lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -895,10 +921,13 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} @@ -943,8 +972,8 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} p-limit@3.1.0: @@ -993,21 +1022,25 @@ packages: pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - pino-abstract-transport@1.1.0: - resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==} + pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} - pino-std-serializers@6.2.2: - resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + pino-pretty@10.3.1: + resolution: {integrity: sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g==} + hasBin: true - pino@8.19.0: - resolution: {integrity: sha512-oswmokxkav9bADfJ2ifrvfHUwad6MLp73Uat0IkQWY3iAw5xTRoznXbXksZs8oaOUMpmhVWD+PZogNzllWpJaA==} + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@9.1.0: + resolution: {integrity: sha512-qUcgfrlyOtjwhNLdbhoL7NR4NkHjzykAPw0V2QLFbvu/zss29h4NkRnibyFzBrNCbzCOY3WZ9hhKSwfOkNggYA==} hasBin: true prelude-ls@1.2.1: @@ -1056,8 +1089,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@22.6.0: - resolution: {integrity: sha512-xclyGFhxHfZ9l62uXFm+JpgtJHLIZ1qHc7iR4eaIqBNKA5Dg2sDr8yvylfCx5bMN89QWIaxpV6IHsy0qUynK/g==} + puppeteer-core@22.9.0: + resolution: {integrity: sha512-Q2SYVZ1SIE7jCd/Pp+1/mNLFtdJfGvAF+CqOTDG8HcCNCiBvoXfopXfOfMHQ/FueXhGfJW/I6DartWv6QzpNGg==} engines: {node: '>=18'} puppeteer-extra-plugin-adblocker@2.13.6: @@ -1138,8 +1171,8 @@ packages: puppeteer-core: optional: true - puppeteer@22.6.0: - resolution: {integrity: sha512-TYeza4rl1YXfxqUVw/0hWUWYX5cicnf6qu5kkDV+t7QrESCjMoSNnva4ZA/MRGQ03HnB9BOFw9nxs/SKek5KDA==} + puppeteer@22.9.0: + resolution: {integrity: sha512-yNux2cm6Sfik4lNLNjJ25Cdn9spJRbMXxl1YZtVZCEhEeej1sFlCvZ/Cr64LhgyJOuvz3iq2uk+RLFpQpGwrjw==} engines: {node: '>=18'} hasBin: true @@ -1178,9 +1211,9 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - ret@0.2.2: - resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} - engines: {node: '>=4'} + ret@0.4.3: + resolution: {integrity: sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==} + engines: {node: '>=10'} reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -1202,8 +1235,8 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex2@2.0.0: - resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} + safe-regex2@3.1.0: + resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==} safe-stable-stringify@2.4.3: resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} @@ -1217,6 +1250,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} @@ -1240,16 +1278,19 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - socks-proxy-agent@8.0.2: - resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} + socks-proxy-agent@8.0.3: + resolution: {integrity: sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==} engines: {node: '>= 14'} - socks@2.8.1: - resolution: {integrity: sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==} + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - sonic-boom@3.8.0: - resolution: {integrity: sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==} + sonic-boom@3.8.1: + resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} + + sonic-boom@4.0.1: + resolution: {integrity: sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==} source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} @@ -1313,8 +1354,8 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thread-stream@2.4.1: - resolution: {integrity: sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==} + thread-stream@3.0.0: + resolution: {integrity: sha512-oUIFjxaUT6knhPtWgDMc29zF1FcSl0yXpapkyrQrCGEfYA2HUZXCilUtKyYIv6HkCyqSPAMkY+EG0GbyIrNDQg==} through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -1325,14 +1366,14 @@ packages: tldts-core@5.7.112: resolution: {integrity: sha512-mutrEUgG2sp0e/MIAnv9TbSLR0IPbvmAImpzqul5O/HJ2XM1/I1sajchQ/fbj0fPdA31IiuWde8EUhfwyldY1Q==} - tldts-core@6.1.13: - resolution: {integrity: sha512-M1XP4D13YtXARKroULnLsKKuI1NCRAbJmUGGoXqWinajIDOhTeJf/trYUyBoLVx1/Nx1KBKxCrlW57ZW9cMHAA==} + tldts-core@6.1.20: + resolution: {integrity: sha512-VTEzsx7kVbLDgWaACW0atZ7Q0KzbJveYvR6IxvirIhV4Z4GGGqLVCCj9PvF0KW3h0PbJcw0JJnpr0YueHg0ueA==} tldts-experimental@5.7.112: resolution: {integrity: sha512-Nq5qWN4OiLziAOOOEoSME7cZI4Hz8Srt+9q6cl8mZ5EAhCfmeE6l7K5XjuIKN+pySuGUvthE5aPiD185YU1/lg==} - tldts-experimental@6.1.13: - resolution: {integrity: sha512-TjOJexv0ZsBXdg9MfwqGlbOCtdYlpSBbzN5C7SYpjzPczu8CmpVPp3V78utf+854FUfd3P+0nwsEi9wYvnU7zQ==} + tldts-experimental@6.1.20: + resolution: {integrity: sha512-CzsCylSiWhDg06z7B3luYKJmKBVac1Dd8geXcD1k1J54/K8JXtNa6892u5Uio6t930MRA83lxIT/PATNKogvAQ==} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -1351,8 +1392,8 @@ packages: peerDependencies: typescript: '>=4.2.0' - tsc-watch@6.0.4: - resolution: {integrity: sha512-cHvbvhjO86w2aGlaHgSCeQRl+Aqw6X6XN4sQMPZKF88GoP30O+oTuh5lRIJr5pgFWrRpF1AgXnJJ2DoFEIPHyg==} + tsc-watch@6.2.0: + resolution: {integrity: sha512-2LBhf9kjKXnz7KQ/puLHlozMzzUNHAdYBNMkg3eksQJ9GBAgMg8czznM83T5PmsoUvDnXzfIeQn2lNcIYDr8LA==} engines: {node: '>=12.12.0'} hasBin: true peerDependencies: @@ -1369,8 +1410,8 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - typescript@5.4.3: - resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true @@ -1408,6 +1449,10 @@ packages: engines: {node: '>= 8'} hasBin: true + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -1415,8 +1460,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -1466,45 +1511,43 @@ packages: snapshots: - '@aashutoshrathi/word-wrap@1.2.6': {} - '@babel/code-frame@7.24.2': dependencies: - '@babel/highlight': 7.24.2 - picocolors: 1.0.0 + '@babel/highlight': 7.24.5 + picocolors: 1.0.1 - '@babel/helper-validator-identifier@7.22.20': {} + '@babel/helper-validator-identifier@7.24.5': {} - '@babel/highlight@7.24.2': + '@babel/highlight@7.24.5': dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.0 + picocolors: 1.0.1 - '@cliqz/adblocker-content@1.26.16': + '@cliqz/adblocker-content@1.27.3': dependencies: - '@cliqz/adblocker-extended-selectors': 1.26.16 + '@cliqz/adblocker-extended-selectors': 1.27.3 - '@cliqz/adblocker-extended-selectors@1.26.16': {} + '@cliqz/adblocker-extended-selectors@1.27.3': {} - '@cliqz/adblocker-puppeteer@1.23.8(puppeteer@22.6.0)': + '@cliqz/adblocker-puppeteer@1.23.8(puppeteer@22.9.0(typescript@5.4.5))': dependencies: - '@cliqz/adblocker': 1.26.16 - '@cliqz/adblocker-content': 1.26.16 - puppeteer: 22.6.0(typescript@5.4.3) + '@cliqz/adblocker': 1.27.3 + '@cliqz/adblocker-content': 1.27.3 + puppeteer: 22.9.0(typescript@5.4.5) tldts-experimental: 5.7.112 - '@cliqz/adblocker@1.26.16': + '@cliqz/adblocker@1.27.3': dependencies: - '@cliqz/adblocker-content': 1.26.16 - '@cliqz/adblocker-extended-selectors': 1.26.16 + '@cliqz/adblocker-content': 1.27.3 + '@cliqz/adblocker-extended-selectors': 1.27.3 '@remusao/guess-url-type': 1.2.1 '@remusao/small': 1.2.1 '@remusao/smaz': 1.9.1 - '@types/chrome': 0.0.260 + '@types/chrome': 0.0.267 '@types/firefox-webext-browser': 120.0.3 - tldts-experimental: 6.1.13 + tldts-experimental: 6.1.20 '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': dependencies: @@ -1531,23 +1574,27 @@ snapshots: '@fastify/ajv-compiler@3.5.0': dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) + ajv: 8.13.0 + ajv-formats: 2.1.1(ajv@8.13.0) fast-uri: 2.3.0 '@fastify/error@3.4.1': {} '@fastify/fast-json-stringify-compiler@4.3.0': dependencies: - fast-json-stringify: 5.13.0 + fast-json-stringify: 5.15.1 '@fastify/merge-json-schemas@0.1.1': dependencies: fast-deep-equal: 3.1.3 + '@fastify/one-line-logger@1.3.0': + dependencies: + pino-pretty: 10.3.1 + '@humanwhocodes/config-array@0.11.14': dependencies: - '@humanwhocodes/object-schema': 2.0.2 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1555,7 +1602,7 @@ snapshots: '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.2': {} + '@humanwhocodes/object-schema@2.0.3': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -1569,7 +1616,7 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@puppeteer/browsers@2.2.0': + '@puppeteer/browsers@2.2.3': dependencies: debug: 4.3.4 extract-zip: 2.0.1 @@ -1601,9 +1648,9 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} - '@types/chrome@0.0.260': + '@types/chrome@0.0.267': dependencies: - '@types/filesystem': 0.0.35 + '@types/filesystem': 0.0.36 '@types/har-format': 1.2.15 '@types/debug@4.1.12': @@ -1614,7 +1661,7 @@ snapshots: dependencies: '@types/trusted-types': 2.0.7 - '@types/filesystem@0.0.35': + '@types/filesystem@0.0.36': dependencies: '@types/filewriter': 0.0.33 @@ -1624,103 +1671,98 @@ snapshots: '@types/har-format@1.2.15': {} - '@types/json-schema@7.0.15': {} - '@types/ms@0.7.34': {} - '@types/node@20.11.30': + '@types/node@20.12.12': dependencies: undici-types: 5.26.5 - '@types/semver@7.5.8': {} - '@types/trusted-types@2.0.7': {} '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.11.30 + '@types/node': 20.12.12 optional: true - '@typescript-eslint/eslint-plugin@7.3.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0)(typescript@5.4.3)': + '@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.3.1(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/scope-manager': 7.3.1 - '@typescript-eslint/type-utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/visitor-keys': 7.3.1 - debug: 4.3.4 + '@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.9.0 + '@typescript-eslint/type-utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.9.0 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.3) - typescript: 5.4.3 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.3.1(eslint@8.57.0)(typescript@5.4.3)': + '@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 7.3.1 - '@typescript-eslint/types': 7.3.1 - '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.3) - '@typescript-eslint/visitor-keys': 7.3.1 + '@typescript-eslint/scope-manager': 7.9.0 + '@typescript-eslint/types': 7.9.0 + '@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.9.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.3 + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.3.1': + '@typescript-eslint/scope-manager@7.9.0': dependencies: - '@typescript-eslint/types': 7.3.1 - '@typescript-eslint/visitor-keys': 7.3.1 + '@typescript-eslint/types': 7.9.0 + '@typescript-eslint/visitor-keys': 7.9.0 - '@typescript-eslint/type-utils@7.3.1(eslint@8.57.0)(typescript@5.4.3)': + '@typescript-eslint/type-utils@7.9.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.3) - '@typescript-eslint/utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.3) - typescript: 5.4.3 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.3.1': {} + '@typescript-eslint/types@7.9.0': {} - '@typescript-eslint/typescript-estree@7.3.1(typescript@5.4.3)': + '@typescript-eslint/typescript-estree@7.9.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 7.3.1 - '@typescript-eslint/visitor-keys': 7.3.1 + '@typescript-eslint/types': 7.9.0 + '@typescript-eslint/visitor-keys': 7.9.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.3) - typescript: 5.4.3 + minimatch: 9.0.4 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.3.1(eslint@8.57.0)(typescript@5.4.3)': + '@typescript-eslint/utils@7.9.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.3.1 - '@typescript-eslint/types': 7.3.1 - '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.3) + '@typescript-eslint/scope-manager': 7.9.0 + '@typescript-eslint/types': 7.9.0 + '@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5) eslint: 8.57.0 - semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.3.1': + '@typescript-eslint/visitor-keys@7.9.0': dependencies: - '@typescript-eslint/types': 7.3.1 + '@typescript-eslint/types': 7.9.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -1737,15 +1779,19 @@ snapshots: acorn@8.11.3: {} - agent-base@7.1.0: + agent-base@7.1.1: dependencies: debug: 4.3.4 transitivePeerDependencies: - supports-color - ajv-formats@2.1.1(ajv@8.12.0): - dependencies: - ajv: 8.12.0 + ajv-formats@2.1.1(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + + ajv-formats@3.0.1(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 ajv@6.12.6: dependencies: @@ -1754,7 +1800,7 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.12.0: + ajv@8.13.0: dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -1798,25 +1844,29 @@ snapshots: balanced-match@1.0.2: {} - bare-events@2.2.1: + bare-events@2.2.2: optional: true - bare-fs@2.2.2: + bare-fs@2.3.0: + dependencies: + bare-events: 2.2.2 + bare-path: 2.1.2 + bare-stream: 1.0.0 + optional: true + + bare-os@2.3.0: + optional: true + + bare-path@2.1.2: + dependencies: + bare-os: 2.3.0 + optional: true + + bare-stream@1.0.0: dependencies: - bare-events: 2.2.1 - bare-os: 2.2.1 - bare-path: 2.1.0 streamx: 2.16.1 optional: true - bare-os@2.2.1: - optional: true - - bare-path@2.1.0: - dependencies: - bare-os: 2.2.1 - optional: true - base64-js@1.5.1: {} basic-ftp@5.0.5: {} @@ -1859,9 +1909,9 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chromium-bidi@0.5.13(devtools-protocol@0.0.1262051): + chromium-bidi@0.5.19(devtools-protocol@0.0.1286932): dependencies: - devtools-protocol: 0.0.1262051 + devtools-protocol: 0.0.1286932 mitt: 3.0.1 urlpattern-polyfill: 10.0.0 zod: 3.22.4 @@ -1898,6 +1948,8 @@ snapshots: color-name@1.1.4: {} + colorette@2.0.20: {} + concat-map@0.0.1: {} cookie@0.6.0: {} @@ -1914,13 +1966,14 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig@9.0.0(typescript@5.4.3): + cosmiconfig@9.0.0(typescript@5.4.5): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 - typescript: 5.4.3 + optionalDependencies: + typescript: 5.4.5 cross-spawn@7.0.3: dependencies: @@ -1930,6 +1983,8 @@ snapshots: data-uri-to-buffer@6.0.2: {} + dateformat@4.6.3: {} + debug@4.3.4: dependencies: ms: 2.1.2 @@ -1944,7 +1999,7 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 - devtools-protocol@0.0.1262051: {} + devtools-protocol@0.0.1286932: {} dir-glob@3.0.1: dependencies: @@ -2028,7 +2083,7 @@ snapshots: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: @@ -2080,6 +2135,8 @@ snapshots: fast-content-type-parse@1.1.0: {} + fast-copy@3.0.2: {} + fast-decode-uri-component@1.0.1: {} fast-deep-equal@3.1.3: {} @@ -2096,11 +2153,11 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-json-stringify@5.13.0: + fast-json-stringify@5.15.1: dependencies: '@fastify/merge-json-schemas': 0.1.1 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) + ajv: 8.13.0 + ajv-formats: 3.0.1(ajv@8.13.0) fast-deep-equal: 3.1.3 fast-uri: 2.3.0 json-schema-ref-resolver: 1.0.1 @@ -2114,9 +2171,11 @@ snapshots: fast-redact@3.5.0: {} + fast-safe-stringify@2.1.1: {} + fast-uri@2.3.0: {} - fastify@4.26.2: + fastify@4.27.0: dependencies: '@fastify/ajv-compiler': 3.5.0 '@fastify/error': 3.4.1 @@ -2124,15 +2183,15 @@ snapshots: abstract-logging: 2.0.1 avvio: 8.3.0 fast-content-type-parse: 1.1.0 - fast-json-stringify: 5.13.0 - find-my-way: 8.1.0 - light-my-request: 5.12.0 - pino: 8.19.0 + fast-json-stringify: 5.15.1 + find-my-way: 8.2.0 + light-my-request: 5.13.0 + pino: 9.1.0 process-warning: 3.0.0 proxy-addr: 2.0.7 rfdc: 1.3.1 secure-json-parse: 2.7.0 - semver: 7.6.0 + semver: 7.6.2 toad-cache: 3.7.0 transitivePeerDependencies: - supports-color @@ -2153,11 +2212,11 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-my-way@8.1.0: + find-my-way@8.2.0: dependencies: fast-deep-equal: 3.1.3 fast-querystring: 1.1.2 - safe-regex2: 2.0.0 + safe-regex2: 3.1.0 find-up@5.0.0: dependencies: @@ -2251,16 +2310,18 @@ snapshots: has-flag@4.0.0: {} + help-me@5.0.0: {} + http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.4: dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -2320,6 +2381,8 @@ snapshots: isobject@3.0.1: {} + joycon@3.1.1: {} + js-tokens@4.0.0: {} js-yaml@4.1.0: @@ -2369,7 +2432,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - light-my-request@5.12.0: + light-my-request@5.13.0: dependencies: cookie: 0.6.0 process-warning: 3.0.0 @@ -2408,10 +2471,12 @@ snapshots: dependencies: brace-expansion: 1.1.11 - minimatch@9.0.3: + minimatch@9.0.4: dependencies: brace-expansion: 2.0.1 + minimist@1.2.8: {} + mitt@3.0.1: {} mixin-object@2.0.1: @@ -2444,14 +2509,14 @@ snapshots: dependencies: wrappy: 1.0.2 - optionator@0.9.3: + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 p-limit@3.1.0: dependencies: @@ -2464,13 +2529,13 @@ snapshots: pac-proxy-agent@7.0.1: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4 get-uri: 6.0.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.4 pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.2 + socks-proxy-agent: 8.0.3 transitivePeerDependencies: - supports-color @@ -2504,30 +2569,47 @@ snapshots: pend@1.2.0: {} - picocolors@1.0.0: {} + picocolors@1.0.1: {} picomatch@2.3.1: {} - pino-abstract-transport@1.1.0: + pino-abstract-transport@1.2.0: dependencies: readable-stream: 4.5.2 split2: 4.2.0 - pino-std-serializers@6.2.2: {} + pino-pretty@10.3.1: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 3.0.2 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pump: 3.0.0 + readable-stream: 4.5.2 + secure-json-parse: 2.7.0 + sonic-boom: 3.8.1 + strip-json-comments: 3.1.1 - pino@8.19.0: + pino-std-serializers@7.0.0: {} + + pino@9.1.0: dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 on-exit-leak-free: 2.1.2 - pino-abstract-transport: 1.1.0 - pino-std-serializers: 6.2.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 7.0.0 process-warning: 3.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.4.3 - sonic-boom: 3.8.0 - thread-stream: 2.4.1 + sonic-boom: 4.0.1 + thread-stream: 3.0.0 prelude-ls@1.2.1: {} @@ -2548,14 +2630,14 @@ snapshots: proxy-agent@6.4.0: dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.4 lru-cache: 7.18.3 pac-proxy-agent: 7.0.1 proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.2 + socks-proxy-agent: 8.0.3 transitivePeerDependencies: - supports-color @@ -2572,84 +2654,92 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@22.6.0: + puppeteer-core@22.9.0: dependencies: - '@puppeteer/browsers': 2.2.0 - chromium-bidi: 0.5.13(devtools-protocol@0.0.1262051) + '@puppeteer/browsers': 2.2.3 + chromium-bidi: 0.5.19(devtools-protocol@0.0.1286932) debug: 4.3.4 - devtools-protocol: 0.0.1262051 - ws: 8.16.0 + devtools-protocol: 0.0.1286932 + ws: 8.17.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - puppeteer-extra-plugin-adblocker@2.13.6(puppeteer-extra@3.3.6)(puppeteer@22.6.0): + puppeteer-extra-plugin-adblocker@2.13.6(puppeteer-core@22.9.0)(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5)))(puppeteer@22.9.0(typescript@5.4.5)): dependencies: - '@cliqz/adblocker-puppeteer': 1.23.8(puppeteer@22.6.0) + '@cliqz/adblocker-puppeteer': 1.23.8(puppeteer@22.9.0(typescript@5.4.5)) debug: 4.3.4 node-fetch: 2.7.0 - puppeteer: 22.6.0(typescript@5.4.3) - puppeteer-extra: 3.3.6(puppeteer@22.6.0) - puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6) + puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5))) + optionalDependencies: + puppeteer: 22.9.0(typescript@5.4.5) + puppeteer-core: 22.9.0 + puppeteer-extra: 3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5)) transitivePeerDependencies: - encoding - playwright-extra - supports-color - puppeteer-extra-plugin-stealth@2.11.2(puppeteer-extra@3.3.6): + puppeteer-extra-plugin-stealth@2.11.2(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5))): dependencies: debug: 4.3.4 - puppeteer-extra: 3.3.6(puppeteer@22.6.0) - puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6) - puppeteer-extra-plugin-user-preferences: 2.4.1(puppeteer-extra@3.3.6) + puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5))) + puppeteer-extra-plugin-user-preferences: 2.4.1(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5))) + optionalDependencies: + puppeteer-extra: 3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5)) transitivePeerDependencies: - supports-color - puppeteer-extra-plugin-user-data-dir@2.4.1(puppeteer-extra@3.3.6): + puppeteer-extra-plugin-user-data-dir@2.4.1(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5))): dependencies: debug: 4.3.4 fs-extra: 10.1.0 - puppeteer-extra: 3.3.6(puppeteer@22.6.0) - puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6) + puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5))) rimraf: 3.0.2 + optionalDependencies: + puppeteer-extra: 3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5)) transitivePeerDependencies: - supports-color - puppeteer-extra-plugin-user-preferences@2.4.1(puppeteer-extra@3.3.6): + puppeteer-extra-plugin-user-preferences@2.4.1(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5))): dependencies: debug: 4.3.4 deepmerge: 4.3.1 - puppeteer-extra: 3.3.6(puppeteer@22.6.0) - puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6) - puppeteer-extra-plugin-user-data-dir: 2.4.1(puppeteer-extra@3.3.6) + puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5))) + puppeteer-extra-plugin-user-data-dir: 2.4.1(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5))) + optionalDependencies: + puppeteer-extra: 3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5)) transitivePeerDependencies: - supports-color - puppeteer-extra-plugin@3.2.3(puppeteer-extra@3.3.6): + puppeteer-extra-plugin@3.2.3(puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5))): dependencies: '@types/debug': 4.1.12 debug: 4.3.4 merge-deep: 3.0.3 - puppeteer-extra: 3.3.6(puppeteer@22.6.0) + optionalDependencies: + puppeteer-extra: 3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5)) transitivePeerDependencies: - supports-color - puppeteer-extra@3.3.6(puppeteer@22.6.0): + puppeteer-extra@3.3.6(puppeteer-core@22.9.0)(puppeteer@22.9.0(typescript@5.4.5)): dependencies: '@types/debug': 4.1.12 debug: 4.3.4 deepmerge: 4.3.1 - puppeteer: 22.6.0(typescript@5.4.3) + optionalDependencies: + puppeteer: 22.9.0(typescript@5.4.5) + puppeteer-core: 22.9.0 transitivePeerDependencies: - supports-color - puppeteer@22.6.0(typescript@5.4.3): + puppeteer@22.9.0(typescript@5.4.5): dependencies: - '@puppeteer/browsers': 2.2.0 - cosmiconfig: 9.0.0(typescript@5.4.3) - devtools-protocol: 0.0.1262051 - puppeteer-core: 22.6.0 + '@puppeteer/browsers': 2.2.3 + cosmiconfig: 9.0.0(typescript@5.4.5) + devtools-protocol: 0.0.1286932 + puppeteer-core: 22.9.0 transitivePeerDependencies: - bufferutil - supports-color @@ -2695,7 +2785,7 @@ snapshots: resolve-from@4.0.0: {} - ret@0.2.2: {} + ret@0.4.3: {} reusify@1.0.4: {} @@ -2713,9 +2803,9 @@ snapshots: safe-buffer@5.2.1: {} - safe-regex2@2.0.0: + safe-regex2@3.1.0: dependencies: - ret: 0.2.2 + ret: 0.4.3 safe-stable-stringify@2.4.3: {} @@ -2725,6 +2815,8 @@ snapshots: dependencies: lru-cache: 6.0.0 + semver@7.6.2: {} + set-cookie-parser@2.6.0: {} shallow-clone@0.1.2: @@ -2744,20 +2836,24 @@ snapshots: smart-buffer@4.2.0: {} - socks-proxy-agent@8.0.2: + socks-proxy-agent@8.0.3: dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4 - socks: 2.8.1 + socks: 2.8.3 transitivePeerDependencies: - supports-color - socks@2.8.1: + socks@2.8.3: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 - sonic-boom@3.8.0: + sonic-boom@3.8.1: + dependencies: + atomic-sleep: 1.0.0 + + sonic-boom@4.0.1: dependencies: atomic-sleep: 1.0.0 @@ -2781,7 +2877,7 @@ snapshots: fast-fifo: 1.3.2 queue-tick: 1.0.1 optionalDependencies: - bare-events: 2.2.1 + bare-events: 2.2.2 string-argv@0.3.2: {} @@ -2820,8 +2916,8 @@ snapshots: pump: 3.0.0 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 2.2.2 - bare-path: 2.1.0 + bare-fs: 2.3.0 + bare-path: 2.1.2 tar-stream@3.1.7: dependencies: @@ -2831,7 +2927,7 @@ snapshots: text-table@0.2.0: {} - thread-stream@2.4.1: + thread-stream@3.0.0: dependencies: real-require: 0.2.0 @@ -2844,15 +2940,15 @@ snapshots: tldts-core@5.7.112: {} - tldts-core@6.1.13: {} + tldts-core@6.1.20: {} tldts-experimental@5.7.112: dependencies: tldts-core: 5.7.112 - tldts-experimental@6.1.13: + tldts-experimental@6.1.20: dependencies: - tldts-core: 6.1.13 + tldts-core: 6.1.20 to-regex-range@5.0.1: dependencies: @@ -2862,17 +2958,17 @@ snapshots: tr46@0.0.3: {} - ts-api-utils@1.3.0(typescript@5.4.3): + ts-api-utils@1.3.0(typescript@5.4.5): dependencies: - typescript: 5.4.3 + typescript: 5.4.5 - tsc-watch@6.0.4(typescript@5.4.3): + tsc-watch@6.2.0(typescript@5.4.5): dependencies: cross-spawn: 7.0.3 node-cleanup: 2.1.2 ps-tree: 1.2.0 string-argv: 0.3.2 - typescript: 5.4.3 + typescript: 5.4.5 tslib@2.6.2: {} @@ -2882,7 +2978,7 @@ snapshots: type-fest@0.20.2: {} - typescript@5.4.3: {} + typescript@5.4.5: {} unbzip2-stream@1.4.3: dependencies: @@ -2914,6 +3010,8 @@ snapshots: dependencies: isexe: 2.0.0 + word-wrap@1.2.5: {} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -2922,7 +3020,7 @@ snapshots: wrappy@1.0.2: {} - ws@8.16.0: {} + ws@8.17.0: {} xtend@4.0.2: {} diff --git a/src/app.ts b/src/app.ts index 7c3d8e0..dda2475 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,7 +1,7 @@ -import { ConfigService } from "./config/config.service"; -import Fastify from "fastify"; -import getConfig from "./config/main"; -import { puppeteer } from "./puppeteer"; +import { ConfigService } from './config/config.service'; +import Fastify from 'fastify'; +import getConfig from './config/main'; +import { puppeteer } from './puppeteer'; class App { config: ConfigService; @@ -10,21 +10,25 @@ class App { } listen() { const fastify = Fastify({ - logger: true, + logger: { + transport: { + target: '@fastify/one-line-logger', + }, + }, trustProxy: this.config.reverse_proxy, connectionTimeout: this.config.timeout, }); fastify.get<{ Querystring: { url: string } }>( - "/render", + '/render', { schema: { querystring: { - type: "object", + type: 'object', properties: { - url: { type: "string" }, + url: { type: 'string' }, }, - required: ["url"], + required: ['url'], }, }, }, @@ -40,14 +44,14 @@ class App { idleTime: 100, }); } catch { - reply.header("x-message", "Page load timeout"); + reply.header('x-message', 'Page load timeout'); } const data = await page.content(); browser.close(); - reply.type("text/html"); + reply.type('text/html'); return data; } ); diff --git a/src/config/config.service.ts b/src/config/config.service.ts index 4e06ef0..4782e19 100644 --- a/src/config/config.service.ts +++ b/src/config/config.service.ts @@ -1,4 +1,4 @@ -import { config } from "dotenv"; +import { config } from 'dotenv'; export class ConfigService { public readonly host: string; @@ -9,7 +9,7 @@ export class ConfigService { constructor() { config(); - this.host = process.env.HOST || "0.0.0.0"; + this.host = process.env.HOST || '0.0.0.0'; this.port = Number(process.env.PORT) || 8080; this.timeout = Number(process.env.TIMEOUT) || 0; @@ -21,6 +21,6 @@ export class ConfigService { parseBool(value: string | undefined, def: boolean): boolean { if (!value) return def; - return value === "true" || value === "1"; + return value === 'true' || value === '1'; } } diff --git a/src/config/main.ts b/src/config/main.ts index 37dcad3..ea4e219 100644 --- a/src/config/main.ts +++ b/src/config/main.ts @@ -1,4 +1,4 @@ -import { ConfigService } from "./config.service"; +import { ConfigService } from './config.service'; let configSvc: ConfigService | undefined;