Skip to main content

wecomx_runtime/
lib.rs

1//! WeCom 认证运行时:鉴权客户端、鉴权 Transport 与客户端构建。
2//!
3//! 组合 [`wecomx-auth`](wecomx_auth) 的认证能力与 [`wecomx-transport`] 的请求
4//! 传输,为第三方应用提供开箱即用的 Library 入口:
5//!
6//! - [`WecomClient`]:门面客户端——鉴权 + 动态服务发现 + schema 驱动方法
7//!   调用一步到位(`service()` / `method()` / `run(argv)`);
8//! - [`WecomClientBuilder`]:构建 [`WecomClient`] 或仅带鉴权的
9//!   [`Transport`](wecomx_transport::Transport)(token provider、超时、默认头等);
10//! - [`WecomBackend`]:统一出网后端——持有 token 即注入
11//!   `Authorization: Bearer <token>`;挂 [`RequireAuth`] 的端点先过门禁;
12//!   命中 853004(token 失效)时经 [`TokenProvider`](wecomx_auth::TokenProvider)
13//!   静默刷新并重放原请求一次(载荷经 `HttpRequestPayload` 工厂克隆,零成本重放);
14//! - [`endpoint_catalog`]:网关扁平协议的端点目录覆写(配合 `wecomx::Client` 使用)。
15//!
16//! # Quick start
17//!
18//! ```ignore
19//! use std::sync::Arc;
20//! use std::time::Duration;
21//! use wecomx_runtime::{BotGatewayTokenProvider, EncryptedFileCredentialStore, WecomClientBuilder};
22//!
23//! let store = Arc::new(EncryptedFileCredentialStore::new("~/.config/wecom"));
24//! let provider = BotGatewayTokenProvider::new("bot-id", "secret", store);
25//!
26//! let client = WecomClientBuilder::new()
27//!     .token_provider(Arc::new(provider))
28//!     .timeout(Duration::from_secs(10))
29//!     .build()
30//!     .await?;
31//!
32//! // 程序化调用(服务/方法名由 discovery 下发)
33//! let svc = client.service("hr").await?;
34//! let result = svc.method(&["users", "list"])?.invoke(serde_json::json!({})).await?;
35//! ```
36
37pub mod backend;
38pub mod builder;
39pub mod catalog;
40pub mod client;
41
42pub use backend::{TOKEN_EXPIRED_ERRCODE, WecomBackend, is_token_expired, set_bearer_token};
43pub use builder::{DEFAULT_BASE_URL, DEFAULT_BIN_NAME, WecomClientBuilder};
44pub use catalog::endpoint_catalog;
45pub use client::WecomClient;
46
47// 网关协议与鉴权能力标记定义于 wecomx-auth,此处转出便于下游单依赖使用。
48pub use wecomx_auth::{
49    AccessToken, AuthError, BotCredential, BotGatewayTokenProvider, CredentialStore, Credentials,
50    EncryptedFileCredentialStore, FlatRes, MemoryCredentialStore, NestedRes, RequireAuth,
51    SuppressAuth, TokenProvider, auth_endpoint, gateway::FlatApiResponse,
52};