Decentralised Art Server
High-performance C++ backend that exposes HTML interface and a secure REST API for managing Performative Transactions entities
 
Loading...
Searching...
No Matches
api.hpp
Go to the documentation of this file.
1#pragma once
2#include <ranges>
3
4#include <spdlog/spdlog.h>
5
6#include "async.hpp"
7#include "utils.hpp"
8#include "config.hpp"
9#include "route.hpp"
10#include "parser.hpp"
11#include "pt.hpp"
12#include "auth.hpp"
13#include "chain.hpp"
14#include "evm.hpp"
15#include "version.hpp"
16#include "loader.hpp"
17#include "events.hpp"
18
19namespace dcn
20{
24 asio::awaitable<std::expected<chain::Address, auth::AuthError>> authenticate(const http::Request & request, const auth::AuthManager & auth_manager);
25
26
36 asio::awaitable<http::Response> GET_version(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, const std::string & build_timestamp);
37
38
47 asio::awaitable<http::Response> HEAD_serveFile(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
48
57 asio::awaitable<http::Response> OPTIONS_serveFile(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
58
69 asio::awaitable<http::Response> GET_serveFile(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, const std::string mime_type, const std::string & file_content);
70
81 asio::awaitable<http::Response> GET_serveBinaryFile(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, const std::string mime_type, const std::vector<std::byte> & file_content);
82
92 asio::awaitable<http::Response> GET_nonce(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, auth::AuthManager & auth_manager);
93
94
103 asio::awaitable<http::Response> OPTIONS_auth(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
104
114 asio::awaitable<http::Response> POST_auth(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, auth::AuthManager & auth_manager);
115
116
125 asio::awaitable<http::Response> OPTIONS_accountInfo(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
126
136 asio::awaitable<http::Response> GET_accountInfo(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
137
146 asio::awaitable<http::Response> OPTIONS_formats(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
147
159 asio::awaitable<http::Response> HEAD_formats(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
160
172 asio::awaitable<http::Response> GET_formats(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
173
182 asio::awaitable<http::Response> OPTIONS_format(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
183
195 asio::awaitable<http::Response> GET_format(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
196
205 asio::awaitable<http::Response> OPTIONS_accounts(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
206
218 asio::awaitable<http::Response> HEAD_accounts(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
219
231 asio::awaitable<http::Response> GET_accounts(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
232
236 asio::awaitable<http::Response> OPTIONS_feed(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
237
241 asio::awaitable<http::Response> GET_feed(
242 const http::Request & request,
243 std::vector<server::RouteArg> route_args,
244 server::QueryArgsList query_args,
245 events::EventRuntime & events_runtime);
246
250 asio::awaitable<http::Response> OPTIONS_feedStream(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
251
261 std::string buildFeedStreamSseReplay(
262 events::EventRuntime & events_runtime,
263 const events::StreamQuery & query);
264
275 asio::awaitable<void> GET_feedStream(
276 asio::ip::tcp::socket & sock,
277 const http::Request & request,
278 std::vector<server::RouteArg> route_args,
279 server::QueryArgsList query_args,
280 std::chrono::steady_clock::time_point & deadline,
281 events::EventRuntime & events_runtime);
282
283
293 asio::awaitable<http::Response> HEAD_connector(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
294
303 asio::awaitable<http::Response> OPTIONS_connector(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
304
314 asio::awaitable<http::Response> GET_connector(
315 const http::Request & request,
316 std::vector<server::RouteArg> route_args,
317 server::QueryArgsList query_args,
318 registry::Registry & registry);
319
329 asio::awaitable<http::Response> POST_connector(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args,
330 auth::AuthManager & auth_manager, registry::Registry & registry, evm::EVM & evm, const config::Config & config);
331
341 asio::awaitable<http::Response> HEAD_transformation(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
342
351 asio::awaitable<http::Response> OPTIONS_transformation(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
352
365 asio::awaitable<http::Response> GET_transformation(
366 const http::Request & request,
367 std::vector<server::RouteArg> route_args,
368 server::QueryArgsList query_args,
369 registry::Registry & registry);
370
384 asio::awaitable<http::Response> POST_transformation(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args,
385 auth::AuthManager & auth_manager, registry::Registry & registry, evm::EVM & evm, const config::Config & config);
386
387
397 asio::awaitable<http::Response> HEAD_condition(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
398
407 asio::awaitable<http::Response> OPTIONS_condition(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
408
421 asio::awaitable<http::Response> GET_condition(
422 const http::Request & request,
423 std::vector<server::RouteArg> route_args,
424 server::QueryArgsList query_args,
425 registry::Registry & registry);
426
440 asio::awaitable<http::Response> POST_condition(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args,
441 auth::AuthManager & auth_manager, registry::Registry & registry, evm::EVM & evm, const config::Config & config);
442
451 asio::awaitable<http::Response> OPTIONS_execute(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
452
465 asio::awaitable<http::Response> POST_execute(
466 const http::Request & request,
467 std::vector<server::RouteArg> route_args,
468 server::QueryArgsList query_args,
469 const auth::AuthManager & auth_manager,
470 registry::Registry & registry,
471 evm::EVM & evm,
472 const config::Config & config);
473}
absl::flat_hash_map< std::string, RouteArg > QueryArgsList
Definition route.hpp:25
Definition decentralised_art.hpp:35
asio::awaitable< http::Response > OPTIONS_serveFile(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests for a file by returning a response with CORS headers.
Definition api_file.cpp:17
asio::awaitable< http::Response > GET_feed(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, events::EventRuntime &events_runtime)
Handles GET requests to /feed?limit=<uint>&before=<~string>&type=<~string>&include_unfinalized=<~uint...
Definition api_feed.cpp:30
asio::awaitable< http::Response > GET_nonce(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, auth::AuthManager &auth_manager)
Handle a GET request to /auth/nonce.
Definition api_auth.cpp:55
asio::awaitable< http::Response > POST_connector(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, auth::AuthManager &auth_manager, registry::Registry &registry, evm::EVM &evm, const config::Config &config)
Handle a POST request to /connectors.
Definition api_connector.cpp:144
asio::awaitable< http::Response > OPTIONS_feedStream(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests to /feed/stream?since_seq=<~uint>&limit=<~uint>
Definition api_feed.cpp:164
asio::awaitable< http::Response > HEAD_serveFile(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles HEAD requests for a file.
Definition api_file.cpp:6
asio::awaitable< http::Response > GET_serveBinaryFile(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, const std::string mime_type, const std::vector< std::byte > &file_content)
Handles GET requests for a binary file.
Definition api_file.cpp:44
asio::awaitable< std::expected< chain::Address, auth::AuthError > > authenticate(const http::Request &request, const auth::AuthManager &auth_manager)
Helper function to handle authentication.
Definition api_auth.cpp:32
asio::awaitable< http::Response > POST_transformation(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, auth::AuthManager &auth_manager, registry::Registry &registry, evm::EVM &evm, const config::Config &config)
Handles POST requests for the transformation endpoint.
Definition api_transformation.cpp:133
asio::awaitable< http::Response > GET_transformation(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles GET requests for the transformation endpoint.
Definition api_transformation.cpp:64
std::string buildFeedStreamSseReplay(events::EventRuntime &events_runtime, const events::StreamQuery &query)
Builds the SSE replay body for /feed/stream.
Definition api_feed.cpp:236
asio::awaitable< http::Response > GET_condition(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles GET requests for the condition endpoint.
Definition api_condition.cpp:64
asio::awaitable< http::Response > HEAD_connector(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles HEAD requests for the connector endpoint.
Definition api_connector.cpp:10
asio::awaitable< http::Response > OPTIONS_accounts(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles a OPTIONS request to /accounts?limit=<uint>&after=<~string>
Definition api_account.cpp:62
asio::awaitable< http::Response > OPTIONS_feed(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests to /feed?limit=<uint>&before=<~string>&type=<~string>&include_unfinalized=<~...
Definition api_feed.cpp:17
asio::awaitable< http::Response > OPTIONS_formats(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles a OPTIONS request to /formats?limit=<uint>&after=<~string>
Definition api_format.cpp:15
asio::awaitable< http::Response > OPTIONS_auth(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles a OPTIONS request to /auth.
Definition api_auth.cpp:106
asio::awaitable< http::Response > OPTIONS_connector(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests by returning a response with CORS headers.
Definition api_connector.cpp:47
asio::awaitable< http::Response > HEAD_transformation(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles HEAD requests for the transformation endpoint.
Definition api_transformation.cpp:11
asio::awaitable< http::Response > HEAD_accounts(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles a HEAD request to /accounts?limit=<uint>&after=<~string>
Definition api_account.cpp:76
asio::awaitable< http::Response > OPTIONS_condition(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests for the condition endpoint by returning a response with CORS headers.
Definition api_condition.cpp:50
asio::awaitable< http::Response > POST_auth(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, auth::AuthManager &auth_manager)
Handles a POST request to /auth.
Definition api_auth.cpp:120
asio::awaitable< http::Response > HEAD_condition(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles HEAD requests for the condition endpoint.
Definition api_condition.cpp:11
asio::awaitable< http::Response > OPTIONS_transformation(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests for the transformation endpoint by returning a response with CORS headers.
Definition api_transformation.cpp:50
asio::awaitable< http::Response > GET_formats(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles a GET request to /formats?limit=<uint>&after=<~string>
Definition api_format.cpp:85
asio::awaitable< http::Response > GET_format(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles a GET request to /format/<hash>?limit=<uint>&after=<~string>
Definition api_format.cpp:190
asio::awaitable< http::Response > POST_execute(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, const auth::AuthManager &auth_manager, registry::Registry &registry, evm::EVM &evm, const config::Config &config)
Handles POST requests for the execute endpoint.
Definition api_execute.cpp:26
asio::awaitable< http::Response > GET_connector(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handle a GET request to /connectors.
Definition api_connector.cpp:61
asio::awaitable< http::Response > POST_condition(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, auth::AuthManager &auth_manager, registry::Registry &registry, evm::EVM &evm, const config::Config &config)
Handles POST requests for the condition endpoint.
Definition api_condition.cpp:133
asio::awaitable< http::Response > OPTIONS_accountInfo(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles a OPTIONS request to /account.
Definition api_account.cpp:223
asio::awaitable< http::Response > HEAD_formats(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles a HEAD request to /formats?limit=<uint>&after=<~string>
Definition api_format.cpp:29
asio::awaitable< http::Response > GET_version(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, const std::string &build_timestamp)
Handles GET requests for the version endpoint.
Definition api.cpp:5
asio::awaitable< http::Response > OPTIONS_format(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles a OPTIONS request to /format/<hash>?limit=<uint>&after=<~string>
Definition api_format.cpp:176
asio::awaitable< http::Response > GET_accounts(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles a GET request to /accounts?limit=<uint>&after=<~string>
Definition api_account.cpp:132
asio::awaitable< http::Response > OPTIONS_execute(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests for the execute endpoint by returning a response with CORS headers.
Definition api_execute.cpp:12
asio::awaitable< http::Response > GET_accountInfo(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles a GET request to /account.
Definition api_account.cpp:237
asio::awaitable< http::Response > GET_serveFile(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, const std::string mime_type, const std::string &file_content)
Handles GET requests for a file.
Definition api_file.cpp:31
asio::awaitable< void > GET_feedStream(asio::ip::tcp::socket &sock, const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, std::chrono::steady_clock::time_point &deadline, events::EventRuntime &events_runtime)
Handles GET requests to /feed/stream?since_seq=<~uint>&limit=<~uint>
Definition api_feed.cpp:265