free-games-claimer/README.md
root 23ca522094
All checks were successful
build-and-push / lint (push) Successful in 7s
build-and-push / sonar (push) Successful in 19s
build-and-push / docker (push) Successful in 11s
docs: Add Cloudflare troubleshooting section to README
- Document 'Incorrect response' error and solutions
- Add FlareSolverr usage instructions
- Add common issues table
- Improve Firefox user.js for better Cloudflare compatibility
2026-03-08 14:06:49 +00:00

6.2 KiB

Free Games Claimer (Fork)

Quality Gate Status

  • Optional notifications: pip install apprise Automates claiming of free games for:
  • Amazon Luna Gaming / Luna claims (including external stores like GOG, Epic Games, Legacy Games )
  • GOG giveaways
  • Optional extras: Steam stats, AliExpress dailies (not implemated yet) -p 6080:6080
    Requirements

  • Docker or Podman (recommended), or Node.js ≥ 20 for local runs
  • Optional notifications: pip install apprise
  • Playwright dependencies are baked into the container; locally, npm install downloads Firefox.

Quickstart (Docker Run)

docker run --rm -it \
  -p 6080:6080 \
  -v fgc-data:/fgc/data \
  -v fgc-browser:/home/fgc/.cache/browser \
  -v fgc-playwright:/home/fgc/.cache/ms-playwright \
  -e SHOW=1 \
  git.sky-net.it/nocci/free-games-claimer:dev \
  bash -c "node prime-gaming; node gog; ./keep-alive.sh"
  • Ports 6080/5900: noVNC/VNC (only needed with SHOW=1)
  • Volumes persist profile + Playwright-Browser, damit Logins/Downloads bleiben.

Docker Compose Example (persistent volumes)

services:
  free-games-claimer:
    image: git.sky-net.it/nocci/free-games-claimer:dev
    container_name: fgc
    environment:
      - SHOW=1                  # show browser via VNC/noVNC
      # - PG_EMAIL=...
      # - PG_PASSWORD=...
      # - PG_OTPKEY=...
      - BROWSER_DIR=/fgc/data/browser
      - LOGIN_VISIBLE_TIMEOUT=20  # optional: faster login detection
      - KEEP_ALIVE_SECONDS=86400  # optional: keep container alive after runs
    volumes:
      - fgc-data:/fgc/data
      - fgc-browser:/home/fgc/.cache/browser
      - fgc-playwright:/home/fgc/.cache/ms-playwright
    ports:
      - "6080:6080"             # noVNC
      # - "5900:5900"           # VNC optional
    command: bash -c "node prime-gaming; node gog; ./keep-alive.sh"
volumes:
  fgc-data:
  fgc-browser:
  fgc-playwright:

Hinweis: Das Image läuft auf dev; bei Bedarf :latest wählen.

Configuration (Environment Variables)

Common options:

  • SHOW=0/1 (0 = headless, 1 = UI)
  • WIDTH, HEIGHT (browser size)
  • TIMEOUT, LOGIN_TIMEOUT (seconds)
  • Epic: EG_MODE=legacy|new (legacy Playwright flow or neuer API-getriebener Claimer), EG_PARENTALPIN, EG_EMAIL, EG_PASSWORD, EG_OTPKEY
  • Epic (new mode): Cookies werden unter data/browser/epic-cookies.json persistiert; OAuth Device Code Flow benötigt ggf. einmalige Freigabe im Browser.
    • Falls Device-Code-Endpunkt nicht erreichbar ist (404/Bad Request), fällt der neue Modus automatisch auf manuellen Browser-Login zurück.
  • Login: EMAIL, PASSWORD global; per store EG_EMAIL, EG_PASSWORD, EG_OTPKEY, PG_EMAIL, PG_PASSWORD, PG_OTPKEY, GOG_EMAIL, GOG_PASSWORD
  • Prime Gaming: PG_REDEEM=1 (auto-redeem keys, experimental), PG_CLAIMDLC=1, PG_TIMELEFT=<days> to skip long-remaining offers
  • Screenshots: SCREENSHOTS_DIR (default data/screenshots)
  • Notifications: NOTIFY='...' (Apprise URL), optional NOTIFY_TITLE
  • Browser profile: BROWSER_DIR (default data/browser)
  • Recording: RECORD=1 to save videos/HAR to data/record/
  • Debugging: DEBUG=1 (opens Playwright inspector), DEBUG_NETWORK=1 (logs requests), TIME=1 (prints timings)
  • Dry run / Interaction: DRYRUN=1 (do not claim), INTERACTIVE=1 (ask before claiming), HEADLESS is derived from SHOW/DEBUG
  • Directories: SCREENSHOTS_DIR, BROWSER_DIR, DATA_DIR (prefix for data; default under data/)
  • VNC/noVNC: VNC_PASSWORD (for Docker entrypoint), NOVNC_PORT/VNC_PORT (Docker)
  • General timeouts: TIMEOUT (per action), LOGIN_TIMEOUT (extra time for login)
  • Login detection: LOGIN_VISIBLE_TIMEOUT (ms) to abort sooner when login buttons not present
  • Keep-alive: KEEP_ALIVE_SECONDS (default 86400) for keep-alive.sh
  • Repo banner: REPO_URL for log output

You can place a data/config.env; it is loaded via dotenv and is overridden by explicitly set environment variables.

Local Run Without Docker

npm install
SHOW=0 PG_EMAIL=... PG_PASSWORD=... PG_OTPKEY=... node prime-gaming.js
  • Playwright downloads Firefox to ~/.cache/ms-playwright.
  • Use SHOW=1 for a visible browser (requires GUI/Xvfb).

Persistence & Outputs

  • Data/status: data/*.json (per store)
  • Browser profile: data/browser
  • Screenshots: data/screenshots/<store>/
  • Optional videos/HAR: RECORD=1data/record/

Tip: For captchas or first-time login, run with SHOW=1 and log in once; cookies stay in the profile. Notifications via NOTIFY help surface errors (e.g., captcha, login).

Troubleshooting

Cloudflare / "Incorrect response" Error (Epic Games)

If you see "Incorrect response. Please refresh the page." or repeated "word word" text on the login page, Cloudflare is blocking the automated browser.

Solution 1: Use Docker Compose (recommended)

The included docker-compose.yml has FlareSolverr pre-configured:

docker compose up

Solution 2: Manual login with persistent cookies

docker run --rm -it \
  -p 6080:6080 \
  -v fgc-data:/fgc/data \
  -v fgc-browser:/home/fgc/.cache/browser \
  -e SHOW=1 \
  -e EG_MODE=new \
  git.sky-net.it/nocci/free-games-claimer:dev \
  node epic-games

Then open http://localhost:6080, log in manually. Cookies are saved for subsequent runs.

Solution 3: Disable strict Firefox privacy settings

The entrypoint now creates a user.js with Cloudflare-friendly settings. If you still have issues, delete the browser profile to regenerate it:

docker volume rm fgc-browser

Common Issues

Error Cause Fix
"Incorrect response" Cloudflare bot detection Use FlareSolverr or manual login
Captcha loop IP flagged Wait, change IP, or use FlareSolverr
"Not signed in" timeout Login expired Run with SHOW=1 and re-login
Repeated "word" text Cloudflare fingerprinting See Cloudflare solutions above