openzeppelin_relayer/
openapi.rs

1use crate::{
2    api::routes::{
3        docs::{plugin_docs, relayer_docs},
4        health, metrics,
5    },
6    domain, models,
7    services::plugins,
8};
9use utoipa::{
10    openapi::security::{Http, HttpAuthScheme, SecurityScheme},
11    Modify, OpenApi,
12};
13
14struct SecurityAddon;
15
16impl Modify for SecurityAddon {
17    fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) {
18        if let Some(components) = openapi.components.as_mut() {
19            components.add_security_scheme(
20                "bearer_auth",
21                SecurityScheme::Http(Http::new(HttpAuthScheme::Bearer)),
22            );
23        }
24    }
25}
26// https://gitbook.com/docs/api-references/guides/managing-api-operations
27
28#[derive(OpenApi)]
29#[openapi(
30    modifiers(&SecurityAddon),
31    tags(
32      (name = "Relayers", description = "Relayers are the core components of the OpenZeppelin Relayer API. They are responsible for executing transactions on behalf of users and providing a secure and reliable way to interact with the blockchain."),
33      (name = "Plugins", description = "Plugins are TypeScript functions that can be used to extend the OpenZeppelin Relayer API functionality."),
34      (name = "Metrics", description = "Metrics are responsible for showing the metrics related to the relayers."),
35      (name = "Health", description = "Health is responsible for showing the health of the relayers.")
36    ),
37    info(description = "OpenZeppelin Relayer API", version = "0.1.0", title = "OpenZeppelin Relayer API",  license(
38        name = "AGPL-3.0 license",
39        url = "https://github.com/OpenZeppelin/openzeppelin-relayer/blob/main/LICENSE"
40    ),
41    contact(
42        name = "OpenZeppelin",
43        url = "https://www.openzeppelin.com",
44    ),
45    terms_of_service = "https://www.openzeppelin.com/tos"),
46    paths(
47        relayer_docs::doc_get_relayer,
48        relayer_docs::doc_list_relayers,
49        relayer_docs::doc_get_relayer_balance,
50        relayer_docs::doc_update_relayer,
51        relayer_docs::doc_get_transaction_by_nonce,
52        relayer_docs::doc_get_transaction_by_id,
53        relayer_docs::doc_list_transactions,
54        relayer_docs::doc_get_relayer_status,
55        relayer_docs::doc_sign_typed_data,
56        relayer_docs::doc_sign,
57        relayer_docs::doc_cancel_transaction,
58        relayer_docs::doc_delete_pending_transactions,
59        relayer_docs::doc_rpc,
60        relayer_docs::doc_send_transaction,
61        relayer_docs::doc_replace_transaction,
62        health::health,
63        metrics::list_metrics,
64        metrics::metric_detail,
65        metrics::scrape_metrics,
66        plugin_docs::doc_call_plugin
67    ),
68    components(schemas(
69        models::RelayerResponse,
70        models::NetworkPolicyResponse,
71        models::EvmPolicyResponse,
72        models::SolanaPolicyResponse,
73        models::StellarPolicyResponse,
74        domain::RelayerUpdateRequest,
75        domain::SignDataRequest,
76        domain::SignTypedDataRequest,
77        models::PluginCallRequest,
78        plugins::PluginCallResponse
79    ))
80)]
81pub struct ApiDoc;