@tellescope/sdk 1.76.0 → 1.78.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.
@@ -124,7 +124,7 @@ var voidResult = function () { return true; };
124
124
  var passOnVoid = { shouldError: false, onResult: voidResult };
125
125
  // const isNull = (d: any) => d === null
126
126
  var setup_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
127
- var uInfo, originalAuthToken;
127
+ var badSDK, badEnduserSDK, uInfo, originalAuthToken;
128
128
  return __generator(this, function (_a) {
129
129
  switch (_a.label) {
130
130
  case 0:
@@ -135,89 +135,142 @@ var setup_tests = function () { return __awaiter(void 0, void 0, void 0, functio
135
135
  return [4 /*yield*/, async_test('test_authenticated', sdk.test_authenticated, { expectedResult: 'Authenticated!' })];
136
136
  case 2:
137
137
  _a.sent();
138
- return [4 /*yield*/, async_test('test_authenticated (with API Key)', (new Session({ host: host, apiKey: '3n5q0SCBT_iUvZz-b9BJtX7o7HQUVJ9v132PgHJNJsg.' /* local test key */ })).test_authenticated, { expectedResult: 'Authenticated!' })];
138
+ return [4 /*yield*/, async_test('test_authenticated (with API Key)', (new Session({ host: host, apiKey: '3n5q0SCBT_iUvZz-b9BJtX7o7HQUVJ9v132PgHJNJsg.' /* local test key */ })).test_authenticated, { expectedResult: 'Authenticated!' })
139
+ // login rate limit tests
140
+ ];
139
141
  case 3:
140
142
  _a.sent();
141
- return [4 /*yield*/, sdk.logout()];
143
+ badSDK = new Session({ host: host });
144
+ return [4 /*yield*/, badSDK.authenticate('bademail@tellescope.com', 'badpassword').catch(console.error)];
142
145
  case 4:
143
146
  _a.sent();
144
- return [4 /*yield*/, async_test('test_authenticated - (logout invalidates jwt)', sdk.test_authenticated, { shouldError: true, onError: function (e) { return e === 'Unauthenticated'; } })];
147
+ return [4 /*yield*/, badSDK.authenticate('bademail@tellescope.com', 'badpassword').catch(console.error)];
145
148
  case 5:
146
149
  _a.sent();
147
- return [4 /*yield*/, sdk.authenticate(email, password)];
150
+ return [4 /*yield*/, badSDK.authenticate('bademail@tellescope.com', 'badpassword').catch(console.error)];
148
151
  case 6:
149
152
  _a.sent();
150
- return [4 /*yield*/, async_test('test_authenticated (re-authenticated)', sdk.test_authenticated, { expectedResult: 'Authenticated!' })];
153
+ return [4 /*yield*/, badSDK.authenticate('bademail@tellescope.com', 'badpassword').catch(console.error)];
151
154
  case 7:
155
+ _a.sent();
156
+ return [4 /*yield*/, badSDK.authenticate('bademail@tellescope.com', 'badpassword').catch(console.error)];
157
+ case 8:
158
+ _a.sent();
159
+ return [4 /*yield*/, async_test('login rate limited', function () { return badSDK.authenticate('bademail@tellescope.com', 'badpassword@tellescope.com'); }, { shouldError: true, onError: function (e) { return e.message === 'Too many login attempts'; } })];
160
+ case 9:
161
+ _a.sent();
162
+ return [4 /*yield*/, async_test('login not rate limited for other user', function () { return sdk.authenticate(email, password); }, passOnAnyResult)];
163
+ case 10:
164
+ _a.sent();
165
+ badEnduserSDK = new EnduserSession({ host: host, businessId: businessId });
166
+ return [4 /*yield*/, badEnduserSDK.authenticate('bademail@tellescope.com', 'badpassword').catch(console.error)];
167
+ case 11:
168
+ _a.sent();
169
+ return [4 /*yield*/, badEnduserSDK.authenticate('bademail@tellescope.com', 'badpassword').catch(console.error)];
170
+ case 12:
171
+ _a.sent();
172
+ return [4 /*yield*/, badEnduserSDK.authenticate('bademail@tellescope.com', 'badpassword').catch(console.error)];
173
+ case 13:
174
+ _a.sent();
175
+ return [4 /*yield*/, badEnduserSDK.authenticate('bademail@tellescope.com', 'badpassword').catch(console.error)];
176
+ case 14:
177
+ _a.sent();
178
+ return [4 /*yield*/, badEnduserSDK.authenticate('bademail@tellescope.com', 'badpassword').catch(console.error)];
179
+ case 15:
180
+ _a.sent();
181
+ return [4 /*yield*/, async_test('login rate limited', function () { return badEnduserSDK.authenticate('bademail@tellescope.com', 'badpassword@tellescope.com'); }, { shouldError: true, onError: function (e) { return e.message === 'Too many login attempts'; } })];
182
+ case 16:
183
+ _a.sent();
184
+ return [4 /*yield*/, async_test('login not rate limited for other enduser', function () { return badEnduserSDK.authenticate('otherbademail@tellescope.com', 'badpassword@tellescope.com'); }, { shouldError: true, onError: function (e) { return e.message !== 'Too many login attempts'; } })
185
+ // prevent additional login throttling
186
+ ];
187
+ case 17:
188
+ _a.sent();
189
+ // prevent additional login throttling
190
+ return [4 /*yield*/, async_test('reset_db', function () { return sdk.reset_db(); }, passOnVoid)];
191
+ case 18:
192
+ // prevent additional login throttling
193
+ _a.sent();
194
+ return [4 /*yield*/, sdk.logout()];
195
+ case 19:
196
+ _a.sent();
197
+ return [4 /*yield*/, async_test('test_authenticated - (logout invalidates jwt)', sdk.test_authenticated, { shouldError: true, onError: function (e) { return e === 'Unauthenticated'; } })];
198
+ case 20:
199
+ _a.sent();
200
+ return [4 /*yield*/, sdk.authenticate(email, password)];
201
+ case 21:
202
+ _a.sent();
203
+ return [4 /*yield*/, async_test('test_authenticated (re-authenticated)', sdk.test_authenticated, { expectedResult: 'Authenticated!' })];
204
+ case 22:
152
205
  _a.sent();
153
206
  uInfo = sdk.userInfo;
154
207
  originalAuthToken = sdk.authToken;
155
208
  return [4 /*yield*/, sdk.refresh_session()];
156
- case 8:
209
+ case 23:
157
210
  _a.sent();
158
211
  assert(uInfo.id === sdk.userInfo.id, 'userInfo mismatch', 'userInfo id preserved after refresh');
159
212
  assert(!!originalAuthToken && !!sdk.authToken && sdk.authToken !== originalAuthToken, 'same authToken after refresh', 'authToken refresh');
160
213
  return [4 /*yield*/, async_test('role change by non-admin prevented (admin)', function () { return sdkNonAdmin.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: ['Admin'] }, { replaceObjectFields: true }); }, handleAnyError)];
161
- case 9:
214
+ case 24:
162
215
  _a.sent();
163
216
  return [4 /*yield*/, async_test('role change by non-admin prevented (non-admin)', function () { return sdkNonAdmin.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: ['Not Admin'] }, { replaceObjectFields: true }); }, handleAnyError)
164
217
  // would assign default non-admin role, which could grant additional permissions than currently-defined non-admin role, should block
165
218
  ];
166
- case 10:
219
+ case 25:
167
220
  _a.sent();
168
221
  // would assign default non-admin role, which could grant additional permissions than currently-defined non-admin role, should block
169
222
  return [4 /*yield*/, async_test('role change by non-admin prevented (empty)', function () { return sdkNonAdmin.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [] }, { replaceObjectFields: true }); }, handleAnyError)
170
223
  // ensure that going to "Non-Admin" triggers a role change
171
224
  ];
172
- case 11:
225
+ case 26:
173
226
  // would assign default non-admin role, which could grant additional permissions than currently-defined non-admin role, should block
174
227
  _a.sent();
175
228
  // ensure that going to "Non-Admin" triggers a role change
176
229
  return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: ['Test'] }, { replaceObjectFields: true })];
177
- case 12:
230
+ case 27:
178
231
  // ensure that going to "Non-Admin" triggers a role change
179
232
  _a.sent();
180
233
  return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)];
181
- case 13:
234
+ case 28:
182
235
  _a.sent();
183
236
  return [4 /*yield*/, async_test('non admin authenticated', sdkNonAdmin.test_authenticated, { expectedResult: 'Authenticated!' })
184
237
  // reset nonAdmin role to a default non-admin
185
238
  ];
186
- case 14:
239
+ case 29:
187
240
  _a.sent();
188
241
  // reset nonAdmin role to a default non-admin
189
242
  return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: ['Non-Admin'] }, { replaceObjectFields: true })];
190
- case 15:
243
+ case 30:
191
244
  // reset nonAdmin role to a default non-admin
192
245
  _a.sent();
193
246
  // should be unauthenticated due to role change
194
247
  return [4 /*yield*/, wait(undefined, 100)];
195
- case 16:
248
+ case 31:
196
249
  // reset nonAdmin role to a default non-admin
197
250
  // should be unauthenticated due to role change
198
251
  _a.sent();
199
252
  return [4 /*yield*/, async_test('role change causes deauthentication', sdkNonAdmin.test_authenticated, handleAnyError)
200
253
  // reauthenticate
201
254
  ];
202
- case 17:
255
+ case 32:
203
256
  _a.sent();
204
257
  // reauthenticate
205
258
  return [4 /*yield*/, wait(undefined, 1000)];
206
- case 18:
259
+ case 33:
207
260
  // reauthenticate
208
261
  _a.sent();
209
262
  return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)
210
263
  // may do some stuff in background after returning
211
264
  ];
212
- case 19:
265
+ case 34:
213
266
  _a.sent();
214
267
  // may do some stuff in background after returning
215
268
  return [4 /*yield*/, async_test('reset_db', function () { return sdk.reset_db(); }, passOnVoid)];
216
- case 20:
269
+ case 35:
217
270
  // may do some stuff in background after returning
218
271
  _a.sent();
219
272
  return [4 /*yield*/, wait(undefined, 250)];
220
- case 21:
273
+ case 36:
221
274
  _a.sent();
222
275
  return [2 /*return*/];
223
276
  }
