How psycopathic/gurukul-api works
Gurukul Video API gates playback requests, verifies app attestation and Firebase identity, checks the video catalog and access rule, then returns a short-lived R2 download URL. Operators have a separate authenticated upload-URL endpoint. The graph also captures configuration, Firebase verification, rate limiting, and structured logging. Relationships are limited to calls and routing shown in excerpts or documented in the README; unsampled implementation details are not inferred.
Main entry points: video.routes.ts Video Routes · playback.service.ts Playback Orchestrator · app.ts Express App · r2.service.ts R2 URL Signer
Components 21
HTTP API
- Express App
src/app.ts - Video Routes
src/routes/video.routes.ts - Video Controller
src/controllers/video.controller.ts
Request Security
- App Check Gate
src/middleware/app-check.middleware.ts - App Check Verifier
src/services/app-check.service.ts - User and Operator Auth
src/middleware/auth.middleware.ts - Firebase Admin
src/services/firebase.service.ts - Playback Rate Limit
src/middleware/rate-limit.middleware.ts
Playback Access
- Playback Orchestrator
src/services/playback.service.ts - Catalog Lookup
src/services/catalog.service.ts - Video Catalog
src/catalog/video-catalog.ts - Access Rules
src/services/entitlement.service.ts
R2 Storage
- Upload URL Service
src/services/video.service.ts - R2 URL Signer
src/services/r2.service.ts - Cloudflare R2
Configuration and Observability
- Environment Config
src/config/env.ts - Bucket Registry
src/config/buckets.ts - Structured Logger
src/services/logger.ts - HTTP Errors
src/errors.ts
Other components
- Flutter App
- API Operator
Connections 23
- Flutter App → Express App: HTTP requests
README.md - API Operator → Express App: upload request
README.md - Express App → Video Routes: mounts routes
src/app.ts - Video Routes → App Check Gate: gates playback
src/routes/video.routes.ts - Video Routes → User and Operator Auth: authenticates
src/routes/video.routes.ts - Video Routes → Playback Rate Limit: limits playback
src/routes/video.routes.ts - Video Routes → Video Controller: dispatches
src/routes/video.routes.ts - App Check Gate → App Check Verifier: verifies token
src/middleware/app-check.middleware.ts - User and Operator Auth → Firebase Admin: verifies identity
src/middleware/auth.middleware.ts - User and Operator Auth → Environment Config: checks operator token
src/middleware/auth.middleware.ts - Video Controller → Playback Orchestrator: requests access
src/controllers/video.controller.ts - Video Controller → Upload URL Service: prepares upload
src/controllers/video.controller.ts - Playback Orchestrator → Catalog Lookup: looks up video
src/services/playback.service.ts - Catalog Lookup → Video Catalog: reads entries
src/services/catalog.service.ts - Playback Orchestrator → Access Rules: checks authorization
src/services/playback.service.ts - Playback Orchestrator → R2 URL Signer: requests download URL
src/services/playback.service.ts - Upload URL Service → R2 URL Signer: requests upload URL
src/services/video.service.ts - R2 URL Signer → Cloudflare R2: presigns object access
src/services/r2.service.ts - R2 URL Signer → Environment Config: loads credentials
src/services/r2.service.ts - Environment Config → Bucket Registry: loads definitions
src/config/env.ts - Playback Orchestrator → Structured Logger: records outcomes
src/services/playback.service.ts - Express App → Structured Logger: logs server errors
src/app.ts - Express App → HTTP Errors: formats HTTP errors
src/app.ts