Skip to content

Architecture

PeSIT Wizard is a single Rust process — the pesitwizard binary — organised as a small workspace of crates.

Crates

CrateResponsibility
pesit-coreProtocol model: parameters, FPDUs, CRC, compression, article codecs, state tables (no I/O).
pesit-ioThe async session engines (requester / responder) over tokio.
pesit-appThe embedded configuration store and REST utilities.
pesit-clientThe outbound transfer engine (as a library).
pesit-pkiX.509 inspection, a local CA, native Vault PKI, OCSP and backup signing.
pesit-clusterNATS / JetStream membership, leader election and configuration replication.
pesit-connectorS3 / SFTP / local storage staging.
pesit-nodeThe pesitwizard binary: listeners + outbound engine + REST APIs + web console.

One process, two REST surfaces

The node runs the listener manager and the outbound transfer engine over one shared store, and exposes two REST surfaces:

  • the admin API on --api-port (partners, virtual files, listeners, inbound records, certificates, connectors, schedules, cluster, audit, backup — and the web console at /),
  • the transfer API on --transfer-port (remote servers, send / receive / message, outbound history).

The transfer API is also mounted under /client on the admin port, so the single-origin web console reaches both. Unauthenticated operational endpoints (/actuator/health, /metrics, /ocsp) sit on the admin port.

State machine

The PeSIT session engines are driven by the protocol state tables as data (the same shape as the Connect:Express tables), shared by the listening and initiating roles and run by an event loop over network and application events. This is what lets the node handle RESYN / IDT collisions, windowed synchronisation and restart correctly.

Storage

Configuration lives in an embedded store (--db). Checkpoints for restart are persisted per transfer under the checkpoint directories. Connector-backed virtual files stage to a local working file so checkpoint / restart, CRC and record formats keep working.

PeSIT Wizard — open source under Apache-2.0