AeThex-Connect/PHASE3-GAMEFORGE.md
MrPiglr 185e76c0c4
Phase 3: GameForge Integration - Auto-Provisioning & Role-Based Channels
🏗️ Database Schema
- Create gameforge_integrations table
- Add gameforge_project_id to conversations
- Create audit_logs table for operation tracking
- Add metadata and is_archived columns
- Implement indexes and triggers

🔧 Backend Services
- GameForgeIntegrationService (450+ lines)
  - Auto-provision projects and channels
  - Team member synchronization
  - Role-based permission enforcement
  - System notification delivery
  - Project archival management

🔐 Authentication & Security
- GameForge API key authentication
- HMAC-SHA256 signature validation
- Timestamp verification (5-minute window)
- Replay attack prevention
- Audit logging

🌐 API Endpoints (8 endpoints)
- POST /api/gameforge/projects - Provision project
- PATCH /api/gameforge/projects/:id/team - Update team
- DELETE /api/gameforge/projects/:id - Archive project
- GET /api/gameforge/projects/:id/channels - List channels
- POST /api/gameforge/projects/:id/channels - Create channel
- PATCH /api/gameforge/channels/:id - Update channel
- DELETE /api/gameforge/channels/:id - Delete channel
- POST /api/gameforge/projects/:id/notify - Send notification

🎨 Frontend Components
- GameForgeChat - Embedded chat container
- ChannelList - Channel navigation with icons
- ChannelView - Message display and input
- Responsive CSS with mobile support

📚 Documentation
- PHASE3-GAMEFORGE.md - Complete technical docs
- GAMEFORGE-EXAMPLES.md - Integration code samples
- API reference with request/response examples
- Testing guidelines and checklist

 Features
- Automatic channel provisioning on project creation
- Role-based channel permissions (dev, art, testing, etc.)
- System notifications (builds, commits, deployments)
- Team member sync with role updates
- Custom channel creation
- Project archival

📊 Stats
- 16 new files created
- 2 files updated
- ~2,750 lines of code
- 8 API endpoints
- 7 React components
2026-01-10 04:57:23 +00:00

549 lines
13 KiB
Markdown

