A comprehensive Node.js integration platform for managing third-party service connections and feature mappings.
This platform enables users to:
- Connect to third-party services (Salesforce, Freshdesk, Google Sheets, etc.)
- Manage multiple connections per integration with custom names
- Configure reusable feature templates
- Map features to integrations with custom handlers and fields
- Execute actions with proper authentication and data transformation
- Node.js 14+
- Elasticsearch 7+
- npm or yarn
# Install dependencies
npm install
# Set environment variables
cp .env.example .env
# Edit .env and set ENCRYPTION_KEY
# Start Elasticsearch (if not running)
# Start the server
npm startServer runs on http://localhost:3000
- Visit
http://localhost:3000 - Browse available integrations
- Create a connection to an integration
- Configure feature mappings (optional)
- Use the connection in your workflows
- Create, read, update, delete user connections
- Multiple connections per integration (e.g., "Production", "Sandbox")
- Encrypted credential storage (AES-256)
- Connection testing and health monitoring
- Browse 50+ available integrations
- Category filtering (CRM, Payment, Email, etc.)
- Visual logos and descriptions
- Connection status indicators
- Reusable feature definitions (Create Contact, Send Email, etc.)
- Four field types: Static, Dynamic, Conditional, API
- Rich validation and configuration options
- Category-based organization
- Map feature templates to specific integrations
- Custom field configurations and handlers
- Admin vs User fill modes
- Extra integration-specific fields
- Professional table-based UI
- OAuth 2.0 (Authorization Code, Client Credentials)
- API Key (Header, Query, Custom)
- Basic Authentication
- Custom authentication methods per integration
/
├── server.js # Express server (main entry point)
├── lib/
│ ├── elasticsearch.js # Database operations
│ └── encryption.js # Credential encryption/decryption
├── public/
│ ├── *.html # All HTML pages
│ ├── js/ # Frontend JavaScript
│ │ ├── connect-integration.js # Connection wizard
│ │ ├── my-connections.js # Connections dashboard
│ │ ├── feature-templates.js # Feature management
│ │ ├── feature-integration-mapping.js # Mapping wizard
│ │ └── integration-detail.js # Integration details
│ ├── css/ # Stylesheets
│ └── assets/ # Static assets
├── views/ # EJS templates
│ ├── integration-detail.ejs # Integration detail page
│ └── feature-integration-mapping.ejs # Mapping wizard
├── integrations/
│ └── providers/ # Integration definitions
│ └── {id}/
│ ├── auth.schema.json # Auth configuration
│ └── features.schema.json # Feature mappings
├── features-definition.json # Feature templates storage
├── auth-types-definition.json # Global auth types
├── panel-config.json # UI panel configuration
├── docs/ # Documentation
│ ├── FEATURE-MAPPING-SYSTEM.md # Feature mapping guide
│ ├── FIELD-TYPES-AND-HANDLERS.md # Field types guide
│ ├── USER-CONNECTION-MANAGEMENT.md # Connection system docs
│ ├── CONNECTION-WIZARD.md # Wizard implementation
│ ├── MY-CONNECTIONS-PAGE.md # Dashboard docs
│ ├── API-ENDPOINTS.md # API reference
│ └── ... # More documentation
└── elasticsearch/ # ES index mappings
├── users-mapping.json
├── integrations-mapping.json
└── user_integrations-mapping.json
Third-party services like Salesforce, Freshdesk, Google Sheets. Each integration has:
- Metadata (name, description, category, logo)
- Authentication schema (auth methods, credentials, variables)
- Feature mappings (optional, configured by admin)
User-specific connections to integrations. Each connection has:
- Custom name (e.g., "Production Salesforce")
- Selected auth method
- Configured dynamic variables
- Encrypted credentials
- Test status and history
Reusable definitions for common operations. Each template has:
- Generic field definitions
- Field types (static, dynamic, conditional, api)
- Validation rules
- Categorization
Integration-specific configurations of feature templates. Each mapping has:
- Field enable/disable settings
- Custom handlers (transform, validate, submit)
- Admin-configured values
- Extra integration-specific fields
- API endpoint configuration
Static: Fixed configuration fields
{
"type": "static",
"label": "Priority",
"htmlType": "select",
"possibleValues": ["low", "medium", "high"]
}Dynamic: Runtime-fetched fields
{
"type": "dynamic",
"label": "Project",
"htmlType": "select"
// Options fetched from API at runtime
}Conditional: Context-dependent fields
{
"type": "conditional",
"label": "Webhook URL",
"conditionalExpression": "{{notifications}}==true"
}API: API configuration fields
{
"type": "api",
"label": "Custom Endpoint"
// Shows "API Settings" button in UI
}Admin: Value set during setup
- Configured in mapping wizard
- Saved in
adminValue - Same for all users
- Examples: API keys, default settings
User: Value set at runtime
- Prompted when executing action
- Not stored in mapping
- Different per execution
- Examples: Contact email, task description
Value Handler: Transform field values
function capitalizeFirstName(value) {
return value.charAt(0).toUpperCase() + value.slice(1);
}Validation Handler: Validate field values
function validateEmailFormat(value) {
const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return regex.test(value) ? true : "Invalid email format";
}Submit Handler: Process before API call
function encryptSensitiveData(value) {
return encrypt(value, SECRET_KEY);
}GET /api/users- List all usersPOST /api/users- Create userGET /api/users/:id- Get userPUT /api/users/:id- Update user
GET /api/integrations- List all integrationsPOST /api/integrations- Create integrationGET /api/integrations/:id- Get integrationPUT /api/integrations/:id- Update integration
GET /api/users/:userId/integrations- List user connectionsPOST /api/users/:userId/integrations- Create connectionGET /api/users/:userId/integrations/:integrationId- Get connectionPUT /api/users/:userId/integrations/:integrationId- Update connectionDELETE /api/users/:userId/integrations/:integrationId- Delete connectionPOST /api/users/:userId/integrations/:integrationId/test- Test connection
GET /api/feature-templates- List all templatesPOST /api/feature-templates- Create templateGET /api/feature-templates/:id- Get templatePUT /api/feature-templates/:id- Update templateDELETE /api/feature-templates/:id- Delete template
GET /api/integrations/:id/feature-mappings- List mappingsPOST /api/integrations/:id/feature-mappings- Create mappingPUT /api/integrations/:id/feature-mappings/:mappingId- Update mappingDELETE /api/integrations/:id/feature-mappings/:mappingId- Delete mapping
Complete API documentation: docs/API-ENDPOINTS.md
| Page | Path | Purpose |
|---|---|---|
| Dashboard | / |
User dashboard |
| Integrations | /integrations |
Browse integrations marketplace |
| My Connections | /my-connections |
Manage user connections |
| Connect Wizard | /connect-integration |
Create/edit connections |
| Integration Detail | /integration-detail/{id} |
View integration details and mappings |
| Feature Templates | /feature-templates |
Manage feature templates (admin) |
| Feature Mapping | /feature-integration-mapping |
Create/edit feature mappings |
- Node.js + Express.js - REST API server
- Elasticsearch - NoSQL database
- Crypto (AES-256) - Credential encryption
- Vanilla JavaScript - No frameworks
- HTML5 + CSS3 - Modern responsive UI
- EJS - Server-side templating (for some pages)
- Fetch API - AJAX requests
- AES-256-CBC encryption for credentials
- Environment-based encryption keys
- Password field masking
- Input validation (frontend + backend)
- Soft delete (data preservation)
Comprehensive documentation available in docs/ folder:
README.md- Documentation indexFILES-OVERVIEW.md- File structure guide
USER-CONNECTION-MANAGEMENT.md- Connection systemCONNECTION-WIZARD.md- Wizard implementationMY-CONNECTIONS-PAGE.md- Dashboard detailsFEATURE-TEMPLATES.md- Feature templates guideFEATURE-MAPPING-SYSTEM.md- Mapping system guideFIELD-TYPES-AND-HANDLERS.md- Field types reference
API-ENDPOINTS.md- Complete API referenceELASTICSEARCH-SCHEMA.md- Database schemaAUTH-STRUCTURE-README.md- Authentication systemPANEL_CONFIG_GUIDE.md- UI configurationDYNAMIC_VARIABLES.md- Dynamic variables system
# Start with nodemon (auto-restart)
npm run dev
# Start normally
npm start- Event Delegation: Single listener on parent for dynamic elements
- Wizard State: Global state object for multi-step forms
- Smart Password Handling: Never pre-fill, preserve if empty on edit
- URL Parameters: Pass data between pages via query strings
- Toast Notifications: User feedback for all actions
- Modal System: Overlays for detailed views
- Create folder:
integrations/providers/{integration-id}/ - Add
auth.schema.jsonwith authentication configuration - (Optional) Add
features.schema.jsonfor feature mappings - Add integration to Elasticsearch
integrationsindex - Test connection and feature mappings
- Visit
/feature-templates - Click "Create New Feature Template"
- Define fields with types, validation, possible values
- Set category and description
- Save template
- Map to integrations as needed
# Required
ENCRYPTION_KEY=your-32-character-encryption-key
# Optional
PORT=3000
ELASTICSEARCH_URL=http://localhost:9200# Run test scripts
npm test
# Test specific integration
node test-scripts/test-integration.js- Follow existing code conventions
- Add documentation for new features
- Test thoroughly before committing
[Add your license here]
For questions or issues:
- Check documentation in
docs/folder - Review API endpoints in
docs/API-ENDPOINTS.md
Last Updated: 2025-11-26 Version: 1.0.0