UNPKG

peerpigeon

Version:

WebRTC-based peer-to-peer mesh networking library with intelligent routing and signaling server

188 lines (136 loc) 5.76 kB
# Custom Hub Network Namespace Feature - Implementation Summary ## Overview Added support for custom hub network namespaces with a default fallback to `pigeonhub-mesh`. This allows deployments to isolate different hub networks while maintaining backward compatibility. ## Changes Made ### 1. Core Server Configuration (`server/index.js`) **Modified:** Constructor to accept `hubMeshNamespace` option - Added `options.hubMeshNamespace` parameter with default value `'pigeonhub-mesh'` - Changed from hardcoded string to configurable option - Maintains backward compatibility (defaults to existing behavior) ```javascript // Before: this.hubMeshNamespace = 'pigeonhub-mesh'; // After: this.hubMeshNamespace = options.hubMeshNamespace || 'pigeonhub-mesh'; ``` ### 2. Server Startup Scripts #### `server/start.js` - Added `HUB_MESH_NAMESPACE` environment variable support - Passes namespace to PeerPigeonServer constructor - Updated documentation comment #### `scripts/start-hub.js` - Added `HUB_MESH_NAMESPACE` environment variable support - Displays custom namespace message when non-default value is used - Updated usage documentation in header comment #### `scripts/start-hub-network.js` - Added `HUB_MESH_NAMESPACE` environment variable support - Passes namespace to all hubs (bootstrap and secondary) - Displays namespace in configuration output ### 3. Documentation Updates #### New Documentation - **`docs/CUSTOM_HUB_NAMESPACES.md`** - Complete guide for custom namespaces - Overview and use cases - Configuration methods (env vars and programmatic) - Important considerations - Best practices - Troubleshooting guide #### Updated Documentation - **`docs/HUB_SYSTEM.md`** - Updated Hub Namespace section - Added configuration examples showing custom namespaces - Documented the hubMeshNamespace option - **`docs/HUB_SCRIPTS.md`** - Added HUB_MESH_NAMESPACE to environment variables section - Added example usage - Updated both start-hub.js and start-hub-network.js documentation - **`docs/HUB_QUICK_REF.md`** - Updated default configuration section - Added note about configurability - **`docs/API_DOCUMENTATION.md`** - Added `hubMeshNamespace` parameter to PeerPigeonServer constructor docs - Added explanation note about namespace consistency - **`docs/README.md`** - Added link to Custom Hub Namespaces guide - **`examples/hub-example.js`** - Updated comments to mention configurability - Added note about custom namespaces ### 4. Testing Created `test/test-custom-namespace.js` to verify: - Default namespace behavior (backward compatibility) - Custom namespace via constructor option - Environment variable support - Regular server namespace configuration All tests pass successfully. ## Backward Compatibility ✅ **Fully backward compatible** - All existing code continues to work without changes: - Default namespace is still `'pigeonhub-mesh'` - No breaking changes to API - Existing hubs will continue to work without modification ## Usage Examples ### Environment Variable (Recommended) ```bash # Start a single hub with custom namespace HUB_MESH_NAMESPACE=production-mesh npm run hub # Start a hub network with custom namespace HUB_MESH_NAMESPACE=staging-mesh node scripts/start-hub-network.js # Multiple environments HUB_MESH_NAMESPACE=dev-mesh PORT=3000 npm run hub & HUB_MESH_NAMESPACE=prod-mesh PORT=4000 npm run hub & ``` ### Programmatic Configuration ```javascript import { PeerPigeonServer } from './server/index.js'; const hub = new PeerPigeonServer({ port: 3000, isHub: true, hubMeshNamespace: 'my-custom-mesh' }); await hub.start(); ``` ## Key Features 1. **Default Fallback** - Uses `pigeonhub-mesh` if not specified 2. **Environment Variable Support** - Easy deployment configuration 3. **Programmatic API** - Full control via constructor options 4. **Consistent Configuration** - All hubs must use same namespace 5. **Complete Documentation** - Comprehensive guides and examples ## Important Notes ⚠️ **All hubs in the same network must use the same namespace** to discover and connect to each other. ✅ **Use consistent naming** - Keep namespace consistent across all hubs in a deployment. ✅ **Document your namespaces** - Maintain a record of which namespaces are used where. ## Files Modified 1. `server/index.js` - Core server configuration 2. `server/start.js` - Standalone server startup 3. `scripts/start-hub.js` - Single hub startup script 4. `scripts/start-hub-network.js` - Hub network startup script 5. `docs/HUB_SYSTEM.md` - Hub system documentation 6. `docs/HUB_SCRIPTS.md` - Hub scripts documentation 7. `docs/HUB_QUICK_REF.md` - Quick reference guide 8. `docs/API_DOCUMENTATION.md` - API reference 9. `docs/README.md` - Documentation index 10. `examples/hub-example.js` - Hub example code ## Files Created 1. `docs/CUSTOM_HUB_NAMESPACES.md` - Comprehensive namespace guide 2. `test/test-custom-namespace.js` - Feature verification tests ## Testing Run the test to verify the implementation: ```bash node test/test-custom-namespace.js ``` All tests pass, confirming: - ✅ Default namespace works - ✅ Custom namespaces via constructor work - ✅ Environment variable support works - ✅ Regular servers support custom namespaces ## Migration Path For existing deployments: 1. **No action required** - Default behavior unchanged 2. To use custom namespaces: - Set `HUB_MESH_NAMESPACE` environment variable - Or pass `hubMeshNamespace` in constructor options - Ensure all hubs use the same namespace ## Future Enhancements Possible future improvements: - Hub discovery across multiple namespaces - Namespace-based access controls - Dynamic namespace switching - Namespace registry and management API