@depict-ai/ui 0.0.83 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ import { SearchSuggestionsResponse, CategorySuggestion } from "@depict-ai/types/
7
7
  import { SearchSuggestionsRequest } from "@depict-ai/types/api/SearchSuggestionsRequest";
8
8
  import { ProductListingRequest } from "@depict-ai/types/api/ProductListingRequest";
9
9
  import { ProductListingResponse } from "@depict-ai/types/api/ProductListingResponse";
10
- export const version = "0.0.83";
10
+ export const version = "1.0.1";
11
11
  export type OnNavigation = ((options: {
12
12
  is_replace: boolean;
13
13
  new_url: URL;
@@ -33,6 +33,8 @@ type RecsAPIWrapperOptions = {
33
33
  type: string;
34
34
  merchant: string;
35
35
  market: string;
36
+ userId?: string;
37
+ sessionId?: string;
36
38
  headers?: HeadersInit;
37
39
  } & ExclusiveId;
38
40
  /**
@@ -45,6 +47,8 @@ type RecsAPIWrapperOptions = {
45
47
  * @param categoryId When requesting recommendations for a category page, pass the id of the category page as `categoryId`.
46
48
  * @param productId When requesting recommendations for a single product, e.g. on a product detail page, pass the id of the product as `productId`.
47
49
  * @param productIds When requesting recommendations that should take multiple products into account, i.e. the contents of the basket/cart, pass an array of product ids as `productIds`
50
+ * @param userId Optional unique identifier of a logged in user. Should be persistent across devices and sessions.
51
+ * @param sessionId Optional unique identifer of the current session. Only necessary when performing server side requests to Depict.
48
52
  * @param headers Optional headers to send to the Depict API. This could be authentication for example. 99% of integrations can leave this unset.
49
53
  * When no id is provided (none out of `categoryId`, `productId` and `productIds`) general recommendations will be fetched. This is for, for example, the frontpage where generally popular products get returned.
50
54
  *
@@ -158,11 +162,16 @@ export type InstantCard<T extends Display> = (display: T, context: {
158
162
  merchant: string;
159
163
  market: string;
160
164
  }) => JSX.Element;
165
+ interface DepictAPIConstructorOptions {
166
+ get_metadata?: () => Promise<{
167
+ [k: string]: string;
168
+ } | undefined>;
169
+ get_user_id?: () => string | undefined;
170
+ get_session_id?: () => string | undefined;
171
+ }
161
172
  export class DepictAPI {
162
173
  #private;
163
- constructor(get_metadata?: () => Promise<{
164
- [k: string]: string;
165
- } | undefined>);
174
+ constructor({ get_metadata, get_user_id, get_session_id }?: DepictAPIConstructorOptions);
166
175
  suggest(input_req: SearchSuggestionsRequest): Promise<SearchSuggestionsResponse & {
167
176
  failed?: true;
168
177
  }>;
@@ -374,6 +383,18 @@ export type BaseProviderConfig = {
374
383
  * @example "YOUR_MARKET", "no", "en-de"
375
384
  */
376
385
  market: string;
386
+ /**
387
+ * Optional unique identifier of a logged in user. Should be persistent across devices and sessions.
388
+ */
389
+ userId?: string;
390
+ /**
391
+ * Optional unique identifer of the current session. Only necessary when performing server side requests to Depict.
392
+ */
393
+ sessionId?: string;
394
+ /**
395
+ * Custom metadata to be sent with each request to the Depict API. Only necessary if specifically instructed by Depict.
396
+ */
397
+ metaData?: Record<string, string>;
377
398
  };
378
399
  export type BaseSearchProviderConfig = {
379
400
  /**
package/dist/main.js CHANGED
@@ -35,7 +35,7 @@ $parcel$export(module.exports, "SolidFormatPrice", () => $5fc9fc23df1591db$expor
35
35
  $parcel$export(module.exports, "connect_search_field_height_to_aligner_height", () => $246e3e89a097f014$export$828dcdd425fd3231);
36
36
  $parcel$export(module.exports, "PageReplacer", () => $37e96a5ebc768cc7$export$3ccaa27d81dd8556);
37
37
  $parcel$export(module.exports, "version", () => $ae93561d5649a847$export$83d89fbfd8236492);
38
- /*! Depict.ai search and product listing SDK */ const $ae93561d5649a847$export$83d89fbfd8236492 = "0.0.83";
38
+ /*! Depict.ai search and product listing SDK */ const $ae93561d5649a847$export$83d89fbfd8236492 = "1.0.1";
39
39
 
40
40
 
41
41
 
@@ -114,15 +114,6 @@ function $0de081f67b6d15b5$export$9862539c89138352(get_default_values_, router_)
114
114
 
115
115
  const $9ce64f69303c371e$var$v2_base_url = (0, $46MJV$depictaiutilishared.base_url) + "/v2/";
116
116
  const $9ce64f69303c371e$var$search_base_url = $9ce64f69303c371e$var$v2_base_url + "search/";
117
- const $9ce64f69303c371e$var$add_ids_to_request = (input_req)=>{
118
- const request = {
119
- ...input_req
120
- };
121
- request.dsid ??= (0, $46MJV$depictaiutilishared.get_depict_id)();
122
- request.user_id ??= (0, $46MJV$depictaiutilishared.get_user_id)();
123
- request.session_id ??= (0, $46MJV$depictaiutilishared.get_session_id)();
124
- return request;
125
- };
126
117
  class $9ce64f69303c371e$export$e015ed2f2950f2e3 {
127
118
  #supports_finalization_registry = typeof FinalizationRegistry === "function";
128
119
  #cache_objs = {};
@@ -137,12 +128,26 @@ class $9ce64f69303c371e$export$e015ed2f2950f2e3 {
137
128
  })) : undefined
138
129
  };
139
130
  }
