# acmepy/api-kit architecture

> Architecture diagram of the GitHub repository acmepy/api-kit, 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/acmepy/api-kit
- Repository: https://github.com/acmepy/api-kit

## Overview

Este paquete genera APIs REST declarativas con Express y ofrece un cliente sincronizado para browser/Node, además de una fachada Vue. El flujo principal va de la configuración de módulos a modelos, servicios y rutas REST; las peticiones se validan y operan sobre Seq. En paralelo, IAM protege rutas y audit habilita cambios y SSE. El cliente descubre servicios desde el manifiesto, sincroniza datos con almacenamiento local y admite operaciones pendientes. La documentación respalda capacidades cuyo cableado no aparece en los extractos; sus flechas se limitan a relaciones documentadas.

Main entry points: [`src/server/api.js`](https://github.com/acmepy/api-kit/blob/main/src/server/api.js) (API factory), [`src/client/api-client.js`](https://github.com/acmepy/api-kit/blob/main/src/client/api-client.js) (API client), [`src/client/services/base-service.js`](https://github.com/acmepy/api-kit/blob/main/src/client/services/base-service.js) (Client services), [`src/server/install/audit.services.js`](https://github.com/acmepy/api-kit/blob/main/src/server/install/audit.services.js) (Audit install)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_server["API server"]
  node_server_api["API factory<br/>[api.js]"]
  node_config["Config processing"]
  node_loaders["Module loaders"]
  node_base_model["Model base<br/>[base-model.js]"]
  node_base_service["Resource service<br/>[base-service.js]"]
  node_router_loader["Router loader<br/>[router-loader.js]"]
  node_error_handler["Error handler<br/>[error-handler.js]"]
end

subgraph group_domains["Resource capabilities"]
  node_auth["Auth install<br/>[auth.services.js]"]
  node_audit["Audit install<br/>[audit.services.js]"]
  node_schema["Schema builders"]
  node_static["Static files"]
end

subgraph group_client["Offline client"]
  node_client_api["API client<br/>[api-client.js]"]
  node_client_service["Client services<br/>[base-service.js]"]
  node_session_service["Session service<br/>[session-service.js]"]
  node_pending_service["Pending service<br/>[pending-service.js]"]
  node_schema_service["Schema service<br/>[schema-service.js]"]
  node_adapters["Storage adapters"]
end

subgraph group_presentation["Client integrations"]
  node_vue["Vue facade<br/>[index.js]"]
end

node_developer(("API consumer"))
node_express["Express app"]
node_seq[("Seq ORM")]
node_iam["IAM"]
node_database[("Application database")]
node_local_storage[("Local storage")]
node_indexed_db[("IndexedDB")]
node_manifest["Schema manifest"]
node_vue_app(("Vue application"))

node_developer -->|"configures"| node_server_api
node_server_api -->|"normalizes config"| node_config
node_server_api -->|"loads modules"| node_loaders
node_loaders -->|"builds models"| node_base_model
node_base_model -->|"registers models"| node_seq
node_server_api -->|"builds routes"| node_router_loader
node_router_loader -->|"creates services"| node_base_service
node_base_service -->|"queries models"| node_seq
node_server_api -->|"installs auth"| node_auth
node_auth -->|"delegates identity"| node_iam
node_server_api -->|"installs audit"| node_audit
node_audit -->|"writes audit"| node_database
node_server_api -->|"builds descriptions"| node_schema
node_schema -->|"publishes manifest"| node_manifest
node_server_api -->|"installs static apps"| node_static
node_server_api -->|"installs errors"| node_error_handler
node_developer -->|"sends requests"| node_express
node_express -->|"dispatches routes"| node_base_service
node_client_api -->|"discovers services"| node_manifest
node_client_api -->|"creates services"| node_client_service
node_client_api -->|"manages sessions"| node_session_service
node_client_api -->|"exposes pending"| node_pending_service
node_client_api -->|"exposes schemas"| node_schema_service
node_client_service -->|"sends requests"| node_client_api
node_client_service -->|"stores records"| node_adapters
node_adapters -.->|"persists data"| node_local_storage
node_adapters -.->|"persists data"| node_indexed_db
node_client_api -->|"calls API"| node_express
node_audit -->|"streams changes"| node_client_api
node_vue_app -->|"installs facade"| node_vue
node_vue -->|"wraps client"| node_client_api
node_vue -->|"uses services"| node_client_service

click node_server_api "https://github.com/acmepy/api-kit/blob/main/src/server/api.js"
click node_config "https://github.com/acmepy/api-kit/tree/main/src/server/config"
click node_loaders "https://github.com/acmepy/api-kit/tree/main/src/server/loaders"
click node_base_model "https://github.com/acmepy/api-kit/blob/main/src/server/base/base-model.js"
click node_base_service "https://github.com/acmepy/api-kit/blob/main/src/server/base/base-service.js"
click node_router_loader "https://github.com/acmepy/api-kit/blob/main/src/server/loaders/router-loader.js"
click node_auth "https://github.com/acmepy/api-kit/blob/main/src/server/install/auth.services.js"
click node_audit "https://github.com/acmepy/api-kit/blob/main/src/server/install/audit.services.js"
click node_schema "https://github.com/acmepy/api-kit/tree/main/src/server/schema"
click node_static "https://github.com/acmepy/api-kit/blob/main/src/server/install/static-files.services.js"
click node_error_handler "https://github.com/acmepy/api-kit/blob/main/src/server/http/error-handler.js"
click node_client_api "https://github.com/acmepy/api-kit/blob/main/src/client/api-client.js"
click node_client_service "https://github.com/acmepy/api-kit/blob/main/src/client/services/base-service.js"
click node_session_service "https://github.com/acmepy/api-kit/blob/main/src/client/services/session-service.js"
click node_pending_service "https://github.com/acmepy/api-kit/blob/main/src/client/services/pending-service.js"
click node_schema_service "https://github.com/acmepy/api-kit/blob/main/src/client/services/schema-service.js"
click node_adapters "https://github.com/acmepy/api-kit/tree/main/src/client/adapters"
click node_vue "https://github.com/acmepy/api-kit/blob/main/src/vue/index.js"

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_server_api,node_config,node_loaders,node_base_model,node_base_service,node_router_loader,node_error_handler toneBlue
class node_auth,node_audit,node_schema,node_static,node_seq,node_database,node_local_storage,node_indexed_db toneAmber
class node_client_api,node_client_service,node_session_service,node_pending_service,node_schema_service,node_adapters,node_developer toneMint
class node_vue toneRose
class node_express,node_iam,node_manifest,node_vue_app toneIndigo
```

## Components

### API server

- [API factory](https://github.com/acmepy/api-kit/blob/main/src/server/api.js): `src/server/api.js`
- [Config processing](https://github.com/acmepy/api-kit/tree/main/src/server/config): `src/server/config`
- [Module loaders](https://github.com/acmepy/api-kit/tree/main/src/server/loaders): `src/server/loaders`
- [Model base](https://github.com/acmepy/api-kit/blob/main/src/server/base/base-model.js): `src/server/base/base-model.js`
- [Resource service](https://github.com/acmepy/api-kit/blob/main/src/server/base/base-service.js): `src/server/base/base-service.js`
- [Router loader](https://github.com/acmepy/api-kit/blob/main/src/server/loaders/router-loader.js): `src/server/loaders/router-loader.js`
- [Error handler](https://github.com/acmepy/api-kit/blob/main/src/server/http/error-handler.js): `src/server/http/error-handler.js`

### Resource capabilities

- [Auth install](https://github.com/acmepy/api-kit/blob/main/src/server/install/auth.services.js): `src/server/install/auth.services.js`
- [Audit install](https://github.com/acmepy/api-kit/blob/main/src/server/install/audit.services.js): `src/server/install/audit.services.js`
- [Schema builders](https://github.com/acmepy/api-kit/tree/main/src/server/schema): `src/server/schema`
- [Static files](https://github.com/acmepy/api-kit/blob/main/src/server/install/static-files.services.js): `src/server/install/static-files.services.js`

### Offline client

- [API client](https://github.com/acmepy/api-kit/blob/main/src/client/api-client.js): `src/client/api-client.js`
- [Client services](https://github.com/acmepy/api-kit/blob/main/src/client/services/base-service.js): `src/client/services/base-service.js`
- [Session service](https://github.com/acmepy/api-kit/blob/main/src/client/services/session-service.js): `src/client/services/session-service.js`
- [Pending service](https://github.com/acmepy/api-kit/blob/main/src/client/services/pending-service.js): `src/client/services/pending-service.js`
- [Schema service](https://github.com/acmepy/api-kit/blob/main/src/client/services/schema-service.js): `src/client/services/schema-service.js`
- [Storage adapters](https://github.com/acmepy/api-kit/tree/main/src/client/adapters): `src/client/adapters`

### Client integrations

- [Vue facade](https://github.com/acmepy/api-kit/blob/main/src/vue/index.js): `src/vue/index.js`

### Other components

- **API consumer**
- **Express app**
- **Seq ORM**
- **IAM**
- **Application database**
- **Local storage**
- **IndexedDB**
- **Schema manifest**
- **Vue application**

## Connections

- API consumer → API factory: configures
- API factory → Config processing: normalizes config
- API factory → Module loaders: loads modules
- Module loaders → Model base: builds models
- Model base → Seq ORM: registers models
- API factory → Router loader: builds routes
- Router loader → Resource service: creates services
- Resource service → Seq ORM: queries models
- API factory → Auth install: installs auth
- Auth install → IAM: delegates identity
- API factory → Audit install: installs audit
- Audit install → Application database: writes audit
- API factory → Schema builders: builds descriptions
- Schema builders → Schema manifest: publishes manifest
- API factory → Static files: installs static apps
- API factory → Error handler: installs errors
- API consumer → Express app: sends requests
- Express app → Resource service: dispatches routes
- API client → Schema manifest: discovers services
- API client → Client services: creates services
- API client → Session service: manages sessions
- API client → Pending service: exposes pending
- API client → Schema service: exposes schemas
- Client services → API client: sends requests
- Client services → Storage adapters: stores records
- Storage adapters → Local storage: persists data
- Storage adapters → IndexedDB: persists data
- API client → Express app: calls API
- Audit install → API client: streams changes
- Vue application → Vue facade: installs facade
- Vue facade → API client: wraps client
- Vue facade → Client services: uses services
