mirror of
https://github.com/TheNetsky/Microsoft-Rewards-Script.git
synced 2026-01-18 05:53:57 +00:00
V2.1 (#375)
* feat: Implement edge version fetching with retry logic and caching * chore: Update version to 2.1.0 in package.json * fix: Update package version to 2.1.0 and enhance user agent metadata * feat: Enhance 2FA handling with improved TOTP input and submission logic * fix: Refactor getSystemComponents to improve mobile user agent string generation * feat: Add support for cron expressions for advanced scheduling * feat: Improve humanization feature with detailed logging for off-days configuration * feat: Add live log streaming via webhook and enhance logging configuration * fix: Remove unused @types/cron-parser dependency from devDependencies * feat: Add cron-parser dependency and enhance Axios error handling for proxy authentication * feat: Enhance dashboard data retrieval with retry logic and diagnostics capture * feat: Add ready-to-use sample configurations and update configuration settings for better customization * feat: Add buy mode detection and configuration methods for enhanced manual redemption * feat: Migrate configuration from JSON to JSONC format for improved readability and comments support feat: Implement centralized diagnostics capture for better error handling and reporting fix: Update documentation references from config.json to config.jsonc chore: Add .vscode to .gitignore for cleaner project structure refactor: Enhance humanization and diagnostics capture logic in BrowserUtil and Login classes * feat: Reintroduce ambiance declarations for the 'luxon' module to unlock TypeScript * feat: Update search delay settings for improved performance and reliability * feat: Update README and SECURITY documentation for clarity and improved data handling guidelines * Enhance README and SECURITY documentation for Microsoft Rewards Script V2 - Updated README.md to improve structure, add badges, and enhance clarity on features and setup instructions. - Expanded SECURITY.md to provide detailed data handling practices, security guidelines, and best practices for users. - Included sections on data flow, credential management, and responsible use of the automation tool. - Added a security checklist for users to ensure safe practices while using the script. * feat: Réorganiser et enrichir la documentation du README pour une meilleure clarté et accessibilité * feat: Updated and reorganized the README for better presentation and clarity * feat: Revised and simplified the README for better clarity and accessibility * Update README.md
This commit is contained in:
@@ -13,6 +13,8 @@
|
||||
|
||||
Buy Mode allows you to **manually redeem rewards** while the script **passively monitors** your point balance. Perfect for safe redemptions without automation interference.
|
||||
|
||||
> ℹ️ Buy Mode automatically launches the browser in a visible window (headless=false) so you can interact with captchas and checkout flows. Use `FORCE_HEADLESS=1` only if you understand the limitations.
|
||||
|
||||
### **Key Features**
|
||||
- 👀 **Passive monitoring** — No clicks or automation
|
||||
- 🔄 **Real-time tracking** — Instant spending alerts
|
||||
@@ -55,7 +57,7 @@ npm start -- -buy
|
||||
## ⚙️ Configuration
|
||||
|
||||
### **Set Duration in Config**
|
||||
Add to `src/config.json`:
|
||||
Add to `src/config.jsonc`:
|
||||
```json
|
||||
{
|
||||
"buyMode": {
|
||||
@@ -201,6 +203,6 @@ During monitoring:
|
||||
## Troubleshooting
|
||||
|
||||
- **Monitor tab closed**: Script automatically reopens it in background
|
||||
- **No notifications**: Check webhook/NTFY configuration in `config.json`
|
||||
- **No notifications**: Check webhook/NTFY configuration in `config.jsonc`
|
||||
- **Session timeout**: Increase `maxMinutes` if you need longer monitoring
|
||||
- **Login issues**: Ensure account credentials are correct in `accounts.json`
|
||||
|
||||
147
docs/config-presets/balanced.json
Normal file
147
docs/config-presets/balanced.json
Normal file
@@ -0,0 +1,147 @@
|
||||
{
|
||||
// Base URL for Rewards dashboard and APIs
|
||||
"baseURL": "https://rewards.bing.com",
|
||||
// Where to store sessions (cookies, fingerprints)
|
||||
"sessionPath": "sessions",
|
||||
|
||||
"browser": {
|
||||
// Headless mode is more stable on shared servers
|
||||
"headless": true,
|
||||
// Use short notation for readability
|
||||
"globalTimeout": "30s"
|
||||
},
|
||||
|
||||
"execution": {
|
||||
"parallel": false,
|
||||
"runOnZeroPoints": false,
|
||||
"clusters": 1,
|
||||
"passesPerRun": 1
|
||||
},
|
||||
|
||||
"buyMode": {
|
||||
"maxMinutes": 45
|
||||
},
|
||||
|
||||
"fingerprinting": {
|
||||
"saveFingerprint": {
|
||||
"mobile": true,
|
||||
"desktop": true
|
||||
}
|
||||
},
|
||||
|
||||
"search": {
|
||||
"useLocalQueries": true,
|
||||
"settings": {
|
||||
"useGeoLocaleQueries": true,
|
||||
"scrollRandomResults": true,
|
||||
"clickRandomResults": true,
|
||||
"retryMobileSearchAmount": 2,
|
||||
"delay": {
|
||||
"min": "8s",
|
||||
"max": "22s"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"humanization": {
|
||||
"enabled": true,
|
||||
"stopOnBan": true,
|
||||
"immediateBanAlert": true,
|
||||
"actionDelay": {
|
||||
"min": 500,
|
||||
"max": 2200
|
||||
},
|
||||
"gestureMoveProb": 0.65,
|
||||
"gestureScrollProb": 0.4,
|
||||
"allowedWindows": []
|
||||
},
|
||||
|
||||
"vacation": {
|
||||
"enabled": true,
|
||||
"minDays": 2,
|
||||
"maxDays": 4
|
||||
},
|
||||
|
||||
"retryPolicy": {
|
||||
"maxAttempts": 3,
|
||||
"baseDelay": 1000,
|
||||
"maxDelay": "30s",
|
||||
"multiplier": 2,
|
||||
"jitter": 0.2
|
||||
},
|
||||
|
||||
"workers": {
|
||||
"doDailySet": true,
|
||||
"doMorePromotions": true,
|
||||
"doPunchCards": true,
|
||||
"doDesktopSearch": true,
|
||||
"doMobileSearch": true,
|
||||
"doDailyCheckIn": true,
|
||||
"doReadToEarn": true,
|
||||
"bundleDailySetWithSearch": true
|
||||
},
|
||||
|
||||
"proxy": {
|
||||
"proxyGoogleTrends": true,
|
||||
"proxyBingTerms": true
|
||||
},
|
||||
|
||||
"notifications": {
|
||||
"webhook": {
|
||||
"enabled": false,
|
||||
"url": "***"
|
||||
},
|
||||
"conclusionWebhook": {
|
||||
"enabled": false,
|
||||
"url": "***"
|
||||
},
|
||||
"ntfy": {
|
||||
"enabled": false,
|
||||
"url": "",
|
||||
"topic": "rewards",
|
||||
"authToken": ""
|
||||
}
|
||||
},
|
||||
|
||||
"logging": {
|
||||
"excludeFunc": [
|
||||
"SEARCH-CLOSE-TABS",
|
||||
"LOGIN-NO-PROMPT",
|
||||
"FLOW"
|
||||
],
|
||||
"webhookExcludeFunc": [
|
||||
"SEARCH-CLOSE-TABS",
|
||||
"LOGIN-NO-PROMPT",
|
||||
"FLOW"
|
||||
],
|
||||
"redactEmails": true
|
||||
},
|
||||
|
||||
"diagnostics": {
|
||||
"enabled": true,
|
||||
"saveScreenshot": true,
|
||||
"saveHtml": true,
|
||||
"maxPerRun": 2,
|
||||
"retentionDays": 7
|
||||
},
|
||||
|
||||
"jobState": {
|
||||
"enabled": true,
|
||||
"dir": ""
|
||||
},
|
||||
|
||||
"schedule": {
|
||||
"enabled": false,
|
||||
"useAmPm": false,
|
||||
"time12": "9:00 AM",
|
||||
"time24": "09:00",
|
||||
"timeZone": "America/New_York",
|
||||
"runImmediatelyOnStart": false
|
||||
},
|
||||
|
||||
"update": {
|
||||
"git": true,
|
||||
"docker": false,
|
||||
"scriptPath": "setup/update/update.mjs"
|
||||
}
|
||||
}
|
||||
147
docs/config-presets/balanced.jsonc
Normal file
147
docs/config-presets/balanced.jsonc
Normal file
@@ -0,0 +1,147 @@
|
||||
{
|
||||
// Base URL for Rewards dashboard and APIs
|
||||
"baseURL": "https://rewards.bing.com",
|
||||
// Where to store sessions (cookies, fingerprints)
|
||||
"sessionPath": "sessions",
|
||||
|
||||
"browser": {
|
||||
// Headless mode is more stable on shared servers
|
||||
"headless": true,
|
||||
// Use short notation for readability
|
||||
"globalTimeout": "30s"
|
||||
},
|
||||
|
||||
"execution": {
|
||||
"parallel": false,
|
||||
"runOnZeroPoints": false,
|
||||
"clusters": 1,
|
||||
"passesPerRun": 1
|
||||
},
|
||||
|
||||
"buyMode": {
|
||||
"maxMinutes": 45
|
||||
},
|
||||
|
||||
"fingerprinting": {
|
||||
"saveFingerprint": {
|
||||
"mobile": true,
|
||||
"desktop": true
|
||||
}
|
||||
},
|
||||
|
||||
"search": {
|
||||
"useLocalQueries": true,
|
||||
"settings": {
|
||||
"useGeoLocaleQueries": true,
|
||||
"scrollRandomResults": true,
|
||||
"clickRandomResults": true,
|
||||
"retryMobileSearchAmount": 2,
|
||||
"delay": {
|
||||
"min": "8s",
|
||||
"max": "22s"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"humanization": {
|
||||
"enabled": true,
|
||||
"stopOnBan": true,
|
||||
"immediateBanAlert": true,
|
||||
"actionDelay": {
|
||||
"min": 500,
|
||||
"max": 2200
|
||||
},
|
||||
"gestureMoveProb": 0.65,
|
||||
"gestureScrollProb": 0.4,
|
||||
"allowedWindows": []
|
||||
},
|
||||
|
||||
"vacation": {
|
||||
"enabled": true,
|
||||
"minDays": 2,
|
||||
"maxDays": 4
|
||||
},
|
||||
|
||||
"retryPolicy": {
|
||||
"maxAttempts": 3,
|
||||
"baseDelay": 1000,
|
||||
"maxDelay": "30s",
|
||||
"multiplier": 2,
|
||||
"jitter": 0.2
|
||||
},
|
||||
|
||||
"workers": {
|
||||
"doDailySet": true,
|
||||
"doMorePromotions": true,
|
||||
"doPunchCards": true,
|
||||
"doDesktopSearch": true,
|
||||
"doMobileSearch": true,
|
||||
"doDailyCheckIn": true,
|
||||
"doReadToEarn": true,
|
||||
"bundleDailySetWithSearch": true
|
||||
},
|
||||
|
||||
"proxy": {
|
||||
"proxyGoogleTrends": true,
|
||||
"proxyBingTerms": true
|
||||
},
|
||||
|
||||
"notifications": {
|
||||
"webhook": {
|
||||
"enabled": false,
|
||||
"url": "***"
|
||||
},
|
||||
"conclusionWebhook": {
|
||||
"enabled": false,
|
||||
"url": "***"
|
||||
},
|
||||
"ntfy": {
|
||||
"enabled": false,
|
||||
"url": "",
|
||||
"topic": "rewards",
|
||||
"authToken": ""
|
||||
}
|
||||
},
|
||||
|
||||
"logging": {
|
||||
"excludeFunc": [
|
||||
"SEARCH-CLOSE-TABS",
|
||||
"LOGIN-NO-PROMPT",
|
||||
"FLOW"
|
||||
],
|
||||
"webhookExcludeFunc": [
|
||||
"SEARCH-CLOSE-TABS",
|
||||
"LOGIN-NO-PROMPT",
|
||||
"FLOW"
|
||||
],
|
||||
"redactEmails": true
|
||||
},
|
||||
|
||||
"diagnostics": {
|
||||
"enabled": true,
|
||||
"saveScreenshot": true,
|
||||
"saveHtml": true,
|
||||
"maxPerRun": 2,
|
||||
"retentionDays": 7
|
||||
},
|
||||
|
||||
"jobState": {
|
||||
"enabled": true,
|
||||
"dir": ""
|
||||
},
|
||||
|
||||
"schedule": {
|
||||
"enabled": false,
|
||||
"useAmPm": false,
|
||||
"time12": "9:00 AM",
|
||||
"time24": "09:00",
|
||||
"timeZone": "America/New_York",
|
||||
"runImmediatelyOnStart": false
|
||||
},
|
||||
|
||||
"update": {
|
||||
"git": true,
|
||||
"docker": false,
|
||||
"scriptPath": "setup/update/update.mjs"
|
||||
}
|
||||
}
|
||||
120
docs/config-presets/minimal.jsonc
Normal file
120
docs/config-presets/minimal.jsonc
Normal file
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"baseURL": "https://rewards.bing.com",
|
||||
"sessionPath": "sessions",
|
||||
"browser": {
|
||||
"headless": true,
|
||||
"globalTimeout": "45s"
|
||||
},
|
||||
"execution": {
|
||||
"parallel": false,
|
||||
"runOnZeroPoints": true,
|
||||
"clusters": 1,
|
||||
"passesPerRun": 1
|
||||
},
|
||||
"fingerprinting": {
|
||||
"saveFingerprint": {
|
||||
"mobile": false,
|
||||
"desktop": false
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"useLocalQueries": false,
|
||||
"settings": {
|
||||
"useGeoLocaleQueries": false,
|
||||
"scrollRandomResults": true,
|
||||
"clickRandomResults": true,
|
||||
"retryMobileSearchAmount": 1,
|
||||
"delay": {
|
||||
"min": "6s",
|
||||
"max": "15s"
|
||||
}
|
||||
}
|
||||
},
|
||||
"humanization": {
|
||||
"enabled": true,
|
||||
"stopOnBan": true,
|
||||
"immediateBanAlert": true,
|
||||
"actionDelay": {
|
||||
"min": 200,
|
||||
"max": 750
|
||||
},
|
||||
"gestureMoveProb": 0.5,
|
||||
"gestureScrollProb": 0.25,
|
||||
"allowedWindows": []
|
||||
},
|
||||
"vacation": {
|
||||
"enabled": false,
|
||||
"minDays": 2,
|
||||
"maxDays": 3
|
||||
},
|
||||
"retryPolicy": {
|
||||
"maxAttempts": 3,
|
||||
"baseDelay": 1000,
|
||||
"maxDelay": "30s",
|
||||
"multiplier": 2,
|
||||
"jitter": 0.2
|
||||
},
|
||||
"workers": {
|
||||
"doDailySet": true,
|
||||
"doMorePromotions": true,
|
||||
"doPunchCards": true,
|
||||
"doDesktopSearch": true,
|
||||
"doMobileSearch": true,
|
||||
"doDailyCheckIn": true,
|
||||
"doReadToEarn": true,
|
||||
"bundleDailySetWithSearch": false
|
||||
},
|
||||
"proxy": {
|
||||
"proxyGoogleTrends": true,
|
||||
"proxyBingTerms": true
|
||||
},
|
||||
"notifications": {
|
||||
"webhook": {
|
||||
"enabled": false,
|
||||
"url": ""
|
||||
},
|
||||
"conclusionWebhook": {
|
||||
"enabled": false,
|
||||
"url": ""
|
||||
},
|
||||
"ntfy": {
|
||||
"enabled": false,
|
||||
"url": "",
|
||||
"topic": "rewards",
|
||||
"authToken": ""
|
||||
}
|
||||
},
|
||||
"logging": {
|
||||
"excludeFunc": [
|
||||
"FLOW"
|
||||
],
|
||||
"webhookExcludeFunc": [
|
||||
"FLOW"
|
||||
],
|
||||
"redactEmails": true
|
||||
},
|
||||
"diagnostics": {
|
||||
"enabled": true,
|
||||
"saveScreenshot": true,
|
||||
"saveHtml": false,
|
||||
"maxPerRun": 1,
|
||||
"retentionDays": 5
|
||||
},
|
||||
"jobState": {
|
||||
"enabled": true,
|
||||
"dir": ""
|
||||
},
|
||||
"schedule": {
|
||||
"enabled": false,
|
||||
"useAmPm": false,
|
||||
"time12": "8:30 AM",
|
||||
"time24": "08:30",
|
||||
"timeZone": "UTC",
|
||||
"runImmediatelyOnStart": true
|
||||
},
|
||||
"update": {
|
||||
"git": true,
|
||||
"docker": false,
|
||||
"scriptPath": "setup/update/update.mjs"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
# ⚙️ Configuration Guide
|
||||
|
||||
This page documents every field in `config.json`. You can keep the file lean by deleting blocks you do not use – missing values fall back to defaults. Comments (`// ...`) are supported in the JSON thanks to a custom parser.
|
||||
This page documents every field in the configuration file. The default ships as `src/config.jsonc` so you get inline `//` guidance without editor warnings, and the loader still accepts traditional `config.json` files if you prefer plain JSON.
|
||||
|
||||
Looking for ready-to-use presets? Check `docs/config-presets/` for curated examples such as `balanced.jsonc` (full automation with humanization) and `minimal.jsonc` (lean runs with quick scheduling).
|
||||
|
||||
> NOTE: Previous versions had `logging.live` (live streaming webhook); it was removed and replaced by a simple `logging.redactEmails` flag.
|
||||
|
||||
@@ -17,7 +19,7 @@ Directory where session data (cookies / fingerprints / job-state) is stored.
|
||||
## browser
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| headless | boolean | false | Run browser UI-less. Setting to `false` can improve stability or help visual debugging. |
|
||||
| headless | boolean | false | Run browser UI-less. Set to `false` to keep the browser visible (default). |
|
||||
| globalTimeout | string/number | "30s" | Max time for common Playwright operations. Accepts ms number or time string (e.g. `"45s"`, `"2min"`). |
|
||||
|
||||
---
|
||||
@@ -122,7 +124,7 @@ Manages notification channels (Discord webhooks, NTFY, etc.).
|
||||
Primary webhook (can be used for summary or generic messages).
|
||||
| Key | Default | Description |
|
||||
|-----|---------|-------------|
|
||||
| enabled | false | Allow sending webhook-based notifications. |
|
||||
| enabled | false | Allow sending webhook-based notifications and live log streaming. |
|
||||
| url | "" | Webhook endpoint. |
|
||||
|
||||
### notifications.conclusionWebhook
|
||||
@@ -148,6 +150,7 @@ Lightweight push notifications.
|
||||
| excludeFunc | string[] | Log buckets suppressed in console + any webhook usage. |
|
||||
| webhookExcludeFunc | string[] | Buckets suppressed specifically for webhook output. |
|
||||
| redactEmails | boolean | If true, email addresses are partially masked in logs. |
|
||||
| liveWebhookUrl | string | Optional override URL for live log streaming (falls back to `notifications.webhook.url`). |
|
||||
|
||||
_Removed fields_: `live.enabled`, `live.url`, `live.redactEmails` — replaced by `redactEmails` only.
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ The diagnostics system **automatically captures** error screenshots and HTML sna
|
||||
## ⚙️ Configuration
|
||||
|
||||
### **Basic Setup**
|
||||
Add to `src/config.json`:
|
||||
Add to `src/config.jsonc`:
|
||||
```json
|
||||
{
|
||||
"diagnostics": {
|
||||
@@ -82,6 +82,8 @@ reports/
|
||||
└── ...
|
||||
```
|
||||
|
||||
> 🔐 Security incidents (login blocks, recovery mismatches) are stored separately under `diagnostics/security-incidents/<timestamp>-slug/` and always include both a screenshot and HTML snapshot for investigation.
|
||||
|
||||
### **File Naming Convention**
|
||||
```
|
||||
error_[runId]_[sequence].[ext]
|
||||
|
||||
@@ -9,77 +9,82 @@
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Start
|
||||
## 🚀 Quick Start Checklist
|
||||
|
||||
### **Prerequisites**
|
||||
- ✅ `src/accounts.json` configured with your Microsoft accounts
|
||||
- ✅ `src/config.json` exists (uses defaults if not customized)
|
||||
- ✅ Docker & Docker Compose installed
|
||||
1. `src/accounts.json` populated with your Microsoft credentials
|
||||
2. `src/config.jsonc` present (defaults are fine; comments stay intact)
|
||||
3. Docker + Docker Compose installed locally (Desktop app or CLI)
|
||||
|
||||
### **Launch**
|
||||
```bash
|
||||
# Build and start the container
|
||||
# Build and start the container (scheduler runs automatically)
|
||||
docker compose up -d
|
||||
|
||||
# Monitor the automation
|
||||
# Stream logs from the running container
|
||||
docker logs -f microsoft-rewards-script
|
||||
|
||||
# Stop when needed
|
||||
# Stop the stack when you are done
|
||||
docker compose down
|
||||
```
|
||||
|
||||
**That's it!** The container runs the built-in scheduler automatically.uide
|
||||
The compose file uses the same Playwright build as local runs but forces headless mode inside the container via `FORCE_HEADLESS=1`, matching the bundled image.
|
||||
|
||||
This project ships with a Docker setup tailored for headless runs. It uses Playwright’s Chromium Headless Shell to keep the image small.
|
||||
---
|
||||
|
||||
## Quick Start
|
||||
- Ensure you have `src/accounts.json` and `src/config.json` in the repo
|
||||
- Build and start:
|
||||
- `docker compose up -d`
|
||||
- Follow logs:
|
||||
- `docker logs -f microsoft-rewards-script`
|
||||
## 📦 What the Compose File Mounts
|
||||
|
||||
## Volumes & Files
|
||||
The compose file mounts:
|
||||
- `./src/accounts.json` → `/usr/src/microsoft-rewards-script/accounts.json` (read‑only)
|
||||
- `./src/config.json` → `/usr/src/microsoft-rewards-script/config.json` (read‑only)
|
||||
- `./sessions` → `/usr/src/microsoft-rewards-script/sessions` (persist login sessions)
|
||||
| Host path | Container path | Purpose |
|
||||
|-----------|----------------|---------|
|
||||
| `./src/accounts.json` | `/usr/src/microsoft-rewards-script/accounts.json` | Read-only account credentials |
|
||||
| `./src/config.jsonc` | `/usr/src/microsoft-rewards-script/config.json` | Read-only runtime configuration |
|
||||
| `./sessions` | `/usr/src/microsoft-rewards-script/sessions` | Persisted cookies & fingerprints |
|
||||
|
||||
You can also use env overrides supported by the app loader:
|
||||
- `ACCOUNTS_FILE=/path/to/accounts.json`
|
||||
- `ACCOUNTS_JSON='[ {"email":"...","password":"..."} ]'`
|
||||
Prefer environment variables? The loader accepts the same overrides as local runs:
|
||||
|
||||
## Environment
|
||||
Useful variables:
|
||||
- `TZ` — container time zone (e.g., `Europe/Paris`)
|
||||
- `NODE_ENV=production`
|
||||
- `FORCE_HEADLESS=1` — ensures headless mode inside the container
|
||||
- Scheduler knobs (optional):
|
||||
```bash
|
||||
ACCOUNTS_FILE=/custom/accounts.json
|
||||
ACCOUNTS_JSON='[{"email":"name@example.com","password":"hunter2"}]'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🌍 Useful Environment Variables
|
||||
|
||||
- `TZ` — set container timezone (`Europe/Paris`, `America/New_York`, etc.)
|
||||
- `NODE_ENV=production` — default; keeps builds lean
|
||||
- `FORCE_HEADLESS=1` — required in Docker (Chromium Headless Shell only)
|
||||
- Scheduler tuning (optional):
|
||||
- `SCHEDULER_DAILY_JITTER_MINUTES_MIN` / `SCHEDULER_DAILY_JITTER_MINUTES_MAX`
|
||||
- `SCHEDULER_PASS_TIMEOUT_MINUTES`
|
||||
- `SCHEDULER_FORK_PER_PASS`
|
||||
|
||||
## Headless Browsers
|
||||
The Docker image installs only Chromium Headless Shell via:
|
||||
- `npx playwright install --with-deps --only-shell`
|
||||
---
|
||||
|
||||
This dramatically reduces image size vs. installing all Playwright browsers.
|
||||
## 🧠 Browser Footprint
|
||||
|
||||
## One‑shot vs. Scheduler
|
||||
- Default command runs the built‑in scheduler: `npm run start:schedule`
|
||||
- For one‑shot run, override the command:
|
||||
- `docker run --rm ... node ./dist/index.js`
|
||||
The Docker image installs Chromium Headless Shell via `npx playwright install --with-deps --only-shell`. This keeps the image compact while retaining Chromium’s Edge-compatible user agent. Installing full Edge or all browsers roughly doubles the footprint and adds instability, so we ship only the shell.
|
||||
|
||||
## Tips
|
||||
- If you see 2FA prompts, add your TOTP Base32 secret to `accounts.json` so the bot can auto‑fill codes.
|
||||
- Use a persistent `sessions` volume to avoid re‑logging every run.
|
||||
- For proxies per account, fill the `proxy` block in your `accounts.json` (see [Proxy](./proxy.md)).
|
||||
---
|
||||
|
||||
## 🔁 Alternate Commands
|
||||
|
||||
- **Default:** `npm run start:schedule` (inside container) — keeps the scheduler alive
|
||||
- **Single pass:** `docker compose run --rm app node ./dist/index.js`
|
||||
- **Custom script:** Override `command:` in `compose.yaml` to suit your workflow
|
||||
|
||||
---
|
||||
|
||||
## 💡 Tips
|
||||
|
||||
- Add TOTP secrets to `accounts.json` so the bot can respond to MFA prompts automatically
|
||||
- Keep the `sessions` volume; deleting it forces fresh logins and can trigger security reviews
|
||||
- Mixing proxies? Configure per-account proxies in `accounts.json` (see [Proxy Setup](./proxy.md))
|
||||
- Want notifications? Layer [NTFY](./ntfy.md) or [Discord Webhooks](./conclusionwebhook.md) on top once the container is stable
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Related Guides
|
||||
|
||||
- **[Getting Started](./getting-started.md)** — Initial setup before containerization
|
||||
- **[Accounts & 2FA](./accounts.md)** — Configure accounts for Docker
|
||||
- **[Scheduler](./schedule.md)** — Alternative to Docker cron automation
|
||||
- **[Proxy Configuration](./proxy.md)** — Network routing in containers
|
||||
- **[Getting Started](./getting-started.md)** — Prep work before switching to containers
|
||||
- **[Accounts & 2FA](./accounts.md)** — Ensure every account can pass MFA headlessly
|
||||
- **[Scheduler](./schedule.md)** — If you prefer a host-side cron instead of Docker
|
||||
- **[Diagnostics](./diagnostics.md)** — Capture logs and debug a failing container
|
||||
@@ -93,7 +93,7 @@ The script will automatically:
|
||||
If you prefer containers:
|
||||
|
||||
```bash
|
||||
# Ensure accounts.json and config.json exist
|
||||
# Ensure accounts.json and config.jsonc exist
|
||||
docker compose up -d
|
||||
|
||||
# Follow logs
|
||||
|
||||
@@ -57,7 +57,7 @@ Human Mode adds **subtle human-like behavior** to make your automation look and
|
||||
| `gestureMoveProb` | `0.4` | Probability (0-1) for tiny mouse moves |
|
||||
| `gestureScrollProb` | `0.2` | Probability (0-1) for minor scrolls |
|
||||
| `allowedWindows` | `[]` | Time windows for script execution |
|
||||
| `randomOffDaysPerWeek` | `1` | Skip N random days per week |
|
||||
| `randomOffDaysPerWeek` | `1` | Skip N random days per week. Set to `0` to disable (scheduler logs reference this setting explicitly). |
|
||||
|
||||
---
|
||||
|
||||
@@ -72,6 +72,7 @@ Human Mode adds **subtle human-like behavior** to make your automation look and
|
||||
- **Micro mouse moves** — Tiny cursor adjustments (safe zones only)
|
||||
- **Minor scrolls** — Small page movements (non-interactive areas)
|
||||
- **Probability-based** — Not every action includes gestures
|
||||
- **Centralized controller** — The `Humanizer` service now drives all gesture + pause behavior so every module uses the same probabilities and timing windows.
|
||||
|
||||
### **Temporal Patterns**
|
||||
- **Time windows** — Only run during specified hours
|
||||
|
||||
108
docs/index.md
108
docs/index.md
@@ -1,9 +1,9 @@
|
||||
# 📚 Microsoft Rewards Script V2 Documentation
|
||||
# 📚 Microsoft Rewards Script V2 Docs
|
||||
|
||||
<div align="center">
|
||||
|
||||
**🎯 Your complete guide to automating Microsoft Rewards**
|
||||
*Everything you need to get started and master the script*
|
||||
**🎯 Your companion for mastering the automation stack**
|
||||
*Curated guides, verified against the current codebase*
|
||||
|
||||
</div>
|
||||
|
||||
@@ -12,85 +12,51 @@
|
||||
## 🚀 Quick Navigation
|
||||
|
||||
### **Essential Setup**
|
||||
| Guide | Description |
|
||||
|-------|-------------|
|
||||
| **[🎬 Getting Started](./getting-started.md)** | Zero to running — complete setup guide |
|
||||
| **[👤 Accounts & 2FA](./accounts.md)** | Microsoft accounts + TOTP authentication |
|
||||
| **[🐳 Docker](./docker.md)** | Container deployment with headless browsers |
|
||||
| Guide | Why you should read it |
|
||||
|-------|------------------------|
|
||||
| **[🎬 Getting Started](./getting-started.md)** | Install, configure, and run the bot in minutes |
|
||||
| **[👤 Accounts & 2FA](./accounts.md)** | Add Microsoft accounts, enable TOTP, and secure logins |
|
||||
| **[⚙️ Configuration Reference](./config.md)** | Understand every option in `src/config.jsonc` |
|
||||
|
||||
### **Operations & Advanced**
|
||||
| Guide | Description |
|
||||
|-------|-------------|
|
||||
| **[⏰ Scheduling](./schedule.md)** | Automated daily runs and timing |
|
||||
| **[🛠️ Diagnostics](./diagnostics.md)** | Troubleshooting and error capture |
|
||||
| **[🧠 Humanization](./humanization.md)** | Anti-detection and natural behavior |
|
||||
| **[🌐 Proxy Setup](./proxy.md)** | Network routing and IP management |
|
||||
| **[⚙️ Configuration Reference](./config.md)** | Full `config.json` field documentation |
|
||||
### **Run & Operate**
|
||||
| Guide | Focus |
|
||||
|-------|-------|
|
||||
| **[⏰ Scheduling](./schedule.md)** | Cron-style automation and daily cadence |
|
||||
| **[🐳 Docker](./docker.md)** | Container deployment with prewired headless settings |
|
||||
| **[🛠️ Diagnostics](./diagnostics.md)** | Troubleshooting, log capture, and support checklist |
|
||||
| **[🧠 Humanization](./humanization.md)** | Natural browser behavior and ban avoidance |
|
||||
| **[🌐 Proxy Setup](./proxy.md)** | Per-account proxy routing and geo-tuning |
|
||||
| **[📊 Job State](./jobstate.md)** | How runs persist progress and recover |
|
||||
| **[🔄 Auto Update](./update.md)** | Keep the script current without manual pulls |
|
||||
| **[🛡️ Security Notes](./security.md)** | Threat model, secrets handling, and best practices |
|
||||
|
||||
### **Notifications & Monitoring**
|
||||
| Guide | Description |
|
||||
|-------|-------------|
|
||||
| **[📱 NTFY Push](./ntfy.md)** | Mobile push notifications |
|
||||
| **[🔗 Discord Webhooks](./conclusionwebhook.md)** | Rich server notifications |
|
||||
### **Notifications & Control**
|
||||
| Guide | Purpose |
|
||||
|-------|---------|
|
||||
| **[📱 NTFY Push](./ntfy.md)** | Real-time phone notifications |
|
||||
| **[<EFBFBD> Discord Webhooks](./conclusionwebhook.md)** | Detailed run summaries in your server |
|
||||
|
||||
### **Special Modes**
|
||||
| Guide | Description |
|
||||
|-------|-------------|
|
||||
| **[💳 Buy Mode](./buy-mode.md)** | Manual redemption with live monitoring |
|
||||
| Guide | Purpose |
|
||||
|-------|---------|
|
||||
| **[💳 Buy Mode](./buy-mode.md)** | Assisted manual redemption and live monitoring |
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Recommended Reading Path
|
||||
## 🧭 Reading Paths
|
||||
|
||||
**New Users:** Getting Started → Accounts & 2FA → Choose Docker OR Scheduling
|
||||
**Advanced Users:** Humanization → Diagnostics → Notifications
|
||||
**Docker Users:** Getting Started → Accounts & 2FA → Docker → NTFY/Webhookstion Index
|
||||
- **First install:** Getting Started → Accounts & 2FA → Configuration Reference → Scheduling **or** Docker
|
||||
- **Docker-first:** Getting Started prerequisites → Docker → Diagnostics → Notifications (NTFY or Webhooks)
|
||||
- **Optimizing runs:** Humanization → Schedule tuning → Proxy → Job State → Update
|
||||
|
||||
Welcome to the Microsoft Rewards Script V2 docs. Start here:
|
||||
|
||||
- Getting Started: high‑level setup from zero to running — [Getting Started](./getting-started.md)
|
||||
- Accounts & Authentication — [Accounts & TOTP (2FA)](./accounts.md)
|
||||
- Runtime & Operations — [Docker Guide](./docker.md), [Scheduling](./schedule.md), [Diagnostics](./diagnostics.md), [Humanization](./humanization.md), [Job State](./jobstate.md), [Auto Update](./update.md), [Security](./security.md)
|
||||
- Notifications — [NTFY Push](./ntfy.md), [Conclusion Webhook (Discord)](./conclusionwebhook.md)
|
||||
- Modes & Activities — [Buy Mode](./buy-mode.md)
|
||||
|
||||
Recommended reading order if you’re new: Getting Started → Accounts & TOTP → Docker or Scheduler.# Documentation Index
|
||||
|
||||
Welcome to the Microsoft Rewards Script V2 documentation. Start here to set up your environment, add your Microsoft accounts, and understand how the bot operates.
|
||||
|
||||
- Getting Started: High‑level setup from zero to running
|
||||
- [Getting Started](./getting-started.md)
|
||||
- Accounts & Authentication
|
||||
- [Accounts & TOTP (2FA)](./accounts.md)
|
||||
- [Proxy Setup](./proxy.md)
|
||||
- Runtime & Operations
|
||||
- [Docker Guide](./docker.md)
|
||||
- [Scheduling](./schedule.md)
|
||||
- [Diagnostics](./diagnostics.md)
|
||||
- [Humanization](./humanization.md)
|
||||
- [Job State](./jobstate.md)
|
||||
- [Auto Update](./update.md)
|
||||
- [Security Notes](./security.md)
|
||||
- Notifications
|
||||
- [NTFY Push](./ntfy.md)
|
||||
- [Conclusion Webhook (Discord)](./conclusionwebhook.md)
|
||||
- Modes & Activities
|
||||
- [Buy Mode](./buy-mode.md)
|
||||
|
||||
If you are new, read Getting Started first, then Accounts & TOTP.
|
||||
Each guide now links back to the most relevant follow-up topics so you can jump between setup, operations, and troubleshooting without losing context.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Start Path
|
||||
## 🔗 Useful Shortcuts
|
||||
|
||||
**New users should follow this sequence:**
|
||||
- Need sample configs? → [Config presets](./config-presets/)
|
||||
- Want a scripted environment? → [Scheduler](./schedule.md)
|
||||
- Looking to self-audit? → [Diagnostics](./diagnostics.md) + [Security](./security.md)
|
||||
|
||||
1. **[Getting Started](./getting-started.md)** — Install and basic configuration
|
||||
2. **[Accounts & 2FA](./accounts.md)** — Add your Microsoft accounts
|
||||
3. **[Docker](./docker.md)** OR **[Scheduler](./schedule.md)** — Choose deployment method
|
||||
4. **[NTFY](./ntfy.md)** OR **[Discord Webhooks](./conclusionwebhook.md)** — Set up notifications
|
||||
|
||||
**Advanced users may also need:**
|
||||
- **[Proxy](./proxy.md)** — For privacy and geographic routing
|
||||
- **[Security](./security.md)** — Account protection and incident response
|
||||
- **[Humanization](./humanization.md)** — Natural behavior simulation
|
||||
If something feels out of sync with the code, open an issue or ping us on Discord—the docs are maintained to match the current defaults (`src/config.jsonc`, visible browsers by default, Docker headless enforcement via `FORCE_HEADLESS=1`).
|
||||
|
||||
@@ -19,6 +19,7 @@ The built-in scheduler provides **automated script execution** at specified time
|
||||
- 🔄 **Multiple passes** — Execute script multiple times per run
|
||||
- 🏖️ **Vacation mode** — Skip random days monthly
|
||||
- 🎲 **Jitter support** — Randomize execution times
|
||||
- 📅 **Humanization off-days** — Weekly random skips (disable via `humanization.randomOffDaysPerWeek`)
|
||||
- ⚡ **Immediate start** — Option to run on startup
|
||||
|
||||
---
|
||||
@@ -68,6 +69,28 @@ The built-in scheduler provides **automated script execution** at specified time
|
||||
| `vacation.enabled` | `false` | Skip random monthly off-block |
|
||||
| `vacation.minDays` | `3` | Minimum vacation days |
|
||||
| `vacation.maxDays` | `5` | Maximum vacation days |
|
||||
| `cron` | `undefined` | Optional cron expression (string or array) for advanced scheduling |
|
||||
|
||||
### **Cron Expressions (Advanced)**
|
||||
|
||||
You can now drive the scheduler with classic cron syntax instead of a single daily time. Provide either a string or an array in `schedule.cron`.
|
||||
|
||||
```json
|
||||
{
|
||||
"schedule": {
|
||||
"enabled": true,
|
||||
"cron": [
|
||||
"0 7 * * *", // every day at 07:00
|
||||
"30 19 * * 1-5" // weekdays at 19:30
|
||||
],
|
||||
"timeZone": "Europe/Paris"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- Supports 5-field and 6-field cron expressions (`second minute hour day month weekday`).
|
||||
- When `cron` is set, the legacy `time`, `time12`, `time24`, and daily jitter env vars are ignored.
|
||||
- The scheduler still honors vacation mode, weekly random off-days, run-on-start, and watchdog features.
|
||||
|
||||
---
|
||||
|
||||
@@ -317,7 +340,7 @@ services:
|
||||
node -e "console.log(new Date().toLocaleString('en-US', {timeZone: 'America/New_York'}))"
|
||||
|
||||
# Verify config syntax
|
||||
node -e "console.log(JSON.parse((Get-Content 'src/config.json' | Out-String)))"
|
||||
node -e "const fs=require('fs');const strip=input=>{let out='',inString=false,stringChar='',inLine=false,inBlock=false;for(let i=0;i<input.length;i++){const ch=input[i],next=input[i+1];if(inLine){if(ch==='\n'||ch==='\r'){inLine=false;out+=ch;}continue;}if(inBlock){if(ch==='*'&&next==='/' ){inBlock=false;i++;}continue;}if(inString){out+=ch;if(ch==='\\'){i++;if(i<input.length)out+=input[i];continue;}if(ch===stringChar)inString=false;continue;}if(ch==='"'||ch==='\''){inString=true;stringChar=ch;out+=ch;continue;}if(ch==='/'&&next==='/' ){inLine=true;i++;continue;}if(ch==='/'&&next==='*' ){inBlock=true;i++;continue;}out+=ch;}return out;};console.log(JSON.parse(strip(fs.readFileSync('src/config.jsonc','utf8'))));"
|
||||
|
||||
# Check running processes
|
||||
Get-Process | Where-Object {$_.ProcessName -eq "node"}
|
||||
@@ -555,7 +578,7 @@ nohup npm run start:schedule > schedule.log 2>&1 &
|
||||
**Scheduler not running:**
|
||||
- Check `enabled: true` in config
|
||||
- Verify timezone format is correct
|
||||
- Ensure no syntax errors in config.json
|
||||
- Ensure no syntax errors in config.jsonc (remember it allows comments)
|
||||
|
||||
**Wrong execution time:**
|
||||
- Verify system clock is accurate
|
||||
@@ -578,7 +601,7 @@ nohup npm run start:schedule > schedule.log 2>&1 &
|
||||
node -e "console.log(new Date().toLocaleString('en-US', {timeZone: 'America/New_York'}))"
|
||||
|
||||
# Verify config syntax
|
||||
node -e "console.log(JSON.parse(require('fs').readFileSync('src/config.json')))"
|
||||
node -e "const fs=require('fs');const strip=input=>{let out='',inString=false,stringChar='',inLine=false,inBlock=false;for(let i=0;i<input.length;i++){const ch=input[i],next=input[i+1];if(inLine){if(ch==='\n'||ch==='\r'){inLine=false;out+=ch;}continue;}if(inBlock){if(ch==='*'&&next==='/' ){inBlock=false;i++;}continue;}if(inString){out+=ch;if(ch==='\\'){i++;if(i<input.length)out+=input[i];continue;}if(ch===stringChar)inString=false;continue;}if(ch==='"'||ch==='\''){inString=true;stringChar=ch;out+=ch;continue;}if(ch==='/'&&next==='/' ){inLine=true;i++;continue;}if(ch==='/'&&next==='*' ){inBlock=true;i++;continue;}out+=ch;}return out;};console.log(JSON.parse(strip(fs.readFileSync('src/config.jsonc','utf8'))));"
|
||||
|
||||
# Check process status
|
||||
ps aux | grep "start:schedule"
|
||||
@@ -621,7 +644,7 @@ services:
|
||||
```
|
||||
|
||||
Dans ce mode :
|
||||
- `passesPerRun` fonctionne (exécutera plusieurs passes à chaque horaire interne défini par `src/config.json`).
|
||||
- `passesPerRun` fonctionne (exécutera plusieurs passes à chaque horaire interne défini par `src/config.jsonc`).
|
||||
- Vous n'avez plus besoin de `CRON_SCHEDULE` ni de `run_daily.sh`.
|
||||
|
||||
### Docker + External Cron (par défaut du projet)
|
||||
|
||||
Reference in New Issue
Block a user