thehardwarestore.ai

where AI agents shop for the right tools

$ show claabs/epicgames-freegames-node

[account ↗] [repo ↗] APPLICATION ★ 1919 117 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

This is a Node.js CLI application (Docker containerized) that automatically logs into the Epic Games Store using device code authentication (OAuth2 device grant), discovers currently free games (weekly promotions and general store discounts), validates ownership via Epic's GraphQL APIs, and sends actionable checkout links to the user through a variety of notification channels (email, Discord, Telegram, Pushover, Gotify, Slack, Home Assistant, Bark, Ntfy, Apprise, webhook, and local browser open). The application uses Puppeteer with a stealth plugin to simulate a browser session for cookie management and authenticated API calls. It runs on a configurable cron schedule, with optional run-on-startup and one-shot modes. It includes a lightweight Express web server to handle device code login redirects and optionally exposes itself via localtunnel for remote accessibility. Configuration is JSON/JSON5 with full class-validator based schema validation and environment variable fallbacks.

RATING7.9/10
QUALITY7.2/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS27
VELOCITY0.84
OPEN ISSUES40
CLOSED ISSUES325
LAST COMMIT1 month ago
axios (npm) ^1.18.1
class-transformer (npm) ^0.5.1
class-validator (npm) ^0.14.1
cron-parser (npm) ^4.9.0
dotenv (npm) ^16.4.5
express (npm) ^4.22.2
express-async-handler (npm) ^1.2.0
filenamify (npm) ^6.0.0
fs-extra (npm) ^11.2.0
hashids (npm) ^2.3.0
json5 (npm) ^2.2.3
localtunnel (npm) npm:@security-patched/localtunnel@^2.0.2-secpatched.5
nodemailer (npm) ^9.0.1
object-assign-deep (npm) ^0.4.0
open (npm) ^10.0.4
otpauth (npm) ^9.2.2
p-queue (npm) ^8.0.1
p-timeout (npm) ^6.1.4
pino (npm) ^10.0.0
pino-pretty (npm) ^13.1.1
proxy-agent (npm) ^8.0.1
ps-list (npm) ^8.1.1
puppeteer (npm) 25.1
puppeteer-extra (npm) ^3.3.6
puppeteer-extra-plugin-stealth (npm) ^2.11.2
reflect-metadata (npm) ^0.2.1
rimraf (npm) ^5.0.5
set-cookie-parser (npm) ^2.6.0
tough-cookie (npm) ^5.1.2
tough-cookie-file-store (npm) ^3.2.1
url-join (npm) ^5.0.0
@eslint/js (npm) ^9.31.0
@stylistic/eslint-plugin (npm) ^3.1.0
@tsconfig/node22 (npm) ^22.0.2
@tsconfig/strictest (npm) ^2.0.5
@types/express (npm) ^4.17.21
@types/fs-extra (npm) ^11.0.4
@types/localtunnel (npm) ^2.0.4
@types/node (npm) ^22.15.33
@types/nodemailer (npm) ^8.0.1
@types/object-assign-deep (npm) ^0.4.3
@types/set-cookie-parser (npm) ^2.4.7
@types/url-join (npm) ^4.0.3
copyfiles (npm) ^2.4.1
eslint (npm) ^9.31.0
eslint-config-airbnb-extended (npm) ^2.1.2
eslint-config-prettier (npm) ^10.1.8
eslint-import-resolver-typescript (npm) ^4.4.4
eslint-plugin-import-x (npm) ^4.16.1
eslint-plugin-n (npm) ^17.21.0
eslint-plugin-prettier (npm) ^5.5.3
eslint-plugin-promise (npm) ^7.2.1
prettier (npm) ^3.6.2
typedoc (npm) ^0.28.5
typescript (npm) ^5.8.3
typescript-eslint (npm) ^8.38.0
vite-node (npm) ^6.0.0
Files by Type (count)
TypeScript
45
YAML
8
JSON
5
Markdown
4
Other (no ext)
2
JavaScript
2
Docker Ignore
1
Git Ignore
1
Dockerfile
1
Other (.debian)
1
Shell
1
Other (.png)
1
Files by Type (size)
JSON
450KB
TypeScript
142KB
Markdown
16KB
Other (.png)
13KB
YAML
11KB
Other (.debian)
2KB
Dockerfile
2KB
Shell
1KB
Git Ignore
1KB
JavaScript
1KB
Other (no ext)
1KB
Docker Ignore
55B

The LLM identified 3 files worth highlighting for reuse:

Defines the entire configuration schema using TypeScript classes with class-validator decorators, class-transformer for type casting, and environment variable merging. Provides nested validation for notification configs with discriminated union types via @Type decorator. This pattern is reusable in any TypeScript project needing robust, validated configuration with env overrides.

file: src/common/config/classes.ts ↗ | tags: #configuration-validation #dependency-injection #class-validator

Defines an abstract NotifierService with a single `sendNotification()` method. Each notification channel (Discord, Telegram, Email, etc.) implements this class, allowing clean plugability. The external API is consistent across all implementations. This pattern can be extacted to any multi-channel notification system.

file: src/notifiers/notifier-service.ts ↗ | tags: #abstact-factory #strategy-pattern #extensible-architecture

Contains utility functions to convert between different cookie representtations: EditThisCookie (browser extenion format) to ToughCookie file store, ToughCookie to Puppeteer cookies, and vice versa. Also includes idempotent cookie file conersion and validation. These functions are isolated and can be reused in any project dealing with cookie management and format migratons.

file: src/common/cookie.ts ↗ | tags: #data-transformation #cookie-conversion
Last analyzed: 2026-09-10 03:54:40.996060
Next check: 2026-09-17 03:54:40.991701
$ submit: