openzeppelin_relayer/
openapi.rs

1use crate::{
2    api::routes::{
3        docs::{notification_docs, plugin_docs, relayer_docs, signer_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/// # OpenAPI Specification Generator
27///
28/// This utility generates an OpenAPI specification JSON file from the
29/// OpenZeppelin Relayer API definitions.
30#[derive(OpenApi)]
31#[openapi(
32    modifiers(&SecurityAddon),
33    tags(
34      (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."),
35      (name = "Plugins", description = "Plugins are TypeScript functions that can be used to extend the OpenZeppelin Relayer API functionality."),
36      (name = "Notifications", description = "Notifications are responsible for showing the notifications related to the relayers."),
37      (name = "Signers", description = "Signers are responsible for signing the transactions related to the relayers."),
38      (name = "Metrics", description = "Metrics are responsible for showing the metrics related to the relayers."),
39      (name = "Health", description = "Health is responsible for showing the health of the relayers.")
40    ),
41    info(description = "OpenZeppelin Relayer API", version = "1.0.0", title = "OpenZeppelin Relayer API",  license(
42        name = "AGPL-3.0 license",
43        url = "https://github.com/OpenZeppelin/openzeppelin-relayer/blob/main/LICENSE"
44    ),
45    contact(
46        name = "OpenZeppelin",
47        url = "https://www.openzeppelin.com",
48    ),
49    terms_of_service = "https://www.openzeppelin.com/tos"),
50    paths(
51        relayer_docs::doc_get_relayer,
52        relayer_docs::doc_list_relayers,
53        relayer_docs::doc_create_relayer,
54        relayer_docs::doc_update_relayer,
55        relayer_docs::doc_delete_relayer,
56        relayer_docs::doc_get_relayer_balance,
57        relayer_docs::doc_get_transaction_by_nonce,
58        relayer_docs::doc_get_transaction_by_id,
59        relayer_docs::doc_list_transactions,
60        relayer_docs::doc_get_relayer_status,
61        relayer_docs::doc_sign_typed_data,
62        relayer_docs::doc_sign,
63        relayer_docs::doc_sign_transaction,
64        relayer_docs::doc_cancel_transaction,
65        relayer_docs::doc_delete_pending_transactions,
66        relayer_docs::doc_rpc,
67        relayer_docs::doc_send_transaction,
68        relayer_docs::doc_replace_transaction,
69        health::health,
70        metrics::list_metrics,
71        metrics::metric_detail,
72        metrics::scrape_metrics,
73        plugin_docs::doc_call_plugin,
74        notification_docs::doc_list_notifications,
75        notification_docs::doc_get_notification,
76        notification_docs::doc_create_notification,
77        notification_docs::doc_update_notification,
78        notification_docs::doc_delete_notification,
79        signer_docs::doc_list_signers,
80        signer_docs::doc_get_signer,
81        signer_docs::doc_create_signer,
82        signer_docs::doc_update_signer,
83        signer_docs::doc_delete_signer,
84    ),
85    components(schemas(
86        models::RelayerResponse,
87        models::CreateRelayerRequest,
88        models::NetworkPolicyResponse,
89        models::EvmPolicyResponse,
90        models::SolanaPolicyResponse,
91        models::StellarPolicyResponse,
92        models::UpdateRelayerRequest,
93        domain::SignDataRequest,
94        domain::SignTypedDataRequest,
95        domain::SignTransactionRequest,
96        domain::SignTransactionExternalResponse,
97        models::PluginCallRequest,
98        plugins::PluginCallResponse
99    ))
100)]
101pub struct ApiDoc;