@cfxlabsinc/b2b-services
    Preparing search index...

    Type Alias RouteEligibility

    type RouteEligibility = {
        activation:
            | {
                detail: string;
                hint: string
                | null;
                reason: ResolvedRoute["reason"];
                ruleId: string | null;
                status: ResolvedRoute["status"];
            }
            | null;
        blockingConditions: BlockingCondition[];
        candidacy: "PASS"
        | "EXCLUDED";
        deniedBy: RouteExplanation["deniedBy"];
        eligible: boolean;
        explainerDisagrees: boolean;
        rejectedBy: RouteExplanation["rejectedBy"];
        routeId: string;
        routeMatcher: ExplainNode;
        vendorId: string;
    }
    Index
    activation:
        | {
            detail: string;
            hint: string
            | null;
            reason: ResolvedRoute["reason"];
            ruleId: string | null;
            status: ResolvedRoute["status"];
        }
        | null

    Set only for routes the resolver kept: its own activation verdict.

    blockingConditions: BlockingCondition[]

    The route matcher's failing conditions, then each denying cross-route rule's matching ones, so one fix is not followed by a second surprise.

    candidacy: "PASS" | "EXCLUDED"

    The resolver's verdict: PASS when search() kept the route.

    The cross-route activation rules that remove this route before activation; empty when none does.

    eligible: boolean
    explainerDisagrees: boolean

    The explainer and the resolver reached different verdicts, so the conditions below are the explainer's guess, not the engine's reason.

    ROUTE_MATCHER when the TypeScript explainer rejects the route.

    routeId: string
    routeMatcher: ExplainNode
    vendorId: string