fix: sanitize cookie expires for Playwright compatibility
All checks were successful
CI / build (pull_request) Successful in 1m51s
CI / vet (pull_request) Successful in 2m38s
CI / test (pull_request) Successful in 2m59s

Playwright requires cookie expires to be either -1 (session cookie) or
a positive unix timestamp. When a cookie has no expiry (zero time.Time),
.Unix() returns -62135596800 which Playwright rejects. Cookies with
non-positive timestamps (e.g. Cloudflare's __cf_bm) also fail.

Now treats zero time or non-positive unix timestamps as session cookies
by setting expires to -1.

Fixes #84

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-13 01:28:45 +00:00
parent 61b68adfd0
commit 84e811572b

View File

@@ -122,12 +122,17 @@ func playwrightSameSiteToSameSite(s *playwright.SameSiteAttribute) SameSite {
} }
func cookieToPlaywrightOptionalCookie(cookie Cookie) playwright.OptionalCookie { func cookieToPlaywrightOptionalCookie(cookie Cookie) playwright.OptionalCookie {
expires := float64(cookie.Expires.Unix())
if cookie.Expires.IsZero() || expires <= 0 {
expires = -1
}
oc := playwright.OptionalCookie{ oc := playwright.OptionalCookie{
Name: cookie.Name, Name: cookie.Name,
Value: cookie.Value, Value: cookie.Value,
Domain: playwright.String(cookie.Host), Domain: playwright.String(cookie.Host),
Path: playwright.String(cookie.Path), Path: playwright.String(cookie.Path),
Expires: playwright.Float(float64(cookie.Expires.Unix())), Expires: playwright.Float(expires),
Secure: playwright.Bool(cookie.Secure), Secure: playwright.Bool(cookie.Secure),
HttpOnly: playwright.Bool(cookie.HttpOnly), HttpOnly: playwright.Bool(cookie.HttpOnly),
} }