Skip to main content

assay_workflow/api/
mod.rs

1pub mod activities;
2pub mod events;
3pub mod namespaces;
4pub mod openapi;
5pub mod public;
6pub mod queues;
7pub mod schedules;
8pub mod tasks;
9pub mod workers;
10pub mod workflow_tasks;
11pub mod workflows;
12
13use std::sync::Arc;
14
15use axum::Router;
16
17use crate::ctx::WorkflowCtx;
18use crate::store::WorkflowStore;
19
20/// Build the workflow HTTP API router. Auth is enforced at the engine
21/// layer (via [`assay_auth::gate`] in `assay_engine::server`); this
22/// router carries no gate of its own. `health`, `version`, `openapi.json`,
23/// and `docs` are always public so probes can reach them without a
24/// bearer token.
25pub fn router<S: WorkflowStore>(state: Arc<WorkflowCtx<S>>) -> Router {
26    let authed_api = Router::new()
27        .nest("/api/v1/engine/workflow", api_v1_router::<S>())
28        .nest("/api/v1/engine/workflow", events::router::<S>());
29
30    let public_api = Router::new().nest("/api/v1/engine/workflow", public::router::<S>());
31
32    let app = authed_api.merge(public_api).merge(openapi::router::<S>());
33
34    app.with_state(state)
35}
36
37fn api_v1_router<S: WorkflowStore>() -> Router<Arc<WorkflowCtx<S>>> {
38    Router::new()
39        .merge(workflows::router::<S>())
40        .merge(activities::router::<S>())
41        .merge(workflow_tasks::router::<S>())
42        .merge(tasks::router::<S>())
43        .merge(schedules::router::<S>())
44        .merge(workers::router::<S>())
45        .merge(namespaces::router::<S>())
46        .merge(queues::router::<S>())
47}