@or-sdk/contacts 3.0.13-beta.1474.0 → 3.0.13-beta.1477.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.
@@ -61,9 +61,21 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
61
61
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
62
  }
63
63
  };
64
+ var __rest = (this && this.__rest) || function (s, e) {
65
+ var t = {};
66
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
67
+ t[p] = s[p];
68
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
69
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
70
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
71
+ t[p[i]] = s[p[i]];
72
+ }
73
+ return t;
74
+ };
64
75
  Object.defineProperty(exports, "__esModule", { value: true });
65
76
  var baseApi_1 = require("./baseApi");
66
77
  var utils_1 = require("../utils");
78
+ var constants_1 = require("../constants");
67
79
  var ContactApi = (function (_super) {
68
80
  __extends(ContactApi, _super);
69
81
  function ContactApi(apiCall, batchProcessApi) {
@@ -117,44 +129,14 @@ var ContactApi = (function (_super) {
117
129
  };
118
130
  ContactApi.prototype.bulkCreateContacts = function (data) {
119
131
  return __awaiter(this, void 0, void 0, function () {
120
- var batchProcess, polling, batchProcessResult, contactIds;
121
- var _this = this;
132
+ var contacts, rest, contactsMaxSize, contactsChunks;
122
133
  return __generator(this, function (_a) {
123
- switch (_a.label) {
124
- case 0: return [4, this.apiCall({
125
- method: 'POST',
126
- route: "".concat(this.apiBasePath, "/bulk"),
127
- data: data,
128
- })];
129
- case 1:
130
- batchProcess = _a.sent();
131
- polling = function () { return __awaiter(_this, void 0, void 0, function () {
132
- var batchProcessState, e_1;
133
- return __generator(this, function (_a) {
134
- switch (_a.label) {
135
- case 0:
136
- _a.trys.push([0, 2, , 3]);
137
- return [4, this.batchProcessApi.getBatchProcess(batchProcess.id)];
138
- case 1:
139
- batchProcessState = _a.sent();
140
- if (batchProcessState.status === 'pending') {
141
- return [2, polling()];
142
- }
143
- return [2, batchProcessState];
144
- case 2:
145
- e_1 = _a.sent();
146
- throw new Error(e_1);
147
- case 3: return [2];
148
- }
149
- });
150
- }); };
151
- return [4, polling()];
152
- case 2:
153
- batchProcessResult = _a.sent();
154
- contactIds = batchProcessResult.results.flatMap(function (i) { return JSON.parse(i); });
155
- return [4, this.listContact(__assign({ contactIds: contactIds }, (data.contact_book && { contact_book: data.contact_book })))];
156
- case 3: return [2, (_a.sent()).items];
157
- }
134
+ contacts = data.contacts, rest = __rest(data, ["contacts"]);
135
+ contactsMaxSize = constants_1.REQUEST_PAYLOAD_MAX_BYTES - (0, utils_1.getObjectSizeInBytes)(__assign({}, rest));
136
+ contactsChunks = (0, utils_1.chunkArrByMaxSize)(contacts, contactsMaxSize);
137
+ return [2, contactsChunks.length === 1
138
+ ? this.createContactsInSingleBatch(data)
139
+ : this.createContactsInMultiBatches(contactsChunks, rest)];
158
140
  });
159
141
  });
160
142
  };
@@ -193,6 +175,99 @@ var ContactApi = (function (_super) {
193
175
  data: data,
194
176
  });
195
177
  };
178
+ ContactApi.prototype.getSafelyContactsList = function (contactIds, bookId, repeats) {
179
+ return __awaiter(this, void 0, void 0, function () {
180
+ var contacts;
181
+ var _this = this;
182
+ return __generator(this, function (_a) {
183
+ switch (_a.label) {
184
+ case 0: return [4, this.listContact(__assign({ contactIds: contactIds }, (bookId && { contact_book: bookId }))).catch(function (e) {
185
+ repeats = repeats || 0;
186
+ if (repeats < constants_1.FAILED_REQUEST_REPEATS) {
187
+ return _this.getSafelyContactsList(contactIds, bookId, repeats + 1);
188
+ }
189
+ throw new Error(e);
190
+ })];
191
+ case 1:
192
+ contacts = _a.sent();
193
+ return [2, contacts];
194
+ }
195
+ });
196
+ });
197
+ };
198
+ ContactApi.prototype.createContactsInSingleBatch = function (data) {
199
+ return __awaiter(this, void 0, void 0, function () {
200
+ var batchProcess, polling, batchProcessResult, contactIds, importedContacts;
201
+ var _this = this;
202
+ return __generator(this, function (_a) {
203
+ switch (_a.label) {
204
+ case 0: return [4, this.apiCall({
205
+ method: 'POST',
206
+ route: "".concat(this.apiBasePath, "/bulk"),
207
+ data: data,
208
+ })];
209
+ case 1:
210
+ batchProcess = _a.sent();
211
+ polling = function (batchId, repeats) { return __awaiter(_this, void 0, void 0, function () {
212
+ var batchProcessState;
213
+ return __generator(this, function (_a) {
214
+ switch (_a.label) {
215
+ case 0: return [4, this.batchProcessApi.getBatchProcess(batchId).catch(function (e) {
216
+ repeats = repeats || 0;
217
+ if (repeats < constants_1.FAILED_REQUEST_REPEATS) {
218
+ return polling(batchId, repeats + 1);
219
+ }
220
+ throw new Error(e);
221
+ })];
222
+ case 1:
223
+ batchProcessState = _a.sent();
224
+ return [2, batchProcessState.status === 'pending' ? polling(batchId) : batchProcessState];
225
+ }
226
+ });
227
+ }); };
228
+ return [4, polling(batchProcess.id)];
229
+ case 2:
230
+ batchProcessResult = _a.sent();
231
+ contactIds = batchProcessResult.results.flatMap(function (i) { return JSON.parse(i); });
232
+ return [4, this.getSafelyContactsList(contactIds, data.contact_book)];
233
+ case 3:
234
+ importedContacts = _a.sent();
235
+ return [2, importedContacts.items];
236
+ }
237
+ });
238
+ });
239
+ };
240
+ ContactApi.prototype.createContactsInMultiBatches = function (contactsChunks, data) {
241
+ return __awaiter(this, void 0, void 0, function () {
242
+ var batchPromises, results, _i, batchPromises_1, fn, singleBatchResults;
243
+ var _this = this;
244
+ return __generator(this, function (_a) {
245
+ switch (_a.label) {
246
+ case 0:
247
+ batchPromises = contactsChunks.map(function (chunkContacts) { return function () { return __awaiter(_this, void 0, void 0, function () {
248
+ return __generator(this, function (_a) {
249
+ return [2, this.createContactsInSingleBatch(__assign({ contacts: chunkContacts }, data))];
250
+ });
251
+ }); }; });
252
+ results = [];
253
+ _i = 0, batchPromises_1 = batchPromises;
254
+ _a.label = 1;
255
+ case 1:
256
+ if (!(_i < batchPromises_1.length)) return [3, 4];
257
+ fn = batchPromises_1[_i];
258
+ return [4, fn()];
259
+ case 2:
260
+ singleBatchResults = _a.sent();
261
+ results.push.apply(results, singleBatchResults);
262
+ _a.label = 3;
263
+ case 3:
264
+ _i++;
265
+ return [3, 1];
266
+ case 4: return [2, results];
267
+ }
268
+ });
269
+ });
270
+ };
196
271
  return ContactApi;
197
272
  }(baseApi_1.BaseApi));
198
273
  exports.default = ContactApi;
@@ -1 +1 @@
1
- {"version":3,"file":"contactApi.js","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contactApi.js","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CONTACTS_SERVICE_KEY = void 0;
3
+ exports.FAILED_REQUEST_REPEATS = exports.REQUEST_PAYLOAD_MAX_BYTES = exports.CONTACTS_SERVICE_KEY = void 0;
4
4
  exports.CONTACTS_SERVICE_KEY = 'contacts-api';
5
+ exports.REQUEST_PAYLOAD_MAX_BYTES = 128000;
6
+ exports.FAILED_REQUEST_REPEATS = 3;
5
7
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG,cAAc,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG,cAAc,CAAC;AAEtC,QAAA,yBAAyB,GAAG,MAAM,CAAC;AAEnC,QAAA,sBAAsB,GAAG,CAAC,CAAC"}
package/dist/cjs/utils.js CHANGED
@@ -10,8 +10,17 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
13
22
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.adaptListParams = void 0;
23
+ exports.chunkArrByMaxSize = exports.getObjectSizeInBytes = exports.adaptListParams = void 0;
15
24
  var propertyToEscape = ['from', 'size', 'orderProperty', 'orderDirection'];
16
25
  var adaptListParams = function (params) {
17
26
  var toInclude = Object.keys(params).reduce(function (acc, k) {
@@ -24,4 +33,20 @@ var adaptListParams = function (params) {
24
33
  { order: "".concat(params.orderProperty, ":").concat(params.orderDirection) })), (params.from && { skip: params.from })), (params.size && { take: params.size }));
25
34
  };
26
35
  exports.adaptListParams = adaptListParams;
36
+ var getObjectSizeInBytes = function (obj) { return Buffer
37
+ .from(encodeURIComponent(JSON.stringify(obj)))
38
+ .length; };
39
+ exports.getObjectSizeInBytes = getObjectSizeInBytes;
40
+ var chunkArrByMaxSize = function (arr, maxSize) {
41
+ var size = (0, exports.getObjectSizeInBytes)(arr);
42
+ if (size < maxSize) {
43
+ return [arr];
44
+ }
45
+ else if (arr.length === 1) {
46
+ throw new Error('Single array element exceeds maximum size');
47
+ }
48
+ var mid = Math.floor(arr.length / 2);
49
+ return __spreadArray(__spreadArray([], (0, exports.chunkArrByMaxSize)(arr.slice(0, mid), maxSize), true), (0, exports.chunkArrByMaxSize)(arr.slice(mid), maxSize), true);
50
+ };
51
+ exports.chunkArrByMaxSize = chunkArrByMaxSize;
27
52
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAGA,IAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,CAAU,CAAC;AAI/E,IAAM,eAAe,GAAG,UAC7B,MAAS;IAET,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAa,UAAC,GAAG,EAAE,CAAC;QAC9D,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAoC,CAAC,KAAK,CAAC,CAAC,EAAE;YACxE,GAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;SAC7B;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAgB,CAAC,CAAC;IAErB,+CACK,SAAS,GACT,CACD,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,cAAc,CAAC;QAC/C,EAAE,KAAK,EAAE,UAAG,MAAM,CAAC,aAAa,cAAI,MAAM,CAAC,cAAc,CAAE,EAAE,CAC9D,GACE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,GACtC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EACzC;AACJ,CAAC,CAAC;AAnBW,QAAA,eAAe,mBAmB1B"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA,IAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,CAAU,CAAC;AAI/E,IAAM,eAAe,GAAG,UAC7B,MAAS;IAET,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAa,UAAC,GAAG,EAAE,CAAC;QAC9D,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAoC,CAAC,KAAK,CAAC,CAAC,EAAE;YACxE,GAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;SAC7B;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAgB,CAAC,CAAC;IAErB,+CACK,SAAS,GACT,CACD,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,cAAc,CAAC;QAC/C,EAAE,KAAK,EAAE,UAAG,MAAM,CAAC,aAAa,cAAI,MAAM,CAAC,cAAc,CAAE,EAAE,CAC9D,GACE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,GACtC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EACzC;AACJ,CAAC,CAAC;AAnBW,QAAA,eAAe,mBAmB1B;AAEK,IAAM,oBAAoB,GAAG,UAAI,GAAM,IAAa,OAAA,MAAM;KAC9D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7C,MAAM,EAFkD,CAElD,CAAC;AAFG,QAAA,oBAAoB,wBAEvB;AAEH,IAAM,iBAAiB,GAAG,UAAI,GAAQ,EAAE,OAAe;IAC5D,IAAM,IAAI,GAAG,IAAA,4BAAoB,EAAC,GAAG,CAAC,CAAC;IAEvC,IAAI,IAAI,GAAG,OAAO,EAAE;QAClB,OAAO,CAAC,GAAG,CAAC,CAAC;KACd;SAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IACD,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,uCACK,IAAA,yBAAiB,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,SAC7C,IAAA,yBAAiB,EAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,QAC7C;AACJ,CAAC,CAAC;AAbW,QAAA,iBAAiB,qBAa5B"}
@@ -7,8 +7,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ var __rest = (this && this.__rest) || function (s, e) {
11
+ var t = {};
12
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
+ t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
+ t[p[i]] = s[p[i]];
18
+ }
19
+ return t;
20
+ };
10
21
  import { BaseApi } from './baseApi';
