export interface RecomnextConfig { baseUrl: string; tenantId: string; privateToken?: string; retries?: number; timeout?: number; backoffFactor?: number; } export interface ItemPayload { externalId: string; attributes?: Record; category?: string; expiresAt?: string; } export interface UserPayload { externalId: string; attributes?: Record; } export type InteractionType = 'view' | 'cart' | 'purchase' | 'rating'; export interface InteractionPayload { userId?: string; itemId: string; sessionId?: string; type: InteractionType; weight?: number; scenarioSlug?: string; timestamp?: string; /** ISO-3166-1 alpha-2 (e.g. IN, DE). Omit for global ranking. */ country?: string; } export interface ImpressionPayload { userId?: string; sessionId?: string; itemIds: string[]; scenarioSlug?: string; timestamp?: string; /** ISO-3166-1 alpha-2 (e.g. IN, DE). Omit for global ranking. */ country?: string; } export interface RecommendedItem { itemId?: string; /** * Compatibility alias for `itemId`. * @deprecated Use `itemId` instead. */ externalId?: string; score?: number; [key: string]: unknown; } export interface ProjectionOptions { returnProperties?: boolean; includedProperties?: string[]; } export interface RecommendationResult { items: RecommendedItem[]; count: number; algorithm?: string; filterRelaxation?: FilterRelaxation; } export interface FilterRelaxation { applied: true; originalFilter: string; effectiveFilter: string | null; droppedClauses: string[]; droppedEntireFilter: boolean; resultCountAfterFilter: number; } /** Request-time post-process overrides (field-level replace; omit keeps scenario). */ export interface PostProcessOverrideOptions { filter?: string | null; boosters?: string[] | null; rulesSlugs?: string[] | null; segmentationId?: string | null; itemsPerSegment?: number | null; autoRelaxFilters?: boolean; relaxEntireFilterOnEmpty?: boolean; } export interface RecommendationOptions extends ProjectionOptions, PostProcessOverrideOptions { count?: number; scenario?: string; /** ISO-3166-1 alpha-2 (e.g. IN, DE). Omit for global ranking. */ country?: string; } export interface RecommendOptions extends ProjectionOptions, PostProcessOverrideOptions { scenario?: string; logicType?: LogicType | string; userId?: string; itemId?: string; itemIds?: string[]; count?: number; /** ISO-3166-1 alpha-2 (e.g. IN, DE). Omit for global ranking. */ country?: string; } export interface ConstraintsConfig { maxPerCategory?: number; injectLongTail?: boolean; longTailPercentage?: number; freshnessBoostDays?: number; purchasedItemsMaxPercent?: number; } export interface QdrantSettings { hnsw_ef?: number; exact?: boolean; quantization_rescore?: boolean; quantization_oversampling?: number; score_threshold?: number; filter_categories?: string[]; } export type LogicType = 'user-to-item' | 'item-to-item' | 'recently-viewed' | 'items-to-items' | 'similar-products'; export interface CreateScenarioPayload { name: string; slug: string; logicType: LogicType; filter?: string; boosters?: string[]; constraints?: ConstraintsConfig; qdrantSettings?: QdrantSettings; algorithm?: string; minItems?: number; maxItems?: number; autoRelaxConstraints?: boolean; autoRelaxFilters?: boolean; relaxEntireFilterOnEmpty?: boolean; autoExpandSegments?: boolean; segmentationId?: string; itemsPerSegment?: number; rulesSlugs?: string[]; active?: boolean; } export interface UpdateScenarioPayload extends Partial { } export interface Scenario extends CreateScenarioPayload { _id: string; tenantId: string; createdAt: string; updatedAt: string; } export interface CatalogItem { _id: string; tenantId: string; externalId: string; attributes: Record; category?: string; createdAt: string; updatedAt: string; } export interface CatalogUser { _id: string; tenantId: string; externalId: string; attributes: Record; } export interface PaginatedResult { items: T[]; total: number; page: number; limit: number; } export interface ListItemsOptions { page?: number; limit?: number; category?: string; search?: string; } export interface ListUsersOptions { page?: number; limit?: number; search?: string; } export interface MergeResult { merged: number; alreadyMerged?: boolean; } export interface UpsertResult { upserted: number; } export interface AcceptedResult { accepted: number; } //# sourceMappingURL=types.d.ts.map