Files
Microsoft-Rewards-Bot/docs/config.md
2025-11-01 20:44:31 +01:00

16 KiB
Raw Blame History

⚙️ Configuration Guide# ⚙️ Configuration Guide

**Customize script behavior in src/config.jsonc**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).

Quick Start (Essentials)> NOTE: Previous versions had logging.live (live streaming webhook); it was removed and replaced by a simple logging.redactEmails flag.

Minimal Working Config---

Top-Level Fields


{### baseURL

  "humanization": {Internal Microsoft Rewards base. Leave it unless you know what you are doing.

    "enabled": true  // Natural behavior (recommended)

  },### sessionPath

  "workers": {Directory where session data (cookies / fingerprints / job-state) is stored.

    "doDailySet": true,

    "doDesktopSearch": true,---

    "doMobileSearch": true## browser

  }| Key | Type | Default | Description |

}|-----|------|---------|-------------|

```| 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"`). |

**That's all you need!** Everything else has good defaults.

---

---## execution

| Key | Type | Default | Description |

## 🎯 Popular Configurations|-----|------|---------|-------------|

| parallel | boolean | false | Run desktop + mobile simultaneously (higher resource usage). |

### 1. Daily Automation| runOnZeroPoints | boolean | false | Skip full run early if there are zero points available (saves time). |

| clusters | number | 1 | Number of process clusters (multi-process concurrency). |

```jsonc| passesPerRun | number | 1 | Advanced: extra full passes per started run. |

{

  "humanization": { "enabled": true },---

  "schedule": {## buyMode

    "enabled": true,Manual redeem / purchase assistance.

    "time": "09:00",| Key | Type | Default | Description |

    "timeZone": "America/New_York"|-----|------|---------|-------------|

  }| enabled (CLI `-buy`) | boolean | false | Enable buy mode (usually via CLI argument). |

}| maxMinutes | number | 45 | Max session length for buy mode. |


Full Scheduler Guide## fingerprinting.saveFingerprint

Persist browser fingerprints per device type for consistency.

---| Key | Type | Default | Description |

|-----|------|---------|-------------|

2. With Notifications| mobile | boolean | false | Save/reuse a consistent mobile fingerprint. |

| desktop | boolean | false | Save/reuse a consistent desktop fingerprint. |


{---

  "humanization": { "enabled": true },## search

  "conclusionWebhook": {| Key | Type | Default | Description |

    "enabled": true,|-----|------|---------|-------------|

    "url": "https://discord.com/api/webhooks/YOUR_WEBHOOK"| useLocalQueries | boolean | false | Use locale-specific query sources instead of global ones. |

  }

}### search.settings

```| Key | Type | Default | Description |

|-----|------|---------|-------------|

 **[Discord Setup](./conclusionwebhook.md)** | **[NTFY Setup](./ntfy.md)**| useGeoLocaleQueries | boolean | false | Blend geo / locale into chosen queries. |

| scrollRandomResults | boolean | true | Random scroll during search pages to look natural. |

---| clickRandomResults | boolean | true | Occasionally click safe results. |

| retryMobileSearchAmount | number | 2 | Retries if mobile searches didnt yield points. |

### 3. Background Mode (Headless)| delay.min / delay.max | string/number | 35min | Delay between searches (ms or time string). |



```jsonc---

{## humanization

  "browser": {Humanlike behavior simulation.

    "headless": true| Key | Type | Default | Description |

  },|-----|------|---------|-------------|

  "humanization": { "enabled": true }| enabled | boolean | true | Global on/off. |

}| stopOnBan | boolean | true | Stop processing further accounts if a ban is detected. |

```| immediateBanAlert | boolean | true | Fire notification immediately upon ban detection. |

| actionDelay.min/max | number/string | 150450ms | Random micro-delay per action. |

**Note:** Set `headless: false` to see the browser during development.| gestureMoveProb | number | 0.4 | Probability of a small mouse move gesture. |

| gestureScrollProb | number | 0.2 | Probability of a small scroll gesture. |

---| allowedWindows | string[] | [] | Local time windows (e.g. `["08:30-11:00","19:00-22:00"]`). Outside windows, run waits. |



### 4. Skip When No Points---

## vacation

```jsoncRandom contiguous block of days off per month.

{| Key | Type | Default | Description |

  "execution": {|-----|------|---------|-------------|

    "runOnZeroPoints": false| enabled | boolean | false | Activate monthly break behavior. |

  }| minDays | number | 3 | Minimum skipped days per month. |

}| maxDays | number | 5 | Maximum skipped days per month. |


Saves time by skipping accounts with 0 available points.## retryPolicy

Generic transient retry/backoff.

---| Key | Type | Default | Description |

|-----|------|---------|-------------|

5. Multiple Accounts Faster| maxAttempts | number | 3 | Max tries for retryable blocks. |

| baseDelay | number | 1000 | Initial delay in ms. |


{| multiplier | number | 2 | Exponential backoff multiplier. |

  "execution": {| jitter | number | 0.2 | Randomization factor (0..1). |

    "parallel": false,  // Desktop + mobile simultaneously

    "clusters": 1       // Process multiple accounts in parallel---

  }## workers

}Enable/disable scripted task categories.

```| Key | Default | Description |

