1#![deny(missing_docs)]
14
15#[cfg(all(feature = "insecure-testing", not(debug_assertions)))]
16compile_error!("insecure-testing cannot be enabled in release builds");
17
18use appcore_core::{
19 validate_identifier, ClusterId, CoreId, CoreIdentity, DistributedCoreManifest, ProtocolVersion,
20 TenantId,
21};
22use appcore_security::{
23 CommandTokenError, CommandTokenFactory, CommandTokenValidator, HashTokenProvider, TokenClaims,
24 TokenProvider, LOCAL_ADMIN_SUBJECT,
25};
26pub use appcore_transport::CancellationToken;
27use axum::body::Bytes;
28use axum::extract::State;
29use axum::http::{header, HeaderMap, HeaderValue, StatusCode};
30use axum::response::{IntoResponse, Response};
31use axum::routing::{get, post};
32use axum::{Json, Router};
33use serde::Serialize;
34use sha2::{Digest, Sha256};
35use std::io;
36use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
37use std::sync::Arc;
38use std::time::{Duration, SystemTime, UNIX_EPOCH};
39
40pub mod v1 {
42 pub use appcore_distributed_contracts::peer_rpc::v1::*;
43}
44
45pub use v1::{
46 PeerAdvertisementV1, PeerCapabilityV1, PeerEndpointV1, PeerHealthResponse, PeerIdentityV1,
47 PeerManifestResponse, PeerRpcCallKind, PeerRpcClientExecutor, PeerRpcEnvelope, PeerRpcError,
48 PeerRpcOutboundRequest, PeerRpcResponse, PEER_COMMAND_PATH, PEER_HEALTH_PATH,
49 PEER_MANIFEST_PATH, PEER_QUERY_PATH,
50};
51
52const MAX_NONCE_CACHE_ENTRIES: usize = 65_536;
53const MAX_HTTP_HEADER_BYTES: usize = 32_768;
54const COMPRESSION_THRESHOLD_BYTES: usize = 1_024;
55const MAX_ENVELOPE_OVERHEAD_BYTES: usize = 65_536;
56
57mod advertisement;
58mod authentication;
59mod client;
60mod host;
61mod nonce;
62mod replay;
63mod transport;
64mod validation;
65
66#[cfg(any(test, feature = "insecure-testing"))]
67pub use authentication::{AllowPeerAuthenticator, StaticPeerRpcTokenIssuer};
68pub use authentication::{
69 HashTokenPeerAuthenticator, HashTokenPeerTokenIssuer, PeerRpcAuthenticator, PeerRpcDispatcher,
70 PeerRpcTokenIssuer,
71};
72pub use client::{
73 PeerRpcClient, PeerRpcClientConfig, PeerRpcHttpRequest, PeerRpcHttpResponse,
74 PeerRpcRetryPolicy, PeerTransportProvider,
75};
76pub use host::{PeerRpcHttpHost, PeerRpcHttpState};
77pub use nonce::{FilePeerNonceStore, InMemoryPeerNonceStore, PeerNonceStore};
78pub use replay::{BoundedReplayStore, ReplayStore, ReplayStoreConfig, ReplayStoreMetrics};
79pub use transport::StdPeerRpcTransport;
80pub use validation::{
81 envelope_signing_hash, payload_hash, route_for_command, route_for_query,
82 PeerRpcValidationConfig, PeerRpcValidator,
83};
84
85#[cfg(test)]
86mod tests;