5.1 KiB
Cookie Env-Only Design
Summary
Remove all file-based and request-provided cookie inputs across the repo.
The only supported authentication input becomes a raw Cookie header string supplied through scraper-specific environment variables such as FACEBOOK_COOKIE and EBAY_COOKIE.
Goals
- Remove cookie file fallback from shared and marketplace-specific code.
- Remove request-level cookie overrides from public scraper entrypoints.
- Remove deprecated cookie-path parameters from Facebook APIs.
- Keep cookie parsing deterministic and limited to raw header-string input.
- Update tests and docs so the public contract matches the implementation.
Non-Goals
- Changing scraper behavior unrelated to authentication input.
- Adding new cookie formats or migration helpers.
- Preserving backward compatibility for cookie files, JSON cookie arrays, or request overrides.
Current State
The current shared cookie utilities support three sources in priority order:
- Request parameter
- Environment variable
- Cookie file
packages/core/src/utils/cookies.ts includes file loading, JSON array parsing, and auto-detection between JSON and header-string formats.
Facebook also exposes deprecated cookiePath arguments that still reach shared loading logic.
Docs in cookies/AGENTS.md still describe file-based setup and request-level overrides.
Chosen Approach
Use the hard-reset approach. Delete the shared multi-source cookie-loading model and reduce the cookie surface to env-header parsing only. This is a larger diff than a surgical removal, but it avoids leaving behind abstractions that imply unsupported inputs still exist.
Design
Shared Cookie Utilities
packages/core/src/utils/cookies.ts will keep only the pieces needed for env-header-based auth:
Cookietype- A reduced cookie config shape containing only
name,domain, andenvVar parseCookieString()for rawCookieheader stringsformatCookiesForHeader()for domain filtering and request formatting- An env-only loader that reads
process.env[config.envVar], parses it, and throws a targeted error when missing or invalid
The following shared utilities will be removed:
- JSON cookie-array parsing
- Auto-detection between JSON and header-string formats
- File loading helpers
- Optional loaders whose behavior depends on file fallback or request input
Marketplace Scrapers
Marketplace scrapers that require auth will read cookies only from their env vars.
For Facebook this means:
- Remove
_cookiePath/cookiePathparameters from helper and public functions - Remove any docs/comments that mention parameter > env > file precedence
- Update auth failure messaging to name only
FACEBOOK_COOKIE
For eBay this means:
- Remove any remaining fallback/file-oriented behavior from shared calls and error strings
- Keep the existing env-var auth path, but make it the only path
Public API Surface
Exports from packages/core/src/index.ts should reflect the new contract.
If exported functions currently advertise cookie-source or cookie-path arguments, their signatures will be tightened so callers cannot pass unsupported inputs.
Downstream adapter packages should continue calling core through the simplified signatures without adding their own cookie-loading behavior.
Error Handling
There are now only two auth failure modes:
- The required env var is missing or empty.
- The env var does not contain any valid
name=valuecookie pairs.
Errors should be blunt and specific:
- identify the missing env var by name
- state that the value must be a raw
Cookieheader string - stop mentioning request parameters, cookie paths, JSON arrays, or
./cookies/*.json
Testing Strategy
Follow TDD. Start by changing or adding core tests so the old file/request behavior is no longer accepted.
Coverage targets:
- Valid env header strings still parse into cookies correctly.
- Missing env vars fail with the new env-only error.
- Invalid env strings fail without falling back to files or request data.
- Facebook APIs no longer expose or honor cookie-path/request-cookie behavior.
- Existing tests that depended on missing files or JSON cookie arrays are rewritten to the env-only contract.
Verification target after implementation:
bun test packages/core/testbun run cibun run buildif any cross-package signature changes require downstream verification
Documentation Changes
Update cookie-related docs to match the new contract:
- remove file-based setup instructions
- remove request-parameter cookie examples
- document env vars as the only supported auth input
- show raw
Cookieheader-string examples only
Risks
- External callers using request cookie overrides will break at compile time or runtime, depending on how they consume the package.
- Recent work added support for custom Facebook cookie paths, so removing that path intentionally reverses a newly introduced behavior.
- Tests that currently model missing-file behavior must be rewritten rather than preserved.
Rollout Notes
This is an intentional contract break. The code, tests, and docs should all land together so there is no mixed messaging about supported cookie sources.