@or-sdk/contacts 3.2.2-beta.1751.0 → 3.2.2-beta.1753.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.
- package/dist/cjs/api/contactApi.js +52 -44
- package/dist/cjs/api/contactApi.js.map +1 -1
- package/dist/cjs/utils.js +11 -1
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/api/contactApi.js +29 -24
- package/dist/esm/api/contactApi.js.map +1 -1
- package/dist/esm/utils.js +9 -0
- package/dist/esm/utils.js.map +1 -1
- package/dist/types/api/contactApi.d.ts +1 -2
- package/dist/types/api/contactApi.d.ts.map +1 -1
- package/dist/types/utils.d.ts +1 -0
- package/dist/types/utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/api/contactApi.ts +40 -38
- package/src/utils.ts +16 -0
|
@@ -72,7 +72,17 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
72
72
|
}
|
|
73
73
|
return t;
|
|
74
74
|
};
|
|
75
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
76
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
77
|
+
if (ar || !(i in from)) {
|
|
78
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
79
|
+
ar[i] = from[i];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
83
|
+
};
|
|
75
84
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
85
|
+
var types_contacts_api_1 = require("@onereach/types-contacts-api");
|
|
76
86
|
var baseApi_1 = require("./baseApi");
|
|
77
87
|
var utils_1 = require("../utils");
|
|
78
88
|
var constants_1 = require("../constants");
|
|
@@ -135,10 +145,11 @@ var ContactApi = (function (_super) {
|
|
|
135
145
|
return __awaiter(this, void 0, void 0, function () {
|
|
136
146
|
var contacts, rest, contactsMaxSize, contactsChunks;
|
|
137
147
|
return __generator(this, function (_a) {
|
|
138
|
-
console.log(data);
|
|
148
|
+
console.log('contacts: ', data.contacts.length);
|
|
139
149
|
contacts = data.contacts, rest = __rest(data, ["contacts"]);
|
|
140
150
|
contactsMaxSize = constants_1.REQUEST_PAYLOAD_MAX_BYTES - (0, utils_1.getObjectSizeInBytes)(__assign({}, rest));
|
|
141
151
|
contactsChunks = (0, utils_1.chunkArrByMaxSize)(contacts, contactsMaxSize);
|
|
152
|
+
console.log('chunks: ', contactsChunks.length);
|
|
142
153
|
return [2, contactsChunks.length === 1
|
|
143
154
|
? this.createContactsInSingleBatch(data)
|
|
144
155
|
: this.createContactsInMultiBatches(contactsChunks, rest)];
|
|
@@ -180,26 +191,6 @@ var ContactApi = (function (_super) {
|
|
|
180
191
|
data: data,
|
|
181
192
|
});
|
|
182
193
|
};
|
|
183
|
-
ContactApi.prototype.getSafelyContactsList = function (contactIds, bookId, repeats) {
|
|
184
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
185
|
-
var contacts;
|
|
186
|
-
var _this = this;
|
|
187
|
-
return __generator(this, function (_a) {
|
|
188
|
-
switch (_a.label) {
|
|
189
|
-
case 0: return [4, this.listContact(__assign({ contactIds: contactIds }, (bookId && { contact_book: bookId }))).catch(function (e) {
|
|
190
|
-
repeats = repeats || 0;
|
|
191
|
-
if (repeats < constants_1.FAILED_REQUEST_REPEATS) {
|
|
192
|
-
return _this.getSafelyContactsList(contactIds, bookId, repeats + 1);
|
|
193
|
-
}
|
|
194
|
-
throw new Error(e);
|
|
195
|
-
})];
|
|
196
|
-
case 1:
|
|
197
|
-
contacts = _a.sent();
|
|
198
|
-
return [2, contacts];
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
};
|
|
203
194
|
ContactApi.prototype.bulkDeleteContacts = function (data) {
|
|
204
195
|
return __awaiter(this, void 0, void 0, function () {
|
|
205
196
|
var batchProcess;
|
|
@@ -220,55 +211,69 @@ var ContactApi = (function (_super) {
|
|
|
220
211
|
});
|
|
221
212
|
});
|
|
222
213
|
};
|
|
223
|
-
ContactApi.prototype.createContactsInSingleBatch = function (data) {
|
|
214
|
+
ContactApi.prototype.createContactsInSingleBatch = function (data, repeats) {
|
|
215
|
+
if (repeats === void 0) { repeats = 0; }
|
|
224
216
|
return __awaiter(this, void 0, void 0, function () {
|
|
225
|
-
var batchProcess, batchProcessResult,
|
|
217
|
+
var s, batchProcess, batchProcessResult, e;
|
|
218
|
+
var _this = this;
|
|
226
219
|
return __generator(this, function (_a) {
|
|
227
220
|
switch (_a.label) {
|
|
228
|
-
case 0:
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
221
|
+
case 0:
|
|
222
|
+
s = performance.now();
|
|
223
|
+
return [4, this.apiCall({
|
|
224
|
+
method: 'POST',
|
|
225
|
+
route: "".concat(this.apiBasePath, "/bulk"),
|
|
226
|
+
data: data,
|
|
227
|
+
})];
|
|
233
228
|
case 1:
|
|
234
229
|
batchProcess = _a.sent();
|
|
235
230
|
return [4, this.polling(batchProcess.id)];
|
|
236
231
|
case 2:
|
|
237
232
|
batchProcessResult = _a.sent();
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
return [
|
|
233
|
+
if (repeats === 2) {
|
|
234
|
+
throw new Error('Can not complete contacts creation batch');
|
|
235
|
+
}
|
|
236
|
+
if (!(batchProcessResult.status === types_contacts_api_1.BatchProcessStatus.failed)) return [3, 4];
|
|
237
|
+
return [4, (0, utils_1.debouncePromise)(function () { return _this.createContactsInSingleBatch(data, repeats + 1); }, 10000)];
|
|
238
|
+
case 3: return [2, _a.sent()];
|
|
239
|
+
case 4:
|
|
240
|
+
e = performance.now();
|
|
241
|
+
console.log('single batch time: ', (e - s) / 1000, 's');
|
|
242
|
+
return [2, batchProcessResult.results.flatMap(function (i) { return JSON.parse(i); })];
|
|
243
243
|
}
|
|
244
244
|
});
|
|
245
245
|
});
|
|
246
246
|
};
|
|
247
247
|
ContactApi.prototype.createContactsInMultiBatches = function (contactsChunks, data) {
|
|
248
248
|
return __awaiter(this, void 0, void 0, function () {
|
|
249
|
-
var batchPromises, results,
|
|
249
|
+
var batchPromises, promisesBatchSize, results, i, s, chunk, chunkResults, e;
|
|
250
250
|
var _this = this;
|
|
251
251
|
return __generator(this, function (_a) {
|
|
252
252
|
switch (_a.label) {
|
|
253
253
|
case 0:
|
|
254
|
-
batchPromises = contactsChunks
|
|
254
|
+
batchPromises = contactsChunks
|
|
255
|
+
.map(function (chunkContacts) { return function () { return __awaiter(_this, void 0, void 0, function () {
|
|
255
256
|
return __generator(this, function (_a) {
|
|
256
257
|
return [2, this.createContactsInSingleBatch(__assign({ contacts: chunkContacts }, data))];
|
|
257
258
|
});
|
|
258
259
|
}); }; });
|
|
260
|
+
promisesBatchSize = 2;
|
|
259
261
|
results = [];
|
|
260
|
-
|
|
262
|
+
i = 0;
|
|
261
263
|
_a.label = 1;
|
|
262
264
|
case 1:
|
|
263
|
-
if (!(
|
|
264
|
-
|
|
265
|
-
|
|
265
|
+
if (!(i < batchPromises.length)) return [3, 4];
|
|
266
|
+
s = performance.now();
|
|
267
|
+
chunk = batchPromises.slice(i, i + promisesBatchSize);
|
|
268
|
+
return [4, Promise.all(chunk.map(function (p) { return p(); }))];
|
|
266
269
|
case 2:
|
|
267
|
-
|
|
268
|
-
results.push.apply(results,
|
|
270
|
+
chunkResults = _a.sent();
|
|
271
|
+
results.push.apply(results, chunkResults.reduce(function (acc, r) { return (__spreadArray(__spreadArray([], acc, true), r, true)); }, []));
|
|
272
|
+
e = performance.now();
|
|
273
|
+
console.log('awaiting ', promisesBatchSize, ' batches: ', (e - s) / 1000, 's');
|
|
269
274
|
_a.label = 3;
|
|
270
275
|
case 3:
|
|
271
|
-
|
|
276
|
+
i += promisesBatchSize;
|
|
272
277
|
return [3, 1];
|
|
273
278
|
case 4: return [2, results];
|
|
274
279
|
}
|
|
@@ -279,11 +284,12 @@ var ContactApi = (function (_super) {
|
|
|
279
284
|
if (repeats === void 0) { repeats = 0; }
|
|
280
285
|
return __awaiter(this, void 0, void 0, function () {
|
|
281
286
|
var batchProcessState, e_1;
|
|
287
|
+
var _this = this;
|
|
282
288
|
return __generator(this, function (_a) {
|
|
283
289
|
switch (_a.label) {
|
|
284
290
|
case 0:
|
|
285
291
|
_a.trys.push([0, 2, , 3]);
|
|
286
|
-
return [4,
|
|
292
|
+
return [4, (0, utils_1.debouncePromise)(function () { return _this.batchProcessApi.getBatchProcess(batchId); }, 1000)];
|
|
287
293
|
case 1:
|
|
288
294
|
batchProcessState = _a.sent();
|
|
289
295
|
return [3, 3];
|
|
@@ -293,7 +299,9 @@ var ContactApi = (function (_super) {
|
|
|
293
299
|
return [2, this.polling(batchId, repeats + 1)];
|
|
294
300
|
}
|
|
295
301
|
throw e_1;
|
|
296
|
-
case 3: return [2, batchProcessState.status ===
|
|
302
|
+
case 3: return [2, batchProcessState.status === types_contacts_api_1.BatchProcessStatus.pending
|
|
303
|
+
? this.polling(batchId)
|
|
304
|
+
: batchProcessState];
|
|
297
305
|
}
|
|
298
306
|
});
|
|
299
307
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contactApi.js","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contactApi.js","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/utils.js
CHANGED
|
@@ -20,7 +20,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
20
20
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
21
21
|
};
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.chunkArrByMaxSize = exports.getObjectSizeInBytes = exports.adaptListParams = void 0;
|
|
23
|
+
exports.debouncePromise = exports.chunkArrByMaxSize = exports.getObjectSizeInBytes = exports.adaptListParams = void 0;
|
|
24
24
|
var propertyToEscape = ['from', 'size', 'orderProperty', 'orderDirection'];
|
|
25
25
|
var adaptListParams = function (params) {
|
|
26
26
|
var toInclude = Object.keys(params).reduce(function (acc, k) {
|
|
@@ -49,4 +49,14 @@ var chunkArrByMaxSize = function (arr, maxSize) {
|
|
|
49
49
|
return __spreadArray(__spreadArray([], (0, exports.chunkArrByMaxSize)(arr.slice(0, mid), maxSize), true), (0, exports.chunkArrByMaxSize)(arr.slice(mid), maxSize), true);
|
|
50
50
|
};
|
|
51
51
|
exports.chunkArrByMaxSize = chunkArrByMaxSize;
|
|
52
|
+
function debouncePromise(caller, delay, reject) {
|
|
53
|
+
var timeout = null;
|
|
54
|
+
return new Promise(function (res) {
|
|
55
|
+
if (timeout) {
|
|
56
|
+
clearTimeout(timeout);
|
|
57
|
+
}
|
|
58
|
+
timeout = setTimeout(function () { return caller().then(function (x) { return res(x); }).catch(function (err) { return reject && reject(err); }); }, delay);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
exports.debouncePromise = debouncePromise;
|
|
52
62
|
//# sourceMappingURL=utils.js.map
|
package/dist/cjs/utils.js.map
CHANGED
|
@@ -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;AAG/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"}
|
|
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;AAG/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;AAEF,SAAgB,eAAe,CAC7B,MAAwB,EACxB,KAAa,EACb,MAAqD;IAErD,IAAI,OAAO,GAA0B,IAAI,CAAC;IAE1C,OAAO,IAAI,OAAO,CAAI,UAAC,GAAG;QACxB,IAAI,OAAO,EAAE;YACX,YAAY,CAAC,OAAO,CAAC,CAAC;SACvB;QACD,OAAO,GAAG,UAAU,CAAC,cAAM,OAAA,MAAM,EAAE,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,GAAG,CAAC,CAAC,CAAC,EAAN,CAAM,CAAC,CAAC,KAAK,CAAC,UAAC,GAAG,IAAK,OAAA,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,EAArB,CAAqB,CAAC,EAAlE,CAAkE,EAAE,KAAK,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;AACL,CAAC;AAbD,0CAaC"}
|
|
@@ -18,8 +18,9 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
18
|
}
|
|
19
19
|
return t;
|
|
20
20
|
};
|
|
21
|
+
import { BatchProcessStatus, } from '@onereach/types-contacts-api';
|
|
21
22
|
import { BaseApi } from './baseApi';
|
|
22
|
-
import { getObjectSizeInBytes, chunkArrByMaxSize } from '../utils';
|
|
23
|
+
import { getObjectSizeInBytes, chunkArrByMaxSize, debouncePromise } from '../utils';
|
|
23
24
|
import { REQUEST_PAYLOAD_MAX_BYTES, FAILED_REQUEST_REPEATS, CONTACTS_DELETE_MAX_AMOUNT } from '../constants';
|
|
24
25
|
export default class ContactApi extends BaseApi {
|
|
25
26
|
constructor(apiCall, batchProcessApi) {
|
|
@@ -75,10 +76,11 @@ export default class ContactApi extends BaseApi {
|
|
|
75
76
|
}
|
|
76
77
|
bulkCreateContacts(data) {
|
|
77
78
|
return __awaiter(this, void 0, void 0, function* () {
|
|
78
|
-
console.log(data);
|
|
79
|
+
console.log('contacts: ', data.contacts.length);
|
|
79
80
|
const { contacts } = data, rest = __rest(data, ["contacts"]);
|
|
80
81
|
const contactsMaxSize = REQUEST_PAYLOAD_MAX_BYTES - getObjectSizeInBytes(Object.assign({}, rest));
|
|
81
82
|
const contactsChunks = chunkArrByMaxSize(contacts, contactsMaxSize);
|
|
83
|
+
console.log('chunks: ', contactsChunks.length);
|
|
82
84
|
return contactsChunks.length === 1
|
|
83
85
|
? this.createContactsInSingleBatch(data)
|
|
84
86
|
: this.createContactsInMultiBatches(contactsChunks, rest);
|
|
@@ -119,18 +121,6 @@ export default class ContactApi extends BaseApi {
|
|
|
119
121
|
data,
|
|
120
122
|
});
|
|
121
123
|
}
|
|
122
|
-
getSafelyContactsList(contactIds, bookId, repeats) {
|
|
123
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
-
const contacts = yield this.listContact(Object.assign({ contactIds }, (bookId && { contact_book: bookId }))).catch((e) => {
|
|
125
|
-
repeats = repeats || 0;
|
|
126
|
-
if (repeats < FAILED_REQUEST_REPEATS) {
|
|
127
|
-
return this.getSafelyContactsList(contactIds, bookId, repeats + 1);
|
|
128
|
-
}
|
|
129
|
-
throw new Error(e);
|
|
130
|
-
});
|
|
131
|
-
return contacts;
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
124
|
bulkDeleteContacts(data) {
|
|
135
125
|
return __awaiter(this, void 0, void 0, function* () {
|
|
136
126
|
const batchProcess = yield this.apiCall({
|
|
@@ -141,28 +131,41 @@ export default class ContactApi extends BaseApi {
|
|
|
141
131
|
yield this.polling(batchProcess.id);
|
|
142
132
|
});
|
|
143
133
|
}
|
|
144
|
-
createContactsInSingleBatch(data) {
|
|
134
|
+
createContactsInSingleBatch(data, repeats = 0) {
|
|
145
135
|
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
+
const s = performance.now();
|
|
146
137
|
const batchProcess = yield this.apiCall({
|
|
147
138
|
method: 'POST',
|
|
148
139
|
route: `${this.apiBasePath}/bulk`,
|
|
149
140
|
data,
|
|
150
141
|
});
|
|
151
142
|
const batchProcessResult = yield this.polling(batchProcess.id);
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
143
|
+
if (repeats === 2) {
|
|
144
|
+
throw new Error('Can not complete contacts creation batch');
|
|
145
|
+
}
|
|
146
|
+
if (batchProcessResult.status === BatchProcessStatus.failed) {
|
|
147
|
+
return yield debouncePromise(() => this.createContactsInSingleBatch(data, repeats + 1), 10000);
|
|
148
|
+
}
|
|
149
|
+
const e = performance.now();
|
|
150
|
+
console.log('single batch time: ', (e - s) / 1000, 's');
|
|
151
|
+
return batchProcessResult.results.flatMap(i => JSON.parse(i));
|
|
155
152
|
});
|
|
156
153
|
}
|
|
157
154
|
createContactsInMultiBatches(contactsChunks, data) {
|
|
158
155
|
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
-
const batchPromises = contactsChunks
|
|
156
|
+
const batchPromises = contactsChunks
|
|
157
|
+
.map((chunkContacts) => () => __awaiter(this, void 0, void 0, function* () {
|
|
160
158
|
return this.createContactsInSingleBatch(Object.assign({ contacts: chunkContacts }, data));
|
|
161
159
|
}));
|
|
160
|
+
const promisesBatchSize = 2;
|
|
162
161
|
const results = [];
|
|
163
|
-
for (
|
|
164
|
-
const
|
|
165
|
-
|
|
162
|
+
for (let i = 0; i < batchPromises.length; i += promisesBatchSize) {
|
|
163
|
+
const s = performance.now();
|
|
164
|
+
const chunk = batchPromises.slice(i, i + promisesBatchSize);
|
|
165
|
+
const chunkResults = yield Promise.all(chunk.map((p) => p()));
|
|
166
|
+
results.push(...chunkResults.reduce((acc, r) => ([...acc, ...r]), []));
|
|
167
|
+
const e = performance.now();
|
|
168
|
+
console.log('awaiting ', promisesBatchSize, ' batches: ', (e - s) / 1000, 's');
|
|
166
169
|
}
|
|
167
170
|
return results;
|
|
168
171
|
});
|
|
@@ -171,7 +174,7 @@ export default class ContactApi extends BaseApi {
|
|
|
171
174
|
return __awaiter(this, void 0, void 0, function* () {
|
|
172
175
|
let batchProcessState;
|
|
173
176
|
try {
|
|
174
|
-
batchProcessState = yield this.batchProcessApi.getBatchProcess(batchId);
|
|
177
|
+
batchProcessState = yield debouncePromise(() => this.batchProcessApi.getBatchProcess(batchId), 1000);
|
|
175
178
|
}
|
|
176
179
|
catch (e) {
|
|
177
180
|
if (repeats < FAILED_REQUEST_REPEATS) {
|
|
@@ -179,7 +182,9 @@ export default class ContactApi extends BaseApi {
|
|
|
179
182
|
}
|
|
180
183
|
throw e;
|
|
181
184
|
}
|
|
182
|
-
return batchProcessState.status ===
|
|
185
|
+
return batchProcessState.status === BatchProcessStatus.pending
|
|
186
|
+
? this.polling(batchId)
|
|
187
|
+
: batchProcessState;
|
|
183
188
|
});
|
|
184
189
|
}
|
|
185
190
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contactApi.js","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"contactApi.js","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/utils.js
CHANGED
|
@@ -26,4 +26,13 @@ export const chunkArrByMaxSize = (arr, maxSize) => {
|
|
|
26
26
|
...chunkArrByMaxSize(arr.slice(mid), maxSize),
|
|
27
27
|
];
|
|
28
28
|
};
|
|
29
|
+
export function debouncePromise(caller, delay, reject) {
|
|
30
|
+
let timeout = null;
|
|
31
|
+
return new Promise((res) => {
|
|
32
|
+
if (timeout) {
|
|
33
|
+
clearTimeout(timeout);
|
|
34
|
+
}
|
|
35
|
+
timeout = setTimeout(() => caller().then((x) => res(x)).catch((err) => reject && reject(err)), delay);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
29
38
|
//# sourceMappingURL=utils.js.map
|
package/dist/esm/utils.js.map
CHANGED
|
@@ -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;AAGtF,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
|
+
{"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;AAGtF,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;AAEF,MAAM,UAAU,eAAe,CAC7B,MAAwB,EACxB,KAAa,EACb,MAAqD;IAErD,IAAI,OAAO,GAA0B,IAAI,CAAC;IAE1C,OAAO,IAAI,OAAO,CAAI,CAAC,GAAG,EAAE,EAAE;QAC5B,IAAI,OAAO,EAAE;YACX,YAAY,CAAC,OAAO,CAAC,CAAC;SACvB;QACD,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -13,13 +13,12 @@ export default class ContactApi extends BaseApi {
|
|
|
13
13
|
deleteContact(id: string, data: DeleteContactParamsDto): Promise<void>;
|
|
14
14
|
deleteMulti(data: DeleteContactMultiParamsDto): Promise<void>;
|
|
15
15
|
createContact(data: CreateContactDto): Promise<ContactResponseDto>;
|
|
16
|
-
bulkCreateContacts(data: CreateMultipleContactsDto): Promise<
|
|
16
|
+
bulkCreateContacts(data: CreateMultipleContactsDto): Promise<string[]>;
|
|
17
17
|
mergeContacts(id: string, data: MergeContactParamsDto): Promise<ContactResponseDto>;
|
|
18
18
|
linkContact(id: string, data: LinkContactParamsDto): Promise<void>;
|
|
19
19
|
linkContactsMulti(data: LinkContactMultiParamsDto): Promise<void>;
|
|
20
20
|
unlinkContact(id: string, data: UnlinkContactParamsDto): Promise<void>;
|
|
21
21
|
unlinkContactsMulti(data: UnlinkContactMultiParamsDto): Promise<void>;
|
|
22
|
-
private getSafelyContactsList;
|
|
23
22
|
private bulkDeleteContacts;
|
|
24
23
|
private createContactsInSingleBatch;
|
|
25
24
|
private createContactsInMultiBatches;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contactApi.d.ts","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"contactApi.d.ts","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,gBAAgB,EAEhB,kBAAkB,EAClB,gBAAgB,EAChB,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,gBAAgB,EAChB,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;AAIhD,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,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAa3E,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;IAe7D,aAAa,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAW5D,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmB5E,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,kBAAkB;YASlB,2BAA2B;YAoB3B,4BAA4B;YA6B5B,OAAO;CAetB"}
|
package/dist/types/utils.d.ts
CHANGED
|
@@ -8,5 +8,6 @@ export declare const adaptListParams: <T extends AdaptedListParams<{
|
|
|
8
8
|
}>>(params: T) => Omitted<T> & Partial<ListApiParams & OrderParams>;
|
|
9
9
|
export declare const getObjectSizeInBytes: <T>(obj: T) => number;
|
|
10
10
|
export declare const chunkArrByMaxSize: <T>(arr: T[], maxSize: number) => T[][];
|
|
11
|
+
export declare function debouncePromise<T>(caller: () => Promise<T>, delay: number, reject?: (value: string | T | PromiseLike<T>) => void): Promise<T>;
|
|
11
12
|
export {};
|
|
12
13
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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;AAE3D,eAAO,MAAM,eAAe;;;mEAmB3B,CAAC;AAEF,eAAO,MAAM,oBAAoB,iBAAgB,MAExC,CAAC;AAEV,eAAO,MAAM,iBAAiB,yBAA0B,MAAM,UAa7D,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;AAE3D,eAAO,MAAM,eAAe;;;mEAmB3B,CAAC;AAEF,eAAO,MAAM,oBAAoB,iBAAgB,MAExC,CAAC;AAEV,eAAO,MAAM,iBAAiB,yBAA0B,MAAM,UAa7D,CAAC;AAEF,wBAAgB,eAAe,CAAC,CAAC,EAC/B,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,GACpD,OAAO,CAAC,CAAC,CAAC,CASZ"}
|
package/package.json
CHANGED
package/src/api/contactApi.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BatchProcessResponseDto,
|
|
3
|
+
BatchProcessStatus,
|
|
3
4
|
ContactParamsDto,
|
|
4
5
|
ContactRequestDto,
|
|
5
6
|
ContactResponseDto,
|
|
@@ -18,7 +19,7 @@ import {
|
|
|
18
19
|
import { CalApiParams, List } from '@or-sdk/base';
|
|
19
20
|
import { BaseApi } from './baseApi';
|
|
20
21
|
import BatchProcessApi from './batchProcessApi';
|
|
21
|
-
import { getObjectSizeInBytes, chunkArrByMaxSize } from '../utils';
|
|
22
|
+
import { getObjectSizeInBytes, chunkArrByMaxSize, debouncePromise } from '../utils';
|
|
22
23
|
import { REQUEST_PAYLOAD_MAX_BYTES, FAILED_REQUEST_REPEATS, CONTACTS_DELETE_MAX_AMOUNT } from '../constants';
|
|
23
24
|
|
|
24
25
|
export default class ContactApi extends BaseApi {
|
|
@@ -112,14 +113,15 @@ export default class ContactApi extends BaseApi {
|
|
|
112
113
|
|
|
113
114
|
/**
|
|
114
115
|
* @description Create Contacts either in single or in multi batch(es), depending on payload size
|
|
115
|
-
* @param data
|
|
116
116
|
*/
|
|
117
|
-
async bulkCreateContacts(data: CreateMultipleContactsDto): Promise<
|
|
117
|
+
async bulkCreateContacts(data: CreateMultipleContactsDto): Promise<string[]> {
|
|
118
118
|
// eslint-disable-next-line no-console
|
|
119
|
-
console.log(data);
|
|
119
|
+
console.log('contacts: ', data.contacts.length);
|
|
120
120
|
const { contacts, ...rest } = data;
|
|
121
121
|
const contactsMaxSize = REQUEST_PAYLOAD_MAX_BYTES - getObjectSizeInBytes({ ...rest });
|
|
122
122
|
const contactsChunks = chunkArrByMaxSize(contacts, contactsMaxSize);
|
|
123
|
+
// eslint-disable-next-line no-console
|
|
124
|
+
console.log('chunks: ', contactsChunks.length);
|
|
123
125
|
|
|
124
126
|
return contactsChunks.length === 1
|
|
125
127
|
? this.createContactsInSingleBatch(data)
|
|
@@ -189,24 +191,6 @@ export default class ContactApi extends BaseApi {
|
|
|
189
191
|
});
|
|
190
192
|
}
|
|
191
193
|
|
|
192
|
-
private async getSafelyContactsList(
|
|
193
|
-
contactIds: string[],
|
|
194
|
-
bookId: string | undefined,
|
|
195
|
-
repeats?: number
|
|
196
|
-
): Promise<List<ContactResponseDto>> {
|
|
197
|
-
const contacts = await this.listContact({
|
|
198
|
-
contactIds,
|
|
199
|
-
...(bookId && { contact_book: bookId }),
|
|
200
|
-
}).catch((e) => {
|
|
201
|
-
repeats = repeats || 0;
|
|
202
|
-
if (repeats < FAILED_REQUEST_REPEATS) {
|
|
203
|
-
return this.getSafelyContactsList(contactIds, bookId, repeats + 1);
|
|
204
|
-
}
|
|
205
|
-
throw new Error(e);
|
|
206
|
-
});
|
|
207
|
-
return contacts;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
194
|
private async bulkDeleteContacts(data: DeleteContactMultiParamsDto): Promise<void> {
|
|
211
195
|
const batchProcess = await this.apiCall<BatchProcessResponseDto>({
|
|
212
196
|
method: 'DELETE',
|
|
@@ -216,32 +200,49 @@ export default class ContactApi extends BaseApi {
|
|
|
216
200
|
await this.polling(batchProcess.id);
|
|
217
201
|
}
|
|
218
202
|
|
|
219
|
-
private async createContactsInSingleBatch(data: CreateMultipleContactsDto): Promise<
|
|
203
|
+
private async createContactsInSingleBatch(data: CreateMultipleContactsDto, repeats = 0): Promise<string[]> {
|
|
204
|
+
const s = performance.now();
|
|
220
205
|
const batchProcess = await this.apiCall<BatchProcessResponseDto>({
|
|
221
206
|
method: 'POST',
|
|
222
207
|
route: `${this.apiBasePath}/bulk`,
|
|
223
208
|
data,
|
|
224
209
|
});
|
|
225
210
|
const batchProcessResult = await this.polling(batchProcess.id);
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
211
|
+
if (repeats === 2) {
|
|
212
|
+
throw new Error('Can not complete contacts creation batch');
|
|
213
|
+
}
|
|
214
|
+
if (batchProcessResult.status === BatchProcessStatus.failed) {
|
|
215
|
+
return await debouncePromise(() => this.createContactsInSingleBatch(data, repeats + 1), 10000);
|
|
216
|
+
}
|
|
217
|
+
const e = performance.now();
|
|
218
|
+
// eslint-disable-next-line no-console
|
|
219
|
+
console.log('single batch time: ', (e - s) / 1000, 's');
|
|
220
|
+
return batchProcessResult.results.flatMap<string>(i => JSON.parse(i));
|
|
229
221
|
}
|
|
230
222
|
|
|
231
223
|
private async createContactsInMultiBatches(
|
|
232
224
|
contactsChunks: ContactRequestDto[][],
|
|
233
225
|
data: Omit<CreateMultipleContactsDto, 'contacts'>
|
|
234
|
-
): Promise<
|
|
235
|
-
const batchPromises = contactsChunks
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
226
|
+
): Promise<string[]> {
|
|
227
|
+
const batchPromises = contactsChunks
|
|
228
|
+
.map((chunkContacts) => async () => this.createContactsInSingleBatch({
|
|
229
|
+
contacts: chunkContacts,
|
|
230
|
+
...data,
|
|
231
|
+
}));
|
|
232
|
+
|
|
233
|
+
const promisesBatchSize = 2;
|
|
234
|
+
const results: string[] = [];
|
|
239
235
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
const
|
|
243
|
-
|
|
236
|
+
for (let i = 0;i < batchPromises.length;i += promisesBatchSize) {
|
|
237
|
+
const s = performance.now();
|
|
238
|
+
const chunk = batchPromises.slice(i, i + promisesBatchSize);
|
|
239
|
+
const chunkResults = await Promise.all(chunk.map((p) => p()));
|
|
240
|
+
results.push(...chunkResults.reduce((acc, r) => ([...acc, ...r]), []));
|
|
241
|
+
const e = performance.now();
|
|
242
|
+
// eslint-disable-next-line no-console
|
|
243
|
+
console.log('awaiting ', promisesBatchSize, ' batches: ', (e - s) / 1000, 's');
|
|
244
244
|
}
|
|
245
|
+
|
|
245
246
|
return results;
|
|
246
247
|
}
|
|
247
248
|
|
|
@@ -251,7 +252,7 @@ export default class ContactApi extends BaseApi {
|
|
|
251
252
|
private async polling(batchId: string, repeats = 0): Promise<BatchProcessResponseDto> {
|
|
252
253
|
let batchProcessState: BatchProcessResponseDto;
|
|
253
254
|
try {
|
|
254
|
-
batchProcessState = await this.batchProcessApi.getBatchProcess(batchId);
|
|
255
|
+
batchProcessState = await debouncePromise(() => this.batchProcessApi.getBatchProcess(batchId), 1000);
|
|
255
256
|
} catch (e) {
|
|
256
257
|
if (repeats < FAILED_REQUEST_REPEATS) {
|
|
257
258
|
return this.polling(batchId, repeats + 1);
|
|
@@ -259,7 +260,8 @@ export default class ContactApi extends BaseApi {
|
|
|
259
260
|
throw e;
|
|
260
261
|
}
|
|
261
262
|
|
|
262
|
-
|
|
263
|
-
|
|
263
|
+
return batchProcessState.status === BatchProcessStatus.pending
|
|
264
|
+
? this.polling(batchId)
|
|
265
|
+
: batchProcessState;
|
|
264
266
|
}
|
|
265
267
|
}
|
package/src/utils.ts
CHANGED
|
@@ -43,3 +43,19 @@ export const chunkArrByMaxSize = <T>(arr: T[], maxSize: number): T[][] => {
|
|
|
43
43
|
...chunkArrByMaxSize(arr.slice(mid), maxSize),
|
|
44
44
|
];
|
|
45
45
|
};
|
|
46
|
+
|
|
47
|
+
export function debouncePromise<T>(
|
|
48
|
+
caller: () => Promise<T>,
|
|
49
|
+
delay: number,
|
|
50
|
+
reject?: (value: string | T | PromiseLike<T>) => void
|
|
51
|
+
): Promise<T> {
|
|
52
|
+
let timeout: NodeJS.Timeout | null = null;
|
|
53
|
+
|
|
54
|
+
return new Promise<T>((res) => {
|
|
55
|
+
if (timeout) {
|
|
56
|
+
clearTimeout(timeout);
|
|
57
|
+
}
|
|
58
|
+
timeout = setTimeout(() => caller().then((x) => res(x)).catch((err) => reject && reject(err)), delay);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|