|-----|---------|-------------|

⚠️ **Higher detection risk** with parallel execution.| doDailySet | true | Daily set activities. |

| doMorePromotions | true | Promotional tasks. |

---| doPunchCards | true | Punch card flows. |

| doDesktopSearch | true | Desktop searches. |

## 🛡️ Anti-Ban Settings| doMobileSearch | true | Mobile searches. |

| doDailyCheckIn | true | Daily check-in. |

### Humanization (Recommended)| doReadToEarn | true | Reading tasks. |

| bundleDailySetWithSearch | false | Immediately start desktop search bundle after daily set. |

```jsonc

{---

  "humanization": {## proxy

    "enabled": true,| Key | Default | Description |

    "actionDelay": { "min": 150, "max": 450 },|-----|---------|-------------|

    "gestureMoveProb": 0.4,| proxyGoogleTrends | true | Route Google Trends fetch through proxy if set. |

    "gestureScrollProb": 0.2,| proxyBingTerms | true | Route Bing query source fetch through proxy if set. |

    "randomOffDaysPerWeek": 1

  }---

}## notifications

```Manages notification channels (Discord webhooks, NTFY, etc.).



→ **[Full Humanization Guide](./humanization.md)**### notifications.webhook

Primary webhook (can be used for summary or generic messages).

---| Key | Default | Description |

|-----|---------|-------------|

### Vacation Mode| enabled | false | Allow sending webhook-based notifications and live log streaming. |

| url | "" | Webhook endpoint. |

```jsonc

{### notifications.conclusionWebhook

  "vacation": {Rich end-of-run summary (if enabled separately).

    "enabled": true,| Key | Default | Description |

    "minDays": 3,|-----|---------|-------------|

    "maxDays": 5| enabled | false | Enable run summary posting. |

  }| url | "" | Webhook endpoint. |

}

```### notifications.ntfy

Lightweight push notifications.

Skips 3-5 random consecutive days per month.| Key | Default | Description |

|-----|---------|-------------|

---| enabled | false | Enable NTFY push. |

