From aaf7ee406f5e03bd4b5c9d17c8ca45bc845d511c Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 24 Jul 2026 09:51:14 +0200 Subject: [PATCH] deps: allow Playwright up to 1.61 (firefox-18 / Firefox 151), bump 0.3.2 The cap was 1.55.x because 1.61 pairs with Firefox 151 and sent viewport fields the old binary rejected. firefox-18 rebases onto 151, so the range moves to >=1.55,<1.62 and playwright_pin.txt to 1.61.0. Both ends tested against the new binary: 1.61 ran the full browser suite on Windows and Linux, 1.55 is protocol drift-free. The upper bound stays exclusive so the next minor must be tested. --- CHANGELOG.md | 3 +++ pyproject.toml | 6 +++--- scripts/playwright_pin.txt | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6869123..b171f61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## [Unreleased] +### Changed +- Playwright pin moved to `>=1.55,<1.62` (was `>=1.55,<1.56`). The `firefox-18` binary rebases onto Firefox 151, which is what the latest Playwright (1.61) pairs with, so 1.61 now drives the binary natively - no more pinning to an older client. Both ends of the range were tested against the new binary (full browser suite on 1.61; drift-free protocol on 1.55). `scripts/playwright_pin.txt` -> 1.61.0. + ### Added - `timezone="auto"`: the browser timezone is auto-derived from the egress IP. By default (no explicit timezone) it ALWAYS resolves — from the proxy egress when a proxy is set, otherwise from the host's own public IP — so the zone can never disagree with the IP (the classic `timezone_mismatch` signal). An explicit `"Area/City"` is the only way to force a specific zone. On failure: with a proxy the launch raises (no silent host-TZ fallback behind a foreign proxy); without a proxy it falls back to the host TZ so a transient lookup can't break the launch. - The egress IP is mapped to its IANA zone with an offline mmdb (`daijro/geoip-all-in-one`). It always tracks the upstream weekly rebuild: on every launch the current latest release tag is resolved from the `releases/latest/download` permalink (no GitHub API → no rate limit) and pulled only if newer than the cache, older copies pruned. Offline → the cached copy is reused; never a pinned tag (daijro prunes old releases, so a pin eventually 404s). `STEALTHFOX_GEOIP_MMDB` points at your own `.mmdb` to skip the download. diff --git a/pyproject.toml b/pyproject.toml index 5166cb3..b45f9b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "invisible-playwright" -version = "0.3.1" +version = "0.3.2" description = "Playwright wrapper for a patched Firefox with deterministic stealth profile." readme = "README.md" requires-python = ">=3.11" @@ -27,11 +27,11 @@ dependencies = [ # Pinned to the Juggler client we actually test against (scripts/playwright_pin.txt, # 1.55.x). Playwright 1.61 added an isMobile field to Browser.setDefaultViewport that # the FF150 Juggler does not accept, which breaks the session (issue #48). - "playwright>=1.55,<1.56", + "playwright>=1.55,<1.62", ] [project.optional-dependencies] -dev = ["pytest>=7", "pytest-mock>=3", "responses>=0.24", "build>=1", "pytest-rerunfailures>=14", "playwright>=1.55,<1.56"] +dev = ["pytest>=7", "pytest-mock>=3", "responses>=0.24", "build>=1", "pytest-rerunfailures>=14", "playwright>=1.55,<1.62"] [tool.pytest.ini_options] markers = [ diff --git a/scripts/playwright_pin.txt b/scripts/playwright_pin.txt index 094d6ad..91951fd 100644 --- a/scripts/playwright_pin.txt +++ b/scripts/playwright_pin.txt @@ -1 +1 @@ -1.55.0 +1.61.0