11
- import { adaptListParams } from '../utils';
22
+ import { adaptListParams, getObjectSizeInBytes, chunkArrByMaxSize } from '../utils';
23
+ import { REQUEST_PAYLOAD_MAX_BYTES, FAILED_REQUEST_REPEATS } from '../constants';
12
24
  export default class ContactApi extends BaseApi {
13
25
  constructor(apiCall, batchProcessApi) {
14
26
  super(apiCall);
@@ -60,26 +72,12 @@ export default class ContactApi extends BaseApi {
60
72
  }
61
73
  bulkCreateContacts(data) {
62
74
  return __awaiter(this, void 0, void 0, function* () {
63
- const batchProcess = yield this.apiCall({
64
- method: 'POST',
65
- route: `${this.apiBasePath}/bulk`,
66
- data,
67
- });
68
- const polling = () => __awaiter(this, void 0, void 0, function* () {
69
- try {
70
- const batchProcessState = yield this.batchProcessApi.getBatchProcess(batchProcess.id);
71
- if (batchProcessState.status === 'pending') {
72
- return polling();
73
- }
74
- return batchProcessState;
75
- }
76
- catch (e) {
77
- throw new Error(e);
78
- }
79
- });
80
- const batchProcessResult = yield polling();
81
- const contactIds = batchProcessResult.results.flatMap(i => JSON.parse(i));
82
- return (yield this.listContact(Object.assign({ contactIds }, (data.contact_book && { contact_book: data.contact_book })))).items;
75
+ const { contacts } = data, rest = __rest(data, ["contacts"]);
76
+ const contactsMaxSize = REQUEST_PAYLOAD_MAX_BYTES - getObjectSizeInBytes(Object.assign({}, rest));
77
+ const contactsChunks = chunkArrByMaxSize(contacts, contactsMaxSize);
78
+ return contactsChunks.length === 1
79
+ ? this.createContactsInSingleBatch(data)
80
+ : this.createContactsInMultiBatches(contactsChunks, rest);
83
81
  });
84
82
  }
85
83
  mergeContacts(id, data) {
@@ -117,5 +115,53 @@ export default class ContactApi extends BaseApi {
117
115
  data,
118
116
  });
119
117
  }
118
+ getSafelyContactsList(contactIds, bookId, repeats) {
119
+ return __awaiter(this, void 0, void 0, function* () {
120
+ const contacts = yield this.listContact(Object.assign({ contactIds }, (bookId && { contact_book: bookId }))).catch((e) => {
121
+ repeats = repeats || 0;
122
+ if (repeats < FAILED_REQUEST_REPEATS) {
123
+ return this.getSafelyContactsList(contactIds, bookId, repeats + 1);
124
+ }
125
+ throw new Error(e);
126
+ });
127
+ return contacts;
128
+ });
129
+ }
130
+ createContactsInSingleBatch(data) {
131
+ return __awaiter(this, void 0, void 0, function* () {
132
+ const batchProcess = yield this.apiCall({
133
+ method: 'POST',
134
+ route: `${this.apiBasePath}/bulk`,
135
+ data,
136
+ });
137
+ const polling = (batchId, repeats) => __awaiter(this, void 0, void 0, function* () {
138
+ const batchProcessState = yield this.batchProcessApi.getBatchProcess(batchId).catch((e) => {
139
+ repeats = repeats || 0;
140
+ if (repeats < FAILED_REQUEST_REPEATS) {
141
+ return polling(batchId, repeats + 1);
142
+ }
143
+ throw new Error(e);
144
+ });
145
+ return batchProcessState.status === 'pending' ? polling(batchId) : batchProcessState;
146
+ });
147
+ const batchProcessResult = yield polling(batchProcess.id);
148
+ const contactIds = batchProcessResult.results.flatMap(i => JSON.parse(i));
149
+ const importedContacts = yield this.getSafelyContactsList(contactIds, data.contact_book);
150
+ return importedContacts.items;
151
+ });
152
+ }
153
+ createContactsInMultiBatches(contactsChunks, data) {
154
+ return __awaiter(this, void 0, void 0, function* () {
155
+ const batchPromises = contactsChunks.map((chunkContacts) => () => __awaiter(this, void 0, void 0, function* () {
156
+ return this.createContactsInSingleBatch(Object.assign({ contacts: chunkContacts }, data));
157
+ }));
158
+ const results = [];
159
+ for (const fn of batchPromises) {
160
+ const singleBatchResults = yield fn();
161
+ results.push(...singleBatchResults);
162
+ }
163
+ return results;
164
+ });
165
+ }
120
166
  }
