A TypeScript-based migration tool to convert your Bundled Notes export to Microsoft To-Do task lists.
Note: This project was created with the assistance of Warp AI Agent Mode, an AI-powered development assistant integrated into the Warp terminal. Agent Mode helped with code generation, project structure, and documentation creation.
This tool parses your Bundled Notes export data and migrates it to Microsoft To-Do, converting:
- Bundles → Task Lists
- Entries → Tasks
- Tags → Task Categories
- 🔄 Complete Migration: Converts all active (non-archived) entries from your Bundled Notes export
- 📋 Smart Organization: Creates separate To-Do lists for each bundle category
- 🏷️ Tag Preservation: Maintains tag information and relationships
- 🔒 Secure Authentication: Uses Microsoft Graph API with proper OAuth2 flow
- 🚀 Simple Mode: Quick migration using access tokens from Graph Explorer
- 📊 Progress Tracking: Real-time migration progress and detailed reporting
- ⚡ Rate Limiting: Built-in delays to respect Microsoft Graph API limits
- Node.js 16+ and npm
- Microsoft account with access to Microsoft To-Do
- Bundled Notes export file
- Clone or download this repository
- Install dependencies:
npm install
The easiest way to migrate your data is using the simple mode with an access token:
- Go to Microsoft Graph Explorer
- Sign in with your Microsoft account
- Click on the "Access Token" tab
- Copy the access token
Create a .env file in the project root:
# Microsoft Graph API Configuration
AZURE_CLIENT_ID=your_client_id
AZURE_CLIENT_SECRET=your_client_secret
AZURE_TENANT_ID=your_tenant_id
# Microsoft Graph API URLs
GRAPH_API_URL=https://graph.microsoft.com/v1.0
AUTHORITY_URL=https://login.microsoftonline.com/common
# Access Token for Simple Migration
GRAPH_ACCESS_TOKEN=your_access_token_herePlace your Bundled Notes export folder in the project root. The tool expects a directory structure like:
Bundled Notes Export - YYYY-MM-DD HHMMSS/
├── bundles/
│ ├── shopping/
│ ├── books/
│ ├── videos/
│ └── ...
└── templates/
npm run simple-migrateFor production use or automated scenarios, you can set up full OAuth2 authentication:
- Go to Azure Portal
- Navigate to "Azure Active Directory" > "App registrations"
- Click "New registration"
- Configure:
- Name: "Bundled Notes Migrator"
- Supported account types: "Accounts in any organizational directory and personal Microsoft accounts"
- Redirect URI:
http://localhost:3000/auth/callback(Web)
Add these Microsoft Graph permissions:
Tasks.ReadWrite(Delegated)User.Read(Delegated)
Update your .env file with your Azure app credentials:
AZURE_CLIENT_ID=your_app_client_id
AZURE_CLIENT_SECRET=your_app_client_secret
AZURE_TENANT_ID=your_tenant_idnpm run dev -- --migratesrc/
├── api/
│ ├── microsoft-graph-client.ts # Full OAuth2 Graph API client
│ └── simple-auth.ts # Simple access token client
├── converters/
│ └── todo-converter.ts # Converts Bundled Notes to To-Do format
├── parsers/
│ └── bundled-notes-parser.ts # Parses Bundled Notes export
├── types/
│ ├── bundled-notes.ts # Bundled Notes type definitions
│ └── microsoft-todo.ts # Microsoft To-Do type definitions
├── index.ts # Main migration script (OAuth2)
└── simple-migrate.ts # Simple migration script (access token)
- Bundle Parsing: Reads all bundle directories from your export
- Entry Filtering: Excludes archived entries, processes only active ones
- Tag Resolution: Maps tag IDs to tag names and metadata
- Task Creation: Converts entries to Microsoft To-Do task format
- Authentication: Establishes connection to Microsoft Graph API
- List Management: Creates task lists for each bundle category
- Task Creation: Populates lists with converted tasks
- Error Handling: Provides detailed feedback on any failures
Bundled Notes Bundle:
{
"name": "Shopping",
"entries": [
{
"id": "entry-1",
"text": "Buy groceries",
"created": "2024-01-15T10:30:00Z",
"tags": ["urgent"],
"archived": false
}
]
}Microsoft To-Do Task:
{
"title": "Buy groceries",
"status": "notStarted",
"createdDateTime": "2024-01-15T10:30:00Z",
"body": {
"content": "Buy groceries",
"contentType": "text"
}
}The tool automatically detects and migrates these common bundle types:
- 📝 General Notes → "General" task list
- 🛒 Shopping → "Shopping" task list
- 📚 Books → "Books" task list
- 🎮 Video Games → "Video Games" task list
- 🔗 Links → "Links" task list
- 🎬 Videos → "Videos" task list
- 📅 Recurring → "Recurring" task list
| Script | Description |
|---|---|
npm run build |
Compile TypeScript to JavaScript |
npm run dev |
Run with TypeScript directly (preview mode) |
npm run dev -- --migrate |
Run full migration with OAuth2 |
npm run simple-migrate |
Run simple migration with access token |
npm start |
Run compiled JavaScript version |
Access Token Expired:
❌ Failed to connect to Microsoft Graph
- Solution: Get a new access token from Graph Explorer
Missing Bundle Export:
❌ Export path not found
- Solution: Ensure your Bundled Notes export is in the project root
Rate Limiting:
❌ Too many requests
- Solution: The tool includes automatic delays, but you may need to wait and retry
Permission Errors:
❌ Insufficient privileges
- Solution: Ensure your Azure app has proper Microsoft Graph permissions
Enable verbose logging by setting:
DEBUG=truenpm run build- Create a new converter in
src/converters/ - Implement the conversion logic
- Update the main migration script to use your converter
- Add new API clients in
src/api/ - Implement the required interface methods
- Update the migration scripts
- 🔐 Tokens: Never commit access tokens to version control
- 🔒 Environment: Use environment variables for sensitive data
- 🛡️ Permissions: Request only necessary Microsoft Graph permissions
- 📱 Scope: Access tokens have limited lifetime and scope
ISC License - See LICENSE file for details
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
For issues or questions:
- Check the troubleshooting section
- Review Microsoft Graph API documentation
- Open an issue with detailed error information
Note: This tool is designed for personal use and migration of your own Bundled Notes data. Ensure you have proper permissions for any data you're migrating.