* first commit * Addition of a personalized activity manager and refactoring of the logic of activities * Adding diagnostics management, including screenshot and HTML content, as well as improvements to humanize page interactions and +. * Adding the management of newspapers and webhook settings, including filtering messages and improving the structure of the summaries sent. * Adding a post-execution auto-date functionality, including options to update via Git and Docker, as well as a new configuration interface to manage these parameters. * Adding accounts in Docker, with options to use an environmental file or online JSON data, as well as minimum validations for responsible accounts. * Improving the Microsoft Rewards script display with a new headband and better log management, including colors and improved formatting for the console. * v2 * Refactor ESLint configuration and scripts for improved TypeScript support and project structure * Addition of the detection of suspended accounts with the gesture of the improved errors and journalization of banishment reasons * Adding an integrated planner for programmed task execution, with configuration in Config.json and + * Edit * Remove texte * Updating of documentation and adding the management of humanization in the configuration and +. * Adding manual purchase method allowing users to spend points without automation, with monitoring of expenses and notifications. * Correction of documentation and improvement of configuration management for manual purchase mode, adding complete documentation and appropriate banner display. * Add comprehensive documentation for job state persistence, NTFY notifications, proxy configuration, scheduling, and auto-update features - Introduced job state persistence documentation to track progress and resume tasks. - Added NTFY push notifications integration guide for real-time alerts. - Documented proxy configuration options for enhanced privacy and network management. - Included scheduling configuration for automated script execution. - Implemented auto-update configuration to keep installations current with Git and Docker options. * Ajout d'Unt Système de Rapport d'Erreurs Communautaire pour Améliorerer le Débogage, incluant la Configuration et l'Envoi de Résumés D'Erreurs Anonyés à un webhook Discord. * Mini Edit * Mise à Jour du Readme.md pour Améliorerer la Présentation et La Claté, Ajout d'Un section sur les notifications en Temps Raine et Mise à Jour des badges pour la meille unibilité. * Documentation update * Edit README.md * Edit * Update README with legacy version link * Improvement of location data management and webhooks, adding configurations normalization * Force update for PR * Improvement of documentation and configuration options for Cron integration and Docker use * Improvement of planning documentation and adding a multi-pan-pancake in the daily execution script * Deletion of the CommunityReport functionality in accordance with the project policy * Addition of randomization of start -up schedules and surveillance time for planner executions * Refactor Docker setup to use built-in scheduler, removing cron dependencies and simplifying configuration options * Adding TOTP support for authentication, update of interfaces and configuration files to include Totp secret, and automatic generation of the Totp code when connecting. * Fix [LOGIN-NO-PROMPT] No dialogs (xX) * Reset the Totp field for email_1 in the accounts.example.json file * Reset the Totp field for email_1 in the Readme.md file * Improvement of Bing Research: Use of the 'Attacked' method for the research field, management of overlays and adding direct navigation in the event of entry failure. * Adding a complete security policy, including directives on vulnerability management, coordinated disclosure and user security advice. * Remove advanced environment variables section from README * Configuration and dockerfile update: Passage to Node 22, addition of management of the purchase method, deletion of obsolete scripts * Correction of the order of the sections in the Readme.md for better readability * Update of Readm and Security Policy: Addition of the method of purchase and clarification of security and confidentiality practices. * Improvement of the readability of the Readm and deletion of the mention of reporting of vulnerabilities in the security document. * Addition of humanization management and adaptive throttling to simulate more human behavior in bot activities. * Addition of humanization management: activation/deactivation of human gestures, configuration update and adding documentation on human mode. * Deletion of community error report functionality to respect the privacy policy * Addition of immediate banning alerts and vacation configuration in the Microsoft Rewards bot * Addition of immediate banning alerts and vacation configuration in the Microsoft Rewards bot * Added scheduling support: support for 12h and 24h formats, added options for time zone, and immediate execution on startup. * Added window size normalization and page rendering to fit typical screens, with injected CSS styles to prevent excessive zooming. * Added security incident management: detection of hidden recovery emails, automation blocking, and global alerts. Updated configuration files and interfaces to include recovery emails. Improved security incident documentation. * Refactor incident alert handling: unified alert sender * s * Added security incident management: detect recovery email inconsistencies and send unified alerts. Implemented helper methods to manage alerts and compromised modes. * Added heartbeat management for the scheduler: integrated a heartbeat file to report liveliness and adjusted the watchdog configuration to account for heartbeat updates. * Edit webook * Updated security alert management: fixed the recovery email hidden in the documentation and enabled the conclusion webhook for notifications. * Improved security alert handling: added structured sending to webhooks for better visibility and updated callback interval in compromised mode. * Edit conf * Improved dependency installation: Added the --ignore-scripts option for npm ci and npm install. Updated comments in compose.yaml for clarity. * Refactor documentation structure and enhance logging: - Moved documentation files from 'information' to 'docs' directory for better organization. - Added live logging configuration to support webhook logs with email redaction. - Updated file paths in configuration and loading functions to accommodate new structure. - Adjusted scheduler behavior to prevent immediate runs unless explicitly set. - Improved error handling for account and config file loading. - Enhanced security incident documentation with detailed recovery steps. * Fix docs * Remove outdated documentation on NTFY, Proxy, Scheduling, Security, and Auto-Update configurations; update Browser class to prioritize headless mode based on environment variable. * Addition of documentation for account management and Totp, Docker Guide, and Update of the Documentation Index. * Updating Docker documentation: simplification of instructions and adding links to detailed guides. Revision of configuration options and troubleshooting sections. * Edit * Edit docs * Enhance documentation for Scheduler, Security, and Auto-Update features - Revamped the Scheduler documentation to include detailed features, configuration options, and usage examples. - Expanded the Security guide with comprehensive incident response strategies, privacy measures, and monitoring practices. - Updated the Auto-Update section to clarify configuration, methods, and best practices for maintaining system integrity. * Improved error handling and added crash recovery in the Microsoft Rewards bot. Added configuration for automatic restart and handling of local search queries when trends fail. * Fixed initial point counting in MicrosoftRewardsBot and improved error handling when sending summaries to webhooks. * Added unified support for notifications and improved handling of webhook configurations in the normalizeConfig and log functions. * UPDATE LOGIN * EDIT LOGIN * Improved login error handling: added recovery mismatch detection and the ability to switch to password authentication. * Added a full reference to configuration in the documentation and improved log and error handling in the code. * Added context management for conclusion webhooks and improved user configuration for notifications. * Mini edit * Improved logic for extracting masked emails for more accurate matching during account recovery.
16 KiB
⏰ Scheduler & Automation
🚀 Built-in scheduler for automated daily execution
Set it and forget it
🎯 What is the Scheduler?
The built-in scheduler provides automated script execution at specified times without requiring external cron jobs or task schedulers.
Key Features
- 📅 Daily automation — Run at the same time every day
- 🌍 Timezone aware — Handles DST automatically
- 🔄 Multiple passes — Execute script multiple times per run
- 🏖️ Vacation mode — Skip random days monthly
- 🎲 Jitter support — Randomize execution times
- ⚡ Immediate start — Option to run on startup
⚙️ Configuration
Basic Setup
{
"schedule": {
"enabled": true,
"time": "09:00",
"timeZone": "America/New_York",
"runImmediatelyOnStart": true
},
"passesPerRun": 2
}
Advanced Setup with Vacation Mode
{
"schedule": {
"enabled": true,
"time": "10:00",
"timeZone": "Europe/Paris",
"runImmediatelyOnStart": false
},
"passesPerRun": 3,
"vacation": {
"enabled": true,
"minDays": 3,
"maxDays": 5
}
}
Configuration Options
| Setting | Default | Description |
|---|---|---|
enabled |
false |
Enable built-in scheduler |
time |
"09:00" |
Daily execution time (24-hour format) |
timeZone |
"UTC" |
IANA timezone identifier |
runImmediatelyOnStart |
true |
Execute once on process startup |
passesPerRun |
1 |
Number of complete runs per execution |
vacation.enabled |
false |
Skip random monthly off-block |
vacation.minDays |
3 |
Minimum vacation days |
vacation.maxDays |
5 |
Maximum vacation days |
🚀 How It Works
Daily Scheduling
- Calculate next run — Timezone-aware scheduling
- Wait until time — Minimal resource usage
- Execute passes — Run script specified number of times
- Schedule next day — Automatic DST adjustment
Startup Behavior
Immediate Start Enabled (true)
- Before scheduled time → Run immediately + wait for next scheduled time
- After scheduled time → Run immediately + wait for tomorrow's time
Immediate Start Disabled (false)
- Any time → Always wait for next scheduled time
Multiple Passes
- Each pass processes all accounts through all tasks
- Useful for maximum point collection
- Higher passes = more points but increased detection risk
🏖️ Vacation Mode
Monthly Off-Blocks
Vacation mode randomly selects a contiguous block of days each month to skip execution.
Configuration
{
"vacation": {
"enabled": true,
"minDays": 3,
"maxDays": 5
}
}
How It Works
- Random selection — Different days each month
- Contiguous block — Skip consecutive days, not scattered
- Independent — Works with weekly random off-days
- Logged — Shows selected vacation period
Example Output
[SCHEDULE] Selected vacation block this month: 2025-01-15 → 2025-01-18
[SCHEDULE] Skipping run - vacation mode (3 days remaining)
🌍 Supported Timezones
North America
America/New_York— Eastern TimeAmerica/Chicago— Central TimeAmerica/Denver— Mountain TimeAmerica/Los_Angeles— Pacific TimeAmerica/Phoenix— Arizona (no DST)
Europe
Europe/London— GMT/BSTEurope/Paris— CET/CESTEurope/Berlin— CET/CESTEurope/Rome— CET/CESTEurope/Moscow— MSK
Asia Pacific
Asia/Tokyo— JSTAsia/Shanghai— CSTAsia/Kolkata— ISTAustralia/Sydney— AEST/AEDTPacific/Auckland— NZST/NZDT
🎲 Randomization & Watchdog
Environment Variables
# Add random delay before first run (5-20 minutes)
$env:SCHEDULER_INITIAL_JITTER_MINUTES_MIN=5
$env:SCHEDULER_INITIAL_JITTER_MINUTES_MAX=20
# Add daily jitter to scheduled time (2-10 minutes)
$env:SCHEDULER_DAILY_JITTER_MINUTES_MIN=2
$env:SCHEDULER_DAILY_JITTER_MINUTES_MAX=10
# Kill stuck passes after N minutes
$env:SCHEDULER_PASS_TIMEOUT_MINUTES=180
# Run each pass in separate process (recommended)
$env:SCHEDULER_FORK_PER_PASS=true
Benefits
- Avoid patterns — Prevents exact-time repetition
- Protection — Kills stuck processes
- Isolation — Process separation for stability
🖥️ Running the Scheduler
Development Mode
npm run ts-schedule
Production Mode
npm run build
npm run start:schedule
Background Execution
# Windows Background (PowerShell)
Start-Process -NoNewWindow -FilePath "npm" -ArgumentList "run", "start:schedule"
# Alternative: Windows Task Scheduler (recommended)
# Create scheduled task via GUI or schtasks command
📊 Usage Examples
Basic Daily Automation
{
"schedule": {
"enabled": true,
"time": "08:00",
"timeZone": "America/New_York"
}
}
⏰ Perfect for morning routine — Catch daily resets
Multiple Daily Passes
{
"schedule": {
"enabled": true,
"time": "10:00",
"timeZone": "Europe/London",
"runImmediatelyOnStart": false
},
"passesPerRun": 3
}
🔄 Maximum points with higher detection risk
Conservative with Vacation
{
"schedule": {
"enabled": true,
"time": "20:00",
"timeZone": "America/Los_Angeles"
},
"passesPerRun": 1,
"vacation": {
"enabled": true,
"minDays": 4,
"maxDays": 6
}
}
🏖️ Natural patterns with monthly breaks
🐳 Docker Integration
Built-in Scheduler (Recommended)
services:
microsoft-rewards-script:
build: .
environment:
TZ: Europe/Paris
command: ["npm", "run", "start:schedule"]
- Uses
passesPerRunfrom config - Single long-running process
- No external cron needed
External Cron (Project Default)
services:
microsoft-rewards-script:
build: .
environment:
CRON_SCHEDULE: "0 7,16,20 * * *"
RUN_ON_START: "true"
- Uses
run_daily.shwith random delays - Multiple cron executions
- Lockfile prevents overlaps
📋 Logging Output
Scheduler Initialization
[SCHEDULE] Scheduler initialized for daily 09:00 America/New_York
[SCHEDULE] Next run scheduled for 2025-01-21 09:00:00 EST
Daily Execution
[SCHEDULE] Starting scheduled run (pass 1 of 2)
[SCHEDULE] Completed scheduled run in 12m 34s
[SCHEDULE] Next run scheduled for 2025-01-22 09:00:00 EST
Time Calculations
[SCHEDULE] Current time: 2025-01-20 15:30:00 EDT
[SCHEDULE] Target time: 2025-01-21 09:00:00 EDT
[SCHEDULE] Waiting 17h 30m until next run
🛠️ Troubleshooting
| Problem | Solution |
|---|---|
| Scheduler not running | Check enabled: true; verify timezone format |
| Wrong execution time | Verify system clock; check DST effects |
| Memory growth | Restart process weekly; monitor logs |
| Missed executions | Check system sleep/hibernation; verify process |
Debug Commands
# Test timezone calculation
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)))"
# Check running processes
Get-Process | Where-Object {$_.ProcessName -eq "node"}
⚡ Performance & Best Practices
Optimal Timing
- 🌅 Morning (7-10 AM) — Catch daily resets
- 🌆 Evening (7-10 PM) — Complete remaining tasks
- ❌ Avoid peak hours — Reduce detection during high traffic
Pass Recommendations
- 1 pass — Safest, good for most users
- 2-3 passes — Balance of points vs. risk
- 4+ passes — Higher risk, development only
Monitoring
- ✅ Check logs regularly for errors
- ✅ Monitor point collection trends
- ✅ Verify scheduler status weekly
🔗 Alternative Solutions
Windows Task Scheduler
# Create scheduled task
schtasks /create /tn "MS-Rewards" /tr "npm start" /sc daily /st 09:00 /sd 01/01/2025
PowerShell Scheduled Job
# Register scheduled job
Register-ScheduledJob -Name "MSRewards" -ScriptBlock {cd "C:\path\to\project"; npm start} -Trigger (New-JobTrigger -Daily -At 9am)
🔗 Related Guides
- Getting Started — Initial setup and configuration
- Humanization — Natural behavior patterns
- Docker — Container deployment
- Job State — Execution state management
Usage Examples
Basic Daily Run
{
"schedule": {
"enabled": true,
"time": "08:00",
"timeZone": "America/New_York"
}
}
Multiple Daily Passes
{
"schedule": {
"enabled": true,
"time": "10:00",
"timeZone": "Europe/London",
"runImmediatelyOnStart": false
},
"passesPerRun": 3
}
Development Testing
{
"schedule": {
"enabled": true,
"time": "00:01",
"timeZone": "UTC",
"runImmediatelyOnStart": true
}
}
Supported Timezones
Common IANA timezone identifiers:
North America
America/New_York(Eastern Time)America/Chicago(Central Time)America/Denver(Mountain Time)America/Los_Angeles(Pacific Time)America/Phoenix(Arizona - no DST)
Europe
Europe/London(GMT/BST)Europe/Paris(CET/CEST)Europe/Berlin(CET/CEST)Europe/Rome(CET/CEST)Europe/Moscow(MSK)
Asia Pacific
Asia/Tokyo(JST)Asia/Shanghai(CST)Asia/Kolkata(IST)Australia/Sydney(AEST/AEDT)Pacific/Auckland(NZST/NZDT)
UTC Variants
UTC(Coordinated Universal Time)GMT(Greenwich Mean Time)
Running the Scheduler
Development Mode
npm run ts-schedule
Production Mode
npm run build
npm run start:schedule
Optional Randomization and Watchdog
You can introduce slight randomness to the start times and protect against stuck runs:
-
SCHEDULER_INITIAL_JITTER_MINUTES_MIN/SCHEDULER_INITIAL_JITTER_MINUTES_MAX- Adds a one‑time random delay before the very first run after the scheduler starts.
- Example:
SCHEDULER_INITIAL_JITTER_MINUTES_MIN=5andSCHEDULER_INITIAL_JITTER_MINUTES_MAX=20delays the first run by 5–20 minutes.
-
SCHEDULER_DAILY_JITTER_MINUTES_MIN/SCHEDULER_DAILY_JITTER_MINUTES_MAX- Adds an extra random delay to each daily scheduled execution.
- Example: 2–10 minutes of daily jitter to avoid exact same second each day.
-
SCHEDULER_PASS_TIMEOUT_MINUTES- Kills a stuck pass after N minutes (default 180). Useful if the underlying browser gets stuck.
-
SCHEDULER_FORK_PER_PASS- Defaults to
true. Whentrue, each pass runs in a child Node process so a stuck pass can be terminated without killing the scheduler. Set tofalseto run passes in‑process (not recommended).
- Defaults to
Background Execution
# Linux/macOS (background process)
nohup npm run start:schedule > schedule.log 2>&1 &
# Windows (background service - requires additional setup)
# Recommend using Task Scheduler or Windows Service wrapper
Process Management
Long-Running Process
- Scheduler runs continuously
- Automatically handles timezone changes
- Graceful handling of system clock adjustments
Memory Management
- Minimal memory footprint between runs
- Garbage collection after each execution
- No memory leaks in long-running processes
Error Recovery
- Failed runs don't affect future scheduling
- Automatic retry on next scheduled time
- Error logging for troubleshooting
Logging Output
Scheduler Events
[SCHEDULE] Scheduler initialized for daily 09:00 America/New_York
[SCHEDULE] Next run scheduled for 2025-09-21 09:00:00 EST
[SCHEDULE] Starting scheduled run (pass 1 of 2)
[SCHEDULE] Completed scheduled run in 12m 34s
[SCHEDULE] Next run scheduled for 2025-09-22 09:00:00 EST
Time Calculations
[SCHEDULE] Current time: 2025-09-20 15:30:00 EDT
[SCHEDULE] Target time: 2025-09-21 09:00:00 EDT
[SCHEDULE] Waiting 17h 30m until next run
Integration with Other Features
Docker Compatibility
- Scheduler works in Docker containers
- Alternative to external cron jobs
- Timezone handling in containerized environments
Buy Mode Exclusion
- Scheduler only runs automation mode
- Buy mode (
-buy) ignores scheduler settings - Manual executions bypass scheduler
Clustering
- Scheduler runs only in single-process mode
- Clustering disabled when scheduler is active
- Use scheduler OR clustering, not both
Best Practices
Optimal Timing
- Morning runs: Catch daily resets and new activities
- Evening runs: Complete remaining tasks before midnight
- Avoid peak hours: Reduce detection risk during high traffic
Timezone Selection
- Use your local timezone for easier monitoring
- Consider Microsoft Rewards server timezone
- Account for daylight saving time changes
Multiple Passes
- 2-3 passes: Good balance of points vs. detection risk
- More passes: Higher detection risk
- Single pass: Safest but may miss some points
Monitoring
- Check logs regularly for errors
- Monitor point collection trends
- Verify scheduler is running as expected
Troubleshooting
Common Issues
Scheduler not running:
- Check
enabled: truein config - Verify timezone format is correct
- Ensure no syntax errors in config.json
Wrong execution time:
- Verify system clock is accurate
- Check timezone identifier spelling
- Consider daylight saving time effects
Memory growth over time:
- Restart scheduler process weekly
- Monitor system resource usage
- Check for memory leaks in logs
Missed executions:
- System was sleeping/hibernating
- Process was killed or crashed
- Clock was adjusted significantly
Debug Commands
# Test timezone calculation
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')))"
# Check process status
ps aux | grep "start:schedule"
Alternative Solutions
External Cron (Linux/macOS)
# Crontab entry for 9 AM daily
0 9 * * * cd /path/to/MSN-V2 && npm start
# Multiple times per day
0 9,15,21 * * * cd /path/to/MSN-V2 && npm start
Windows Task Scheduler
- Create scheduled task via Task Scheduler
- Set trigger for daily execution
- Configure action to run
npm startin project directory
Docker Cron
# Add to Dockerfile
RUN apt-get update && apt-get install -y cron
COPY crontab /etc/cron.d/rewards-cron
RUN crontab /etc/cron.d/rewards-cron
Docker + Built-in Scheduler
Au lieu d'utiliser cron, vous pouvez lancer le scheduler intégré dans le conteneur (un seul process long‑vivant) :
services:
microsoft-rewards-script:
build: .
environment:
TZ: Europe/Paris
command: ["npm", "run", "start:schedule"]
Dans ce mode :
passesPerRunfonctionne (exécutera plusieurs passes à chaque horaire interne défini parsrc/config.json).- Vous n'avez plus besoin de
CRON_SCHEDULEni derun_daily.sh.
Docker + External Cron (par défaut du projet)
Si vous préférez la planification par cron système dans le conteneur (valeur par défaut du projet) :
- Utilisez
CRON_SCHEDULE(ex.:0 7,16,20 * * *). run_daily.shintroduit un délai aléatoire (par défaut 5–50 min) et un lockfile pour éviter les chevauchements.RUN_ON_START=truedéclenche une exécution immédiate au démarrage du conteneur (sans délai aléatoire).
Performance Considerations
System Resources
- Minimal CPU usage between runs
- Low memory footprint when idle
- No network activity during waiting periods
Startup Time
- Fast initialization (< 1 second)
- Quick timezone calculations
- Immediate scheduling of next run
Reliability
- Robust error handling
- Automatic recovery from failures
- Consistent execution timing