# jitendragaurgkv/drm-now architecture

> Architecture diagram of the GitHub repository jitendragaurgkv/drm-now, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jitendragaurgkv/drm-now
- Repository: https://github.com/jitendragaurgkv/drm-now

## Overview

This repository is a demo DRM video platform with a React operations/player console and an Express API. Its central workflow is content ingestion and encryption, followed by catalog browsing, playback authorization, licensed HLS delivery, and session monitoring. The sampled code supports the app/API, licensing, KMS, and session-store relationships; several console features are visible in the tree but their internal data flows were not sampled, so those links are left out.

Main entry points: [`src/App.tsx`](https://github.com/jitendragaurgkv/drm-now/blob/main/src/App.tsx) (App Shell), [`server.ts`](https://github.com/jitendragaurgkv/drm-now/blob/main/server.ts) (HTTP API), [`src/server/licenseServer.ts`](https://github.com/jitendragaurgkv/drm-now/blob/main/src/server/licenseServer.ts) (License Service), [`src/server/kms.ts`](https://github.com/jitendragaurgkv/drm-now/blob/main/src/server/kms.ts) (Key Vault)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_console["Web Console"]
  node_app["App Shell<br/>[App.tsx]"]
  node_ingestion["Ingestion Studio<br/>[IngestionTab.tsx]"]
  node_player["DRM Player<br/>[PlayerTab.tsx]"]
  node_sessions["Session Monitor<br/>[SessionsTab.tsx]"]
  node_analytics["Analytics View<br/>[AnalyticsTab.tsx]"]
  node_vaultview["KMS Vault View<br/>[KmsVaultTab.tsx]"]
  node_architecture["Architecture View"]
end

subgraph group_content["Content Pipeline"]
  node_transcoder["HLS Transcoder<br/>[transcoder.ts]"]
  node_hls["Encrypted HLS Assets<br/>[transcoder.ts]"]
end

subgraph group_security["Playback Security"]
  node_license["License Service<br/>[licenseServer.ts]"]
end

subgraph group_service["API And State"]
  node_server["HTTP API<br/>[server.ts]"]
  node_kms[("Key Vault<br/>[kms.ts]")]
  node_sessionstore[("Accounts And Sessions<br/>[sessionStore.ts]")]
end

node_operator(("Operator / Viewer"))

node_operator -->|"uses"| node_app
node_app -->|"loads catalog"| node_server
node_app -->|"selects playback"| node_player
node_app -->|"opens monitor"| node_sessions
node_app -->|"opens ingestion"| node_ingestion
node_app -->|"opens analytics"| node_analytics
node_app -->|"opens vault"| node_vaultview
node_app -->|"opens overview"| node_architecture
node_ingestion -->|"submits transcode"| node_server
node_server -->|"registers asset"| node_kms
node_server -->|"generates manifest"| node_transcoder
node_transcoder -->|"packages streams"| node_hls
node_kms -->|"stores asset metadata"| node_hls
node_player -->|"requests license and media"| node_server
node_server -->|"processes license request"| node_license
node_license -->|"checks account and sessions"| node_sessionstore
node_license -->|"retrieves content key"| node_kms
node_server -->|"handles OTP and session routes"| node_sessionstore
node_sessions -->|"reads and terminates sessions"| node_server

click node_app "https://github.com/jitendragaurgkv/drm-now/blob/main/src/App.tsx"
click node_ingestion "https://github.com/jitendragaurgkv/drm-now/blob/main/src/components/IngestionTab.tsx"
click node_player "https://github.com/jitendragaurgkv/drm-now/blob/main/src/components/PlayerTab.tsx"
click node_sessions "https://github.com/jitendragaurgkv/drm-now/blob/main/src/components/SessionsTab.tsx"
click node_analytics "https://github.com/jitendragaurgkv/drm-now/blob/main/src/components/AnalyticsTab.tsx"
click node_vaultview "https://github.com/jitendragaurgkv/drm-now/blob/main/src/components/KmsVaultTab.tsx"
click node_architecture "https://github.com/jitendragaurgkv/drm-now/blob/main/src/components/ArchitectureTab.tsx"
click node_server "https://github.com/jitendragaurgkv/drm-now/blob/main/server.ts"
click node_transcoder "https://github.com/jitendragaurgkv/drm-now/blob/main/src/server/transcoder.ts"
click node_kms "https://github.com/jitendragaurgkv/drm-now/blob/main/src/server/kms.ts"
click node_license "https://github.com/jitendragaurgkv/drm-now/blob/main/src/server/licenseServer.ts"
click node_sessionstore "https://github.com/jitendragaurgkv/drm-now/blob/main/src/server/sessionStore.ts"
click node_hls "https://github.com/jitendragaurgkv/drm-now/blob/main/src/server/transcoder.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_ingestion,node_player,node_sessions,node_analytics,node_vaultview,node_architecture,node_operator toneBlue
class node_transcoder,node_hls toneAmber
class node_license toneMint
class node_server,node_kms,node_sessionstore toneRose
```

## Components

### Web Console

- [App Shell](https://github.com/jitendragaurgkv/drm-now/blob/main/src/App.tsx): `src/App.tsx`
- [Ingestion Studio](https://github.com/jitendragaurgkv/drm-now/blob/main/src/components/IngestionTab.tsx): `src/components/IngestionTab.tsx`
- [DRM Player](https://github.com/jitendragaurgkv/drm-now/blob/main/src/components/PlayerTab.tsx): `src/components/PlayerTab.tsx`
- [Session Monitor](https://github.com/jitendragaurgkv/drm-now/blob/main/src/components/SessionsTab.tsx): `src/components/SessionsTab.tsx`
- [Analytics View](https://github.com/jitendragaurgkv/drm-now/blob/main/src/components/AnalyticsTab.tsx): `src/components/AnalyticsTab.tsx`
- [KMS Vault View](https://github.com/jitendragaurgkv/drm-now/blob/main/src/components/KmsVaultTab.tsx): `src/components/KmsVaultTab.tsx`
- [Architecture View](https://github.com/jitendragaurgkv/drm-now/blob/main/src/components/ArchitectureTab.tsx): `src/components/ArchitectureTab.tsx`

### Content Pipeline

- [HLS Transcoder](https://github.com/jitendragaurgkv/drm-now/blob/main/src/server/transcoder.ts): `src/server/transcoder.ts`
- [Encrypted HLS Assets](https://github.com/jitendragaurgkv/drm-now/blob/main/src/server/transcoder.ts): `src/server/transcoder.ts`

### Playback Security

- [License Service](https://github.com/jitendragaurgkv/drm-now/blob/main/src/server/licenseServer.ts): `src/server/licenseServer.ts`

### API And State

- [HTTP API](https://github.com/jitendragaurgkv/drm-now/blob/main/server.ts): `server.ts`
- [Key Vault](https://github.com/jitendragaurgkv/drm-now/blob/main/src/server/kms.ts): `src/server/kms.ts`
- [Accounts And Sessions](https://github.com/jitendragaurgkv/drm-now/blob/main/src/server/sessionStore.ts): `src/server/sessionStore.ts`

### Other components

- **Operator / Viewer**

## Connections

- Operator / Viewer → App Shell: uses
- App Shell → HTTP API: loads catalog
- App Shell → DRM Player: selects playback
- App Shell → Session Monitor: opens monitor
- App Shell → Ingestion Studio: opens ingestion
- App Shell → Analytics View: opens analytics
- App Shell → KMS Vault View: opens vault
- App Shell → Architecture View: opens overview
- Ingestion Studio → HTTP API: submits transcode
- HTTP API → Key Vault: registers asset
- HTTP API → HLS Transcoder: generates manifest
- HLS Transcoder → Encrypted HLS Assets: packages streams
- Key Vault → Encrypted HLS Assets: stores asset metadata
- DRM Player → HTTP API: requests license and media
- HTTP API → License Service: processes license request
- License Service → Accounts And Sessions: checks account and sessions
- License Service → Key Vault: retrieves content key
- HTTP API → Accounts And Sessions: handles OTP and session routes
- Session Monitor → HTTP API: reads and terminates sessions
