diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..7c0b07ae --- /dev/null +++ b/.dockerignore @@ -0,0 +1,14 @@ +# Actor images build from the monorepo root (dockerContextDir in .actor/actor.json). +# Keep the context lean: ship sources + manifests + the pnpm lockfile only. +node_modules +**/node_modules +.git +.turbo +**/dist +**/storage +apify_storage +crawlee_storage +*.log +.DS_Store +.idea +.vscode diff --git a/.github/workflows/on-pull-request.yml b/.github/workflows/on-pull-request.yml index 3b02249d..21013d40 100644 --- a/.github/workflows/on-pull-request.yml +++ b/.github/workflows/on-pull-request.yml @@ -13,6 +13,7 @@ jobs: name: Build & Test if: (!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, 'docs:')) runs-on: ubuntu-22.04 + timeout-minutes: 30 steps: - name: Checkout repository @@ -38,6 +39,7 @@ jobs: lint: name: Lint runs-on: ubuntu-22.04 + timeout-minutes: 30 steps: - name: Checkout repository uses: actions/checkout@v6 diff --git a/.github/workflows/release-generic-actors.yaml b/.github/workflows/release-generic-actors.yaml index 84e6a1f2..ffea7c34 100644 --- a/.github/workflows/release-generic-actors.yaml +++ b/.github/workflows/release-generic-actors.yaml @@ -1,5 +1,4 @@ name: Build generic Actors -description: Build generic Actors and push them to Apify on: workflow_dispatch: @@ -34,6 +33,11 @@ on: type: boolean required: false default: true + sitemap-scraper: + description: apify/sitemap-extractor + type: boolean + required: false + default: true build-channel: description: Build channel type: choice @@ -60,43 +64,68 @@ jobs: matrix: settings: - actor: web-scraper + apify-actor: apify/web-scraper stable-version: '3.0' stable-build-tag: version-3 development-version: '0.0' development-build-tag: development should-build: ${{ github.event.inputs.web-scraper }} - actor: cheerio-scraper + apify-actor: apify/cheerio-scraper stable-version: '3.0' stable-build-tag: version-3 development-version: '0.0' development-build-tag: development should-build: ${{ github.event.inputs.cheerio-scraper }} - actor: playwright-scraper + apify-actor: apify/playwright-scraper stable-version: '1.0' stable-build-tag: version-1 development-version: '0.0' development-build-tag: development should-build: ${{ github.event.inputs.playwright-scraper }} - actor: puppeteer-scraper + apify-actor: apify/puppeteer-scraper stable-version: '3.0' stable-build-tag: version-3 development-version: '0.0' development-build-tag: development should-build: ${{ github.event.inputs.puppeteer-scraper }} - actor: jsdom-scraper + apify-actor: apify/jsdom-scraper stable-version: '0.2' stable-build-tag: version-0 development-version: '0.0' development-build-tag: development should-build: ${{ github.event.inputs.jsdom-scraper }} - actor: camoufox-scraper + apify-actor: apify/camoufox-scraper stable-version: '3.0' stable-build-tag: version-3 development-version: '0.0' development-build-tag: development should-build: ${{ github.event.inputs.camoufox-scraper }} + - actor: sitemap-scraper + apify-actor: apify/sitemap-extractor + stable-version: '0.1' + stable-build-tag: latest + development-version: '0.0' + development-build-tag: development + should-build: ${{ github.event.inputs.sitemap-scraper }} steps: - - uses: actions/checkout@v6 + - name: Check out current SHA + if: matrix.settings.should-build == 'true' + uses: actions/checkout@v6 + + - name: Set up Node.js + if: matrix.settings.should-build == 'true' + uses: actions/setup-node@v6 + with: + node-version: 24 + + - name: Install pnpm and dependencies + if: matrix.settings.should-build == 'true' + uses: apify/actions/pnpm-install@v1.1.2 - name: Log matrix run: | @@ -108,21 +137,24 @@ jobs: if: matrix.settings.should-build == 'true' run: | if [ "${{ github.event.inputs.build-channel }}" = "stable" ]; then - echo "version=${{ matrix.settings.stable-version }}" >> $GITHUB_ENV - echo "build-tag=${{ matrix.settings.stable-build-tag }}" >> $GITHUB_ENV + echo "version=${{ matrix.settings.stable-version }}" >> "$GITHUB_ENV" + echo "build-tag=${{ matrix.settings.stable-build-tag }}" >> "$GITHUB_ENV" elif [ "${{ github.event.inputs.build-channel }}" = "development" ]; then - echo "version=${{ matrix.settings.development-version }}" >> $GITHUB_ENV - echo "build-tag=${{ matrix.settings.development-build-tag }}" >> $GITHUB_ENV + echo "version=${{ matrix.settings.development-version }}" >> "$GITHUB_ENV" + echo "build-tag=${{ matrix.settings.development-build-tag }}" >> "$GITHUB_ENV" else - echo "version=${{ github.event.inputs.version }}" >> $GITHUB_ENV - echo "build-tag=${{ github.event.inputs.build-tag }}" >> $GITHUB_ENV + echo "version=${{ github.event.inputs.version }}" >> "$GITHUB_ENV" + echo "build-tag=${{ github.event.inputs.build-tag }}" >> "$GITHUB_ENV" fi - - name: Build ${{ matrix.settings.actor }} - uses: apify/push-actor-action@master + - name: Build ${{ matrix.settings.actor }} on Apify (Git source) if: matrix.settings.should-build == 'true' - with: - token: ${{ secrets.APIFY_ACTOR_BUILD_TOKEN }} - build-tag: ${{ env.build-tag }} - version: ${{ env.version }} - working-directory: packages/actor-scraper/${{ matrix.settings.actor }} + env: + APIFY_TOKEN: ${{ secrets.APIFY_ACTOR_BUILD_TOKEN }} + APIFY_ACTOR: ${{ matrix.settings.apify-actor }} + BUILD_VERSION: ${{ env.version }} + BUILD_TAG: ${{ env.build-tag }} + APIFY_RELEASE_BUILD_TIMEOUT_SECS: "900" + run: | + set -euo pipefail + node scripts/trigger-apify-build.mjs diff --git a/.github/workflows/test-e2e.yaml b/.github/workflows/test-e2e.yaml index 404d2d93..4b015e3e 100644 --- a/.github/workflows/test-e2e.yaml +++ b/.github/workflows/test-e2e.yaml @@ -13,6 +13,7 @@ jobs: build_and_test: name: Build & Test runs-on: ubuntu-22.04 + timeout-minutes: 60 steps: - name: Cancel Workflow Action @@ -40,6 +41,11 @@ jobs: - name: Install pnpm and dependencies uses: apify/actions/pnpm-install@v1.1.2 + - name: Install browsers + run: | + pnpm exec puppeteer browsers install chrome + pnpm exec playwright install chromium + - name: Build run: pnpm ci:build diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0342fa25..e373a9c7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,14 +14,14 @@ Please provide steps to reproduce if you found a bug or ideally fork the reposit Before you submit your pull request, consider the following guidelines: -- Search [GitHub](https://github.com/apify/apify-sdk-js/pulls) for an open or closed PR that relates to your submission. You don't want to duplicate effort. +- Search [GitHub](https://github.com/apify/actor-scraper/pulls) for an open or closed PR that relates to your submission. You don't want to duplicate effort. -- Fork the project and install NPM dependencies. +- Fork the project and install dependencies with pnpm. - Run tests before you start working, to be sure they all pass and your setup is working correctly: ```sh - npm run test + pnpm test ``` - Be sure to **include appropriate test cases**. Tests help make it clear what the PR is fixing and also make sure the changes won't break over time. diff --git a/package.json b/package.json index fa8314cc..a9c77413 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "apify-sdk-js", + "name": "actor-scraper", "private": true, - "description": "Apify SDK monorepo", + "description": "Apify generic scrapers monorepo", "keywords": [ "apify", "headless", @@ -23,12 +23,12 @@ "license": "Apache-2.0", "repository": { "type": "git", - "url": "git+https://github.com/apify/apify-ts" + "url": "git+https://github.com/apify/actor-scraper.git" }, "bugs": { - "url": "https://github.com/apify/apify-ts/issues" + "url": "https://github.com/apify/actor-scraper/issues" }, - "homepage": "https://sdk.apify.com", + "homepage": "https://github.com/apify/actor-scraper", "scripts": { "prepare": "husky", "prepublishOnly": "turbo run copy", @@ -61,7 +61,7 @@ "@apify/tsconfig": "^0.1.2", "@commitlint/config-conventional": "^20.0.0", "@isaacs/brace-expansion": "^5.0.1", - "@playwright/browser-chromium": "^1.46.0", + "@playwright/browser-chromium": "^1.61.0", "@types/content-type": "^1.1.8", "@types/fs-extra": "^11.0.4", "@types/node": "^24.0.0", @@ -81,8 +81,8 @@ "oxfmt": "0.46.0", "oxlint": "1.62.0", "oxlint-tsgolint": "0.22.0", - "playwright": "^1.46.0", - "puppeteer": "^24.0.0", + "playwright": "^1.61.0", + "puppeteer": "25.2.0", "rimraf": "^6.0.1", "tsx": "^4.16.5", "turbo": "2.9.1", diff --git a/packages/actor-scraper/camoufox-scraper/.actor/actor.json b/packages/actor-scraper/camoufox-scraper/.actor/actor.json index 3606f908..bdcd2843 100644 --- a/packages/actor-scraper/camoufox-scraper/.actor/actor.json +++ b/packages/actor-scraper/camoufox-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "camoufox-scraper", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "storages": { "dataset": { "actorSpecification": 1, diff --git a/packages/actor-scraper/camoufox-scraper/.dockerignore b/packages/actor-scraper/camoufox-scraper/.dockerignore deleted file mode 100644 index d421f7a7..00000000 --- a/packages/actor-scraper/camoufox-scraper/.dockerignore +++ /dev/null @@ -1,12 +0,0 @@ -# configurations -.idea - -# crawlee and apify storage folders -apify_storage -crawlee_storage -storage -dist -!./storage/key_value_stores/default/INPUT.json - -# installed files -node_modules diff --git a/packages/actor-scraper/camoufox-scraper/Dockerfile b/packages/actor-scraper/camoufox-scraper/Dockerfile index a58adf7a..6a5c00f6 100644 --- a/packages/actor-scraper/camoufox-scraper/Dockerfile +++ b/packages/actor-scraper/camoufox-scraper/Dockerfile @@ -1,31 +1,45 @@ -FROM apify/actor-node-playwright-camoufox:22 AS builder +# Build context is the monorepo root (dockerContextDir in .actor/actor.json), so the build uses the +# root pnpm-lock.yaml for a deterministic install. +# +# The base is pinned by digest (reproducible Camoufox binary + OS deps). The actor pins playwright and +# camoufox-js to the versions this base ships (24-1.59.1 -> playwright 1.59.1, camoufox-js 0.11.1) and +# bundles them, so the bundled drivers match the Camoufox binary they drive. The binary itself lives in +# ~/.cache/camoufox (outside node_modules) and stays in the base. Tag 24-1.59.1 is the newest Camoufox +# base that survives page JS errors (24-1.60.0 crashes the process on them). +FROM apify/actor-node-playwright-camoufox:24-1.59.1@sha256:eadc96fa9492284eb45ef70b6b91c841fae7f142d25a22ae2887a21bb78b3469 AS builder -COPY --chown=myuser package*.json ./ +# The browser base runs as `myuser`; the build stage needs root for corepack + a writable workdir. +USER root +WORKDIR /app -RUN npm install --include=dev --audit=false +RUN corepack enable -COPY --chown=myuser . ./ +# Browsers ship with the base image; never let an npm postinstall download them. +ENV PUPPETEER_SKIP_DOWNLOAD=true \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 -RUN npm run build +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). +COPY . ./ -FROM apify/actor-node-playwright-camoufox:22 +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter actor-camoufox-scraper... -COPY --from=builder --chown=myuser /home/myuser/dist ./dist +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter actor-camoufox-scraper... build -COPY --chown=myuser package*.json ./ +# Self-contained production bundle; inject-workspace-packages copies the built @apify/scraper-tools +# into node_modules instead of symlinking it. The native better-sqlite3 binding (a camoufox-js dep) is +# compiled here against the base's Node 24, and the runtime stage uses that same base, so it matches. +RUN pnpm --config.inject-workspace-packages=true --filter actor-camoufox-scraper deploy --prod /deploy -RUN npm --quiet set progress=false \ - && npm install --omit=dev \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +FROM apify/actor-node-playwright-camoufox:24-1.59.1@sha256:eadc96fa9492284eb45ef70b6b91c841fae7f142d25a22ae2887a21bb78b3469 -COPY --chown=myuser . ./ +# Base WORKDIR is /home/myuser and ships the Xvfb entrypoint plus the Camoufox binary in +# ~/.cache/camoufox (outside node_modules). Replace only the template node_modules with the lean +# production bundle (which carries the matching playwright + camoufox-js); the binary stays in the base. +RUN rm -rf node_modules +COPY --from=builder --chown=myuser /deploy ./ ENV APIFY_DISABLE_OUTDATED_WARNING=1 -CMD ./start_xvfb_and_run_cmd.sh && npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/camoufox-scraper/package.json b/packages/actor-scraper/camoufox-scraper/package.json index b109f7a1..bafcabbf 100644 --- a/packages/actor-scraper/camoufox-scraper/package.json +++ b/packages/actor-scraper/camoufox-scraper/package.json @@ -10,9 +10,10 @@ "@crawlee/playwright": "^3.14.1", "@crawlee/utils": "^3.14.1", "apify": "^3.2.6", - "camoufox-js": "^0.9.0", + "camoufox-js": "0.11.1", "idcac-playwright": "^0.2.0", - "playwright": "*" + "playwright": "1.59.1", + "playwright-core": "1.59.1" }, "devDependencies": { "@apify/tsconfig": "^0.1.0", @@ -22,13 +23,12 @@ }, "scripts": { "start": "pnpm start:dev", - "start:prod": "node dist/main.js", "start:dev": "tsx src/main.ts", "build": "tsc" }, "repository": { "type": "git", - "url": "https://github.com/apify/apify-sdk-js" + "url": "https://github.com/apify/actor-scraper" }, "author": { "name": "Apify Technologies", @@ -36,5 +36,5 @@ "url": "https://apify.com" }, "license": "Apache-2.0", - "homepage": "https://github.com/apify/apify-sdk-js" + "homepage": "https://github.com/apify/actor-scraper" } diff --git a/packages/actor-scraper/camoufox-scraper/src/internals/crawler_setup.ts b/packages/actor-scraper/camoufox-scraper/src/internals/crawler_setup.ts index 88b5f9cb..deb81782 100644 --- a/packages/actor-scraper/camoufox-scraper/src/internals/crawler_setup.ts +++ b/packages/actor-scraper/camoufox-scraper/src/internals/crawler_setup.ts @@ -18,7 +18,6 @@ import type { ApifyEnv } from 'apify'; import { Actor } from 'apify'; import { launchOptions } from 'camoufox-js'; import { getInjectableScript } from 'idcac-playwright'; -import type { Response } from 'playwright'; import { firefox } from 'playwright'; import type { CrawlerSetupOptions, RequestMetadata } from '@apify/scraper-tools'; @@ -201,7 +200,11 @@ export class CrawlerSetup implements CrawlerSetupOptions { ...this.input, humanize: this.input.humanize ? Number(this.input.humanize) : 0, }), - } as PlaywrightLaunchContext, + // `firefox` and @crawlee/playwright's PlaywrightLaunchContext resolve to two different + // playwright-core copies (camoufox pins playwright 1.59.1 to match its base image, + // while the rest of the workspace is on 1.61.0), so the BrowserType identities don't + // line up. This is a workspace dual-install, not a camoufox-js/crawlee issue. + } as unknown as PlaywrightLaunchContext, useSessionPool: true, persistCookiesPerSession: true, sessionPoolOptions: { @@ -392,7 +395,7 @@ export class CrawlerSetup implements CrawlerSetupOptions { private async _handleResult( request: Request, - response?: Response, + response?: PlaywrightCrawlingContext['response'], pageFunctionResult?: Dictionary, isError?: boolean, ) { diff --git a/packages/actor-scraper/cheerio-scraper/.actor/actor.json b/packages/actor-scraper/cheerio-scraper/.actor/actor.json index 5b6865ea..26d612ef 100644 --- a/packages/actor-scraper/cheerio-scraper/.actor/actor.json +++ b/packages/actor-scraper/cheerio-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "cheerio-scraper", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "storages": { "dataset": { "actorSpecification": 1, diff --git a/packages/actor-scraper/cheerio-scraper/.dockerignore b/packages/actor-scraper/cheerio-scraper/.dockerignore deleted file mode 100644 index ceb85b1c..00000000 --- a/packages/actor-scraper/cheerio-scraper/.dockerignore +++ /dev/null @@ -1,10 +0,0 @@ -# configurations -.idea - -# crawlee and apify storage folders -apify_storage -crawlee_storage -storage - -# installed files -node_modules diff --git a/packages/actor-scraper/cheerio-scraper/Dockerfile b/packages/actor-scraper/cheerio-scraper/Dockerfile index d166d657..951f030d 100644 --- a/packages/actor-scraper/cheerio-scraper/Dockerfile +++ b/packages/actor-scraper/cheerio-scraper/Dockerfile @@ -1,32 +1,37 @@ -FROM apify/actor-node:22 AS builder +# Build context is the monorepo root (set via dockerContextDir in .actor/actor.json), +# so the build can use the pnpm workspace lockfile for a deterministic install. +FROM apify/actor-node:24 AS builder -COPY package*.json ./ +WORKDIR /app -RUN npm install --include=dev --audit=false +RUN corepack enable +# Browser packages can appear transitively through workspace/dev tooling, but this actor does not +# use them. Keep the deterministic install without downloading browser binaries into the build cache. +ENV PUPPETEER_SKIP_DOWNLOAD=true \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 + +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). COPY . ./ -RUN npm run build +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter actor-cheerio-scraper... -FROM apify/actor-node:22 +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter actor-cheerio-scraper... build -COPY --from=builder /usr/src/app/dist ./dist +# Self-contained production bundle. inject-workspace-packages copies the built +# @apify/scraper-tools (a runtime workspace dep) into node_modules instead of symlinking it. +RUN pnpm --config.inject-workspace-packages=true --filter actor-cheerio-scraper deploy --prod /deploy -COPY package*.json ./ +FROM apify/actor-node:24 -RUN rm -rf node_modules \ - && npm --quiet set progress=false \ - && npm install --omit=dev --omit=optional \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +WORKDIR /usr/src/app -COPY . ./ +# Replace the base image's template with only the lean production bundle. +RUN find /usr/src/app -mindepth 1 -delete +COPY --from=builder /deploy ./ ENV APIFY_DISABLE_OUTDATED_WARNING=1 -CMD npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/cheerio-scraper/README.md b/packages/actor-scraper/cheerio-scraper/README.md index 8370736d..2ade93fd 100644 --- a/packages/actor-scraper/cheerio-scraper/README.md +++ b/packages/actor-scraper/cheerio-scraper/README.md @@ -183,7 +183,7 @@ async function pageFunction(context) { } ``` -The code runs in [Node.js 16](https://nodejs.org/) and the function accepts a single argument, the `context` object, whose properties are listed below. +The code runs in [Node.js 22](https://nodejs.org/) and the function accepts a single argument, the `context` object, whose properties are listed below. The return value of the page function is an object (or an array of objects) representing the data extracted from the web page. The return value must be stringify-able to JSON, i.e. it can only contain basic types and no circular references. If you prefer not to extract any data from the page and skip it in the clean results, simply return `null` or `undefined`. diff --git a/packages/actor-scraper/cheerio-scraper/package.json b/packages/actor-scraper/cheerio-scraper/package.json index 761742d8..398bf560 100644 --- a/packages/actor-scraper/cheerio-scraper/package.json +++ b/packages/actor-scraper/cheerio-scraper/package.json @@ -20,13 +20,12 @@ }, "scripts": { "start": "pnpm start:dev", - "start:prod": "node dist/main.js", "start:dev": "tsx src/main.ts", "build": "tsc" }, "repository": { "type": "git", - "url": "https://github.com/apify/apify-sdk-js" + "url": "https://github.com/apify/actor-scraper" }, "author": { "name": "Apify Technologies", @@ -38,5 +37,5 @@ "Ondra Urban " ], "license": "Apache-2.0", - "homepage": "https://github.com/apify/apify-sdk-js" + "homepage": "https://github.com/apify/actor-scraper" } diff --git a/packages/actor-scraper/jsdom-scraper/.actor/actor.json b/packages/actor-scraper/jsdom-scraper/.actor/actor.json index 9c0ee735..8006d165 100644 --- a/packages/actor-scraper/jsdom-scraper/.actor/actor.json +++ b/packages/actor-scraper/jsdom-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "jsdom-scraper", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "storages": { "dataset": { "actorSpecification": 1, diff --git a/packages/actor-scraper/jsdom-scraper/.dockerignore b/packages/actor-scraper/jsdom-scraper/.dockerignore deleted file mode 100644 index ceb85b1c..00000000 --- a/packages/actor-scraper/jsdom-scraper/.dockerignore +++ /dev/null @@ -1,10 +0,0 @@ -# configurations -.idea - -# crawlee and apify storage folders -apify_storage -crawlee_storage -storage - -# installed files -node_modules diff --git a/packages/actor-scraper/jsdom-scraper/Dockerfile b/packages/actor-scraper/jsdom-scraper/Dockerfile index 54e0f35f..b656ed8e 100644 --- a/packages/actor-scraper/jsdom-scraper/Dockerfile +++ b/packages/actor-scraper/jsdom-scraper/Dockerfile @@ -1,29 +1,37 @@ -FROM apify/actor-node:22 AS builder +# Build context is the monorepo root (set via dockerContextDir in .actor/actor.json), +# so the build can use the pnpm workspace lockfile for a deterministic install. +FROM apify/actor-node:24 AS builder -COPY package*.json ./ +WORKDIR /app -RUN npm install --include=dev --audit=false +RUN corepack enable +# Browser packages can appear transitively through workspace/dev tooling, but this actor does not +# use them. Keep the deterministic install without downloading browser binaries into the build cache. +ENV PUPPETEER_SKIP_DOWNLOAD=true \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 + +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). COPY . ./ -RUN npm run build +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter actor-jsdom-scraper... -FROM apify/actor-node:22 +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter actor-jsdom-scraper... build -COPY --from=builder /usr/src/app/dist ./dist +# Self-contained production bundle; inject-workspace-packages copies the built +# @apify/scraper-tools (a runtime workspace dep) into node_modules instead of symlinking it. +RUN pnpm --config.inject-workspace-packages=true --filter actor-jsdom-scraper deploy --prod /deploy -COPY package*.json ./ +FROM apify/actor-node:24 -RUN npm --quiet set progress=false \ - && npm install --omit=dev --omit=optional \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +WORKDIR /usr/src/app -COPY . ./ +# Replace the base image's template with only the lean production bundle. +RUN find /usr/src/app -mindepth 1 -delete +COPY --from=builder /deploy ./ + +ENV APIFY_DISABLE_OUTDATED_WARNING=1 -CMD npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/jsdom-scraper/README.md b/packages/actor-scraper/jsdom-scraper/README.md index d9162c80..d2441f7f 100644 --- a/packages/actor-scraper/jsdom-scraper/README.md +++ b/packages/actor-scraper/jsdom-scraper/README.md @@ -150,7 +150,7 @@ async function pageFunction(context) { } ``` -The code runs in [Node.js 16](https://nodejs.org/) and the function accepts a single argument, the `context` object, whose properties are listed below. +The code runs in [Node.js 22](https://nodejs.org/) and the function accepts a single argument, the `context` object, whose properties are listed below. The return value of the page function is an object (or an array of objects) representing the data extracted from the web page. The return value must be stringify-able to JSON, i.e. it can only contain basic types and no circular references. If you prefer not to extract any data from the page and skip it in the clean results, simply return `null` or `undefined`. diff --git a/packages/actor-scraper/jsdom-scraper/package.json b/packages/actor-scraper/jsdom-scraper/package.json index 71736154..59b03ffd 100644 --- a/packages/actor-scraper/jsdom-scraper/package.json +++ b/packages/actor-scraper/jsdom-scraper/package.json @@ -20,13 +20,12 @@ }, "scripts": { "start": "pnpm start:dev", - "start:prod": "node dist/main.js", "start:dev": "tsx src/main.ts", "build": "tsc" }, "repository": { "type": "git", - "url": "https://github.com/apify/apify-sdk-js" + "url": "https://github.com/apify/actor-scraper" }, "author": { "name": "Apify Technologies", @@ -38,5 +37,5 @@ "Ondra Urban " ], "license": "Apache-2.0", - "homepage": "https://github.com/apify/apify-sdk-js" + "homepage": "https://github.com/apify/actor-scraper" } diff --git a/packages/actor-scraper/playwright-scraper/.actor/actor.json b/packages/actor-scraper/playwright-scraper/.actor/actor.json index f9eaf9ba..239f360b 100644 --- a/packages/actor-scraper/playwright-scraper/.actor/actor.json +++ b/packages/actor-scraper/playwright-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "playwright-scraper", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "storages": { "dataset": { "actorSpecification": 1, diff --git a/packages/actor-scraper/playwright-scraper/.dockerignore b/packages/actor-scraper/playwright-scraper/.dockerignore deleted file mode 100644 index ceb85b1c..00000000 --- a/packages/actor-scraper/playwright-scraper/.dockerignore +++ /dev/null @@ -1,10 +0,0 @@ -# configurations -.idea - -# crawlee and apify storage folders -apify_storage -crawlee_storage -storage - -# installed files -node_modules diff --git a/packages/actor-scraper/playwright-scraper/Dockerfile b/packages/actor-scraper/playwright-scraper/Dockerfile index 746a0d6d..38fd7539 100644 --- a/packages/actor-scraper/playwright-scraper/Dockerfile +++ b/packages/actor-scraper/playwright-scraper/Dockerfile @@ -1,31 +1,42 @@ -FROM apify/actor-node-playwright:22 AS builder +# Build context is the monorepo root (dockerContextDir in .actor/actor.json), so the build uses the +# root pnpm-lock.yaml for a deterministic install. +# +# The base is pinned by digest (reproducible Chromium + OS deps). The actor pins playwright to the +# version this base ships (24-1.61.0 -> playwright 1.61.0) and bundles it, so the bundled driver +# matches the Chromium binary it drives. Renovate bumps the base digest and the playwright pin together. +FROM apify/actor-node-playwright:24-1.61.0@sha256:5c0155bb5a0a90572ef021c2b4e2e195c50971e0c1ae00f081ffa47e62036c60 AS builder -COPY --chown=myuser package*.json ./ +# The browser base runs as `myuser`; the build stage needs root for corepack + a writable workdir. +USER root +WORKDIR /app -RUN npm install --include=dev --audit=false +RUN corepack enable -COPY --chown=myuser . ./ +# Browsers ship with the base image; never let an npm postinstall download them. +ENV PUPPETEER_SKIP_DOWNLOAD=true \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 -RUN npm run build +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). +COPY . ./ -FROM apify/actor-node-playwright:22 +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter actor-playwright-scraper... -COPY --from=builder --chown=myuser /home/myuser/dist ./dist +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter actor-playwright-scraper... build -COPY --chown=myuser package*.json ./ +# Self-contained production bundle; inject-workspace-packages copies the built @apify/scraper-tools +# into node_modules instead of symlinking it. +RUN pnpm --config.inject-workspace-packages=true --filter actor-playwright-scraper deploy --prod /deploy -RUN npm --quiet set progress=false \ - && npm install --omit=dev --omit=optional \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +FROM apify/actor-node-playwright:24-1.61.0@sha256:5c0155bb5a0a90572ef021c2b4e2e195c50971e0c1ae00f081ffa47e62036c60 -COPY --chown=myuser . ./ +# Base WORKDIR is /home/myuser and ships the browser plus the Xvfb entrypoint. Replace only the +# template node_modules with the lean production bundle (which carries the matching playwright); the +# browser binary itself stays in the base image. +RUN rm -rf node_modules +COPY --from=builder --chown=myuser /deploy ./ ENV APIFY_DISABLE_OUTDATED_WARNING=1 -CMD ./start_xvfb_and_run_cmd.sh && npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/playwright-scraper/package.json b/packages/actor-scraper/playwright-scraper/package.json index 4bc099fb..590d5789 100644 --- a/packages/actor-scraper/playwright-scraper/package.json +++ b/packages/actor-scraper/playwright-scraper/package.json @@ -11,7 +11,7 @@ "@crawlee/utils": "^3.16.0", "apify": "^3.2.6", "idcac-playwright": "^0.2.0", - "playwright": "*" + "playwright": "1.61.0" }, "devDependencies": { "@apify/tsconfig": "^0.1.0", @@ -21,13 +21,12 @@ }, "scripts": { "start": "pnpm start:dev", - "start:prod": "node dist/main.js", "start:dev": "tsx src/main.ts", "build": "tsc" }, "repository": { "type": "git", - "url": "https://github.com/apify/apify-sdk-js" + "url": "https://github.com/apify/actor-scraper" }, "author": { "name": "Apify Technologies", @@ -35,5 +34,5 @@ "url": "https://apify.com" }, "license": "Apache-2.0", - "homepage": "https://github.com/apify/apify-sdk-js" + "homepage": "https://github.com/apify/actor-scraper" } diff --git a/packages/actor-scraper/puppeteer-scraper/.actor/actor.json b/packages/actor-scraper/puppeteer-scraper/.actor/actor.json index befa39d2..d4e0190a 100644 --- a/packages/actor-scraper/puppeteer-scraper/.actor/actor.json +++ b/packages/actor-scraper/puppeteer-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "puppeteer-scraper", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "storages": { "dataset": { "actorSpecification": 1, diff --git a/packages/actor-scraper/puppeteer-scraper/.dockerignore b/packages/actor-scraper/puppeteer-scraper/.dockerignore deleted file mode 100644 index ceb85b1c..00000000 --- a/packages/actor-scraper/puppeteer-scraper/.dockerignore +++ /dev/null @@ -1,10 +0,0 @@ -# configurations -.idea - -# crawlee and apify storage folders -apify_storage -crawlee_storage -storage - -# installed files -node_modules diff --git a/packages/actor-scraper/puppeteer-scraper/Dockerfile b/packages/actor-scraper/puppeteer-scraper/Dockerfile index 8f126a23..733f1aca 100644 --- a/packages/actor-scraper/puppeteer-scraper/Dockerfile +++ b/packages/actor-scraper/puppeteer-scraper/Dockerfile @@ -1,31 +1,45 @@ -FROM apify/actor-node-puppeteer-chrome:22 AS builder +# Build context is the monorepo root (dockerContextDir in .actor/actor.json), so the build uses the +# root pnpm-lock.yaml for a deterministic install. +# +# The base is pinned by digest (reproducible Chrome + OS deps). The actor pins puppeteer to the version +# this base ships (24-25.2.0 -> puppeteer 25.2.0) and bundles it, so the bundled driver matches the +# Chrome binary it drives. Renovate bumps the base digest and the puppeteer pin together. +FROM apify/actor-node-puppeteer-chrome:24-25.2.0@sha256:e9f588cd827e542bdc7b476be7dd3ba87b8ca3b4136e2e081e5fa0e3c940d50d AS builder -COPY --chown=myuser package*.json ./ +# The browser base runs as `myuser`; the build stage needs root for corepack + a writable workdir. +USER root +WORKDIR /app -RUN npm install --include=dev --audit=false +RUN corepack enable -COPY --chown=myuser . ./ +# Browsers ship with the base image; never let an npm postinstall download them. +ENV PUPPETEER_SKIP_DOWNLOAD=true \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 -RUN npm run build +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). +COPY . ./ -FROM apify/actor-node-puppeteer-chrome:22 +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter actor-puppeteer-scraper... -COPY --from=builder --chown=myuser /home/myuser/dist ./dist +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter actor-puppeteer-scraper... build -COPY --chown=myuser package*.json ./ +# Self-contained production bundle; inject-workspace-packages copies the built @apify/scraper-tools +# into node_modules instead of symlinking it. +RUN pnpm --config.inject-workspace-packages=true --filter actor-puppeteer-scraper deploy --prod /deploy -RUN npm --quiet set progress=false \ - && npm install --omit=dev --omit=optional \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +FROM apify/actor-node-puppeteer-chrome:24-25.2.0@sha256:e9f588cd827e542bdc7b476be7dd3ba87b8ca3b4136e2e081e5fa0e3c940d50d -COPY --chown=myuser . ./ +# Base WORKDIR is /home/myuser and ships Chrome plus the Xvfb entrypoint. Replace only the template +# node_modules with the lean production bundle (which carries the matching puppeteer); Chrome itself +# stays in the base image. +RUN rm -rf node_modules +COPY --from=builder --chown=myuser /deploy ./ -ENV APIFY_DISABLE_OUTDATED_WARNING=1 +# The base announces its Chrome via APIFY_CHROME_EXECUTABLE_PATH, but apify@3.7/crawlee@3.16 read only +# PUPPETEER_EXECUTABLE_PATH — mirror the base's own value so we follow whatever Chrome the base ships. +ENV PUPPETEER_EXECUTABLE_PATH=${APIFY_CHROME_EXECUTABLE_PATH} \ + APIFY_DISABLE_OUTDATED_WARNING=1 -CMD ./start_xvfb_and_run_cmd.sh && npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/puppeteer-scraper/package.json b/packages/actor-scraper/puppeteer-scraper/package.json index e1d06fae..6f54b5b4 100644 --- a/packages/actor-scraper/puppeteer-scraper/package.json +++ b/packages/actor-scraper/puppeteer-scraper/package.json @@ -9,7 +9,7 @@ "@crawlee/puppeteer": "^3.16.0", "apify": "^3.2.6", "idcac-playwright": "^0.2.0", - "puppeteer": "*" + "puppeteer": "25.2.0" }, "devDependencies": { "@apify/tsconfig": "^0.1.0", @@ -19,13 +19,12 @@ }, "scripts": { "start": "pnpm start:dev", - "start:prod": "node dist/main.js", "start:dev": "tsx src/main.ts", "build": "tsc" }, "repository": { "type": "git", - "url": "https://github.com/apify/apify-sdk-js" + "url": "https://github.com/apify/actor-scraper" }, "author": { "name": "Apify Technologies", @@ -37,5 +36,5 @@ "Ondra Urban " ], "license": "Apache-2.0", - "homepage": "https://github.com/apify/apify-sdk-js" + "homepage": "https://github.com/apify/actor-scraper" } diff --git a/packages/actor-scraper/sitemap-scraper/.actor/actor.json b/packages/actor-scraper/sitemap-scraper/.actor/actor.json index a4918ed5..7102cd45 100644 --- a/packages/actor-scraper/sitemap-scraper/.actor/actor.json +++ b/packages/actor-scraper/sitemap-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "sitemap-extractor", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "output": "./output_schema.json", "defaultMemoryMbytes": 4096, "minMemoryMbytes": 256, diff --git a/packages/actor-scraper/sitemap-scraper/.dockerignore b/packages/actor-scraper/sitemap-scraper/.dockerignore deleted file mode 100644 index ceb85b1c..00000000 --- a/packages/actor-scraper/sitemap-scraper/.dockerignore +++ /dev/null @@ -1,10 +0,0 @@ -# configurations -.idea - -# crawlee and apify storage folders -apify_storage -crawlee_storage -storage - -# installed files -node_modules diff --git a/packages/actor-scraper/sitemap-scraper/Dockerfile b/packages/actor-scraper/sitemap-scraper/Dockerfile index 7a9a21d9..b51b69f6 100644 --- a/packages/actor-scraper/sitemap-scraper/Dockerfile +++ b/packages/actor-scraper/sitemap-scraper/Dockerfile @@ -1,32 +1,37 @@ -FROM apify/actor-node:22 AS builder +# Build context is the monorepo root (set via dockerContextDir in .actor/actor.json), +# so the build can use the pnpm workspace lockfile for a deterministic install. +FROM apify/actor-node:24 AS builder -COPY package*.json ./ +WORKDIR /app -RUN npm install --include=dev --audit=false --force +RUN corepack enable +# Browser packages can appear transitively through workspace/dev tooling, but this actor does not +# use them. Keep the deterministic install without downloading browser binaries into the build cache. +ENV PUPPETEER_SKIP_DOWNLOAD=true \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 + +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). COPY . ./ -RUN npm run build +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter @apify/actor-sitemap-extractor... -FROM apify/actor-node:22 +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter @apify/actor-sitemap-extractor... build -COPY --from=builder /usr/src/app/dist ./dist +# Self-contained production bundle; inject-workspace-packages copies the built +# @apify/scraper-tools (a runtime workspace dep) into node_modules instead of symlinking it. +RUN pnpm --config.inject-workspace-packages=true --filter @apify/actor-sitemap-extractor deploy --prod /deploy -COPY package*.json ./ +FROM apify/actor-node:24 -RUN rm -rf node_modules \ - && npm --quiet set progress=false \ - && npm install --omit=dev --force \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +WORKDIR /usr/src/app -COPY . ./ +# Replace the base image's template with only the lean production bundle. +RUN find /usr/src/app -mindepth 1 -delete +COPY --from=builder /deploy ./ ENV APIFY_DISABLE_OUTDATED_WARNING=1 -CMD npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/sitemap-scraper/package.json b/packages/actor-scraper/sitemap-scraper/package.json index 5216245f..4b2be9e9 100644 --- a/packages/actor-scraper/sitemap-scraper/package.json +++ b/packages/actor-scraper/sitemap-scraper/package.json @@ -6,17 +6,17 @@ "type": "module", "dependencies": { "@apify/scraper-tools": "^1.1.4", - "@crawlee/core": "4.0.0-beta.43", - "@crawlee/http": "4.0.0-beta.43", - "@crawlee/impit-client": "4.0.0-beta.43", - "@crawlee/types": "4.0.0-beta.43", - "@crawlee/utils": "4.0.0-beta.43", + "@crawlee/core": "4.0.0-beta.25", + "@crawlee/http": "4.0.0-beta.25", + "@crawlee/impit-client": "4.0.0-beta.29", + "@crawlee/types": "4.0.0-beta.25", + "@crawlee/utils": "4.0.0-beta.25", "apify": "4.0.0-beta.12" }, "overrides": { - "@crawlee/core": "4.0.0-beta.43", - "@crawlee/types": "4.0.0-beta.43", - "@crawlee/utils": "4.0.0-beta.43" + "@crawlee/core": "4.0.0-beta.25", + "@crawlee/types": "4.0.0-beta.25", + "@crawlee/utils": "4.0.0-beta.25" }, "devDependencies": { "@apify/tsconfig": "^0.1.0", @@ -26,7 +26,6 @@ }, "scripts": { "start": "pnpm start:dev", - "start:prod": "node dist/main.js", "start:dev": "tsx src/main.ts", "build": "tsc" }, diff --git a/packages/actor-scraper/sitemap-scraper/src/internals/crawler_setup.ts b/packages/actor-scraper/sitemap-scraper/src/internals/crawler_setup.ts index cbee0c79..7930ee28 100644 --- a/packages/actor-scraper/sitemap-scraper/src/internals/crawler_setup.ts +++ b/packages/actor-scraper/sitemap-scraper/src/internals/crawler_setup.ts @@ -302,9 +302,9 @@ export class CrawlerSetup { }, // this scraper just outputs the returned status code, so we don't treat any as an error ignoreHttpErrorStatusCodes: Array.from({ length: 100 }, (_, i) => 500 + i), - blockedStatusCodes: [], persistCookiesPerSession: false, sessionPoolOptions: { + blockedStatusCodes: [], sessionOptions: { maxUsageCount: this.maxSessionUsageCount, }, diff --git a/packages/actor-scraper/sitemap-scraper/test/runtime-compat.test.ts b/packages/actor-scraper/sitemap-scraper/test/runtime-compat.test.ts new file mode 100644 index 00000000..d9d74bd5 --- /dev/null +++ b/packages/actor-scraper/sitemap-scraper/test/runtime-compat.test.ts @@ -0,0 +1,8 @@ +import { Configuration } from 'apify'; +import { describe, expect, it } from 'vitest'; + +describe('Apify and Crawlee runtime compatibility', () => { + it('initializes the global Apify configuration', () => { + expect(() => Configuration.getGlobalConfig()).not.toThrow(); + }); +}); diff --git a/packages/actor-scraper/web-scraper/.actor/actor.json b/packages/actor-scraper/web-scraper/.actor/actor.json index ac6aed72..f7fb9862 100644 --- a/packages/actor-scraper/web-scraper/.actor/actor.json +++ b/packages/actor-scraper/web-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "web-scraper", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "storages": { "dataset": { "actorSpecification": 1, diff --git a/packages/actor-scraper/web-scraper/.dockerignore b/packages/actor-scraper/web-scraper/.dockerignore deleted file mode 100644 index ceb85b1c..00000000 --- a/packages/actor-scraper/web-scraper/.dockerignore +++ /dev/null @@ -1,10 +0,0 @@ -# configurations -.idea - -# crawlee and apify storage folders -apify_storage -crawlee_storage -storage - -# installed files -node_modules diff --git a/packages/actor-scraper/web-scraper/Dockerfile b/packages/actor-scraper/web-scraper/Dockerfile index 8f126a23..c7831f6c 100644 --- a/packages/actor-scraper/web-scraper/Dockerfile +++ b/packages/actor-scraper/web-scraper/Dockerfile @@ -1,31 +1,45 @@ -FROM apify/actor-node-puppeteer-chrome:22 AS builder +# Build context is the monorepo root (dockerContextDir in .actor/actor.json), so the build uses the +# root pnpm-lock.yaml for a deterministic install. +# +# The base is pinned by digest (reproducible Chrome + OS deps). The actor pins puppeteer to the version +# this base ships (24-25.2.0 -> puppeteer 25.2.0) and bundles it, so the bundled driver matches the +# Chrome binary it drives. Renovate bumps the base digest and the puppeteer pin together. +FROM apify/actor-node-puppeteer-chrome:24-25.2.0@sha256:e9f588cd827e542bdc7b476be7dd3ba87b8ca3b4136e2e081e5fa0e3c940d50d AS builder -COPY --chown=myuser package*.json ./ +# The browser base runs as `myuser`; the build stage needs root for corepack + a writable workdir. +USER root +WORKDIR /app -RUN npm install --include=dev --audit=false +RUN corepack enable -COPY --chown=myuser . ./ +# Browsers ship with the base image; never let an npm postinstall download them. +ENV PUPPETEER_SKIP_DOWNLOAD=true \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 -RUN npm run build +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). +COPY . ./ -FROM apify/actor-node-puppeteer-chrome:22 +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter actor-web-scraper... -COPY --from=builder --chown=myuser /home/myuser/dist ./dist +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter actor-web-scraper... build -COPY --chown=myuser package*.json ./ +# Self-contained production bundle; inject-workspace-packages copies the built @apify/scraper-tools +# into node_modules instead of symlinking it. +RUN pnpm --config.inject-workspace-packages=true --filter actor-web-scraper deploy --prod /deploy -RUN npm --quiet set progress=false \ - && npm install --omit=dev --omit=optional \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +FROM apify/actor-node-puppeteer-chrome:24-25.2.0@sha256:e9f588cd827e542bdc7b476be7dd3ba87b8ca3b4136e2e081e5fa0e3c940d50d -COPY --chown=myuser . ./ +# Base WORKDIR is /home/myuser and ships Chrome plus the Xvfb entrypoint. Replace only the template +# node_modules with the lean production bundle (which carries the matching puppeteer); Chrome itself +# stays in the base image. +RUN rm -rf node_modules +COPY --from=builder --chown=myuser /deploy ./ -ENV APIFY_DISABLE_OUTDATED_WARNING=1 +# The base announces its Chrome via APIFY_CHROME_EXECUTABLE_PATH, but apify@3.7/crawlee@3.16 read only +# PUPPETEER_EXECUTABLE_PATH — mirror the base's own value so we follow whatever Chrome the base ships. +ENV PUPPETEER_EXECUTABLE_PATH=${APIFY_CHROME_EXECUTABLE_PATH} \ + APIFY_DISABLE_OUTDATED_WARNING=1 -CMD ./start_xvfb_and_run_cmd.sh && npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/web-scraper/package.json b/packages/actor-scraper/web-scraper/package.json index 3b7343e3..3565d48e 100644 --- a/packages/actor-scraper/web-scraper/package.json +++ b/packages/actor-scraper/web-scraper/package.json @@ -10,10 +10,9 @@ "@crawlee/puppeteer": "^3.16.0", "apify": "^3.2.6", "content-type": "^1.0.5", - "crawlee": "^3.16.0", "devtools-server": "^0.0.2", "idcac-playwright": "^0.2.0", - "puppeteer": "*" + "puppeteer": "25.2.0" }, "devDependencies": { "@apify/tsconfig": "^0.1.0", @@ -24,13 +23,12 @@ }, "scripts": { "start": "pnpm start:dev", - "start:prod": "node dist/main.js", "start:dev": "tsx src/main.ts", "build": "tsc" }, "repository": { "type": "git", - "url": "https://github.com/apify/apify-sdk-js" + "url": "https://github.com/apify/actor-scraper" }, "author": { "name": "Apify Technologies", @@ -42,5 +40,5 @@ "Ondra Urban " ], "license": "Apache-2.0", - "homepage": "https://github.com/apify/apify-sdk-js" + "homepage": "https://github.com/apify/actor-scraper" } diff --git a/packages/actor-scraper/web-scraper/src/internals/crawler_setup.ts b/packages/actor-scraper/web-scraper/src/internals/crawler_setup.ts index 3cfa3168..88813605 100644 --- a/packages/actor-scraper/web-scraper/src/internals/crawler_setup.ts +++ b/packages/actor-scraper/web-scraper/src/internals/crawler_setup.ts @@ -23,11 +23,11 @@ import { } from '@crawlee/puppeteer'; import type { ApifyEnv } from 'apify'; import { Actor } from 'apify'; +import type { HTTPResponse, Page } from 'puppeteer'; import contentType from 'content-type'; // @ts-expect-error no typings import DevToolsServer from 'devtools-server'; import { getInjectableScript } from 'idcac-playwright'; -import type { HTTPResponse, Page } from 'puppeteer'; import type { CrawlerSetupOptions, createContext } from '@apify/scraper-tools'; import { browserTools, constants as scraperToolsConstants, tools } from '@apify/scraper-tools'; diff --git a/packages/scraper-tools/package.json b/packages/scraper-tools/package.json index 4d8b4564..99c46ae6 100644 --- a/packages/scraper-tools/package.json +++ b/packages/scraper-tools/package.json @@ -21,9 +21,10 @@ "license": "Apache-2.0", "repository": { "type": "git", - "url": "git+https://github.com/apify/apify-sdk-js" + "url": "git+https://github.com/apify/actor-scraper.git", + "directory": "packages/scraper-tools" }, - "homepage": "https://github.com/apify/apify-sdk-js", + "homepage": "https://github.com/apify/actor-scraper", "scripts": { "build": "pnpm clean && pnpm compile && pnpm copy", "clean": "rimraf ./dist", @@ -47,11 +48,11 @@ "apify": "^3.1.8" }, "peerDependencies": { - "@crawlee/browser-pool": "^3.8.2", - "@crawlee/core": "^3.8.2", - "@crawlee/types": "^3.8.2", - "@crawlee/utils": "^3.8.2", - "apify": "^3.1.8" + "@crawlee/browser-pool": "^3.8.2 || ^4.0.0-beta.0", + "@crawlee/core": "^3.8.2 || ^4.0.0-beta.0", + "@crawlee/types": "^3.8.2 || ^4.0.0-beta.0", + "@crawlee/utils": "^3.8.2 || ^4.0.0-beta.0", + "apify": "^3.1.8 || ^4.0.0-beta.0" }, "peerDependenciesMeta": { "@crawlee/puppeteer": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e47499bd..b6c47600 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,11 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + apify@4.0.0-beta.12>@crawlee/core: 4.0.0-beta.25 + apify@4.0.0-beta.12>@crawlee/types: 4.0.0-beta.25 + apify@4.0.0-beta.12>@crawlee/utils: 4.0.0-beta.25 + importers: .: @@ -30,8 +35,8 @@ importers: specifier: ^5.0.1 version: 5.0.1 '@playwright/browser-chromium': - specifier: ^1.46.0 - version: 1.59.1 + specifier: ^1.61.0 + version: 1.61.0 '@types/content-type': specifier: ^1.1.8 version: 1.1.9 @@ -61,7 +66,7 @@ importers: version: 20.5.0(@types/node@24.12.2)(conventional-commits-parser@6.4.0)(typescript@5.9.3) crawlee: specifier: ^3.16.0 - version: 3.16.0(@types/node@24.12.2)(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(@types/node@24.12.2)(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.2.0) fs-extra: specifier: ^11.2.0 version: 11.3.4 @@ -90,11 +95,11 @@ importers: specifier: 0.22.0 version: 0.22.0 playwright: - specifier: ^1.46.0 - version: 1.59.1 + specifier: ^1.61.0 + version: 1.61.0 puppeteer: - specifier: ^24.0.0 - version: 24.40.0(typescript@5.9.3) + specifier: 25.2.0 + version: 25.2.0 rimraf: specifier: ^6.0.1 version: 6.1.3 @@ -124,7 +129,7 @@ importers: version: 3.16.0 '@crawlee/playwright': specifier: ^3.14.1 - version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@25.2.0) '@crawlee/utils': specifier: ^3.14.1 version: 3.16.0 @@ -132,13 +137,16 @@ importers: specifier: ^3.2.6 version: 3.7.0 camoufox-js: - specifier: ^0.9.0 - version: 0.9.3(playwright-core@1.59.1) + specifier: 0.11.1 + version: 0.11.1(playwright-core@1.59.1) idcac-playwright: specifier: ^0.2.0 version: 0.2.0 playwright: - specifier: '*' + specifier: 1.59.1 + version: 1.59.1 + playwright-core: + specifier: 1.59.1 version: 1.59.1 devDependencies: '@apify/tsconfig': @@ -220,7 +228,7 @@ importers: version: 3.16.0 '@crawlee/playwright': specifier: ^3.16.0 - version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.2.0) '@crawlee/utils': specifier: ^3.16.0 version: 3.16.0 @@ -231,8 +239,8 @@ importers: specifier: ^0.2.0 version: 0.2.0 playwright: - specifier: '*' - version: 1.59.1 + specifier: 1.61.0 + version: 1.61.0 devDependencies: '@apify/tsconfig': specifier: ^0.1.0 @@ -254,7 +262,7 @@ importers: version: link:../../scraper-tools '@crawlee/puppeteer': specifier: ^3.16.0 - version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.61.1)(puppeteer@25.2.0) apify: specifier: ^3.2.6 version: 3.7.0 @@ -262,8 +270,8 @@ importers: specifier: ^0.2.0 version: 0.2.0 puppeteer: - specifier: '*' - version: 24.40.0(typescript@5.9.3) + specifier: 25.2.0 + version: 25.2.0 devDependencies: '@apify/tsconfig': specifier: ^0.1.0 @@ -284,20 +292,20 @@ importers: specifier: ^1.1.4 version: link:../../scraper-tools '@crawlee/core': - specifier: 4.0.0-beta.43 - version: 4.0.0-beta.43 + specifier: 4.0.0-beta.25 + version: 4.0.0-beta.25 '@crawlee/http': - specifier: 4.0.0-beta.43 - version: 4.0.0-beta.43 + specifier: 4.0.0-beta.25 + version: 4.0.0-beta.25 '@crawlee/impit-client': - specifier: 4.0.0-beta.43 - version: 4.0.0-beta.43 + specifier: 4.0.0-beta.29 + version: 4.0.0-beta.29 '@crawlee/types': - specifier: 4.0.0-beta.43 - version: 4.0.0-beta.43 + specifier: 4.0.0-beta.25 + version: 4.0.0-beta.25 '@crawlee/utils': - specifier: 4.0.0-beta.43 - version: 4.0.0-beta.43 + specifier: 4.0.0-beta.25 + version: 4.0.0-beta.25 apify: specifier: 4.0.0-beta.12 version: 4.0.0-beta.12 @@ -322,16 +330,13 @@ importers: version: link:../../scraper-tools '@crawlee/puppeteer': specifier: ^3.16.0 - version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.61.1)(puppeteer@25.2.0) apify: specifier: ^3.2.6 version: 3.7.0 content-type: specifier: ^1.0.5 version: 1.0.5 - crawlee: - specifier: ^3.16.0 - version: 3.16.0(@types/node@24.12.2)(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) devtools-server: specifier: ^0.0.2 version: 0.0.2 @@ -339,8 +344,8 @@ importers: specifier: ^0.2.0 version: 0.2.0 puppeteer: - specifier: '*' - version: 24.40.0(typescript@5.9.3) + specifier: 25.2.0 + version: 25.2.0 devDependencies: '@apify/tsconfig': specifier: ^0.1.0 @@ -375,7 +380,7 @@ importers: devDependencies: '@crawlee/browser-pool': specifier: ^3.8.2 - version: 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(playwright@1.61.1)(puppeteer@25.2.0) '@crawlee/core': specifier: ^3.8.2 version: 3.16.0 @@ -428,12 +433,16 @@ packages: '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} - '@asamuzakjp/css-color@5.1.10': - resolution: {integrity: sha512-02OhhkKtgNRuicQ/nF3TRnGsxL9wp0r3Y7VlKWyOHHGmGyvXv03y+PnymU8FKFJMTjIr1Bk8U2g1HWSLrpAHww==} + '@asamuzakjp/css-color@5.1.11': + resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + + '@asamuzakjp/dom-selector@7.1.1': + resolution: {integrity: sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@asamuzakjp/dom-selector@7.0.9': - resolution: {integrity: sha512-r3ElRr7y8ucyN2KdICwGsmj19RoN13CLCa/pvGydghWK6ZzeKQ+TcDjVdtEZz2ElpndM5jXw//B9CEee0mWnVg==} + '@asamuzakjp/generational-cache@1.0.1': + resolution: {integrity: sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} '@asamuzakjp/nwsapi@2.3.9': @@ -539,8 +548,8 @@ packages: resolution: {integrity: sha512-dcqeDkYk6NoXHSBEkALD4orb7k6yTDkwZp8RtcvlmMmVZKVQTVVHh78NFInzxRkjFVmStFWE2LRHBZpe518E0Q==} engines: {node: '>=16.0.0'} - '@crawlee/basic@4.0.0-beta.43': - resolution: {integrity: sha512-UNVRxNb1pJjCxHYpCaM1WpJP6MN3UA2rmjUyZuOEODF3jUBaVM+raUN+w1zTTmrGJ6WVGZuF+R6/1N0fMFOX1g==} + '@crawlee/basic@4.0.0-beta.25': + resolution: {integrity: sha512-zy+EV6t+qu9PqZZQPONWzegLe0XpkkTpSRTs9MywH1kicG9kw10qJzkZC9zL0sp9qsirJKk83Nk9qceviIQxJQ==} engines: {node: '>=22.0.0'} '@crawlee/browser-pool@3.16.0': @@ -580,28 +589,32 @@ packages: resolution: {integrity: sha512-Yn32E5IdmENLITg36XN1ty4OLPMcqzDjkEvSdZ0dRV5jcJR89sKi47FOs2eXpW+n7IGhbzPDkGKUirPPRrRkjg==} engines: {node: '>=16.0.0'} - '@crawlee/core@4.0.0-beta.43': - resolution: {integrity: sha512-C827ZjPsL7DDj7W0ofjUMs29PNHNbGWqgndPNssD5ER4YLPJSAVzHPh7Na3BzVmiqeSCm44kr7nVvuSocqS+Wg==} + '@crawlee/core@4.0.0-beta.25': + resolution: {integrity: sha512-45nzqaIsga/4dFg4AXis5JHWhWvEMU37AIlO32pyhnZnhowrI4em5fN5GNY6hAwrcQcZ27l/WV2RUrPEvZYUug==} + engines: {node: '>=22.0.0'} + + '@crawlee/got-scraping-client@4.0.0-beta.25': + resolution: {integrity: sha512-RaQ20QiQl0cE3t4azjzTKlxb8j8NDMbeQncrYJz6zvrvfnR3I75OlOW0kGvzsJREtn0BSRhw85w63rpC05Ns7g==} engines: {node: '>=22.0.0'} - '@crawlee/got-scraping-client@4.0.0-beta.43': - resolution: {integrity: sha512-Z2CPbdIKL1D2u8MtKgqrP8edskboQDYurv+W2F1RUjEsaKfb7hjQiv0W6crKG7bH91zkREy88zerT3gJ5UU3oQ==} + '@crawlee/http-client@4.0.0-beta.25': + resolution: {integrity: sha512-P+SbnTQM/yKhELbIYuajsiElDifhhGniPZWF3Jy4W4fBdVoEjL291izs3beX5aYvREfLLkFCL9LS8FFmdHX51A==} engines: {node: '>=22.0.0'} - '@crawlee/http-client@4.0.0-beta.43': - resolution: {integrity: sha512-z63BVq6c42UZJQC7lcofsSS8JGU9GArgUZfi3XV8YmgxKliPWifjx0Uhr8ekbTdt8a1mLAeYWe3520EpzUrjJg==} + '@crawlee/http-client@4.0.0-beta.29': + resolution: {integrity: sha512-75TP3vJR8Iv6JLajZU98YWD0XNnexHAvlLKKsrzKEWalLPtOdiivUCaZ8x2A1zcPZLpaL6MexMF6ZaOR1nJafQ==} engines: {node: '>=22.0.0'} '@crawlee/http@3.16.0': resolution: {integrity: sha512-adp8fuQyW32kVKKJNPOA/HEF893ddPqldlIOcO+CdCa4EkeKTPOx74VGLVZyO4f0Zxs0QwvDL1W5O7ckD82MFQ==} engines: {node: '>=16.0.0'} - '@crawlee/http@4.0.0-beta.43': - resolution: {integrity: sha512-HbcckZsVGaQjEny3evj9nYIKMId3D5v8jw/PEEmuuNO0gB+IvXXpZ8vU6kJNjxpeS0ja6+BmFZV9YbFzMTx9fA==} + '@crawlee/http@4.0.0-beta.25': + resolution: {integrity: sha512-udcE/c/bR+VtA70+SAyM9XEgXqe7PV7cVwSpJjzNckc0W6NzoQfG8UOy75Ju4wUeuIvgXy7GdUTZHBIDVvWHlA==} engines: {node: '>=22.0.0'} - '@crawlee/impit-client@4.0.0-beta.43': - resolution: {integrity: sha512-0T+c7DM0R+zVl+vm5LB/gvgEc4+iKjbpo9uGCsXL8hzIBxKG3ayvNgjtuLlissQjWf8PXYT9NdEjf26EbqGPRA==} + '@crawlee/impit-client@4.0.0-beta.29': + resolution: {integrity: sha512-tE4r42nEjgFcNA61b+feUk9HysERv6QDHwqriSsTGSz2w6P2CYAQ8wy9Wb8j+z+VL6Q7Y5W/Dc71zj3H+HUfxQ==} engines: {node: '>=22.0.0'} '@crawlee/jsdom@3.16.0': @@ -616,8 +629,8 @@ packages: resolution: {integrity: sha512-ol1PSWj5LL1ALjEZ+zJdLaZx4bGPIP6vXly4AmbtyFg2iq+m1BudtXL+dWFdv/qN8f+N8ljPF5VwKAVxg2uy3Q==} engines: {node: '>= 16'} - '@crawlee/memory-storage@4.0.0-beta.43': - resolution: {integrity: sha512-2P9gR+3GQN57HuUHLapiYBNenCeKgFXcWXA6qL8ZgqwFF5QYjcWqpow5Qu+zfEIVALRtbXQjMS1XrSL6nSLLOQ==} + '@crawlee/memory-storage@4.0.0-beta.25': + resolution: {integrity: sha512-66o+VE23gGGTtL68c3m/QHg4lCZbVCeWnlN9S840ixzBJun7Q3op1pRT+DxYSS/8DaJWGHWZF2nwEev77NiG8Q==} engines: {node: '>=22.0.0'} '@crawlee/playwright@3.16.0': @@ -652,16 +665,20 @@ packages: resolution: {integrity: sha512-CcIM+JDVx4gzQzMPl+9RJiEeqdzTrx2RLPA7y4IMJSyfZm3J/VrEunielKA3NQrk095j9OuvS/rQL2y8mBV1qw==} engines: {node: '>=16.0.0'} - '@crawlee/types@4.0.0-beta.43': - resolution: {integrity: sha512-JQyupy953e6g4KhSfTWVF5nJ4DYXb0R/Qcbji8sammvOmYiedE4gdbgv1iW11Z8Jlwxa6vrzySIlGcXhuJe2fg==} + '@crawlee/types@4.0.0-beta.25': + resolution: {integrity: sha512-hU5Kjwp3OYPG6rQIbaGSzGEXN+Kcci48dln/5Lf/btFWKXr3EEZiZyptVIEtstMFJdViK74S2RnOWNjkZc9AiQ==} + engines: {node: '>=22.0.0'} + + '@crawlee/types@4.0.0-beta.29': + resolution: {integrity: sha512-IOBwYYHMGwKZFNwXZUeuQpzOzLuuXN7rD/qfBcKWvogZmf17glAMIS+5Iu5T0FMVCW17GfkUd+3LlYLoPjb7hg==} engines: {node: '>=22.0.0'} '@crawlee/utils@3.16.0': resolution: {integrity: sha512-rfVx/3hsFZjiD4AwT8IoQsuNLiawrsdhc893Nha22mWQMxJ0Z/KUzh8FyJDnNOHuxWGIJP96I7nBikxYeSdw5A==} engines: {node: '>=16.0.0'} - '@crawlee/utils@4.0.0-beta.43': - resolution: {integrity: sha512-LHsVNp55U8iwZKmSYYwwu6XKDX9LP8n1BI8+Rw+7iNEBcs4lUOFIi/BT4GGbrJt565g3FaUbZsckQw3IWT31oA==} + '@crawlee/utils@4.0.0-beta.25': + resolution: {integrity: sha512-5njsGdq3nzlzdcVrTFD9fbk2nwDGogZwsfGY7czGG4Ua4+WN/zDhpske9AoiBadu9D9dvWxqiNzYsOO/8cEODQ==} engines: {node: '>=22.0.0'} '@csstools/color-helpers@5.1.0': @@ -679,8 +696,8 @@ packages: '@csstools/css-parser-algorithms': ^3.0.5 '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-calc@3.2.0': - resolution: {integrity: sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==} + '@csstools/css-calc@3.2.1': + resolution: {integrity: sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 @@ -693,8 +710,8 @@ packages: '@csstools/css-parser-algorithms': ^3.0.5 '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-color-parser@4.1.0': - resolution: {integrity: sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==} + '@csstools/css-color-parser@4.1.7': + resolution: {integrity: sha512-CmjJFQTFQx/U/xNJhSjCQ0ilpesPmNQ8+eOUeM/+kDOVW33qsIjeOXc27vrQDdWVkf83ZSWwtg7kXSUvKDJ8cQ==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 @@ -712,8 +729,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.3': - resolution: {integrity: sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==} + '@csstools/css-syntax-patches-for-csstree@1.1.5': + resolution: {integrity: sha512-oNjBvzLq2GPZtJphCjLqXow/cHySHSgtxvKZb7OqSZ/xHgw6NWNhfad+6AB9cLeVm6eA9d/qMll3JdEHjy6M+A==} peerDependencies: css-tree: ^3.2.1 peerDependenciesMeta: @@ -893,8 +910,8 @@ packages: cpu: [x64] os: [win32] - '@exodus/bytes@1.15.0': - resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==} + '@exodus/bytes@1.15.1': + resolution: {integrity: sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: '@noble/hashes': ^1.8.0 || ^2.0.0 @@ -1571,150 +1588,155 @@ packages: cpu: [x64] os: [win32] - '@playwright/browser-chromium@1.59.1': - resolution: {integrity: sha512-XDwr0qOrzLXAuBAzg4WO/xctVMb+ldJ54yz9KCpFu8G8MVJzUVFO6BvK1tBtBl4DIoFcoFRKHgUGZT+8wOC8BQ==} + '@playwright/browser-chromium@1.61.0': + resolution: {integrity: sha512-bBGzN+jow5uQtYRDCnFv5cpyMjUYTF6WnsfRRrDXIwbaGDtdh0JdOPmlKdJH4OK7TbkrZ35cV7jhQ1zELoX5ew==} engines: {node: '>=18'} - '@puppeteer/browsers@2.13.0': - resolution: {integrity: sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==} - engines: {node: '>=18'} + '@puppeteer/browsers@3.0.5': + resolution: {integrity: sha512-xYXNuEQmHNIPWWcbL/skf2KF7seyp7c1xmKFRk3wmdFx7VwBsKVrtOLKs8ecaezsKPsWeF1YsgwIiElAscaryA==} + engines: {node: '>=22.12.0'} hasBin: true + peerDependencies: + proxy-agent: '>=8.0.1' + peerDependenciesMeta: + proxy-agent: + optional: true - '@rollup/rollup-android-arm-eabi@4.60.1': - resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==} + '@rollup/rollup-android-arm-eabi@4.62.0': + resolution: {integrity: sha512-IPIQ55ythEHkfEd9jMEi32OQ7SxURsGA43JI22lj01OLZNt2NUbJX8YUHxkVWyQ6daHPNn0truF5nSj3DQp6YQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.60.1': - resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==} + '@rollup/rollup-android-arm64@4.62.0': + resolution: {integrity: sha512-M6s9cr10MibETyo8JsOkq+Lo1+lU6hcvb1MApnUql5qte/5hMEgzlN8/ReIKNfRV8rrqX50W1BX9zoUhC192RA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.60.1': - resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==} + '@rollup/rollup-darwin-arm64@4.62.0': + resolution: {integrity: sha512-BqCoMoIbn0keKys+dEAdBa70EtOwV1bEsQCUgU9FdiZmmMge/Zk7LlkYGqbrdHR+Frnt0E1FOanly+rlwvvQzw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.60.1': - resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==} + '@rollup/rollup-darwin-x64@4.62.0': + resolution: {integrity: sha512-SIMzST3VFNXDAbeIWDWiFCNM5qncUBDWaEV7NfE7oZbDt2mgfW4MvbKdbYiGOLoM32gbTv608UMd0XktEYSD7w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.60.1': - resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==} + '@rollup/rollup-freebsd-arm64@4.62.0': + resolution: {integrity: sha512-ezjfSQMP7ArdUsbBwbQIfwAlhE84I2iVnzQNCFSveqV42q+BmKlzVpf7mxv5EchLcoWU4y6/heFzVg1F+hodUQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.60.1': - resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==} + '@rollup/rollup-freebsd-x64@4.62.0': + resolution: {integrity: sha512-9+qTWGW9AZRhnUgwtTwzNwcPlL87ngkeN0LA+q1bADvmY9aNvWaF2TFW8BZgnQPYxpDI7+rMVLivcd4V737TAQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.60.1': - resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} + '@rollup/rollup-linux-arm-gnueabihf@4.62.0': + resolution: {integrity: sha512-T1dMEQhXA/jkJ/jyMIw9IovK8bSUq7A8kLIlvZTb/6YIVsp2zLavr4F3oyllHWo7eIVJRyE5n3tUjQJEbE1IuQ==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.60.1': - resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} + '@rollup/rollup-linux-arm-musleabihf@4.62.0': + resolution: {integrity: sha512-2as0LgT7qQpyceQq6VUJYnumUMUrgGQCWIiDIN9DE0/tglsk6o66uCB4f3djRawAltvfCNLyZZrsqbPA6inCsA==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.60.1': - resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} + '@rollup/rollup-linux-arm64-gnu@4.62.0': + resolution: {integrity: sha512-bVURMg+6eNN9C/yc0aVjooZcwTTtYF4YW3xta5pP0//r3o1V8gXEHXWCndj47w/HhwsFroZrFhR+6uQP5T0n0g==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.60.1': - resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} + '@rollup/rollup-linux-arm64-musl@4.62.0': + resolution: {integrity: sha512-Ful8pM/2yYI83PViWdFdpZhdI8HJ5qsXANe5atypbHDf+KIBBDsZsbyy8hbXnULVvW9NsTh5DHwbcBftyLTfiw==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.60.1': - resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} + '@rollup/rollup-linux-loong64-gnu@4.62.0': + resolution: {integrity: sha512-9Gp/DgrkzfUBmNPVTyPTvay+4xEP7M/clXpj3efXBcm6uTIVIgDg4rqUpqKXvLEuFRVuEpSAOkhgNeecvaZ4Cg==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.60.1': - resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} + '@rollup/rollup-linux-loong64-musl@4.62.0': + resolution: {integrity: sha512-m9tsJz54LUXkSYM8+8PG81B9IKK5r+2T0clMq4QrS16xFosufU7firBDAZEsDheDs7wTlP7h3++S7lMsU955HA==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.60.1': - resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} + '@rollup/rollup-linux-ppc64-gnu@4.62.0': + resolution: {integrity: sha512-3UvJ5PNVU16aJf6M3tFI24pWzAl2/ynfbyRN3ICyQajK1lSkrnVYNnLz3v04J32qKa0FczJc22zeToc0lr2A3w==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.60.1': - resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} + '@rollup/rollup-linux-ppc64-musl@4.62.0': + resolution: {integrity: sha512-vRWUAbYLGHBZS6Q8Msb2sfnf1fvJf+47t8l/TwOerM2qArzy+IeNMTHrYLHXh95h8MoatPHI5hhSZNs+mGXKPg==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.60.1': - resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} + '@rollup/rollup-linux-riscv64-gnu@4.62.0': + resolution: {integrity: sha512-c00T5SYENHAt86cfW47URaP3Us5vLC/4QO7GYud1G5VNRffCwwCuBspwqYrriuJB+5m0WFzClCn9wed0FBjKvg==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.60.1': - resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} + '@rollup/rollup-linux-riscv64-musl@4.62.0': + resolution: {integrity: sha512-krrCDilhXOwFkSkO3Wm9I/f9H0L92XHHwy2fwxjukxIbh0dem8gZqOW5Y8BsHrpJv5qwlRBV+Wl4ZFyRWhUpwg==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.60.1': - resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} + '@rollup/rollup-linux-s390x-gnu@4.62.0': + resolution: {integrity: sha512-7pfYFSTc4/rUC/FtAI0Qp6QthDBCIi6/AuP1xYqFk5vanI6KnL5dWKP60OM/05LOsbwTmIcvr6eXC4CJuJ75IA==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.60.1': - resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} + '@rollup/rollup-linux-x64-gnu@4.62.0': + resolution: {integrity: sha512-7SDIalKeIpG0Ifogbbdn58HmSotYMlf23K3dCJEmiVd9Fg36Vmni82iPQec27N3wY4Bvbxftkxz6vSx9OcouTg==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.60.1': - resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} + '@rollup/rollup-linux-x64-musl@4.62.0': + resolution: {integrity: sha512-eRZevouTH2i1HeAVLqJuLnt256krQkGY0TN6WsTmsIhuzbh457HuWDMakKwmi0Cjadux983CoSr8Lim2QhUIFw==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.60.1': - resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} + '@rollup/rollup-openbsd-x64@4.62.0': + resolution: {integrity: sha512-3oVS7FLGa4U1qcvao9ylGxrjXZyUQqR8UwxEcnUEyPX53O/C/mKDZegNXTdHCP+h3e6ta/f1EN38Yif1mmZHYg==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.60.1': - resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==} + '@rollup/rollup-openharmony-arm64@4.62.0': + resolution: {integrity: sha512-yTB9TgfWj5wHe5QgktAgXTLLot1gvEjl1NiPPAUiCs4oPrIWFl5V4nC3GrkNdj9LaAU4s94nVrGbGOCqUpyWsg==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.60.1': - resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==} + '@rollup/rollup-win32-arm64-msvc@4.62.0': + resolution: {integrity: sha512-5LOhoaesY3doG1c+ac/2JtgREpKoJr5bUHH8tKY0V8di7+uSV6BwLs2PlR0/yzefGOkR+wE7ZolZphHCsyG5Rw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.60.1': - resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==} + '@rollup/rollup-win32-ia32-msvc@4.62.0': + resolution: {integrity: sha512-yYkWHhmbhRTWTnWos5HC4GcPQfjlzzCNbM9e/+GXrLuaBXYA3qSDR9f0Vgufd5S8yX81U8jPKp7ZnAjZFMtRnw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.1': - resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==} + '@rollup/rollup-win32-x64-gnu@4.62.0': + resolution: {integrity: sha512-SoTb6lPg25xZlA2ibwQ++ahCCnH+FP0qmEuafMJ4gznZKOlXioKEAeJLgCrqjM98ACziXM9V1amFjICVL4IFoA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.1': - resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==} + '@rollup/rollup-win32-x64-msvc@4.62.0': + resolution: {integrity: sha512-5L+T1fMX4RIEBoZzT0+sQ0PhTS36NULFmMXtl1TZo44TMAROIMHbZufSOjVWt/Y622BtxgxtaNOokbTDvfsrZA==} cpu: [x64] os: [win32] @@ -1858,6 +1880,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} @@ -1891,9 +1916,6 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@vitest/expect@4.1.4': resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==} @@ -2055,14 +2077,6 @@ packages: axios@1.15.0: resolution: {integrity: sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==} - b4a@1.8.0: - resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} - peerDependencies: - react-native-b4a: '*' - peerDependenciesMeta: - react-native-b4a: - optional: true - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -2070,47 +2084,6 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - bare-events@2.8.2: - resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} - peerDependencies: - bare-abort-controller: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - - bare-fs@4.7.0: - resolution: {integrity: sha512-xzqKsCFxAek9aezYhjJuJRXBIaYlg/0OGDTZp+T8eYmYMlm66cs6cYko02drIyjN2CBbi+I6L7YfXyqpqtKRXA==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - - bare-os@3.8.7: - resolution: {integrity: sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==} - engines: {bare: '>=1.14.0'} - - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - - bare-stream@2.13.0: - resolution: {integrity: sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==} - peerDependencies: - bare-abort-controller: '*' - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - bare-buffer: - optional: true - bare-events: - optional: true - - bare-url@2.4.0: - resolution: {integrity: sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==} - base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2126,9 +2099,9 @@ packages: before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - better-sqlite3@12.9.0: - resolution: {integrity: sha512-wqUv4Gm3toFpHDQmaKD4QhZm3g1DjUBI0yzS4UBl6lElUmXFYdTQmmEDpAFa5o8FiFiymURypEnfVHzILKaxqQ==} - engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} + better-sqlite3@12.11.1: + resolution: {integrity: sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==} + engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x || 26.x} bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} @@ -2169,9 +2142,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2226,9 +2196,9 @@ packages: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - camoufox-js@0.9.3: - resolution: {integrity: sha512-HKdCaUudkgJBzZZ9HxDu0JVmRFKWySnQrhhsqBGnEEuGHzsCs+Bon0bCrEePZ4Ax0BlycMOr/zxKq6kSu516sw==} - engines: {node: '>= 20'} + camoufox-js@0.11.1: + resolution: {integrity: sha512-/tSgFAgjcbxudXFLd+u5VARZHOK9fm5bg1QRAP/2NySdaq6Vf7UTk2aMEUqaXAfnV7ncf4y87KjIFVpWVbZ+RQ==} + engines: {node: '>= 22'} hasBin: true peerDependencies: playwright-core: '*' @@ -2273,8 +2243,9 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} - chromium-bidi@14.0.0: - resolution: {integrity: sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==} + chromium-bidi@16.0.1: + resolution: {integrity: sha512-J63PGu/9PpeCwLIcKYyzWP6yaVL5pxuBc0shlYCYM8BaAkmlwiQboXO1iNbOgSDbVklEyYFfNEcHD8oOAWacUA==} + engines: {node: '>=20.19.0 <22.0.0 || >=22.12.0'} peerDependencies: devtools-protocol: '*' @@ -2329,6 +2300,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -2621,12 +2596,12 @@ packages: detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - devtools-protocol@0.0.1581282: - resolution: {integrity: sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==} - devtools-protocol@0.0.1612613: resolution: {integrity: sha512-hp32aOyalF3vGZiTPA3CiKCgpIH7QOj+S0dRVMmEReagtmWQYigiCQWp7OGWrgaW2IHNlSzCwfDneZe16DlBCQ==} + devtools-protocol@0.0.1638949: + resolution: {integrity: sha512-mXwg4Fqnv0WR4iuAT/gYUmctNkjILwXFHyZ+m7Ty1dfr0ezZt2U3gnrrJTfRobJTHoXf+IbuFvFITzLrLFjwJA==} + devtools-server@0.0.2: resolution: {integrity: sha512-ZHfQVaJelu0dwEYf26jyppuDwpC0oyOkqzoGEnHhSa4mC0Y3WiWAxsMTBzDao/iLd15+0XlYCJxLilK2uALjvQ==} @@ -2713,6 +2688,10 @@ packages: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} + entities@8.0.0: + resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} + engines: {node: '>=20.19.0'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -2794,9 +2773,6 @@ packages: eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} - events-universal@1.0.1: - resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} - execa@5.0.0: resolution: {integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==} engines: {node: '>=10'} @@ -2812,11 +2788,6 @@ packages: exponential-backoff@3.1.3: resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2824,9 +2795,6 @@ packages: resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==} engines: {node: '>=6.0.0'} - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -2837,9 +2805,6 @@ packages: fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -2987,10 +2952,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - get-stream@6.0.0: resolution: {integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==} engines: {node: '>=10'} @@ -3219,116 +3180,116 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} - impit-darwin-arm64@0.11.0: - resolution: {integrity: sha512-XZcgJQ49hVGoa+bXmXqkvSucyo99X13zggMjqg5lU1SYChpgtsmDG2OyhmKt+if07Y+HtB6EAlCBLl6HPPlbbQ==} + impit-darwin-arm64@0.14.2: + resolution: {integrity: sha512-ChvxbJj893rWAhHXJ3kkGe8Pg4lsZwQ1Dt0w/noCkNe436gm0nIQ/eBBbwIJBsY4Ev7q6fgi/QerF2trSyUXmg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - impit-darwin-arm64@0.9.2: - resolution: {integrity: sha512-YHfrBeWwwI6je3OLBK8kgxR49bLbYGLkF/HFUHjPnhZxR821zd0NNPsYMX/1Rrasx0Zpu3skhN68ofudilhHdg==} + impit-darwin-arm64@0.8.2: + resolution: {integrity: sha512-xFKLJxyGatPEz49ZUT3f2wRgKAhavWT1w5Cth27csY/Y0Rm7f6IjkjBbXk2/azsqYXNJDgNdAqWq9+/oFFm+IQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - impit-darwin-x64@0.11.0: - resolution: {integrity: sha512-lyz/HnElBkr/e13pTrBWDocfjVVR6eKrOZmnVeCEPxYlNuPCOslhHp2p+1BdgIQO/8s2X2MVeS0zVSXq3hNp+w==} + impit-darwin-x64@0.14.2: + resolution: {integrity: sha512-r1g3WkwljcRgY1V0yBCUJ0/Sy6OHLc4RUrfz3mHi2X4WvkTk7aY17K4X+baBx+tcpOfE/ME/iWAY/PesOM9JVA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - impit-darwin-x64@0.9.2: - resolution: {integrity: sha512-FPH7gE0YdHfYRjX9qGKIvfQ6hdgo9GM+/wD1ktUC2UiEwKbwjpmrBhdXt0bSudrw9D28T4KR1w4TmX4X+uBYEA==} + impit-darwin-x64@0.8.2: + resolution: {integrity: sha512-OxkbXWNvl9XcygxDUV+1sTyOYuHeORwCky9Nt/KMRlu+hOhiU2a3ZsS2zlAqYxh77Yfd5VWFJaG+mXpp3Zx8dw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - impit-linux-arm64-gnu@0.11.0: - resolution: {integrity: sha512-xdvbpoPnrAHDtetZjfD6/zqswhg9CRAd7f3YyBFzzNg3aoBRhgMFrdD2BLEWAvaq1PZkj+/emCaPZfJZJfPuJg==} + impit-linux-arm64-gnu@0.14.2: + resolution: {integrity: sha512-JZJqUnEqFiktcXVgg/AIKkSv8SGu5zoQ7lf9CSvS0eEiwSlHnLUPwBiFc9/mSHDIUQkM9qlvJyGUiGqGEt9K6A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - impit-linux-arm64-gnu@0.9.2: - resolution: {integrity: sha512-9Va4WmklAWwjJYT5M74u6HHzmRA8Tw8tdwzsrhIBmEyJ/gzCD6TJD0sE0mgFGd8v/mEB/WfMX1VnpOQmPm1gDQ==} + impit-linux-arm64-gnu@0.8.2: + resolution: {integrity: sha512-Yygo2Vfyz4+ClXivVxjcuXuffnVnoRg23Wf7MMd0tiLnbxnn+VBPBsj0/kl5GKslacoWvyFz5n997H2NawPe0Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - impit-linux-arm64-musl@0.11.0: - resolution: {integrity: sha512-w7isVF4RfVynopjGSP+a3/6KJmL7MzdEw2niIi9YjRnCRDPi4XEmxDm9XScB7vUE8E4s7LT8QKa/SIb3MEpvFQ==} + impit-linux-arm64-musl@0.14.2: + resolution: {integrity: sha512-ZsL9JAFEZBP3tvT8h4pkcg/b/MtHP8mZSgsncD6z9+qKM/IjqiDYwQunKaAYMwGu0EEbjtaU4C1zTK6ipnvwbA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - impit-linux-arm64-musl@0.9.2: - resolution: {integrity: sha512-eiZs4C4vOPRi5A/V/bNTpX9Ays1m1trMfDXRH/Bnulo7XPngP6AEGW0SaKBznfDhiFOfO7hcDPupkGvSfX5rpw==} + impit-linux-arm64-musl@0.8.2: + resolution: {integrity: sha512-TB/ux8K7/BVLZlovOE6dDtS2NKgKMjkt75DmbWo2eQnEOF2aJdcKCqsxx4FolZezY1zWcpTOUM+ES+EKI/G9eQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - impit-linux-x64-gnu@0.11.0: - resolution: {integrity: sha512-Y0NBSiFn79G2CXUx2J+a8W2e53ZS7smohsZX18XY8i9LxLf2FQ6pt7e1eWVDHEdo298r5w4EFPc46Gdg6npw+A==} + impit-linux-x64-gnu@0.14.2: + resolution: {integrity: sha512-3/keeSOCiByIfbOpmvixRXDlCdcyf112ru0fNl7AcpC1RtQz48ctsAn6R4+xEEnULO63By5VK9X0HNm1O2gUdw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - impit-linux-x64-gnu@0.9.2: - resolution: {integrity: sha512-KXkc6A0jh6c1ymxbcxgMbjNwr7YCm48froJaQWzXHg9nRSepJxprHtlWoFcz9HG/D9+eBQXTpMAJMAqXMs+NtA==} + impit-linux-x64-gnu@0.8.2: + resolution: {integrity: sha512-5wVgeMai+chGsb/7KL4W8lCuyf/HcYXLR1pBzevls3/jNUQ5IoyP/XAtUe0GN2H+zCFj7UVD6VFKlbOBFp2a/A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - impit-linux-x64-musl@0.11.0: - resolution: {integrity: sha512-UmahyHiqcNTCYnAgW+SjQwfyqfALYxXeN3Likuf/aS/tzlTP/CPmtNu1O+Vl7G8dZaWRlBNtAwvLeKlkUKBL5A==} + impit-linux-x64-musl@0.14.2: + resolution: {integrity: sha512-BiUXZhj6lQOrZmeYB4HqYiBS5XvM/clrSVyZyae/CJshELUyYOLNxnTOxabd0tWR6J9ntC7bZwDrwskWD/TePA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - impit-linux-x64-musl@0.9.2: - resolution: {integrity: sha512-GWXqohv79LgOF0YUP/rwVGZ4uQZWK/NJUhGZR4PgKRMb1HHH2S2wrGtSP7AHyW+GT27Tv9yrRcyidVK+FYxOVw==} + impit-linux-x64-musl@0.8.2: + resolution: {integrity: sha512-7QN6DzhH2BlQEj/KTuxBJKFTO1aDsHaDngmJw9V5k8pOFS1s1U3EfnosVTFocgQIcuEk9viutEEEUfUnehnrng==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - impit-win32-arm64-msvc@0.11.0: - resolution: {integrity: sha512-LppsL30N+EgVx1tsBNsYz2vf8aM+RXpin/9Szzs8G82PD5QmOnrhJE6JTpzyfVYebjn/UdJcIqFzfcZRCciLOg==} + impit-win32-arm64-msvc@0.14.2: + resolution: {integrity: sha512-GQT3ITrIbh5P6FLzoHGuBpjrP/rzZoC3T0510+yCtLdQ1qQQzEIi1iCUElpCokyL4J/D4BdCRMS3wv3TzhcM4w==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - impit-win32-arm64-msvc@0.9.2: - resolution: {integrity: sha512-ta82EKAMjCXhnCs6n9jr7hzbjX3wBWhW21AdAwZEiX4RaJNmE6j0oH0ZrTZuCDJumxAV+1pJapB4q/BCuoP1IQ==} + impit-win32-arm64-msvc@0.8.2: + resolution: {integrity: sha512-KvsKB6mfCM+DAvC5wLhRwOSXdy3fN7JLub1ieazFK2POOqLN27XUc5DbmniAW9jcCew9VMjw3ipZeFvfHEFHFg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - impit-win32-x64-msvc@0.11.0: - resolution: {integrity: sha512-fXIrgD8EdxDBic90DvcJ350lbeHYTQGybNEQNW7zQrSMEht0A/r7mm9yI1VhhSOiT7glCl96CAvG3mTSGqAipA==} + impit-win32-x64-msvc@0.14.2: + resolution: {integrity: sha512-J6MpD0GzoMN9ydb2iT2oagE0Y4rbkKf8fDxrMh3/txp2sfzYDDfbcC4sySMm2b8QB4ERhB6N5YzcpGBAHbx/0w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - impit-win32-x64-msvc@0.9.2: - resolution: {integrity: sha512-S1F8b4sKYwd0FORJWir4rrU0iZbQwebY+U/lkSJOK316P46sH8wu8wHB4TLVLLNpAUI0bp4sBgXlholqtlDAQw==} + impit-win32-x64-msvc@0.8.2: + resolution: {integrity: sha512-QidL5Hgjx6l8OepoqT+X0EvP65Z636kLf4tKqd21rM/JBNLPP1jnfjr91XjLlHTS/0lawkjAPUzcpMI9LInUyQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - impit@0.11.0: - resolution: {integrity: sha512-968YrfzZN5CCgHs/n/yAbPgetq+bOreQOI9UQXmHK3srRs24g+m9CNGL8tRWUIZCK0tnc+baBJ0nw+8saHz0qw==} + impit@0.14.2: + resolution: {integrity: sha512-8JlirJDFdrZg7a7nV00Jn5WO8K+X1FJQSVFrChxRyzkSAFv6mmGgriXS33wbJFUxpiOGY/MJpHY8hhmLfDcJDw==} engines: {node: '>= 20'} - impit@0.9.2: - resolution: {integrity: sha512-flHQYxC16o7H+OKrO0zXv8Ob8Hs/E1Z1CfjGUHkN+6qqQksi1/2KMnZZEeSWfB9fM4b8SQVL6aQha/K6qVKqng==} + impit@0.8.2: + resolution: {integrity: sha512-EVC+R3GrbOjAgYW0e/ShH1FHXFJT5wFRhDnDtmLrzA68FPNsE8wsw6ZsJVW6OxVzKI1ukZ0FM5WrsQ6HK9VR5A==} engines: {node: '>= 20'} import-fresh@3.3.1: @@ -3622,6 +3583,10 @@ packages: resolution: {integrity: sha512-tNcU3cLH7toloAzhOOrBDhjzgbxpyuYvkf+BPPnnJCdc5EIcdJ8JcT+SglvCQKKyZ6m9dVXtCVlJcA6csxKdEA==} engines: {node: ^20.17.0 || >=22.9.0} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -3709,8 +3674,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.3.5: - resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} + lru-cache@11.5.1: + resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==} engines: {node: 20 || >=22} lru-cache@6.0.0: @@ -3904,6 +3869,10 @@ packages: resolution: {integrity: sha512-7e87vk0DdWT647wjcfEtWeMtjm+zVGqNohN/aeIymbUfjHQ2T4Sx5kM+1irVDBSloNC3CkGKxswdMoo8yhqTDg==} engines: {node: '>=10', npm: '>=6'} + modern-tar@0.7.6: + resolution: {integrity: sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg==} + engines: {node: '>=18.0.0'} + modify-values@1.0.1: resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} engines: {node: '>=0.10.0'} @@ -3927,6 +3896,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + napi-build-utils@2.0.0: resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} @@ -4133,10 +4107,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@6.2.0: - resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} - engines: {node: '>=18'} - p-locate@2.0.0: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} @@ -4245,8 +4215,8 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - parse5@8.0.0: - resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parse5@8.0.1: + resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} @@ -4281,9 +4251,6 @@ packages: pause-stream@0.0.11: resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -4312,17 +4279,37 @@ packages: engines: {node: '>=18'} hasBin: true + playwright-core@1.61.0: + resolution: {integrity: sha512-caX7TrY3Ml6egyDX0WUcTHDxodl/b51y5wJOdCEA36QviK/s2g081hvmGs8eaE3DWb6NYZQ6BjO/QkNRPenoPA==} + engines: {node: '>=18'} + hasBin: true + + playwright-core@1.61.1: + resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==} + engines: {node: '>=18'} + hasBin: true + playwright@1.59.1: resolution: {integrity: sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==} engines: {node: '>=18'} hasBin: true + playwright@1.61.0: + resolution: {integrity: sha512-Z+7BeeqQPRRzklHsVFP4KTGIyMxKUmfeRA4WisM6G3/XW6nwGeX6fX9qYaDa+CiUqpOkb2f6X3nar05R3kSuJQ==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.61.1: + resolution: {integrity: sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==} + engines: {node: '>=18'} + hasBin: true + postcss-selector-parser@7.1.1: resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} - postcss@8.5.9: - resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} prebuild-install@7.1.3: @@ -4354,10 +4341,6 @@ packages: resolution: {integrity: sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q==} engines: {node: ^18.17.0 || >=20.5.0} - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - promise-all-reject-late@1.0.1: resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==} @@ -4400,13 +4383,13 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.40.0: - resolution: {integrity: sha512-MWL3XbUCfVgGR0gRsidzT6oKJT2QydPLhMITU6HoVWiiv4gkb6gJi3pcdAa8q4HwjBTbqISOWVP4aJiiyUJvag==} - engines: {node: '>=18'} + puppeteer-core@25.2.0: + resolution: {integrity: sha512-jGhuGAlkgOcbyGRc0Cm9b/y4vvqoxhyAyl6a1diVe8F3sHsgTaQ60QQT5F3rGegTZV3prysgHVc+0LsvPZo3GA==} + engines: {node: '>=22.12.0'} - puppeteer@24.40.0: - resolution: {integrity: sha512-IxQbDq93XHVVLWHrAkFP7F7iHvb9o0mgfsSIMlhHb+JM+JjM1V4v4MNSQfcRWJopx9dsNOr9adYv0U5fm9BJBQ==} - engines: {node: '>=18'} + puppeteer@25.2.0: + resolution: {integrity: sha512-JPMPd/2+lgdkLhEyPqH895oR3ccMt1wSra6oewgjjTuLmo2s9zPZpKXQTFEIiA/fMKpiL01kjU3+2zPEReRWNg==} + engines: {node: '>=22.12.0'} hasBin: true queue-microtask@1.2.3: @@ -4552,8 +4535,8 @@ packages: resolution: {integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==} engines: {node: '>=10.0.0'} - rollup@4.60.1: - resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==} + rollup@4.62.0: + resolution: {integrity: sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4737,9 +4720,6 @@ packages: stream-json@1.9.1: resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} - streamx@2.25.0: - resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} - string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -4824,26 +4804,14 @@ packages: tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - tar-fs@3.1.2: - resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} - tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tar-stream@3.1.8: - resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} - tar@7.5.11: resolution: {integrity: sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==} engines: {node: '>=18'} - teex@1.0.1: - resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} - - text-decoder@1.2.7: - resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} - text-extensions@1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} @@ -4880,6 +4848,10 @@ packages: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + tinypool@2.1.0: resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} engines: {node: ^20.0.0 || >=22.0.0} @@ -5003,8 +4975,8 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typed-query-selector@2.12.1: - resolution: {integrity: sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==} + typed-query-selector@2.12.2: + resolution: {integrity: sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==} typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} @@ -5040,6 +5012,10 @@ packages: resolution: {integrity: sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ==} engines: {node: '>=20.18.1'} + undici@7.28.0: + resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==} + engines: {node: '>=20.18.1'} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -5178,8 +5154,8 @@ packages: web-worker@1.5.0: resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} - webdriver-bidi-protocol@0.4.1: - resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==} + webdriver-bidi-protocol@0.4.2: + resolution: {integrity: sha512-VSV+fzfChirL3e7jay2yUC7B4HQCGtEWEg/MSSQbK+qWbqeGlRLlXTzPpYr3XGUvbpDHumWZBJxgesg4N7dbtA==} webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} @@ -5271,6 +5247,18 @@ packages: utf-8-validate: optional: true + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -5317,6 +5305,10 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -5325,17 +5317,14 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.2.2: - resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} - engines: {node: '>=12.20'} - yoctocolors-cjs@2.1.3: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} @@ -5389,20 +5378,24 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 lru-cache: 10.4.3 - '@asamuzakjp/css-color@5.1.10': + '@asamuzakjp/css-color@5.1.11': dependencies: - '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@asamuzakjp/generational-cache': 1.0.1 + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.7(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@asamuzakjp/dom-selector@7.0.9': + '@asamuzakjp/dom-selector@7.1.1': dependencies: + '@asamuzakjp/generational-cache': 1.0.1 '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 css-tree: 3.2.1 is-potential-custom-element-name: 1.0.1 + '@asamuzakjp/generational-cache@1.0.1': {} + '@asamuzakjp/nwsapi@2.3.9': {} '@babel/code-frame@7.29.0': @@ -5559,14 +5552,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@crawlee/basic@4.0.0-beta.43': + '@crawlee/basic@4.0.0-beta.25': dependencies: + '@apify/log': 2.5.34 '@apify/timeout': 0.3.2 '@apify/utilities': 2.25.6 - '@crawlee/core': 4.0.0-beta.43 - '@crawlee/got-scraping-client': 4.0.0-beta.43 - '@crawlee/types': 4.0.0-beta.43 - '@crawlee/utils': 4.0.0-beta.43 + '@crawlee/core': 4.0.0-beta.25 + '@crawlee/got-scraping-client': 4.0.0-beta.25 + '@crawlee/types': 4.0.0-beta.25 + '@crawlee/utils': 4.0.0-beta.25 csv-stringify: 6.7.0 fs-extra: 11.3.4 ow: 2.0.0 @@ -5576,14 +5570,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@crawlee/browser-pool@3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3))': + '@crawlee/browser-pool@3.16.0(playwright@1.59.1)(puppeteer@25.2.0)': dependencies: '@apify/log': 2.5.34 '@apify/timeout': 0.3.2 '@crawlee/core': 3.16.0 '@crawlee/types': 3.16.0 fingerprint-generator: 2.1.82 - fingerprint-injector: 2.1.82(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + fingerprint-injector: 2.1.82(playwright@1.59.1)(puppeteer@25.2.0) lodash.merge: 4.6.2 nanoid: 3.3.11 ow: 0.28.2 @@ -5594,15 +5588,59 @@ snapshots: tslib: 2.8.1 optionalDependencies: playwright: 1.59.1 - puppeteer: 24.40.0(typescript@5.9.3) + puppeteer: 25.2.0 + transitivePeerDependencies: + - supports-color + + '@crawlee/browser-pool@3.16.0(playwright@1.61.0)(puppeteer@25.2.0)': + dependencies: + '@apify/log': 2.5.34 + '@apify/timeout': 0.3.2 + '@crawlee/core': 3.16.0 + '@crawlee/types': 3.16.0 + fingerprint-generator: 2.1.82 + fingerprint-injector: 2.1.82(playwright@1.61.0)(puppeteer@25.2.0) + lodash.merge: 4.6.2 + nanoid: 3.3.11 + ow: 0.28.2 + p-limit: 3.1.0 + proxy-chain: 2.7.1 + quick-lru: 5.1.1 + tiny-typed-emitter: 2.1.0 + tslib: 2.8.1 + optionalDependencies: + playwright: 1.61.0 + puppeteer: 25.2.0 + transitivePeerDependencies: + - supports-color + + '@crawlee/browser-pool@3.16.0(playwright@1.61.1)(puppeteer@25.2.0)': + dependencies: + '@apify/log': 2.5.34 + '@apify/timeout': 0.3.2 + '@crawlee/core': 3.16.0 + '@crawlee/types': 3.16.0 + fingerprint-generator: 2.1.82 + fingerprint-injector: 2.1.82(playwright@1.61.1)(puppeteer@25.2.0) + lodash.merge: 4.6.2 + nanoid: 3.3.11 + ow: 0.28.2 + p-limit: 3.1.0 + proxy-chain: 2.7.1 + quick-lru: 5.1.1 + tiny-typed-emitter: 2.1.0 + tslib: 2.8.1 + optionalDependencies: + playwright: 1.61.1 + puppeteer: 25.2.0 transitivePeerDependencies: - supports-color - '@crawlee/browser@3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3))': + '@crawlee/browser@3.16.0(playwright@1.59.1)(puppeteer@25.2.0)': dependencies: '@apify/timeout': 0.3.2 '@crawlee/basic': 3.16.0 - '@crawlee/browser-pool': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + '@crawlee/browser-pool': 3.16.0(playwright@1.59.1)(puppeteer@25.2.0) '@crawlee/types': 3.16.0 '@crawlee/utils': 3.16.0 ow: 0.28.2 @@ -5610,7 +5648,39 @@ snapshots: type-fest: 4.41.0 optionalDependencies: playwright: 1.59.1 - puppeteer: 24.40.0(typescript@5.9.3) + puppeteer: 25.2.0 + transitivePeerDependencies: + - supports-color + + '@crawlee/browser@3.16.0(playwright@1.61.0)(puppeteer@25.2.0)': + dependencies: + '@apify/timeout': 0.3.2 + '@crawlee/basic': 3.16.0 + '@crawlee/browser-pool': 3.16.0(playwright@1.61.0)(puppeteer@25.2.0) + '@crawlee/types': 3.16.0 + '@crawlee/utils': 3.16.0 + ow: 0.28.2 + tslib: 2.8.1 + type-fest: 4.41.0 + optionalDependencies: + playwright: 1.61.0 + puppeteer: 25.2.0 + transitivePeerDependencies: + - supports-color + + '@crawlee/browser@3.16.0(playwright@1.61.1)(puppeteer@25.2.0)': + dependencies: + '@apify/timeout': 0.3.2 + '@crawlee/basic': 3.16.0 + '@crawlee/browser-pool': 3.16.0(playwright@1.61.1)(puppeteer@25.2.0) + '@crawlee/types': 3.16.0 + '@crawlee/utils': 3.16.0 + ow: 0.28.2 + tslib: 2.8.1 + type-fest: 4.41.0 + optionalDependencies: + playwright: 1.61.1 + puppeteer: 25.2.0 transitivePeerDependencies: - supports-color @@ -5664,7 +5734,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@crawlee/core@4.0.0-beta.43': + '@crawlee/core@4.0.0-beta.25': dependencies: '@apify/consts': 2.52.0 '@apify/datastructures': 2.0.3 @@ -5672,9 +5742,9 @@ snapshots: '@apify/pseudo_url': 2.0.75 '@apify/timeout': 0.3.2 '@apify/utilities': 2.25.6 - '@crawlee/memory-storage': 4.0.0-beta.43 - '@crawlee/types': 4.0.0-beta.43 - '@crawlee/utils': 4.0.0-beta.43 + '@crawlee/memory-storage': 4.0.0-beta.25 + '@crawlee/types': 4.0.0-beta.25 + '@crawlee/utils': 4.0.0-beta.25 '@sapphire/async-queue': 1.5.5 '@vladfrangu/async_event_emitter': 2.4.7 csv-stringify: 6.7.0 @@ -5690,14 +5760,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@crawlee/got-scraping-client@4.0.0-beta.43': + '@crawlee/got-scraping-client@4.0.0-beta.25': dependencies: - '@crawlee/http-client': 4.0.0-beta.43 + '@crawlee/http-client': 4.0.0-beta.25 got-scraping: 4.2.1 - '@crawlee/http-client@4.0.0-beta.43': + '@crawlee/http-client@4.0.0-beta.25': + dependencies: + '@crawlee/types': 4.0.0-beta.25 + tough-cookie: 6.0.1 + + '@crawlee/http-client@4.0.0-beta.29': dependencies: - '@crawlee/types': 4.0.0-beta.43 + '@apify/log': 2.5.34 + '@crawlee/types': 4.0.0-beta.29 tough-cookie: 6.0.1 '@crawlee/http@3.16.0': @@ -5719,14 +5795,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@crawlee/http@4.0.0-beta.43': + '@crawlee/http@4.0.0-beta.25': dependencies: '@apify/timeout': 0.3.2 '@apify/utilities': 2.25.6 - '@crawlee/basic': 4.0.0-beta.43 - '@crawlee/http-client': 4.0.0-beta.43 - '@crawlee/types': 4.0.0-beta.43 - '@crawlee/utils': 4.0.0-beta.43 + '@crawlee/basic': 4.0.0-beta.25 + '@crawlee/http-client': 4.0.0-beta.25 + '@crawlee/types': 4.0.0-beta.25 + '@crawlee/utils': 4.0.0-beta.25 '@types/content-type': 1.1.9 cheerio: 1.2.0 content-type: 1.0.5 @@ -5738,12 +5814,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@crawlee/impit-client@4.0.0-beta.43': + '@crawlee/impit-client@4.0.0-beta.29': dependencies: '@apify/datastructures': 2.0.3 - '@crawlee/http-client': 4.0.0-beta.43 - '@crawlee/types': 4.0.0-beta.43 - impit: 0.9.2 + '@crawlee/http-client': 4.0.0-beta.29 + impit: 0.8.2 tough-cookie: 6.0.1 '@crawlee/jsdom@3.16.0': @@ -5790,26 +5865,26 @@ snapshots: proper-lockfile: 4.1.2 tslib: 2.8.1 - '@crawlee/memory-storage@4.0.0-beta.43': + '@crawlee/memory-storage@4.0.0-beta.25': dependencies: - '@crawlee/types': 4.0.0-beta.43 + '@apify/log': 2.5.34 + '@crawlee/types': 4.0.0-beta.25 '@sapphire/async-queue': 1.5.5 '@sapphire/shapeshift': 4.0.0 content-type: 1.0.5 fs-extra: 11.3.4 json5: 2.2.3 mime-types: 3.0.2 - p-limit: 6.2.0 proper-lockfile: 4.1.2 tslib: 2.8.1 - '@crawlee/playwright@3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3))': + '@crawlee/playwright@3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@25.2.0)': dependencies: '@apify/datastructures': 2.0.3 '@apify/log': 2.5.34 '@apify/timeout': 0.3.2 - '@crawlee/browser': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) - '@crawlee/browser-pool': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + '@crawlee/browser': 3.16.0(playwright@1.59.1)(puppeteer@25.2.0) + '@crawlee/browser-pool': 3.16.0(playwright@1.59.1)(puppeteer@25.2.0) '@crawlee/core': 3.16.0 '@crawlee/types': 3.16.0 '@crawlee/utils': 3.16.0 @@ -5828,12 +5903,57 @@ snapshots: - puppeteer - supports-color - '@crawlee/puppeteer@3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3))': + '@crawlee/playwright@3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.2.0)': + dependencies: + '@apify/datastructures': 2.0.3 + '@apify/log': 2.5.34 + '@apify/timeout': 0.3.2 + '@crawlee/browser': 3.16.0(playwright@1.61.0)(puppeteer@25.2.0) + '@crawlee/browser-pool': 3.16.0(playwright@1.61.0)(puppeteer@25.2.0) + '@crawlee/core': 3.16.0 + '@crawlee/types': 3.16.0 + '@crawlee/utils': 3.16.0 + cheerio: 1.0.0-rc.12 + jquery: 3.7.1 + lodash.isequal: 4.5.0 + ml-logistic-regression: 2.0.0 + ml-matrix: 6.12.1 + ow: 0.28.2 + string-comparison: 1.3.0 + tslib: 2.8.1 + optionalDependencies: + idcac-playwright: 0.2.0 + playwright: 1.61.0 + transitivePeerDependencies: + - puppeteer + - supports-color + + '@crawlee/puppeteer@3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.2.0)': + dependencies: + '@apify/datastructures': 2.0.3 + '@apify/log': 2.5.34 + '@crawlee/browser': 3.16.0(playwright@1.61.0)(puppeteer@25.2.0) + '@crawlee/browser-pool': 3.16.0(playwright@1.61.0)(puppeteer@25.2.0) + '@crawlee/types': 3.16.0 + '@crawlee/utils': 3.16.0 + cheerio: 1.0.0-rc.12 + devtools-protocol: 0.0.1612613 + jquery: 3.7.1 + ow: 0.28.2 + tslib: 2.8.1 + optionalDependencies: + idcac-playwright: 0.2.0 + puppeteer: 25.2.0 + transitivePeerDependencies: + - playwright + - supports-color + + '@crawlee/puppeteer@3.16.0(idcac-playwright@0.2.0)(playwright@1.61.1)(puppeteer@25.2.0)': dependencies: '@apify/datastructures': 2.0.3 '@apify/log': 2.5.34 - '@crawlee/browser': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) - '@crawlee/browser-pool': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + '@crawlee/browser': 3.16.0(playwright@1.61.1)(puppeteer@25.2.0) + '@crawlee/browser-pool': 3.16.0(playwright@1.61.1)(puppeteer@25.2.0) '@crawlee/types': 3.16.0 '@crawlee/utils': 3.16.0 cheerio: 1.0.0-rc.12 @@ -5843,7 +5963,7 @@ snapshots: tslib: 2.8.1 optionalDependencies: idcac-playwright: 0.2.0 - puppeteer: 24.40.0(typescript@5.9.3) + puppeteer: 25.2.0 transitivePeerDependencies: - playwright - supports-color @@ -5862,7 +5982,12 @@ snapshots: dependencies: tslib: 2.8.1 - '@crawlee/types@4.0.0-beta.43': + '@crawlee/types@4.0.0-beta.25': + dependencies: + tough-cookie: 6.0.1 + tslib: 2.8.1 + + '@crawlee/types@4.0.0-beta.29': dependencies: tough-cookie: 6.0.1 tslib: 2.8.1 @@ -5884,11 +6009,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@crawlee/utils@4.0.0-beta.43': + '@crawlee/utils@4.0.0-beta.25': dependencies: + '@apify/log': 2.5.34 '@apify/ps-tree': 1.2.0 - '@crawlee/http-client': 4.0.0-beta.43 - '@crawlee/types': 4.0.0-beta.43 + '@crawlee/http-client': 4.0.0-beta.25 + '@crawlee/types': 4.0.0-beta.25 '@types/sax': 1.2.7 cheerio: 1.2.0 domhandler: 5.0.3 @@ -5910,7 +6036,7 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-calc@3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-calc@3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -5922,10 +6048,10 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-color-parser@4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-color-parser@4.1.7(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/color-helpers': 6.0.2 - '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -5937,7 +6063,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.3(css-tree@3.2.1)': + '@csstools/css-syntax-patches-for-csstree@1.1.5(css-tree@3.2.1)': optionalDependencies: css-tree: 3.2.1 @@ -6036,7 +6162,7 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@exodus/bytes@1.15.0': {} + '@exodus/bytes@1.15.1': {} '@gar/promise-retry@1.0.3': {} @@ -6216,7 +6342,7 @@ snapshots: agent-base: 7.1.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 - lru-cache: 11.3.5 + lru-cache: 11.5.1 socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color @@ -6239,7 +6365,7 @@ snapshots: common-ancestor-path: 1.0.1 hosted-git-info: 9.0.2 json-stringify-nice: 1.1.4 - lru-cache: 11.3.5 + lru-cache: 11.5.1 minimatch: 10.2.5 nopt: 8.1.0 npm-install-checks: 7.1.2 @@ -6252,7 +6378,7 @@ snapshots: proggy: 3.0.0 promise-all-reject-late: 1.0.1 promise-call-limit: 3.0.2 - semver: 7.7.2 + semver: 7.7.4 ssri: 12.0.0 treeverse: 3.0.0 walk-up-path: 4.0.0 @@ -6261,11 +6387,11 @@ snapshots: '@npmcli/fs@4.0.0': dependencies: - semver: 7.7.2 + semver: 7.7.4 '@npmcli/fs@5.0.0': dependencies: - semver: 7.7.2 + semver: 7.7.4 '@npmcli/git@6.0.3': dependencies: @@ -6275,7 +6401,7 @@ snapshots: npm-pick-manifest: 10.0.0 proc-log: 5.0.0 promise-retry: 2.0.1 - semver: 7.7.2 + semver: 7.7.4 which: 5.0.0 '@npmcli/git@7.0.2': @@ -6283,10 +6409,10 @@ snapshots: '@gar/promise-retry': 1.0.3 '@npmcli/promise-spawn': 9.0.1 ini: 6.0.0 - lru-cache: 11.3.5 + lru-cache: 11.5.1 npm-pick-manifest: 11.0.3 proc-log: 6.1.0 - semver: 7.7.2 + semver: 7.7.4 which: 6.0.1 '@npmcli/installed-package-contents@3.0.0': @@ -6312,7 +6438,7 @@ snapshots: json-parse-even-better-errors: 5.0.0 pacote: 21.5.0 proc-log: 6.1.0 - semver: 7.7.2 + semver: 7.7.4 transitivePeerDependencies: - supports-color @@ -6331,7 +6457,7 @@ snapshots: hosted-git-info: 9.0.2 json-parse-even-better-errors: 5.0.0 proc-log: 6.1.0 - semver: 7.7.2 + semver: 7.7.4 validate-npm-package-license: 3.0.4 '@npmcli/promise-spawn@8.0.3': @@ -6368,7 +6494,7 @@ snapshots: enquirer: 2.3.6 minimatch: 10.2.4 nx: 22.6.5 - semver: 7.7.2 + semver: 7.7.4 tslib: 2.8.1 yargs-parser: 21.1.1 @@ -6599,98 +6725,88 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.62.0': optional: true - '@playwright/browser-chromium@1.59.1': + '@playwright/browser-chromium@1.61.0': dependencies: - playwright-core: 1.59.1 + playwright-core: 1.61.0 - '@puppeteer/browsers@2.13.0': + '@puppeteer/browsers@3.0.5': dependencies: - debug: 4.4.3 - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.5.0 - semver: 7.7.4 - tar-fs: 3.1.2 - yargs: 17.7.2 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - supports-color + modern-tar: 0.7.6 + yargs: 18.0.0 - '@rollup/rollup-android-arm-eabi@4.60.1': + '@rollup/rollup-android-arm-eabi@4.62.0': optional: true - '@rollup/rollup-android-arm64@4.60.1': + '@rollup/rollup-android-arm64@4.62.0': optional: true - '@rollup/rollup-darwin-arm64@4.60.1': + '@rollup/rollup-darwin-arm64@4.62.0': optional: true - '@rollup/rollup-darwin-x64@4.60.1': + '@rollup/rollup-darwin-x64@4.62.0': optional: true - '@rollup/rollup-freebsd-arm64@4.60.1': + '@rollup/rollup-freebsd-arm64@4.62.0': optional: true - '@rollup/rollup-freebsd-x64@4.60.1': + '@rollup/rollup-freebsd-x64@4.62.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.1': + '@rollup/rollup-linux-arm-gnueabihf@4.62.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.1': + '@rollup/rollup-linux-arm-musleabihf@4.62.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.1': + '@rollup/rollup-linux-arm64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.60.1': + '@rollup/rollup-linux-arm64-musl@4.62.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.1': + '@rollup/rollup-linux-loong64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.60.1': + '@rollup/rollup-linux-loong64-musl@4.62.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.1': + '@rollup/rollup-linux-ppc64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.1': + '@rollup/rollup-linux-ppc64-musl@4.62.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.1': + '@rollup/rollup-linux-riscv64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.1': + '@rollup/rollup-linux-riscv64-musl@4.62.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.1': + '@rollup/rollup-linux-s390x-gnu@4.62.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.60.1': + '@rollup/rollup-linux-x64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-x64-musl@4.60.1': + '@rollup/rollup-linux-x64-musl@4.62.0': optional: true - '@rollup/rollup-openbsd-x64@4.60.1': + '@rollup/rollup-openbsd-x64@4.62.0': optional: true - '@rollup/rollup-openharmony-arm64@4.60.1': + '@rollup/rollup-openharmony-arm64@4.62.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.1': + '@rollup/rollup-win32-arm64-msvc@4.62.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.1': + '@rollup/rollup-win32-ia32-msvc@4.62.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.60.1': + '@rollup/rollup-win32-x64-gnu@4.62.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.60.1': + '@rollup/rollup-win32-x64-msvc@4.62.0': optional: true '@sapphire/async-queue@1.5.5': {} @@ -6818,6 +6934,8 @@ snapshots: '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 @@ -6855,11 +6973,6 @@ snapshots: dependencies: '@types/node': 24.12.2 - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 24.12.2 - optional: true - '@vitest/expect@4.1.4': dependencies: '@standard-schema/spec': 1.1.0 @@ -7014,9 +7127,9 @@ snapshots: '@apify/log': 2.5.34 '@apify/timeout': 0.3.2 '@apify/utilities': 2.25.6 - '@crawlee/core': 4.0.0-beta.43 - '@crawlee/types': 4.0.0-beta.43 - '@crawlee/utils': 4.0.0-beta.43 + '@crawlee/core': 4.0.0-beta.25 + '@crawlee/types': 4.0.0-beta.25 + '@crawlee/utils': 4.0.0-beta.25 apify-client: 2.22.3 fs-extra: 11.3.4 got-scraping: 4.2.1 @@ -7067,44 +7180,10 @@ snapshots: transitivePeerDependencies: - debug - b4a@1.8.0: {} - balanced-match@1.0.2: {} balanced-match@4.0.4: {} - bare-events@2.8.2: {} - - bare-fs@4.7.0: - dependencies: - bare-events: 2.8.2 - bare-path: 3.0.0 - bare-stream: 2.13.0(bare-events@2.8.2) - bare-url: 2.4.0 - fast-fifo: 1.3.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - bare-os@3.8.7: {} - - bare-path@3.0.0: - dependencies: - bare-os: 3.8.7 - - bare-stream@2.13.0(bare-events@2.8.2): - dependencies: - streamx: 2.25.0 - teex: 1.0.1 - optionalDependencies: - bare-events: 2.8.2 - transitivePeerDependencies: - - react-native-b4a - - bare-url@2.4.0: - dependencies: - bare-path: 3.0.0 - base64-js@1.5.1: {} baseline-browser-mapping@2.10.18: {} @@ -7113,7 +7192,7 @@ snapshots: before-after-hook@2.2.3: {} - better-sqlite3@12.9.0: + better-sqlite3@12.11.1: dependencies: bindings: 1.5.0 prebuild-install: 7.1.3 @@ -7169,8 +7248,6 @@ snapshots: node-releases: 2.0.37 update-browserslist-db: 1.2.3(browserslist@4.28.2) - buffer-crc32@0.2.13: {} - buffer-from@1.1.2: {} buffer@5.7.1: @@ -7187,7 +7264,7 @@ snapshots: '@npmcli/fs': 5.0.0 fs-minipass: 3.0.3 glob: 13.0.6 - lru-cache: 11.3.5 + lru-cache: 11.5.1 minipass: 7.1.3 minipass-collect: 2.0.1 minipass-flush: 1.0.7 @@ -7236,15 +7313,15 @@ snapshots: camelcase@5.3.1: {} - camoufox-js@0.9.3(playwright-core@1.59.1): + camoufox-js@0.11.1(playwright-core@1.59.1): dependencies: adm-zip: 0.5.17 - better-sqlite3: 12.9.0 + better-sqlite3: 12.11.1 cli-progress: 3.12.0 commander: 14.0.3 fingerprint-generator: 2.1.82 glob: 13.0.6 - impit: 0.11.0 + impit: 0.14.2 language-tags: 2.1.0 maxmind: 5.0.6 playwright-core: 1.59.1 @@ -7313,9 +7390,9 @@ snapshots: chownr@3.0.0: {} - chromium-bidi@14.0.0(devtools-protocol@0.0.1581282): + chromium-bidi@16.0.1(devtools-protocol@0.0.1638949): dependencies: - devtools-protocol: 0.0.1581282 + devtools-protocol: 0.0.1638949 mitt: 3.0.1 zod: 3.25.76 @@ -7362,6 +7439,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + clone@1.0.4: {} cmd-shim@6.0.3: {} @@ -7454,7 +7537,7 @@ snapshots: handlebars: 4.7.9 json-stringify-safe: 5.0.1 meow: 8.1.2 - semver: 7.7.2 + semver: 7.7.4 split: 1.0.1 conventional-commits-filter@3.0.0: @@ -7515,26 +7598,26 @@ snapshots: optionalDependencies: typescript: 5.9.3 - crawlee@3.16.0(@types/node@24.12.2)(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)): + crawlee@3.16.0(@types/node@24.12.2)(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.2.0): dependencies: '@crawlee/basic': 3.16.0 - '@crawlee/browser': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) - '@crawlee/browser-pool': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + '@crawlee/browser': 3.16.0(playwright@1.61.0)(puppeteer@25.2.0) + '@crawlee/browser-pool': 3.16.0(playwright@1.61.0)(puppeteer@25.2.0) '@crawlee/cheerio': 3.16.0 '@crawlee/cli': 3.16.0(@types/node@24.12.2) '@crawlee/core': 3.16.0 '@crawlee/http': 3.16.0 '@crawlee/jsdom': 3.16.0 '@crawlee/linkedom': 3.16.0 - '@crawlee/playwright': 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) - '@crawlee/puppeteer': 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + '@crawlee/playwright': 3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.2.0) + '@crawlee/puppeteer': 3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.2.0) '@crawlee/utils': 3.16.0 import-local: 3.2.0 tslib: 2.8.1 optionalDependencies: idcac-playwright: 0.2.0 - playwright: 1.59.1 - puppeteer: 24.40.0(typescript@5.9.3) + playwright: 1.61.0 + puppeteer: 25.2.0 transitivePeerDependencies: - '@types/node' - bufferutil @@ -7657,10 +7740,10 @@ snapshots: detect-node@2.1.0: {} - devtools-protocol@0.0.1581282: {} - devtools-protocol@0.0.1612613: {} + devtools-protocol@0.0.1638949: {} + devtools-server@0.0.2: dependencies: async-retry: 1.3.3 @@ -7750,6 +7833,8 @@ snapshots: entities@7.0.1: {} + entities@8.0.0: {} + env-paths@2.2.1: {} envinfo@7.13.0: {} @@ -7844,12 +7929,6 @@ snapshots: eventemitter3@5.0.4: {} - events-universal@1.0.1: - dependencies: - bare-events: 2.8.2 - transitivePeerDependencies: - - bare-abort-controller - execa@5.0.0: dependencies: cross-spawn: 7.0.6 @@ -7868,22 +7947,10 @@ snapshots: exponential-backoff@3.1.3: {} - extract-zip@2.0.1: - dependencies: - debug: 4.4.3 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - fast-deep-equal@3.1.3: {} fast-equals@5.4.0: {} - fast-fifo@1.3.2: {} - fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7898,10 +7965,6 @@ snapshots: dependencies: reusify: 1.1.0 - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 @@ -7955,13 +8018,29 @@ snapshots: header-generator: 2.1.82 tslib: 2.8.1 - fingerprint-injector@2.1.82(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)): + fingerprint-injector@2.1.82(playwright@1.59.1)(puppeteer@25.2.0): dependencies: fingerprint-generator: 2.1.82 tslib: 2.8.1 optionalDependencies: playwright: 1.59.1 - puppeteer: 24.40.0(typescript@5.9.3) + puppeteer: 25.2.0 + + fingerprint-injector@2.1.82(playwright@1.61.0)(puppeteer@25.2.0): + dependencies: + fingerprint-generator: 2.1.82 + tslib: 2.8.1 + optionalDependencies: + playwright: 1.61.0 + puppeteer: 25.2.0 + + fingerprint-injector@2.1.82(playwright@1.61.1)(puppeteer@25.2.0): + dependencies: + fingerprint-generator: 2.1.82 + tslib: 2.8.1 + optionalDependencies: + playwright: 1.61.1 + puppeteer: 25.2.0 flat@5.0.2: {} @@ -8048,10 +8127,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stream@5.2.0: - dependencies: - pump: 3.0.4 - get-stream@6.0.0: {} get-stream@9.0.1: @@ -8093,7 +8168,7 @@ snapshots: git-semver-tags@5.0.1: dependencies: meow: 8.1.2 - semver: 7.7.2 + semver: 7.7.4 git-up@7.0.0: dependencies: @@ -8234,7 +8309,7 @@ snapshots: hosted-git-info@9.0.2: dependencies: - lru-cache: 11.3.5 + lru-cache: 11.5.1 html-encoding-sniffer@4.0.0: dependencies: @@ -8242,7 +8317,7 @@ snapshots: html-encoding-sniffer@6.0.0: dependencies: - '@exodus/bytes': 1.15.0 + '@exodus/bytes': 1.15.1 transitivePeerDependencies: - '@noble/hashes' @@ -8329,75 +8404,75 @@ snapshots: ignore@7.0.5: {} - impit-darwin-arm64@0.11.0: + impit-darwin-arm64@0.14.2: optional: true - impit-darwin-arm64@0.9.2: + impit-darwin-arm64@0.8.2: optional: true - impit-darwin-x64@0.11.0: + impit-darwin-x64@0.14.2: optional: true - impit-darwin-x64@0.9.2: + impit-darwin-x64@0.8.2: optional: true - impit-linux-arm64-gnu@0.11.0: + impit-linux-arm64-gnu@0.14.2: optional: true - impit-linux-arm64-gnu@0.9.2: + impit-linux-arm64-gnu@0.8.2: optional: true - impit-linux-arm64-musl@0.11.0: + impit-linux-arm64-musl@0.14.2: optional: true - impit-linux-arm64-musl@0.9.2: + impit-linux-arm64-musl@0.8.2: optional: true - impit-linux-x64-gnu@0.11.0: + impit-linux-x64-gnu@0.14.2: optional: true - impit-linux-x64-gnu@0.9.2: + impit-linux-x64-gnu@0.8.2: optional: true - impit-linux-x64-musl@0.11.0: + impit-linux-x64-musl@0.14.2: optional: true - impit-linux-x64-musl@0.9.2: + impit-linux-x64-musl@0.8.2: optional: true - impit-win32-arm64-msvc@0.11.0: + impit-win32-arm64-msvc@0.14.2: optional: true - impit-win32-arm64-msvc@0.9.2: + impit-win32-arm64-msvc@0.8.2: optional: true - impit-win32-x64-msvc@0.11.0: + impit-win32-x64-msvc@0.14.2: optional: true - impit-win32-x64-msvc@0.9.2: + impit-win32-x64-msvc@0.8.2: optional: true - impit@0.11.0: + impit@0.14.2: optionalDependencies: - impit-darwin-arm64: 0.11.0 - impit-darwin-x64: 0.11.0 - impit-linux-arm64-gnu: 0.11.0 - impit-linux-arm64-musl: 0.11.0 - impit-linux-x64-gnu: 0.11.0 - impit-linux-x64-musl: 0.11.0 - impit-win32-arm64-msvc: 0.11.0 - impit-win32-x64-msvc: 0.11.0 - - impit@0.9.2: + impit-darwin-arm64: 0.14.2 + impit-darwin-x64: 0.14.2 + impit-linux-arm64-gnu: 0.14.2 + impit-linux-arm64-musl: 0.14.2 + impit-linux-x64-gnu: 0.14.2 + impit-linux-x64-musl: 0.14.2 + impit-win32-arm64-msvc: 0.14.2 + impit-win32-x64-msvc: 0.14.2 + + impit@0.8.2: optionalDependencies: - impit-darwin-arm64: 0.9.2 - impit-darwin-x64: 0.9.2 - impit-linux-arm64-gnu: 0.9.2 - impit-linux-arm64-musl: 0.9.2 - impit-linux-x64-gnu: 0.9.2 - impit-linux-x64-musl: 0.9.2 - impit-win32-arm64-msvc: 0.9.2 - impit-win32-x64-msvc: 0.9.2 + impit-darwin-arm64: 0.8.2 + impit-darwin-x64: 0.8.2 + impit-linux-arm64-gnu: 0.8.2 + impit-linux-arm64-musl: 0.8.2 + impit-linux-x64-gnu: 0.8.2 + impit-linux-x64-musl: 0.8.2 + impit-win32-arm64-msvc: 0.8.2 + impit-win32-x64-msvc: 0.8.2 import-fresh@3.3.1: dependencies: @@ -8438,7 +8513,7 @@ snapshots: npm-package-arg: 13.0.1 promzard: 2.0.0 read: 4.1.0 - semver: 7.7.2 + semver: 7.7.4 validate-npm-package-license: 3.0.4 validate-npm-package-name: 6.0.2 @@ -8614,7 +8689,7 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 - ws: 8.20.0 + ws: 8.21.0 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -8623,22 +8698,22 @@ snapshots: jsdom@29.0.2: dependencies: - '@asamuzakjp/css-color': 5.1.10 - '@asamuzakjp/dom-selector': 7.0.9 + '@asamuzakjp/css-color': 5.1.11 + '@asamuzakjp/dom-selector': 7.1.1 '@bramus/specificity': 2.4.2 - '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1) - '@exodus/bytes': 1.15.0 + '@csstools/css-syntax-patches-for-csstree': 1.1.5(css-tree@3.2.1) + '@exodus/bytes': 1.15.1 css-tree: 3.2.1 data-urls: 7.0.0 decimal.js: 10.6.0 html-encoding-sniffer: 6.0.0 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.3.5 - parse5: 8.0.0 + lru-cache: 11.5.1 + parse5: 8.0.1 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 6.0.1 - undici: 7.24.8 + undici: 7.28.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 @@ -8779,12 +8854,14 @@ snapshots: npm-package-arg: 13.0.1 npm-registry-fetch: 19.1.0 proc-log: 5.0.0 - semver: 7.7.2 + semver: 7.7.4 sigstore: 4.1.0 ssri: 12.0.0 transitivePeerDependencies: - supports-color + lilconfig@3.1.3: {} + lines-and-columns@1.2.4: {} lines-and-columns@2.0.3: {} @@ -8875,7 +8952,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.3.5: {} + lru-cache@11.5.1: {} lru-cache@6.0.0: dependencies: @@ -9089,6 +9166,8 @@ snapshots: mmdb-lib@3.0.2: {} + modern-tar@0.7.6: {} + modify-values@1.0.1: {} ms@2.1.3: {} @@ -9101,6 +9180,8 @@ snapshots: nanoid@3.3.11: {} + nanoid@3.3.12: {} + napi-build-utils@2.0.0: {} negotiator@1.0.0: {} @@ -9121,7 +9202,7 @@ snapshots: make-fetch-happen: 15.0.2 nopt: 9.0.0 proc-log: 6.1.0 - semver: 7.7.2 + semver: 7.7.4 tar: 7.5.11 tinyglobby: 0.2.16 which: 6.0.1 @@ -9149,7 +9230,7 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.16.1 - semver: 7.7.2 + semver: 7.7.4 validate-npm-package-license: 3.0.4 normalize-url@8.1.1: {} @@ -9164,11 +9245,11 @@ snapshots: npm-install-checks@7.1.2: dependencies: - semver: 7.7.2 + semver: 7.7.4 npm-install-checks@8.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.4 npm-normalize-package-bin@4.0.0: {} @@ -9178,14 +9259,14 @@ snapshots: dependencies: hosted-git-info: 8.1.0 proc-log: 5.0.0 - semver: 7.7.2 + semver: 7.7.4 validate-npm-package-name: 6.0.2 npm-package-arg@13.0.1: dependencies: hosted-git-info: 9.0.2 proc-log: 5.0.0 - semver: 7.7.2 + semver: 7.7.4 validate-npm-package-name: 6.0.2 npm-packlist@10.0.3: @@ -9198,14 +9279,14 @@ snapshots: npm-install-checks: 7.1.2 npm-normalize-package-bin: 4.0.0 npm-package-arg: 12.0.2 - semver: 7.7.2 + semver: 7.7.4 npm-pick-manifest@11.0.3: dependencies: npm-install-checks: 8.0.0 npm-normalize-package-bin: 5.0.0 npm-package-arg: 13.0.1 - semver: 7.7.2 + semver: 7.7.4 npm-registry-fetch@19.1.0: dependencies: @@ -9257,7 +9338,7 @@ snapshots: ora: 5.3.0 picocolors: 1.1.1 resolve.exports: 2.0.3 - semver: 7.7.2 + semver: 7.7.4 smol-toml: 1.6.1 string-width: 4.2.3 tar-stream: 2.2.0 @@ -9437,10 +9518,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@6.2.0: - dependencies: - yocto-queue: 1.2.2 - p-locate@2.0.0: dependencies: p-limit: 1.3.0 @@ -9589,9 +9666,9 @@ snapshots: dependencies: entities: 6.0.1 - parse5@8.0.0: + parse5@8.0.1: dependencies: - entities: 6.0.1 + entities: 8.0.0 path-exists@3.0.0: {} @@ -9603,7 +9680,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.3.5 + lru-cache: 11.5.1 minipass: 7.1.3 path-type@3.0.0: @@ -9618,8 +9695,6 @@ snapshots: dependencies: through: 2.3.8 - pend@1.2.0: {} - picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -9636,20 +9711,38 @@ snapshots: playwright-core@1.59.1: {} + playwright-core@1.61.0: {} + + playwright-core@1.61.1: + optional: true + playwright@1.59.1: dependencies: playwright-core: 1.59.1 optionalDependencies: fsevents: 2.3.2 + playwright@1.61.0: + dependencies: + playwright-core: 1.61.0 + optionalDependencies: + fsevents: 2.3.2 + + playwright@1.61.1: + dependencies: + playwright-core: 1.61.1 + optionalDependencies: + fsevents: 2.3.2 + optional: true + postcss-selector-parser@7.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.9: + postcss@8.5.15: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -9684,8 +9777,6 @@ snapshots: proggy@3.0.0: {} - progress@2.0.3: {} - promise-all-reject-late@1.0.1: {} promise-call-limit@3.0.2: {} @@ -9739,38 +9830,30 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.40.0: + puppeteer-core@25.2.0: dependencies: - '@puppeteer/browsers': 2.13.0 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) - debug: 4.4.3 - devtools-protocol: 0.0.1581282 - typed-query-selector: 2.12.1 - webdriver-bidi-protocol: 0.4.1 - ws: 8.20.0 + '@puppeteer/browsers': 3.0.5 + chromium-bidi: 16.0.1(devtools-protocol@0.0.1638949) + devtools-protocol: 0.0.1638949 + typed-query-selector: 2.12.2 + webdriver-bidi-protocol: 0.4.2 + ws: 8.21.0 transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - bufferutil - - react-native-b4a - - supports-color + - proxy-agent - utf-8-validate - puppeteer@24.40.0(typescript@5.9.3): + puppeteer@25.2.0: dependencies: - '@puppeteer/browsers': 2.13.0 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) - cosmiconfig: 9.0.1(typescript@5.9.3) - devtools-protocol: 0.0.1581282 - puppeteer-core: 24.40.0 - typed-query-selector: 2.12.1 + '@puppeteer/browsers': 3.0.5 + chromium-bidi: 16.0.1(devtools-protocol@0.0.1638949) + devtools-protocol: 0.0.1638949 + lilconfig: 3.1.3 + puppeteer-core: 25.2.0 + typed-query-selector: 2.12.2 transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - bufferutil - - react-native-b4a - - supports-color - - typescript + - proxy-agent - utf-8-validate queue-microtask@1.2.3: {} @@ -9910,35 +9993,35 @@ snapshots: robots-parser@3.0.1: {} - rollup@4.60.1: + rollup@4.62.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.1 - '@rollup/rollup-android-arm64': 4.60.1 - '@rollup/rollup-darwin-arm64': 4.60.1 - '@rollup/rollup-darwin-x64': 4.60.1 - '@rollup/rollup-freebsd-arm64': 4.60.1 - '@rollup/rollup-freebsd-x64': 4.60.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.1 - '@rollup/rollup-linux-arm-musleabihf': 4.60.1 - '@rollup/rollup-linux-arm64-gnu': 4.60.1 - '@rollup/rollup-linux-arm64-musl': 4.60.1 - '@rollup/rollup-linux-loong64-gnu': 4.60.1 - '@rollup/rollup-linux-loong64-musl': 4.60.1 - '@rollup/rollup-linux-ppc64-gnu': 4.60.1 - '@rollup/rollup-linux-ppc64-musl': 4.60.1 - '@rollup/rollup-linux-riscv64-gnu': 4.60.1 - '@rollup/rollup-linux-riscv64-musl': 4.60.1 - '@rollup/rollup-linux-s390x-gnu': 4.60.1 - '@rollup/rollup-linux-x64-gnu': 4.60.1 - '@rollup/rollup-linux-x64-musl': 4.60.1 - '@rollup/rollup-openbsd-x64': 4.60.1 - '@rollup/rollup-openharmony-arm64': 4.60.1 - '@rollup/rollup-win32-arm64-msvc': 4.60.1 - '@rollup/rollup-win32-ia32-msvc': 4.60.1 - '@rollup/rollup-win32-x64-gnu': 4.60.1 - '@rollup/rollup-win32-x64-msvc': 4.60.1 + '@rollup/rollup-android-arm-eabi': 4.62.0 + '@rollup/rollup-android-arm64': 4.62.0 + '@rollup/rollup-darwin-arm64': 4.62.0 + '@rollup/rollup-darwin-x64': 4.62.0 + '@rollup/rollup-freebsd-arm64': 4.62.0 + '@rollup/rollup-freebsd-x64': 4.62.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.0 + '@rollup/rollup-linux-arm-musleabihf': 4.62.0 + '@rollup/rollup-linux-arm64-gnu': 4.62.0 + '@rollup/rollup-linux-arm64-musl': 4.62.0 + '@rollup/rollup-linux-loong64-gnu': 4.62.0 + '@rollup/rollup-linux-loong64-musl': 4.62.0 + '@rollup/rollup-linux-ppc64-gnu': 4.62.0 + '@rollup/rollup-linux-ppc64-musl': 4.62.0 + '@rollup/rollup-linux-riscv64-gnu': 4.62.0 + '@rollup/rollup-linux-riscv64-musl': 4.62.0 + '@rollup/rollup-linux-s390x-gnu': 4.62.0 + '@rollup/rollup-linux-x64-gnu': 4.62.0 + '@rollup/rollup-linux-x64-musl': 4.62.0 + '@rollup/rollup-openbsd-x64': 4.62.0 + '@rollup/rollup-openharmony-arm64': 4.62.0 + '@rollup/rollup-win32-arm64-msvc': 4.62.0 + '@rollup/rollup-win32-ia32-msvc': 4.62.0 + '@rollup/rollup-win32-x64-gnu': 4.62.0 + '@rollup/rollup-win32-x64-msvc': 4.62.0 fsevents: 2.3.3 rrweb-cssom@0.8.0: {} @@ -10110,15 +10193,6 @@ snapshots: dependencies: stream-chain: 2.2.5 - streamx@2.25.0: - dependencies: - events-universal: 1.0.1 - fast-fifo: 1.3.2 - text-decoder: 1.2.7 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - string-argv@0.3.2: {} string-comparison@1.3.0: {} @@ -10199,18 +10273,6 @@ snapshots: pump: 3.0.4 tar-stream: 2.2.0 - tar-fs@3.1.2: - dependencies: - pump: 3.0.4 - tar-stream: 3.1.8 - optionalDependencies: - bare-fs: 4.7.0 - bare-path: 3.0.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - tar-stream@2.2.0: dependencies: bl: 4.1.0 @@ -10219,17 +10281,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - tar-stream@3.1.8: - dependencies: - b4a: 1.8.0 - bare-fs: 4.7.0 - fast-fifo: 1.3.2 - streamx: 2.25.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - tar@7.5.11: dependencies: '@isaacs/fs-minipass': 4.0.1 @@ -10238,19 +10289,6 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 - teex@1.0.1: - dependencies: - streamx: 2.25.0 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - text-decoder@1.2.7: - dependencies: - b4a: 1.8.0 - transitivePeerDependencies: - - react-native-b4a - text-extensions@1.9.0: {} through2@2.0.5: @@ -10282,6 +10320,11 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + tinypool@2.1.0: {} tinyrainbow@3.1.0: {} @@ -10386,7 +10429,7 @@ snapshots: type-fest@4.41.0: {} - typed-query-selector@2.12.1: {} + typed-query-selector@2.12.2: {} typedarray@0.0.6: {} @@ -10411,6 +10454,8 @@ snapshots: undici@7.24.8: {} + undici@7.28.0: {} + unicorn-magic@0.3.0: {} universal-user-agent@6.0.1: {} @@ -10455,9 +10500,9 @@ snapshots: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - postcss: 8.5.9 - rollup: 4.60.1 - tinyglobby: 0.2.16 + postcss: 8.5.15 + rollup: 4.62.0 + tinyglobby: 0.2.17 optionalDependencies: '@types/node': 24.12.2 fsevents: 2.3.3 @@ -10505,7 +10550,7 @@ snapshots: web-worker@1.5.0: {} - webdriver-bidi-protocol@0.4.1: {} + webdriver-bidi-protocol@0.4.2: {} webidl-conversions@7.0.0: {} @@ -10526,7 +10571,7 @@ snapshots: whatwg-url@16.0.1: dependencies: - '@exodus/bytes': 1.15.0 + '@exodus/bytes': 1.15.1 tr46: 6.0.0 webidl-conversions: 8.0.1 transitivePeerDependencies: @@ -10587,6 +10632,8 @@ snapshots: ws@8.20.0: {} + ws@8.21.0: {} + xml-name-validator@5.0.0: {} xml2js@0.6.2: @@ -10618,6 +10665,8 @@ snapshots: yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs@16.2.0: dependencies: cliui: 7.0.4 @@ -10638,15 +10687,17 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yauzl@2.10.0: + yargs@18.0.0: dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 yocto-queue@0.1.0: {} - yocto-queue@1.2.2: {} - yoctocolors-cjs@2.1.3: {} zod@3.25.76: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6f7217ed..0d6c0e5b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -14,6 +14,7 @@ minimumReleaseAgeExclude: onlyBuiltDependencies: - "@playwright/browser-chromium" - "@swc/core" + - better-sqlite3 - camoufox-js - esbuild - playwright @@ -22,3 +23,11 @@ onlyBuiltDependencies: nodeLinker: hoisted linkWorkspacePackages: true preferWorkspacePackages: true + +# Sitemap Extractor is the only actor on Apify/Crawlee v4 beta. Other generic actors intentionally +# stay on Apify/Crawlee v3. apify@4 beta depends on @crawlee/* through broad beta ranges, so force +# its internal Crawlee packages to the same beta versions used directly by the sitemap actor. +overrides: + "apify@4.0.0-beta.12>@crawlee/core": "4.0.0-beta.25" + "apify@4.0.0-beta.12>@crawlee/types": "4.0.0-beta.25" + "apify@4.0.0-beta.12>@crawlee/utils": "4.0.0-beta.25" diff --git a/renovate.json b/renovate.json index 73f61b40..583d0e52 100644 --- a/renovate.json +++ b/renovate.json @@ -31,6 +31,50 @@ "got-scraping" ], "minimumReleaseAge": "0 days" + }, + { + "description": "Update the Sitemap Extractor Apify/Crawlee v4 beta stack together", + "matchManagers": ["npm", "pnpm"], + "matchFileNames": ["packages/actor-scraper/sitemap-scraper/package.json", "pnpm-workspace.yaml"], + "matchPackageNames": ["apify", "@crawlee/*"], + "groupName": "sitemap Crawlee v4 beta stack" + }, + { + "description": "Update the Camoufox image and its JS drivers as one tested stack", + "matchManagers": ["dockerfile", "npm"], + "matchFileNames": [ + "packages/actor-scraper/camoufox-scraper/Dockerfile", + "packages/actor-scraper/camoufox-scraper/package.json" + ], + "matchPackageNames": [ + "apify/actor-node-playwright-camoufox", + "camoufox-js", + "playwright", + "playwright-core" + ], + "groupName": "camoufox browser stack" + }, + { + "description": "Update the Playwright image and driver as one tested stack", + "matchManagers": ["dockerfile", "npm"], + "matchFileNames": [ + "packages/actor-scraper/playwright-scraper/Dockerfile", + "packages/actor-scraper/playwright-scraper/package.json" + ], + "matchPackageNames": ["apify/actor-node-playwright", "playwright"], + "groupName": "playwright browser stack" + }, + { + "description": "Update the Chrome image and Puppeteer drivers as one tested stack", + "matchManagers": ["dockerfile", "npm"], + "matchFileNames": [ + "packages/actor-scraper/puppeteer-scraper/Dockerfile", + "packages/actor-scraper/puppeteer-scraper/package.json", + "packages/actor-scraper/web-scraper/Dockerfile", + "packages/actor-scraper/web-scraper/package.json" + ], + "matchPackageNames": ["apify/actor-node-puppeteer-chrome", "puppeteer"], + "groupName": "puppeteer browser stack" } ], "schedule": ["every weekday"] diff --git a/scripts/trigger-apify-build.mjs b/scripts/trigger-apify-build.mjs new file mode 100644 index 00000000..e80b71f2 --- /dev/null +++ b/scripts/trigger-apify-build.mjs @@ -0,0 +1,75 @@ +import { ApifyClient } from 'apify-client'; + +const TERMINAL_STATUSES = new Set(['SUCCEEDED', 'FAILED', 'TIMED-OUT', 'ABORTED']); + +function requiredEnv(name) { + const value = process.env[name]; + + if (!value) { + throw new Error(`Missing required environment variable: ${name}`); + } + + return value; +} + +const token = requiredEnv('APIFY_TOKEN'); +const actorId = requiredEnv('APIFY_ACTOR'); +const buildVersion = requiredEnv('BUILD_VERSION'); +const buildTag = requiredEnv('BUILD_TAG'); +const timeoutSecs = Number(process.env.APIFY_RELEASE_BUILD_TIMEOUT_SECS ?? 900); + +if (!Number.isInteger(timeoutSecs) || timeoutSecs <= 0) { + throw new Error(`APIFY_RELEASE_BUILD_TIMEOUT_SECS must be a positive integer, got "${timeoutSecs}"`); +} + +const client = new ApifyClient({ token }); +const actorClient = client.actor(actorId); +const versionClient = actorClient.version(buildVersion); + +const version = await versionClient.get(); + +if (!version) { + throw new Error(`Actor version "${buildVersion}" does not exist on "${actorId}"`); +} + +if (version.buildTag !== buildTag) { + throw new Error( + `Actor version "${buildVersion}" has build tag "${version.buildTag}", but the workflow requested "${buildTag}". ` + + 'Align the workflow matrix with the Actor version configuration before building.', + ); +} + +if (version.sourceType !== 'GIT_REPO') { + throw new Error( + `Actor version "${buildVersion}" uses sourceType "${version.sourceType}". This workflow only builds Git sources.`, + ); +} + +console.log( + `Building ${actorId} version ${buildVersion} (tag ${buildTag}) from ${version.gitRepoUrl ?? ''}`, +); + +const build = await actorClient.build(buildVersion, { tag: buildTag }); + +console.log(`Triggered build ${build.id} (${actorId}, version ${buildVersion}, tag ${buildTag})`); + +const finishedBuild = await client.build(build.id).waitForFinish({ waitSecs: timeoutSecs }); +const status = finishedBuild?.status ?? ''; + +console.log(`Build ${build.id}: ${status}`); + +if (!TERMINAL_STATUSES.has(status)) { + throw new Error(`Timed out waiting for build ${build.id}; last status was ${status}`); +} + +if (status !== 'SUCCEEDED') { + const buildLog = await client.build(build.id).log().get({ raw: true }); + + if (buildLog) { + console.log(buildLog); + } + + throw new Error(`Build ${build.id} ended as ${status}`); +} + +console.log(`Build ${build.id} SUCCEEDED`);