@@ -412,64 +465,73 @@ var sub_organization_enduser_tests = function () { return __awaiter(void 0, void
412
465
  return [4 /*yield*/, enduserSDK.register({ email: 'root@tellescope.com', password: password })];
413
466
  case 1:
414
467
  _d.sent();
415
- return [4 /*yield*/, subEnduserSDK.register({ email: 'sub@tellescope.com', password: password })];
468
+ return [4 /*yield*/, wait(undefined, 1000)]; // avoid rate limiting error
416
469
  case 2:
470
+ _d.sent(); // avoid rate limiting error
471
+ return [4 /*yield*/, subEnduserSDK.register({ email: 'sub@tellescope.com', password: password })];
472
+ case 3:
417
473
  _d.sent();
474
+ return [4 /*yield*/, wait(undefined, 1000)]; // avoid rate limiting error
475
+ case 4:
476
+ _d.sent(); // avoid rate limiting error
418
477
  return [4 /*yield*/, enduserSDK.authenticate('root@tellescope.com', password)];
419
- case 3:
478
+ case 5:
420
479
  _d.sent();
480
+ return [4 /*yield*/, wait(undefined, 1000)]; // avoid rate limiting error
481
+ case 6:
482
+ _d.sent(); // avoid rate limiting error
421
483
  return [4 /*yield*/, subEnduserSDK.authenticate('sub@tellescope.com', password)];
422
- case 4:
484
+ case 7:
423
485
  _d.sent();
424
486
  assert(!((_a = enduserSDK.userInfo.organizationIds) === null || _a === void 0 ? void 0 : _a.length), 'bad root organizationIds', 'root auth org ids');
425
487
  assert(((_b = subEnduserSDK.userInfo.organizationIds) === null || _b === void 0 ? void 0 : _b.length) === 1, 'bad sub organizationIds', 'sub auth org ids');
426
488
  return [4 /*yield*/, enduserSDK.api.tickets.createOne({ title: 'root', enduserId: enduserSDK.userInfo.id })];
427
- case 5:
489
+ case 8:
428
490
  rootTicket = _d.sent();
429
491
  return [4 /*yield*/, async_test("root get root", function () { return sdk.api.endusers.getOne(enduserSDK.userInfo.id); }, passOnAnyResult)];
430
- case 6:
492
+ case 9:
431
493
  _d.sent();
432
494
  return [4 /*yield*/, async_test("sub get root error", function () { return sdkSub.api.endusers.getOne(enduserSDK.userInfo.id); }, handleAnyError)];
433
- case 7:
495
+ case 10:
434
496
  _d.sent();
435
497
  return [4 /*yield*/, async_test("root get sub", function () { return sdk.api.endusers.getOne(subEnduserSDK.userInfo.id); }, passOnAnyResult)];
436
- case 8:
498
+ case 11:
437
499
  _d.sent();
438
500
  return [4 /*yield*/, async_test("sub get sub", function () { return sdkSub.api.endusers.getOne(subEnduserSDK.userInfo.id); }, passOnAnyResult)];
439
- case 9:
501
+ case 12:
440
502
  _d.sent();
441
503
  return [4 /*yield*/, async_test("root get root ticket", function () { return sdk.api.tickets.getOne(rootTicket.id); }, passOnAnyResult)];
442
- case 10:
504
+ case 13:
443
505
  _d.sent();
444
506
  return [4 /*yield*/, async_test("sub get root ticket error", function () { return sdkSub.api.tickets.getOne(rootTicket.id); }, handleAnyError)];
445
- case 11:
507
+ case 14:
446
508
  _d.sent();
447
509
  return [4 /*yield*/, sdk.api.endusers.updateOne(enduserSDK.userInfo.id, { sharedWithOrganizations: [(_c = sdkSub.userInfo.organizationIds) !== null && _c !== void 0 ? _c : []] })];
448
- case 12:
510
+ case 15:
449
511
  _d.sent();
450
512
  return [4 /*yield*/, enduserSDK.refresh_session()]; // ensure updated session includes new sharedWithOrganizations
451
- case 13:
513
+ case 16:
452
514
  _d.sent(); // ensure updated session includes new sharedWithOrganizations
453
515
  return [4 /*yield*/, enduserSDK.api.tickets.createOne({ title: 'root with shared', enduserId: enduserSDK.userInfo.id })];
454
- case 14:
516
+ case 17:
455
517
  rootTicketAfterUpdate = _d.sent();
456
518
  return [4 /*yield*/, async_test("root get root", function () { return sdk.api.endusers.getOne(enduserSDK.userInfo.id); }, passOnAnyResult)];
457
- case 15:
519
+ case 18:
458
520
  _d.sent();
459
521
  return [4 /*yield*/, async_test("sub get root after update", function () { return sdkSub.api.endusers.getOne(enduserSDK.userInfo.id); }, passOnAnyResult)];
460
- case 16:
522
+ case 19:
461
523
  _d.sent();
462
524
  return [4 /*yield*/, async_test("root get sub", function () { return sdk.api.endusers.getOne(subEnduserSDK.userInfo.id); }, passOnAnyResult)];
463
- case 17:
525
+ case 20:
464
526
  _d.sent();
465
527
  return [4 /*yield*/, async_test("sub get sub", function () { return sdkSub.api.endusers.getOne(subEnduserSDK.userInfo.id); }, passOnAnyResult)];
466
- case 18:
528
+ case 21:
467
529
  _d.sent();
468
530
  return [4 /*yield*/, async_test("root get root ticket after update", function () { return sdk.api.tickets.getOne(rootTicketAfterUpdate.id); }, passOnAnyResult)];
469
- case 19:
531
+ case 22:
470
532
  _d.sent();
471
533
  return [4 /*yield*/, async_test("sub get root ticket after update", function () { return sdkSub.api.tickets.getOne(rootTicketAfterUpdate.id); }, passOnAnyResult)];
472
- case 20:
534
+ case 23:
473
535
  _d.sent();
474
536
  return [4 /*yield*/, Promise.all([
475
537
  sdk.api.endusers.deleteOne(enduserSDK.userInfo.id),
@@ -477,7 +539,7 @@ var sub_organization_enduser_tests = function () { return __awaiter(void 0, void
477
539
  sdk.api.tickets.deleteOne(rootTicket.id),
478
540
  sdk.api.tickets.deleteOne(rootTicketAfterUpdate.id),
479
541
  ])];
480
- case 21:
542
+ case 24:
481
543
  _d.sent();
482
544
  return [2 /*return*/];
483
545
  }
@@ -3998,23 +4060,35 @@ var search_tests = function () { return __awaiter(void 0, void 0, void 0, functi
3998
4060
  return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'e2_search@tellescope.com', fname: 'sebastian', lname: "coates" })];
3999
4061
  case 3:
4000
4062
  e2 = _a.sent();
4001
- return [4 /*yield*/, async_test("Search full fname case insensitive", function () { return sdk.api.endusers.getSome({ search: { query: 'john' } }); }, { onResult: function (es) { return es.length === 1 && es[0].id === e1.id; } })];
4063
+ return [4 /*yield*/, async_test("Search error message", function () { return sdk.api.endusers.getSome({ search: "alert(1)" }); }, {
4064
+ shouldError: true,
4065
+ onError: function (e) { return !e.message.includes('script') && e.message.startsWith("Error parsing field search: Expecting an object but got alert(1)"); }
4066
+ })];
4002
4067
  case 4:
4003
4068
  _a.sent();
4004
- return [4 /*yield*/, async_test("Search start fname case insensitive", function () { return sdk.api.endusers.getSome({ search: { query: 'joh' } }); }, { onResult: function (es) { return es.length === 1 && es[0].id === e1.id; } })];
4069
+ return [4 /*yield*/, async_test("Search error does not return script tags ", function () { return sdk.api.endusers.getSome({ search: "<script>alert(1)</script>" }); }, {
4070
+ shouldError: true,
4071
+ onError: function (e) { return !e.message.includes('script') && e.message.startsWith("Error parsing field search: Expecting an object but got"); }
4072
+ })];
4005
4073
  case 5:
4006
4074
  _a.sent();
4007
- return [4 /*yield*/, async_test("Search end fname case insensitive", function () { return sdk.api.endusers.getSome({ search: { query: 'ohn' } }); }, { onResult: function (es) { return es.length === 1 && es[0].id === e1.id; } })];
4075
+ return [4 /*yield*/, async_test("Search full fname case insensitive", function () { return sdk.api.endusers.getSome({ search: { query: 'john' } }); }, { onResult: function (es) { return es.length === 1 && es[0].id === e1.id; } })];
4008
4076
  case 6:
4009
4077
  _a.sent();
4010
- return [4 /*yield*/, async_test("Search by email", function () { return sdk.api.endusers.getSome({ search: { query: 'search@tellescope' } }); }, { onResult: function (es) { return es.length === 2; } })];
4078
+ return [4 /*yield*/, async_test("Search start fname case insensitive", function () { return sdk.api.endusers.getSome({ search: { query: 'joh' } }); }, { onResult: function (es) { return es.length === 1 && es[0].id === e1.id; } })];
4011
4079
  case 7:
4080
+ _a.sent();
4081
+ return [4 /*yield*/, async_test("Search end fname case insensitive", function () { return sdk.api.endusers.getSome({ search: { query: 'ohn' } }); }, { onResult: function (es) { return es.length === 1 && es[0].id === e1.id; } })];
4082
+ case 8:
4083
+ _a.sent();
4084
+ return [4 /*yield*/, async_test("Search by email", function () { return sdk.api.endusers.getSome({ search: { query: 'search@tellescope' } }); }, { onResult: function (es) { return es.length === 2; } })];
4085
+ case 9:
4012
4086
  _a.sent();
4013
4087
  return [4 /*yield*/, Promise.all([
4014
4088
  sdk.api.endusers.deleteOne(e1.id),
4015
4089
  sdk.api.endusers.deleteOne(e2.id),
4016
4090
  ])];
4017
- case 8:
4091
+ case 10:
4018
4092
  _a.sent();
4019
4093
  return [2 /*return*/];
4020
4094
  }
@@ -6994,6 +7068,7 @@ var validate_schema = function () {
6994
7068
  endpoints.add(path);
6995
7069
  }
6996
7070
  }