| url | "" | Base NTFY server URL (e.g. https://ntfy.sh). |

## 🔧 Advanced Options| topic | rewards | Topic/channel name. |

| authToken | "" | Bearer token if your server requires auth. |

<details>

<summary><strong>Click to expand all options</strong></summary>---

## logging

### Browser| Key | Type | Description |

|-----|------|-------------|

```jsonc| excludeFunc | string[] | Log buckets suppressed in console + any webhook usage. |

{| webhookExcludeFunc | string[] | Buckets suppressed specifically for webhook output. |

  "browser": {| redactEmails | boolean | If true, email addresses are partially masked in logs. |

    "headless": false,| liveWebhookUrl | string | Optional override URL for live log streaming (falls back to `notifications.webhook.url`). |

    "globalTimeout": "30s"

  }_Removed fields_: `live.enabled`, `live.url`, `live.redactEmails` — replaced by `redactEmails` only.

}

```---

## diagnostics

### Workers (Tasks)Capture evidence when something fails.

| Key | Default | Description |

```jsonc|-----|---------|-------------|

{| enabled | true | Master switch for diagnostics. |

  "workers": {| saveScreenshot | true | Save screenshot on failure. |

    "doDailySet": true,| saveHtml | true | Save HTML snapshot on failure. |

    "doMorePromotions": true,| maxPerRun | 2 | Cap artifacts per run per failure type. |

    "doPunchCards": true,| retentionDays | 7 | Old run artifacts pruned after this many days. |

    "doDesktopSearch": true,

    "doMobileSearch": true,---

    "doDailyCheckIn": true,## jobState

    "doReadToEarn": trueCheckpoint system to avoid duplicate work.

  }| Key | Default | Description |

}|-----|---------|-------------|

```| enabled | true | Enable job state tracking. |

| dir | "" | Custom directory (default: `<sessionPath>/job-state`). |

### Search Behavior

---

```jsonc## schedule

{Built-in scheduler (avoids external cron inside container or host).

  "search": {| Key | Default | Description |

    "useLocalQueries": false,|-----|---------|-------------|

    "settings": {| enabled | false | Enable scheduling loop. |

      "useGeoLocaleQueries": false,| useAmPm | false | If true, parse `time12`; else use `time24`. |

      "scrollRandomResults": true,| time12 | 9:00 AM | 12hour format time (only if useAmPm=true). |

      "clickRandomResults": true| time24 | 09:00 | 24hour format time (only if useAmPm=false). |

    }| timeZone | America/New_York | IANA zone string (e.g. Europe/Paris). |

  }| runImmediatelyOnStart | false | Run one pass instantly in addition to daily schedule. |

}

```_Legacy_: If both `time12` and `time24` are empty, a legacy `time` (HH:mm) may still be read.



### Diagnostics---

## update

```jsoncAuto-update behavior after a run.

{| Key | Default | Description |

  "diagnostics": {|-----|---------|-------------|

    "enabled": true,| git | true | Pull latest git changes after run. |

    "saveScreenshot": true,| docker | false | Recreate container (if running in Docker orchestration). |

    "saveHtml": true,| scriptPath | setup/update/update.mjs | Custom script executed for update flow. |

    "maxPerRun": 2,

    "retentionDays": 7---

  }## Security / Best Practices

}- Keep `redactEmails` true if you share logs publicly.

```- Use a private NTFY instance or secure Discord webhooks (do not leak URLs).

- Avoid setting `headless` false on untrusted remote servers.

### Job State

---

```jsonc## Minimal Example

{```jsonc

  "jobState": {{

    "enabled": true,  "browser": { "headless": true },

    "dir": ""  // Empty = use default location  "execution": { "parallel": false },

  }  "workers": { "doDailySet": true, "doDesktopSearch": true, "doMobileSearch": true },

}  "logging": { "redactEmails": true }

```}

Auto-Update

Common Tweaks


{|------|--------|

  "update": {| Faster dev feedback | Set `browser.headless` to false and shorten search delays. |

    "git": true,| Reduce detection risk | Keep humanization enabled, add vacation window. |

    "docker": false,| Silent mode | Add more buckets to `excludeFunc`. |

    "scriptPath": "setup/update/update.mjs"| Skip mobile searches | Set `workers.doMobileSearch=false`. |

  }| Use daily schedule | Set `schedule.enabled=true` and adjust `time24` + `timeZone`. |

}

```---

## NEW INTELLIGENT FEATURES

</details>

### riskManagement

---Dynamic risk assessment and ban prediction.



## 🎛️ Intelligent Features (v2.2+)| Key | Type | Default | Description |

|-----|------|---------|-------------|

### Risk Management| enabled | boolean | true | Enable risk-aware throttling. |

| autoAdjustDelays | boolean | true | Automatically increase delays when captchas/errors are detected. |

```jsonc| stopOnCritical | boolean | false | Stop execution if risk score exceeds threshold. |

{| banPrediction | boolean | true | Enable ML-style pattern analysis to predict ban risk. |

  "riskManagement": {| riskThreshold | number | 75 | Risk score (0-100) above which bot pauses or alerts. |

    "enabled": true,

    "autoAdjustDelays": true,**How it works:** Monitors captchas, errors, timeouts, and account patterns. Dynamically adjusts delays (e.g., 1x → 2.5x) and warns you before bans happen.

    "banPrediction": true,

    "riskThreshold": 75---

  }### analytics

}Performance dashboard and metrics tracking.

| Key | Type | Default | Description |

Dynamically adjusts delays when detecting captchas/errors.|-----|------|---------|-------------|

| enabled | boolean | true | Track points earned, success rates, execution times. |

---| retentionDays | number | 30 | How long to keep analytics data. |

| exportMarkdown | boolean | true | Generate human-readable markdown reports. |

Query Diversity| webhookSummary | boolean | false | Send analytics summary via webhook. |

```jsoncOutput location: analytics/ folder (JSON files per account per day).

{

"queryDiversity": {---

"enabled": true,### queryDiversity

"sources": ["google-trends", "reddit", "local-fallback"],Multi-source search query generation.

"maxQueriesPerSource": 10

}| Key | Type | Default | Description |

}|-----|------|---------|-------------|


| sources | array | `["google-trends", "reddit", "local-fallback"]` | Which sources to query (google-trends, reddit, news, wikipedia, local-fallback). |

Uses multiple search sources to avoid patterns.| maxQueriesPerSource | number | 10 | Max queries to fetch per source. |

| cacheMinutes | number | 30 | Cache duration to avoid hammering APIs. |

---

**Why?** Reduces patterns by mixing Reddit posts, news headlines, Wikipedia topics instead of predictable Google Trends.

### Analytics

---

```jsonc### dryRun

{Test mode: simulate execution without actually running tasks.

  "analytics": {

    "enabled": true,| Key | Type | Default | Description |

    "retentionDays": 30,|-----|------|---------|-------------|

    "exportMarkdown": true| dryRun | boolean | false | When true, logs actions but doesn't execute (useful for testing config). |

  }

}**Use case:** Validate new config changes, estimate execution time, debug issues without touching accounts.


Tracks points earned, success rates, execution times.## Changelog Notes

  • v2.2.0: Added risk-aware throttling, analytics dashboard, query diversity, ban prediction, dry-run mode.

---- Removed live webhook streaming complexity; now simpler logging.

  • Centralized redaction logic under logging.redactEmails.

Dry Run (Test Mode)

If something feels undocumented or unclear, open a documentation issue or extend this page.

{
  "dryRun": true
}

Or via CLI:

npm start -- --dry-run

Simulates execution without actually running tasks.


🛠️ Troubleshooting

Issue Solution
Config not loading Check JSON syntax (trailing commas OK in .jsonc)
Script ignoring config Verify file is src/config.jsonc
Errors after update Compare with example config

📚 Next Steps

Setup scheduler?
Scheduler Guide

Want notifications?
Discord Webhooks

Need proxies?
Proxy Guide


← Back to Hub | Getting Started