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#[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;