AkurAI Build
Menu

Public repository / master

AkurAI-Notes / crates/notes-api/src/handlers/meta.rs

Latest change 21fd83f4a6eb769a0ee34aa30f721b5cdc6881af - Fix IDP OAuth: split public issuer vs internal loopback URL for token exchange by Claude Code

use crate::router_setup::{internal_error, json_response, NotesState};
use akurai_http::{Request, Response};
use akurai_json::Value;
use std::sync::{Arc, Mutex};

pub fn meta_route(
    state: Arc<Mutex<NotesState>>,
) -> Box<dyn Fn(&Request) -> Response + Send + Sync> {
    Box::new(move |_req: &Request| {
        let state = match state.lock() {
            Ok(s) => s,
            Err(_) => return internal_error("lock poisoned"),
        };

        let objects: Vec<Value> = state
            .objects
            .iter()
            .map(|obj| {
                let fields: Vec<Value> = obj
                    .fields
                    .iter()
                    .map(|f| {
                        Value::Object(vec![
                            ("name".into(), Value::Str(f.name.into())),
                            ("type".into(), Value::Str(f.field_type.into())),
                            ("required".into(), Value::Bool(f.required)),
                            ("embed".into(), Value::Bool(f.embed)),
                        ])
                    })
                    .collect();

                Value::Object(vec![
                    ("name".into(), Value::Str(obj.name.into())),
                    ("fields".into(), Value::Array(fields)),
                ])
            })
            .collect();

        json_response(Value::Object(vec![
            ("version".into(), Value::Str("0.0.1".into())),
            ("objects".into(), Value::Array(objects)),
        ]))
    })
}