Refactor server.js (647 → 99 lines) into 30+ modules under src/: - auth/: JWKS validation, JWT middleware, OAuth client_credentials - routes/v1/: jobs (POST/GET/:id) + promote with input validation - routes/legacy.js: existing /jobs multipart path (backward compatible) - services/: jobService, healthService, sseService, statusMapper, doneListener - middleware/: requestId, errorHandler, perClientRateLimit, uploadConcurrency, upload (multer + storage) - redis/: Lua scripts for atomic claim/release_active_job - storage/: local + minio adapters; fileAccessAgent/: PUT promote client - config.js: env var validation with fail-fast Phase 1 features (T1–T11): - T1 Auth middleware + JWKS (Member Center OAuth2 resource server) - T2 OAuth client (Member Center client_credentials, Basic auth) - T3 /api/v1/* router skeleton - T4 server.js refactor (legacy endpoints fully preserved, real-Redis regression verified — existing worker consumer group untouched) - T5 POST /api/v1/jobs (multipart, OWASP-audited, 2 Critical / 6 Major fixed; Risk-A/B documented as accepted) - T6 GET /api/v1/jobs + GET /:id (cursor pagination, ETag, IDOR-safe) - T7 POST /jobs/:id/promote (FAA PUT with own service token, 300s timeout, fail-fast on missing FAA URL) - T8 /health upgrade (healthy/degraded/unhealthy + 30s background cache) - T9 stage_timings (release_active_job in terminal states) - T10 env + Docker integration (MULTIPART_* + concurrency limiter) - T11 README (498 lines) + OpenAPI 3.0 spec (1588 lines) Tests: 630 pass across 29 suites. Updated Dockerfile + .dockerignore + docker-compose.yml env passthrough (no hardcoded secrets, fail-fast on missing required vars). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
39 lines
851 B
JSON
39 lines
851 B
JSON
{
|
|
"name": "kneron-task-scheduler",
|
|
"version": "2.0.0",
|
|
"description": "Kneron Toolchain Task Scheduler - Job management and queue orchestration",
|
|
"main": "server.js",
|
|
"scripts": {
|
|
"start": "node server.js",
|
|
"dev": "nodemon server.js",
|
|
"test": "jest"
|
|
},
|
|
"dependencies": {
|
|
"@aws-sdk/client-s3": "^3.400.0",
|
|
"compression": "^1.7.4",
|
|
"cors": "^2.8.5",
|
|
"dotenv": "^16.3.1",
|
|
"express": "^4.18.2",
|
|
"express-rate-limit": "^6.10.0",
|
|
"helmet": "^7.0.0",
|
|
"ioredis": "^5.3.2",
|
|
"jose": "^5.10.0",
|
|
"morgan": "^1.10.0",
|
|
"multer": "^1.4.5-lts.1",
|
|
"uuid": "^9.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"jest": "^29.6.2",
|
|
"nodemon": "^3.0.1"
|
|
},
|
|
"keywords": [
|
|
"kneron",
|
|
"toolchain",
|
|
"scheduler",
|
|
"queue",
|
|
"redis-stream"
|
|
],
|
|
"author": "Kneron Team",
|
|
"license": "MIT"
|
|
}
|