Optionalnow?: InstantWall-clock instant the resolver evaluates against. Each candidate
route's matcher sees dayOfWeek / minuteOfDay computed from this
instant converted to that route's data.cutoffTimezone — so a
"before 4:15 PM" cutoff fires at different UTC instants for routes
in different timezones. Defaults to Temporal.Now.instant().
OptionalorderBy?: "createdAt" | "priority"Optionalpage?: numberOptionalpageSize?: number
For each requested product, return the rail-level set of supported source currencies and country codes.
sourceCurrenciesare extracted fromproduct_route_version.matcher(the route's own gate).countryCodesare extracted from each route's ADMIN-tierAPPROVEactivation rule matchers — route matchers don't carry country constraints in practice. Both useb2b.matcher_extract_literals(recursive plpgsql walker that pullsis/is_one_ofliterals;none/is_not/ ranges are unbounded) and theb2b.literal_unionaggregate to fold per-route extractions into one capability summary per product.A field is
undefinedwhen at least one contributing matcher placed no enumerable constraint on it (ALWAYS, the field didn't appear, or any unsupported operator). Callers surface that as "no rail-level restriction"; an empty array would mean "the rail supports nothing".Customer-tier rules are intentionally excluded — this is a product- level capability summary, not a per-customer authorization check.