-module(mcp_toolkit@transport@rpc). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/mcp_toolkit/transport/rpc.gleam"). -export([process_http_rpc/3, handle_http_rpc/3]). -file("src/mcp_toolkit/transport/rpc.gleam", 30). -spec process_http_rpc( gleam@http@request:request(mist@internal@http:connection()), mcp_toolkit@core@server:server(), integer() ) -> gleam@http@response:response(mist:response_data()). process_http_rpc(Req, Server, Max_body_bytes) -> case mist:read_body(Req, Max_body_bytes) of {ok, Read_req} -> Body = begin _pipe = gleam@bit_array:to_string(erlang:element(4, Read_req)), gleam@result:unwrap(_pipe, <<""/utf8>>) end, case mcp_toolkit:handle_message(Server, Body) of {ok, {some, Json}} -> mcp_toolkit@transport@util:json_response( 200, gleam@json:to_string(Json) ); {error, Json} -> mcp_toolkit@transport@util:json_response( 200, gleam@json:to_string(Json) ); {ok, none} -> _pipe@1 = gleam@http@response:new(204), gleam@http@response:set_body( _pipe@1, {bytes, gleam@bytes_tree:new()} ) end; {error, _} -> mcp_toolkit@transport@util:json_response( 400, begin _pipe@2 = gleam@json:object( [{<<"error"/utf8>>, gleam@json:string(<<"invalid body"/utf8>>)}] ), gleam@json:to_string(_pipe@2) end ) end. -file("src/mcp_toolkit/transport/rpc.gleam", 14). -spec handle_http_rpc( gleam@http@request:request(mist@internal@http:connection()), mcp_toolkit@core@server:server(), integer() ) -> gleam@http@response:response(mist:response_data()). handle_http_rpc(Req, Server, Max_body_bytes) -> Allowed = [<<"POST"/utf8>>, <<"OPTIONS"/utf8>>], case erlang:element(2, Req) of post -> process_http_rpc(Req, Server, Max_body_bytes); options -> _pipe = gleam@http@response:new(204), _pipe@1 = gleam@http@response:set_header( _pipe, <<"Allow"/utf8>>, mcp_toolkit@transport@util:string_join(Allowed) ), gleam@http@response:set_body( _pipe@1, {bytes, gleam@bytes_tree:new()} ); _ -> mcp_toolkit@transport@util:method_not_allowed(Allowed) end.