# Phase 3: GameForge Integration - Complete Implementation
## Overview
Phase 3 implements automatic communication channel provisioning for GameForge projects with role-based access control. When developers create GameForge projects, AeThex Connect automatically:
- Provisions project-specific domains (e.g., `hideandseek@forge.aethex.dev`)
- Creates default communication channels (general, dev, art, etc.)
- Assigns team members based on their GameForge roles
- Manages role-based channel permissions
- Sends system notifications (build status, commits, etc.)
---
## 🏗️ Architecture
### Database Schema
**New Tables:**
- `gameforge_integrations` - Links GameForge projects to AeThex Connect
- `audit_logs` - Tracks all GameForge operations
**Extended Tables:**
- `conversations` - Added `gameforge_project_id`, `metadata`, `is_archived`
### Backend Services
**GameForge Integration Service** (`src/backend/services/gameforgeIntegration.js`)
- Project provisioning with auto-channel creation
- Team member management (add/remove/update roles)
- Channel permission enforcement
- System notification delivery
- Project archival
**Key Methods:**
- `provisionProject()` - Create project infrastructure
- `createProjectChannel()` - Create role-based channels
- `updateTeamMembers()` - Sync team changes
- `archiveProject()` - Archive all project channels
- `sendNotification()` - Send system messages
### API Endpoints
**GameForge Webhooks** (`/api/gameforge/*`)
| Endpoint | Method | Auth | Description |
|----------|--------|------|-------------|
| `/projects` | POST | GameForge | Provision new project |
| `/projects/:id/team` | PATCH | GameForge | Update team members |
| `/projects/:id` | DELETE | GameForge | Archive project |
| `/projects/:id/channels` | GET | User | List project channels |
| `/projects/:id/channels` | POST | User | Create custom channel |
| `/channels/:id` | PATCH | User | Update channel settings |
| `/channels/:id` | DELETE | User | Archive channel |
| `/projects/:id/notify` | POST | GameForge | Send system notification |
### Frontend Components
**GameForgeChat Component** (`src/frontend/components/GameForgeChat/`)
- Embedded chat interface for GameForge projects
- Channel list with icons and unread badges
- System notification display
- Can be embedded via iframe or direct integration
**Components:**
- `index.jsx` - Main chat container
- `ChannelList.jsx` - Sidebar with channel navigation
- `ChannelView.jsx` - Message view and input
- CSS files for styling
---
## 🔧 Implementation Details
### 1. Database Migration
**File:** `supabase/migrations/20260110130000_gameforge_integration.sql`
Run in Supabase Dashboard SQL Editor:
```sql
-- Creates gameforge_integrations table
-- Adds gameforge_project_id to conversations
-- Creates audit_logs table
-- Adds indexes and triggers
```
### 2. Authentication
**GameForge API Authentication** (`src/backend/middleware/gameforgeAuth.js`)
Validates requests from GameForge using:
- API Key verification
- HMAC-SHA256 signature validation
- Timestamp verification (prevents replay attacks)
**Headers Required:**
```javascript
{
'X-GameForge-API-Key': 'your-api-key',
'X-GameForge-Signature': 'hmac-sha256-signature',
'X-GameForge-Timestamp': '1704902400000'
}
```
### 3. Role-Based Permissions
**Default Channel Permissions:**
| Channel | Accessible By |
|---------|--------------|
| general | All team members |
| announcements | All team members |
| dev | Owner, Developers |
| art | Owner, Artists |
| design | Owner, Designers |
| testing | Owner, Testers, Developers |
| playtesting | All team members |
Custom channels can define their own permission sets.
### 4. System Notifications
**Notification Types:**
- `build` - Build completion/failure
- `commit` - Code commits
- `deployment` - Deployment status
- `playtesting` - Playtester feedback
- Custom types
**Example Notification:**
```javascript
{
channelName: 'dev',
type: 'build',
title: 'Build #142 Completed',
message: 'Build completed successfully in 3m 24s',
metadata: {
buildNumber: 142,
status: 'success',
duration: 204,
commitHash: 'a7f3c9d'
},
actions: [
{
label: 'View Build',
url: 'https://gameforge.aethex.dev/projects/hideandseek/builds/142'
}
]
}
```
---
## 🔗 GameForge Integration
### In GameForge Codebase
#### 1. Project Creation Hook
```javascript
// GameForge: src/services/projectService.js
async function createProject(projectData, userId) {
const project = await db.projects.create({
name: projectData.name,
owner_id: userId
});
// Provision AeThex Connect channels
const connectResponse = await fetch('https://connect.aethex.app/api/gameforge/projects', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-GameForge-API-Key': process.env.AETHEX_CONNECT_API_KEY,
'X-GameForge-Signature': generateSignature(projectData),
'X-GameForge-Timestamp': Date.now().toString()
},
body: JSON.stringify({
projectId: project.id,
name: project.name,
ownerId: userId,
ownerIdentifier: await getUserIdentifier(userId),
teamMembers: [],
settings: {
autoProvisionChannels: true,
defaultChannels: ['general', 'dev', 'art']
}
})
});
return project;
}
```
#### 2. Team Member Management
```javascript
// Add team member
await fetch(`https://connect.aethex.app/api/gameforge/projects/${projectId}/team`, {
method: 'PATCH',
headers: { /* auth headers */ },
body: JSON.stringify({
action: 'add',
members: [{
userId: 'user-2',
identifier: 'dev2@dev.aethex.dev',
role: 'developer'
}]
})
});
// Remove team member
await fetch(`https://connect.aethex.app/api/gameforge/projects/${projectId}/team`, {
method: 'PATCH',
headers: { /* auth headers */ },
body: JSON.stringify({
action: 'remove',
members: [{ userId: 'user-2' }]
})
});
```
#### 3. System Notifications
```javascript
// Send build notification
await fetch(`https://connect.aethex.app/api/gameforge/projects/${projectId}/notify`, {
method: 'POST',
headers: { /* auth headers */ },
body: JSON.stringify({
channelName: 'dev',
type: 'build',
title: 'Build #142 Completed',
message: 'Build completed successfully in 3m 24s',
metadata: {
buildNumber: 142,
status: 'success',
duration: 204
}
})
});
```
#### 4. Signature Generation
```javascript
const crypto = require('crypto');
function generateSignature(payload) {
const timestamp = Date.now().toString();
const data = JSON.stringify(payload);
const signature = crypto
.createHmac('sha256', process.env.AETHEX_CONNECT_API_SECRET)
.update(`${timestamp}.${data}`)
.digest('hex');
return signature;
}
```
---
## 🚀 Usage
### 1. Environment Variables
Add to `.env`:
```bash
# GameForge Integration
GAMEFORGE_API_KEY=your-api-key-here
GAMEFORGE_API_SECRET=your-api-secret-here
```
### 2. Database Setup
Run migration in Supabase:
```bash
# Copy migration to Supabase dashboard and execute
cat supabase/migrations/20260110130000_gameforge_integration.sql
```
### 3. Embed Chat in GameForge
**Option A: Direct Integration**
```javascript
import GameForgeChat from '@aethex/connect/components/GameForgeChat';
function ProjectPage({ projectId }) {
return (
<div>
<h1>My Game Project</h1>
<GameForgeChat projectId={projectId} />
</div>
);
}
```
**Option B: Iframe Embed**
```html
<iframe
src="https://connect.aethex.app/gameforge/project/PROJECT_ID/chat"
width="100%"
height="600px"
frameborder="0"
></iframe>
```
---
## 🧪 Testing
### Manual Test Flow
1. **Create Project**
- Call POST `/api/gameforge/projects` with project data
- Verify channels are created
- Check domain is provisioned
2. **Add Team Member**
- Call PATCH `/api/gameforge/projects/:id/team` with action: 'add'
- Verify member added to appropriate channels
- Check permissions enforced
3. **Send Notification**
- Call POST `/api/gameforge/projects/:id/notify`
- Verify message appears in correct channel
- Check formatting and metadata
4. **Test Permissions**
- Login as artist
- Verify cannot access dev channel
- Verify can access art and general channels
### Integration Test
```javascript
// tests/gameforge-integration.test.js
describe('GameForge Integration', () => {
test('should provision project with channels', async () => {
const response = await provisionProject({
projectId: 'test-project',
name: 'Test Project',
ownerId: 'user-1',
settings: {
defaultChannels: ['general', 'dev']
}
});
expect(response.integration.channels).toHaveLength(2);
expect(response.integration.domain).toBe('test-project@forge.aethex.dev');
});
test('should enforce role-based permissions', async () => {
await addTeamMember({
projectId: 'test-project',
userId: 'user-2',
role: 'artist'
});
const channels = await getProjectChannels('test-project', 'user-2');
expect(channels.find(c => c.name === 'general')).toBeDefined();
expect(channels.find(c => c.name === 'art')).toBeDefined();
expect(channels.find(c => c.name === 'dev')).toBeUndefined();
});
});
```
---
## 📊 Performance Considerations
### Database Indexes
All critical queries are indexed:
- `gameforge_integrations.project_id`
- `conversations.gameforge_project_id`
- `conversations.is_archived`
- `audit_logs` (user_id, created_at, resource)
### Caching Strategy
Consider caching:
- Project channel lists (TTL: 5 minutes)
- Team member roles (TTL: 10 minutes)
- Channel permissions (TTL: 15 minutes)
### Scaling
For high-volume projects:
- Use Redis pub/sub for system notifications
- Implement message queue for bulk operations
- Add read replicas for channel list queries
---
## 🔒 Security
### API Authentication
- HMAC-SHA256 signature validation
- Timestamp verification (5-minute window)
- API key rotation support
- Rate limiting on all endpoints
### Channel Security
- Role-based access control enforced at DB level
- Participant verification before message send
- Audit logging for all operations
- Encrypted messages (except system notifications)
---
## 📝 API Documentation
### Provision Project
**POST** `/api/gameforge/projects`
**Headers:**
```
X-GameForge-API-Key: your-api-key
X-GameForge-Signature: hmac-sha256-signature
X-GameForge-Timestamp: 1704902400000
```
**Request:**
```json
{
"projectId": "project-uuid",
"name": "Hide and Seek Extreme",
"ownerId": "user-uuid",
"ownerIdentifier": "anderson@dev.aethex.dev",
"teamMembers": [
{
"userId": "user-1",
"identifier": "developer1@dev.aethex.dev",
"role": "developer"
}
],
"settings": {
"autoProvisionChannels": true,
"defaultChannels": ["general", "dev", "art"]
}
}
```
**Response:**
```json
{
"success": true,
"integration": {
"projectId": "project-uuid",
"domain": "hideandseek@forge.aethex.dev",
"channels": [
{
"id": "channel-uuid-1",
"name": "general",
"identifier": "general@hideandseek.forge.aethex.dev",
"description": "General project discussion",
"permissions": ["all"]
}
],
"createdAt": "2026-01-09T12:00:00Z"
}
}
```
---
## 🎯 Features Implemented
✅ Automatic project provisioning
✅ Role-based channel access
✅ Team member synchronization
✅ System notification delivery
✅ Custom channel creation
✅ Project archival
✅ Audit logging
✅ Embedded chat component
✅ HMAC signature authentication
✅ Permission enforcement
---
## 🔮 Future Enhancements
### Phase 3.1 - Advanced Features
- [ ] Voice channels for team meetings
- [ ] Screen sharing integration
- [ ] Code snippet previews in chat
- [ ] Automated PR notifications
- [ ] Issue tracker integration
### Phase 3.2 - Analytics
- [ ] Channel activity metrics
- [ ] Team collaboration analytics
- [ ] Message sentiment analysis
- [ ] Engagement tracking
### Phase 3.3 - Automation
- [ ] Chatbots for common tasks
- [ ] Automated status updates
- [ ] Smart notification routing
- [ ] AI-powered message summaries
---
## 📚 Related Documentation
- [Phase 1: Domain Verification](./PHASE1-DOMAIN.md)
- [Phase 2: Messaging System](./PHASE2-MESSAGING.md)
- [GameForge API Documentation](https://docs.gameforge.aethex.dev)
- [AeThex Connect API Reference](./API-REFERENCE.md)
---
## 🤝 Contributing
When adding GameForge integration features:
1. Update database schema with migrations
2. Add service methods with comprehensive error handling
3. Implement API endpoints with proper authentication
4. Create frontend components with loading/error states
5. Write integration tests
6. Update this documentation
---
## 📞 Support
For issues or questions:
- GitHub Issues: [AeThex-Corporation/AeThex-Connect](https://github.com/AeThex-Corporation/AeThex-Connect/issues)
- Email: support@aethex.dev
- Discord: [AeThex Community](https://discord.gg/aethex)
---
**Phase 3 Complete**
*Auto-provisioned communication for GameForge projects with role-based access*