mirror of
https://github.com/LightZirconite/Microsoft-Rewards-Bot.git
synced 2026-01-10 01:06:17 +00:00
feat: Implement account creation module with realistic data generation
- Add DataGenerator class for generating emails, passwords, birthdates, and names. - Create README.md detailing features, usage, and process flow for account creation. - Develop CLI for initiating account creation with optional referral URL. - Introduce nameDatabase for realistic first and last name generation. - Define CreatedAccount interface for structured account data.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,6 +5,7 @@ node_modules/
|
|||||||
.github/
|
.github/
|
||||||
diagnostics/
|
diagnostics/
|
||||||
reports/
|
reports/
|
||||||
|
accounts-created/
|
||||||
accounts.json
|
accounts.json
|
||||||
accounts.jsonc
|
accounts.jsonc
|
||||||
notes
|
notes
|
||||||
|
|||||||
30
README.md
30
README.md
@@ -150,6 +150,36 @@ npm run buy 1 # By account number
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 🆕 Account Creator
|
||||||
|
|
||||||
|
Automatically create new Microsoft accounts with referral link support:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create account without referral
|
||||||
|
npm run creator
|
||||||
|
|
||||||
|
# Create account with your referral link
|
||||||
|
npm run creator https://rewards.bing.com/welcome?rh=YOUR_CODE&ref=rafsrchae
|
||||||
|
```
|
||||||
|
|
||||||
|
**Features:**
|
||||||
|
- 🎯 Language-independent (works in any language)
|
||||||
|
- 🔐 Generates strong passwords automatically
|
||||||
|
- 📧 Creates unique email addresses
|
||||||
|
- 🎂 Realistic birthdates (18-50 years old)
|
||||||
|
- 🤖 CAPTCHA support (manual solving required)
|
||||||
|
- 💾 Saves all account details to `accounts-created/` directory
|
||||||
|
|
||||||
|
**What happens:**
|
||||||
|
1. Opens browser to Microsoft signup page
|
||||||
|
2. Automatically fills email, password, birthdate, and name
|
||||||
|
3. Waits for you to solve CAPTCHA
|
||||||
|
4. Saves complete account info to file
|
||||||
|
|
||||||
|
**[📖 Full Account Creator Guide](src/account-creation/README.md)**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## ⏰ Automatic Scheduling
|
## ⏰ Automatic Scheduling
|
||||||
|
|
||||||
Configure automatic task scheduling directly from `config.jsonc` - **perfect for Raspberry Pi!**
|
Configure automatic task scheduling directly from `config.jsonc` - **perfect for Raspberry Pi!**
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
"ts-start": "node --loader ts-node/esm ./src/index.ts",
|
"ts-start": "node --loader ts-node/esm ./src/index.ts",
|
||||||
"dev": "ts-node ./src/index.ts -dev",
|
"dev": "ts-node ./src/index.ts -dev",
|
||||||
"buy": "node --enable-source-maps ./dist/index.js -buy",
|
"buy": "node --enable-source-maps ./dist/index.js -buy",
|
||||||
|
"creator": "ts-node ./src/account-creation/cli.ts",
|
||||||
"dashboard": "node --enable-source-maps ./dist/index.js -dashboard",
|
"dashboard": "node --enable-source-maps ./dist/index.js -dashboard",
|
||||||
"dashboard-dev": "ts-node ./src/index.ts -dashboard",
|
"dashboard-dev": "ts-node ./src/index.ts -dashboard",
|
||||||
"lint": "eslint \"src/**/*.{ts,tsx}\"",
|
"lint": "eslint \"src/**/*.{ts,tsx}\"",
|
||||||
|
|||||||
1615
src/account-creation/AccountCreator.ts
Normal file
1615
src/account-creation/AccountCreator.ts
Normal file
File diff suppressed because it is too large
Load Diff
104
src/account-creation/DataGenerator.ts
Normal file
104
src/account-creation/DataGenerator.ts
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
import { getRandomFirstName, getRandomLastName } from './nameDatabase'
|
||||||
|
|
||||||
|
export class DataGenerator {
|
||||||
|
|
||||||
|
generateEmail(customFirstName?: string, customLastName?: string): string {
|
||||||
|
const firstName = customFirstName || getRandomFirstName()
|
||||||
|
const lastName = customLastName || getRandomLastName()
|
||||||
|
|
||||||
|
const cleanFirst = firstName.toLowerCase().replace(/[^a-z]/g, '')
|
||||||
|
const cleanLast = lastName.toLowerCase().replace(/[^a-z]/g, '')
|
||||||
|
|
||||||
|
// More realistic patterns
|
||||||
|
const randomNum = Math.floor(Math.random() * 9999)
|
||||||
|
const randomYear = 1985 + Math.floor(Math.random() * 20)
|
||||||
|
|
||||||
|
const patterns = [
|
||||||
|
`${cleanFirst}.${cleanLast}`,
|
||||||
|
`${cleanFirst}${cleanLast}`,
|
||||||
|
`${cleanFirst}_${cleanLast}`,
|
||||||
|
`${cleanFirst}.${cleanLast}${randomNum}`,
|
||||||
|
`${cleanFirst}${randomNum}`,
|
||||||
|
`${cleanLast}${cleanFirst}`,
|
||||||
|
`${cleanFirst}.${cleanLast}${randomYear}`,
|
||||||
|
`${cleanFirst}${randomYear}`
|
||||||
|
]
|
||||||
|
|
||||||
|
const username = patterns[Math.floor(Math.random() * patterns.length)]
|
||||||
|
return `${username}@outlook.com`
|
||||||
|
}
|
||||||
|
|
||||||
|
generatePassword(): string {
|
||||||
|
const uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||||
|
const lowercase = 'abcdefghijklmnopqrstuvwxyz'
|
||||||
|
const numbers = '0123456789'
|
||||||
|
const symbols = '!@#$%^&*'
|
||||||
|
|
||||||
|
let password = ''
|
||||||
|
|
||||||
|
// Ensure at least one of each required type
|
||||||
|
password += uppercase[Math.floor(Math.random() * uppercase.length)]
|
||||||
|
password += lowercase[Math.floor(Math.random() * lowercase.length)]
|
||||||
|
password += numbers[Math.floor(Math.random() * numbers.length)]
|
||||||
|
password += symbols[Math.floor(Math.random() * symbols.length)]
|
||||||
|
|
||||||
|
// Fill the rest (total length: 14-18 chars for better security)
|
||||||
|
const allChars = uppercase + lowercase + numbers + symbols
|
||||||
|
const targetLength = 14 + Math.floor(Math.random() * 5)
|
||||||
|
|
||||||
|
for (let i = password.length; i < targetLength; i++) {
|
||||||
|
password += allChars[Math.floor(Math.random() * allChars.length)]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shuffle to mix required characters
|
||||||
|
password = password.split('').sort(() => Math.random() - 0.5).join('')
|
||||||
|
|
||||||
|
return password
|
||||||
|
}
|
||||||
|
|
||||||
|
generateBirthdate(): { day: number; month: number; year: number } {
|
||||||
|
const currentYear = new Date().getFullYear()
|
||||||
|
|
||||||
|
// Age between 20 and 45 years old (safer range)
|
||||||
|
const minAge = 20
|
||||||
|
const maxAge = 45
|
||||||
|
|
||||||
|
const age = minAge + Math.floor(Math.random() * (maxAge - minAge + 1))
|
||||||
|
const year = currentYear - age
|
||||||
|
|
||||||
|
const month = 1 + Math.floor(Math.random() * 12)
|
||||||
|
const daysInMonth = new Date(year, month, 0).getDate()
|
||||||
|
const day = 1 + Math.floor(Math.random() * daysInMonth)
|
||||||
|
|
||||||
|
return { day, month, year }
|
||||||
|
}
|
||||||
|
|
||||||
|
generateNames(email: string): { firstName: string; lastName: string } {
|
||||||
|
const username = email.split('@')[0] || 'user'
|
||||||
|
|
||||||
|
// Split on numbers, dots, underscores, hyphens
|
||||||
|
const parts = username.split(/[0-9._-]+/).filter(p => p.length > 1)
|
||||||
|
|
||||||
|
if (parts.length >= 2) {
|
||||||
|
return {
|
||||||
|
firstName: this.capitalize(parts[0] || getRandomFirstName()),
|
||||||
|
lastName: this.capitalize(parts[1] || getRandomLastName())
|
||||||
|
}
|
||||||
|
} else if (parts.length === 1 && parts[0]) {
|
||||||
|
return {
|
||||||
|
firstName: this.capitalize(parts[0]),
|
||||||
|
lastName: getRandomLastName()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
firstName: getRandomFirstName(),
|
||||||
|
lastName: getRandomLastName()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private capitalize(str: string): string {
|
||||||
|
if (!str || str.length === 0) return ''
|
||||||
|
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()
|
||||||
|
}
|
||||||
|
}
|
||||||
285
src/account-creation/README.md
Normal file
285
src/account-creation/README.md
Normal file
@@ -0,0 +1,285 @@
|
|||||||
|
# Account Creation Module
|
||||||
|
|
||||||
|
Automatically create new Microsoft accounts with **realistic email generation**, **human-like delays**, **interactive mode**, and **referral link support**.
|
||||||
|
|
||||||
|
## 🎯 Key Features
|
||||||
|
|
||||||
|
### ✨ Stealth & Realism
|
||||||
|
- **200+ Name Database**: Generates natural emails like `james.wilson1995@outlook.com`
|
||||||
|
- **Human-like Delays**: Random 0.5-4s delays between actions to avoid bot detection
|
||||||
|
- **Interactive Mode**: Choose auto-generate or enter your own email
|
||||||
|
- **Microsoft Suggestions**: Automatically handles "email taken" with Microsoft's alternatives
|
||||||
|
- **Badge Reading**: Always reads final email from identity badge for accuracy
|
||||||
|
|
||||||
|
### 🔧 Technical Features
|
||||||
|
- **Referral Support**: Create accounts from your referral links
|
||||||
|
- **Language-Independent**: CSS selectors work in any language
|
||||||
|
- **CAPTCHA Detection**: Pauses automatically, waits for human solving
|
||||||
|
- **Auto-Save**: Organized daily JSONC files in `accounts-created/`
|
||||||
|
|
||||||
|
## 📦 Installation
|
||||||
|
|
||||||
|
Already integrated - no additional setup needed!
|
||||||
|
|
||||||
|
## 🚀 Usage
|
||||||
|
|
||||||
|
### Command Line
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Without referral (standalone account)
|
||||||
|
npm run creator
|
||||||
|
|
||||||
|
# With referral link (earns you referral credit)
|
||||||
|
npm run creator https://rewards.bing.com/welcome?rh=YOUR_CODE&ref=rafsrchae
|
||||||
|
```
|
||||||
|
|
||||||
|
### Interactive Flow
|
||||||
|
|
||||||
|
When you run the creator:
|
||||||
|
|
||||||
|
```
|
||||||
|
=== Email Configuration ===
|
||||||
|
Generate email automatically? (Y/n):
|
||||||
|
```
|
||||||
|
|
||||||
|
**Press Y or Enter**: Auto-generates realistic email
|
||||||
|
- Example: `sarah.martinez1998@hotmail.com`
|
||||||
|
- Uses 200+ names from database
|
||||||
|
- Multiple formats (firstname.lastname, firstnamelastname, etc.)
|
||||||
|
|
||||||
|
**Press n**: Manual email input
|
||||||
|
- You type the email you want
|
||||||
|
- Example: `mycoolemail@outlook.com`
|
||||||
|
|
||||||
|
## 📧 Email Generation
|
||||||
|
|
||||||
|
### Auto-Generation System
|
||||||
|
|
||||||
|
The system creates **realistic, human-like emails**:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Old (obvious bot pattern):
|
||||||
|
user1730970000abc@outlook.com ❌
|
||||||
|
|
||||||
|
// New (looks like real person):
|
||||||
|
james.wilson@outlook.com ✅
|
||||||
|
emily.brown95@hotmail.com ✅
|
||||||
|
alex_taylor@outlook.fr ✅
|
||||||
|
michael.garcia1998@outlook.com ✅
|
||||||
|
```
|
||||||
|
|
||||||
|
### Name Database
|
||||||
|
|
||||||
|
- **150+ First Names**: Male, female, gender-neutral
|
||||||
|
- **90+ Last Names**: Common surnames worldwide
|
||||||
|
- **Smart Formatting**: Varies patterns to look natural
|
||||||
|
|
||||||
|
### Email Formats
|
||||||
|
|
||||||
|
The system randomly uses these patterns:
|
||||||
|
- `firstname.lastname@domain.com`
|
||||||
|
- `firstnamelastname@domain.com`
|
||||||
|
- `firstname_lastname@domain.com`
|
||||||
|
- `firstnamelastname95@domain.com` (random number 0-99)
|
||||||
|
- `firstname.lastname1995@domain.com` (birth year style)
|
||||||
|
|
||||||
|
### Domains
|
||||||
|
|
||||||
|
Randomly selects from:
|
||||||
|
- `outlook.com`
|
||||||
|
- `hotmail.com`
|
||||||
|
- `outlook.fr`
|
||||||
|
|
||||||
|
## 🎭 Human-like Delays
|
||||||
|
|
||||||
|
All actions have **random delays** to mimic human behavior:
|
||||||
|
|
||||||
|
| Action | Delay Range |
|
||||||
|
|--------|-------------|
|
||||||
|
| After navigation | 1.5-3s |
|
||||||
|
| After button click | 2-4s |
|
||||||
|
| After dropdown select | 0.8-1.5s |
|
||||||
|
| After text input | 0.8-2s |
|
||||||
|
| Waiting for page load | 2-4s |
|
||||||
|
|
||||||
|
This prevents Microsoft's bot detection from flagging your accounts.
|
||||||
|
|
||||||
|
## 🔄 Microsoft Suggestions Handling
|
||||||
|
|
||||||
|
**Problem**: Email already exists
|
||||||
|
**Microsoft's Response**: Shows alternative suggestions (e.g., `john.smith247@outlook.com`)
|
||||||
|
|
||||||
|
**How the system handles it**:
|
||||||
|
1. ✅ Detects error message automatically
|
||||||
|
2. ✅ Finds suggestion toolbar
|
||||||
|
3. ✅ Clicks first suggestion
|
||||||
|
4. ✅ Reads final email from identity badge
|
||||||
|
5. ✅ Saves correct email to file
|
||||||
|
|
||||||
|
**Example Flow**:
|
||||||
|
```
|
||||||
|
You input: john.smith@outlook.com
|
||||||
|
Microsoft: ❌ Email taken
|
||||||
|
Microsoft: 💡 Suggestions: john.smith247@outlook.com, john.smith89@hotmail.com
|
||||||
|
System: ✅ Clicks first suggestion
|
||||||
|
Identity Badge: john.smith247@outlook.com
|
||||||
|
Saved Account: john.smith247@outlook.com ← Correct!
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 Complete Process Flow
|
||||||
|
|
||||||
|
1. **Navigation**
|
||||||
|
- With referral: Goes to your referral URL → Clicks "Join Microsoft Rewards"
|
||||||
|
- Without referral: Goes directly to `https://login.live.com/`
|
||||||
|
|
||||||
|
2. **Email Configuration** (Interactive)
|
||||||
|
- Asks: Auto-generate or manual?
|
||||||
|
- Auto: Generates realistic email from name database
|
||||||
|
- Manual: You type the email
|
||||||
|
|
||||||
|
3. **Email Submission**
|
||||||
|
- Fills email with human delays
|
||||||
|
- Clicks Next button
|
||||||
|
- Checks for "email taken" error
|
||||||
|
|
||||||
|
4. **Suggestion Handling** (if needed)
|
||||||
|
- Detects error automatically
|
||||||
|
- Clicks Microsoft's first suggestion
|
||||||
|
- Continues smoothly
|
||||||
|
|
||||||
|
5. **Identity Badge Reading**
|
||||||
|
- Reads final email from badge
|
||||||
|
- Ensures accuracy (especially after suggestions)
|
||||||
|
|
||||||
|
6. **Password Generation**
|
||||||
|
- 12-16 characters
|
||||||
|
- Uppercase, lowercase, numbers, symbols
|
||||||
|
- Meets all Microsoft requirements
|
||||||
|
|
||||||
|
7. **Birthdate**
|
||||||
|
- Random age: 18-50 years old
|
||||||
|
- Realistic distribution
|
||||||
|
|
||||||
|
8. **Names**
|
||||||
|
- Extracted from email OR
|
||||||
|
- Generated from name database
|
||||||
|
- Capitalized properly
|
||||||
|
|
||||||
|
9. **CAPTCHA Detection**
|
||||||
|
- Automatically detects CAPTCHA page
|
||||||
|
- Pauses and waits for human solving
|
||||||
|
- Up to 10 minutes timeout
|
||||||
|
- Logs progress every 30 seconds
|
||||||
|
|
||||||
|
10. **Save Account**
|
||||||
|
- Saves to `accounts-created/created_accounts_YYYY-MM-DD.jsonc`
|
||||||
|
- Daily files for organization
|
||||||
|
- All details preserved
|
||||||
|
|
||||||
|
## 📄 Output Format
|
||||||
|
|
||||||
|
```jsonc
|
||||||
|
// accounts-created/created_accounts_2025-01-09.jsonc
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"email": "james.wilson1995@outlook.com",
|
||||||
|
"password": "Xyz789!@#AbcDef",
|
||||||
|
"birthdate": {
|
||||||
|
"day": 17,
|
||||||
|
"month": 5,
|
||||||
|
"year": 1995
|
||||||
|
},
|
||||||
|
"firstName": "James",
|
||||||
|
"lastName": "Wilson",
|
||||||
|
"createdAt": "2025-01-09T10:30:00.000Z",
|
||||||
|
"referralUrl": "https://rewards.bing.com/welcome?rh=YOUR_CODE&ref=rafsrchae"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📂 File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
src/account-creation/
|
||||||
|
├── AccountCreator.ts # Main orchestration with delays & interaction
|
||||||
|
├── DataGenerator.ts # Generates realistic data
|
||||||
|
├── nameDatabase.ts # 200+ names for email generation
|
||||||
|
├── cli.ts # Command-line interface with banner
|
||||||
|
├── types.ts # TypeScript interfaces
|
||||||
|
└── README.md # This file
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔍 Technical Selectors (Language-Independent)
|
||||||
|
|
||||||
|
| Element | Selector |
|
||||||
|
|---------|----------|
|
||||||
|
| Create Account | `span[role="button"].fui-Link, a[id*="signup"]` |
|
||||||
|
| Email Input | `input[type="email"]` |
|
||||||
|
| Password Input | `input[type="password"]` |
|
||||||
|
| Next Button | `button[data-testid="primaryButton"], button[type="submit"]` |
|
||||||
|
| Birth Day | `button[name="BirthDay"]` |
|
||||||
|
| Birth Month | `button[name="BirthMonth"]` |
|
||||||
|
| Birth Year | `input[name="BirthYear"]` |
|
||||||
|
| First Name | `input[id*="firstName"]` |
|
||||||
|
| Last Name | `input[id*="lastName"]` |
|
||||||
|
| Identity Badge | `#bannerText, div[data-testid="identityBanner"]` |
|
||||||
|
| Error Message | `div[id*="Error"], div[class*="error"]` |
|
||||||
|
| Suggestions | `div[role="toolbar"][data-testid="suggestions"]` |
|
||||||
|
| CAPTCHA Title | `h1[data-testid="title"]` |
|
||||||
|
|
||||||
|
## ⚠️ Important Notes
|
||||||
|
|
||||||
|
- **Browser stays open** during CAPTCHA - intentional (human solving required)
|
||||||
|
- **No CAPTCHA automation** - Microsoft detects and bans bots
|
||||||
|
- **Referral URL must be full URL** starting with `https://`
|
||||||
|
- **Multiple runs** append to same daily file
|
||||||
|
- **Badge reading is critical** - final email may differ from input (suggestions)
|
||||||
|
- **Human delays are mandatory** - prevents bot detection
|
||||||
|
|
||||||
|
## 🎯 Why This Approach?
|
||||||
|
|
||||||
|
### Old System (Bot-Like)
|
||||||
|
```
|
||||||
|
❌ Email: user1730970000abc@outlook.com (obvious timestamp)
|
||||||
|
❌ Speed: Instant form filling (< 1 second)
|
||||||
|
❌ Errors: Didn't handle email-taken scenarios
|
||||||
|
❌ Badge: Ignored identity badge (wrong email saved)
|
||||||
|
```
|
||||||
|
|
||||||
|
### New System (Human-Like)
|
||||||
|
```
|
||||||
|
✅ Email: james.wilson1995@outlook.com (looks real)
|
||||||
|
✅ Speed: 0.5-4s delays between actions (natural)
|
||||||
|
✅ Errors: Handles suggestions automatically
|
||||||
|
✅ Badge: Always reads final email (accurate)
|
||||||
|
✅ Choice: User can choose auto or manual
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📊 Success Tips
|
||||||
|
|
||||||
|
1. **Use auto-generate** for fastest creation
|
||||||
|
2. **Use manual mode** if you have specific email format requirements
|
||||||
|
3. **Let the script handle suggestions** - don't worry about "email taken" errors
|
||||||
|
4. **Solve CAPTCHA within 10 minutes** when prompted
|
||||||
|
5. **Check accounts-created/ folder** for all saved accounts
|
||||||
|
|
||||||
|
## 🐛 Troubleshooting
|
||||||
|
|
||||||
|
**Q: Email generation too fast?**
|
||||||
|
A: System uses 0.8-2s delays after each input - looks human.
|
||||||
|
|
||||||
|
**Q: Email already taken?**
|
||||||
|
A: System automatically clicks Microsoft's suggestion and reads from badge.
|
||||||
|
|
||||||
|
**Q: Want specific email format?**
|
||||||
|
A: Press 'n' when asked "Generate automatically?" and type your email.
|
||||||
|
|
||||||
|
**Q: CAPTCHA timeout?**
|
||||||
|
A: You have 10 minutes to solve it. If timeout, run script again.
|
||||||
|
|
||||||
|
**Q: Where are accounts saved?**
|
||||||
|
A: `accounts-created/created_accounts_YYYY-MM-DD.jsonc` (auto-created folder).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Made with ❤️ for Microsoft Rewards automation**
|
||||||
109
src/account-creation/cli.ts
Normal file
109
src/account-creation/cli.ts
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
import Browser from '../browser/Browser'
|
||||||
|
import { AccountCreator } from './AccountCreator'
|
||||||
|
import { log } from '../util/Logger'
|
||||||
|
import { MicrosoftRewardsBot } from '../index'
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
// Get referral URL from command line args
|
||||||
|
const args = process.argv.slice(2)
|
||||||
|
const referralUrl = args[0] // Optional referral URL
|
||||||
|
|
||||||
|
// Validate URL format if provided
|
||||||
|
if (referralUrl && !referralUrl.startsWith('http')) {
|
||||||
|
log(false, 'CREATOR-CLI', '❌ Invalid URL format', 'error')
|
||||||
|
log(false, 'CREATOR-CLI', 'Usage: npm run creator [referralUrl]', 'log')
|
||||||
|
log(false, 'CREATOR-CLI', 'Example: npm run creator https://rewards.bing.com/welcome?rh=E3DCB441&ref=rafsrchae', 'log', 'cyan')
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Banner
|
||||||
|
console.log('\n' + '='.repeat(60))
|
||||||
|
log(false, 'CREATOR-CLI', '🚀 Microsoft Account Creator', 'log', 'cyan')
|
||||||
|
console.log('='.repeat(60) + '\n')
|
||||||
|
|
||||||
|
if (referralUrl) {
|
||||||
|
log(false, 'CREATOR-CLI', `✅ Using referral URL: ${referralUrl}`, 'log', 'green')
|
||||||
|
} else {
|
||||||
|
log(false, 'CREATOR-CLI', '⚠️ No referral URL provided - account will NOT be linked to rewards', 'warn', 'yellow')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a temporary bot instance to access browser creation
|
||||||
|
const bot = new MicrosoftRewardsBot(false)
|
||||||
|
const browserFactory = new Browser(bot)
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Create browser (non-headless for user interaction with CAPTCHA)
|
||||||
|
log(false, 'CREATOR-CLI', 'Opening browser (required for CAPTCHA solving)...', 'log')
|
||||||
|
|
||||||
|
// Create empty proxy config (no proxy for account creation)
|
||||||
|
const emptyProxy = {
|
||||||
|
proxyAxios: false,
|
||||||
|
url: '',
|
||||||
|
port: 0,
|
||||||
|
password: '',
|
||||||
|
username: ''
|
||||||
|
}
|
||||||
|
|
||||||
|
const browserContext = await browserFactory.createBrowser(emptyProxy, 'account-creator')
|
||||||
|
|
||||||
|
log(false, 'CREATOR-CLI', '✅ Browser opened successfully', 'log', 'green')
|
||||||
|
|
||||||
|
// Create account
|
||||||
|
const creator = new AccountCreator(referralUrl)
|
||||||
|
const result = await creator.create(browserContext)
|
||||||
|
|
||||||
|
if (result) {
|
||||||
|
// Success banner
|
||||||
|
console.log('\n' + '='.repeat(60))
|
||||||
|
log(false, 'CREATOR-CLI', '✅ ACCOUNT CREATED SUCCESSFULLY!', 'log', 'green')
|
||||||
|
console.log('='.repeat(60))
|
||||||
|
|
||||||
|
// Display account details
|
||||||
|
log(false, 'CREATOR-CLI', `📧 Email: ${result.email}`, 'log', 'cyan')
|
||||||
|
log(false, 'CREATOR-CLI', `🔐 Password: ${result.password}`, 'log', 'cyan')
|
||||||
|
log(false, 'CREATOR-CLI', `👤 Name: ${result.firstName} ${result.lastName}`, 'log', 'cyan')
|
||||||
|
log(false, 'CREATOR-CLI', `🎂 Birthdate: ${result.birthdate.day}/${result.birthdate.month}/${result.birthdate.year}`, 'log', 'cyan')
|
||||||
|
|
||||||
|
if (result.referralUrl) {
|
||||||
|
log(false, 'CREATOR-CLI', '🔗 Referral: Linked', 'log', 'green')
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('='.repeat(60))
|
||||||
|
log(false, 'CREATOR-CLI', '💾 Account details saved to accounts-created/ directory', 'log', 'green')
|
||||||
|
console.log('='.repeat(60) + '\n')
|
||||||
|
|
||||||
|
// Keep browser open - don't close
|
||||||
|
log(false, 'CREATOR-CLI', '✅ Account creation complete! Browser will remain open.', 'log', 'green')
|
||||||
|
log(false, 'CREATOR-CLI', 'You can now use the account or close the browser manually.', 'log', 'cyan')
|
||||||
|
log(false, 'CREATOR-CLI', 'Press Ctrl+C to exit the script.', 'log', 'yellow')
|
||||||
|
|
||||||
|
// Keep process alive indefinitely
|
||||||
|
await new Promise(() => {}) // Never resolves
|
||||||
|
} else {
|
||||||
|
// Failure
|
||||||
|
console.log('\n' + '='.repeat(60))
|
||||||
|
log(false, 'CREATOR-CLI', '❌ ACCOUNT CREATION FAILED', 'error')
|
||||||
|
console.log('='.repeat(60) + '\n')
|
||||||
|
|
||||||
|
await browserContext.close()
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
const msg = error instanceof Error ? error.message : String(error)
|
||||||
|
console.log('\n' + '='.repeat(60))
|
||||||
|
log(false, 'CREATOR-CLI', `❌ Fatal error: ${msg}`, 'error')
|
||||||
|
console.log('='.repeat(60) + '\n')
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run if executed directly
|
||||||
|
if (require.main === module) {
|
||||||
|
main().catch(error => {
|
||||||
|
log(false, 'CREATOR-CLI', `Unhandled error: ${error}`, 'error')
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export { main as createAccountCLI }
|
||||||
46
src/account-creation/nameDatabase.ts
Normal file
46
src/account-creation/nameDatabase.ts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
// Realistic name database for account creation
|
||||||
|
export const NAME_DATABASE = {
|
||||||
|
firstNames: {
|
||||||
|
male: [
|
||||||
|
'James', 'John', 'Robert', 'Michael', 'William', 'David', 'Richard', 'Joseph', 'Thomas', 'Charles',
|
||||||
|
'Daniel', 'Matthew', 'Anthony', 'Mark', 'Donald', 'Steven', 'Paul', 'Andrew', 'Joshua', 'Kenneth',
|
||||||
|
'Kevin', 'Brian', 'George', 'Timothy', 'Ronald', 'Edward', 'Jason', 'Jeffrey', 'Ryan', 'Jacob',
|
||||||
|
'Nicolas', 'Lucas', 'Nathan', 'Benjamin', 'Samuel', 'Alexander', 'Christopher', 'Dylan', 'Logan',
|
||||||
|
'Ethan', 'Mason', 'Liam', 'Noah', 'Oliver', 'Elijah', 'Aiden', 'Jackson', 'Sebastian', 'Jack'
|
||||||
|
],
|
||||||
|
female: [
|
||||||
|
'Mary', 'Patricia', 'Jennifer', 'Linda', 'Barbara', 'Elizabeth', 'Jessica', 'Susan', 'Sarah', 'Karen',
|
||||||
|
'Lisa', 'Nancy', 'Betty', 'Margaret', 'Sandra', 'Ashley', 'Kimberly', 'Emily', 'Donna', 'Michelle',
|
||||||
|
'Carol', 'Amanda', 'Dorothy', 'Melissa', 'Deborah', 'Stephanie', 'Rebecca', 'Sharon', 'Laura', 'Cynthia',
|
||||||
|
'Emma', 'Olivia', 'Ava', 'Isabella', 'Sophia', 'Mia', 'Charlotte', 'Amelia', 'Harper', 'Evelyn',
|
||||||
|
'Abigail', 'Emily', 'Madison', 'Ella', 'Scarlett', 'Grace', 'Chloe', 'Victoria', 'Riley', 'Aria'
|
||||||
|
],
|
||||||
|
neutral: [
|
||||||
|
'Alex', 'Jordan', 'Taylor', 'Morgan', 'Casey', 'Riley', 'Avery', 'Jamie', 'Quinn', 'Reese',
|
||||||
|
'Skylar', 'Cameron', 'Drew', 'Blake', 'Sage', 'River', 'Phoenix', 'Charlie', 'Dakota', 'Rowan'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
lastNames: [
|
||||||
|
'Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Rodriguez', 'Martinez',
|
||||||
|
'Hernandez', 'Lopez', 'Gonzalez', 'Wilson', 'Anderson', 'Thomas', 'Taylor', 'Moore', 'Jackson', 'Martin',
|
||||||
|
'Lee', 'Perez', 'Thompson', 'White', 'Harris', 'Sanchez', 'Clark', 'Ramirez', 'Lewis', 'Robinson',
|
||||||
|
'Walker', 'Young', 'Allen', 'King', 'Wright', 'Scott', 'Torres', 'Nguyen', 'Hill', 'Flores',
|
||||||
|
'Green', 'Adams', 'Nelson', 'Baker', 'Hall', 'Rivera', 'Campbell', 'Mitchell', 'Carter', 'Roberts',
|
||||||
|
'Turner', 'Phillips', 'Evans', 'Collins', 'Stewart', 'Morris', 'Rogers', 'Reed', 'Cook', 'Morgan',
|
||||||
|
'Bell', 'Murphy', 'Bailey', 'Cooper', 'Richardson', 'Cox', 'Howard', 'Ward', 'Peterson', 'Gray',
|
||||||
|
'James', 'Watson', 'Brooks', 'Kelly', 'Sanders', 'Price', 'Bennett', 'Wood', 'Barnes', 'Ross',
|
||||||
|
'Henderson', 'Coleman', 'Jenkins', 'Perry', 'Powell', 'Long', 'Patterson', 'Hughes', 'Flores', 'Washington'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getRandomFirstName(): string {
|
||||||
|
const categories = ['male', 'female', 'neutral']
|
||||||
|
const category = categories[Math.floor(Math.random() * categories.length)] as keyof typeof NAME_DATABASE.firstNames
|
||||||
|
const names = NAME_DATABASE.firstNames[category]
|
||||||
|
return names[Math.floor(Math.random() * names.length)] || 'Alex'
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getRandomLastName(): string {
|
||||||
|
const names = NAME_DATABASE.lastNames
|
||||||
|
return names[Math.floor(Math.random() * names.length)] || 'Smith'
|
||||||
|
}
|
||||||
14
src/account-creation/types.ts
Normal file
14
src/account-creation/types.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
export interface CreatedAccount {
|
||||||
|
email: string
|
||||||
|
password: string
|
||||||
|
birthdate: {
|
||||||
|
day: number
|
||||||
|
month: number
|
||||||
|
year: number
|
||||||
|
}
|
||||||
|
firstName: string
|
||||||
|
lastName: string
|
||||||
|
createdAt: string
|
||||||
|
referralUrl?: string
|
||||||
|
notes?: string
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user