# terra-online/bayes architecture

> Architecture diagram of the GitHub repository terra-online/bayes, 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/terra-online/bayes
- Repository: https://github.com/terra-online/bayes

## Overview

OEM Backend is a Cloudflare Workers/Hono API for Open Endfield Map. Clients enter through the Worker and mounted routes to authenticate, bind game accounts or locate positions, sync normal and archive progress, and submit or read UGC; moderation, notifications, profile, and reporting are supporting product capabilities. Progress routes visibly dispatch per-user work to Durable Objects, while the tree documents the wider domain services. The supplied excerpts do not show all route-to-service or scheduled/queue wiring, so those connections are omitted where ownership is uncertain.

Main entry points: [`src/app.ts`](https://github.com/terra-online/bayes/blob/main/src/app.ts) (Hono app), [`src/routes/progress/createProgressRoutes.ts`](https://github.com/terra-online/bayes/blob/main/src/routes/progress/createProgressRoutes.ts) (Progress API), [`src/routes/auth/createAuthRoutes.ts`](https://github.com/terra-online/bayes/blob/main/src/routes/auth/createAuthRoutes.ts) (Auth routes), [`src/services/upload/submitImage.ts`](https://github.com/terra-online/bayes/blob/main/src/services/upload/submitImage.ts) (Upload services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API routing"]
  node_worker["Worker entry<br/>[index.ts]"]
  node_app["Hono app<br/>[app.ts]"]
end

subgraph group_identity["Identity and binding"]
  node_authroutes["Auth routes"]
  node_authlib["Auth services<br/>[createAuth.ts]"]
  node_users[("User accounts<br/>[users.ts]")]
  node_binding["Account binding"]
  node_endfield["Game API client<br/>[authClient.ts]"]
  node_locator["Position locator"]
end

subgraph group_progress["Progress sync"]
  node_progressroutes["Progress API"]
  node_progressservice["Progress services<br/>[manifest.ts]"]
  node_userdo["User progress DO<br/>[userDo.ts]"]
  node_statsdo["Progress stats DO<br/>[statsDo.ts]"]
end

subgraph group_ugc["UGC and moderation"]
  node_ugcroute["Upload routes<br/>[uploads.ts]"]
  node_uploadservice["Upload services<br/>[submitImage.ts]"]
  node_transcoder["Image transcoder<br/>[server.js]"]
  node_bucket[("UGC object store")]
  node_moderation["Moderation<br/>[core.ts]"]
  node_modroutes["Moderation routes<br/>[moderation.ts]"]
end

subgraph group_support["User services"]
  node_me["Profile and contributions<br/>[me.ts]"]
  node_reports["Admin reports<br/>[admin-reports.ts]"]
  node_notify["Notifications<br/>[notify.ts]"]
end

node_client(("API client"))
node_d1[("D1 database")]
node_queues["Work queues"]
node_redis[("Redis")]

node_client -->|"sends requests"| node_worker
node_worker -->|"serves"| node_app
node_app -->|"mounts routes"| node_authroutes
node_app -->|"mounts routes"| node_binding
node_app -->|"mounts routes"| node_locator
node_app -->|"mounts routes"| node_progressroutes
node_app -->|"mounts routes"| node_ugcroute
node_app -->|"mounts routes"| node_modroutes
node_app -->|"mounts routes"| node_me
node_app -->|"mounts routes"| node_reports
node_app -->|"mounts routes"| node_notify
node_authroutes -->|"uses auth"| node_authlib
node_authroutes -->|"updates profiles"| node_users
node_binding -->|"calls game API"| node_endfield
node_progressroutes -->|"dispatches state/sync"| node_userdo
node_progressroutes -->|"saves manifests"| node_progressservice
node_progressroutes -->|"reads public stats"| node_statsdo
node_progressservice -->|"persists manifests"| node_d1
node_ugcroute -->|"handles uploads"| node_uploadservice
node_uploadservice -->|"prepares images"| node_transcoder
node_uploadservice -->|"stores assets"| node_bucket
node_modroutes -->|"runs moderation"| node_moderation
node_moderation -.->|"dispatches work"| node_queues
node_me -->|"reads account data"| node_users
node_reports -->|"queries reports"| node_d1
node_notify -->|"uses Redis"| node_redis

click node_worker "https://github.com/terra-online/bayes/blob/main/src/index.ts"
click node_app "https://github.com/terra-online/bayes/blob/main/src/app.ts"
click node_authroutes "https://github.com/terra-online/bayes/blob/main/src/routes/auth/createAuthRoutes.ts"
click node_authlib "https://github.com/terra-online/bayes/blob/main/src/lib/auth/createAuth.ts"
click node_users "https://github.com/terra-online/bayes/blob/main/src/repositories/users.ts"
click node_binding "https://github.com/terra-online/bayes/blob/main/src/routes/binding/createBindingRoutes.ts"
click node_endfield "https://github.com/terra-online/bayes/blob/main/src/lib/endfieldClient/authClient.ts"
click node_locator "https://github.com/terra-online/bayes/blob/main/src/routes/binding/createLocatorRoutes.ts"
click node_progressroutes "https://github.com/terra-online/bayes/blob/main/src/routes/progress/createProgressRoutes.ts"
click node_progressservice "https://github.com/terra-online/bayes/blob/main/src/services/progress/manifest.ts"
click node_userdo "https://github.com/terra-online/bayes/blob/main/src/services/progress/userDo.ts"
click node_statsdo "https://github.com/terra-online/bayes/blob/main/src/services/progress/statsDo.ts"
click node_ugcroute "https://github.com/terra-online/bayes/blob/main/src/routes/uploads.ts"
click node_uploadservice "https://github.com/terra-online/bayes/blob/main/src/services/upload/submitImage.ts"
click node_transcoder "https://github.com/terra-online/bayes/blob/main/containers/oem_imgTrans/server.js"
click node_moderation "https://github.com/terra-online/bayes/blob/main/src/services/moderation/core.ts"
click node_modroutes "https://github.com/terra-online/bayes/blob/main/src/routes/moderation.ts"
click node_me "https://github.com/terra-online/bayes/blob/main/src/routes/me.ts"
click node_reports "https://github.com/terra-online/bayes/blob/main/src/routes/admin-reports.ts"
click node_notify "https://github.com/terra-online/bayes/blob/main/src/routes/notify.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_worker,node_app,node_client toneBlue
class node_authroutes,node_authlib,node_users,node_binding,node_endfield,node_locator,node_d1,node_redis toneAmber
class node_progressroutes,node_progressservice,node_userdo,node_statsdo toneMint
class node_ugcroute,node_uploadservice,node_transcoder,node_bucket,node_moderation,node_modroutes,node_queues toneRose
class node_me,node_reports,node_notify toneIndigo
```

## Components

### API routing

- [Worker entry](https://github.com/terra-online/bayes/blob/main/src/index.ts): `src/index.ts`
- [Hono app](https://github.com/terra-online/bayes/blob/main/src/app.ts): `src/app.ts`

### Identity and binding

- [Auth routes](https://github.com/terra-online/bayes/blob/main/src/routes/auth/createAuthRoutes.ts): `src/routes/auth/createAuthRoutes.ts`
- [Auth services](https://github.com/terra-online/bayes/blob/main/src/lib/auth/createAuth.ts): `src/lib/auth/createAuth.ts`
- [User accounts](https://github.com/terra-online/bayes/blob/main/src/repositories/users.ts): `src/repositories/users.ts`
- [Account binding](https://github.com/terra-online/bayes/blob/main/src/routes/binding/createBindingRoutes.ts): `src/routes/binding/createBindingRoutes.ts`
- [Game API client](https://github.com/terra-online/bayes/blob/main/src/lib/endfieldClient/authClient.ts): `src/lib/endfieldClient/authClient.ts`
- [Position locator](https://github.com/terra-online/bayes/blob/main/src/routes/binding/createLocatorRoutes.ts): `src/routes/binding/createLocatorRoutes.ts`

### Progress sync

- [Progress API](https://github.com/terra-online/bayes/blob/main/src/routes/progress/createProgressRoutes.ts): `src/routes/progress/createProgressRoutes.ts`
- [Progress services](https://github.com/terra-online/bayes/blob/main/src/services/progress/manifest.ts): `src/services/progress/manifest.ts`
- [User progress DO](https://github.com/terra-online/bayes/blob/main/src/services/progress/userDo.ts): `src/services/progress/userDo.ts`
- [Progress stats DO](https://github.com/terra-online/bayes/blob/main/src/services/progress/statsDo.ts): `src/services/progress/statsDo.ts`

### UGC and moderation

- [Upload routes](https://github.com/terra-online/bayes/blob/main/src/routes/uploads.ts): `src/routes/uploads.ts`
- [Upload services](https://github.com/terra-online/bayes/blob/main/src/services/upload/submitImage.ts): `src/services/upload/submitImage.ts`
- [Image transcoder](https://github.com/terra-online/bayes/blob/main/containers/oem_imgTrans/server.js): `containers/oem_imgTrans/server.js`
- **UGC object store**
- [Moderation](https://github.com/terra-online/bayes/blob/main/src/services/moderation/core.ts): `src/services/moderation/core.ts`
- [Moderation routes](https://github.com/terra-online/bayes/blob/main/src/routes/moderation.ts): `src/routes/moderation.ts`

### User services

- [Profile and contributions](https://github.com/terra-online/bayes/blob/main/src/routes/me.ts): `src/routes/me.ts`
- [Admin reports](https://github.com/terra-online/bayes/blob/main/src/routes/admin-reports.ts): `src/routes/admin-reports.ts`
- [Notifications](https://github.com/terra-online/bayes/blob/main/src/routes/notify.ts): `src/routes/notify.ts`

### Other components

- **API client**
- **D1 database**
- **Work queues**
- **Redis**

## Connections

- API client → Worker entry: sends requests
- Worker entry → Hono app: serves
- Hono app → Auth routes: mounts routes
- Hono app → Account binding: mounts routes
- Hono app → Position locator: mounts routes
- Hono app → Progress API: mounts routes
- Hono app → Upload routes: mounts routes
- Hono app → Moderation routes: mounts routes
- Hono app → Profile and contributions: mounts routes
- Hono app → Admin reports: mounts routes
- Hono app → Notifications: mounts routes
- Auth routes → Auth services: uses auth
- Auth routes → User accounts: updates profiles
- Account binding → Game API client: calls game API
- Progress API → User progress DO: dispatches state/sync
- Progress API → Progress services: saves manifests
- Progress API → Progress stats DO: reads public stats
- Progress services → D1 database: persists manifests
- Upload routes → Upload services: handles uploads
- Upload services → Image transcoder: prepares images
- Upload services → UGC object store: stores assets
- Moderation routes → Moderation: runs moderation
- Moderation → Work queues: dispatches work
- Profile and contributions → User accounts: reads account data
- Admin reports → D1 database: queries reports
- Notifications → Redis: uses Redis
