@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.
- package/dist/cjs/api/contactApi.js +112 -37
- package/dist/cjs/api/contactApi.js.map +1 -1
- package/dist/cjs/constants.js +3 -1
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/utils.js +26 -1
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/api/contactApi.js +67 -21
- package/dist/esm/api/contactApi.js.map +1 -1
- package/dist/esm/constants.js +2 -0
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/utils.js +17 -0
- package/dist/esm/utils.js.map +1 -1
- package/dist/types/api/contactApi.d.ts +6 -3
- package/dist/types/api/contactApi.d.ts.map +1 -1
- package/dist/types/constants.d.ts +2 -0
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/utils.d.ts +3 -1
- package/dist/types/utils.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/api/contactApi.ts +82 -40
- package/src/constants.ts +4 -0
- package/src/utils.ts +20 -1
|
@@ -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
|
|
121
|
-
var _this = this;
|
|
132
|
+
var contacts, rest, contactsMaxSize, contactsChunks;
|
|
122
133
|
return __generator(this, function (_a) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"contactApi.js","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,qCAAoC;AAGpC,kCAAoF;AACpF,0CAAiF;AAEjF;IAAwC,8BAAO;IAC7C,oBACqB,OAAgD,EAC3D,eAAgC;QAF1C,YAIE,kBAAM,OAAO,CAAC,SACf;QAJoB,aAAO,GAAP,OAAO,CAAyC;QAC3D,qBAAe,GAAf,eAAe,CAAiB;QAKzB,iBAAW,GAAG,SAAS,CAAC;;IAFzC,CAAC;IASD,+BAAU,GAAV,UAAW,EAAU,EAAE,MAAwB;QAC7C,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,UAAG,IAAI,CAAC,WAAW,cAAI,EAAE,CAAE;YAClC,MAAM,QAAA;SACP,CAAC,CAAC;IACL,CAAC;IAMD,gCAAW,GAAX,UAAY,MAA2B;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,UAAG,IAAI,CAAC,WAAW,UAAO;YACjC,IAAI,eACC,IAAA,uBAAe,EAAC,MAAM,CAAC,CAC3B;SACF,CAAC,CAAC;IACL,CAAC;IAOD,kCAAa,GAAb,UAAc,EAAU,EAAE,IAAsB;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,UAAG,IAAI,CAAC,WAAW,cAAI,EAAE,CAAE;YAClC,IAAI,MAAA;SACL,CAAC,CAAC;IACL,CAAC;IAOD,kCAAa,GAAb,UAAc,EAAU,EAAE,IAA4B;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,UAAG,IAAI,CAAC,WAAW,cAAI,EAAE,CAAE;YAClC,IAAI,MAAA;SACL,CAAC,CAAC;IACL,CAAC;IAOD,gCAAW,GAAX,UAAY,IAAiC;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,UAAG,IAAI,CAAC,WAAW,CAAE;YAC5B,IAAI,MAAA;SACL,CAAC,CAAC;IACL,CAAC;IAMD,kCAAa,GAAb,UAAc,IAAsB;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,UAAG,IAAI,CAAC,WAAW,CAAE;YAC5B,IAAI,MAAA;SACL,CAAC,CAAC;IACL,CAAC;IAMK,uCAAkB,GAAxB,UAAyB,IAA+B;;;;gBAC9C,QAAQ,GAAc,IAAI,SAAlB,EAAK,IAAI,UAAK,IAAI,EAA5B,YAAqB,CAAF,CAAU;gBAC7B,eAAe,GAAG,qCAAyB,GAAG,IAAA,4BAAoB,eAAM,IAAI,EAAG,CAAC;gBAChF,cAAc,GAAG,IAAA,yBAAiB,EAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;gBAEpE,WAAO,cAAc,CAAC,MAAM,KAAK,CAAC;wBAChC,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC;wBACxC,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,cAAc,EAAE,IAAI,CAAC,EAAC;;;KAC7D;IAOD,kCAAa,GAAb,UAAc,EAAU,EAAE,IAA2B;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,UAAG,IAAI,CAAC,WAAW,cAAI,EAAE,WAAQ;YACxC,IAAI,MAAA;SACL,CAAC,CAAC;IACL,CAAC;IAOD,gCAAW,GAAX,UAAY,EAAU,EAAE,IAA0B;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,UAAG,IAAI,CAAC,WAAW,cAAI,EAAE,UAAO;YACvC,IAAI,MAAA;SACL,CAAC,CAAC;IACL,CAAC;IAMD,sCAAiB,GAAjB,UAAkB,IAA+B;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,UAAG,IAAI,CAAC,WAAW,UAAO;YACjC,IAAI,MAAA;SACL,CAAC,CAAC;IACL,CAAC;IAOD,kCAAa,GAAb,UAAc,EAAU,EAAE,IAA4B;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,UAAG,IAAI,CAAC,WAAW,cAAI,EAAE,UAAO;YACvC,IAAI,MAAA;SACL,CAAC,CAAC;IACL,CAAC;IAMD,wCAAmB,GAAnB,UAAoB,IAAiC;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,UAAG,IAAI,CAAC,WAAW,UAAO;YACjC,IAAI,MAAA;SACL,CAAC,CAAC;IACL,CAAC;IAEa,0CAAqB,GAAnC,UACE,UAAoB,EACpB,MAA0B,EAC1B,OAAgB;;;;;;4BAEC,WAAM,IAAI,CAAC,WAAW,YACrC,UAAU,YAAA,IACP,CAAC,MAAM,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,EACvC,CAAC,KAAK,CAAC,UAAC,CAAC;4BACT,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;4BACvB,IAAI,OAAO,GAAG,kCAAsB,EAAE;gCACpC,OAAO,KAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;6BACpE;4BACD,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;wBACrB,CAAC,CAAC,EAAA;;wBATI,QAAQ,GAAG,SASf;wBACF,WAAO,QAAQ,EAAC;;;;KACjB;IAEa,gDAA2B,GAAzC,UAA0C,IAA+B;;;;;;4BAClD,WAAM,IAAI,CAAC,OAAO,CAA0B;4BAC/D,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,UAAG,IAAI,CAAC,WAAW,UAAO;4BACjC,IAAI,MAAA;yBACL,CAAC,EAAA;;wBAJI,YAAY,GAAG,SAInB;wBAGI,OAAO,GAAG,UAAO,OAAe,EAAE,OAAgB;;;;4CAC5B,WAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAC,CAAC;4CACpF,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;4CACvB,IAAI,OAAO,GAAG,kCAAsB,EAAE;gDACpC,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;6CACtC;4CACD,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;wCACrB,CAAC,CAAC,EAAA;;wCANI,iBAAiB,GAAG,SAMxB;wCAEF,WAAO,iBAAiB,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAC;;;6BACtF,CAAC;wBAEyB,WAAM,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,EAAA;;wBAAnD,kBAAkB,GAAG,SAA8B;wBAEnD,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAS,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAb,CAAa,CAAC,CAAC;wBACzD,WAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,EAAA;;wBAAlF,gBAAgB,GAAG,SAA+D;wBACxF,WAAO,gBAAgB,CAAC,KAAK,EAAC;;;;KAC/B;IAEa,iDAA4B,GAA1C,UACE,cAAqC,EACrC,IAAiD;;;;;;;wBAE3C,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,UAAC,aAAa,IAAK,OAAA;;gCAAY,WAAA,IAAI,CAAC,2BAA2B,YACtG,QAAQ,EAAE,aAAa,IACpB,IAAI,EACP,EAAA;;6BAAA,EAH0D,CAG1D,CAAC,CAAC;wBAEE,OAAO,GAAyB,EAAE,CAAC;8BACX,EAAb,+BAAa;;;6BAAb,CAAA,2BAAa,CAAA;wBAAnB,EAAE;wBACgB,WAAM,EAAE,EAAE,EAAA;;wBAA/B,kBAAkB,GAAG,SAAU;wBACrC,OAAO,CAAC,IAAI,OAAZ,OAAO,EAAS,kBAAkB,EAAE;;;wBAFrB,IAAa,CAAA;;4BAI9B,WAAO,OAAO,EAAC;;;;KAChB;IACH,iBAAC;AAAD,CAAC,AAlOD,CAAwC,iBAAO,GAkO9C"}
|
package/dist/cjs/constants.js
CHANGED
|
@@ -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
|
package/dist/cjs/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"
|
|
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
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"contactApi.js","sourceRoot":"","sources":["../../../src/api/contactApi.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/constants.js
CHANGED
|
@@ -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
|
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;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 {
|
|
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,
|
|
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 +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"}
|
package/dist/types/utils.d.ts
CHANGED
|
@@ -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,
|
|
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.
|
|
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.
|
|
28
|
+
"@or-sdk/base": "^0.28.3"
|
|
29
29
|
}
|
|
30
30
|
}
|
package/src/api/contactApi.ts
CHANGED
|
@@ -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
|
-
|
|
9
|
+
DeleteContactParamsDto,
|
|
12
10
|
LinkContactMultiParamsDto,
|
|
13
|
-
|
|
11
|
+
LinkContactParamsDto,
|
|
12
|
+
MergeContactParamsDto,
|
|
14
13
|
UnlinkContactMultiParamsDto,
|
|
15
|
-
|
|
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
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
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
|
+
};
|