7071
+ console.log("Schema validated");
6997
7072
  };
6998
7073
  var test_weighted_round_robin = function () { return __awaiter(void 0, void 0, void 0, function () {
6999
7074
  var testUsers, userIds, testAssignments, run_assignment_simulation;
@@ -7613,7 +7688,7 @@ export var ticket_reminder_tests = function () { return __awaiter(void 0, void 0
7613
7688
  return (((_b = (_a = t.reminders) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.didRemind) === true
7614
7689
  && t.nextReminderInMS !== -1
7615
7690
  && ((_d = (_c = t.reminders) === null || _c === void 0 ? void 0 : _c.filter(function (r) { return r.didRemind; })) === null || _d === void 0 ? void 0 : _d.length) === 1);
7616
- }, 25, 200); }, passOnAnyResult)];
7691
+ }, 10, 500); }, passOnAnyResult)];
7617
7692
  case 13:
7618
7693
  _a.sent();
7619
7694
  return [4 /*yield*/, async_test("Delayed reminder not processed yet", function () { return sdk.api.tickets.getOne(tToRemind.id); }, {
@@ -7870,6 +7945,304 @@ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, funct
7870
7945
  }
7871
7946
  });
7872
7947
  }); };
7948
+ var sync_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
7949
+ var from, e, t, e2;
7950
+ return __generator(this, function (_a) {
7951
+ switch (_a.label) {
7952
+ case 0:
7953
+ log_header("Data Sync");
7954
+ from = new Date();
7955
+ return [4 /*yield*/, async_test("No new records, admin", function () { return sdk.sync({ from: from }); }, { onResult: function (_a) {
7956
+ var results = _a.results;
7957
+ return results.length === 0;
7958
+ } })];
7959
+ case 1:
7960
+ _a.sent();
7961
+ return [4 /*yield*/, async_test("No new records, non-admin", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
7962
+ var results = _a.results;
7963
+ return results.length === 0;
7964
+ } })];
7965
+ case 2:
7966
+ _a.sent();
7967
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
7968
+ case 3:
7969
+ e = _a.sent();
7970
+ return [4 /*yield*/, wait(undefined, 100)];
7971
+ case 4:
7972
+ _a.sent();
7973
+ return [4 /*yield*/, async_test("Enduser create, admin", function () { return sdk.sync({ from: from }); }, { onResult: function (_a) {
7974
+ var results = _a.results;
7975
+ return (results.length === 1
7976
+ && results[0].modelName === 'endusers'
7977
+ && results[0].recordId === e.id
7978
+ && results[0].data.includes(e.id)
7979
+ && JSON.parse(results[0].data) // tests no error throwing
7980
+ );
7981
+ } })];
7982
+ case 5:
7983
+ _a.sent();
7984
+ return [4 /*yield*/, async_test("Enduser create, non-admin", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
7985
+ var results = _a.results;
7986
+ return results.length === 0;
7987
+ } })];
7988
+ case 6:
7989
+ _a.sent();
7990
+ return [4 /*yield*/, async_test("Enduser create, sub organization", function () { return sdkSub.sync({ from: from }); }, { onResult: function (_a) {
7991
+ var results = _a.results;
7992
+ return results.length === 0;
7993
+ } })];
7994
+ case 7:
7995
+ _a.sent();
7996
+ return [4 /*yield*/, async_test("Other organization", function () { return sdkOther.sync({ from: from }); }, { onResult: function (_a) {
7997
+ var results = _a.results;
7998
+ return results.length === 0;
7999
+ } })];
8000
+ case 8:
8001
+ _a.sent();
8002
+ return [4 /*yield*/, sdk.api.endusers.updateOne(e.id, { fname: "UPDATE_TEST" })];
8003
+ case 9:
8004
+ _a.sent();
8005
+ return [4 /*yield*/, wait(undefined, 100)];
8006
+ case 10:
8007
+ _a.sent();
8008
+ return [4 /*yield*/, async_test("Enduser update, admin", function () { return sdk.sync({ from: from }); }, { onResult: function (_a) {
8009
+ var results = _a.results;
8010
+ return (results.length === 1
8011
+ && results[0].modelName === 'endusers'
8012
+ && results[0].recordId === e.id
8013
+ && results[0].data.includes("UPDATE_TEST"));
8014
+ } })];
8015
+ case 11:
8016
+ _a.sent();
8017
+ return [4 /*yield*/, async_test("Enduser update, non-admin", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8018
+ var results = _a.results;
8019
+ return results.length === 0;
8020
+ } })];
8021
+ case 12:
8022
+ _a.sent();
8023
+ return [4 /*yield*/, async_test("Enduser update, sub organization", function () { return sdkSub.sync({ from: from }); }, { onResult: function (_a) {
8024
+ var results = _a.results;
8025
+ return results.length === 0;
8026
+ } })];
8027
+ case 13:
8028
+ _a.sent();
8029
+ return [4 /*yield*/, async_test("Other organization", function () { return sdkOther.sync({ from: from }); }, { onResult: function (_a) {
8030
+ var results = _a.results;
8031
+ return results.length === 0;
8032
+ } })];
8033
+ case 14:
8034
+ _a.sent();
8035
+ return [4 /*yield*/, sdk.api.tickets.createOne({ title: 'access test' })];
8036
+ case 15:
8037
+ t = _a.sent();
8038
+ return [4 /*yield*/, wait(undefined, 100)];
8039
+ case 16:
8040
+ _a.sent();
8041
+ return [4 /*yield*/, async_test("Non-admin can't access ticket", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8042
+ var results = _a.results;
8043
+ return results.length === 0;
8044
+ } })
8045
+ // creates a user notification which increments count/index
8046
+ ];
8047
+ case 17:
8048
+ _a.sent();
8049
+ // creates a user notification which increments count/index
8050
+ sdk.api.tickets.updateOne(t.id, { owner: sdkNonAdmin.userInfo.id });
8051
+ return [4 /*yield*/, wait(undefined, 100)];
8052
+ case 18:
8053
+ _a.sent();
8054
+ return [4 /*yield*/, async_test("Non-admin can access tickets on assignment", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8055
+ var results = _a.results;
8056
+ return results.length === 2;
8057
+ } })];
8058
+ case 19:
8059
+ _a.sent();
8060
+ sdk.api.tickets.updateOne(t.id, { owner: '' });
8061
+ return [4 /*yield*/, wait(undefined, 100)];
8062
+ case 20:
8063
+ _a.sent();
8064
+ return [4 /*yield*/, async_test("Non-admin can't access tickets on unassignment", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8065
+ var results = _a.results;
8066
+ return results.length === 1;
8067
+ } })];
8068
+ case 21:
8069
+ _a.sent();
8070
+ return [4 /*yield*/, sdk.api.endusers.updateOne(e.id, { assignedTo: [sdkNonAdmin.userInfo.id] }, { replaceObjectFields: true })];
8071
+ case 22:
8072
+ _a.sent();
8073
+ return [4 /*yield*/, wait(undefined, 100)];
8074
+ case 23:
8075
+ _a.sent();
8076
+ return [4 /*yield*/, async_test("Enduser update non-admin assignment, can access", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8077
+ var results = _a.results;
8078
+ return results.length === 2;
8079
+ } })];
8080
+ case 24:
8081
+ _a.sent();
8082
+ sdk.api.tickets.updateOne(t.id, { owner: '', enduserId: e.id });
8083
+ return [4 /*yield*/, wait(undefined, 100)];
8084
+ case 25:
8085
+ _a.sent();
8086
+ return [4 /*yield*/, async_test("Non-admin can access ticket (and enduser) after enduser assignment", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8087
+ var results = _a.results;
8088
+ return results.length === 3;
8089
+ } })];
8090
+ case 26:
8091
+ _a.sent();
8092
+ return [4 /*yield*/, sdk.api.endusers.updateOne(e.id, { assignedTo: [] }, { replaceObjectFields: true })];
8093
+ case 27:
8094
+ _a.sent();
8095
+ return [4 /*yield*/, wait(undefined, 100)];
8096
+ case 28:
8097
+ _a.sent();
8098
+ return [4 /*yield*/, async_test("Enduser update non-admin assignment, revoked access to enduser and ticket", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8099
+ var results = _a.results;
8100
+ return results.length === 1;
8101
+ } })
8102
+ // enduser, ticket, and ticket assignment user_notification created
8103
+ ];
8104
+ case 29:
8105
+ _a.sent();
8106
+ // enduser, ticket, and ticket assignment user_notification created
8107
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(e.id)];
8108
+ case 30:
8109
+ // enduser, ticket, and ticket assignment user_notification created
8110
+ _a.sent();
8111
+ return [4 /*yield*/, wait(undefined, 100)];
8112
+ case 31:
8113
+ _a.sent();
8114
+ return [4 /*yield*/, async_test("Enduser delete, admin", function () { return sdk.sync({ from: from }); }, { onResult: function (_a) {
8115
+ var results = _a.results;
8116
+ return (results.length === 3
8117
+ && results[0].modelName === 'endusers'
8118
+ && results[0].recordId === e.id
8119
+ && results[0].data === 'deleted');
8120
+ } })];
8121
+ case 32:
8122
+ _a.sent();
8123
+ return [4 /*yield*/, async_test("Enduser delete, non-admin", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8124
+ var results = _a.results;
8125
+ return results.length === 1;
8126
+ } })];
8127
+ case 33:
8128
+ _a.sent();
8129
+ return [4 /*yield*/, async_test("Enduser delete, sub organization", function () { return sdkSub.sync({ from: from }); }, { onResult: function (_a) {
8130
+ var results = _a.results;
8131
+ return results.length === 0;
8132
+ } })];
8133
+ case 34:
8134
+ _a.sent();
8135
+ return [4 /*yield*/, async_test("Other organization", function () { return sdkOther.sync({ from: from }); }, { onResult: function (_a) {
8136
+ var results = _a.results;
8137
+ return results.length === 0;
8138
+ } })
8139
+ // bulk create test coverage
8140
+ ];
8141
+ case 35:
8142
+ _a.sent();
8143
+ return [4 /*yield*/, sdk.api.endusers.createSome([{}])];
8144
+ case 36:
8145
+ e2 = (_a.sent()).created[0];
8146
+ return [4 /*yield*/, wait(undefined, 100)];
8147
+ case 37:
8148
+ _a.sent();
8149
+ return [4 /*yield*/, async_test("Bulk Enduser create, admin", function () { return sdk.sync({ from: from }); }, { onResult: function (_a) {
8150
+ var results = _a.results;
8151
+ return (results.length === 4
8152
+ && results[0].modelName === 'endusers'
8153
+ && results[0].recordId === e2.id
8154
+ && results[0].data.includes(e2.id)
8155
+ && JSON.parse(results[0].data) // tests no error throwing
8156
+ );
8157
+ } })];
8158
+ case 38:
8159
+ _a.sent();
8160
+ return [4 /*yield*/, async_test("Bulk Enduser create, non-admin", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8161
+ var results = _a.results;
8162
+ return results.length === 1;
8163
+ } })];
8164
+ case 39:
8165
+ _a.sent();
8166
+ return [4 /*yield*/, async_test("Bulk Enduser create, sub organization", function () { return sdkSub.sync({ from: from }); }, { onResult: function (_a) {
8167
+ var results = _a.results;
8168
+ return results.length === 0;
8169
+ } })];
8170
+ case 40:
8171
+ _a.sent();
8172
+ return [4 /*yield*/, async_test("Other organization", function () { return sdkOther.sync({ from: from }); }, { onResult: function (_a) {
8173
+ var results = _a.results;
8174
+ return results.length === 0;
8175
+ } })];
8176
+ case 41:
8177
+ _a.sent();
8178
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(e2.id)];
8179
+ case 42:
8180
+ _a.sent();
8181
+ return [4 /*yield*/, wait(undefined, 100)];
8182
+ case 43:
8183
+ _a.sent();
8184
+ return [4 /*yield*/, async_test("Bulk Enduser delete, admin", function () { return sdk.sync({ from: from }); }, { onResult: function (_a) {
8185
+ var results = _a.results;
8186
+ return (results.length === 4
8187
+ && results[0].modelName === 'endusers'
8188
+ && results[0].recordId === e2.id
8189
+ && results[0].data === 'deleted');
8190
+ } })];
8191
+ case 44:
8192
+ _a.sent();
8193
+ return [4 /*yield*/, async_test("Bulk Enduser delete, non-admin", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8194
+ var results = _a.results;
8195
+ return results.length === 1;
8196
+ } })];
8197
+ case 45:
8198
+ _a.sent();
8199
+ return [4 /*yield*/, async_test("Bulk Enduser delete, sub organization", function () { return sdkSub.sync({ from: from }); }, { onResult: function (_a) {
8200
+ var results = _a.results;
8201
+ return results.length === 0;
8202
+ } })];
8203
+ case 46:
8204
+ _a.sent();
8205
+ return [4 /*yield*/, async_test("Other organization", function () { return sdkOther.sync({ from: from }); }, { onResult: function (_a) {
8206
+ var results = _a.results;
8207
+ return results.length === 0;
8208
+ } })];
8209
+ case 47:
8210
+ _a.sent();
8211
+ return [2 /*return*/];
8212
+ }
8213
+ });
8214
+ }); };
8215
+ // to cover potential vulernabilities with enduser public register endpoint
8216
+ var register_as_enduser_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
8217
+ var enduser;
8218
+ return __generator(this, function (_a) {
8219
+ switch (_a.label) {
8220
+ case 0:
8221
+ log_header("Register as Enduser");
8222
+ return [4 /*yield*/, async_test("Enduser register", function () { return enduserSDK.register({ email: 'test@tellescope.com', password: 'testpassWord12345!' }); }, passOnAnyResult)];
8223
+ case 1:
8224
+ _a.sent();
8225
+ return [4 /*yield*/, async_test("Enduser register (rate limited)", function () { return enduserSDK.register({ email: 'test@tellescope.com', password: 'testpassWord12345!' }); }, { shouldError: true, onError: function (e) { return e.message === "Too many requests"; } })];
8226
+ case 2:
8227
+ _a.sent();
8228
+ return [4 /*yield*/, wait(undefined, 1000)];
8229
+ case 3:
8230
+ _a.sent();
8231
+ return [4 /*yield*/, async_test("Enduser duplicate register (same response, no ability to enumerate contacts)", function () { return enduserSDK.register({ email: 'test@tellescope.com', password: 'testpassWord12345!' }); }, passOnAnyResult)];
8232
+ case 4:
8233
+ _a.sent();
8234
+ return [4 /*yield*/, sdk.api.endusers.getOne({ email: 'test@tellescope.com' })];
8235
+ case 5:
8236
+ enduser = _a.sent();
8237
+ if (!enduser) return [3 /*break*/, 7];
8238
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser.id)];
8239
+ case 6:
8240
+ _a.sent();
8241
+ _a.label = 7;
8242
+ case 7: return [2 /*return*/];
8243
+ }
8244
+ });
8245
+ }); };
7873
8246
  (function () { return __awaiter(void 0, void 0, void 0, function () {
7874
8247
  var err_1, n, _a, _b, _c, _i, returnValidation, t, _d, _f, _g, _h, err_2;
7875
8248
  var _j, _k;
@@ -7882,7 +8255,7 @@ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, funct
7882
8255
  _l.sent();
7883
8256
  _l.label = 2;
7884
8257
  case 2:
7885
- _l.trys.push([2, 47, , 48]);
8258
+ _l.trys.push([2, 49, , 50]);
7886
8259
  form_conditional_logic_tests();
7887
8260
  return [4 /*yield*/, test_weighted_round_robin()];
7888
8261
  case 3:
@@ -7896,11 +8269,10 @@ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, funct
7896
8269
  sdkOtherSub.authenticate(otherSubUserEmail, password),
7897
8270
  sdkSubSub.authenticate(subSubUserEmail, password),
7898
8271
  sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword),
7899
- ])
7900
- // console.log(JSON.stringify(await sdk.bulk_load({ load: [{ model: 'users' }]}), null, 2))
7901
- ];
8272
+ ])];
7902
8273
  case 5:
