1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//! Phase 26 — pairing protocol.
//!
//! Two coexisting protocols:
//!
//! - **DM challenge** — opt-in inbound allowlist. A plugin (whatsapp,
//! telegram, …) calls [`PairingGate::should_admit`] before publishing
//! to the broker. Unknown senders get a one-time human-friendly code
//! and the operator approves them via CLI / admin-ui.
//! - **Setup-code** — operator-initiated. `agent pair start` issues a
//! short-lived HMAC-signed bearer token + a gateway URL, packs them
//! into a base64url payload, and renders a QR. A companion app
//! scans, opens the WS, presents the token, and gets a session
//! token in return.
//!
//! This crate is a *leaf*: it does not depend on `nexo-core` or any
//! plugin crate. The bin (`src/main.rs`) wires the store + the gate
//! into the plugins, and registers the CLI subcommand.
pub use PairingChannelAdapter;
pub use PairingGate;
pub use PairingAdapterRegistry;
pub use SetupCodeIssuer;
pub use PairingStore;
pub use ;