import { IConfig } from './'; interface GenericProperties { [key: string]: any; } export interface User extends GenericProperties { email?: string; phone?: string; sessionId?: string; userId?: string; identifiers?: { browserId: string; }; additional?: UserAdditionalData; } export interface UserAdditionalData extends GenericProperties { identifiers?: { browserId?: string; assignedGroup?: string; originalSessionId?: string; }; localDateTime?: string; location?: { storeId?: number; }; timezone?: string; userAgent?: string; url?: string; } export interface Recommendation extends GenericProperties { namedRecommendations?: Array; numRecommendations?: number; queryPostProcessors?: Array; recommendationAdditionalParameters?: RecommendationAdditionalParameters; recommendationAtTime?: number; recommendationCategories?: Array; recommendationCategoriesBlacklist?: Array; recommendationDisableFilters?: boolean; recommendationForItems?: Array; recommendationMinQuantity?: number; recommendationQueryName?: string; recommendationRemoveDuplicates?: boolean; recommendationSubBlockers?: Array; recommendationSubInhibitors?: Array; recommendationSubRecommenders?: Array; } export interface DataTags extends GenericProperties { atStore?: string; deviceType?: 'Bot' | 'Personal computer' | 'Smartphone' | Omit; } export interface CuratedLists extends GenericProperties { specifiedLists: Array; } export interface RecommendationAdditionalParameters extends GenericProperties { customSorterTypes?: Array; dataTags?: DataTags; dataTagsToConsider?: Array>; ignoreRecommendations?: boolean; manual?: CuratedLists; numRecommendationsInternal?: number; postProcessors?: Array; selectedModels?: Array; temporalTypes?: Array; } interface BaseRecommendationQuery extends GenericProperties, IConfig { unixTimestamp?: number; user?: User; signature?: string | null; } interface SingleRecommendationQuery extends BaseRecommendationQuery { recommendation: Recommendation; } interface MultipleRecommendationQuery extends BaseRecommendationQuery { recommendations: Array; } export type RecommendationQuery = SingleRecommendationQuery | MultipleRecommendationQuery;