55 Commits
Author SHA1 Message Date
Pradeep Elankumaran 039e8afbee chore: prepare v1.18.0 2026-09-30 09:37:16 -07:00
Pradeep Elankumaran f219214539 chore: prepare v1.17.0 2026-09-16 16:24:18 -07:00
Pradeep Elankumaran 533079e6a0 chore: prepare v1.16.0 2026-09-14 08:27:46 -07:00
Pradeep Elankumaran 907b62a056 feat: automate Windows cleanup and PDF retrieval
Fixes #10042\nFixes #9333\nFixes #9334
2026-09-13 11:03:25 -07:00
Pradeep Elankumaran 8b7b233efe chore: prepare v1.15.0 2026-09-08 22:45:54 -07:00
Pradeep Elankumaran 6da3da7df8 feat: expose destination navigation status 2026-09-08 22:38:31 -07:00
Pradeep Elankumaran 29852befd4 fix: document native select route 2026-09-08 22:37:45 -07:00
Pradeep Elankumaran b94ab4524b chore: prepare v1.14.0 2026-08-19 13:17:45 -07:00
Pradeep Elankumaran af3a2505fc v1.13.1 2026-08-01 19:46:40 -07:00
Pradeep ElankumaranandLeone Parise 7b2dfe68af fix(upload): contain file paths within upload directory
Resolve upload paths before attaching files. Reject paths outside CAMOFOX_UPLOADS_DIR, including symlink escapes, and require regular files.

Co-authored-by: Leone Parise <1442927+leoneparise@users.noreply.github.com>
2026-08-01 17:20:35 -07:00
Pradeep ElankumaranandLeone Parise 8e3cd9b3da Merge remote-tracking branch 'origin/pr-8273' into fix/upload-sandbox
Co-authored-by: Leone Parise <1442927+leoneparise@users.noreply.github.com>
2026-08-01 17:19:43 -07:00
Mattia Trapani 0b472b94b3 fix(evaluate): route errors through handleRouteError 2026-07-30 11:48:46 +02:00
Leone Parise 4b1a33ade1 refactor(upload): extract timeout magic numbers into constants + timeout arg
The upload route had inline millisecond literals (4000, 12000, 3000,
10000, 500, 1500) scattered through its two attach strategies. Replace
them with named UPLOAD_*_MS constants declared next to the route, and
expose the overall wait budget as an optional `timeout` request field.

- UPLOAD_UI_TIMEOUT_MS (default 12000) backs the request's `timeout`:
  the budget to wait for an upload UI (panel input or native chooser).
  Non-numeric / <= 0 values fall back to the default.
- The panel-poll window derives from that budget minus
  UPLOAD_PANEL_MARGIN_MS, preserving the original 10000/12000 split so a
  late native chooser is still caught after polling stops.
- UPLOAD_INPUT/FOCUS/CLICK/REFS/POLL/SETTLE_MS name the per-call bounds.

Defaults reproduce the previous behavior exactly. OpenAPI documents the
new `timeout` field; tests cover timeout resolution and assert the route
carries no bare millisecond literals.
2026-07-20 17:12:24 -03:00
Leone Parise 36b00359ef feat: add /tabs/:tabId/upload endpoint for file attachment
Attach a file to an upload control without going through the native OS
file dialog. Two strategies are tried in order:

  1. If an <input type="file"> is already present, call Playwright
     setInputFiles on it directly (works for hidden inputs).
  2. Otherwise arm a filechooser listener, activate the trigger element
     (ref or selector) via keyboard (focus + Enter) with a forced click
     as fallback, and setFiles on the resulting chooser. Also polls for
     an in-app panel <input type=file> that mounts after activation.

