unbrowse 2.8.2 → 2.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -11161,12 +11161,11 @@ async function executeEndpoint(skill, endpoint, params = {}, projection, options
11161
11161
  return `${c.name}=${v}`;
11162
11162
  }).join("; ");
11163
11163
  headers["cookie"] = cookieStr;
11164
- if (!headers["x-csrf-token"] && !headers["x-xsrf-token"]) {
11165
- const csrfCookie = cookies.find((c) => /^(ct0|csrf_token|_csrf|csrftoken|XSRF-TOKEN|_xsrf)$/i.test(c.name));
11166
- if (csrfCookie) {
11167
- const v = csrfCookie.value.startsWith('"') && csrfCookie.value.endsWith('"') ? csrfCookie.value.slice(1, -1) : csrfCookie.value;
11168
- headers["x-csrf-token"] = v;
11169
- }
11164
+ const csrfCookie = cookies.find((c) => /^(ct0|csrf_token|_csrf|csrftoken|XSRF-TOKEN|_xsrf)$/i.test(c.name));
11165
+ if (csrfCookie) {
11166
+ const v = csrfCookie.value.startsWith(") && csrfCookie.value.endsWith(") ? csrfCookie.value.slice(1, -1) : csrfCookie.value;
11167
+ headers["x-csrf-token"] = v;
11168
+ headers["x-xsrf-token"] = v;
11170
11169
  }
11171
11170
  }
11172
11171
  if (endpoint.csrf_plan && cookies.length > 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unbrowse",
3
- "version": "2.8.2",
3
+ "version": "2.8.3",
4
4
  "description": "Reverse-engineer any website into reusable API skills. Zero-dep single binary with embedded browser engine.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1880,15 +1880,15 @@ export async function executeEndpoint(
1880
1880
  headers["cookie"] = cookieStr;
1881
1881
 
1882
1882
  // CSRF token auto-detection (bird pattern): many sites require CSRF tokens
1883
- // as both a cookie AND a header. Detect common patterns and replay them.
1884
- if (!headers["x-csrf-token"] && !headers["x-xsrf-token"]) {
1885
- const csrfCookie = cookies.find((c) =>
1886
- /^(ct0|csrf_token|_csrf|csrftoken|XSRF-TOKEN|_xsrf)$/i.test(c.name)
1887
- );
1888
- if (csrfCookie) {
1889
- const v = csrfCookie.value.startsWith('"') && csrfCookie.value.endsWith('"') ? csrfCookie.value.slice(1, -1) : csrfCookie.value;
1890
- headers["x-csrf-token"] = v;
1891
- }
1883
+ // as both a cookie AND a header. The cookie value is always fresher than
1884
+ // any stored vault header, so it ALWAYS overrides.
1885
+ const csrfCookie = cookies.find((c) =>
1886
+ /^(ct0|csrf_token|_csrf|csrftoken|XSRF-TOKEN|_xsrf)$/i.test(c.name)
1887
+ );
1888
+ if (csrfCookie) {
1889
+ const v = csrfCookie.value.startsWith(') && csrfCookie.value.endsWith(') ? csrfCookie.value.slice(1, -1) : csrfCookie.value;
1890
+ headers["x-csrf-token"] = v;
1891
+ headers["x-xsrf-token"] = v;
1892
1892
  }
1893
1893
  }
1894
1894