mb.search(query, options)
Busca en el catalogo del tenant. Equivalente a GET /v1/{tenant}/search con manejo de errores y tracking automatico.
Firma
ts
function search(query: string, options?: SearchOptions): Promise<SearchResult>;
interface SearchOptions {
limit?: number; // default 20
offset?: number; // default 0
source?: string; // override del default del init
filter?: string; // sintaxis Mibizum filter expression
sort?: string; // e.g. "price:asc"
facets?: string[]; // facetas a calcular
channel?: 'overlay' | 'results_page'; // afecta al tracking
signal?: AbortSignal; // para cancelar la peticion
}
interface SearchResult {
query: string;
query_norm: string;
hits: SearchHit[];
total: number;
facets: Record<string, FacetValue[]>;
ms_taken: number;
}Ejemplos
Basico
ts
const r = await mb.search('hidratante');
console.log(r.hits, r.total);Con filtros y orden
ts
const r = await mb.search('hidratante', {
limit: 10,
filter: 'in_stock=true AND price<30',
sort: 'price:asc',
});Cancelable (para overlay con typing rapido)
ts
let controller: AbortController | null = null;
input.addEventListener('input', async (e) => {
controller?.abort();
controller = new AbortController();
try {
const r = await mb.search(e.target.value, { signal: controller.signal });
render(r.hits);
} catch (err) {
if ((err as Error).name !== 'AbortError') throw err;
}
});Manejo de errores
ts
import { MibizumError } from '@mibizum/sdk';
try {
const r = await mb.search('hidratante');
} catch (e) {
if (e instanceof MibizumError) {
console.error(e.code, e.message, e.status);
if (e.code === 'rate_limited') {
// backoff
}
} else {
// network / parse error
}
}Tracking automatico
Por defecto cada search() dispara una llamada a /track/search con el query y results_count. Si no quieres trackear (e.g. autocompletar muy rapido), pasa channel: undefined o usa mb.searchSilent().