CleanSend is a TypeScript implementation of the OpenMsg Protocol, a secure, decentralized messaging system that enables encrypted communication between users across different domains and servers. This package is published on npm and ready for production deployment.
# Install the published package
npm install cleansend
# Or install globally
npm install -g cleansend
# Clone the repository
git clone https://github.com/Keshara1997/CleanSend.git
cd CleanSend
# Install dependencies
npm install
# Build the project
npm run build
# Start the server
npm start
# Or for development with auto-reload
npm run dev
- End-to-End Encryption: AES-256-GCM authenticated encryption with unique keys per connection
- Cross-Domain Messaging: Secure communication between users on different OpenMsg servers
- Handshake Protocol: Pass code-based authentication for connection establishment
- Message Verification: SHA-256 hash verification with replay attack prevention
- Sandbox Mode: Development and testing environment support
- Database-Driven: MySQL backend with connection pooling
- Type Safety: Full TypeScript implementation with comprehensive type definitions
- Security Headers: Helmet.js integration for enhanced security
- API Monitoring: Health check endpoints and request logging
- Production Ready: Published npm package with proper versioning
- express
^4.21.2
- Fast, unopinionated web framework for Node.js - mysql2
^3.6.5
- MySQL client with prepared statements and connection pooling - bcrypt
^5.1.1
- Password hashing with adaptive salt rounds - axios
^1.6.2
- HTTP client for server-to-server communication - helmet
^7.1.0
- Security middleware with various HTTP headers - cors
^2.8.5
- Cross-Origin Resource Sharing middleware - dotenv
^16.3.1
- Environment variable management
- typescript
^5.3.2
- TypeScript compiler and language support - ts-node-dev
^2.0.0
- Development server with hot reload - ts-node
^10.9.1
- TypeScript execution environment - @types/* - TypeScript type definitions for all dependencies
- rimraf
^5.0.5
- Cross-platform rm -rf utility
βββββββββββββββββββ HTTPS/REST βββββββββββββββββββ
β OpenMsg β βββββββββββββββ β OpenMsg β
β Server A β β Server B β
β (CleanSend) β β (CleanSend) β
βββββββββββββββββββ βββββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ
β MySQL β β MySQL β
β Database β β Database β
βββββββββββββββββββ βββββββββββββββββββ
- Node.js 18+
- MySQL 8.0+
- npm or yarn
-
Install CleanSend
npm install cleansend
-
Create configuration file
# Create .env file in your project root touch .env
-
Configure environment variables
# Server Configuration OPENMSG_DOMAIN=your-domain.com PORT=3000 NODE_ENV=development SANDBOX=true # Database Configuration DB_HOST=localhost DB_USER=openmsg_user DB_PASSWORD=your_password DB_NAME=openmsg_db
-
Initialize and start
# Setup database (first time only) npx cleansend setup # Start the server npx cleansend start # Or for development with auto-reload npx cleansend dev
-
Clone the repository
git clone https://github.com/your-username/CleanSend.git cd CleanSend
-
Install dependencies
npm install
-
Configure environment
cp .env.example .env # Edit .env with your configuration
-
Environment Variables
# Server Configuration OPENMSG_DOMAIN=your-domain.com PORT=3000 NODE_ENV=development SANDBOX=true # Database Configuration DB_HOST=localhost DB_USER=openmsg_user DB_PASSWORD=your_password DB_NAME=openmsg_db
-
Initialize Database
npm run setup
-
Start the server
# Development mode with auto-reload npm run dev # Production mode npm start
The OpenMsg protocol uses several database tables:
openmsg_users
- User accounts and credentialsopenmsg_user_connections
- Established connections with encryption keysopenmsg_handshakes
- Temporary handshake records for authenticationopenmsg_passCodes
- One-time pass codes for authorizationopenmsg_messages_inbox
- Received messagesopenmsg_messages_outbox
- Pending message confirmationsopenmsg_messages_sent
- Confirmed sent messages
sequenceDiagram
participant A as User A ([email protected])
participant SA as Server A
participant SB as Server B
participant B as User B ([email protected])
B->>SB: Generate pass code
SB-->>B: Pass code: 123456
A->>SA: Connect to [email protected] with code 123456
SA->>SA: Create handshake record
SA->>SB: POST /auth (with pass code)
SB->>SB: Validate pass code
SB->>SA: POST /auth/confirm (verify handshake)
SA-->>SB: Confirmation response
SB->>SB: Generate encryption keys
SB-->>SA: Connection credentials
SA->>SA: Store connection
sequenceDiagram
participant A as User A
participant SA as Server A
participant SB as Server B
participant B as User B
A->>SA: Send message "Hello Bob"
SA->>SA: Encrypt message with connection key
SA->>SA: Create verification hash
SA->>SB: POST /message/receive (encrypted package)
SB->>SB: Verify hash and decrypt
SB->>SA: POST /message/confirm (verify origin)
SA-->>SB: Confirmation response
SB->>SB: Store in inbox
SB-->>SA: Success response
POST /openmsg/auth
- Authentication requestsPOST /openmsg/auth/confirm
- Authentication confirmationPOST /openmsg/message/receive
- Receive encrypted messagesPOST /openmsg/message/confirm
- Confirm message authenticityGET /openmsg/info
- Protocol information
POST /openmsg/setup/initiate-handshake
- Start connection with another userPOST /openmsg/setup/send-message
- Send message to connected userPOST /openmsg/setup/request-pass-code
- Generate authentication pass code
GET /health
- Health check and server statusGET /
- Basic server information
- AES-256-GCM authenticated encryption for messages
- Unique encryption keys per user connection
- Random nonces for each message to prevent replay attacks
- Pass code system with 1-hour expiration
- Cross-domain verification to prevent spoofing
- Connection-based authorization for message sending
- SHA-256 hashing with auth codes and timestamps
- Message confirmation between servers
- Replay attack prevention with timestamp validation
# Type checking
npm run typecheck
# Build project
npm run build
# Start development server
npm run dev
# Clean build directory
npm run clean
-
Generate a pass code
curl -X POST http://localhost:3000/openmsg/setup/request-pass-code \ -H "Content-Type: application/json" \ -d '{"self_openmsg_address": "1000001*your-domain.com"}'
-
Initiate handshake
curl -X POST http://localhost:3000/openmsg/setup/initiate-handshake \ -H "Content-Type: application/json" \ -d '{ "other_openmsg_address": "1000002*other-domain.com", "pass_code": "123456" }'
-
Send message
curl -X POST http://localhost:3000/openmsg/setup/send-message \ -H "Content-Type: application/json" \ -d '{ "message_text": "Hello OpenMsg!", "sending_openmsg_address": "1000001*your-domain.com", "receiving_openmsg_address": "1000002*other-domain.com" }'
CleanSend/
βββ src/
β βββ config/ # Configuration files
β β βββ database.ts # Database connection and pooling
β β βββ settings.ts # Environment variable handling
β βββ setup/ # Route handlers
β β βββ auth.ts # Authentication endpoints
β β βββ messages.ts # Message handling endpoints
β β βββ setup.ts # Testing and admin endpoints
β βββ type/ # TypeScript type definitions
β β βββ index.ts # All protocol interfaces and types
β βββ utils/ # Utility functions
β β βββ crypto.ts # Cryptographic functions
β βββ server.ts # Main application entry point
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
βββ LICENSE # ISC License
βββ README.md # This file
- Package Name:
cleansend
- Version:
1.0.1
- Author: Keshara1997
- License: ISC
- Repository: GitHub
- Keywords: cleansend, messaging, secure, protocol, typescript
npm run build # Compile TypeScript to JavaScript
npm run start # Build and start production server
npm run dev # Start development server with hot reload
npm run setup # Initialize database and setup
npm run watch # Watch for changes and rebuild
npm run clean # Remove build directory
npm run typecheck # Run TypeScript type checking
# Install globally for system-wide use
npm install -g cleansend
# Or locally in your project
npm install cleansend
# Set production environment
export NODE_ENV=production
export SANDBOX=false
# Start production server
cleansend start
NODE_ENV=production
SANDBOX=false
OPENMSG_DOMAIN=your-production-domain.com
PORT=443
DB_HOST=your-db-host
DB_USER=production_user
DB_PASSWORD=secure_password
The OpenMsg protocol requires HTTPS for security. Configure your reverse proxy (nginx, Apache) or use a service like Cloudflare.
- Enable MySQL query caching
- Configure appropriate connection pool sizes
- Regular database maintenance and monitoring
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
- Follow TypeScript best practices
- Maintain 100% type safety
- Add tests for new features
- Update documentation for API changes
- Use conventional commit messages
This project is licensed under the ISC License - see the LICENSE file for details.
- NPM Package
- OpenMsg Protocol Specification
- TypeScript Documentation
- Express.js Guide
- MySQL 8.0 Reference
For questions and support:
- Create an issue on GitHub
- Check the documentation
- Review the code comments for implementation details
- Visit the npm package page
Built with β€οΈ using TypeScript, Express.js, and MySQL | Published on npm