# rlalpha49/anilink architecture

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

- Interactive diagram: https://gitdiagram.com/rlalpha49/anilink
- Repository: https://github.com/rlalpha49/anilink

## Overview

AniLink is a typed TypeScript client for AniList GraphQL and MyAnimeList REST. A caller uses one provider namespace to invoke a typed operation, which dispatches through shared transport behavior to the relevant external API and returns a typed result. The graph preserves AniList queries, paginated queries, mutations, custom requests, and helpers, alongside MAL reads, discovery, forums, and list-status writes. Shared request handling includes caching and resilience. The README supports the provider capabilities; source excerpts confirm request-pipeline behavior but do not show all provider wiring.

Main entry points: [`src/base/requestPipeline.ts`](https://github.com/rlalpha49/anilink/blob/master/src/base/requestPipeline.ts) (Request pipeline), [`src/apis/graphql/anilist/facade/index.ts`](https://github.com/rlalpha49/anilink/blob/master/src/apis/graphql/anilist/facade/index.ts) (Operation facade), [`src/apis/graphql/anilist/AniListOperation.ts`](https://github.com/rlalpha49/anilink/blob/master/src/apis/graphql/anilist/AniListOperation.ts) (GraphQL operation), [`src/AniLink.ts`](https://github.com/rlalpha49/anilink/blob/master/src/AniLink.ts) (AniLink client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client API"]
  node_client["AniLink client<br/>[AniLink.ts]"]
  node_anilist_ns["AniList namespace<br/>[anilist.ts]"]
  node_mal_ns["MAL namespace<br/>[mal.ts]"]
end

subgraph group_anilist["AniList GraphQL"]
  node_ani_facade["Operation facade<br/>[index.ts]"]
  node_ani_query["Queries and pages"]
  node_ani_mutation["Mutations"]
  node_ani_custom["Custom requests<br/>[CustomRequest.ts]"]
  node_ani_helpers["Data helpers"]
  node_ani_paging["Pagination<br/>[Paginator.ts]"]
  node_ani_operation["GraphQL operation"]
end

subgraph group_mal["MAL REST"]
  node_mal_facade["MAL facade<br/>[facade.ts]"]
  node_mal_operations["MAL operations"]
  node_mal_paging["Pagination<br/>[Paginator.ts]"]
  node_rest_operation["REST operation<br/>[RestOperation.ts]"]
end

subgraph group_transport["Shared transport"]
  node_transport["Request pipeline<br/>[requestPipeline.ts]"]
  node_transport_resilience["Resilience controls"]
  node_cache[("Response cache<br/>[responseCache.ts]")]
end

node_caller(("Application"))
node_anilist_api{{"AniList API"}}
node_mal_api{{"MyAnimeList API"}}

node_caller -->|"creates"| node_client
node_client -->|"exposes"| node_anilist_ns
node_client -->|"exposes"| node_mal_ns
node_anilist_ns -->|"dispatches via"| node_ani_facade
node_ani_facade -->|"dispatches"| node_ani_query
node_ani_facade -->|"dispatches"| node_ani_mutation
node_ani_facade -->|"dispatches"| node_ani_custom
node_ani_query -->|"executes"| node_ani_operation
node_ani_mutation -->|"executes"| node_ani_operation
node_ani_custom -->|"executes"| node_ani_operation
node_ani_query -->|"supports"| node_ani_paging
node_ani_helpers -->|"maps data"| node_anilist_api
node_ani_operation -->|"sends requests"| node_transport
node_transport -->|"sends GraphQL"| node_anilist_api
node_mal_ns -->|"dispatches"| node_mal_facade
node_mal_facade -->|"dispatches"| node_mal_operations
node_mal_operations -->|"executes"| node_rest_operation
node_mal_operations -->|"supports"| node_mal_paging
node_rest_operation -->|"sends requests"| node_transport
node_transport -->|"sends REST"| node_mal_api
node_transport -->|"reads and writes"| node_cache
node_transport -->|"applies"| node_transport_resilience

click node_client "https://github.com/rlalpha49/anilink/blob/master/src/AniLink.ts"
click node_anilist_ns "https://github.com/rlalpha49/anilink/blob/master/src/anilist.ts"
click node_mal_ns "https://github.com/rlalpha49/anilink/blob/master/src/mal.ts"
click node_ani_facade "https://github.com/rlalpha49/anilink/blob/master/src/apis/graphql/anilist/facade/index.ts"
click node_ani_query "https://github.com/rlalpha49/anilink/tree/master/src/apis/graphql/anilist/query"
click node_ani_mutation "https://github.com/rlalpha49/anilink/tree/master/src/apis/graphql/anilist/mutation"
click node_ani_custom "https://github.com/rlalpha49/anilink/blob/master/src/apis/graphql/anilist/CustomRequest.ts"
click node_ani_helpers "https://github.com/rlalpha49/anilink/tree/master/src/apis/graphql/anilist/helpers"
click node_ani_paging "https://github.com/rlalpha49/anilink/blob/master/src/apis/graphql/anilist/Paginator.ts"
click node_ani_operation "https://github.com/rlalpha49/anilink/blob/master/src/apis/graphql/anilist/AniListOperation.ts"
click node_mal_facade "https://github.com/rlalpha49/anilink/blob/master/src/apis/rest/mal/facade.ts"
click node_mal_operations "https://github.com/rlalpha49/anilink/tree/master/src/apis/rest/mal/operations"
click node_mal_paging "https://github.com/rlalpha49/anilink/blob/master/src/apis/rest/mal/Paginator.ts"
click node_rest_operation "https://github.com/rlalpha49/anilink/blob/master/src/apis/rest/RestOperation.ts"
click node_transport "https://github.com/rlalpha49/anilink/blob/master/src/base/requestPipeline.ts"
click node_transport_resilience "https://github.com/rlalpha49/anilink/tree/master/src/base"
click node_cache "https://github.com/rlalpha49/anilink/blob/master/src/base/responseCache.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_client,node_anilist_ns,node_mal_ns toneBlue
class node_ani_facade,node_ani_query,node_ani_mutation,node_ani_custom,node_ani_helpers,node_ani_paging,node_ani_operation toneAmber
class node_mal_facade,node_mal_operations,node_mal_paging,node_rest_operation,node_anilist_api,node_mal_api toneMint
class node_transport,node_transport_resilience,node_cache toneRose
class node_caller toneIndigo
```

## Components

### Client API

- [AniLink client](https://github.com/rlalpha49/anilink/blob/master/src/AniLink.ts): `src/AniLink.ts`
- [AniList namespace](https://github.com/rlalpha49/anilink/blob/master/src/anilist.ts): `src/anilist.ts`
- [MAL namespace](https://github.com/rlalpha49/anilink/blob/master/src/mal.ts): `src/mal.ts`

### AniList GraphQL

- [Operation facade](https://github.com/rlalpha49/anilink/blob/master/src/apis/graphql/anilist/facade/index.ts): `src/apis/graphql/anilist/facade/index.ts`
- [Queries and pages](https://github.com/rlalpha49/anilink/tree/master/src/apis/graphql/anilist/query): `src/apis/graphql/anilist/query`
- [Mutations](https://github.com/rlalpha49/anilink/tree/master/src/apis/graphql/anilist/mutation): `src/apis/graphql/anilist/mutation`
- [Custom requests](https://github.com/rlalpha49/anilink/blob/master/src/apis/graphql/anilist/CustomRequest.ts): `src/apis/graphql/anilist/CustomRequest.ts`
- [Data helpers](https://github.com/rlalpha49/anilink/tree/master/src/apis/graphql/anilist/helpers): `src/apis/graphql/anilist/helpers`
- [Pagination](https://github.com/rlalpha49/anilink/blob/master/src/apis/graphql/anilist/Paginator.ts): `src/apis/graphql/anilist/Paginator.ts`
- [GraphQL operation](https://github.com/rlalpha49/anilink/blob/master/src/apis/graphql/anilist/AniListOperation.ts): `src/apis/graphql/anilist/AniListOperation.ts`

### MAL REST

- [MAL facade](https://github.com/rlalpha49/anilink/blob/master/src/apis/rest/mal/facade.ts): `src/apis/rest/mal/facade.ts`
- [MAL operations](https://github.com/rlalpha49/anilink/tree/master/src/apis/rest/mal/operations): `src/apis/rest/mal/operations`
- [Pagination](https://github.com/rlalpha49/anilink/blob/master/src/apis/rest/mal/Paginator.ts): `src/apis/rest/mal/Paginator.ts`
- [REST operation](https://github.com/rlalpha49/anilink/blob/master/src/apis/rest/RestOperation.ts): `src/apis/rest/RestOperation.ts`

### Shared transport

- [Request pipeline](https://github.com/rlalpha49/anilink/blob/master/src/base/requestPipeline.ts): `src/base/requestPipeline.ts`
- [Resilience controls](https://github.com/rlalpha49/anilink/tree/master/src/base): `src/base`
- [Response cache](https://github.com/rlalpha49/anilink/blob/master/src/base/responseCache.ts): `src/base/responseCache.ts`

### Other components

- **Application**
- **AniList API**
- **MyAnimeList API**

## Connections

- Application → AniLink client: creates
- AniLink client → AniList namespace: exposes
- AniLink client → MAL namespace: exposes
- AniList namespace → Operation facade: dispatches via
- Operation facade → Queries and pages: dispatches
- Operation facade → Mutations: dispatches
- Operation facade → Custom requests: dispatches
- Queries and pages → GraphQL operation: executes
- Mutations → GraphQL operation: executes
- Custom requests → GraphQL operation: executes
- Queries and pages → Pagination: supports
- Data helpers → AniList API: maps data
- GraphQL operation → Request pipeline: sends requests
- Request pipeline → AniList API: sends GraphQL
- MAL namespace → MAL facade: dispatches
- MAL facade → MAL operations: dispatches
- MAL operations → REST operation: executes
- MAL operations → Pagination: supports
- REST operation → Request pipeline: sends requests
- Request pipeline → MyAnimeList API: sends REST
- Request pipeline → Response cache: reads and writes
- Request pipeline → Resilience controls: applies
