Response types
All controllers return the sameQueryResult shape in data:
priceRange requires { name: 'Price', code: 'variants.price' } in your facets configuration. Without it, priceRange will be undefined.
Blocks results add a block field with { id, title, anchor_type, strategy_type, strategy_key }. The strategy_type value can be interaction, collection_interaction, similar_products, or manual.
Error handling
All methods return{ data, error } instead of throwing. Errors are discriminated by _tag:
isRetryable classifies errors by tag, code, and status. Use it standalone or as a shouldRetry predicate: