ScreeningPreScreenNode
Boolean expression over the vendor-independent fields only. Pre-screen
decides whether the vendor is called at all, so it cannot read a vendor
response. Exactly one of always, all, any, not, or a
field/op/value comparison.
always is accepted only as a rule's whole condition, never nested, and
only in preScreen — which is why it is declared here and not on the
vendor rule nodes. Anywhere else is a 400.
Matches every screen. With then: SKIP as the last pre-screen rule,
this is how a customer turns the surface off entirely: the pre-screen
default is SCREEN, and this replaces that default. A rule after it is
unreachable and rejected.
Must be true; false is a 400. Declared as a plain boolean rather
than a single-value enum because the generator emits the latter as
enum { True = true }, which is not valid TypeScript (TS18033).
1 - 200 elements1 - 200 elementsFields needing no vendor response, so they work in both phases, and the only
fields a pre-screen rule may use. tx.amountUsd and tx.asset are present
only where the request establishes them; neither is available on the signing
path. address compares case-sensitively, since base58 chains are
case-significant. An absent field compares unknown, so the rule sits out.
tx.amountUsd, tx.asset, chain, address Comparison to apply. in and nin take a list operand and the rest take a
scalar; contains is substring, never regex. Which operators a given field
admits is per field, and rejected by the validator rather than here.
eq, neq, in, nin, gte, lte, gt, lt, contains Value to compare against: a scalar, or a list of at most 200 for in and
nin. Its type has to match the field's, which the validator checks.