Add comprehensive FAQ and README documentation for Microsoft Rewards Script

- Created FAQ.md with detailed answers to common questions regarding the project, installation, configuration, troubleshooting, safety, and features.
- Established README.md to serve as a documentation hub, outlining the structure and providing quick navigation links to various guides and resources.
This commit is contained in:
2025-11-03 14:54:07 +01:00
parent 6d549e6590
commit 8ccfdd23c9
20 changed files with 1264 additions and 527 deletions

347
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,347 @@
# 🤝 Contributing to Microsoft Rewards Script
<div align="center">
<img src="assets/logo.png" alt="Microsoft Rewards Script Logo" width="120"/>
**Thank you for considering contributing to this project!**
</div>
---
## 📋 Table of Contents
- [Code of Conduct](#code-of-conduct)
- [How Can I Contribute?](#how-can-i-contribute)
- [Development Setup](#development-setup)
- [Pull Request Process](#pull-request-process)
- [Coding Standards](#coding-standards)
- [Documentation](#documentation)
---
## 🤝 Code of Conduct
This project follows a simple principle: **Be respectful and constructive**.
- Treat all contributors with respect
- Welcome newcomers and help them learn
- Focus on constructive feedback
- Keep discussions professional and on-topic
---
## 💡 How Can I Contribute?
### 🐛 Reporting Bugs
Before creating a bug report:
- Check existing issues to avoid duplicates
- Gather diagnostic information (see [Diagnostics Guide](docs/diagnostics.md))
**Good bug reports include:**
- Clear title and description
- Steps to reproduce
- Expected vs actual behavior
- Environment details (OS, Node.js version, script version)
- Logs and screenshots (remember to redact sensitive info!)
### ✨ Suggesting Features
Feature suggestions are welcome! Please:
- Check if the feature already exists or is planned
- Explain the use case and benefits
- Consider backward compatibility
- Be open to discussion and alternatives
### 📝 Improving Documentation
Documentation improvements are highly valued:
- Fix typos or unclear instructions
- Add examples or clarifications
- Translate content (if applicable)
- Update outdated information
### 💻 Code Contributions
Contributions to the codebase are welcome! See [Development Setup](#development-setup) below.
---
## 🛠️ Development Setup
### Prerequisites
- Node.js 20+ (version 22 recommended)
- Git
- A code editor (VS Code recommended)
### Getting Started
1. **Fork the repository** on GitHub
2. **Clone your fork:**
```bash
git clone https://github.com/YOUR_USERNAME/Microsoft-Rewards-Bot.git
cd Microsoft-Rewards-Bot
```
3. **Install dependencies:**
```bash
npm install
```
4. **Set up configuration:**
```bash
cp src/accounts.example.jsonc src/accounts.jsonc
# Edit accounts.jsonc with test credentials
```
5. **Build the project:**
```bash
npm run build
```
6. **Run in development mode:**
```bash
npm run dev
```
### Project Structure
```
src/
├── browser/ # Browser automation (Playwright)
├── functions/ # Core features (activities, login, workers)
│ └── activities/ # Individual activity handlers
├── interface/ # TypeScript interfaces
└── util/ # Utility classes (logging, analytics, etc.)
```
---
## 🔄 Pull Request Process
### Before Submitting
1. **Create a feature branch:**
```bash
git checkout -b feature/your-feature-name
```
2. **Make your changes:**
- Write clean, documented code
- Follow existing code style
- Add comments for complex logic
3. **Test your changes:**
```bash
npm run build
npm run start
```
4. **Commit your changes:**
```bash
git add .
git commit -m "feat: add amazing new feature"
```
Use conventional commits:
- `feat:` for new features
- `fix:` for bug fixes
- `docs:` for documentation
- `refactor:` for code refactoring
- `test:` for tests
- `chore:` for maintenance tasks
### Submitting the PR
1. **Push to your fork:**
```bash
git push origin feature/your-feature-name
```
2. **Create a Pull Request** on GitHub:
- Provide a clear title and description
- Reference any related issues
- Explain what changed and why
- Include screenshots/examples if applicable
3. **Respond to feedback:**
- Be open to suggestions
- Make requested changes promptly
- Keep the discussion focused and professional
### PR Review Process
- Maintainers will review your PR as soon as possible
- Changes may be requested before merging
- Once approved, a maintainer will merge your contribution
---
## 📐 Coding Standards
### TypeScript Style
- **Indentation:** 2 spaces (no tabs)
- **Quotes:** Single quotes for strings
- **Semicolons:** Required
- **Naming:**
- `camelCase` for variables and functions
- `PascalCase` for classes and interfaces
- `UPPER_CASE` for constants
### Best Practices
- Write self-documenting code with clear variable names
- Add comments for complex logic
- Keep functions small and focused (single responsibility)
- Handle errors gracefully
- Avoid code duplication
- Use TypeScript types properly (avoid `any` when possible)
### Example
```typescript
// ✅ Good
async function calculateRewardPoints(account: Account): Promise<number> {
try {
const points = await fetchPointsFromAPI(account);
return points;
} catch (error) {
this.log.error('POINTS-FETCH', `Failed to fetch points: ${error.message}`);
return 0;
}
}
// ❌ Bad
async function calc(a: any): Promise<any> {
const p = await fetch(a);
return p;
}
```
---
## 📚 Documentation
### Documentation Standards
- Keep documentation clear and concise
- Use examples wherever possible
- Update documentation when changing functionality
- Follow the existing documentation structure
### Documentation Files
- `README.md` — Main project overview and quick start
- `docs/*.md` — Detailed guides for specific topics
- Code comments — Inline documentation for complex logic
### Writing Style
- Use clear, simple language
- Break complex topics into steps
- Include code examples
- Add visual aids (screenshots, diagrams) when helpful
- Use emojis sparingly for visual navigation
---
## 🧪 Testing
Currently, this project doesn't have a formal test suite. If you'd like to contribute tests:
- Use a testing framework (Jest, Mocha, etc.)
- Write unit tests for utility functions
- Consider integration tests for critical flows
- Document how to run tests
---
## 🐛 Debugging
When debugging issues:
1. Enable diagnostics in `config.jsonc`:
```jsonc
{
"diagnostics": {
"enabled": true,
"saveScreenshot": true,
"saveHtml": true
}
}
```
2. Check logs in the console and `reports/` folder
3. Use VS Code debugger with launch configuration
---
## 💬 Getting Help
- **Discord:** [Join our community](https://discord.gg/h6Z69ZPPCz)
- **GitHub Issues:** Ask questions or report problems
- **Documentation:** Check the [docs folder](docs/index.md)
---
## 🎯 Contribution Ideas
Not sure where to start? Here are some ideas:
### Beginner-Friendly
- Fix typos in documentation
- Improve error messages
- Add code comments
- Create examples or tutorials
### Intermediate
- Refactor complex functions
- Improve error handling
- Add new configuration options
- Optimize performance
### Advanced
- Implement new activity types
- Enhance anti-detection mechanisms
- Add comprehensive testing
- Improve Docker deployment
---
## 🙏 Recognition
Contributors will be:
- Listed in the project's contributors page
- Mentioned in release notes (for significant contributions)
- Appreciated by the community! 🌟
---
## 📄 License
---
## 📄 License
By contributing, you agree that your contributions will be licensed under the same [Non-Commercial Personal Use License](LICENSE) as the project.
---
---
<div align="center">
**Thank you for contributing!** 🎉
[Back to README](README.md) • [Documentation](docs/index.md) • [Discord](https://discord.gg/h6Z69ZPPCz)
</div>

109
LICENSE
View File

@@ -1,43 +1,108 @@
PROPRIETARY LICENSE
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 InternationalNON-COMMERCIAL PERSONAL USE LICENSE
Copyright (c) 2024-2025 LightZirconite and Contributors
All rights reserved.
Copyright (c) 2025 Light60-1Copyright (c) 2024-2025 TheNetsky and Contributors
Originally forked from Light60-1/Microsoft-Rewards-Rewi
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0
International License. To view a copy of this license, visit:All rights reserved.
http://creativecommons.org/licenses/by-nc-sa/4.0/
TERMS AND CONDITIONS:
================================================================================
1. PERMITTED USE:
- You may download and use this software for personal, non-commercial purposes.
YOU ARE FREE TO: - You may download and use this software for personal, non-commercial purposes.
- You may modify the source code for your own personal use.
- You may submit pull requests (PRs) to the official repository to propose improvements.
• Share — copy and redistribute the material in any medium or format - You may submit pull requests (PRs) to the official repository to propose improvements.
• Adapt — remix, transform, and build upon the material
2. PROHIBITED ACTIONS:
- You may NOT redistribute this software, modified or unmodified, in any form.
The licensor cannot revoke these freedoms as long as you follow the license terms. - You may NOT redistribute this software, modified or unmodified, in any form.
- You may NOT share, publish, or distribute your modifications publicly.
- You may NOT use this software for commercial purposes.
================================================================================ - You may NOT use this software for commercial purposes.
- You may NOT sublicense, sell, rent, or lease this software.
- You may NOT create derivative works for public distribution.
UNDER THE FOLLOWING TERMS: - You may NOT create derivative works for public distribution.
- You may NOT remove or modify this license or copyright notices.
3. CONTRIBUTIONS:
- By submitting a pull request, you grant the copyright holder the right to use,
• Attribution — You must give appropriate credit, provide a link to the license,
and indicate if changes were made. You may do so in any reasonable manner, but3. CONTRIBUTIONS:
not in any way that suggests the licensor endorses you or your use. - By submitting a pull request, you grant the copyright holder the right to use,
modify, and distribute your contributions under this license.
- You retain no rights to your contributions once merged into the official repository.
4. DISCLAIMER:
• NonCommercial — You may NOT use the material for commercial purposes. - You retain no rights to your contributions once merged into the official repository.
This includes selling, renting, licensing for profit, or using in any
revenue-generating context without explicit written permission.4. DISCLAIMER:
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
• ShareAlike — If you remix, transform, or build upon the material, you must INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
distribute your contributions under the same license as the original. PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
5. TERMINATION:
• No additional restrictions — You may not apply legal terms or technological OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
measures that legally restrict others from doing anything the license permits. SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================================================5. TERMINATION:
This license is effective until terminated. Your rights under this license will
terminate automatically without notice if you fail to comply with any term herein.
6. GOVERNING LAW:
This license shall be governed by and construed in accordance with applicable laws,
without regard to its conflict of law provisions.
DISCLAIMER: terminate automatically without notice if you fail to comply with any term herein.
For permissions beyond the scope of this license, please contact the copyright holder.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR6. GOVERNING LAW:
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, This license shall be governed by and construed in accordance with applicable laws,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE without regard to its conflict of law provisions.
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,For permissions beyond the scope of this license, please contact the copyright holder.
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================================================
MICROSOFT REWARDS TERMS:
This software automates interactions with Microsoft Rewards, which may violate
Microsoft's Terms of Service. Use at your own risk. The authors:
• Are NOT responsible for account suspensions or bans
• Do NOT encourage violating terms of service
• Provide this for educational purposes ONLY
By using this software, you acknowledge and accept all risks.
================================================================================
For commercial licensing inquiries or permissions beyond this license:
https://github.com/Light60-1/Microsoft-Rewards-Bot/issues

142
NOTICE
View File

@@ -1,127 +1,49 @@
# IMPORTANT LEGAL NOTICES
Microsoft Rewards Bot
Copyright (c) 2025 Light60-1
## 🚨 Terms of Service Violation Warning
This project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0
International License. See LICENSE file for details.
**Using this software violates Microsoft's Terms of Service.**
================================================================================
Microsoft Rewards explicitly prohibits:
- Automated point collection
- Bot usage for completing tasks
- Any form of automation on their platform
IMPORTANT LEGAL NOTICES
### Potential Consequences:
- ❌ **Immediate account suspension**
- ❌ **Permanent ban from Microsoft Rewards**
- ❌ **Forfeiture of all accumulated points**
- ❌ **Loss of redemption history**
- ⚠️ Possible restrictions on other Microsoft services
🚨 USE AT YOUR OWN RISK
---
This software automates interactions with Microsoft Rewards, which may violate
Microsoft's Terms of Service. Potential consequences include:
## 🏢 Proprietary License - Restricted Use
• Account suspension or permanent ban
• Loss of accumulated points and rewards
• Restriction from Microsoft services
This software is licensed under a **PROPRIETARY LICENSE** with strict restrictions.
### ✅ Permitted Activities:
- Download and use for personal, non-commercial purposes
- Modify the source code for your own personal use
- Submit pull requests to the official repository
### ❌ Prohibited Activities:
- Redistributing this software (modified or unmodified)
- Sharing or publishing your modifications publicly
- Using this software for commercial purposes
- Selling, renting, or leasing this software
- Creating derivative works for public distribution
- Removing or modifying license or copyright notices
---
## ⚖️ Legal Disclaimer
### No Warranty
This software is provided "AS IS" without any warranty of any kind.
### No Liability
The authors and contributors:
- Are NOT responsible for account suspensions
- Are NOT responsible for lost points or rewards
- Are NOT responsible for any damages
- Do NOT encourage ToS violations
- Provide this for educational purposes ONLY
Are NOT responsible for any actions taken by Microsoft
• Do NOT encourage violating terms of service
• Provide this for EDUCATIONAL purposes only
### Your Responsibility
You are solely responsible for:
- Your use of this software
- Compliance with Microsoft's policies
- Any consequences from automation
- Legal implications in your jurisdiction
================================================================================
---
THIRD-PARTY SOFTWARE
## 🎓 Educational Purpose Statement
This project uses open-source libraries:
• Playwright (Apache-2.0)
• ReBrowser-Playwright (Apache-2.0)
• Cheerio (MIT)
• Axios (MIT)
• And others (see package.json)
This project is developed and maintained for **educational purposes**:
- To demonstrate browser automation techniques
- To showcase TypeScript and Playwright capabilities
- To teach software architecture patterns
- To explore anti-detection methodologies
All trademarks and service marks are the property of their respective owners.
**The authors do not condone using this software in violation of any Terms of Service.**
================================================================================
---
PRIVACY & DATA
## 🔒 Privacy & Security
This software stores credentials locally only. No data is sent to third parties
except as required for Microsoft Rewards functionality. You are responsible for
securing your configuration files.
### Your Data:
- This software stores credentials **locally only**
- No data is sent to third parties
- Sessions are stored in the `sessions/` folder
- You can delete all data by removing local files
================================================================================
### Third-Party Services:
- Google Trends (for search queries)
- Bing Search (for automation)
- Discord/NTFY (optional, for notifications)
### Your Responsibility:
- Protect your `accounts.json` file
- Use strong passwords
- Enable 2FA where possible
- Don't share your configuration publicly
---
## 🌍 Geographic Restrictions
Microsoft Rewards availability and terms vary by region:
- Available in select countries only
- Region-specific earning rates
- Local laws may apply
- Check your local regulations
**By using this software, you confirm:**
1. Microsoft Rewards is available in your region
2. You understand the risks of automation
3. You accept full responsibility for your actions
4. You will not use this for commercial purposes
---
## 📞 Contact & Reporting
**Questions about licensing?**
Open an issue at: https://github.com/LightZirconite/Microsoft-Rewards-Rewi/issues
**Found a security issue?**
See: SECURITY.md
**General discussion?**
Join Discord: https://discord.gg/kn3695Kx32
---
**Last Updated:** October 2025
**Applies to:** Microsoft Rewards Script V2.1.5 and later
**BY USING THIS SOFTWARE, YOU ACKNOWLEDGE THAT YOU HAVE READ AND UNDERSTOOD THESE NOTICES.**
For issues, questions, or contributions:
https://github.com/Light60-1/Microsoft-Rewards-Bot

480
README.md
View File

@@ -1,353 +1,247 @@
# Microsoft-Rewards-Rewi
<div align="center">
[![Discord](https://img.shields.io/badge/💬_Join_Discord-7289DA?style=for-the-badge&logo=discord)](https://discord.gg/kn3695Kx32)
[![GitHub](https://img.shields.io/badge/⭐_Star_Project-yellow?style=for-the-badge&logo=github)](https://github.com/LightZirconite/Microsoft-Rewards-Rewi)
<img src="assets/logo.png" alt="Microsoft Rewards Bot Logo" width="200"/>
# Microsoft Rewards Bot
**Automate your Microsoft Rewards points collection effortlessly**
[![Discord](https://img.shields.io/badge/💬_Join_Discord-7289DA?style=for-the-badge&logo=discord)](https://discord.gg/h6Z69ZPPCz)
[![GitHub](https://img.shields.io/badge/⭐_Star_Project-yellow?style=for-the-badge&logo=github)](https://github.com/Light60-1/Microsoft-Rewards-Bot)
[![Version](https://img.shields.io/badge/version-2.51.0-blue?style=for-the-badge)](https://github.com/Light60-1/Microsoft-Rewards-Bot/releases)
[![License](https://img.shields.io/badge/license-CC_BY--NC--SA_4.0-green?style=for-the-badge)](LICENSE)
</div>
---
# 🚀 Quick Setup (Recommended)
## About
**Easiest way to get started — download and run:**
This TypeScript-based automation bot helps you maximize your **Microsoft Rewards** points by automatically completing daily tasks, searches, quizzes, and promotional offers. Designed with sophisticated anti-detection measures and human-like behavior patterns to ensure safe, reliable operation.
### ✨ Key Features
- <20> **Automated Searches** — Desktop and mobile Bing searches with natural patterns
- 📅 **Daily Activities** — Quizzes, polls, daily sets, and punch cards
- 🤖 **Human-like Behavior** — Advanced humanization system to avoid detection
- 🛡️ **Risk Management** — Built-in ban detection and prediction with ML algorithms
- 📊 **Analytics Dashboard** — Track performance and points collection over time
-**Smart Scheduling** — Built-in scheduler with timezone support
- 🔔 **Notifications** — Discord webhooks and NTFY push alerts
- 🐳 **Docker Support** — Easy containerized deployment
- 🔐 **Multi-Account** — Manage multiple accounts with parallel execution
- 🌐 **Proxy Support** — Optional proxy configuration for enhanced privacy
---
## 🚀 Quick Start
### Prerequisites
- **Node.js 20+** (version 22 recommended) — [Download here](https://nodejs.org/)
- **Git** for cloning the repository
- **Microsoft account(s)** with email and password
### Installation
**The automated setup script handles everything for you:**
1. **Clone the repository:**
```bash
git clone https://github.com/LightZirconite/Microsoft-Rewards-Rewi.git
cd Microsoft-Rewards-Rewi
git clone https://github.com/Light60-1/Microsoft-Rewards-Bot.git
cd Microsoft-Rewards-Bot
```
2. **Run the setup script:**
* **Windows:** double-click `setup/setup.bat` or run it from a command prompt
* **Linux / macOS / WSL:**
- **Windows:** Double-click `setup/setup.bat` or run in PowerShell:
```powershell
.\setup\setup.bat
```
- **Linux / macOS / WSL:**
```bash
bash setup/setup.sh
```
* **Alternative (any platform):**
- **Or use npm:**
```bash
npm run setup
```
3. **Follow the setup prompts.** The script will:
* Rename `accounts.example.jsonc` → `accounts.jsonc`
* Ask for Microsoft account credentials
* Remind you to review `config.jsonc`
* Install dependencies (`npm install`)
* Build the project (`npm run build`)
* Optionally start the script
3. **The setup wizard will:**
- ✅ Create and configure `accounts.jsonc` with your credentials
- ✅ Install all dependencies automatically
- ✅ Build the TypeScript project
- ✅ Optionally start the script immediately
**That's it — the setup script handles the rest.**
**That's it! You're ready to start earning points.** 🎉
---
# ⚙️ Advanced Setup Options
## 📚 Documentation
### Nix Users
For detailed configuration, advanced features, and troubleshooting, visit our comprehensive documentation:
1. Install Nix from [https://nixos.org/](https://nixos.org/)
2. Run:
```bash
./run.sh
```
**👉 [Complete Documentation](docs/index.md)**
### Manual Setup (if setup script fails)
### Quick Links
1. Copy `src/accounts.example.jsonc` → `src/accounts.jsonc` and add your accounts.
2. Edit `src/config.jsonc` as needed.
3. Install dependencies:
```bash
npm install
```
4. Build:
```bash
npm run build
```
5. Start:
```bash
npm run start
```
| Topic | Description |
|-------|-------------|
| **[Getting Started](docs/getting-started.md)** | Detailed installation and first-run guide |
| **[Configuration](docs/config.md)** | Complete configuration options reference |
| **[Accounts & 2FA](docs/accounts.md)** | Setting up accounts with TOTP authentication |
| **[Scheduling](docs/schedule.md)** | Automated daily execution setup |
| **[Docker Deployment](docs/docker.md)** | Running in containers |
| **[Humanization](docs/humanization.md)** | Anti-detection and natural behavior |
| **[Notifications](docs/conclusionwebhook.md)** | Discord webhooks and NTFY setup |
| **[Proxy Setup](docs/proxy.md)** | Configuring proxies for privacy |
| **[Diagnostics](docs/diagnostics.md)** | Troubleshooting and debugging |
---
# 🐳 Docker Setup (Experimental)
## <20> Docker Quick Start
**Before starting:**
For containerized deployment with automatic scheduling:
* Remove local `/node_modules` and `/dist` if you previously built.
* Remove old Docker volumes when upgrading from older versions.
* You can reuse older `accounts.jsonc`.
```bash
# Ensure accounts.jsonc exists in src/
docker compose up -d
**Quick Docker (recommended for scheduling):**
1. Clone the repository and configure `accounts.jsonc` (or rename from `accounts.example.jsonc`).
2. Ensure `config.jsonc` has `"headless": true` in browser settings.
3. Edit `compose.yaml`:
* Set `TZ` (timezone)
* **Choose scheduling mode:**
* **Option A (default):** Built-in scheduler — configure `schedule` in `config.jsonc`
* **Option B (cron):** Uncomment `USE_CRON: "true"` and set `CRON_SCHEDULE`
* Optional: `RUN_ON_START=true` (runs once immediately on container start)
4. Start:
```bash
docker compose up -d
```
5. Monitor:
```bash
docker logs -f microsoft-rewards-script
```
### Scheduling Options
**Built-in Scheduler (Default):**
```yaml
# In docker-compose.yml - no cron variables needed
environment:
TZ: "Europe/Paris"
# View logs
docker logs -f microsoft-rewards-script
```
**📖 [Full Docker Guide](docs/docker.md)**
---
## ⚙️ Configuration Highlights
The script works great with default settings, but you can customize everything in `src/config.jsonc`:
```jsonc
// In config.jsonc
{
"humanization": {
"enabled": true, // Enable natural behavior patterns
"stopOnBan": true // Stop on ban detection
},
"schedule": {
"enabled": true,
"time24": "09:00",
"timeZone": "Europe/Paris"
"enabled": true, // Built-in scheduler
"time24": "09:00", // Daily run time
"timeZone": "Europe/Paris" // Your timezone
},
"workers": {
"doDesktopSearch": true, // Desktop Bing searches
"doMobileSearch": true, // Mobile Bing searches
"doDailySet": true, // Daily tasks and quizzes
"doMorePromotions": true, // Promotional offers
"doPunchCards": true // Multi-day challenges
},
"execution": {
"clusters": 1, // Parallel account processing
"runOnZeroPoints": false // Skip when no points available
}
}
```
**Native Cron (Traditional):**
```yaml
# In docker-compose.yml
environment:
TZ: "Europe/Paris"
USE_CRON: "true"
CRON_SCHEDULE: "0 9,16,21 * * *" # 9 AM, 4 PM, 9 PM
RUN_ON_START: "true"
```
Use [crontab.guru](https://crontab.guru) for cron syntax help.
**See [Docker Documentation](docs/docker.md) for detailed setup and troubleshooting.**
**📖 [Complete Configuration Guide](docs/config.md)**
---
# 📋 Usage Notes
## 🎯 What Gets Automated
* **Headless=false cleanup:** If you stop the script without closing browser windows, use Task Manager or run `npm run kill-chrome-win` (Windows) to close leftover instances.
* **Scheduling advice:** Run at least once or twice daily. Use `"runOnZeroPoints": false` in config to skip runs when no points are available.
* **Multiple accounts:** Use `clusters` in `config.jsonc` to run accounts in parallel.
* **Built-in scheduler:** Enable `schedule.enabled` in `config.jsonc` to run automatically without external cron jobs.
The script automatically completes:
- ✅ **Desktop Searches** — 30+ searches on Bing (desktop user-agent)
- ✅ **Mobile Searches** — 20+ searches on Bing (mobile user-agent)
- ✅ **Daily Set** — Quizzes, polls, and daily activities
- ✅ **More Activities** — Promotional tasks and special offers
- ✅ **Punch Cards** — Multi-day challenges and bonus tasks
- ✅ **Daily Check-in** — Simple check-in for bonus points
- ✅ **Read to Earn** — Article reading tasks
All while maintaining **natural behavior patterns** to minimize detection risk.
---
# ⚙️ Configuration Reference
## 💡 Usage Tips
Edit `src/config.jsonc` to customize behavior. See the [full configuration documentation](docs/config.md) for detailed explanations.
<details>
<summary><b>Core Settings</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `baseURL` | Microsoft Rewards URL | `https://rewards.bing.com` |
| `sessionPath` | Session/fingerprint storage | `sessions` |
| `browser.headless` | Run browser in background | `false` |
| `browser.globalTimeout` | Max timeout for operations | `30s` |
| `execution.parallel` | Run mobile/desktop tasks at once | `false` |
| `execution.runOnZeroPoints` | Run when no points available | `false` |
| `execution.clusters` | Concurrent account instances | `1` |
| `execution.passesPerRun` | How many times to process each account | `3` |
</details>
<details>
<summary><b>Fingerprint Settings</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `fingerprinting.saveFingerprint.mobile` | Reuse mobile fingerprint | `true` |
| `fingerprinting.saveFingerprint.desktop` | Reuse desktop fingerprint | `true` |
</details>
<details>
<summary><b>Task Settings</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `workers.doDailySet` | Complete daily set | `true` |
| `workers.doMorePromotions` | Complete promotional offers | `true` |
| `workers.doPunchCards` | Complete punchcard tasks | `true` |
| `workers.doDesktopSearch` | Perform desktop searches | `true` |
| `workers.doMobileSearch` | Perform mobile searches | `true` |
| `workers.doDailyCheckIn` | Complete daily check-in | `true` |
| `workers.doReadToEarn` | Complete read-to-earn tasks | `true` |
| `workers.bundleDailySetWithSearch` | Run desktop searches after Daily Set | `true` |
</details>
<details>
<summary><b>Search Settings</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `search.useLocalQueries` | Use locale-specific query sources | `true` |
| `search.settings.useGeoLocaleQueries` | Use region-specific queries | `true` |
| `search.settings.scrollRandomResults` | Random scrolling on results | `true` |
| `search.settings.clickRandomResults` | Random link clicks | `true` |
| `search.settings.retryMobileSearchAmount` | Mobile retry attempts | `2` |
| `search.settings.delay.min` | Minimum delay between searches | `1min` |
| `search.settings.delay.max` | Maximum delay between searches | `5min` |
</details>
<details>
<summary><b>Query Diversity Engine</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `queryDiversity.enabled` | Multi-source query generation | `true` |
| `queryDiversity.sources` | Available query sources | `["google-trends", "reddit", "local-fallback"]` |
| `queryDiversity.maxQueriesPerSource` | Max queries per source | `10` |
| `queryDiversity.cacheMinutes` | Cache duration in minutes | `30` |
</details>
<details>
<summary><b>Humanization & Natural Behavior</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `humanization.enabled` | Enable human-like behavior patterns | `true` |
| `humanization.stopOnBan` | Stop processing accounts on ban detection | `true` |
| `humanization.immediateBanAlert` | Send immediate alert on ban | `true` |
| `humanization.actionDelay.min` | Minimum action delay (ms) | `500` |
| `humanization.actionDelay.max` | Maximum action delay (ms) | `2200` |
| `humanization.gestureMoveProb` | Mouse gesture probability | `0.65` |
| `humanization.gestureScrollProb` | Scroll gesture probability | `0.4` |
| `vacation.enabled` | Monthly vacation mode | `true` |
| `vacation.minDays` | Minimum vacation days per month | `2` |
| `vacation.maxDays` | Maximum vacation days per month | `4` |
</details>
<details>
<summary><b>Risk Management & Security</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `riskManagement.enabled` | Dynamic delay adjustment | `true` |
| `riskManagement.autoAdjustDelays` | Auto-adjust delays on risk detection | `true` |
| `riskManagement.stopOnCritical` | Stop on critical risk level | `false` |
| `riskManagement.banPrediction` | ML-based ban prediction | `true` |
| `riskManagement.riskThreshold` | Risk threshold (0-100) | `75` |
</details>
<details>
<summary><b>Scheduling (Built-in)</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `schedule.enabled` | Enable built-in scheduler | `false` |
| `schedule.useAmPm` | Use 12-hour time format | `false` |
| `schedule.time12` | Time in 12-hour format | `9:00 AM` |
| `schedule.time24` | Time in 24-hour format | `09:00` |
| `schedule.timeZone` | IANA timezone | `Europe/Paris` |
| `schedule.runImmediatelyOnStart` | Run on process start | `false` |
</details>
<details>
<summary><b>Job State Management</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `jobState.enabled` | Save state to avoid duplicate work | `true` |
| `jobState.dir` | Custom state directory | `""` |
</details>
<details>
<summary><b>Proxy Settings</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `proxy.proxyGoogleTrends` | Proxy Google Trends requests | `true` |
| `proxy.proxyBingTerms` | Proxy Bing Terms requests | `true` |
</details>
<details>
<summary><b>Notification Settings</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `webhook.enabled` | Enable Discord webhook | `false` |
| `webhook.url` | Discord webhook URL | `""` |
| `conclusionWebhook.enabled` | Summary-only webhook | `false` |
| `conclusionWebhook.url` | Summary webhook URL | `""` |
| `ntfy.enabled` | Enable NTFY notifications | `false` |
| `ntfy.url` | NTFY server URL | `""` |
| `ntfy.topic` | NTFY topic | `rewards` |
| `ntfy.authToken` | NTFY auth token | `""` |
</details>
<details>
<summary><b>Logging & Diagnostics</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `logging.excludeFunc` | Exclude log categories | `["SEARCH-CLOSE-TABS", "LOGIN-NO-PROMPT", "FLOW"]` |
| `logging.webhookExcludeFunc` | Exclude from webhook logs | `["SEARCH-CLOSE-TABS", "LOGIN-NO-PROMPT", "FLOW"]` |
| `logging.redactEmails` | Redact email addresses in logs | `true` |
| `diagnostics.enabled` | Capture diagnostic data | `true` |
| `diagnostics.saveScreenshot` | Save screenshots on failure | `true` |
| `diagnostics.saveHtml` | Save HTML on failure | `true` |
| `diagnostics.maxPerRun` | Max diagnostics per run | `2` |
| `diagnostics.retentionDays` | Days to keep diagnostics | `7` |
</details>
<details>
<summary><b>Analytics</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `analytics.enabled` | Performance dashboard tracking | `true` |
| `analytics.retentionDays` | Data retention period | `30` |
| `analytics.exportMarkdown` | Generate markdown reports | `true` |
| `analytics.webhookSummary` | Send analytics via webhook | `true` |
</details>
<details>
<summary><b>Update Settings</b></summary>
| Setting | Description | Default |
| ------- | ----------- | ------- |
| `update.git` | Enable git auto-update | `true` |
| `update.docker` | Enable docker auto-update | `false` |
| `update.scriptPath` | Custom updater script path | `setup/update/update.mjs` |
| `update.autoUpdateConfig` | Auto-merge config changes | `true` |
| `update.autoUpdateAccounts` | Auto-merge account changes | `true` |
</details>
- **Run regularly:** Set up the built-in scheduler for daily automation
- **Use humanization:** Always keep `humanization.enabled: true` for safety
- **Monitor logs:** Check for ban warnings and adjust settings if needed
- **Multiple accounts:** Use the `clusters` setting to run accounts in parallel
- **Start small:** Test with one account before scaling up
- **Review diagnostics:** Enable screenshot/HTML capture for troubleshooting
---
# 📚 Documentation
## 🆘 Getting Help
For detailed information about configuration, features, and advanced usage, please refer to the documentation in the `docs/` folder. Start with `docs/index.md` for an overview and navigation to specific topics.
- 💬 **[Join our Discord](https://discord.gg/h6Z69ZPPCz)** — Community support and updates
- 📖 **[Documentation Hub](docs/index.md)** — Complete guides and references
- 🐛 **[Report Issues](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues)** — Bug reports and feature requests
- 📧 **[Diagnostics Guide](docs/diagnostics.md)** — Troubleshooting steps
---
# ⚠️ Disclaimer
## ⚠️ Disclaimer
**Use at your own risk.** Automation may violate Microsoft's Terms of Service and can result in suspension or permanent banning of your Microsoft Rewards account. This project is provided **for educational purposes only**. The developer is **not responsible** for any actions taken by Microsoft against your account.
**Use at your own risk.** This script automates interactions with Microsoft Rewards, which may violate [Microsoft's Terms of Service](https://www.microsoft.com/en-us/servicesagreement/). Using automation tools can result in:
- ⚠️ Account suspension or permanent ban
- 🚫 Loss of accumulated points and rewards
- 🔒 Restriction from future participation
**This project is provided for educational and research purposes only.** The developers and contributors:
- Are **not responsible** for any actions taken by Microsoft against your account
- Do **not encourage** violating terms of service
- Provide **no guarantees** regarding account safety
**Use responsibly and at your own discretion.**
---
# 📄 License
## 📄 License
This project is licensed under a **PROPRIETARY** license. See [LICENSE](LICENSE) for details.
This project is licensed under the **Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License**.
**You may:**
- ✅ Use for personal, non-commercial purposes
- ✅ Modify the code for your own use
- ✅ Share with others (with same restrictions)
- ✅ Submit improvements via pull requests
**You may NOT:**
- ❌ Use for commercial purposes
- ❌ Sell or monetize this software
- ❌ Remove license/copyright notices
See [LICENSE](LICENSE) for complete terms.
---
## 🙏 Acknowledgments
- Built with [Playwright](https://playwright.dev/) and [ReBrowser](https://github.com/rebrowser/rebrowser-playwright)
- Thanks to all [contributors](https://github.com/Light60-1/Microsoft-Rewards-Bot/graphs/contributors)
- Community support via [Discord](https://discord.gg/h6Z69ZPPCz)
---
## 🌟 Support the Project
If you find this project helpful:
-**Star the repository** on GitHub
- 💬 **Join our Discord** community
- 🐛 **Report bugs** and suggest features
- 📖 **Contribute** to documentation
---
<div align="center">
**Made with ❤️ by the community**
[Documentation](docs/index.md) • [Discord](https://discord.gg/h6Z69ZPPCz) • [Issues](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues)
</div>

View File

@@ -352,8 +352,8 @@ Security contributors will be credited in the changelog (with permission).— St
## 📞 Contact
- **Security issues:** Open a GitHub issue with "Security" label
- **General support:** [Discord community](https://discord.gg/kn3695Kx32)
- **Bug reports:** [GitHub Issues](https://github.com/LightZirconite/Microsoft-Rewards-Rewi/issues)
- **General support:** [Discord community](https://discord.gg/h6Z69ZPPCz)
- **Bug reports:** [GitHub Issues](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues)
---

82
assets/README.md Normal file
View File

@@ -0,0 +1,82 @@
# 🎨 Assets Directory
This folder contains visual assets for the Microsoft Rewards Script project.
## 📁 Contents
### `logo.png`
**The official project mascot and logo**
- **Dimensions:** Original size preserved
- **Format:** PNG with transparency
- **Usage:**
- README.md header (200px width)
- Documentation pages (120-150px width)
- Social media and promotional materials
## 📐 Logo Usage Guidelines
### Recommended Sizes
| Context | Recommended Width | Example |
|---------|------------------|---------|
| Main README | 200px | `<img src="assets/logo.png" width="200"/>` |
| Documentation pages | 120-150px | `<img src="../assets/logo.png" width="120"/>` |
| GitHub social preview | 1200x630px | Resize as needed |
| Favicon | 32x32px or 64x64px | Convert to ICO format |
### Usage Examples
**In README.md (root):**
```markdown
<div align="center">
<img src="assets/logo.png" alt="Microsoft Rewards Script Logo" width="200"/>
</div>
```
**In docs/*.md files:**
```markdown
<div align="center">
<img src="../assets/logo.png" alt="Microsoft Rewards Script Logo" width="120"/>
</div>
```
**In HTML:**
```html
<img src="assets/logo.png" alt="Microsoft Rewards Script Logo" style="width: 200px; display: block; margin: 0 auto;">
```
## 🎨 Design Notes
The logo represents the project's mascot and serves as the visual identity for:
- Documentation headers
- Community presence (Discord, etc.)
- Project branding
- Social media
## 📝 Attribution
Logo created for the Microsoft Rewards Script project.
## 🔒 Usage Rights
This logo is part of the Microsoft Rewards Script project and follows the same [LICENSE](../LICENSE) as the project code.
---
## 🖼️ Future Assets
This directory may be expanded to include:
- Screenshots for documentation
- Diagrams and flowcharts
- Favicon files
- Social media banners
- Tutorial images
---
<div align="center">
**[← Back to README](../README.md)**
</div>

BIN
assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 683 KiB

325
docs/FAQ.md Normal file
View File

@@ -0,0 +1,325 @@
# ❓ Frequently Asked Questions (FAQ)
<div align="center">
**Quick answers to common questions**
[📚 Back to Documentation Hub](index.md)
</div>
---
## 📋 Table of Contents
- [General Questions](#general-questions)
- [Installation & Setup](#installation--setup)
- [Configuration](#configuration)
- [Troubleshooting](#troubleshooting)
- [Safety & Security](#safety--security)
- [Features & Functionality](#features--functionality)
---
## General Questions
### What is this project?
This is an automated script that completes Microsoft Rewards tasks to earn points. It uses Playwright to control a browser and perform searches, quizzes, and other activities automatically.
### Is this legal?
The script itself is legal software. However, using automation tools may violate Microsoft's Terms of Service, which could result in account suspension or ban. **Use at your own risk.**
### Will I get banned?
There's always a risk when using automation. The script includes humanization features and anti-detection measures to reduce risk, but we cannot guarantee account safety. Many users have used it successfully for extended periods, but results vary.
### How many points can I earn per day?
Typically 150-300 points per day per account, depending on available activities and your region. This varies by country and account type.
### How long does a run take?
Usually 5-15 minutes per account, depending on:
- Number of searches required
- Available daily activities
- Humanization delay settings
- Internet speed
---
## Installation & Setup
### What are the system requirements?
- **Node.js 20+** (version 22 recommended)
- **2 GB RAM minimum** (4 GB recommended)
- **Windows, macOS, or Linux**
- **Stable internet connection**
### Do I need to install a browser?
No! Playwright downloads Chromium automatically during setup. You don't need Chrome or Edge installed.
### Can I use this on a Raspberry Pi?
Yes, but performance may be limited. Headless mode is recommended for resource-constrained devices.
### How do I update to the latest version?
```bash
# Using Git
git pull origin main
npm install
npm run build
# Or run the update script
npm run setup
```
### Can I run this on a server 24/7?
Yes! Use Docker with the built-in scheduler for unattended operation. See the [Docker Guide](docker.md).
---
## Configuration
### Where do I put my Microsoft credentials?
In `src/accounts.jsonc`. Copy `src/accounts.example.jsonc` as a template.
⚠️ **Never commit this file to Git!** It should be in `.gitignore`.
### Do I need to enable 2FA/TOTP?
Not required, but **highly recommended** for:
- Automated login without manual code entry
- Better security
- 24/7 scheduler compatibility
See the [Accounts & 2FA Guide](accounts.md).
### How do I schedule automatic runs?
Enable the built-in scheduler in `src/config.jsonc`:
```jsonc
{
"schedule": {
"enabled": true,
"time24": "09:00",
"timeZone": "America/New_York"
}
}
```
Then run: `npm run start:schedule`
See the [Scheduling Guide](schedule.md).
### Can I run multiple accounts?
Yes! Add multiple entries to `accounts.jsonc` and adjust the `clusters` setting:
```jsonc
{
"execution": {
"clusters": 2 // Run 2 accounts in parallel
}
}
```
### Should I use headless mode?
- **Headless (`true`):** Background operation, required for Docker, lower resource usage
- **Non-headless (`false`):** See what the bot is doing, easier debugging
For production/automated runs, use headless mode.
---
## Troubleshooting
### The script won't start
1. **Check Node.js version:** `node --version` (must be 20+)
2. **Rebuild:** `npm run build`
3. **Check accounts.jsonc:** Valid JSON format?
4. **Review logs:** Look for error messages
### Login fails constantly
- **Wrong credentials:** Double-check email/password
- **2FA issues:** Verify TOTP secret is correct
- **Account locked:** Check Microsoft account security page
- **Recovery email mismatch:** Ensure recovery email matches account settings
See [Accounts Troubleshooting](accounts.md#troubleshooting).
### No points are earned
- **Already completed:** Tasks may be done for the day
- **Region restrictions:** Some activities vary by country
- **Account level:** New accounts may have limited activities
- **Ban/suspension:** Check account status on Microsoft Rewards
### Browser crashes or freezes
- **Increase timeout:** Adjust `browser.globalTimeout` in config
- **Reduce load:** Lower `clusters` value
- **Update dependencies:** `npm install`
- **Check system resources:** Ensure adequate RAM
### Docker container exits immediately
1. **Check logs:** `docker logs microsoft-rewards-script`
2. **Verify mounts:** Ensure `accounts.jsonc` exists and is mounted
3. **Check config:** `headless` must be `true` for Docker
4. **Review environment variables:** Timezone, cron settings
See [Docker Troubleshooting](docker.md#troubleshooting).
### "Command not found" errors
Ensure you're in the project directory and have run `npm install`.
---
## Safety & Security
### How can I minimize ban risk?
1. **Enable humanization:** Keep `humanization.enabled: true`
2. **Use reasonable delays:** Don't make searches too fast
3. **Run consistently:** Daily runs at similar times
4. **Start with one account:** Test before scaling
5. **Monitor for warnings:** Check logs regularly
6. **Use vacation mode:** Enable random off-days
See [Humanization Guide](humanization.md).
### Is my data safe?
- **No telemetry:** The script doesn't send data anywhere except Microsoft
- **Local storage:** Credentials stay on your machine
- **Open source:** You can audit the code
See [Security Policy](../SECURITY.md).
### Can Microsoft detect this?
The script uses advanced anti-detection techniques:
- Browser fingerprinting management
- Human-like mouse movements and delays
- Natural search patterns
- Randomized timing
However, **no detection evasion is foolproof**. Always use at your own risk.
### Should I use a proxy?
Not required for most users. Consider a proxy if:
- Running many accounts from one IP
- Want extra privacy layer
- Your IP is rate-limited
See [Proxy Guide](proxy.md).
---
## Features & Functionality
### What tasks does the script complete?
- ✅ Desktop searches (30+)
- ✅ Mobile searches (20+)
- ✅ Daily set activities (quizzes, polls)
- ✅ More activities (promotional offers)
- ✅ Punch cards (multi-day challenges)
- ✅ Daily check-in
- ✅ Read to Earn articles
Configure in `config.jsonc` under `workers`.
### Can I disable specific activities?
Yes! In `config.jsonc`:
```jsonc
{
"workers": {
"doDesktopSearch": true,
"doMobileSearch": false, // Disable mobile searches
"doDailySet": true,
"doMorePromotions": false // Disable promotions
}
}
```
### How does the query generation work?
The script uses multiple sources for search queries:
- **Google Trends:** Current trending topics
- **Reddit:** Popular posts from various subreddits
- **Local fallback:** Pre-defined queries
This creates diverse, natural-looking search patterns.
See [Query Diversity Engine](config.md#query-diversity-engine).
### What is "Buy Mode"?
A manual purchase assistant that monitors your points in real-time while you redeem rewards. Not fully automated—you control the redemption.
See [Buy Mode Guide](buy-mode.md).
### Can I get notifications?
Yes! The script supports:
- **Discord Webhooks:** Summary messages in Discord
- **NTFY:** Push notifications to mobile
See [Notifications Guide](conclusionwebhook.md) and [NTFY Guide](ntfy.md).
### What are "clusters"?
Clusters allow running multiple accounts in parallel using separate processes. Higher values = more accounts simultaneously (but more resource usage).
```jsonc
{
"execution": {
"clusters": 3 // Run 3 accounts at once
}
}
```
### How does the risk management system work?
The script includes:
- **Ban detection:** Monitors for suspension indicators
- **Risk prediction:** ML-based ban probability scoring
- **Adaptive delays:** Automatically adjusts timing based on risk
- **Emergency stop:** Halts execution on critical risk
See [Configuration Guide](config.md#risk-management--security).
---
## Still Have Questions?
- 💬 **[Join our Discord](https://discord.gg/h6Z69ZPPCz)** — Ask the community
- 📖 **[Documentation Hub](index.md)** — Browse all guides
- 🐛 **[GitHub Issues](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues)** — Report problems
- 📧 **[Diagnostics Guide](diagnostics.md)** — Debug issues
---
<div align="center">
**Didn't find your answer?** [Ask on Discord](https://discord.gg/h6Z69ZPPCz) or [open an issue](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues)!
[← Back to Documentation](index.md)
</div>

103
docs/README.md Normal file
View File

@@ -0,0 +1,103 @@
# 📚 Documentation Directory
This folder contains comprehensive documentation for the Microsoft Rewards Script project.
## 📋 Documentation Structure
### 🚀 Getting Started
- **[index.md](index.md)** — Documentation hub and navigation
- **[getting-started.md](getting-started.md)** — Complete setup guide for beginners
- **[FAQ.md](FAQ.md)** — Frequently asked questions
### ⚙️ Configuration
- **[config.md](config.md)** — Complete configuration reference
- **[accounts.md](accounts.md)** — Account setup and 2FA/TOTP configuration
- **[schedule.md](schedule.md)** — Automated scheduling setup
### 🔧 Features
- **[humanization.md](humanization.md)** — Anti-detection and natural behavior
- **[jobstate.md](jobstate.md)** — Job state management
- **[buy-mode.md](buy-mode.md)** — Manual purchase monitoring
### 🔔 Integrations
- **[conclusionwebhook.md](conclusionwebhook.md)** — Discord webhook setup
- **[ntfy.md](ntfy.md)** — NTFY push notification setup
- **[proxy.md](proxy.md)** — Proxy configuration
### 🐳 Deployment
- **[docker.md](docker.md)** — Docker deployment guide
- **[update.md](update.md)** — Update and upgrade guide
### 🛠️ Maintenance
- **[diagnostics.md](diagnostics.md)** — Troubleshooting and debugging
- **[security.md](security.md)** — Security and privacy guidelines
- **[git-conflict-resolution.md](git-conflict-resolution.md)** — Resolving Git conflicts
## 🎯 Quick Navigation by Use Case
### "I just installed the script"
1. [Getting Started](getting-started.md)
2. [Accounts Setup](accounts.md)
3. [Basic Configuration](config.md#quick-start)
### "I want automated daily runs"
1. [Scheduling](schedule.md)
2. [Docker Deployment](docker.md) (optional)
3. [Humanization](humanization.md)
### "I need notifications"
- [Discord Webhooks](conclusionwebhook.md)
- [NTFY Push Alerts](ntfy.md)
### "Something's not working"
1. [FAQ](FAQ.md)
2. [Diagnostics](diagnostics.md)
3. [Security Guide](security.md) (if banned)
## 📝 Documentation Standards
All documentation in this project follows these principles:
- **Clear and concise** — No unnecessary jargon
- **Example-driven** — Code samples for every feature
- **Up-to-date** — Reflects current functionality
- **Well-structured** — Easy navigation with TOC
- **Beginner-friendly** — Assumes minimal technical knowledge
## 🤝 Contributing to Documentation
Documentation improvements are always welcome! See [CONTRIBUTING.md](../CONTRIBUTING.md) for guidelines.
### How to Help
- Fix typos or unclear instructions
- Add missing examples
- Improve explanations
- Translate to other languages
- Update outdated information
## 📖 Documentation Format
All docs use **Markdown** format with:
- Clear hierarchical headings
- Code blocks with syntax highlighting
- Tables for configuration options
- Emojis for visual navigation
- Internal links for cross-references
## 🔗 External Resources
- **[Main README](../README.md)** — Project overview
- **[Contributing Guide](../CONTRIBUTING.md)** — How to contribute
- **[Security Policy](../SECURITY.md)** — Security and privacy
- **[Changelog](../CHANGELOG.md)** — Version history
---
<div align="center">
**[Start Reading →](index.md)**
Need help? [Join our Discord](https://discord.gg/h6Z69ZPPCz)
</div>

View File

@@ -1,7 +1,9 @@
# 🚀 Getting Started
<div align="center">
<img src="../assets/logo.png" alt="Microsoft Rewards Script Logo" width="120"/>
# 🚀 Getting Started
**🎯 From zero to earning Microsoft Rewards points in minutes**
*Complete setup guide for beginners*
@@ -123,7 +125,7 @@ Once running, explore these guides:
**Login issues?** → [Accounts & 2FA Setup](./accounts.md)
**Want Docker?** → [Container Guide](./docker.md)
**Found a bug?** [Report it here](https://github.com/TheNetsky/Microsoft-Rewards-Script/issues)
**Found a bug?** [Report it here](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues)
**Need support?** [Join our Discord](https://discord.gg/KRBFxxsU)
---

View File

@@ -167,9 +167,9 @@ cp src/accounts.json ~/backup-accounts.json
# Nuclear option: fresh clone
cd ..
rm -rf Microsoft-Rewards-Rewi
git clone https://github.com/Light60-1/Microsoft-Rewards-Rewi.git
cd Microsoft-Rewards-Rewi
rm -rf Microsoft-Rewards-Bot
git clone https://github.com/Light60-1/Microsoft-Rewards-Bot.git
cd Microsoft-Rewards-Bot
# Restore your files
cp ~/backup-config.jsonc src/config.jsonc

View File

@@ -1,7 +1,15 @@
<div align="center">
<img src="../assets/logo.png" alt="Microsoft Rewards Script Logo" width="150"/>
# 📚 Documentation Hub
**Complete guide to automate Microsoft Rewards**
[← Back to README](../README.md)
</div>
---
## 🚀 Start Here (In Order)
@@ -34,6 +42,9 @@
## 📖 All Documentation
### Quick References
- [❓ FAQ (Frequently Asked Questions)](./FAQ.md) — Quick answers to common questions
### Configuration & Setup
- [Complete Configuration Reference](./config.md) — All options explained
- [Scheduler Setup](./schedule.md) — Automated timing
@@ -50,9 +61,10 @@
**Technical issue?** → [Diagnostics Guide](./diagnostics.md)
**Login problem?** → [Accounts & 2FA](./accounts.md#troubleshooting)
**Banned?** → [Security Guide](./security.md)
**Banned?** → [Security Guide](./security.md)
**Want to contribute?** → [Contributing Guide](../CONTRIBUTING.md)
**Join Discord** → [Support Server](https://discord.gg/kn3695Kx32)
**Join Discord** → [Support Server](https://discord.gg/h6Z69ZPPCz)
---

12
package-lock.json generated
View File

@@ -1,13 +1,13 @@
{
"name": "microsoft-rewards-rewi",
"version": "2.50.5",
"name": "microsoft-rewards-script",
"version": "2.51.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "microsoft-rewards-rewi",
"version": "2.50.3",
"license": "PROPRIETARY",
"name": "microsoft-rewards-script",
"version": "2.51.0",
"license": "SEE LICENSE IN LICENSE",
"dependencies": {
"axios": "^1.8.4",
"chalk": "^4.1.2",
@@ -38,7 +38,7 @@
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Light60-1"
"url": "https://github.com/sponsors/TheNetsky"
}
},
"node_modules/@cspotcode/source-map-support": {

View File

@@ -1,6 +1,6 @@
{
"name": "microsoft-rewards-rewi",
"version": "2.50.5",
"name": "microsoft-rewards-script",
"version": "2.51.0",
"description": "Automatically do tasks for Microsoft Rewards but in TS!",
"private": true,
"main": "index.js",
@@ -9,12 +9,12 @@
},
"repository": {
"type": "git",
"url": "https://github.com/Light60-1/Microsoft-Rewards-Rewi.git"
"url": "https://github.com/Light60-1/Microsoft-Rewards-Bot.git"
},
"bugs": {
"url": "https://github.com/Light60-1/Microsoft-Rewards-Rewi/issues"
"url": "https://github.com/Light60-1/Microsoft-Rewards-Bot/issues"
},
"homepage": "https://github.com/Light60-1/Microsoft-Rewards-Rewi#readme",
"homepage": "https://github.com/Light60-1/Microsoft-Rewards-Bot#readme",
"scripts": {
"clean": "rimraf dist",
"pre-build": "npm i && npm run clean && node -e \"process.exit(process.env.SKIP_PLAYWRIGHT_INSTALL?0:1)\" || npx playwright install chromium",
@@ -29,7 +29,7 @@
"prepare": "npm run build",
"setup": "node ./setup/update/setup.mjs",
"kill-chrome-win": "powershell -Command \"Get-Process | Where-Object { $_.MainModule.FileVersionInfo.FileDescription -eq 'Google Chrome for Testing' } | ForEach-Object { Stop-Process -Id $_.Id -Force }\"",
"create-docker": "docker build -t microsoft-rewards-rewi-docker ."
"create-docker": "docker build -t microsoft-rewards-script-docker ."
},
"keywords": [
"Bing Rewards",
@@ -42,9 +42,9 @@
],
"author": "Light60-1",
"contributors": [
"Microsoft-Rewards-Rewi (https://github.com/Light60-1/Microsoft-Rewards-Rewi)"
"Microsoft Rewards Bot Community (https://github.com/Light60-1/Microsoft-Rewards-Bot/graphs/contributors)"
],
"license": "PROPRIETARY",
"license": "CC-BY-NC-SA-4.0",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Light60-1"

View File

@@ -109,8 +109,8 @@
"retryMobileSearchAmount": 2,
// Delay between searches
"delay": {
"min": "40sec",
"max": "1min"
"min": "3min",
"max": "5min"
}
}
},

View File

@@ -85,5 +85,5 @@ export const DISCORD = {
COLOR_ORANGE: 0xFFA500,
COLOR_BLUE: 0x3498DB,
COLOR_GREEN: 0x00D26A,
AVATAR_URL: 'https://media.discordapp.net/attachments/1430643658788438144/1430644205344133290/rewi-v1.png?ex=68fbd83e&is=68fa86be&hm=ccddee9430de1fff90c1c3750907c13a60d1da29f13617a5dbbdc642f243f5b9&=&format=png&quality=lossless&width=968&height=968'
AVATAR_URL: 'https://media.discordapp.net/attachments/1421163952972369931/1434299121098952958/v2.50.5.png?ex=6907d2a6&is=69068126&hm=1a11362e2c2c40fc9f8b67762abf17e5bae72e4b70567d4331de195a880ba043&=&format=png&quality=lossless&width=1024&height=1076'
} as const

View File

@@ -1256,7 +1256,7 @@ export class Login {
}
private getDocsUrl(anchor?: string) {
const base = process.env.DOCS_BASE?.trim() || 'https://github.com/LightZirconite/Microsoft-Rewards-Script-Private/blob/v2/docs/security.md'
const base = process.env.DOCS_BASE?.trim() || 'https://github.com/Light60-1/Microsoft-Rewards-Bot/blob/main/docs/security.md'
const map: Record<string,string> = {
'recovery-email-mismatch':'#recovery-email-mismatch',
'we-cant-sign-you-in':'#we-cant-sign-you-in-blocked'

View File

@@ -62,7 +62,7 @@ export class SearchOnBing extends Workers {
// Fetch from the repo directly so the user doesn't need to redownload the script for the new activities
const response = await this.bot.axios.request({
method: 'GET',
url: 'https://raw.githubusercontent.com/LightZirconite/Microsoft-Rewards-Rewi/refs/heads/main/src/functions/queries.json'
url: 'https://raw.githubusercontent.com/Light60-1/Microsoft-Rewards-Bot/refs/heads/main/src/functions/queries.json'
})
queries = response.data
}

View File

@@ -414,73 +414,47 @@ export class MicrosoftRewardsBot {
if (this.config.clusters > 1 && !cluster.isPrimary) return
const banner = `
╔═══════════════════════════════════════════════════════════════════════
███╗ ███╗███████╗ ██████╗ ███████╗██╗ ██╗██╗
████╗ ████║██╔════╝ ██╔══██╗██╔════╝██║ ██║██║
██╔████╔██║███████╗ ██████╔╝█████╗ ██║ █╗ ██║██║
║ ██║╚██╔╝██║╚════██║ ██╔══██╗██╔══╝ ██║███╗██║██║ ║
║ ██║ ╚═╝ ██║███████║ ██║ ██║███████╗╚███╔███╔╝██║ ║
║ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚══════╝ ╚══╝╚══╝ ╚═╝ ║
║ ║
║ TypeScript • Playwright • Intelligent Automation ║
║ ║
╚═══════════════════════════════════════════════════════════════════════╝
╔════════════════════════════════════════════════════════╗
║ ║
Microsoft Rewards Bot v${this.getVersion().padEnd(5)}
Automated Points Collection System
╚════════════════════════════════════════════════════════╝
`
const buyModeBanner = `
╔══════════════════════════════════════════════════════╗
║ ║
███╗ ███╗███████╗ ██████╗ ██╗ ██╗██╗ ██╗
████╗ ████║██╔════╝ ██╔══██╗██║ ██║╚██╗ ██╔╝
██╔████╔██║███████╗ ██████╔╝██║ ██║ ╚████╔╝
║ ██║╚██╔╝██║╚════██║ ██╔══██╗██║ ██║ ╚██╔╝ ║
║ ██║ ╚═╝ ██║███████║ ██████╔╝╚██████╔╝ ██║ ║
║ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ║
║ ║
║ Manual Purchase Mode • Passive Monitoring ║
║ ║
╚══════════════════════════════════════════════════════╝
╔════════════════════════════════════════════════════════
Microsoft Rewards Bot - Manual Mode
Interactive Browsing Session
╚════════════════════════════════════════════════════════╝
`
// Read package version and build banner info
const pkgPath = path.join(__dirname, '../', 'package.json')
let version = 'unknown'
try {
if (fs.existsSync(pkgPath)) {
const raw = fs.readFileSync(pkgPath, 'utf-8')
const pkg = JSON.parse(raw)
version = pkg.version || version
}
} catch {
// Ignore version read errors
}
// Display appropriate banner based on mode
const version = this.getVersion()
const displayBanner = this.buyMode.enabled ? buyModeBanner : banner
console.log(displayBanner)
console.log('='.repeat(80))
console.log(''.repeat(60))
if (this.buyMode.enabled) {
console.log(` Version: ${version} | Process: ${process.pid} | Buy Mode: Active`)
console.log(` Target: ${this.buyMode.email || 'First account'} | Documentation: buy-mode.md`)
console.log(` Version ${version} | PID ${process.pid} | Manual Session`)
console.log(` Target: ${this.buyMode.email || 'First account'}`)
} else {
console.log(` Version: ${version} | Process: ${process.pid} | Clusters: ${this.config.clusters}`)
// Replace visibility/parallel with concise enabled feature status
console.log(` Version ${version} | PID ${process.pid} | Workers: ${this.config.clusters}`)
const upd = this.config.update || {}
const updTargets: string[] = []
if (upd.git !== false) updTargets.push('Git')
if (upd.docker) updTargets.push('Docker')
if (updTargets.length > 0) {
console.log(` Update: ${updTargets.join(', ')}`)
console.log(` Auto-Update: ${updTargets.join(', ')}`)
}
const sched = this.config.schedule || {}
const schedEnabled = !!sched.enabled
if (!schedEnabled) {
console.log(' Schedule: OFF')
console.log(' Scheduler: Disabled')
} else {
// Determine active format + time string to display
const tz = sched.timeZone || 'UTC'
let formatName = ''
let timeShown = ''
@@ -490,22 +464,33 @@ export class MicrosoftRewardsBot {
const time24Val = typeof srec['time24'] === 'string' ? String(srec['time24']) : undefined
if (useAmPmVal === true) {
formatName = 'AM/PM'
formatName = '12h'
timeShown = time12Val || sched.time || '9:00 AM'
} else if (useAmPmVal === false) {
formatName = '24h'
timeShown = time24Val || sched.time || '09:00'
} else {
// Back-compat: infer from provided fields if possible
if (time24Val && time24Val.trim()) { formatName = '24h'; timeShown = time24Val }
else if (time12Val && time12Val.trim()) { formatName = 'AM/PM'; timeShown = time12Val }
else { formatName = 'legacy'; timeShown = sched.time || '09:00' }
else if (time12Val && time12Val.trim()) { formatName = '12h'; timeShown = time12Val }
else { formatName = 'auto'; timeShown = sched.time || '09:00' }
}
console.log(` Schedule: ON — ${formatName} ${timeShown} • TZ=${tz}`)
console.log(` Scheduler: ${timeShown} (${formatName}, ${tz})`)
}
}
console.log('='.repeat(80) + '\n')
}
console.log(''.repeat(60) + '\n')
}
private getVersion(): string {
try {
const pkgPath = path.join(__dirname, '../', 'package.json')
if (fs.existsSync(pkgPath)) {
const raw = fs.readFileSync(pkgPath, 'utf-8')
const pkg = JSON.parse(raw)
return pkg.version || '2.51.0'
}
} catch { /* ignore */ }
return '2.51.0'
}
// Return summaries (used when clusters==1)
public getSummaries() {
@@ -895,10 +880,10 @@ export class MicrosoftRewardsBot {
}
// If any account is flagged compromised, do NOT exit; keep the process alive so the browser stays open
if (this.compromisedModeActive || this.globalStandby.active) {
log('main','SECURITY','Compromised or banned detected. Global standby engaged: we will NOT proceed to other accounts until resolved. Keeping process alive. Press CTRL+C to exit when done. Security check by @Light','warn','yellow')
log('main','SECURITY','Security alert active. Process kept alive for manual review. Press CTRL+C to exit when done.','warn','yellow')
// Periodic heartbeat with cleanup on exit
const standbyInterval = setInterval(() => {
log('main','SECURITY','Still in standby: session(s) held open for manual recovery / review...','warn','yellow')
log('main','SECURITY','Standby mode active: sessions kept open for review...','warn','yellow')
}, 5 * 60 * 1000)
// Cleanup on process exit
@@ -993,13 +978,13 @@ export class MicrosoftRewardsBot {
if (this.compromisedModeActive) {
// User wants the page to remain open for manual recovery. Do not proceed to tasks.
const reason = this.compromisedReason || 'security-issue'
log(this.isMobile, 'SECURITY', `Account flagged as compromised (${reason}). Leaving the browser open and skipping all activities for ${account.email}. Security check by @Light`, 'warn', 'yellow')
log(this.isMobile, 'SECURITY', `Account security check failed (${reason}). Browser kept open for manual review: ${account.email}`, 'warn', 'yellow')
try {
const { ConclusionWebhook } = await import('./util/ConclusionWebhook')
await ConclusionWebhook(
this.config,
'🔐 Security Alert (Post-Login)',
`**Account:** ${account.email}\n**Reason:** ${reason}\n**Action:** Leaving browser open; skipping tasks\n\n_Security check by @Light_`,
'🔐 Security Check',
`**Account:** ${account.email}\n**Status:** ${reason}\n**Action:** Browser kept open, activities paused`,
undefined,
0xFFAA00
)
@@ -1096,13 +1081,13 @@ export class MicrosoftRewardsBot {
await this.login.login(this.homePage, account.email, account.password, account.totp)
if (this.compromisedModeActive) {
const reason = this.compromisedReason || 'security-issue'
log(this.isMobile, 'SECURITY', `Account flagged as compromised (${reason}). Leaving mobile browser open and skipping mobile activities for ${account.email}. Security check by @Light`, 'warn', 'yellow')
log(this.isMobile, 'SECURITY', `Mobile security check failed (${reason}). Browser kept open for manual review: ${account.email}`, 'warn', 'yellow')
try {
const { ConclusionWebhook } = await import('./util/ConclusionWebhook')
await ConclusionWebhook(
this.config,
'🔐 Security Alert (Mobile)',
`**Account:** ${account.email}\n**Reason:** ${reason}\n**Action:** Leaving mobile browser open; skipping tasks\n\n_Security check by @Light_`,
'🔐 Security Check (Mobile)',
`**Account:** ${account.email}\n**Status:** ${reason}\n**Action:** Browser kept open, mobile activities paused`,
undefined,
0xFFAA00
)
@@ -1313,14 +1298,14 @@ export class MicrosoftRewardsBot {
const globalStatsValue = globalLines.join('\n')
const fields: { name: string; value: string; inline?: boolean }[] = [
{ name: '📊 Run Totals', value: globalStatsValue, inline: false }
{ name: '📊 Summary', value: globalStatsValue, inline: false }
]
if (accountChunks.length === 0) {
fields.push({ name: '🧾 Account Overview', value: '_No account results recorded_', inline: false })
fields.push({ name: '📋 Accounts', value: '_No results recorded_', inline: false })
} else {
accountChunks.forEach((chunk, index) => {
const name = accountChunks.length === 1 ? '🧾 Account Overview' : `🧾 Account Overview (part ${index + 1})`
const name = accountChunks.length === 1 ? '📋 Accounts' : `📋 Accounts (${index + 1}/${accountChunks.length})`
fields.push({ name, value: ['```', ...chunk, '```'].join('\n'), inline: false })
})
}
@@ -1329,8 +1314,8 @@ export class MicrosoftRewardsBot {
if (conclusionWebhookEnabled || ntfyEnabled || webhookEnabled) {
await ConclusionWebhook(
cfg,
'🎯 MS Rewi - Daily Summary',
`**v${version}** • Run ${this.runId}`,
'✅ Daily Run Complete',
`**v${version}** • ${this.runId}`,
fields,
accountsWithErrors > 0 ? DISCORD.COLOR_ORANGE : DISCORD.COLOR_GREEN
)
@@ -1427,7 +1412,7 @@ export class MicrosoftRewardsBot {
const { ConclusionWebhook } = await import('./util/ConclusionWebhook')
await ConclusionWebhook(
this.config,
'📈 Analytics Snapshot',
'📈 Performance Report',
['```markdown', markdown, '```'].join('\n'),
undefined,
DISCORD.COLOR_BLUE
@@ -1474,13 +1459,13 @@ export class MicrosoftRewardsBot {
const { ConclusionWebhook } = await import('./util/ConclusionWebhook')
await ConclusionWebhook(
this.config,
'🚨 Global Security Standby Engaged',
`@everyone\n\n**Account:** ${email}\n**Reason:** ${reason}\n**Action:** Pausing all further accounts. We will not proceed until this is resolved.\n\n_Security check by @Light_`,
'🚨 Critical Security Alert',
`@everyone\n\n**Account:** ${email}\n**Issue:** ${reason}\n**Status:** All accounts paused pending review`,
undefined,
DISCORD.COLOR_RED
)
} catch (e) {
log('main','ALERT',`Failed to send standby alert: ${e instanceof Error ? e.message : e}`,'warn')
log('main','ALERT',`Failed to send alert: ${e instanceof Error ? e.message : e}`,'warn')
}
}
}

View File

@@ -51,7 +51,7 @@ export async function ConclusionWebhook(
color: color || 0x0078D4,
timestamp: new Date().toISOString(),
thumbnail: {
url: 'https://media.discordapp.net/attachments/1430643658788438144/1430644205344133290/rewi-v1.png'
url: 'https://media.discordapp.net/attachments/1421163952972369931/1434299121098952958/v2.50.5.png?ex=6907d2a6&is=69068126&hm=1a11362e2c2c40fc9f8b67762abf17e5bae72e4b70567d4331de195a880ba043&=&format=png&quality=lossless&width=1024&height=1076'
}
}
@@ -60,8 +60,8 @@ export async function ConclusionWebhook(
}
const payload: WebhookPayload = {
username: 'MS Rewi 🎮',
avatar_url: 'https://media.discordapp.net/attachments/1430643658788438144/1430644205344133290/rewi-v1.png',
username: 'MS Rewi',
avatar_url: 'https://media.discordapp.net/attachments/1421163952972369931/1434299121098952958/v2.50.5.png?ex=6907d2a6&is=69068126&hm=1a11362e2c2c40fc9f8b67762abf17e5bae72e4b70567d4331de195a880ba043&=&format=png&quality=lossless&width=1024&height=1076',
embeds: [embed]
}