@athoscommerce/snap-client 1.0.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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +261 -0
  3. package/dist/cjs/Client/Client.d.ts +29 -0
  4. package/dist/cjs/Client/Client.d.ts.map +1 -0
  5. package/dist/cjs/Client/Client.js +278 -0
  6. package/dist/cjs/Client/NetworkCache/NetworkCache.d.ts +12 -0
  7. package/dist/cjs/Client/NetworkCache/NetworkCache.d.ts.map +1 -0
  8. package/dist/cjs/Client/NetworkCache/NetworkCache.js +198 -0
  9. package/dist/cjs/Client/apis/Abstract.d.ts +60 -0
  10. package/dist/cjs/Client/apis/Abstract.d.ts.map +1 -0
  11. package/dist/cjs/Client/apis/Abstract.js +297 -0
  12. package/dist/cjs/Client/apis/Meta.d.ts +8 -0
  13. package/dist/cjs/Client/apis/Meta.d.ts.map +1 -0
  14. package/dist/cjs/Client/apis/Meta.js +102 -0
  15. package/dist/cjs/Client/apis/Recommend.d.ts +15 -0
  16. package/dist/cjs/Client/apis/Recommend.d.ts.map +1 -0
  17. package/dist/cjs/Client/apis/Recommend.js +276 -0
  18. package/dist/cjs/Client/apis/Search.d.ts +12 -0
  19. package/dist/cjs/Client/apis/Search.d.ts.map +1 -0
  20. package/dist/cjs/Client/apis/Search.js +137 -0
  21. package/dist/cjs/Client/apis/Suggest.d.ts +9 -0
  22. package/dist/cjs/Client/apis/Suggest.d.ts.map +1 -0
  23. package/dist/cjs/Client/apis/Suggest.js +145 -0
  24. package/dist/cjs/Client/apis/index.d.ts +6 -0
  25. package/dist/cjs/Client/apis/index.d.ts.map +1 -0
  26. package/dist/cjs/Client/apis/index.js +21 -0
  27. package/dist/cjs/Client/transforms/index.d.ts +5 -0
  28. package/dist/cjs/Client/transforms/index.d.ts.map +1 -0
  29. package/dist/cjs/Client/transforms/index.js +20 -0
  30. package/dist/cjs/Client/transforms/recommendationFiltersPost.d.ts +3 -0
  31. package/dist/cjs/Client/transforms/recommendationFiltersPost.d.ts.map +1 -0
  32. package/dist/cjs/Client/transforms/recommendationFiltersPost.js +63 -0
  33. package/dist/cjs/Client/transforms/searchRequest.d.ts +49 -0
  34. package/dist/cjs/Client/transforms/searchRequest.d.ts.map +1 -0
  35. package/dist/cjs/Client/transforms/searchRequest.js +169 -0
  36. package/dist/cjs/Client/transforms/searchResponse.d.ts +146 -0
  37. package/dist/cjs/Client/transforms/searchResponse.d.ts.map +1 -0
  38. package/dist/cjs/Client/transforms/searchResponse.js +296 -0
  39. package/dist/cjs/Client/transforms/suggestResponse.d.ts +18 -0
  40. package/dist/cjs/Client/transforms/suggestResponse.d.ts.map +1 -0
  41. package/dist/cjs/Client/transforms/suggestResponse.js +30 -0
  42. package/dist/cjs/Client/utils/fibonacci.d.ts +2 -0
  43. package/dist/cjs/Client/utils/fibonacci.d.ts.map +1 -0
  44. package/dist/cjs/Client/utils/fibonacci.js +14 -0
  45. package/dist/cjs/Client/utils/index.d.ts +2 -0
  46. package/dist/cjs/Client/utils/index.d.ts.map +1 -0
  47. package/dist/cjs/Client/utils/index.js +17 -0
  48. package/dist/cjs/Client/utils/mergeParams.d.ts +2 -0
  49. package/dist/cjs/Client/utils/mergeParams.d.ts.map +1 -0
  50. package/dist/cjs/Client/utils/mergeParams.js +27 -0
  51. package/dist/cjs/index.d.ts +3 -0
  52. package/dist/cjs/index.d.ts.map +1 -0
  53. package/dist/cjs/index.js +17 -0
  54. package/dist/cjs/types.d.ts +212 -0
  55. package/dist/cjs/types.d.ts.map +1 -0
  56. package/dist/cjs/types.js +2 -0
  57. package/dist/esm/Client/Client.d.ts +29 -0
  58. package/dist/esm/Client/Client.d.ts.map +1 -0
  59. package/dist/esm/Client/Client.js +157 -0
  60. package/dist/esm/Client/NetworkCache/NetworkCache.d.ts +12 -0
  61. package/dist/esm/Client/NetworkCache/NetworkCache.d.ts.map +1 -0
  62. package/dist/esm/Client/NetworkCache/NetworkCache.js +168 -0
  63. package/dist/esm/Client/apis/Abstract.d.ts +60 -0
  64. package/dist/esm/Client/apis/Abstract.d.ts.map +1 -0
  65. package/dist/esm/Client/apis/Abstract.js +165 -0
  66. package/dist/esm/Client/apis/Meta.d.ts +8 -0
  67. package/dist/esm/Client/apis/Meta.d.ts.map +1 -0
  68. package/dist/esm/Client/apis/Meta.js +23 -0
  69. package/dist/esm/Client/apis/Recommend.d.ts +15 -0
  70. package/dist/esm/Client/apis/Recommend.d.ts.map +1 -0
  71. package/dist/esm/Client/apis/Recommend.js +172 -0
  72. package/dist/esm/Client/apis/Search.d.ts +12 -0
  73. package/dist/esm/Client/apis/Search.d.ts.map +1 -0
  74. package/dist/esm/Client/apis/Search.js +41 -0
  75. package/dist/esm/Client/apis/Suggest.d.ts +9 -0
  76. package/dist/esm/Client/apis/Suggest.d.ts.map +1 -0
  77. package/dist/esm/Client/apis/Suggest.js +45 -0
  78. package/dist/esm/Client/apis/index.d.ts +6 -0
  79. package/dist/esm/Client/apis/index.d.ts.map +1 -0
  80. package/dist/esm/Client/apis/index.js +5 -0
  81. package/dist/esm/Client/transforms/index.d.ts +5 -0
  82. package/dist/esm/Client/transforms/index.d.ts.map +1 -0
  83. package/dist/esm/Client/transforms/index.js +4 -0
  84. package/dist/esm/Client/transforms/recommendationFiltersPost.d.ts +3 -0
  85. package/dist/esm/Client/transforms/recommendationFiltersPost.d.ts.map +1 -0
  86. package/dist/esm/Client/transforms/recommendationFiltersPost.js +59 -0
  87. package/dist/esm/Client/transforms/searchRequest.d.ts +49 -0
  88. package/dist/esm/Client/transforms/searchRequest.d.ts.map +1 -0
  89. package/dist/esm/Client/transforms/searchRequest.js +152 -0
  90. package/dist/esm/Client/transforms/searchResponse.d.ts +146 -0
  91. package/dist/esm/Client/transforms/searchResponse.d.ts.map +1 -0
  92. package/dist/esm/Client/transforms/searchResponse.js +284 -0
  93. package/dist/esm/Client/transforms/suggestResponse.d.ts +18 -0
  94. package/dist/esm/Client/transforms/suggestResponse.d.ts.map +1 -0
  95. package/dist/esm/Client/transforms/suggestResponse.js +26 -0
  96. package/dist/esm/Client/utils/fibonacci.d.ts +2 -0
  97. package/dist/esm/Client/utils/fibonacci.d.ts.map +1 -0
  98. package/dist/esm/Client/utils/fibonacci.js +10 -0
  99. package/dist/esm/Client/utils/index.d.ts +2 -0
  100. package/dist/esm/Client/utils/index.d.ts.map +1 -0
  101. package/dist/esm/Client/utils/index.js +1 -0
  102. package/dist/esm/Client/utils/mergeParams.d.ts +2 -0
  103. package/dist/esm/Client/utils/mergeParams.d.ts.map +1 -0
  104. package/dist/esm/Client/utils/mergeParams.js +20 -0
  105. package/dist/esm/index.d.ts +3 -0
  106. package/dist/esm/index.d.ts.map +1 -0
  107. package/dist/esm/index.js +1 -0
  108. package/dist/esm/types.d.ts +212 -0
  109. package/dist/esm/types.d.ts.map +1 -0
  110. package/dist/esm/types.js +1 -0
  111. package/package.json +31 -0
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
28
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
33
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.MetaAPI = void 0;
55
+ var _1 = require(".");
56
+ var MetaAPI = /** @class */ (function (_super) {
57
+ __extends(MetaAPI, _super);
58
+ function MetaAPI() {
59
+ return _super !== null && _super.apply(this, arguments) || this;
60
+ }
61
+ MetaAPI.prototype.postMeta = function (requestParameters) {
62
+ return __awaiter(this, void 0, void 0, function () {
63
+ var headerParameters, response;
64
+ return __generator(this, function (_a) {
65
+ switch (_a.label) {
66
+ case 0:
67
+ headerParameters = {};
68
+ headerParameters['Content-Type'] = 'application/json';
69
+ return [4 /*yield*/, this.request({
70
+ path: this.configuration.paths.meta || '/v1/meta',
71
+ method: 'POST',
72
+ headers: headerParameters,
73
+ body: requestParameters,
74
+ }, JSON.stringify(requestParameters))];
75
+ case 1:
76
+ response = _a.sent();
77
+ return [2 /*return*/, response];
78
+ }
79
+ });
80
+ });
81
+ };
82
+ MetaAPI.prototype.getMeta = function (queryParameters) {
83
+ return __awaiter(this, void 0, void 0, function () {
84
+ var response;
85
+ return __generator(this, function (_a) {
86
+ switch (_a.label) {
87
+ case 0: return [4 /*yield*/, this.request({
88
+ path: this.configuration.paths.meta || '/v1/meta',
89
+ method: 'GET',
90
+ headers: {},
91
+ query: queryParameters,
92
+ }, JSON.stringify(queryParameters))];
93
+ case 1:
94
+ response = _a.sent();
95
+ return [2 /*return*/, response];
96
+ }
97
+ });
98
+ });
99
+ };
100
+ return MetaAPI;
101
+ }(_1.API));
102
+ exports.MetaAPI = MetaAPI;
@@ -0,0 +1,15 @@
1
+ import { API } from './Abstract';
2
+ import { RecommendRequesterPaths } from '../../types';
3
+ import { ProfileRequestModel, ProfileResponseModel, RecommendResponseModel, RecommendRequestModel, RecommendPostRequestModel } from '../../types';
4
+ export declare class RecommendAPI extends API<RecommendRequesterPaths> {
5
+ private batches;
6
+ getProfile(queryParameters: ProfileRequestModel): Promise<ProfileResponseModel>;
7
+ batchRecommendations(parameters: RecommendRequestModel): Promise<RecommendResponseModel>;
8
+ postRecommendations(requestParameters: RecommendPostRequestModel): Promise<RecommendResponseModel[]>;
9
+ }
10
+ type DefinedProps = {
11
+ [key: string]: any;
12
+ };
13
+ export declare function defined(properties: Record<string, any>): DefinedProps;
14
+ export {};
15
+ //# sourceMappingURL=Recommend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Recommend.d.ts","sourceRoot":"","sources":["../../../../src/Client/apis/Recommend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAiD,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGrG,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAsBlJ,qBAAa,YAAa,SAAQ,GAAG,CAAC,uBAAuB,CAAC;IAC7D,OAAO,CAAC,OAAO,CAMR;IAED,UAAU,CAAC,eAAe,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAgB/E,oBAAoB,CAAC,UAAU,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAuHxF,mBAAmB,CAAC,iBAAiB,EAAE,yBAAyB,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;CAiB1G;AA2BD,KAAK,YAAY,GAAG;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB,CAAC;AAEF,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,YAAY,CAUrE"}
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ var __generator = (this && this.__generator) || function (thisArg, body) {
38
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
39
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
+ function verb(n) { return function (v) { return step([n, v]); }; }
41
+ function step(op) {
42
+ if (f) throw new TypeError("Generator is already executing.");
43
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
44
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
45
+ if (y = 0, t) op = [op[0] & 2, t.value];
46
+ switch (op[0]) {
47
+ case 0: case 1: t = op; break;
48
+ case 4: _.label++; return { value: op[1], done: false };
49
+ case 5: _.label++; y = op[1]; op = [0]; continue;
50
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
+ default:
52
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
+ if (t[2]) _.ops.pop();
57
+ _.trys.pop(); continue;
58
+ }
59
+ op = body.call(thisArg, _);
60
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
+ }
63
+ };
64
+ Object.defineProperty(exports, "__esModule", { value: true });
65
+ exports.RecommendAPI = void 0;
66
+ exports.defined = defined;
67
+ var Abstract_1 = require("./Abstract");
68
+ var snap_toolbox_1 = require("@athoscommerce/snap-toolbox");
69
+ var transforms_1 = require("../transforms");
70
+ var Search_1 = require("./Search");
71
+ var Deferred = /** @class */ (function () {
72
+ function Deferred() {
73
+ var _this = this;
74
+ this.promise = new Promise(function (resolve, reject) {
75
+ _this.reject = reject;
76
+ _this.resolve = resolve;
77
+ });
78
+ }
79
+ return Deferred;
80
+ }());
81
+ var BATCH_TIMEOUT = 150;
82
+ var RecommendAPI = /** @class */ (function (_super) {
83
+ __extends(RecommendAPI, _super);
84
+ function RecommendAPI() {
85
+ var _this = _super !== null && _super.apply(this, arguments) || this;
86
+ _this.batches = {};
87
+ return _this;
88
+ }
89
+ RecommendAPI.prototype.getProfile = function (queryParameters) {
90
+ return __awaiter(this, void 0, void 0, function () {
91
+ var headerParameters, response;
92
+ return __generator(this, function (_a) {
93
+ switch (_a.label) {
94
+ case 0:
95
+ headerParameters = {};
96
+ return [4 /*yield*/, this.request({
97
+ path: this.configuration.paths.profile || '/v1/profile',
98
+ method: 'GET',
99
+ headers: headerParameters,
100
+ query: queryParameters,
101
+ }, JSON.stringify(queryParameters))];
102
+ case 1:
103
+ response = _a.sent();
104
+ return [2 /*return*/, response];
105
+ }
106
+ });
107
+ });
108
+ };
109
+ RecommendAPI.prototype.batchRecommendations = function (parameters) {
110
+ return __awaiter(this, void 0, void 0, function () {
111
+ var batchId, key, batch, deferred, timeoutClear, timeoutSet;
112
+ var _this = this;
113
+ var _a;
114
+ return __generator(this, function (_b) {
115
+ batchId = parameters.batchId || 1;
116
+ key = parameters.batched ? "".concat(((_a = parameters.profile) === null || _a === void 0 ? void 0 : _a.siteId) || parameters.siteId, ":").concat(batchId) : "".concat(Math.random(), ":").concat(batchId);
117
+ batch = (this.batches[key] = this.batches[key] || { timeout: null, request: { profiles: [] }, entries: [] });
118
+ deferred = new Deferred();
119
+ // add each request to the list
120
+ batch.entries.push({ request: parameters, deferred: deferred });
121
+ timeoutClear = typeof window !== 'undefined' ? window.clearTimeout : clearTimeout;
122
+ timeoutSet = typeof window !== 'undefined' ? window.setTimeout : setTimeout;
123
+ timeoutClear && timeoutClear(batch.timeout);
124
+ batch.timeout = timeoutSet(function () { return __awaiter(_this, void 0, void 0, function () {
125
+ var response_1, err_1;
126
+ var _this = this;
127
+ var _a, _b;
128
+ return __generator(this, function (_c) {
129
+ switch (_c.label) {
130
+ case 0:
131
+ // delete the batch so a new one can take its place
132
+ delete this.batches[key];
133
+ // resort batch entries based on order
134
+ batch.entries.sort(sortBatchEntries);
135
+ // now that the requests are in proper order, map through them and build out the batches
136
+ batch.entries.map(function (entry) {
137
+ var _a, _b, _c;
138
+ // use products request only and combine when needed
139
+ if (entry.request.product) {
140
+ if (Array.isArray(entry.request.products) && entry.request.products.indexOf(entry.request.product) == -1) {
141
+ entry.request.products = entry.request.products.concat(entry.request.product);
142
+ }
143
+ else {
144
+ entry.request.products = [entry.request.product];
145
+ }
146
+ }
147
+ // build profile specific parameters
148
+ if (entry.request.profile) {
149
+ var _d = entry.request, tag = _d.tag, _e = _d.profile, categories = _e.categories, brands = _e.brands, blockedItems_1 = _e.blockedItems, limit = _e.limit, query = _e.query, filters_1 = _e.filters, dedupe = _e.dedupe;
150
+ var profile = __assign({ tag: tag }, defined({
151
+ categories: categories,
152
+ brands: brands,
153
+ blockedItems: blockedItems_1,
154
+ limit: limit,
155
+ searchTerm: query,
156
+ filters: (0, transforms_1.transformRecommendationFiltersPost)(filters_1),
157
+ dedupe: dedupe,
158
+ }));
159
+ (_a = batch.request.profiles) === null || _a === void 0 ? void 0 : _a.push(profile);
160
+ }
161
+ else {
162
+ var _f = entry.request, tag = _f.tag, categories = _f.categories, brands = _f.brands, limit = _f.limit, query = _f.query, dedupe = _f.dedupe;
163
+ var profile = __assign({ tag: tag }, defined({
164
+ categories: categories,
165
+ brands: brands,
166
+ limit: limit,
167
+ searchTerm: query,
168
+ dedupe: dedupe,
169
+ }));
170
+ (_b = batch.request.profiles) === null || _b === void 0 ? void 0 : _b.push(profile);
171
+ }
172
+ // parameters used globally
173
+ var _g = entry.request, products = _g.products, blockedItems = _g.blockedItems, filters = _g.filters, test = _g.test, cart = _g.cart, lastViewed = _g.lastViewed, shopper = _g.shopper;
174
+ // merge and de-dupe global array fields
175
+ var dedupedProducts = Array.from(new Set((batch.request.products || []).concat(products || [])));
176
+ var dedupedBlockedItems = Array.from(new Set((batch.request.blockedItems || []).concat(blockedItems || [])));
177
+ var dedupedFilters = Array.from(new Set((batch.request.filters || []).concat((0, transforms_1.transformRecommendationFiltersPost)(filters) || []).map(function (filter) { return JSON.stringify(filter); }))).map(function (stringyFilter) { return JSON.parse(stringyFilter); });
178
+ batch.request = __assign(__assign({}, batch.request), defined({
179
+ siteId: ((_c = entry.request.profile) === null || _c === void 0 ? void 0 : _c.siteId) || entry.request.siteId,
180
+ products: dedupedProducts.length ? dedupedProducts : undefined,
181
+ blockedItems: dedupedBlockedItems.length ? dedupedBlockedItems : undefined,
182
+ filters: dedupedFilters.length ? dedupedFilters : undefined,
183
+ test: test,
184
+ cart: cart,
185
+ lastViewed: lastViewed,
186
+ shopper: shopper,
187
+ }));
188
+ if (_this.configuration.mode == snap_toolbox_1.AppMode.development) {
189
+ batch.request[Search_1.DEVELOPMENT_MODE_PARAM] = true;
190
+ }
191
+ });
192
+ _c.label = 1;
193
+ case 1:
194
+ _c.trys.push([1, 3, , 4]);
195
+ if (this.configuration.mode == snap_toolbox_1.AppMode.development) {
196
+ batch.request.test = true;
197
+ }
198
+ return [4 /*yield*/, this.postRecommendations(batch.request)];
199
+ case 2:
200
+ response_1 = _c.sent();
201
+ (_a = batch.entries) === null || _a === void 0 ? void 0 : _a.forEach(function (entry, index) {
202
+ entry.deferred.resolve(response_1[index]);
203
+ });
204
+ return [3 /*break*/, 4];
205
+ case 3:
206
+ err_1 = _c.sent();
207
+ (_b = batch.entries) === null || _b === void 0 ? void 0 : _b.forEach(function (entry) {
208
+ entry.deferred.reject(err_1);
209
+ });
210
+ return [3 /*break*/, 4];
211
+ case 4: return [2 /*return*/];
212
+ }
213
+ });
214
+ }); }, BATCH_TIMEOUT);
215
+ return [2 /*return*/, deferred.promise];
216
+ });
217
+ });
218
+ };
219
+ RecommendAPI.prototype.postRecommendations = function (requestParameters) {
220
+ return __awaiter(this, void 0, void 0, function () {
221
+ var headerParameters, response;
222
+ return __generator(this, function (_a) {
223
+ switch (_a.label) {
224
+ case 0:
225
+ headerParameters = {};
226
+ headerParameters['Content-Type'] = 'text/plain';
227
+ return [4 /*yield*/, this.request({
228
+ path: this.configuration.paths.recommend || '/v1/recommend',
229
+ method: 'POST',
230
+ headers: headerParameters,
231
+ body: requestParameters,
232
+ subDomain: 'p13n',
233
+ }, JSON.stringify(requestParameters))];
234
+ case 1:
235
+ response = _a.sent();
236
+ return [2 /*return*/, response];
237
+ }
238
+ });
239
+ });
240
+ };
241
+ return RecommendAPI;
242
+ }(Abstract_1.API));
243
+ exports.RecommendAPI = RecommendAPI;
244
+ function sortBatchEntries(a, b) {
245
+ var _a, _b;
246
+ var one = a.request;
247
+ var two = b.request;
248
+ var orderOne = one.order || ((_a = one.profile) === null || _a === void 0 ? void 0 : _a.order);
249
+ var orderTwo = two.order || ((_b = two.profile) === null || _b === void 0 ? void 0 : _b.order);
250
+ // undefined order goes last
251
+ if (orderOne == undefined && orderTwo == undefined) {
252
+ return 0;
253
+ }
254
+ if (orderOne == undefined && orderTwo != undefined) {
255
+ return 1;
256
+ }
257
+ if (orderTwo == undefined && orderOne != undefined) {
258
+ return -1;
259
+ }
260
+ if (orderOne < orderTwo) {
261
+ return -1;
262
+ }
263
+ if (orderOne > orderTwo) {
264
+ return 1;
265
+ }
266
+ return 0;
267
+ }
268
+ function defined(properties) {
269
+ var definedProps = {};
270
+ Object.keys(properties).map(function (key) {
271
+ if (properties[key] !== undefined) {
272
+ definedProps[key] = properties[key];
273
+ }
274
+ });
275
+ return definedProps;
276
+ }
@@ -0,0 +1,12 @@
1
+ import { AutocompleteRequestModel, AutocompleteResponseModel, SearchRequestModel, SearchResponseModel } from '@athoscommerce/snapi-types';
2
+ import { API } from '.';
3
+ import { SearchRequesterPaths } from '../../types';
4
+ export declare const DEVELOPMENT_MODE_PARAM = "test";
5
+ export declare class SearchAPI extends API<SearchRequesterPaths> {
6
+ private getEndpoint;
7
+ getAutocomplete(queryParameters: AutocompleteRequestModel): Promise<AutocompleteResponseModel>;
8
+ getSearch(queryParameters: SearchRequestModel): Promise<SearchResponseModel>;
9
+ getCategory(queryParameters: SearchRequestModel): Promise<SearchResponseModel>;
10
+ getFinder(queryParameters: SearchRequestModel): Promise<SearchResponseModel>;
11
+ }
12
+ //# sourceMappingURL=Search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Search.d.ts","sourceRoot":"","sources":["../../../../src/Client/apis/Search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAE1I,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAKnD,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAE7C,qBAAa,SAAU,SAAQ,GAAG,CAAC,oBAAoB,CAAC;YACzC,WAAW;IA8BZ,eAAe,CAAC,eAAe,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAI9F,SAAS,CAAC,eAAe,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI5E,WAAW,CAAC,eAAe,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI9E,SAAS,CAAC,eAAe,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAGzF"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ var __generator = (this && this.__generator) || function (thisArg, body) {
38
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
39
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
+ function verb(n) { return function (v) { return step([n, v]); }; }
41
+ function step(op) {
42
+ if (f) throw new TypeError("Generator is already executing.");
43
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
44
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
45
+ if (y = 0, t) op = [op[0] & 2, t.value];
46
+ switch (op[0]) {
47
+ case 0: case 1: t = op; break;
48
+ case 4: _.label++; return { value: op[1], done: false };
49
+ case 5: _.label++; y = op[1]; op = [0]; continue;
50
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
+ default:
52
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
+ if (t[2]) _.ops.pop();
57
+ _.trys.pop(); continue;
58
+ }
59
+ op = body.call(thisArg, _);
60
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
+ }
63
+ };
64
+ Object.defineProperty(exports, "__esModule", { value: true });
65
+ exports.SearchAPI = exports.DEVELOPMENT_MODE_PARAM = void 0;
66
+ var _1 = require(".");
67
+ var snap_toolbox_1 = require("@athoscommerce/snap-toolbox");
68
+ var searchResponse_1 = require("../transforms/searchResponse");
69
+ var transforms_1 = require("../transforms");
70
+ exports.DEVELOPMENT_MODE_PARAM = 'test';
71
+ var SearchAPI = /** @class */ (function (_super) {
72
+ __extends(SearchAPI, _super);
73
+ function SearchAPI() {
74
+ return _super !== null && _super.apply(this, arguments) || this;
75
+ }
76
+ SearchAPI.prototype.getEndpoint = function (requestParameters, path) {
77
+ return __awaiter(this, void 0, void 0, function () {
78
+ var searchRequestParameters, cacheParameters, searchResponse;
79
+ return __generator(this, function (_a) {
80
+ switch (_a.label) {
81
+ case 0:
82
+ searchRequestParameters = (0, transforms_1.transformSearchRequest)(requestParameters);
83
+ searchRequestParameters.ajaxCatalog = this.configuration.initiator;
84
+ searchRequestParameters.resultsFormat = 'native';
85
+ if (this.configuration.mode == snap_toolbox_1.AppMode.development) {
86
+ searchRequestParameters[exports.DEVELOPMENT_MODE_PARAM] = true;
87
+ }
88
+ cacheParameters = __assign({}, searchRequestParameters);
89
+ delete cacheParameters.pageLoadId;
90
+ delete cacheParameters.domain;
91
+ // autocomplete only params
92
+ delete cacheParameters.input;
93
+ delete cacheParameters.redirectResponse;
94
+ return [4 /*yield*/, this.request({
95
+ path: path,
96
+ method: 'GET',
97
+ headers: {},
98
+ query: searchRequestParameters,
99
+ }, JSON.stringify(cacheParameters))];
100
+ case 1:
101
+ searchResponse = _a.sent();
102
+ return [2 /*return*/, (0, searchResponse_1.transformSearchResponse)(searchResponse, requestParameters)];
103
+ }
104
+ });
105
+ });
106
+ };
107
+ SearchAPI.prototype.getAutocomplete = function (queryParameters) {
108
+ return __awaiter(this, void 0, void 0, function () {
109
+ return __generator(this, function (_a) {
110
+ return [2 /*return*/, this.getEndpoint(queryParameters, this.configuration.paths.autocomplete || '/v1/autocomplete')];
111
+ });
112
+ });
113
+ };
114
+ SearchAPI.prototype.getSearch = function (queryParameters) {
115
+ return __awaiter(this, void 0, void 0, function () {
116
+ return __generator(this, function (_a) {
117
+ return [2 /*return*/, this.getEndpoint(queryParameters, this.configuration.paths.search || '/v1/search')];
118
+ });
119
+ });
120
+ };
121
+ SearchAPI.prototype.getCategory = function (queryParameters) {
122
+ return __awaiter(this, void 0, void 0, function () {
123
+ return __generator(this, function (_a) {
124
+ return [2 /*return*/, this.getEndpoint(queryParameters, this.configuration.paths.category || '/v1/category')];
125
+ });
126
+ });
127
+ };
128
+ SearchAPI.prototype.getFinder = function (queryParameters) {
129
+ return __awaiter(this, void 0, void 0, function () {
130
+ return __generator(this, function (_a) {
131
+ return [2 /*return*/, this.getEndpoint(queryParameters, this.configuration.paths.finder || '/v1/finder')];
132
+ });
133
+ });
134
+ };
135
+ return SearchAPI;
136
+ }(_1.API));
137
+ exports.SearchAPI = SearchAPI;
@@ -0,0 +1,9 @@
1
+ import { API } from './Abstract';
2
+ import { SuggestRequesterPaths, SuggestRequestModel, SuggestResponseModel, TrendingRequestModel, TrendingResponseModel } from '../../types';
3
+ export declare class SuggestAPI extends API<SuggestRequesterPaths> {
4
+ getSuggest(queryParameters: SuggestRequestModel): Promise<SuggestResponseModel>;
5
+ postSuggest(requestParameters: SuggestRequestModel): Promise<SuggestResponseModel>;
6
+ getTrending(queryParameters: TrendingRequestModel): Promise<TrendingResponseModel>;
7
+ postTrending(requestParameters: TrendingRequestModel): Promise<TrendingResponseModel>;
8
+ }
9
+ //# 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;AACjC,OAAO,EAEN,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,MAAM,aAAa,CAAC;AAErB,qBAAa,UAAW,SAAQ,GAAG,CAAC,qBAAqB,CAAC;IACnD,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"}