131
+ #add_ids_to_request = (input_req)=>{
132
+ const request = {
133
+ ...input_req
134
+ };
135
+ request.dsid ??= (0, $46MJV$depictaiutilishared.get_depict_id)();
136
+ // Todo: remove the default user and session IDs once we've confirmed backend can handle it and do whatever fallback is necessary.
137
+ request.user_id ??= this.#get_user_id?.() || (0, $46MJV$depictaiutilishared.get_user_id)();
138
+ request.session_id ??= this.#get_session_id?.() || (0, $46MJV$depictaiutilishared.get_session_id)();
139
+ return request;
140
+ };
140
141
  #get_metadata;
141
- constructor(get_metadata){
142
+ #get_user_id;
143
+ #get_session_id;
144
+ constructor({ get_metadata: get_metadata , get_user_id: get_user_id , get_session_id: get_session_id } = {}){
142
145
  this.#get_metadata = get_metadata;
146
+ this.#get_user_id = get_user_id;
147
+ this.#get_session_id = get_session_id;
143
148
  }
144
149
  async suggest(input_req) {
145
- const request = $9ce64f69303c371e$var$add_ids_to_request(input_req);
150
+ const request = this.#add_ids_to_request(input_req);
146
151
  const url = (0, $46MJV$depictaiutilishared.make_url_with_query_params)($9ce64f69303c371e$var$search_base_url + "suggestions", request);
147
152
  const results = await (0, $46MJV$depictaiutilishared.fetch_retry)((0, $46MJV$depictaiutilishared.add_version_query_params)(url));
148
153
  attempt_to_return_api_response: {
@@ -159,7 +164,7 @@ class $9ce64f69303c371e$export$e015ed2f2950f2e3 {
159
164
  }
160
165
  async #cached_post_request(endpoint1, input_req, fallback_response) {
161
166
  const cache_obj = this.#get_cache_obj_for_endpoint(endpoint1);
162
- const with_ids = $9ce64f69303c371e$var$add_ids_to_request(input_req);
167
+ const with_ids = this.#add_ids_to_request(input_req);
163
168
  const metaData = await this.#get_metadata?.();
164
169
  const request = metaData ? Object.assign(with_ids, {
165
170
  metadata: metaData
@@ -833,7 +838,8 @@ function $7b0b7e887b485a91$export$f33414a4df0afd3f({ product_card_template_: pro
833
838
  if (!unwrapped_array?.length || !unwrapped_array.every((item)=>item)) // Haven't finished rendering yet in case of "async" rendering, so don't freeze the elements yet
834
839
  return;
835
840
  // placeholders have finished rendering, freeze the elements
836
- $7b0b7e887b485a91$var$cached_placeholder_element = get_cloned_placeholders(unwrapped_array); // Clone initial return value so that who gave us the elements can't mutate them, which has caused issues before with react
841
+ // here we might receive the result of a promise that has already been received, tore down and put into cached_placeholder_element, so don't overwrite that more valid result if it's already set
842
+ $7b0b7e887b485a91$var$cached_placeholder_element ||= get_cloned_placeholders(unwrapped_array); // Clone initial return value so that who gave us the elements can't mutate them, which has caused issues before with react
837
843
  $7b0b7e887b485a91$var$rendering_cached_placeholder_element = undefined;
838
844
  dispose_original_copy(); // So that this memo will never re-run and the placeholder rendering function can clean up
839
845
  return get_cloned_placeholders(); // clone, just in case. If we wouldn't, someone could modify the copy in the DOM, and it would affect the cached version
package/dist/module.js CHANGED
@@ -1,9 +1,9 @@
1
- import {add_to_version_info as $g9l4l$add_to_version_info, fetch_recs as $g9l4l$fetch_recs, snakeCasifyObject as $g9l4l$snakeCasifyObject, GenericSliderArrowButton as $g9l4l$GenericSliderArrowButton, catchify as $g9l4l$catchify, instant_exec_on_suspect_history_change as $g9l4l$instant_exec_on_suspect_history_change, base_url as $g9l4l$base_url, get_depict_id as $g9l4l$get_depict_id, get_user_id as $g9l4l$get_user_id, get_session_id as $g9l4l$get_session_id, dlog as $g9l4l$dlog, make_url_with_query_params as $g9l4l$make_url_with_query_params, fetch_retry as $g9l4l$fetch_retry, add_version_query_params as $g9l4l$add_version_query_params, sort_obj as $g9l4l$sort_obj, Placeholder as $g9l4l$Placeholder, report as $g9l4l$report, javascript_media_query as $g9l4l$javascript_media_query, standard_price_format as $g9l4l$standard_price_format, make_random_classname as $g9l4l$make_random_classname, n_col_styling_with_dist as $g9l4l$n_col_styling_with_dist, observer as $g9l4l$observer, CrossIcon as $g9l4l$CrossIcon, useExpandingContainer as $g9l4l$useExpandingContainer, Amazing_Slider as $g9l4l$Amazing_Slider, slider_snap_css as $g9l4l$slider_snap_css, slider_fading_factory as $g9l4l$slider_fading_factory, MinusIcon as $g9l4l$MinusIcon, FilterIcon as $g9l4l$FilterIcon, SortIconAsc as $g9l4l$SortIconAsc, SortIconDesc as $g9l4l$SortIconDesc, PlusIcon as $g9l4l$PlusIcon, hsl_to_rgb as $g9l4l$hsl_to_rgb, relative_luminance_from_rgb as $g9l4l$relative_luminance_from_rgb, TickIcon as $g9l4l$TickIcon, ArrowUp as $g9l4l$ArrowUp, queueMacroTask as $g9l4l$queueMacroTask, dwarn as $g9l4l$dwarn, ContainedPlaceholderImage as $g9l4l$ContainedPlaceholderImage, BackIcon as $g9l4l$BackIcon, SearchIcon as $g9l4l$SearchIcon, Layout as $g9l4l$Layout, async_iterable_ipns as $g9l4l$async_iterable_ipns, make_asyncIterable_exiter as $g9l4l$make_asyncIterable_exiter, href_change_ipns as $g9l4l$href_change_ipns, ContainedImage as $g9l4l$ContainedImage, buildThresholdList as $g9l4l$buildThresholdList, deparallelize_no_drop as $g9l4l$deparallelize_no_drop, PreviousSearchIcon as $g9l4l$PreviousSearchIcon, insert_surfaces as $g9l4l$insert_surfaces} from "@depict-ai/utilishared";
1
+ import {add_to_version_info as $g9l4l$add_to_version_info, fetch_recs as $g9l4l$fetch_recs, snakeCasifyObject as $g9l4l$snakeCasifyObject, GenericSliderArrowButton as $g9l4l$GenericSliderArrowButton, catchify as $g9l4l$catchify, instant_exec_on_suspect_history_change as $g9l4l$instant_exec_on_suspect_history_change, base_url as $g9l4l$base_url, dlog as $g9l4l$dlog, get_depict_id as $g9l4l$get_depict_id, get_user_id as $g9l4l$get_user_id, get_session_id as $g9l4l$get_session_id, make_url_with_query_params as $g9l4l$make_url_with_query_params, fetch_retry as $g9l4l$fetch_retry, add_version_query_params as $g9l4l$add_version_query_params, sort_obj as $g9l4l$sort_obj, Placeholder as $g9l4l$Placeholder, report as $g9l4l$report, javascript_media_query as $g9l4l$javascript_media_query, standard_price_format as $g9l4l$standard_price_format, make_random_classname as $g9l4l$make_random_classname, n_col_styling_with_dist as $g9l4l$n_col_styling_with_dist, observer as $g9l4l$observer, CrossIcon as $g9l4l$CrossIcon, useExpandingContainer as $g9l4l$useExpandingContainer, Amazing_Slider as $g9l4l$Amazing_Slider, slider_snap_css as $g9l4l$slider_snap_css, slider_fading_factory as $g9l4l$slider_fading_factory, MinusIcon as $g9l4l$MinusIcon, FilterIcon as $g9l4l$FilterIcon, SortIconAsc as $g9l4l$SortIconAsc, SortIconDesc as $g9l4l$SortIconDesc, PlusIcon as $g9l4l$PlusIcon, hsl_to_rgb as $g9l4l$hsl_to_rgb, relative_luminance_from_rgb as $g9l4l$relative_luminance_from_rgb, TickIcon as $g9l4l$TickIcon, ArrowUp as $g9l4l$ArrowUp, queueMacroTask as $g9l4l$queueMacroTask, dwarn as $g9l4l$dwarn, ContainedPlaceholderImage as $g9l4l$ContainedPlaceholderImage, BackIcon as $g9l4l$BackIcon, SearchIcon as $g9l4l$SearchIcon, Layout as $g9l4l$Layout, async_iterable_ipns as $g9l4l$async_iterable_ipns, make_asyncIterable_exiter as $g9l4l$make_asyncIterable_exiter, href_change_ipns as $g9l4l$href_change_ipns, ContainedImage as $g9l4l$ContainedImage, buildThresholdList as $g9l4l$buildThresholdList, deparallelize_no_drop as $g9l4l$deparallelize_no_drop, PreviousSearchIcon as $g9l4l$PreviousSearchIcon, insert_surfaces as $g9l4l$insert_surfaces} from "@depict-ai/utilishared";
2
2
  import {template as $g9l4l$template, insert as $g9l4l$insert, effect as $g9l4l$effect, setAttribute as $g9l4l$setAttribute, createComponent as $g9l4l$createComponent, use as $g9l4l$use, memo as $g9l4l$memo, addEventListener as $g9l4l$addEventListener, delegateEvents as $g9l4l$delegateEvents, spread as $g9l4l$spread, classList as $g9l4l$classList, style as $g9l4l$style, Dynamic as $g9l4l$Dynamic, mergeProps as $g9l4l$mergeProps, className as $g9l4l$className} from "solid-js/web";
3
3
  import {createSignal as $g9l4l$createSignal, onCleanup as $g9l4l$onCleanup, createComputed as $g9l4l$createComputed, createRenderEffect as $g9l4l$createRenderEffect, createEffect as $g9l4l$createEffect, untrack as $g9l4l$untrack, batch as $g9l4l$batch, createResource as $g9l4l$createResource, createMemo as $g9l4l$createMemo, Show as $g9l4l$Show, createReaction as $g9l4l$createReaction, Suspense as $g9l4l$Suspense, on as $g9l4l$on, createRoot as $g9l4l$createRoot, ErrorBoundary as $g9l4l$ErrorBoundary, For as $g9l4l$For, getOwner as $g9l4l$getOwner, runWithOwner as $g9l4l$runWithOwner, Index as $g9l4l$Index} from "solid-js";
4
4
  import {compressToBase64 as $g9l4l$compressToBase64, decompressFromBase64 as $g9l4l$decompressFromBase64} from "lz-string";
5
5
 
6
- /*! Depict.ai search and product listing SDK */ const $18bf1d29fb889cca$export$83d89fbfd8236492 = "0.0.83";
6
+ /*! Depict.ai search and product listing SDK */ const $18bf1d29fb889cca$export$83d89fbfd8236492 = "1.0.1";
7
7
 
8
8
 
9
9
 
@@ -82,15 +82,6 @@ function $3075a4497054bec6$export$9862539c89138352(get_default_values_, router_)
82
82
 
83
83
  const $3846bb34098c738f$var$v2_base_url = (0, $g9l4l$base_url) + "/v2/";
84
84
  const $3846bb34098c738f$var$search_base_url = $3846bb34098c738f$var$v2_base_url + "search/";
85
- const $3846bb34098c738f$var$add_ids_to_request = (input_req)=>{
86
- const request = {
87
- ...input_req
88
- };
89
- request.dsid ??= (0, $g9l4l$get_depict_id)();
90
- request.user_id ??= (0, $g9l4l$get_user_id)();
91
- request.session_id ??= (0, $g9l4l$get_session_id)();
92
- return request;
93
- };
94
85
  class $3846bb34098c738f$export$e015ed2f2950f2e3 {
95
86
  #supports_finalization_registry = typeof FinalizationRegistry === "function";
96
87
  #cache_objs = {};
@@ -105,12 +96,26 @@ class $3846bb34098c738f$export$e015ed2f2950f2e3 {
105
96
  })) : undefined
106
97
  };
107
98
  }
99
+ #add_ids_to_request = (input_req)=>{
100
+ const request = {
101
+ ...input_req
102
+ };
103
+ request.dsid ??= (0, $g9l4l$get_depict_id)();
104
+ // Todo: remove the default user and session IDs once we've confirmed backend can handle it and do whatever fallback is necessary.
105
+ request.user_id ??= this.#get_user_id?.() || (0, $g9l4l$get_user_id)();
106
+ request.session_id ??= this.#get_session_id?.() || (0, $g9l4l$get_session_id)();
107
+ return request;
108
+ };
108
109
  #get_metadata;
109
- constructor(get_metadata){
110
+ #get_user_id;
111
+ #get_session_id;
112
+ constructor({ get_metadata: get_metadata , get_user_id: get_user_id , get_session_id: get_session_id } = {}){
110
113
  this.#get_metadata = get_metadata;
114
+ this.#get_user_id = get_user_id;
115
+ this.#get_session_id = get_session_id;
111
116
  }
112
117
  async suggest(input_req) {
113
- const request = $3846bb34098c738f$var$add_ids_to_request(input_req);
118
+ const request = this.#add_ids_to_request(input_req);
114
119
  const url = (0, $g9l4l$make_url_with_query_params)($3846bb34098c738f$var$search_base_url + "suggestions", request);
115
120
  const results = await (0, $g9l4l$fetch_retry)((0, $g9l4l$add_version_query_params)(url));
116
121
  attempt_to_return_api_response: {
@@ -127,7 +132,7 @@ class $3846bb34098c738f$export$e015ed2f2950f2e3 {
127
132
  }
128
133
  async #cached_post_request(endpoint1, input_req, fallback_response) {
129
134
  const cache_obj = this.#get_cache_obj_for_endpoint(endpoint1);
130
- const with_ids = $3846bb34098c738f$var$add_ids_to_request(input_req);
135
+ const with_ids = this.#add_ids_to_request(input_req);
131
136
  const metaData = await this.#get_metadata?.();
132
137
  const request = metaData ? Object.assign(with_ids, {
133
138
  metadata: metaData
@@ -801,7 +806,8 @@ function $dc5df79ae78a9d00$export$f33414a4df0afd3f({ product_card_template_: pro
801
806
  if (!unwrapped_array?.length || !unwrapped_array.every((item)=>item)) // Haven't finished rendering yet in case of "async" rendering, so don't freeze the elements yet
802
807
  return;
803
808
  // placeholders have finished rendering, freeze the elements
804
- $dc5df79ae78a9d00$var$cached_placeholder_element = get_cloned_placeholders(unwrapped_array); // Clone initial return value so that who gave us the elements can't mutate them, which has caused issues before with react
809
+ // here we might receive the result of a promise that has already been received, tore down and put into cached_placeholder_element, so don't overwrite that more valid result if it's already set
810
+ $dc5df79ae78a9d00$var$cached_placeholder_element ||= get_cloned_placeholders(unwrapped_array); // Clone initial return value so that who gave us the elements can't mutate them, which has caused issues before with react
805
811
  $dc5df79ae78a9d00$var$rendering_cached_placeholder_element = undefined;
806
812
  dispose_original_copy(); // So that this memo will never re-run and the placeholder rendering function can clean up
807
813
  return get_cloned_placeholders(); // clone, just in case. If we wouldn't, someone could modify the copy in the DOM, and it would affect the cached version
@@ -0,0 +1,197 @@
1
+ /* tslint:disable */
2
+ /**
3
+ * This file was automatically generated by json-schema-to-typescript.
4
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
5
+ * and run json-schema-to-typescript to regenerate this file.
6
+ */
7
+
8
+ /**
9
+ * An enumeration.
10
+ */
11
+ export type SortingOrder = "asc" | "desc";
12
+
13
+ export interface BaseSearchRequest {
14
+ tenant: string;
15
+ market: string;
16
+ /**
17
+ * List of filters to apply to the results.
18
+ */
19
+ filters?: SearchFilter[];
20
+ /**
21
+ * Specifies the sorting method. By default, the results are ordered by relevance. To find the possible values for this field, query the endpoint and look at the `sorts` field.
22
+ */
23
+ sort?: SortModel;
24
+ /**
25
+ * User identifier
26
+ */
27
+ user_id?: string;
28
+ /**
29
+ * Session identifier
30
+ */
31
+ session_id?: string;
32
+ /**
33
+ * Populated for integrations performed by Depict.ai only. Depict.ai Session Id
34
+ */
35
+ dsid?: string;
36
+ /**
37
+ * Metadata that can be used to modify the behaviour of the search.
38
+ */
39
+ metadata?: {
40
+ [k: string]: string;
41
+ };
42
+ /**
43
+ * The search query.
44
+ */
45
+ query?: string;
46
+ }
47
+ export interface SearchFilter {
48
+ /**
49
+ * The field to filter by.
50
+ */
51
+ field: string;
52
+ /**
53
+ * The operation used for filtering. The filtering should be read as `field op data`, for example `brand in ["Nike", "Adidas"]`.
54
+ */
55
+ op: "eq" | "neq" | "in" | "nin" | "leq" | "geq" | "inrange";
56
+ /**
57
+ * Data for the filter.
58
+ */
59
+ data?:
60
+ | ("true" | "false")
61
+ | number
62
+ | number
63
+ | string
64
+ | [number, number]
65
+ | [number, number]
66
+ | [number, number]
67
+ | [number, number]
68
+ | (
69
+ | ("true" | "false")
70
+ | number
71
+ | number
72
+ | string
73
+ | [number, number]
74
+ | [number, number]
75
+ | [number, number]
76
+ | [number, number]
77
+ )[]
78
+ | (("true" | "false") | number | number | string)[][];
79
+ /**
80
+ * Metadata about the filter that can be used for rendering. For example, this could contain the possible values to filter by and their counts in the results.
81
+ */
82
+ meta?: RangeFilterMeta | ValuesFilterMeta | HierarchicalValuesFilterMeta;
83
+ /**
84
+ * ID of the filter. If multiple filters share the same ID, they should be grouped together in the UI.
85
+ */
86
+ id?: string;
87
+ }
88
+ export interface RangeFilterMeta {
89
+ /**
90
+ * Title of the group, where a group consists of all the filters that share an ID.
91
+ */
92
+ group_title?: string;
93
+ /**
94
+ * Whether the filter group should be expanded by default or not.
95
+ */
96
+ group_expanded?: boolean;
97
+ type?: "range";
98
+ /**
99
+ * The minimum value that can be selected in the range.
100
+ */
101
+ min: number;
102
+ /**
103
+ * The maximum value that can be selected in the range.
104
+ */
105
+ max: number;
106
+ /**
107
+ * The unit of the range values.
108
+ */
109
+ unit?: string;
110
+ /**
111
+ * The currency of the range values.
112
+ */
113
+ currency?: string;
114
+ }
115
+ export interface ValuesFilterMeta {
116
+ /**
117
+ * Title of the group, where a group consists of all the filters that share an ID.
118
+ */
119
+ group_title?: string;
120
+ /**
121
+ * Whether the filter group should be expanded by default or not.
122
+ */
123
+ group_expanded?: boolean;
124
+ /**
125
+ * Type of filter.
126
+ */
127
+ type?: "radio" | "checkbox" | "checkbox-grid";
128
+ /**
129
+ * Selectable values
130
+ */
131
+ values: (
132
+ | ("true" | "false")
133
+ | number
134
+ | number
135
+ | string
136
+ | [number, number]
137
+ | [number, number]
138
+ | [number, number]
139
+ | [number, number]
140
+ )[];
141
+ /**
142
+ * Counts for values
143
+ */
144
+ counts?: number[];
145
+ /**
146
+ * Names for values
147
+ */
148
+ names?: string[];
149
+ }
150
+ export interface HierarchicalValuesFilterMeta {
151
+ /**
152
+ * Title of the group, where a group consists of all the filters that share an ID.
153
+ */
154
+ group_title?: string;
155
+ /**
156
+ * Whether the filter group should be expanded by default or not.
157
+ */
158
+ group_expanded?: boolean;
159
+ type?: "checkbox-hierarchical";
160
+ /**
161
+ * Selectable hierarchical values
162
+ */
163
+ values: (("true" | "false") | number | number | string)[][];
164
+ /**
165
+ * Counts for values
166
+ */
167
+ counts?: number[];
168
+ /**
169
+ * Names for hierarchical values
170
+ */
171
+ names?: string[];
172
+ }
173
+ export interface SortModel {
174
+ /**
175
+ * The field to sort by.
176
+ */
177
+ field: string;
178
+ /**
179
+ * The order to sort by.
180
+ */
181
+ order: SortingOrder;
182
+ /**
183
+ * Metadata about the sort that can be used for rendering.
184
+ */
185
+ meta?: SortMeta;
186
+ }
187
+ export interface SortMeta {
188
+ title: string;
189
+ /**
190
+ * Selectable values
191
+ */
192
+ values?: SortingOrder[];
193
+ /**
194
+ * Names for orders
195
+ */
196
+ names?: string[];
197
+ }
@@ -0,0 +1,14 @@
1
+ /* tslint:disable */
2
+ /**
3
+ * This file was automatically generated by json-schema-to-typescript.
4
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
5
+ * and run json-schema-to-typescript to regenerate this file.
6
+ */
7
+
8
+ export interface ProductListingQueriesRequest {
9
+ tenant: string;
10
+ market: string;
11
+ metadata?: {
12
+ [k: string]: string;
13
+ };
14
+ }
@@ -0,0 +1,10 @@
1
+ /* tslint:disable */
2
+ /**
3
+ * This file was automatically generated by json-schema-to-typescript.
4
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
5
+ * and run json-schema-to-typescript to regenerate this file.
6
+ */
7
+
8
+ export interface ProductListingQueriesResponse {
9
+ query_ids?: string[];
10
+ }
@@ -0,0 +1,221 @@
1
+ /* tslint:disable */
2
+ /**
3
+ * This file was automatically generated by json-schema-to-typescript.
4
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
5
+ * and run json-schema-to-typescript to regenerate this file.
6
+ */
7
+
8
+ /**
9
+ * An enumeration.
10
+ */
11
+ export type SortingOrder = "asc" | "desc";
12
+
13
+ export interface ProductListingRequest {
14
+ /**
15
+ * Deprecated, do not use. Will be removed.
16
+ */
17
+ page?: number;
18
+ /**
19
+ * Deprecated, do not use. Will be removed.
20
+ */
21
+ hits_per_page?: number;
22
+ /**
23
+ * Used for cursor-based pagination. Set it to the cursor from the last response. If not set, will return the first results.
24
+ */
25
+ cursor?: string;
26
+ /**
27
+ * Maximum number of results per response.
28
+ */
29
+ limit?: number;
30
+ tenant: string;
31
+ market: string;
32
+ /**
33
+ * List of filters to apply to the results.
34
+ */
35
+ filters?: SearchFilter[];
36
+ /**
37
+ * Specifies the sorting method. By default, the results are ordered by relevance. To find the possible values for this field, query the endpoint and look at the `sorts` field.
38
+ */
39
+ sort?: SortModel;
40
+ /**
41
+ * User identifier
42
+ */
43
+ user_id?: string;
44
+ /**
45
+ * Session identifier
46
+ */
47
+ session_id?: string;
48
+ /**
49
+ * Populated for integrations performed by Depict.ai only. Depict.ai Session Id
50
+ */
51
+ dsid?: string;
52
+ /**
53
+ * Metadata that can be used to modify the behaviour of the search.
54
+ */
55
+ metadata?: {
56
+ [k: string]: string;
57
+ };
58
+ /**
59
+ * ID of the page to get products for. This is typically the slug, for example `hoodies-and-sweaters`.
60
+ */
61
+ query_id: string;
62
+ /**
63
+ * Disables rules to hide products.
64
+ */
65
+ show_hidden_products?: boolean;
66
+ /**
67
+ * Whether to return grouping IDs or not.
68
+ */
69
+ return_grouping_ids?: boolean;
70
+ }
71
+ export interface SearchFilter {
72
+ /**
73
+ * The field to filter by.
74
+ */
75
+ field: string;
76
+ /**
77
+ * The operation used for filtering. The filtering should be read as `field op data`, for example `brand in ["Nike", "Adidas"]`.
78
+ */
79
+ op: "eq" | "neq" | "in" | "nin" | "leq" | "geq" | "inrange";
80
+ /**
81
+ * Data for the filter.
82
+ */
83
+ data?:
84
+ | ("true" | "false")
85
+ | number
86
+ | number
87
+ | string
88
+ | [number, number]
89
+ | [number, number]
90
+ | [number, number]
91
+ | [number, number]
92
+ | (
93
+ | ("true" | "false")
94
+ | number
95
+ | number
96
+ | string
97
+ | [number, number]
98
+ | [number, number]
99
+ | [number, number]
100
+ | [number, number]
101
+ )[]
102
+ | (("true" | "false") | number | number | string)[][];
103
+ /**
104
+ * Metadata about the filter that can be used for rendering. For example, this could contain the possible values to filter by and their counts in the results.
105
+ */
106
+ meta?: RangeFilterMeta | ValuesFilterMeta | HierarchicalValuesFilterMeta;
107
+ /**
108
+ * ID of the filter. If multiple filters share the same ID, they should be grouped together in the UI.
109
+ */
110
+ id?: string;
111
+ }
112
+ export interface RangeFilterMeta {
113
+ /**
114
+ * Title of the group, where a group consists of all the filters that share an ID.
115
+ */
116
+ group_title?: string;
117
+ /**
118
+ * Whether the filter group should be expanded by default or not.
119
+ */
120
+ group_expanded?: boolean;
121
+ type?: "range";
122
+ /**
123
+ * The minimum value that can be selected in the range.
124
+ */
125
+ min: number;
126
+ /**
127
+ * The maximum value that can be selected in the range.
128
+ */
129
+ max: number;
130
+ /**
131
+ * The unit of the range values.
132
+ */
133
+ unit?: string;
134
+ /**
135
+ * The currency of the range values.
136
+ */
137
+ currency?: string;
138
+ }
139
+ export interface ValuesFilterMeta {
140
+ /**
141
+ * Title of the group, where a group consists of all the filters that share an ID.
142
+ */
143
+ group_title?: string;
144
+ /**
145
+ * Whether the filter group should be expanded by default or not.
146
+ */
147
+ group_expanded?: boolean;
148
+ /**
149
+ * Type of filter.
150
+ */
151
+ type?: "radio" | "checkbox" | "checkbox-grid";
152
+ /**
153
+ * Selectable values
154
+ */
155
+ values: (
156
+ | ("true" | "false")
157
+ | number
158
+ | number
159
+ | string
160
+ | [number, number]
161
+ | [number, number]
162
+ | [number, number]
163
+ | [number, number]
164
+ )[];
165
+ /**
166
+ * Counts for values
167
+ */
168
+ counts?: number[];
169
+ /**
170
+ * Names for values
171
+ */
172
+ names?: string[];
173
+ }
174
+ export interface HierarchicalValuesFilterMeta {
175
+ /**
176
+ * Title of the group, where a group consists of all the filters that share an ID.
177
+ */
178
+ group_title?: string;
179
+ /**
180
+ * Whether the filter group should be expanded by default or not.
181
+ */
182
+ group_expanded?: boolean;
183
+ type?: "checkbox-hierarchical";
184
+ /**
185
+ * Selectable hierarchical values
186
+ */
187
+ values: (("true" | "false") | number | number | string)[][];
188
+ /**
189
+ * Counts for values
190
+ */
191
+ counts?: number[];
192
+ /**
193
+ * Names for hierarchical values
194
+ */
195
+ names?: string[];
196
+ }
197
+ export interface SortModel {
198
+ /**
199
+ * The field to sort by.
200
+ */
201
+ field: string;
202
+ /**
203
+ * The order to sort by.
204
+ */
205
+ order: SortingOrder;
206
+ /**
207
+ * Metadata about the sort that can be used for rendering.
208
+ */
209
+ meta?: SortMeta;
210
+ }
211
+ export interface SortMeta {
212
+ title: string;
213
+ /**
214
+ * Selectable values
215
+ */
216
+ values?: SortingOrder[];
217
+ /**
218
+ * Names for orders
219
+ */
220
+ names?: string[];
221
+ }