  Choreographic models support a correctness-by-construction principle in
distributed programming. Also, they enable the automatic generation of correct
message-based communication patterns from a global specification of the desired
system behaviour. In this paper we extend the theory of choreography automata,
a choreographic model based on finite-state automata, with two key features.
First, we allow participants to act only in some of the scenarios described by
the choreography automaton. While this seems natural, many choreographic
approaches in the literature, and choreography automata in particular, forbid
this behaviour. Second, we equip communications with assertions constraining
the values that can be communicated, enabling a design-by-contract approach. We
provide a toolchain allowing to exploit the theory above to generate APIs for
TypeScript web programming. Programs communicating via the generated APIs
follow, by construction, the prescribed communication pattern and are free from
communication errors such as deadlocks.