121
167
  //# sourceMappingURL=contactApi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contactApi.js","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contactApi.js","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
1
  export const CONTACTS_SERVICE_KEY = 'contacts-api';
2
+ export const REQUEST_PAYLOAD_MAX_BYTES = 128000;
3
+ export const FAILED_REQUEST_REPEATS = 3;
2
4
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAEnD,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC"}
package/dist/esm/utils.js CHANGED
@@ -9,4 +9,21 @@ export const adaptListParams = (params) => {
9
9
  return Object.assign(Object.assign(Object.assign(Object.assign({}, toInclude), ((params.orderProperty && params.orderDirection) &&
10
10
  { order: `${params.orderProperty}:${params.orderDirection}` })), (params.from && { skip: params.from })), (params.size && { take: params.size }));
11
11
  };
12
+ export const getObjectSizeInBytes = (obj) => Buffer
13
+ .from(encodeURIComponent(JSON.stringify(obj)))
14
+ .length;
15
+ export const chunkArrByMaxSize = (arr, maxSize) => {
16
+ const size = getObjectSizeInBytes(arr);
17
+ if (size < maxSize) {
18
+ return [arr];
19
+ }
20
+ else if (arr.length === 1) {
21
+ throw new Error('Single array element exceeds maximum size');
22
+ }
23
+ const mid = Math.floor(arr.length / 2);
24
+ return [
25
+ ...chunkArrByMaxSize(arr.slice(0, mid), maxSize),
26
+ ...chunkArrByMaxSize(arr.slice(mid), maxSize),
27
+ ];
28
+ };
12
29
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAGA,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,CAAU,CAAC;AAItF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAAS,EAC0C,EAAE;IACrD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAa,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAClE,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAoC,CAAC,KAAK,CAAC,CAAC,EAAE;YACxE,GAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;SAC7B;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAgB,CAAC,CAAC;IAErB,mEACK,SAAS,GACT,CACD,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,cAAc,CAAC;QAC/C,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE,CAC9D,GACE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,GACtC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EACzC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAGA,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,CAAU,CAAC;AAItF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAAS,EAC0C,EAAE;IACrD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAa,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAClE,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAoC,CAAC,KAAK,CAAC,CAAC,EAAE;YACxE,GAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;SAC7B;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAgB,CAAC,CAAC;IAErB,mEACK,SAAS,GACT,CACD,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,cAAc,CAAC;QAC/C,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE,CAC9D,GACE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,GACtC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EACzC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAI,GAAM,EAAU,EAAE,CAAC,MAAM;KAC9D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7C,MAAM,CAAC;AAEV,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAI,GAAQ,EAAE,OAAe,EAAS,EAAE;IACvE,MAAM,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAEvC,IAAI,IAAI,GAAG,OAAO,EAAE;QAClB,OAAO,CAAC,GAAG,CAAC,CAAC;KACd;SAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,OAAO;QACL,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC;QAChD,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;KAC9C,CAAC;AACJ,CAAC,CAAC"}
@@ -1,8 +1,8 @@
1
- import { BaseApi } from './baseApi';
2
- import { ContactResponseDto, CreateContactDto, CreateMultipleContactsDto, UpdateContactDto, ContactParamsDto, MergeContactParamsDto, DeleteContactParamsDto, DeleteContactMultiParamsDto, LinkContactParamsDto, LinkContactMultiParamsDto, UnlinkContactParamsDto, UnlinkContactMultiParamsDto } from '@onereach/types-contacts-api';
3
- import { ContactSearchParams } from '../types';
1
+ import { ContactParamsDto, ContactResponseDto, CreateContactDto, CreateMultipleContactsDto, DeleteContactMultiParamsDto, DeleteContactParamsDto, LinkContactMultiParamsDto, LinkContactParamsDto, MergeContactParamsDto, UnlinkContactMultiParamsDto, UnlinkContactParamsDto, UpdateContactDto } from '@onereach/types-contacts-api';
4
2
  import { CalApiParams, List } from '@or-sdk/base';
