@suprsend/node-sdk 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attachment.js +26 -0
- package/dist/bulk_response.js +60 -0
- package/dist/constants.js +40 -0
- package/dist/event.js +154 -85
- package/dist/events_bulk.js +424 -0
- package/dist/index.js +89 -39
- package/dist/request_json/event.json +5 -0
- package/dist/request_json/workflow.json +116 -9
- package/dist/{identity.js → subscriber.js} +195 -50
- package/dist/{identity_helper.js → subscriber_helper.js} +191 -59
- package/dist/subscribers_bulk.js +447 -0
- package/dist/utils.js +210 -1
- package/dist/workflow.js +124 -59
- package/dist/workflows_bulk.js +424 -0
- package/package.json +7 -4
- package/src/attachment.js +12 -0
- package/src/bulk_response.js +35 -0
- package/src/constants.js +28 -0
- package/src/event.js +118 -75
- package/src/events_bulk.js +234 -0
- package/src/index.js +67 -33
- package/src/request_json/event.json +5 -0
- package/src/request_json/workflow.json +116 -9
- package/src/{identity.js → subscriber.js} +118 -34
- package/src/{identity_helper.js → subscriber_helper.js} +196 -53
- package/src/subscribers_bulk.js +235 -0
- package/src/utils.js +136 -0
- package/src/workflow.js +94 -45
- package/src/workflows_bulk.js +234 -0
- package/dist/config.js +0 -13
- package/src/config.js +0 -6
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
14
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
|
+
|
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
+
|
|
18
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
19
|
+
|
|
20
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
21
|
+
|
|
22
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
23
|
+
|
|
24
|
+
var _constants = require("./constants");
|
|
25
|
+
|
|
26
|
+
var _signature = _interopRequireDefault(require("./signature"));
|
|
27
|
+
|
|
28
|
+
var _bulk_response = _interopRequireDefault(require("./bulk_response"));
|
|
29
|
+
|
|
30
|
+
var _subscriber = require("./subscriber");
|
|
31
|
+
|
|
32
|
+
var _lodash = require("lodash");
|
|
33
|
+
|
|
34
|
+
var _axios = _interopRequireDefault(require("axios"));
|
|
35
|
+
|
|
36
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
37
|
+
|
|
38
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
39
|
+
|
|
40
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
41
|
+
|
|
42
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
43
|
+
|
|
44
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
45
|
+
|
|
46
|
+
var BulkSubscribersFactory = /*#__PURE__*/function () {
|
|
47
|
+
function BulkSubscribersFactory(config) {
|
|
48
|
+
(0, _classCallCheck2["default"])(this, BulkSubscribersFactory);
|
|
49
|
+
this.config = config;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
(0, _createClass2["default"])(BulkSubscribersFactory, [{
|
|
53
|
+
key: "new_instance",
|
|
54
|
+
value: function new_instance() {
|
|
55
|
+
return new BulkSubscribers(this.config);
|
|
56
|
+
}
|
|
57
|
+
}]);
|
|
58
|
+
return BulkSubscribersFactory;
|
|
59
|
+
}();
|
|
60
|
+
|
|
61
|
+
exports["default"] = BulkSubscribersFactory;
|
|
62
|
+
|
|
63
|
+
var _BulkSubscribersChunk = /*#__PURE__*/function () {
|
|
64
|
+
function _BulkSubscribersChunk(config) {
|
|
65
|
+
(0, _classCallCheck2["default"])(this, _BulkSubscribersChunk);
|
|
66
|
+
this.config = config;
|
|
67
|
+
this.__chunk = [];
|
|
68
|
+
this.__url = this.__get_url();
|
|
69
|
+
this.__headers = this.__common_headers();
|
|
70
|
+
this.__running_size = 0;
|
|
71
|
+
this.__running_length = 0;
|
|
72
|
+
this.response;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
(0, _createClass2["default"])(_BulkSubscribersChunk, [{
|
|
76
|
+
key: "__get_url",
|
|
77
|
+
value: function __get_url() {
|
|
78
|
+
var url_template = "event/";
|
|
79
|
+
|
|
80
|
+
if (this.config.include_signature_param) {
|
|
81
|
+
if (this.config.auth_enabled) {
|
|
82
|
+
url_template = url_template + "?verify=true";
|
|
83
|
+
} else {
|
|
84
|
+
url_template = url_template + "?verify=false";
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
var url_formatted = "".concat(this.config.base_url).concat(url_template);
|
|
89
|
+
return url_formatted;
|
|
90
|
+
}
|
|
91
|
+
}, {
|
|
92
|
+
key: "__common_headers",
|
|
93
|
+
value: function __common_headers() {
|
|
94
|
+
return {
|
|
95
|
+
"Content-Type": "application/json; charset=utf-8",
|
|
96
|
+
"User-Agent": this.config.user_agent
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}, {
|
|
100
|
+
key: "__dynamic_headers",
|
|
101
|
+
value: function __dynamic_headers() {
|
|
102
|
+
return {
|
|
103
|
+
Date: new Date().toUTCString()
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}, {
|
|
107
|
+
key: "__add_event_to_chunk",
|
|
108
|
+
value: function __add_event_to_chunk(event, event_size) {
|
|
109
|
+
// First add size, then body to reduce effects of race condition
|
|
110
|
+
this.__running_size += event_size;
|
|
111
|
+
|
|
112
|
+
this.__chunk.push(event);
|
|
113
|
+
|
|
114
|
+
this.__running_length += 1;
|
|
115
|
+
}
|
|
116
|
+
}, {
|
|
117
|
+
key: "__check_limit_reached",
|
|
118
|
+
value: function __check_limit_reached() {
|
|
119
|
+
if (this.__running_length >= _constants.MAX_IDENTITY_EVENTS_IN_BULK_API || this.__running_size >= _constants.BODY_MAX_APPARENT_SIZE_IN_BYTES) {
|
|
120
|
+
return true;
|
|
121
|
+
} else {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}, {
|
|
126
|
+
key: "try_to_add_into_chunk",
|
|
127
|
+
value: function try_to_add_into_chunk(event, event_size) {
|
|
128
|
+
if (!event) {
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (this.__check_limit_reached()) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (event_size > _constants.BODY_MAX_APPARENT_SIZE_IN_BYTES) {
|
|
137
|
+
throw new SuprsendError("workflow body (discounting attachment if any) too big - ".concat(event_size, " Bytes, must not cross ").concat(_constants.BODY_MAX_APPARENT_SIZE_IN_BYTES_READABLE));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (this.__running_size + event_size > _constants.BODY_MAX_APPARENT_SIZE_IN_BYTES) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
this.__add_event_to_chunk(event, event_size);
|
|
145
|
+
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
}, {
|
|
149
|
+
key: "trigger",
|
|
150
|
+
value: function () {
|
|
151
|
+
var _trigger = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
152
|
+
var headers, content_text, signature, response, ok_response, error_status;
|
|
153
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
154
|
+
while (1) {
|
|
155
|
+
switch (_context.prev = _context.next) {
|
|
156
|
+
case 0:
|
|
157
|
+
headers = _objectSpread(_objectSpread({}, this.__headers), this.__dynamic_headers());
|
|
158
|
+
content_text = JSON.stringify(this.__chunk); // Based on whether signature is required or not, add Authorization header
|
|
159
|
+
|
|
160
|
+
if (this.config.auth_enabled) {
|
|
161
|
+
signature = (0, _signature["default"])(this.__url, "POST", content_text, headers, this.config.workspace_secret);
|
|
162
|
+
headers["Authorization"] = "".concat(this.config.workspace_key, ":").concat(signature);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
_context.prev = 3;
|
|
166
|
+
_context.next = 6;
|
|
167
|
+
return _axios["default"].post(this.__url, content_text, {
|
|
168
|
+
headers: headers
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
case 6:
|
|
172
|
+
response = _context.sent;
|
|
173
|
+
ok_response = Math.floor(response.status / 100) == 2;
|
|
174
|
+
|
|
175
|
+
if (ok_response) {
|
|
176
|
+
this.response = {
|
|
177
|
+
status: "success",
|
|
178
|
+
status_code: response.status,
|
|
179
|
+
total: this.__chunk.length,
|
|
180
|
+
success: this.__chunk.length,
|
|
181
|
+
failure: 0,
|
|
182
|
+
failed_records: []
|
|
183
|
+
};
|
|
184
|
+
} else {
|
|
185
|
+
this.response = {
|
|
186
|
+
status: "fail",
|
|
187
|
+
status_code: response.status,
|
|
188
|
+
total: this.__chunk.length,
|
|
189
|
+
success: 0,
|
|
190
|
+
failure: this.__chunk.length,
|
|
191
|
+
failed_records: this.__chunk.map(function (item) {
|
|
192
|
+
return {
|
|
193
|
+
record: item,
|
|
194
|
+
error: response.statusText,
|
|
195
|
+
code: response.status
|
|
196
|
+
};
|
|
197
|
+
})
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
_context.next = 15;
|
|
202
|
+
break;
|
|
203
|
+
|
|
204
|
+
case 11:
|
|
205
|
+
_context.prev = 11;
|
|
206
|
+
_context.t0 = _context["catch"](3);
|
|
207
|
+
error_status = _context.t0.status || 500;
|
|
208
|
+
return _context.abrupt("return", {
|
|
209
|
+
status: "fail",
|
|
210
|
+
status_code: error_status,
|
|
211
|
+
message: _context.t0.message,
|
|
212
|
+
total: this.__chunk.length,
|
|
213
|
+
success: 0,
|
|
214
|
+
failure: this.__chunk.length,
|
|
215
|
+
failed_records: this.__chunk.map(function (item) {
|
|
216
|
+
return {
|
|
217
|
+
record: item,
|
|
218
|
+
error: _context.t0.message,
|
|
219
|
+
code: error_status
|
|
220
|
+
};
|
|
221
|
+
})
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
case 15:
|
|
225
|
+
case "end":
|
|
226
|
+
return _context.stop();
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}, _callee, this, [[3, 11]]);
|
|
230
|
+
}));
|
|
231
|
+
|
|
232
|
+
function trigger() {
|
|
233
|
+
return _trigger.apply(this, arguments);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return trigger;
|
|
237
|
+
}()
|
|
238
|
+
}]);
|
|
239
|
+
return _BulkSubscribersChunk;
|
|
240
|
+
}();
|
|
241
|
+
|
|
242
|
+
var BulkSubscribers = /*#__PURE__*/function () {
|
|
243
|
+
function BulkSubscribers(config) {
|
|
244
|
+
(0, _classCallCheck2["default"])(this, BulkSubscribers);
|
|
245
|
+
this.config = config;
|
|
246
|
+
this.__subscribers = [];
|
|
247
|
+
this.__pending_records = [];
|
|
248
|
+
this.chunks = [];
|
|
249
|
+
this.response = new _bulk_response["default"]();
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
(0, _createClass2["default"])(BulkSubscribers, [{
|
|
253
|
+
key: "__validate_subscriber_events",
|
|
254
|
+
value: function __validate_subscriber_events() {
|
|
255
|
+
if (!this.__subscribers) {
|
|
256
|
+
throw new SuprsendError("users list is empty in bulk request");
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
var _iterator = _createForOfIteratorHelper(this.__subscribers),
|
|
260
|
+
_step;
|
|
261
|
+
|
|
262
|
+
try {
|
|
263
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
264
|
+
var sub = _step.value;
|
|
265
|
+
var is_part_of_bulk = true;
|
|
266
|
+
var warnings_list = sub.validate_body(is_part_of_bulk);
|
|
267
|
+
|
|
268
|
+
if (warnings_list) {
|
|
269
|
+
this.response.warnings = [].concat((0, _toConsumableArray2["default"])(this.response.warnings), (0, _toConsumableArray2["default"])(warnings_list));
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
var ev_arr = sub.events();
|
|
273
|
+
|
|
274
|
+
var _iterator2 = _createForOfIteratorHelper(ev_arr),
|
|
275
|
+
_step2;
|
|
276
|
+
|
|
277
|
+
try {
|
|
278
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
279
|
+
var ev = _step2.value;
|
|
280
|
+
|
|
281
|
+
var _sub$validate_event_s = sub.validate_event_size(ev),
|
|
282
|
+
_sub$validate_event_s2 = (0, _slicedToArray2["default"])(_sub$validate_event_s, 2),
|
|
283
|
+
ev_json = _sub$validate_event_s2[0],
|
|
284
|
+
body_size = _sub$validate_event_s2[1];
|
|
285
|
+
|
|
286
|
+
this.__pending_records.push([ev_json, body_size]);
|
|
287
|
+
}
|
|
288
|
+
} catch (err) {
|
|
289
|
+
_iterator2.e(err);
|
|
290
|
+
} finally {
|
|
291
|
+
_iterator2.f();
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
} catch (err) {
|
|
295
|
+
_iterator.e(err);
|
|
296
|
+
} finally {
|
|
297
|
+
_iterator.f();
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}, {
|
|
301
|
+
key: "__chunkify",
|
|
302
|
+
value: function __chunkify() {
|
|
303
|
+
var start_idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
304
|
+
var curr_chunk = new _BulkSubscribersChunk(this.config);
|
|
305
|
+
this.chunks.push(curr_chunk);
|
|
306
|
+
|
|
307
|
+
var entries = this.__pending_records.slice(start_idx).entries();
|
|
308
|
+
|
|
309
|
+
var _iterator3 = _createForOfIteratorHelper(entries),
|
|
310
|
+
_step3;
|
|
311
|
+
|
|
312
|
+
try {
|
|
313
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
314
|
+
var _step3$value = (0, _slicedToArray2["default"])(_step3.value, 2),
|
|
315
|
+
rel_idx = _step3$value[0],
|
|
316
|
+
rec = _step3$value[1];
|
|
317
|
+
|
|
318
|
+
var is_added = curr_chunk.try_to_add_into_chunk(rec[0], rec[1]);
|
|
319
|
+
|
|
320
|
+
if (!is_added) {
|
|
321
|
+
// create chunks from remaining records
|
|
322
|
+
this.__chunkify(start_idx + rel_idx); // Don't forget to break. As current loop must not continue further
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
} catch (err) {
|
|
329
|
+
_iterator3.e(err);
|
|
330
|
+
} finally {
|
|
331
|
+
_iterator3.f();
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}, {
|
|
335
|
+
key: "append",
|
|
336
|
+
value: function append() {
|
|
337
|
+
for (var _len = arguments.length, subscribers = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
338
|
+
subscribers[_key] = arguments[_key];
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
if (!subscribers) {
|
|
342
|
+
throw SuprsendError("users list empty. must pass one or more users");
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
for (var _i = 0, _subscribers = subscribers; _i < _subscribers.length; _i++) {
|
|
346
|
+
var sub = _subscribers[_i];
|
|
347
|
+
|
|
348
|
+
if (!sub) {
|
|
349
|
+
throw new SuprsendError("null/empty element found in bulk instance");
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
if (!(sub instanceof _subscriber.Subscriber)) {
|
|
353
|
+
throw new SuprsendError("element must be an instance of suprsend.Subscriber");
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
var sub_copy = (0, _lodash.cloneDeep)(sub);
|
|
357
|
+
|
|
358
|
+
this.__subscribers.push(sub_copy);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}, {
|
|
362
|
+
key: "trigger",
|
|
363
|
+
value: function trigger() {
|
|
364
|
+
this.save();
|
|
365
|
+
}
|
|
366
|
+
}, {
|
|
367
|
+
key: "save",
|
|
368
|
+
value: function () {
|
|
369
|
+
var _save = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
370
|
+
var _iterator4, _step4, _step4$value, c_idx, ch;
|
|
371
|
+
|
|
372
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
373
|
+
while (1) {
|
|
374
|
+
switch (_context2.prev = _context2.next) {
|
|
375
|
+
case 0:
|
|
376
|
+
this.__validate_subscriber_events();
|
|
377
|
+
|
|
378
|
+
this.__chunkify();
|
|
379
|
+
|
|
380
|
+
_iterator4 = _createForOfIteratorHelper(this.chunks.entries());
|
|
381
|
+
_context2.prev = 3;
|
|
382
|
+
|
|
383
|
+
_iterator4.s();
|
|
384
|
+
|
|
385
|
+
case 5:
|
|
386
|
+
if ((_step4 = _iterator4.n()).done) {
|
|
387
|
+
_context2.next = 13;
|
|
388
|
+
break;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
_step4$value = (0, _slicedToArray2["default"])(_step4.value, 2), c_idx = _step4$value[0], ch = _step4$value[1];
|
|
392
|
+
|
|
393
|
+
if (this.config.req_log_level > 0) {
|
|
394
|
+
console.log("DEBUG: triggering api call for chunk: ".concat(c_idx));
|
|
395
|
+
} // do api call
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
_context2.next = 10;
|
|
399
|
+
return ch.trigger();
|
|
400
|
+
|
|
401
|
+
case 10:
|
|
402
|
+
// merge response
|
|
403
|
+
this.response.merge_chunk_response(ch.response);
|
|
404
|
+
|
|
405
|
+
case 11:
|
|
406
|
+
_context2.next = 5;
|
|
407
|
+
break;
|
|
408
|
+
|
|
409
|
+
case 13:
|
|
410
|
+
_context2.next = 18;
|
|
411
|
+
break;
|
|
412
|
+
|
|
413
|
+
case 15:
|
|
414
|
+
_context2.prev = 15;
|
|
415
|
+
_context2.t0 = _context2["catch"](3);
|
|
416
|
+
|
|
417
|
+
_iterator4.e(_context2.t0);
|
|
418
|
+
|
|
419
|
+
case 18:
|
|
420
|
+
_context2.prev = 18;
|
|
421
|
+
|
|
422
|
+
_iterator4.f();
|
|
423
|
+
|
|
424
|
+
return _context2.finish(18);
|
|
425
|
+
|
|
426
|
+
case 21:
|
|
427
|
+
return _context2.abrupt("return", this.response);
|
|
428
|
+
|
|
429
|
+
case 22:
|
|
430
|
+
case "end":
|
|
431
|
+
return _context2.stop();
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}, _callee2, this, [[3, 15, 18, 21]]);
|
|
435
|
+
}));
|
|
436
|
+
|
|
437
|
+
function save() {
|
|
438
|
+
return _save.apply(this, arguments);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
return save;
|
|
442
|
+
}()
|
|
443
|
+
}]);
|
|
444
|
+
return BulkSubscribers;
|
|
445
|
+
}();
|
|
446
|
+
|
|
447
|
+
module.exports = exports.default;
|
package/dist/utils.js
CHANGED
|
@@ -5,15 +5,20 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.SuprsendError = void 0;
|
|
8
|
+
exports.SuprsendError = exports.SuprsendConfigError = void 0;
|
|
9
9
|
exports.base64Encode = base64Encode;
|
|
10
10
|
exports.epoch_milliseconds = epoch_milliseconds;
|
|
11
|
+
exports.get_apparent_event_size = get_apparent_event_size;
|
|
12
|
+
exports.get_apparent_identity_event_size = get_apparent_identity_event_size;
|
|
13
|
+
exports.get_apparent_workflow_body_size = get_apparent_workflow_body_size;
|
|
11
14
|
exports.has_special_char = void 0;
|
|
12
15
|
exports.is_empty = is_empty;
|
|
13
16
|
exports.is_object = is_object;
|
|
14
17
|
exports.is_string = is_string;
|
|
15
18
|
exports.resolveTilde = resolveTilde;
|
|
16
19
|
exports.uuid = uuid;
|
|
20
|
+
exports.validate_track_event_schema = validate_track_event_schema;
|
|
21
|
+
exports.validate_workflow_body_schema = validate_workflow_body_schema;
|
|
17
22
|
|
|
18
23
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
19
24
|
|
|
@@ -31,12 +36,28 @@ var _os = _interopRequireDefault(require("os"));
|
|
|
31
36
|
|
|
32
37
|
var _fs = _interopRequireDefault(require("fs"));
|
|
33
38
|
|
|
39
|
+
var _jsonschema = require("jsonschema");
|
|
40
|
+
|
|
34
41
|
var _uuid = require("uuid");
|
|
35
42
|
|
|
43
|
+
var _constants = require("./constants");
|
|
44
|
+
|
|
45
|
+
var _lodash = require("lodash");
|
|
46
|
+
|
|
47
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
48
|
+
|
|
49
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
50
|
+
|
|
51
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
52
|
+
|
|
36
53
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
37
54
|
|
|
38
55
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
39
56
|
|
|
57
|
+
var workflow_schema = require("./request_json/workflow.json");
|
|
58
|
+
|
|
59
|
+
var event_schema = require("./request_json/event.json");
|
|
60
|
+
|
|
40
61
|
function base64Encode(file) {
|
|
41
62
|
var body = _fs["default"].readFileSync(file);
|
|
42
63
|
|
|
@@ -74,6 +95,25 @@ var SuprsendError = /*#__PURE__*/function (_Error) {
|
|
|
74
95
|
|
|
75
96
|
exports.SuprsendError = SuprsendError;
|
|
76
97
|
|
|
98
|
+
var SuprsendConfigError = /*#__PURE__*/function (_Error2) {
|
|
99
|
+
(0, _inherits2["default"])(SuprsendConfigError, _Error2);
|
|
100
|
+
|
|
101
|
+
var _super2 = _createSuper(SuprsendConfigError);
|
|
102
|
+
|
|
103
|
+
function SuprsendConfigError(message) {
|
|
104
|
+
var _this2;
|
|
105
|
+
|
|
106
|
+
(0, _classCallCheck2["default"])(this, SuprsendConfigError);
|
|
107
|
+
_this2 = _super2.call(this, message);
|
|
108
|
+
_this2.name = "SuprsendConfigError";
|
|
109
|
+
return _this2;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return SuprsendConfigError;
|
|
113
|
+
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(Error));
|
|
114
|
+
|
|
115
|
+
exports.SuprsendConfigError = SuprsendConfigError;
|
|
116
|
+
|
|
77
117
|
function is_string(value) {
|
|
78
118
|
return typeof value === "string";
|
|
79
119
|
}
|
|
@@ -87,6 +127,8 @@ function is_empty(value) {
|
|
|
87
127
|
return Object.keys(value) <= 0;
|
|
88
128
|
} else if (Array.isArray(value)) {
|
|
89
129
|
return value.length <= 0;
|
|
130
|
+
} else {
|
|
131
|
+
return !value;
|
|
90
132
|
}
|
|
91
133
|
}
|
|
92
134
|
|
|
@@ -104,4 +146,171 @@ function uuid() {
|
|
|
104
146
|
|
|
105
147
|
function epoch_milliseconds() {
|
|
106
148
|
return Math.round(Date.now());
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function validate_workflow_body_schema(body) {
|
|
152
|
+
if (!(body !== null && body !== void 0 && body.data)) {
|
|
153
|
+
body.data = {};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (!(body.data instanceof Object)) {
|
|
157
|
+
throw new SuprsendError("data must be a object");
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
var schema = workflow_schema;
|
|
161
|
+
var v = new _jsonschema.Validator();
|
|
162
|
+
var validated_data = v.validate(body, schema);
|
|
163
|
+
|
|
164
|
+
if (validated_data.valid) {
|
|
165
|
+
return body;
|
|
166
|
+
} else {
|
|
167
|
+
var error_obj = validated_data.errors[0];
|
|
168
|
+
var error_msg = "".concat(error_obj.property, " ").concat(error_obj.message);
|
|
169
|
+
throw new SuprsendError(error_msg);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function validate_track_event_schema(body) {
|
|
174
|
+
if (!(body !== null && body !== void 0 && body.properties)) {
|
|
175
|
+
body.properties = {};
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
var schema = event_schema;
|
|
179
|
+
var v = new _jsonschema.Validator();
|
|
180
|
+
var validated_data = v.validate(body, schema);
|
|
181
|
+
|
|
182
|
+
if (validated_data.valid) {
|
|
183
|
+
return body;
|
|
184
|
+
} else {
|
|
185
|
+
var error_obj = validated_data.errors[0];
|
|
186
|
+
var error_msg = "".concat(error_obj.property, " ").concat(error_obj.message);
|
|
187
|
+
throw new SuprsendError(error_msg);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function get_apparent_workflow_body_size(body, is_part_of_bulk) {
|
|
192
|
+
var extra_bytes = _constants.WORKFLOW_RUNTIME_KEYS_POTENTIAL_SIZE_IN_BYTES;
|
|
193
|
+
var apparent_body = body;
|
|
194
|
+
|
|
195
|
+
if (body !== null && body !== void 0 && body.data["$attachments"]) {
|
|
196
|
+
var num_attachments = body.data["$attachments"].length;
|
|
197
|
+
|
|
198
|
+
if (is_part_of_bulk) {
|
|
199
|
+
if (_constants.ALLOW_ATTACHMENTS_IN_BULK_API) {
|
|
200
|
+
if (_constants.ATTACHMENT_UPLOAD_ENABLED) {
|
|
201
|
+
extra_bytes += num_attachments * _constants.ATTACHMENT_URL_POTENTIAL_SIZE_IN_BYTES;
|
|
202
|
+
apparent_body = (0, _lodash.cloneDeep)(body);
|
|
203
|
+
|
|
204
|
+
var _iterator = _createForOfIteratorHelper(apparent_body["data"]["$attachments"]),
|
|
205
|
+
_step;
|
|
206
|
+
|
|
207
|
+
try {
|
|
208
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
209
|
+
var attach_data = _step.value;
|
|
210
|
+
delete attach_data["data"];
|
|
211
|
+
}
|
|
212
|
+
} catch (err) {
|
|
213
|
+
_iterator.e(err);
|
|
214
|
+
} finally {
|
|
215
|
+
_iterator.f();
|
|
216
|
+
}
|
|
217
|
+
} else {// pass
|
|
218
|
+
}
|
|
219
|
+
} else {
|
|
220
|
+
apparent_body = (0, _lodash.cloneDeep)(body);
|
|
221
|
+
delete apparent_body["data"]["$attachments"];
|
|
222
|
+
}
|
|
223
|
+
} else {
|
|
224
|
+
if (_constants.ATTACHMENT_UPLOAD_ENABLED) {
|
|
225
|
+
extra_bytes += num_attachments * _constants.ATTACHMENT_URL_POTENTIAL_SIZE_IN_BYTES;
|
|
226
|
+
apparent_body = (0, _lodash.cloneDeep)(body);
|
|
227
|
+
|
|
228
|
+
var _iterator2 = _createForOfIteratorHelper(apparent_body["data"]["$attachments"]),
|
|
229
|
+
_step2;
|
|
230
|
+
|
|
231
|
+
try {
|
|
232
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
233
|
+
var _attach_data = _step2.value;
|
|
234
|
+
delete _attach_data["data"];
|
|
235
|
+
}
|
|
236
|
+
} catch (err) {
|
|
237
|
+
_iterator2.e(err);
|
|
238
|
+
} finally {
|
|
239
|
+
_iterator2.f();
|
|
240
|
+
}
|
|
241
|
+
} else {// pass
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
var body_size = JSON.stringify(apparent_body).length;
|
|
247
|
+
var apparent_body_size = body_size + extra_bytes;
|
|
248
|
+
return apparent_body_size;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function get_apparent_event_size(event, is_part_of_bulk) {
|
|
252
|
+
var _event$properties;
|
|
253
|
+
|
|
254
|
+
var extra_bytes = 0;
|
|
255
|
+
var apparent_body = event;
|
|
256
|
+
|
|
257
|
+
if (event !== null && event !== void 0 && (_event$properties = event.properties) !== null && _event$properties !== void 0 && _event$properties["$attachments"]) {
|
|
258
|
+
var num_attachments = event.properties["$attachments"].length;
|
|
259
|
+
|
|
260
|
+
if (is_part_of_bulk) {
|
|
261
|
+
if (_constants.ALLOW_ATTACHMENTS_IN_BULK_API) {
|
|
262
|
+
if (_constants.ATTACHMENT_UPLOAD_ENABLED) {
|
|
263
|
+
extra_bytes += num_attachments * _constants.ATTACHMENT_URL_POTENTIAL_SIZE_IN_BYTES;
|
|
264
|
+
apparent_body = (0, _lodash.cloneDeep)(event);
|
|
265
|
+
|
|
266
|
+
var _iterator3 = _createForOfIteratorHelper(apparent_body["properties"]["$attachments"]),
|
|
267
|
+
_step3;
|
|
268
|
+
|
|
269
|
+
try {
|
|
270
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
271
|
+
var attach_data = _step3.value;
|
|
272
|
+
delete attach_data["data"];
|
|
273
|
+
}
|
|
274
|
+
} catch (err) {
|
|
275
|
+
_iterator3.e(err);
|
|
276
|
+
} finally {
|
|
277
|
+
_iterator3.f();
|
|
278
|
+
}
|
|
279
|
+
} else {// pass
|
|
280
|
+
}
|
|
281
|
+
} else {
|
|
282
|
+
apparent_body = (0, _lodash.cloneDeep)(body);
|
|
283
|
+
delete apparent_body["properties"]["$attachments"];
|
|
284
|
+
}
|
|
285
|
+
} else {
|
|
286
|
+
if (_constants.ATTACHMENT_UPLOAD_ENABLED) {
|
|
287
|
+
extra_bytes += num_attachments * _constants.ATTACHMENT_URL_POTENTIAL_SIZE_IN_BYTES;
|
|
288
|
+
apparent_body = (0, _lodash.cloneDeep)(body);
|
|
289
|
+
|
|
290
|
+
var _iterator4 = _createForOfIteratorHelper(apparent_body["properties"]["$attachments"]),
|
|
291
|
+
_step4;
|
|
292
|
+
|
|
293
|
+
try {
|
|
294
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
295
|
+
var _attach_data2 = _step4.value;
|
|
296
|
+
delete _attach_data2["data"];
|
|
297
|
+
}
|
|
298
|
+
} catch (err) {
|
|
299
|
+
_iterator4.e(err);
|
|
300
|
+
} finally {
|
|
301
|
+
_iterator4.f();
|
|
302
|
+
}
|
|
303
|
+
} else {// pass
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
var body_size = JSON.stringify(apparent_body).length;
|
|
309
|
+
var apparent_size = body_size + extra_bytes;
|
|
310
|
+
return apparent_size;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
function get_apparent_identity_event_size(event) {
|
|
314
|
+
var body_size = JSON.stringify(event);
|
|
315
|
+
return body_size;
|
|
107
316
|
}
|