# cvmcosta/ltijs architecture

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

- Interactive diagram: https://gitdiagram.com/cvmcosta/ltijs
- Repository: https://github.com/cvmcosta/ltijs

## Overview

ltijs is a pluggable LTI 1.3 tool-provider library. Its principal workflow is a learning platform initiating an OIDC login and launch; the provider validates the exchange, creates a launch context, and exposes launch-specific services to the tool’s handlers. The graph also preserves platform registration, dynamic registration, and the supported LTI services. Edges reflect README-described capabilities and sampled service behavior; provider orchestration and several unsampled service internals are represented at their exact tree paths, without assuming their internal call wiring.

Main entry points: [`src/services/provider/provider.service.ts`](https://github.com/cvmcosta/ltijs/blob/master/src/services/provider/provider.service.ts) (Provider), [`src/services/launch/launch-context.service.ts`](https://github.com/cvmcosta/ltijs/blob/master/src/services/launch/launch-context.service.ts) (Launch context), [`src/services/access-token-manager/access-token-manager.service.ts`](https://github.com/cvmcosta/ltijs/blob/master/src/services/access-token-manager/access-token-manager.service.ts) (Access tokens), [`src/services/database-manager/database-manager.types.ts`](https://github.com/cvmcosta/ltijs/blob/master/src/services/database-manager/database-manager.types.ts) (Database contract)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_provider["Provider runtime"]
  node_api["Public API<br/>[index.ts]"]
  node_provider["Provider"]
  node_http["Express handler"]
end

subgraph group_identity["Platform and identity"]
  node_launch["Launch handling<br/>[launch.service.ts]"]
  node_oidc["OIDC flow<br/>[oidc.service.ts]"]
  node_context["Launch context"]
  node_platforms["Platform registry"]
  node_tokens["Access tokens"]
  node_dynamic["Dynamic registration"]
end

subgraph group_services["LTI services"]
  node_deep_link["Deep Linking"]
  node_grading["Assignment and grades<br/>[grading.service.ts]"]
  node_nrps["Names and roles"]
end

subgraph group_infrastructure["Storage and transport"]
  node_db_contract["Database contract"]
  node_mongo[("MongoDB manager")]
  node_legacy_mongo[("Legacy MongoDB")]
  node_cache["Cache manager"]
  node_redis[("Redis cache")]
  node_request["HTTP requests"]
end

node_platform_actor(("Learning platform"))
node_tool_actor(("Tool application"))

node_tool_actor -->|"imports"| node_api
node_platform_actor -->|"initiates login"| node_http
node_http -->|"dispatches requests"| node_provider
node_provider -->|"handles OIDC"| node_oidc
node_provider -->|"handles launches"| node_launch
node_provider -->|"supports registration"| node_dynamic
node_provider -->|"manages platforms"| node_platforms
node_oidc -->|"resolves platform"| node_platforms
node_launch -->|"creates context"| node_context
node_context -->|"provides service"| node_deep_link
node_context -->|"provides service"| node_grading
node_context -->|"provides service"| node_nrps
node_tool_actor -->|"registers handlers"| node_provider
node_provider -->|"uses storage"| node_db_contract
node_mongo -->|"implements"| node_db_contract
node_legacy_mongo -.->|"implements"| node_db_contract
node_provider -->|"accepts cache"| node_cache
node_redis -.->|"implements"| node_cache
node_tokens -->|"requests tokens"| node_request
node_tokens -->|"reads and writes"| node_db_contract
node_grading -->|"obtains credentials"| node_tokens
node_nrps -->|"obtains credentials"| node_tokens
node_grading -->|"calls platform"| node_request
node_nrps -->|"calls platform"| node_request

click node_api "https://github.com/cvmcosta/ltijs/blob/master/src/index.ts"
click node_provider "https://github.com/cvmcosta/ltijs/blob/master/src/services/provider/provider.service.ts"
click node_http "https://github.com/cvmcosta/ltijs/blob/master/src/services/http-handler/express/express-http-handler.service.ts"
click node_launch "https://github.com/cvmcosta/ltijs/blob/master/src/services/launch/launch.service.ts"
click node_oidc "https://github.com/cvmcosta/ltijs/blob/master/src/services/oidc/oidc.service.ts"
click node_context "https://github.com/cvmcosta/ltijs/blob/master/src/services/launch/launch-context.service.ts"
click node_platforms "https://github.com/cvmcosta/ltijs/blob/master/src/services/platform-manager/platform-manager.service.ts"
click node_tokens "https://github.com/cvmcosta/ltijs/blob/master/src/services/access-token-manager/access-token-manager.service.ts"
click node_dynamic "https://github.com/cvmcosta/ltijs/blob/master/src/services/dynamic-registration/dynamic-registration.service.ts"
click node_deep_link "https://github.com/cvmcosta/ltijs/blob/master/src/services/deep-linking/deep-linking.service.ts"
click node_grading "https://github.com/cvmcosta/ltijs/blob/master/src/services/grading/grading.service.ts"
click node_nrps "https://github.com/cvmcosta/ltijs/blob/master/src/services/names-and-roles/names-and-roles.service.ts"
click node_db_contract "https://github.com/cvmcosta/ltijs/blob/master/src/services/database-manager/database-manager.types.ts"
click node_mongo "https://github.com/cvmcosta/ltijs/blob/master/src/services/database-manager/mongo/mongo-database-manager.service.ts"
click node_legacy_mongo "https://github.com/cvmcosta/ltijs/blob/master/src/services/database-manager/mongo-legacy/mongo-legacy-database-manager.service.ts"
click node_cache "https://github.com/cvmcosta/ltijs/blob/master/src/services/cache-manager/cache-manager.types.ts"
click node_redis "https://github.com/cvmcosta/ltijs/blob/master/src/services/cache-manager/redis/redis-cache-manager.service.ts"
click node_request "https://github.com/cvmcosta/ltijs/blob/master/src/services/request-handler/fetch/fetch-request-handler.service.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_api,node_provider,node_http toneBlue
class node_launch,node_oidc,node_context,node_platforms,node_tokens,node_dynamic toneAmber
class node_deep_link,node_grading,node_nrps toneMint
class node_db_contract,node_mongo,node_legacy_mongo,node_cache,node_redis,node_request toneRose
class node_platform_actor,node_tool_actor toneIndigo
```

## Components

### Provider runtime

- [Public API](https://github.com/cvmcosta/ltijs/blob/master/src/index.ts): `src/index.ts`
- [Provider](https://github.com/cvmcosta/ltijs/blob/master/src/services/provider/provider.service.ts): `src/services/provider/provider.service.ts`
- [Express handler](https://github.com/cvmcosta/ltijs/blob/master/src/services/http-handler/express/express-http-handler.service.ts): `src/services/http-handler/express/express-http-handler.service.ts`

### Platform and identity

- [Launch handling](https://github.com/cvmcosta/ltijs/blob/master/src/services/launch/launch.service.ts): `src/services/launch/launch.service.ts`
- [OIDC flow](https://github.com/cvmcosta/ltijs/blob/master/src/services/oidc/oidc.service.ts): `src/services/oidc/oidc.service.ts`
- [Launch context](https://github.com/cvmcosta/ltijs/blob/master/src/services/launch/launch-context.service.ts): `src/services/launch/launch-context.service.ts`
- [Platform registry](https://github.com/cvmcosta/ltijs/blob/master/src/services/platform-manager/platform-manager.service.ts): `src/services/platform-manager/platform-manager.service.ts`
- [Access tokens](https://github.com/cvmcosta/ltijs/blob/master/src/services/access-token-manager/access-token-manager.service.ts): `src/services/access-token-manager/access-token-manager.service.ts`
- [Dynamic registration](https://github.com/cvmcosta/ltijs/blob/master/src/services/dynamic-registration/dynamic-registration.service.ts): `src/services/dynamic-registration/dynamic-registration.service.ts`

### LTI services

- [Deep Linking](https://github.com/cvmcosta/ltijs/blob/master/src/services/deep-linking/deep-linking.service.ts): `src/services/deep-linking/deep-linking.service.ts`
- [Assignment and grades](https://github.com/cvmcosta/ltijs/blob/master/src/services/grading/grading.service.ts): `src/services/grading/grading.service.ts`
- [Names and roles](https://github.com/cvmcosta/ltijs/blob/master/src/services/names-and-roles/names-and-roles.service.ts): `src/services/names-and-roles/names-and-roles.service.ts`

### Storage and transport

- [Database contract](https://github.com/cvmcosta/ltijs/blob/master/src/services/database-manager/database-manager.types.ts): `src/services/database-manager/database-manager.types.ts`
- [MongoDB manager](https://github.com/cvmcosta/ltijs/blob/master/src/services/database-manager/mongo/mongo-database-manager.service.ts): `src/services/database-manager/mongo/mongo-database-manager.service.ts`
- [Legacy MongoDB](https://github.com/cvmcosta/ltijs/blob/master/src/services/database-manager/mongo-legacy/mongo-legacy-database-manager.service.ts): `src/services/database-manager/mongo-legacy/mongo-legacy-database-manager.service.ts`
- [Cache manager](https://github.com/cvmcosta/ltijs/blob/master/src/services/cache-manager/cache-manager.types.ts): `src/services/cache-manager/cache-manager.types.ts`
- [Redis cache](https://github.com/cvmcosta/ltijs/blob/master/src/services/cache-manager/redis/redis-cache-manager.service.ts): `src/services/cache-manager/redis/redis-cache-manager.service.ts`
- [HTTP requests](https://github.com/cvmcosta/ltijs/blob/master/src/services/request-handler/fetch/fetch-request-handler.service.ts): `src/services/request-handler/fetch/fetch-request-handler.service.ts`

### Other components

- **Learning platform**
- **Tool application**

## Connections

- Tool application → Public API: imports
- Learning platform → Express handler: initiates login
- Express handler → Provider: dispatches requests
- Provider → OIDC flow: handles OIDC
- Provider → Launch handling: handles launches
- Provider → Dynamic registration: supports registration
- Provider → Platform registry: manages platforms
- OIDC flow → Platform registry: resolves platform
- Launch handling → Launch context: creates context
- Launch context → Deep Linking: provides service
- Launch context → Assignment and grades: provides service
- Launch context → Names and roles: provides service
- Tool application → Provider: registers handlers
- Provider → Database contract: uses storage
- MongoDB manager → Database contract: implements
- Legacy MongoDB → Database contract: implements
- Provider → Cache manager: accepts cache
- Redis cache → Cache manager: implements
- Access tokens → HTTP requests: requests tokens
- Access tokens → Database contract: reads and writes
- Assignment and grades → Access tokens: obtains credentials
- Names and roles → Access tokens: obtains credentials
- Assignment and grades → HTTP requests: calls platform
- Names and roles → HTTP requests: calls platform
