import { Region } from "../enums/Region"; import { Language } from "../enums/Language"; import { Algorithm } from "../enums/Algorithm"; import { SortFields } from "../enums/SortFields"; import { SortOrder } from "../enums/SortOrder"; import { postRequestBypass } from "../../utils/requests"; import { migrosApiPaths } from "../apiPaths"; import { IMigrosNecessaryHeaders } from "../interfaces/headers"; const url = migrosApiPaths["onesearch-oc-seapi"].public.v5 + "/search"; // eslint-disable-next-line @typescript-eslint/naming-convention export type IProductSearchOptions = Record; const defaultProductSearchOptions: IProductSearchOptions = {}; export interface IProductSearchBody extends Record { regionId?: Region; language?: Language; productIds?: string[]; query: string; sortFields?: SortFields[]; sortOrder?: SortOrder; algorithm?: Algorithm; filters?: Record; } const defaultProductSearchBody: IProductSearchBody = { regionId: Region.NATIONAL, language: Language.EN, productIds: [], query: "", sortFields: [], sortOrder: SortOrder.ASC, algorithm: Algorithm.DEFAULT, }; async function postProductSearchRequest( url: string, body: IProductSearchBody, options: IProductSearchOptions, headers: IMigrosNecessaryHeaders, ): Promise> { const necessaryHeaders = { accept: "application/json, text/plain, *!/!*", // eslint-disable-next-line @typescript-eslint/naming-convention "content-type": "application/json", ...headers, }; const response = await postRequestBypass( url, body, options, necessaryHeaders, ); return response.data; } export async function postProductSearch( productSearchBody: IProductSearchBody, headers: IMigrosNecessaryHeaders, productSearchOptions?: IProductSearchOptions, ): Promise { productSearchOptions = { ...defaultProductSearchOptions, ...productSearchOptions, }; productSearchBody = { ...defaultProductSearchBody, ...productSearchBody }; return postProductSearchRequest( url, productSearchBody, productSearchOptions, headers, ); }