3
+ import { BaseApi } from './baseApi';
5
4
  import BatchProcessApi from './batchProcessApi';
5
+ import { ContactSearchParams } from '../types';
6
6
  export default class ContactApi extends BaseApi {
7
7
  protected readonly apiCall: <T>(params: CalApiParams) => Promise<T>;
8
8
  private batchProcessApi;
@@ -20,5 +20,8 @@ export default class ContactApi extends BaseApi {
20
20
  linkContactsMulti(data: LinkContactMultiParamsDto): Promise<void>;
21
21
  unlinkContact(id: string, data: UnlinkContactParamsDto): Promise<void>;
22
22
  unlinkContactsMulti(data: UnlinkContactMultiParamsDto): Promise<void>;
23
+ private getSafelyContactsList;
24
+ private createContactsInSingleBatch;
25
+ private createContactsInMultiBatches;
23
26
  }
24
27
  //# sourceMappingURL=contactApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contactApi.d.ts","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,2BAA2B,EAE5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAE3C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,eAAe;gBADJ,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,EAC3D,eAAe,EAAE,eAAe;IAI1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAOzC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAY7E,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAe3E,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAa9E,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAatE,WAAW,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7D,aAAa,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAY5D,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAsCxF,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAanF,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlE,iBAAiB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtE,mBAAmB,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;CAOtE"}
1
+ {"version":3,"file":"contactApi.d.ts","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAEhB,kBAAkB,EAClB,gBAAgB,EAChB,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAI/C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAE3C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,eAAe;gBADJ,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,EAC3D,eAAe,EAAE,eAAe;IAK1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAOzC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAY7E,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAe3E,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAa9E,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAatE,WAAW,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7D,aAAa,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAY5D,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAexF,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAanF,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlE,iBAAiB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtE,mBAAmB,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;YAQvD,qBAAqB;YAkBrB,2BAA2B;YA2B3B,4BAA4B;CAgB3C"}
@@ -1,2 +1,4 @@
1
1
  export declare const CONTACTS_SERVICE_KEY = "contacts-api";
2
+ export declare const REQUEST_PAYLOAD_MAX_BYTES = 128000;
3
+ export declare const FAILED_REQUEST_REPEATS = 3;
2
4
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,iBAAiB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAEnD,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAEhD,eAAO,MAAM,sBAAsB,IAAI,CAAC"}
@@ -1,10 +1,12 @@
1
- import { AdaptedListParams } from './types';
2
1
  import { ListApiParams, OrderParams } from '@onereach/types-contacts-api';
2
+ import { AdaptedListParams } from './types';
3
3
  declare const propertyToEscape: readonly ["from", "size", "orderProperty", "orderDirection"];
4
4
  declare type Omitted<T> = Omit<T, typeof propertyToEscape[number]>;
5
5
  export declare const adaptListParams: <T extends AdaptedListParams<{
6
6
  [key: string]: any;
7
7
  [key: number]: any;
8
8
  }>>(params: T) => Omitted<T> & Partial<ListApiParams & OrderParams>;
9
+ export declare const getObjectSizeInBytes: <T>(obj: T) => number;
10
+ export declare const chunkArrByMaxSize: <T>(arr: T[], maxSize: number) => T[][];
9
11
  export {};
10
12
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE1E,QAAA,MAAM,gBAAgB,8DAA+D,CAAC;AACtF,aAAK,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AAG3D,eAAO,MAAM,eAAe;;;mEAmB3B,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,QAAA,MAAM,gBAAgB,8DAA+D,CAAC;AACtF,aAAK,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AAG3D,eAAO,MAAM,eAAe;;;mEAmB3B,CAAC;AAEF,eAAO,MAAM,oBAAoB,iBAAgB,MAExC,CAAC;AAEV,eAAO,MAAM,iBAAiB,yBAA0B,MAAM,UAa7D,CAAC"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "3.0.13-beta.1474.0",
2
+ "version": "3.0.13-beta.1477.0",
3
3
  "name": "@or-sdk/contacts",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
@@ -25,6 +25,6 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@onereach/types-contacts-api": "2.5.6",
28
- "@or-sdk/base": "^0.28.4-beta.1474.0"
28
+ "@or-sdk/base": "^0.28.3"
29
29
  }
