{"id":50795397,"url":"https://github.com/ishaan-jindal/runnix","last_synced_at":"2026-06-12T14:01:59.479Z","repository":{"id":346076017,"uuid":"1136081861","full_name":"ishaan-jindal/runnix","owner":"ishaan-jindal","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-13T16:37:15.000Z","size":322,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-13T18:27:57.751Z","etag":null,"topics":["api","code-execution","isolated-execution"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ishaan-jindal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-17T03:12:13.000Z","updated_at":"2026-05-13T16:37:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ishaan-jindal/runnix","commit_stats":null,"previous_names":["sacrednightmare99/code-executor","ishaan-jindal/code-executor","ishaan-jindal/runnix"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ishaan-jindal/runnix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ishaan-jindal%2Frunnix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ishaan-jindal%2Frunnix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ishaan-jindal%2Frunnix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ishaan-jindal%2Frunnix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ishaan-jindal","download_url":"https://codeload.github.com/ishaan-jindal/runnix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ishaan-jindal%2Frunnix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34247461,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","code-execution","isolated-execution"],"created_at":"2026-06-12T14:01:58.949Z","updated_at":"2026-06-12T14:01:59.468Z","avatar_url":"https://github.com/ishaan-jindal.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Code-Executor\n\nSecure, isolated code execution service with JWT authentication, user-based rate limiting, Docker + gVisor sandbox, and comprehensive monitoring.\n\n## Endpoints\n\n### Authentication\n\n- **POST /auth/register** - Register new user\n- **POST /auth/login** - Login and get JWT tokens\n- **POST /auth/refresh** - Refresh access token\n- **GET /auth/me** - Get current user profile\n- **PATCH /auth/me** - Update email or username\n- **POST /auth/change-password** - Change password\n- **DELETE /auth/me** - Delete own account\n- **POST /auth/api-keys** - Generate API key (JWT required)\n- **GET /auth/api-keys** - List API keys\n- **DELETE /auth/api-keys/:keyId** - Revoke API key\n\n### Admin (Requires Admin Role)\n\n- **POST /admin/users/:userId/upgrade** - Upgrade user tier\n- **GET /admin/users/:userId** - View user details\n- **GET /admin/users** - List all users (paginated)\n- **POST /admin/users/:userId/make-admin** - Grant admin role\n- **POST /admin/users/:userId/revoke-admin** - Revoke admin role\n\n### Core Execution (Requires Authentication)\n\n- **POST /submit** - Submit code for execution (rate limited by tier)\n- **GET /result/:id** - Poll job result (only your jobs)\n\n### Advanced Features (Requires Authentication)\n\n- **GET /jobs/:id/code** - Retrieve code from previous submission\n- **GET /jobs** - Search job history with filters\n- **GET /languages** - List all supported languages (public)\n- **GET /languages/:lang** - Get language details (public)\n\n### Webhooks (Requires Authentication)\n\n- **POST /webhooks** - Register webhook callback\n- **GET /webhooks** - List your webhooks\n- **GET /webhooks/:id** - Get webhook details\n- **GET /webhooks/:id/deliveries** - View delivery history\n- **DELETE /webhooks/:id** - Delete webhook\n\n### Monitoring \u0026 Diagnostics  \n\n- **GET /health** - Health check with Redis connectivity\n- **GET /status** - Real-time metrics summary (JSON)\n- **GET /metrics** - Prometheus-format metrics\n\n## Quick Start\n\n```bash\n# 1. Build Docker images\ndocker build -f deployment/docker/runner-c.Dockerfile -t runner-c .\ndocker build -f deployment/docker/runner-py.Dockerfile -t runner-py .\ndocker build -f deployment/docker/runner-runtime.Dockerfile -t runner-runtime .\n\n# 2. Start Redis (if not running)\nredis-server\n\n# 3. Configure environment\ncp .env.example .env\n# Edit .env and set JWT_SECRET to a secure random value\n\n# 4. Start services\nnpm install\nnpm run dev\n\n# 5. Seed database with test users (optional)\nnpm run seed\n\n# 6. Test authentication\nnpm run test:integration:auth\n\n# 7. Run all tests\nnpm test\n```\n\n## Testing\n\n```bash\n# Run all tests (pure unit + Redis unit + integration)\nnpm test\n\n# Run pure unit tests (Node.js built-in test runner, no Redis/Server needed)\nnpm run test:unit:pure\n\n# Run all unit tests (including Redis-dependent ones)\nnpm run test:unit\n\n# Run only integration tests (requires Server and Redis)\nnpm run test:integration\n\n# Run specific test suites\nnpm run test:unit:webhooks\nnpm run test:unit:apikey\nnpm run test:integration:advanced\n```\n\nSee [docs/TESTING.md](docs/TESTING.md) for complete testing guide.\n\n## Authentication \u0026 Usage\n\n### 1. Register a User\n\n```bash\ncurl -X POST http://localhost:4000/auth/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"username\": \"johndoe\",\n    \"email\": \"john@example.com\",\n    \"password\": \"SecurePass123\"\n  }'\n```\n\nResponse includes `accessToken` (15min) and `refreshToken` (7 days).\n\n### 2. Submit Code with Authentication\n\n```bash\ncurl -X POST http://localhost:4000/submit \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n  -d '{\n    \"language\": \"python\",\n    \"code\": \"print(\\\"Hello, World!\\\")\"\n  }'\n```\n\n### 3. Rate Limiting\n\nRate limits based on user tier:\n\n- **free**: 10 requests/minute\n- **starter**: 50 requests/minute\n- **professional**: 100 requests/minute\n- **enterprise**: 500 requests/minute\n\nHeaders returned with each authenticated request:\n\n- `X-RateLimit-Limit`: Your tier's limit\n- `X-RateLimit-Remaining`: Remaining requests this minute\n- `X-RateLimit-Reset`: Unix timestamp when limit resets\n\n## Test Users \u0026 Admin Access\n\nRun the seeding script to populate the database with test users:\n\n```bash\nnpm run seed\n```\n\nThis creates:\n\n- **admin** / AdminPass123! - Admin user (enterprise tier)\n- **alice** / AlicePass123! - Free tier user\n- **bob** / BobPass123! - Starter tier user\n- **charlie** / CharliePass123! - Professional tier user\n- **diana** / DianaPass123! - Enterprise tier user\n\n### Admin Operations\n\nWith admin credentials, you can:\n\n- Upgrade user tiers\n- View user details\n- Grant/revoke admin privileges\n- View admin statistics\n\nExample:\n\n```bash\n# Login as admin\nADMIN_TOKEN=$(curl -s -X POST http://localhost:4000/auth/login \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"username\":\"admin\",\"password\":\"AdminPass123!\"}' | jq '.data.accessToken' -r)\n\n# Upgrade a user to professional tier\ncurl -X POST http://localhost:4000/admin/users/USER_ID/upgrade \\\n  -H \"Authorization: Bearer $ADMIN_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"newTier\":\"professional\"}'\n```\n\nSee [docs/API.md](docs/API.md) for complete admin API documentation.\n\n---\n\n## Monitoring Stack\n\n```bash\n# Start complete stack: Server, Redis, Prometheus, Grafana\ndocker-compose -f deployment/docker-compose.monitoring.yml up -d\n\n# Access:\n# - Code Executor: http://localhost:4000\n# - Prometheus: http://localhost:9090\n# - Grafana: http://localhost:3000 (user: admin, pass: admin)\n```\n\nSee [docs/MONITORING.md](docs/MONITORING.md) for complete guide.\n\n## Project Structure\n\n```bash\nsrc/\n├── api/                    # API layer\n│   └── routes/            # Express route handlers (auth, jobs, health)\n├── core/                  # Business logic\n│   ├── auth/             # User management, JWT utils\n│   ├── jobs/             # Job management\n│   ├── limits/           # Execution limiting\n│   ├── runner/           # Code execution\n│   └── workers/          # Worker processes\n├── infrastructure/        # Infrastructure concerns\n│   ├── logs/            # Logging\n│   ├── metrics/         # Metrics collection\n│   └── redis/           # Redis client\n├── middleware/           # Express middleware (auth, rate limiting, errors)\n└── utils/               # Utility functions\n\nconfig/                   # Configuration files\ndeployment/              # Docker \u0026 orchestration\ndocs/                    # Documentation\ntests/                   # Test suites\n```\n\n## Documentation\n\n- **[docs/API.md](docs/API.md)** - Complete API documentation with examples\n- **[docs/MONITORING.md](docs/MONITORING.md)** - Metrics, dashboards, alerting\n- **[docs/DOCKER.md](docs/DOCKER.md)** - Docker images and security\n- **[docs/TESTING.md](docs/TESTING.md)** - Testing guide and procedures\n- **[docs/ADMIN.md](docs/ADMIN.md)** - Admin features and user management\n- **[docs/ADVANCED_FEATURES.md](docs/ADVANCED_FEATURES.md)** - Webhooks, code retrieval, job search\n\n## Features\n\n✅ **Authentication \u0026 Authorization**\n\n- JWT-based authentication (access + refresh tokens)\n- API key support for programmatic access\n- User registration and login\n- Bcrypt password hashing\n- Role-based access control (user/admin)\n- User-based rate limiting by tier\n\n✅ **Security**\n\n- Docker isolation with gVisor sandbox\n- Resource limits (64MB memory, 0.5 CPU)\n- Seccomp filtering\n- User isolation (users can only access their own jobs)\n- HMAC-signed webhook deliveries\n\n✅ **Code Execution**\n\n- Python 3.12 and C (GCC 13) support\n- stdin/stdout/stderr capture\n- Timeout protection (2s default)\n- Queue-based job distribution\n- Execution metrics (compile time, run time, queue wait)\n\n✅ **Advanced Features**\n\n- Code retrieval from past submissions\n- Job search and filtering\n- Language metadata API\n- Webhook callbacks on job completion\n- Automatic webhook retry with exponential backoff\n\n✅ **Monitoring \u0026 Observability**\n\n- Comprehensive metrics collection\n- Prometheus integration\n- Grafana dashboards (11 panels)\n- Health checks and diagnostics\n- Request logging with correlation IDs\n\n✅ **Performance \u0026 Reliability**\n\n- Redis-backed persistence\n- Graceful shutdown\n- Rate limiting with sliding window\n- Comprehensive test suite (unit + integration)\n- Load testing with k6\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fishaan-jindal%2Frunnix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fishaan-jindal%2Frunnix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fishaan-jindal%2Frunnix/lists"}