The panel-input path is preferred over the native chooser so a control
that surfaces both (e.g. LinkedIn's media picker) attaches the file
exactly once rather than producing a duplicate.

Paths must be visible inside the container (e.g. a bind-mounted dir);
the route guards with fs.existsSync and returns 400 file_not_found
otherwise. Runs under the same per-user and per-tab locks as the other
interaction routes.

Includes OpenAPI documentation and unit tests (request validation +
source-contract assertions).
2026-07-20 16:58:18 -03:00
Pradeep Elankumaran 8b5b0959ad v1.13.0 2026-07-20 09:38:47 -07:00
Pradeep Elankumaran 82b948031c v1.12.1 2026-07-19 16:29:04 -07:00
Pradeep Elankumaran e95a1cc9f6 v1.12.0 2026-07-18 19:34:50 -07:00
Pradeep Elankumaran 6f38544203 Remove jo-browser-specific integrations 2026-07-17 23:26:26 -07:00
Pradeep Elankumaran 412c8b4526 Merge jo-browser production fixes 2026-07-17 18:38:10 -07:00
Pradeep Elankumaran 45aac9bda9 Generalize auth session endpoints
ref JO-2738
2026-06-03 09:09:46 -07:00
Pradeep Elankumaran f0a51b482d Add Amazon auth session endpoints
ref JO-2738
2026-06-03 09:05:57 -07:00
Pradeep Elankumaran 066870c7f7 Return conflict for page-changed browser actions 2026-06-01 07:52:50 -07:00
Pradeep Elankumaran dc93f51308 v1.11.2 2026-05-24 00:02:50 -07:00
Pradeep Elankumaran b38d62a865 v1.11.1 2026-05-23 23:07:41 -07:00
Pradeep Elankumaran f5686b03fe v1.11.0 2026-05-23 22:59:29 -07:00
Pradeep Elankumaran b0eb98a890 v1.10.1 2026-05-12 08:58:25 -07:00
Pradeep Elankumaran 60ec892a8e v1.10.0 2026-05-10 10:45:10 -07:00
Pradeep Elankumaranandnicha16 ebbf7ee580 feat: add idle tab pressure cleanup endpoint
POST /pressure/cleanup closes tabs observed idle across multiple checks
while preserving active, locked, queued, and recently-active tabs.
Defaults to dry-run mode. Privacy-safe: responses use hashed identifiers.

Co-authored-by: nicha16 <nicha16@users.noreply.github.com>
2026-05-10 10:12:37 -07:00
Pradeep Elankumaran 4e64ee5064 v1.9.1 2026-05-06 18:46:11 -07:00
Pradeep Elankumaran 7754841d13 v1.9.0 2026-05-06 16:36:24 -07:00
Pradeep Elankumaranandcunninghambe 65d9b364d8 feat: POST /tabs/:tabId/viewport for responsive testing
Adds endpoint wrapping Playwright's page.setViewportSize() to trigger
real CSS layout reflows. window.resizeTo() is a no-op on non-popup
windows in modern browsers — this is the correct headless primitive.

- Input validation: width/height must be finite numbers in 100..4000
- 150ms settle delay for SPAs (media queries, ResizeObserver)
- Emits tab:viewport plugin event
- Returns { ok, width, height } with rounded values

Tests: 17 unit (validation) + 4 e2e (mobile/desktop/invalid/reflow).
Improved validation over original PR: uses Number.isFinite() to also
reject NaN and Infinity (which bypass typeof+range checks).

Co-authored-by: cunninghambe <cunninghambe@users.noreply.github.com>
2026-05-06 15:56:02 -07:00
Pradeep Elankumaran 8dc6cfe985 v1.8.15 2026-04-29 00:44:46 -07:00
Pradeep Elankumaran 555072660c v1.8.14 2026-04-28 22:45:06 -07:00
Pradeep Elankumaran ea9da6f7c4 1.8.13 2026-04-28 21:09:21 -07:00
Pradeep Elankumaran 4dafd1048e 1.8.12 2026-04-28 17:06:28 -07:00
Pradeep Elankumaran e177711816 1.8.11 2026-04-28 16:59:44 -07:00
Pradeep Elankumaran 066d45a55d v1.8.10 2026-04-28 16:38:33 -07:00
Pradeep Elankumaran c4b35b3d9a fix: strip all non-ASCII from shipped files (scanner unicode-control-chars)
Replace all Unicode characters (em-dash, arrows, bullets, box-drawing,
curly quotes, checkmarks, emoji) with ASCII equivalents across all
49 files that ship in the npm package.

The ClawHub scanner generates SKILL.md from package contents and
flagged unicode control characters as a potential prompt-injection
pattern. All shipped files are now pure ASCII.

Note: path-depth markers in reporter.js JSDoc comments changed from
the original bullet (U+2022) to [path] -- using * would create
nested block comment syntax errors.
2026-04-28 16:37:51 -07:00
Pradeep Elankumaran 795c2c65e1 v1.8.9 2026-04-28 16:12:44 -07:00
Pradeep Elankumaran 39eb981a47 v1.8.8 2026-04-28 16:05:25 -07:00
Pradeep Elankumaran 6f4d99c9de v1.8.7 2026-04-28 15:54:24 -07:00
Pradeep Elankumaran db3530e4a7 1.8.6 2026-04-28 15:38:51 -07:00
Pradeep Elankumaran 9daa7b32fc 1.8.5 2026-04-28 15:34:13 -07:00
Pradeep Elankumaran 05abe9e964 1.8.4 2026-04-28 15:28:33 -07:00
Pradeep Elankumaran abfe5790fb 1.8.3 2026-04-28 15:18:23 -07:00
Pradeep Elankumaran 2a26eba67a v1.8.2 2026-04-28 10:27:12 -07:00
Pradeep Elankumaran 2cd35b957e v1.8.1 2026-04-28 10:19:35 -07:00
Pradeep Elankumaran 405b52b2fa v1.8.0 2026-04-27 13:03:53 -07:00
Pradeep Elankumaran 53d8ebcbd6 fix: double-auth conflict, extract middleware, comprehensive tests
- Fix BLOCKER: routes with authMiddleware() (traces, storage_state)
  became unreachable when both ACCESS_KEY and API_KEY were set to
  different values — single Authorization header can't satisfy both.
  requireAuth() now accepts access key as alternative superkey.

- Extract inline access-key middleware from server.js into
  accessKeyMiddleware() in lib/auth.js for testability and consistency.

- Replace 5 heavyweight integration tests (spawn full server, 120s
  timeouts) with 37 unit tests using mock req/res (~80ms total).
  Covers: happy path, backward compat, all exemptions, empty bearer,
  Basic scheme rejection, double-auth chain simulation, route coverage.

- Add AccessKeyAuth security scheme to OpenAPI spec, regenerate
  openapi.json.
2026-04-27 12:26:18 -07:00
Pradeep Elankumaran 923b7be817 v1.7.4 2026-04-26 16:55:45 -07:00