@searchspring/snap-client 0.20.0

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.
Files changed (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/dist/cjs/Client/Client.d.ts +15 -0
  4. package/dist/cjs/Client/Client.d.ts.map +1 -0
  5. package/dist/cjs/Client/Client.js +198 -0
  6. package/dist/cjs/Client/NetworkCache/NetworkCache.d.ts +10 -0
  7. package/dist/cjs/Client/NetworkCache/NetworkCache.d.ts.map +1 -0
  8. package/dist/cjs/Client/NetworkCache/NetworkCache.js +104 -0
  9. package/dist/cjs/Client/apis/Abstract.d.ts +49 -0
  10. package/dist/cjs/Client/apis/Abstract.d.ts.map +1 -0
  11. package/dist/cjs/Client/apis/Abstract.js +209 -0
  12. package/dist/cjs/Client/apis/Hybrid.d.ts +10 -0
  13. package/dist/cjs/Client/apis/Hybrid.d.ts.map +1 -0
  14. package/dist/cjs/Client/apis/Hybrid.js +137 -0
  15. package/dist/cjs/Client/apis/Legacy.d.ts +11 -0
  16. package/dist/cjs/Client/apis/Legacy.d.ts.map +1 -0
  17. package/dist/cjs/Client/apis/Legacy.js +147 -0
  18. package/dist/cjs/Client/apis/Recommend.d.ts +81 -0
  19. package/dist/cjs/Client/apis/Recommend.d.ts.map +1 -0
  20. package/dist/cjs/Client/apis/Recommend.js +222 -0
  21. package/dist/cjs/Client/apis/Snap.d.ts +8 -0
  22. package/dist/cjs/Client/apis/Snap.d.ts.map +1 -0
  23. package/dist/cjs/Client/apis/Snap.js +126 -0
  24. package/dist/cjs/Client/apis/Suggest.d.ts +45 -0
  25. package/dist/cjs/Client/apis/Suggest.d.ts.map +1 -0
  26. package/dist/cjs/Client/apis/Suggest.js +145 -0
  27. package/dist/cjs/Client/apis/index.d.ts +7 -0
  28. package/dist/cjs/Client/apis/index.d.ts.map +1 -0
  29. package/dist/cjs/Client/apis/index.js +18 -0
  30. package/dist/cjs/Client/transforms/index.d.ts +4 -0
  31. package/dist/cjs/Client/transforms/index.d.ts.map +1 -0
  32. package/dist/cjs/Client/transforms/index.js +15 -0
  33. package/dist/cjs/Client/transforms/searchRequest.d.ts +47 -0
  34. package/dist/cjs/Client/transforms/searchRequest.d.ts.map +1 -0
  35. package/dist/cjs/Client/transforms/searchRequest.js +151 -0
  36. package/dist/cjs/Client/transforms/searchResponse.d.ts +31 -0
  37. package/dist/cjs/Client/transforms/searchResponse.d.ts.map +1 -0
  38. package/dist/cjs/Client/transforms/searchResponse.js +246 -0
  39. package/dist/cjs/Client/transforms/suggestResponse.d.ts +29 -0
  40. package/dist/cjs/Client/transforms/suggestResponse.d.ts.map +1 -0
  41. package/dist/cjs/Client/transforms/suggestResponse.js +53 -0
  42. package/dist/cjs/Client/utils/charsParams.d.ts +3 -0
  43. package/dist/cjs/Client/utils/charsParams.d.ts.map +1 -0
  44. package/dist/cjs/Client/utils/charsParams.js +23 -0
  45. package/dist/cjs/Client/utils/fibonacci.d.ts +2 -0
  46. package/dist/cjs/Client/utils/fibonacci.d.ts.map +1 -0
  47. package/dist/cjs/Client/utils/fibonacci.js +14 -0
  48. package/dist/cjs/Client/utils/hashParams.d.ts +3 -0
  49. package/dist/cjs/Client/utils/hashParams.d.ts.map +1 -0
  50. package/dist/cjs/Client/utils/hashParams.js +10 -0
  51. package/dist/cjs/Client/utils/htmlUnescape.d.ts +2 -0
  52. package/dist/cjs/Client/utils/htmlUnescape.d.ts.map +1 -0
  53. package/dist/cjs/Client/utils/htmlUnescape.js +12 -0
  54. package/dist/cjs/Client/utils/index.d.ts +2 -0
  55. package/dist/cjs/Client/utils/index.d.ts.map +1 -0
  56. package/dist/cjs/Client/utils/index.js +13 -0
  57. package/dist/cjs/Client/utils/mergeParams.d.ts +2 -0
  58. package/dist/cjs/Client/utils/mergeParams.d.ts.map +1 -0
  59. package/dist/cjs/Client/utils/mergeParams.js +18 -0
  60. package/dist/cjs/index.d.ts +3 -0
  61. package/dist/cjs/index.d.ts.map +1 -0
  62. package/dist/cjs/index.js +13 -0
  63. package/dist/cjs/types.d.ts +45 -0
  64. package/dist/cjs/types.d.ts.map +1 -0
  65. package/dist/cjs/types.js +2 -0
  66. package/dist/esm/Client/Client.d.ts +15 -0
  67. package/dist/esm/Client/Client.d.ts.map +1 -0
  68. package/dist/esm/Client/Client.js +108 -0
  69. package/dist/esm/Client/NetworkCache/NetworkCache.d.ts +10 -0
  70. package/dist/esm/Client/NetworkCache/NetworkCache.d.ts.map +1 -0
  71. package/dist/esm/Client/NetworkCache/NetworkCache.js +89 -0
  72. package/dist/esm/Client/apis/Abstract.d.ts +49 -0
  73. package/dist/esm/Client/apis/Abstract.d.ts.map +1 -0
  74. package/dist/esm/Client/apis/Abstract.js +119 -0
  75. package/dist/esm/Client/apis/Hybrid.d.ts +10 -0
  76. package/dist/esm/Client/apis/Hybrid.d.ts.map +1 -0
  77. package/dist/esm/Client/apis/Hybrid.js +49 -0
  78. package/dist/esm/Client/apis/Legacy.d.ts +11 -0
  79. package/dist/esm/Client/apis/Legacy.d.ts.map +1 -0
  80. package/dist/esm/Client/apis/Legacy.js +44 -0
  81. package/dist/esm/Client/apis/Recommend.d.ts +81 -0
  82. package/dist/esm/Client/apis/Recommend.d.ts.map +1 -0
  83. package/dist/esm/Client/apis/Recommend.js +91 -0
  84. package/dist/esm/Client/apis/Snap.d.ts +8 -0
  85. package/dist/esm/Client/apis/Snap.d.ts.map +1 -0
  86. package/dist/esm/Client/apis/Snap.js +36 -0
  87. package/dist/esm/Client/apis/Suggest.d.ts +45 -0
  88. package/dist/esm/Client/apis/Suggest.d.ts.map +1 -0
  89. package/dist/esm/Client/apis/Suggest.js +45 -0
  90. package/dist/esm/Client/apis/index.d.ts +7 -0
  91. package/dist/esm/Client/apis/index.d.ts.map +1 -0
  92. package/dist/esm/Client/apis/index.js +6 -0
  93. package/dist/esm/Client/transforms/index.d.ts +4 -0
  94. package/dist/esm/Client/transforms/index.d.ts.map +1 -0
  95. package/dist/esm/Client/transforms/index.js +3 -0
  96. package/dist/esm/Client/transforms/searchRequest.d.ts +47 -0
  97. package/dist/esm/Client/transforms/searchRequest.d.ts.map +1 -0
  98. package/dist/esm/Client/transforms/searchRequest.js +133 -0
  99. package/dist/esm/Client/transforms/searchResponse.d.ts +31 -0
  100. package/dist/esm/Client/transforms/searchResponse.d.ts.map +1 -0
  101. package/dist/esm/Client/transforms/searchResponse.js +249 -0
  102. package/dist/esm/Client/transforms/suggestResponse.d.ts +29 -0
  103. package/dist/esm/Client/transforms/suggestResponse.d.ts.map +1 -0
  104. package/dist/esm/Client/transforms/suggestResponse.js +42 -0
  105. package/dist/esm/Client/utils/charsParams.d.ts +3 -0
  106. package/dist/esm/Client/utils/charsParams.d.ts.map +1 -0
  107. package/dist/esm/Client/utils/charsParams.js +19 -0
  108. package/dist/esm/Client/utils/fibonacci.d.ts +2 -0
  109. package/dist/esm/Client/utils/fibonacci.d.ts.map +1 -0
  110. package/dist/esm/Client/utils/fibonacci.js +10 -0
  111. package/dist/esm/Client/utils/hashParams.d.ts +3 -0
  112. package/dist/esm/Client/utils/hashParams.d.ts.map +1 -0
  113. package/dist/esm/Client/utils/hashParams.js +6 -0
  114. package/dist/esm/Client/utils/htmlUnescape.d.ts +2 -0
  115. package/dist/esm/Client/utils/htmlUnescape.d.ts.map +1 -0
  116. package/dist/esm/Client/utils/htmlUnescape.js +8 -0
  117. package/dist/esm/Client/utils/index.d.ts +2 -0
  118. package/dist/esm/Client/utils/index.d.ts.map +1 -0
  119. package/dist/esm/Client/utils/index.js +1 -0
  120. package/dist/esm/Client/utils/mergeParams.d.ts +2 -0
  121. package/dist/esm/Client/utils/mergeParams.d.ts.map +1 -0
  122. package/dist/esm/Client/utils/mergeParams.js +10 -0
  123. package/dist/esm/index.d.ts +3 -0
  124. package/dist/esm/index.d.ts.map +1 -0
  125. package/dist/esm/index.js +1 -0
  126. package/dist/esm/types.d.ts +45 -0
  127. package/dist/esm/types.d.ts.map +1 -0
  128. package/dist/esm/types.js +1 -0
  129. package/package.json +27 -0
@@ -0,0 +1,81 @@
1
+ import { API, ApiConfiguration } from './Abstract';
2
+ import { SearchResponseModelResult } from '@searchspring/snapi-types';
3
+ export declare type RecommendRequestModel = {
4
+ tags: string[];
5
+ siteId: string;
6
+ product?: string;
7
+ shopper?: string;
8
+ categories?: string[];
9
+ cart?: string[];
10
+ lastViewed?: string[];
11
+ test?: boolean;
12
+ batched?: boolean;
13
+ };
14
+ export declare type RecommendResponseModel = {
15
+ profile: {
16
+ tag: string;
17
+ };
18
+ results: SearchResponseModelResult[];
19
+ }[];
20
+ export declare type ProfileRequestModel = {
21
+ siteId: string;
22
+ tag: string;
23
+ branch?: string;
24
+ };
25
+ export declare type ProfileResponseModel = {
26
+ profile: {
27
+ tag: string;
28
+ placement: string;
29
+ display: {
30
+ threshold: number;
31
+ template: {
32
+ name: string;
33
+ uuid: string;
34
+ markup?: string;
35
+ styles?: string;
36
+ component?: string;
37
+ branch?: string;
38
+ group?: string;
39
+ };
40
+ templateParameters: {
41
+ [any: string]: unknown;
42
+ };
43
+ };
44
+ };
45
+ };
46
+ export declare type RecommendCombinedRequestModel = {
47
+ tag: string;
48
+ siteId: string;
49
+ product?: string;
50
+ shopper?: string;
51
+ categories?: string[];
52
+ cart?: string[];
53
+ lastViewed?: string[];
54
+ test?: boolean;
55
+ branch?: string;
56
+ };
57
+ declare class Deferred {
58
+ promise: Promise<any>;
59
+ resolve: any;
60
+ reject: any;
61
+ constructor();
62
+ }
63
+ export declare type RecommendCombinedResponseModel = ProfileResponseModel & {
64
+ results: SearchResponseModelResult[];
65
+ };
66
+ export declare class RecommendAPI extends API {
67
+ batches: {
68
+ [key: string]: {
69
+ timeout: number;
70
+ request: any;
71
+ deferreds?: Deferred[];
72
+ };
73
+ };
74
+ constructor(config: ApiConfiguration);
75
+ getProfile(queryParameters: ProfileRequestModel): Promise<ProfileResponseModel>;
76
+ batchRecommendations(parameters: RecommendRequestModel): Promise<RecommendResponseModel>;
77
+ getRecommendations(queryParameters: RecommendRequestModel): Promise<RecommendResponseModel>;
78
+ postRecommendations(requestParameters: RecommendRequestModel): Promise<RecommendResponseModel>;
79
+ }
80
+ export {};
81
+ //# sourceMappingURL=Recommend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Recommend.d.ts","sourceRoot":"","sources":["../../../../src/Client/apis/Recommend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import { API } from './Abstract';
2
+ import { hashParams } from '../utils/hashParams';
3
+ import { charsParams } from '../utils/charsParams';
4
+ class Deferred {
5
+ constructor() {
6
+ this.promise = new Promise((resolve, reject) => {
7
+ this.reject = reject;
8
+ this.resolve = resolve;
9
+ });
10
+ }
11
+ }
12
+ const BATCH_TIMEOUT = 150;
13
+ export class RecommendAPI extends API {
14
+ constructor(config) {
15
+ super(config);
16
+ this.batches = {};
17
+ }
18
+ async getProfile(queryParameters) {
19
+ const headerParameters = {};
20
+ const response = await this.request({
21
+ path: '/api/personalized-recommendations/profile.json',
22
+ method: 'GET',
23
+ headers: headerParameters,
24
+ query: queryParameters,
25
+ }, '/api/personalized-recommendations/profile.json' + JSON.stringify(queryParameters));
26
+ return response;
27
+ }
28
+ async batchRecommendations(parameters) {
29
+ const { tags, ...otherParams } = parameters;
30
+ const [tag] = tags || [];
31
+ if (!tag)
32
+ return;
33
+ let key = hashParams(otherParams);
34
+ if ('batched' in otherParams) {
35
+ if (otherParams.batched) {
36
+ key = otherParams.siteId;
37
+ }
38
+ delete otherParams.batched; // remove from request parameters
39
+ }
40
+ this.batches[key] = this.batches[key] || { timeout: null, request: { tags: [], ...otherParams }, deferreds: [] };
41
+ const paramBatch = this.batches[key];
42
+ const deferred = new Deferred();
43
+ paramBatch.request.tags.push(tag);
44
+ paramBatch.deferreds.push(deferred);
45
+ window.clearTimeout(paramBatch.timeout);
46
+ paramBatch.timeout = window.setTimeout(async () => {
47
+ let requestMethod = 'getRecommendations';
48
+ if (charsParams(paramBatch.request) > 1024) {
49
+ requestMethod = 'postRecommendations';
50
+ }
51
+ try {
52
+ const response = await this[requestMethod](paramBatch.request);
53
+ paramBatch.deferreds.forEach((def, index) => {
54
+ def.resolve([response[index]]);
55
+ });
56
+ }
57
+ catch (err) {
58
+ paramBatch.deferreds.forEach((def) => {
59
+ def.reject(err);
60
+ });
61
+ }
62
+ delete this.batches[key];
63
+ }, BATCH_TIMEOUT);
64
+ return deferred.promise;
65
+ }
66
+ async getRecommendations(queryParameters) {
67
+ const headerParameters = {};
68
+ const siteId = queryParameters.siteId;
69
+ const path = `/boost/${siteId}/recommend`;
70
+ const response = await this.request({
71
+ path,
72
+ method: 'GET',
73
+ headers: headerParameters,
74
+ query: queryParameters,
75
+ }, path + JSON.stringify(queryParameters));
76
+ return response;
77
+ }
78
+ async postRecommendations(requestParameters) {
79
+ const headerParameters = {};
80
+ headerParameters['Content-Type'] = 'application/json';
81
+ const siteId = requestParameters.siteId;
82
+ const path = `/boost/${siteId}/recommend`;
83
+ const response = await this.request({
84
+ path,
85
+ method: 'POST',
86
+ headers: headerParameters,
87
+ body: requestParameters,
88
+ }, path + JSON.stringify(requestParameters));
89
+ return response;
90
+ }
91
+ }
@@ -0,0 +1,8 @@
1
+ import { AutocompleteRequestModel, AutocompleteResponseModel, MetaRequestModel, MetaResponseModel, SearchRequestModel, SearchResponseModel } from '@searchspring/snapi-types';
2
+ import { API } from '.';
3
+ export declare class SnapAPI extends API {
4
+ postMeta(requestParameters: MetaRequestModel): Promise<MetaResponseModel>;
5
+ postSearch(requestParameters: SearchRequestModel): Promise<SearchResponseModel>;
6
+ postAutocomplete(requestParameters: AutocompleteRequestModel): Promise<AutocompleteResponseModel>;
7
+ }
8
+ //# sourceMappingURL=Snap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Snap.d.ts","sourceRoot":"","sources":["../../../../src/Client/apis/Snap.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,wBAAwB,EACxB,yBAAyB,EACzB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,GAAG,EAAe,MAAM,GAAG,CAAC;AAErC,qBAAa,OAAQ,SAAQ,GAAG;IACzB,QAAQ,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiBzE,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiB/E,gBAAgB,CAAC,iBAAiB,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAgBvG"}
@@ -0,0 +1,36 @@
1
+ import { API } from '.';
2
+ export class SnapAPI extends API {
3
+ async postMeta(requestParameters) {
4
+ const headerParameters = {};
5
+ headerParameters['Content-Type'] = 'application/json';
6
+ const response = await this.request({
7
+ path: '/api/v1/meta',
8
+ method: 'POST',
9
+ headers: headerParameters,
10
+ body: requestParameters,
11
+ }, '/api/v1/meta' + JSON.stringify(requestParameters));
12
+ return response;
13
+ }
14
+ async postSearch(requestParameters) {
15
+ const headerParameters = {};
16
+ headerParameters['Content-Type'] = 'application/json';
17
+ const response = await this.request({
18
+ path: '/api/v1/search',
19
+ method: 'POST',
20
+ headers: headerParameters,
21
+ body: requestParameters,
22
+ }, '/api/v1/search' + JSON.stringify(requestParameters));
23
+ return response;
24
+ }
25
+ async postAutocomplete(requestParameters) {
26
+ const headerParameters = {};
27
+ headerParameters['Content-Type'] = 'application/json';
28
+ const response = await this.request({
29
+ path: '/api/v1/autocomplete',
30
+ method: 'POST',
31
+ headers: headerParameters,
32
+ body: requestParameters,
33
+ }, '/api/v1/autocomplete' + JSON.stringify(requestParameters));
34
+ return response;
35
+ }
36
+ }
@@ -0,0 +1,45 @@
1
+ import { API } from './Abstract';
2
+ export declare type SuggestRequestModel = {
3
+ siteId: string;
4
+ query: string;
5
+ language?: string;
6
+ suggestionCount?: number;
7
+ productCount?: number;
8
+ disableSpellCorrect?: boolean;
9
+ };
10
+ export declare type SuggestResponseModelSuggestion = {
11
+ text: string;
12
+ type?: string;
13
+ source?: string;
14
+ popularity?: number;
15
+ completed?: {
16
+ token: string;
17
+ query: string;
18
+ type: string;
19
+ }[];
20
+ };
21
+ export declare type SuggestResponseModel = {
22
+ query: string;
23
+ 'corrected-query'?: string;
24
+ suggested?: SuggestResponseModelSuggestion;
25
+ alternatives?: SuggestResponseModelSuggestion[];
26
+ };
27
+ export declare type TrendingRequestModel = {
28
+ siteId: string;
29
+ limit?: number;
30
+ };
31
+ export declare type TrendingResponseModel = {
32
+ trending: {
33
+ queries: {
34
+ popularity: number;
35
+ searchQuery: string;
36
+ }[];
37
+ };
38
+ };
39
+ export declare class SuggestAPI extends API {
40
+ getSuggest(queryParameters: SuggestRequestModel): Promise<SuggestResponseModel>;
41
+ postSuggest(requestParameters: SuggestRequestModel): Promise<SuggestResponseModel>;
42
+ getTrending(queryParameters: TrendingRequestModel): Promise<TrendingResponseModel>;
43
+ postTrending(requestParameters: TrendingRequestModel): Promise<TrendingResponseModel>;
44
+ }
45
+ //# sourceMappingURL=Suggest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Suggest.d.ts","sourceRoot":"","sources":["../../../../src/Client/apis/Suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAe,MAAM,YAAY,CAAC;AAE9C,oBAAY,mBAAmB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,oBAAY,8BAA8B,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACb,EAAE,CAAC;CACJ,CAAC;AAEF,oBAAY,oBAAoB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,8BAA8B,CAAC;IAC3C,YAAY,CAAC,EAAE,8BAA8B,EAAE,CAAC;CAChD,CAAC;AAEF,oBAAY,oBAAoB,GAAG;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,oBAAY,qBAAqB,GAAG;IACnC,QAAQ,EAAE;QACT,OAAO,EAAE;YACR,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,MAAM,CAAC;SACpB,EAAE,CAAC;KACJ,CAAC;CACF,CAAC;AAEF,qBAAa,UAAW,SAAQ,GAAG;IAC5B,UAAU,CAAC,eAAe,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAgB/E,WAAW,CAAC,iBAAiB,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAiBlF,WAAW,CAAC,eAAe,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAgBlF,YAAY,CAAC,iBAAiB,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAgB3F"}
@@ -0,0 +1,45 @@
1
+ import { API } from './Abstract';
2
+ export class SuggestAPI extends API {
3
+ async getSuggest(queryParameters) {
4
+ const headerParameters = {};
5
+ const response = await this.request({
6
+ path: '/api/suggest/query',
7
+ method: 'GET',
8
+ headers: headerParameters,
9
+ query: queryParameters,
10
+ }, '/api/suggest/query' + JSON.stringify(queryParameters));
11
+ return response;
12
+ }
13
+ async postSuggest(requestParameters) {
14
+ const headerParameters = {};
15
+ headerParameters['Content-Type'] = 'application/json';
16
+ const response = await this.request({
17
+ path: '/api/suggest/query',
18
+ method: 'POST',
19
+ headers: headerParameters,
20
+ body: requestParameters,
21
+ }, '/api/suggest/query' + JSON.stringify(requestParameters));
22
+ return response;
23
+ }
24
+ async getTrending(queryParameters) {
25
+ const headerParameters = {};
26
+ const response = await this.request({
27
+ path: '/api/suggest/trending',
28
+ method: 'GET',
29
+ headers: headerParameters,
30
+ query: queryParameters,
31
+ }, '/api/suggest/trending' + JSON.stringify(queryParameters));
32
+ return response;
33
+ }
34
+ async postTrending(requestParameters) {
35
+ const headerParameters = {};
36
+ headerParameters['Content-Type'] = 'application/json';
37
+ const response = await this.request({
38
+ path: '/api/suggest/trending',
39
+ method: 'POST',
40
+ headers: headerParameters,
41
+ body: requestParameters,
42
+ }, '/api/suggest/trending' + JSON.stringify(requestParameters));
43
+ return response;
44
+ }
45
+ }
@@ -0,0 +1,7 @@
1
+ export * from './Abstract';
2
+ export * from './Legacy';
3
+ export * from './Recommend';
4
+ export * from './Snap';
5
+ export * from './Suggest';
6
+ export * from './Hybrid';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/Client/apis/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './Abstract';
2
+ export * from './Legacy';
3
+ export * from './Recommend';
4
+ export * from './Snap';
5
+ export * from './Suggest';
6
+ export * from './Hybrid';
@@ -0,0 +1,4 @@
1
+ export * from './searchRequest';
2
+ export * from './searchResponse';
3
+ export * from './suggestResponse';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/Client/transforms/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './searchRequest';
2
+ export * from './searchResponse';
3
+ export * from './suggestResponse';
@@ -0,0 +1,47 @@
1
+ import { SearchRequestModel } from '@searchspring/snapi-types';
2
+ export declare function transformSearchRequest(request: SearchRequestModel): any;
3
+ export declare namespace transformSearchRequest {
4
+ var sorts: (request?: SearchRequestModel) => import("@searchspring/snapi-types").SearchRequestModelSorts;
5
+ var search: (request?: SearchRequestModel) => {
6
+ q?: string;
7
+ rq?: string;
8
+ originalQuery?: string;
9
+ redirectResponse?: string;
10
+ };
11
+ var filters: (request?: SearchRequestModel) => {};
12
+ var merchandising: (request?: SearchRequestModel) => {
13
+ disableMerchandising: boolean;
14
+ } | {
15
+ disableMerchandising?: undefined;
16
+ };
17
+ var pagination: (request?: SearchRequestModel) => {
18
+ page?: number;
19
+ resultsPerPage?: number;
20
+ };
21
+ var siteId: (request?: SearchRequestModel) => {
22
+ siteId: string;
23
+ } | {
24
+ siteId?: undefined;
25
+ };
26
+ var facets: (request?: SearchRequestModel) => {
27
+ includedFacets: string[];
28
+ excludedFacets?: undefined;
29
+ } | {
30
+ excludedFacets: string[];
31
+ includedFacets?: undefined;
32
+ } | {
33
+ includedFacets?: undefined;
34
+ excludedFacets?: undefined;
35
+ };
36
+ var tracking: (request?: SearchRequestModel) => {
37
+ userId?: string;
38
+ domain?: string;
39
+ };
40
+ var personalization: (request?: SearchRequestModel) => {
41
+ skipPersonalization?: boolean;
42
+ cart?: string;
43
+ shopper?: string;
44
+ lastViewed?: string;
45
+ };
46
+ }
47
+ //# sourceMappingURL=searchRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchRequest.d.ts","sourceRoot":"","sources":["../../../../src/Client/transforms/searchRequest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAgE,MAAM,2BAA2B,CAAC;AAE7H,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,GAAG,GAAG,CAYvE;yBAZe,sBAAsB"}
@@ -0,0 +1,133 @@
1
+ import { mergeParams } from '../utils';
2
+ export function transformSearchRequest(request) {
3
+ return mergeParams(transformSearchRequest.sorts(request), transformSearchRequest.search(request), transformSearchRequest.filters(request), transformSearchRequest.merchandising(request), transformSearchRequest.pagination(request), transformSearchRequest.siteId(request), transformSearchRequest.facets(request), transformSearchRequest.tracking(request), transformSearchRequest.personalization(request));
4
+ }
5
+ transformSearchRequest.sorts = (request = {}) => {
6
+ return (request.sorts || []).reduce((acc, sort) => {
7
+ if (!sort.field && !sort.direction) {
8
+ return acc;
9
+ }
10
+ if (!sort.field || !sort.direction) {
11
+ throw 'valid sort requires field and direction';
12
+ }
13
+ if (sort.direction != 'asc' && sort.direction != 'desc') {
14
+ throw 'valid sort directions: asc, desc';
15
+ }
16
+ return {
17
+ ...acc,
18
+ ['sort.' + sort.field]: (acc[sort.field] || []).concat(sort.direction),
19
+ };
20
+ }, {});
21
+ };
22
+ transformSearchRequest.search = (request = {}) => {
23
+ const reqSearch = request.search || {};
24
+ const search = {};
25
+ if (reqSearch.query && reqSearch.query.string) {
26
+ search.q = reqSearch.query.string.trim();
27
+ }
28
+ if (reqSearch.subQuery) {
29
+ search.rq = reqSearch.subQuery.trim();
30
+ }
31
+ if (reqSearch.originalQuery) {
32
+ search.originalQuery = reqSearch.originalQuery.trim();
33
+ }
34
+ if (reqSearch.redirectResponse) {
35
+ search.redirectResponse = reqSearch.redirectResponse;
36
+ }
37
+ return search;
38
+ };
39
+ transformSearchRequest.filters = (request = {}) => {
40
+ return (request.filters || []).reduce((acc, filter) => {
41
+ const baseKey = filter.background ? 'bgfilter' : 'filter';
42
+ if (filter.type == 'value') {
43
+ const key = baseKey + '.' + filter.field;
44
+ return {
45
+ ...acc,
46
+ [key]: (acc[key] || []).concat([filter.value]),
47
+ };
48
+ }
49
+ else if (filter.type == 'range') {
50
+ const keyLow = baseKey + '.' + filter.field + '.low';
51
+ const keyHigh = baseKey + '.' + filter.field + '.high';
52
+ const low = filter.value.low ?? '*';
53
+ const high = filter.value.high ?? '*';
54
+ return {
55
+ ...acc,
56
+ [keyLow]: (acc[keyLow] || []).concat([low]),
57
+ [keyHigh]: (acc[keyHigh] || []).concat([high]),
58
+ };
59
+ }
60
+ return acc;
61
+ }, {});
62
+ };
63
+ transformSearchRequest.merchandising = (request = {}) => {
64
+ const reqMerch = request.merchandising || {};
65
+ const merch = reqMerch.disabled ? { disableMerchandising: true } : {};
66
+ if (reqMerch.landingPage) {
67
+ merch['landing-page'] = reqMerch.landingPage;
68
+ }
69
+ if (reqMerch.segments instanceof Array && reqMerch.segments.length) {
70
+ merch['tag'] = reqMerch.segments.map((segment) => {
71
+ return `merch.segment/${segment}`;
72
+ });
73
+ }
74
+ return merch;
75
+ };
76
+ transformSearchRequest.pagination = (request = {}) => {
77
+ const pagination = request.pagination || {};
78
+ const params = {};
79
+ if (pagination.page) {
80
+ params.page = pagination.page;
81
+ }
82
+ if (pagination.pageSize || pagination.pageSize === 0) {
83
+ params.resultsPerPage = pagination.pageSize;
84
+ }
85
+ return params;
86
+ };
87
+ transformSearchRequest.siteId = (request = {}) => {
88
+ if (request.siteId) {
89
+ return { siteId: request.siteId };
90
+ }
91
+ return {};
92
+ };
93
+ transformSearchRequest.facets = (request = {}) => {
94
+ const facets = request.facets || {};
95
+ if (facets.include && facets.include.length && facets.exclude && facets.exclude.length) {
96
+ throw 'cannot use facet include and exclude at the same time';
97
+ }
98
+ if (facets.include?.length) {
99
+ return { includedFacets: facets.include };
100
+ }
101
+ if (facets.exclude?.length) {
102
+ return { excludedFacets: facets.exclude };
103
+ }
104
+ return {};
105
+ };
106
+ transformSearchRequest.tracking = (request = {}) => {
107
+ const reqTracking = request.tracking || {};
108
+ const params = {};
109
+ if (reqTracking.userId) {
110
+ params.userId = reqTracking.userId;
111
+ }
112
+ if (reqTracking.domain) {
113
+ params.domain = reqTracking.domain;
114
+ }
115
+ return params;
116
+ };
117
+ transformSearchRequest.personalization = (request = {}) => {
118
+ const personalization = request.personalization || {};
119
+ const params = {};
120
+ if (personalization.disabled) {
121
+ params.skipPersonalization = personalization.disabled;
122
+ }
123
+ if (personalization.cart) {
124
+ params.cart = personalization.cart;
125
+ }
126
+ if (personalization.lastViewed) {
127
+ params.lastViewed = personalization.lastViewed;
128
+ }
129
+ if (personalization.shopper) {
130
+ params.shopper = personalization.shopper;
131
+ }
132
+ return params;
133
+ };
@@ -0,0 +1,31 @@
1
+ import { SearchRequestModel, SearchResponseModel, SearchResponseModelResult, SearchResponseModelPagination } from '@searchspring/snapi-types';
2
+ export declare function transformSearchResponse(response: any, request: SearchRequestModel): SearchResponseModel;
3
+ export declare namespace transformSearchResponse {
4
+ var pagination: (response: any) => {
5
+ pagination: SearchResponseModelPagination;
6
+ };
7
+ var results: (response: any) => {
8
+ results: any;
9
+ };
10
+ var result: (rawResult: any) => SearchResponseModelResult;
11
+ var filters: (response: any) => {
12
+ filters: any;
13
+ };
14
+ var facets: (response: any, request?: SearchRequestModel) => {
15
+ facets: any;
16
+ };
17
+ var sorting: (response: any) => {
18
+ sorting: any;
19
+ };
20
+ var merchandising: (response: any) => {
21
+ merchandising: any;
22
+ };
23
+ var search: (response: any, request: any) => {
24
+ search: {
25
+ query: any;
26
+ didYouMean: any;
27
+ originalQuery: any;
28
+ };
29
+ };
30
+ }
31
+ //# sourceMappingURL=searchResponse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchResponse.d.ts","sourceRoot":"","sources":["../../../../src/Client/transforms/searchResponse.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,kBAAkB,EAElB,mBAAmB,EACnB,yBAAyB,EAIzB,6BAA6B,EAC7B,MAAM,2BAA2B,CAAC;AA8BnC,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,CAUvG;yBAVe,uBAAuB"}