7903
8274
  _l.sent();
8275
+ console.log("Authentication done");
7904
8276
  // console.log(JSON.stringify(await sdk.bulk_load({ load: [{ model: 'users' }]}), null, 2))
7905
8277
  return [4 /*yield*/, async_test("count exists",
7906
8278
  // @ts-ignore
@@ -7920,120 +8292,126 @@ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, funct
7920
8292
  return [4 /*yield*/, multi_tenant_tests()]; // should come right after setup tests
7921
8293
  case 10:
7922
8294
  _l.sent(); // should come right after setup tests
7923
- return [4 /*yield*/, lockout_tests()];
8295
+ return [4 /*yield*/, register_as_enduser_tests()];
7924
8296
  case 11:
7925
8297
  _l.sent();
7926
- return [4 /*yield*/, self_serve_appointment_booking_tests()];
8298
+ return [4 /*yield*/, sync_tests()];
7927
8299
  case 12:
8300
+ _l.sent();
8301
+ return [4 /*yield*/, lockout_tests()];
8302
+ case 13:
8303
+ _l.sent();
8304
+ return [4 /*yield*/, self_serve_appointment_booking_tests()];
8305
+ case 14:
7928
8306
  _l.sent();
7929
8307
  return [4 /*yield*/, delete_user_tests()
7930
8308
  // await test_send_with_template()
7931
8309
  ];
7932
- case 13:
8310
+ case 15:
7933
8311
  _l.sent();
7934
8312
  // await test_send_with_template()
7935
8313
  return [4 /*yield*/, bulk_read_tests()];
7936
- case 14:
8314
+ case 16:
7937
8315
  // await test_send_with_template()
7938
8316
  _l.sent();
7939
8317
  return [4 /*yield*/, ticket_reminder_tests()];
7940
- case 15:
8318
+ case 17:
7941
8319
  _l.sent();
7942
8320
  return [4 /*yield*/, enduser_access_tags_tests()];
7943
- case 16:
8321
+ case 18:
7944
8322
  _l.sent();
7945
8323
  return [4 /*yield*/, marketing_email_unsubscribe_tests()];
7946
- case 17:
8324
+ case 19:
7947
8325
  _l.sent();
7948
8326
  return [4 /*yield*/, unique_strings_tests()];
7949
- case 18:
8327
+ case 20:
7950
8328
  _l.sent();
7951
8329
  return [4 /*yield*/, alternate_phones_tests()];
7952
- case 19:
8330
+ case 21:
7953
8331
  _l.sent();
7954
8332
  return [4 /*yield*/, ticket_queue_tests()];
7955
- case 20:
8333
+ case 22:
7956
8334
  _l.sent();
7957
8335
  return [4 /*yield*/, no_chained_triggers_tests()];
7958
- case 21:
8336
+ case 23:
7959
8337
  _l.sent();
7960
8338
  return [4 /*yield*/, field_equals_trigger_tests()];
7961
- case 22:
8339
+ case 24:
7962
8340
  _l.sent();
7963
8341
  return [4 /*yield*/, test_ticket_automation_assignment_and_optimization()];
7964
- case 23:
8342
+ case 25:
7965
8343
  _l.sent();
7966
8344
  return [4 /*yield*/, role_based_access_tests()];
7967
- case 24:
8345
+ case 26:
7968
8346
  _l.sent();
7969
8347
  return [4 /*yield*/, automation_trigger_tests()];
7970
- case 25:
8348
+ case 27:
7971
8349
  _l.sent();
7972
8350
  return [4 /*yield*/, enduser_session_tests()];
7973
- case 26:
8351
+ case 28:
7974
8352
  _l.sent();
7975
8353
  return [4 /*yield*/, nextReminderInMS_tests()];
7976
- case 27:
8354
+ case 29:
7977
8355
  _l.sent();
7978
8356
  return [4 /*yield*/, search_tests()];
7979
- case 28:
8357
+ case 30:
7980
8358
  _l.sent();
7981
8359
  return [4 /*yield*/, wait_for_trigger_tests()];
7982
- case 29:
8360
+ case 31:
7983
8361
  _l.sent();
7984
8362
  return [4 /*yield*/, pdf_generation()];
7985
- case 30:
8363
+ case 32:
7986
8364
  _l.sent();
7987
8365
  return [4 /*yield*/, remove_from_journey_on_incoming_comms_tests()];
7988
- case 31:
8366
+ case 33:
7989
8367
  _l.sent();
7990
8368
  return [4 /*yield*/, rate_limit_tests()];
7991
- case 32:
8369
+ case 34:
7992
8370
  _l.sent();
7993
8371
  return [4 /*yield*/, merge_enduser_tests()];
7994
- case 33:
8372
+ case 35:
7995
8373
  _l.sent();
7996
8374
  return [4 /*yield*/, auto_reply_tests()];
7997
- case 34:
8375
+ case 36:
7998
8376
  _l.sent();
7999
8377
  return [4 /*yield*/, sub_organization_enduser_tests()];
8000
- case 35:
8378
+ case 37:
8001
8379
  _l.sent();
8002
8380
  return [4 /*yield*/, sub_organization_tests()];
8003
- case 36:
8381
+ case 38:
8004
8382
  _l.sent();
8005
8383
  return [4 /*yield*/, filter_by_date_tests()];
8006
- case 37:
8384
+ case 39:
8007
8385
  _l.sent();
8008
8386
  return [4 /*yield*/, generate_user_auth_tests()];
8009
- case 38:
8387
+ case 40:
8010
8388
  _l.sent();
8011
8389
  return [4 /*yield*/, generateEnduserAuthTests()];
8012
- case 39:
8390
+ case 41:
8013
8391
  _l.sent();
8014
8392
  return [4 /*yield*/, public_form_tests()];
8015
- case 40:
8393
+ case 42:
8016
8394
  _l.sent();
8017
8395
  return [4 /*yield*/, badInputTests()];
8018
- case 41:
8396
+ case 43:
8019
8397
  _l.sent();
8020
8398
  return [4 /*yield*/, filterTests()];
8021
- case 42:
8399
+ case 44:
8022
8400
  _l.sent();
8023
8401
  return [4 /*yield*/, updatesTests()];
8024
- case 43:
8402
+ case 45:
8025
8403
  _l.sent();
8026
8404
  return [4 /*yield*/, threadKeyTests()];
8027
- case 44:
8405
+ case 46:
8028
8406
  _l.sent();
8029
8407
  return [4 /*yield*/, enduserAccessTests()];
8030
- case 45:
8408
+ case 47:
8031
8409
  _l.sent();
8032
8410
  return [4 /*yield*/, enduser_redaction_tests()];
8033
- case 46:
8411
+ case 48:
8034
8412
  _l.sent();
8035
- return [3 /*break*/, 48];
8036
- case 47:
8413
+ return [3 /*break*/, 50];
8414
+ case 49:
8037
8415
  err_1 = _l.sent();
8038
8416
  console.error("Failed during custom test");
8039
8417
  if (err_1.message && err_1.info) {
@@ -8043,18 +8421,18 @@ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, funct
8043
8421
  console.error(err_1);
8044
8422
  }
8045
8423
  process.exit(1);
8046
- return [3 /*break*/, 48];
8047
- case 48:
8424
+ return [3 /*break*/, 50];
8425
+ case 50:
8048
8426
  _a = schema;
8049
8427
  _b = [];
8050
8428
  for (_c in _a)
8051
8429
  _b.push(_c);
8052
8430
  _i = 0;
8053
- _l.label = 49;
8054
- case 49:
8055
- if (!(_i < _b.length)) return [3 /*break*/, 52];
8431
+ _l.label = 51;
8432
+ case 51:
8433
+ if (!(_i < _b.length)) return [3 /*break*/, 54];
8056
8434
  _c = _b[_i];
8057
- if (!(_c in _a)) return [3 /*break*/, 51];
8435
+ if (!(_c in _a)) return [3 /*break*/, 53];
8058
8436
  n = _c;
8059
8437
  returnValidation = (_k = (_j = schema[n].customActions) === null || _j === void 0 ? void 0 : _j.create) === null || _k === void 0 ? void 0 : _k.returns;
8060
8438
  return [4 /*yield*/, run_generated_tests({
@@ -8065,41 +8443,41 @@ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, funct
8065
8443
  create: returnValidation // ModelFields<ClientModel>,
8066
8444
  }
8067
8445
  })];
8068
- case 50:
8446
+ case 52:
8069
8447
  _l.sent();
8070
- _l.label = 51;
8071
- case 51:
8448
+ _l.label = 53;
8449
+ case 53:
8072
8450
  _i++;
8073
- return [3 /*break*/, 49];
8074
- case 52:
8451
+ return [3 /*break*/, 51];
8452
+ case 54:
8075
8453
  _d = tests;
8076
8454
  _f = [];
8077
8455
  for (_g in _d)
8078
8456
  _f.push(_g);
8079
8457
  _h = 0;
8080
- _l.label = 53;
8081
- case 53:
8082
- if (!(_h < _f.length)) return [3 /*break*/, 58];
8458
+ _l.label = 55;
8459
+ case 55:
8460
+ if (!(_h < _f.length)) return [3 /*break*/, 60];
8083
8461
  _g = _f[_h];
8084
- if (!(_g in _d)) return [3 /*break*/, 57];
8462
+ if (!(_g in _d)) return [3 /*break*/, 59];
8085
8463
  t = _g;
8086
- _l.label = 54;
8087
- case 54:
8088
- _l.trys.push([54, 56, , 57]);
8464
+ _l.label = 56;
8465
+ case 56:
8466
+ _l.trys.push([56, 58, , 59]);
8089
8467
  return [4 /*yield*/, tests[t]()];
8090
- case 55:
8468
+ case 57:
8091
8469
  _l.sent();
8092
- return [3 /*break*/, 57];
8093
- case 56:
8470
+ return [3 /*break*/, 59];
8471
+ case 58:
8094
8472
  err_2 = _l.sent();
8095
8473
  console.error("Error running test:");
8096
8474
  console.error(err_2);
8097
8475
  process.exit(1);
8098
- return [3 /*break*/, 57];
8099
- case 57:
8476
+ return [3 /*break*/, 59];
8477
+ case 59:
8100
8478
  _h++;
8101
- return [3 /*break*/, 53];
8102
- case 58:
8479
+ return [3 /*break*/, 55];
8480
+ case 60:
8103
8481
  process.exit();
8104
8482
  return [2 /*return*/];
8105
8483
  }