30
30
  }
@@ -1,23 +1,25 @@
1
- import { BaseApi } from './baseApi';
2
1
  import {
2
+ BatchProcessResponseDto,
3
+ ContactParamsDto,
4
+ ContactRequestDto,
3
5
  ContactResponseDto,
4
6
  CreateContactDto,
5
7
  CreateMultipleContactsDto,
6
- UpdateContactDto,
7
- ContactParamsDto,
8
- MergeContactParamsDto,
9
- DeleteContactParamsDto,
10
8
  DeleteContactMultiParamsDto,
11
- LinkContactParamsDto,
9
+ DeleteContactParamsDto,
12
10
  LinkContactMultiParamsDto,
13
- UnlinkContactParamsDto,
11
+ LinkContactParamsDto,
12
+ MergeContactParamsDto,
14
13
  UnlinkContactMultiParamsDto,
15
- BatchProcessResponseDto,
14
+ UnlinkContactParamsDto,
15
+ UpdateContactDto,
16
16
  } from '@onereach/types-contacts-api';
17
- import { ContactSearchParams } from '../types';
18
- import { adaptListParams } from '../utils';
19
17
  import { CalApiParams, List } from '@or-sdk/base';
18
+ import { BaseApi } from './baseApi';
20
19
  import BatchProcessApi from './batchProcessApi';
20
+ import { ContactSearchParams } from '../types';
21
+ import { adaptListParams, getObjectSizeInBytes, chunkArrByMaxSize } from '../utils';
22
+ import { REQUEST_PAYLOAD_MAX_BYTES, FAILED_REQUEST_REPEATS } from '../constants';
21
23
 
22
24
  export default class ContactApi extends BaseApi {
23
25
  constructor(
@@ -26,6 +28,7 @@ export default class ContactApi extends BaseApi {
26
28
  ) {
27
29
  super(apiCall);
28
30
  }
31
+
29
32
  private readonly apiBasePath = 'contact';
30
33
 
31
34
  /**
@@ -107,40 +110,17 @@ export default class ContactApi extends BaseApi {
107
110
  }
108
111
 
109
112
  /**
110
- * @description Create Contacts
113
+ * @description Create Contacts either in single or in multi batch(es), depending on payload size
111
114
  * @param data
112
115
  */
113
116
  async bulkCreateContacts(data: CreateMultipleContactsDto): Promise<ContactResponseDto[]> {
114
- const batchProcess = await this.apiCall<BatchProcessResponseDto>({
115
- method: 'POST',
116
- route: `${this.apiBasePath}/bulk`,
117
- data,
118
- });
119
-
120
- // make a new request if the previous one is complete
121
- const polling = async (): Promise<BatchProcessResponseDto> => {
122
- try {
123
- const batchProcessState = await this.batchProcessApi.getBatchProcess(batchProcess.id);
117
+ const { contacts, ...rest } = data;
118
+ const contactsMaxSize = REQUEST_PAYLOAD_MAX_BYTES - getObjectSizeInBytes({ ...rest });
119
+ const contactsChunks = chunkArrByMaxSize(contacts, contactsMaxSize);
124
120
 
125
- // value is used because of https://onereach.atlassian.net/browse/CU-562
126
- if (batchProcessState.status === 'pending') {
127
- return polling();
128
- }
129
- return batchProcessState;
130
- } catch (e: any) {
131
- throw new Error(e);
132
- }
133
- };
134
-
135
- const batchProcessResult = await polling();
136
- const contactIds = batchProcessResult.results.flatMap(i => JSON.parse(i));
137
-
138
- return (
139
- await this.listContact({
140
- contactIds,
141
- ...(data.contact_book && { contact_book: data.contact_book }),
142
- })
143
- ).items;
121
+ return contactsChunks.length === 1
122
+ ? this.createContactsInSingleBatch(data)
123
+ : this.createContactsInMultiBatches(contactsChunks, rest);
144
124
  }
145
125
 
146
126
  /**
@@ -205,4 +185,66 @@ export default class ContactApi extends BaseApi {
205
185
  data,
206
186
  });
207
187
  }
188
+
189
+ private async getSafelyContactsList(
190
+ contactIds: string[],
191
+ bookId: string | undefined,
192
+ repeats?: number
193
+ ): Promise<List<ContactResponseDto>> {
194
+ const contacts = await this.listContact({
195
+ contactIds,
196
+ ...(bookId && { contact_book: bookId }),
197
+ }).catch((e) => {
198
+ repeats = repeats || 0;
199
+ if (repeats < FAILED_REQUEST_REPEATS) {
200
+ return this.getSafelyContactsList(contactIds, bookId, repeats + 1);
201
+ }
202
+ throw new Error(e);
203
+ });
204
+ return contacts;
205
+ }
206
+
207
+ private async createContactsInSingleBatch(data: CreateMultipleContactsDto): Promise<ContactResponseDto[]> {
208
+ const batchProcess = await this.apiCall<BatchProcessResponseDto>({
209
+ method: 'POST',
210
+ route: `${this.apiBasePath}/bulk`,
211
+ data,
212
+ });
213
+
214
+ // make a new request if the previous one is complete
215
+ const polling = async (batchId: string, repeats?: number): Promise<BatchProcessResponseDto> => {
216
+ const batchProcessState = await this.batchProcessApi.getBatchProcess(batchId).catch((e) => {
217
+ repeats = repeats || 0;
218
+ if (repeats < FAILED_REQUEST_REPEATS) {
219
+ return polling(batchId, repeats + 1);
220
+ }
221
+ throw new Error(e);
222
+ });
223
+ // value 'pending' is used because of https://onereach.atlassian.net/browse/CU-562
224
+ return batchProcessState.status === 'pending' ? polling(batchId) : batchProcessState;
225
+ };
226
+
227
+ const batchProcessResult = await polling(batchProcess.id);
228
+
229
+ const contactIds = batchProcessResult.results.flatMap<string>(i => JSON.parse(i));
230
+ const importedContacts = await this.getSafelyContactsList(contactIds, data.contact_book);
231
+ return importedContacts.items;
232
+ }
233
+
234
+ private async createContactsInMultiBatches(
235
+ contactsChunks: ContactRequestDto[][],
236
+ data: Omit<CreateMultipleContactsDto, 'contacts'>
237
+ ): Promise<ContactResponseDto[]> {
238
+ const batchPromises = contactsChunks.map((chunkContacts) => async () => this.createContactsInSingleBatch({
239
+ contacts: chunkContacts,
240
+ ...data,
241
+ }));
242
+
243
+ const results: ContactResponseDto[] = [];
244
+ for (const fn of batchPromises) {
245
+ const singleBatchResults = await fn();
246
+ results.push(...singleBatchResults);
247
+ }
248
+ return results;
249
+ }
208
250
  }
package/src/constants.ts CHANGED
@@ -1 +1,5 @@
1
1
  export const CONTACTS_SERVICE_KEY = 'contacts-api';
2
+
3
+ export const REQUEST_PAYLOAD_MAX_BYTES = 128000;
4
+
5
+ export const FAILED_REQUEST_REPEATS = 3;
package/src/utils.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { AdaptedListParams } from './types';
2
1
  import { ListApiParams, OrderParams } from '@onereach/types-contacts-api';
2
+ import { AdaptedListParams } from './types';
3
3
 
4
4
  const propertyToEscape = ['from', 'size', 'orderProperty', 'orderDirection'] as const;
5
5
  type Omitted<T> = Omit<T, typeof propertyToEscape[number]>;
@@ -25,3 +25,22 @@ export const adaptListParams = <T extends AdaptedListParams<{[key: string|number
25
25
  ...(params.size && { take: params.size }),
26
26
  };
27
27
  };
28
+
29
+ export const getObjectSizeInBytes = <T>(obj: T): number => Buffer
30
+ .from(encodeURIComponent(JSON.stringify(obj)))
31
+ .length;
32
+
33
+ export const chunkArrByMaxSize = <T>(arr: T[], maxSize: number): T[][] => {
34
+ const size = getObjectSizeInBytes(arr);
35
+
36
+ if (size < maxSize) {
37
+ return [arr];
38
+ } else if (arr.length === 1) {
39
+ throw new Error('Single array element exceeds maximum size');
40
+ }
41
+ const mid = Math.floor(arr.length / 2);
42
+ return [
43
+ ...chunkArrByMaxSize(arr.slice(0, mid), maxSize),
44
+ ...chunkArrByMaxSize(arr.slice(mid), maxSize),
45
+ ];
46
+ };