@tellescope/sdk 1.76.0 → 1.77.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
  }
@@ -6994,6 +7056,7 @@ var validate_schema = function () {
6994
7056
  endpoints.add(path);
6995
7057
  }
6996
7058
  }
7059
+ console.log("Schema validated");
6997
7060
  };
6998
7061
  var test_weighted_round_robin = function () { return __awaiter(void 0, void 0, void 0, function () {
6999
7062
  var testUsers, userIds, testAssignments, run_assignment_simulation;
@@ -7613,7 +7676,7 @@ export var ticket_reminder_tests = function () { return __awaiter(void 0, void 0
7613
7676
  return (((_b = (_a = t.reminders) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.didRemind) === true
7614
7677
  && t.nextReminderInMS !== -1
7615
7678
  && ((_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)];
7679
+ }, 10, 500); }, passOnAnyResult)];
7617
7680
  case 13:
7618
7681
  _a.sent();
7619
7682
  return [4 /*yield*/, async_test("Delayed reminder not processed yet", function () { return sdk.api.tickets.getOne(tToRemind.id); }, {
@@ -7870,6 +7933,274 @@ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, funct
7870
7933
  }
7871
7934
  });
7872
7935
  }); };
7936
+ var sync_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
7937
+ var from, e, t, e2;
7938
+ return __generator(this, function (_a) {
7939
+ switch (_a.label) {
7940
+ case 0:
7941
+ log_header("Data Sync");
7942
+ from = new Date();
7943
+ return [4 /*yield*/, async_test("No new records, admin", function () { return sdk.sync({ from: from }); }, { onResult: function (_a) {
7944
+ var results = _a.results;
7945
+ return results.length === 0;
7946
+ } })];
7947
+ case 1:
7948
+ _a.sent();
7949
+ return [4 /*yield*/, async_test("No new records, non-admin", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
7950
+ var results = _a.results;
7951
+ return results.length === 0;
7952
+ } })];
7953
+ case 2:
7954
+ _a.sent();
7955
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
7956
+ case 3:
7957
+ e = _a.sent();
7958
+ return [4 /*yield*/, wait(undefined, 100)];
7959
+ case 4:
7960
+ _a.sent();
7961
+ return [4 /*yield*/, async_test("Enduser create, admin", function () { return sdk.sync({ from: from }); }, { onResult: function (_a) {
7962
+ var results = _a.results;
7963
+ return (results.length === 1
7964
+ && results[0].modelName === 'endusers'
7965
+ && results[0].recordId === e.id
7966
+ && results[0].data.includes(e.id)
7967
+ && JSON.parse(results[0].data) // tests no error throwing
7968
+ );
7969
+ } })];
7970
+ case 5:
7971
+ _a.sent();
7972
+ return [4 /*yield*/, async_test("Enduser create, non-admin", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
7973
+ var results = _a.results;
7974
+ return results.length === 0;
7975
+ } })];
7976
+ case 6:
7977
+ _a.sent();
7978
+ return [4 /*yield*/, async_test("Enduser create, sub organization", function () { return sdkSub.sync({ from: from }); }, { onResult: function (_a) {
7979
+ var results = _a.results;
7980
+ return results.length === 0;
7981
+ } })];
7982
+ case 7:
7983
+ _a.sent();
7984
+ return [4 /*yield*/, sdk.api.endusers.updateOne(e.id, { fname: "UPDATE_TEST" })];
7985
+ case 8:
7986
+ _a.sent();
7987
+ return [4 /*yield*/, wait(undefined, 100)];
7988
+ case 9:
7989
+ _a.sent();
7990
+ return [4 /*yield*/, async_test("Enduser update, admin", function () { return sdk.sync({ from: from }); }, { onResult: function (_a) {
7991
+ var results = _a.results;
7992
+ return (results.length === 1
7993
+ && results[0].modelName === 'endusers'
7994
+ && results[0].recordId === e.id
7995
+ && results[0].data.includes("UPDATE_TEST"));
7996
+ } })];
7997
+ case 10:
7998
+ _a.sent();
7999
+ return [4 /*yield*/, async_test("Enduser update, non-admin", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8000
+ var results = _a.results;
8001
+ return results.length === 0;
8002
+ } })];
8003
+ case 11:
8004
+ _a.sent();
8005
+ return [4 /*yield*/, async_test("Enduser update, sub organization", function () { return sdkSub.sync({ from: from }); }, { onResult: function (_a) {
8006
+ var results = _a.results;
8007
+ return results.length === 0;
8008
+ } })];
8009
+ case 12:
8010
+ _a.sent();
8011
+ return [4 /*yield*/, sdk.api.tickets.createOne({ title: 'access test' })];
8012
+ case 13:
8013
+ t = _a.sent();
8014
+ return [4 /*yield*/, wait(undefined, 100)];
8015
+ case 14:
8016
+ _a.sent();
8017
+ return [4 /*yield*/, async_test("Non-admin can't access ticket", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8018
+ var results = _a.results;
8019
+ return results.length === 0;
8020
+ } })
8021
+ // creates a user notification which increments count/index
8022
+ ];
8023
+ case 15:
8024
+ _a.sent();
8025
+ // creates a user notification which increments count/index
8026
+ sdk.api.tickets.updateOne(t.id, { owner: sdkNonAdmin.userInfo.id });
8027
+ return [4 /*yield*/, wait(undefined, 100)];
8028
+ case 16:
8029
+ _a.sent();
8030
+ return [4 /*yield*/, async_test("Non-admin can access tickets on assignment", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8031
+ var results = _a.results;
8032
+ return results.length === 2;
8033
+ } })];
8034
+ case 17:
8035
+ _a.sent();
8036
+ sdk.api.tickets.updateOne(t.id, { owner: '' });
8037
+ return [4 /*yield*/, wait(undefined, 100)];
8038
+ case 18:
8039
+ _a.sent();
8040
+ return [4 /*yield*/, async_test("Non-admin can't access tickets on unassignment", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8041
+ var results = _a.results;
8042
+ return results.length === 1;
8043
+ } })];
8044
+ case 19:
8045
+ _a.sent();
8046
+ return [4 /*yield*/, sdk.api.endusers.updateOne(e.id, { assignedTo: [sdkNonAdmin.userInfo.id] }, { replaceObjectFields: true })];
8047
+ case 20:
8048
+ _a.sent();
8049
+ return [4 /*yield*/, wait(undefined, 100)];
8050
+ case 21:
8051
+ _a.sent();
8052
+ return [4 /*yield*/, async_test("Enduser update non-admin assignment, can access", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8053
+ var results = _a.results;
8054
+ return results.length === 2;
8055
+ } })];
8056
+ case 22:
8057
+ _a.sent();
8058
+ sdk.api.tickets.updateOne(t.id, { owner: '', enduserId: e.id });
8059
+ return [4 /*yield*/, wait(undefined, 100)];
8060
+ case 23:
8061
+ _a.sent();
8062
+ return [4 /*yield*/, async_test("Non-admin can access ticket (and enduser) after enduser assignment", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8063
+ var results = _a.results;
8064
+ return results.length === 3;
8065
+ } })];
8066
+ case 24:
8067
+ _a.sent();
8068
+ return [4 /*yield*/, sdk.api.endusers.updateOne(e.id, { assignedTo: [] }, { replaceObjectFields: true })];
8069
+ case 25:
8070
+ _a.sent();
8071
+ return [4 /*yield*/, wait(undefined, 100)];
8072
+ case 26:
8073
+ _a.sent();
8074
+ 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) {
8075
+ var results = _a.results;
8076
+ return results.length === 1;
8077
+ } })
8078
+ // enduser, ticket, and ticket assignment user_notification created
8079
+ ];
8080
+ case 27:
8081
+ _a.sent();
8082
+ // enduser, ticket, and ticket assignment user_notification created
8083
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(e.id)];
8084
+ case 28:
8085
+ // enduser, ticket, and ticket assignment user_notification created
8086
+ _a.sent();
8087
+ return [4 /*yield*/, wait(undefined, 100)];
8088
+ case 29:
8089
+ _a.sent();
8090
+ return [4 /*yield*/, async_test("Enduser delete, admin", function () { return sdk.sync({ from: from }); }, { onResult: function (_a) {
8091
+ var results = _a.results;
8092
+ return (results.length === 3
8093
+ && results[0].modelName === 'endusers'
8094
+ && results[0].recordId === e.id
8095
+ && results[0].data === 'deleted');
8096
+ } })];
8097
+ case 30:
8098
+ _a.sent();
8099
+ return [4 /*yield*/, async_test("Enduser delete, non-admin", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8100
+ var results = _a.results;
8101
+ return results.length === 1;
8102
+ } })];
8103
+ case 31:
8104
+ _a.sent();
8105
+ return [4 /*yield*/, async_test("Enduser delete, sub organization", function () { return sdkSub.sync({ from: from }); }, { onResult: function (_a) {
8106
+ var results = _a.results;
8107
+ return results.length === 0;
8108
+ } })
8109
+ // bulk create test coverage
8110
+ ];
8111
+ case 32:
8112
+ _a.sent();
8113
+ return [4 /*yield*/, sdk.api.endusers.createSome([{}])];
8114
+ case 33:
8115
+ e2 = (_a.sent()).created[0];
8116
+ return [4 /*yield*/, wait(undefined, 100)];
8117
+ case 34:
8118
+ _a.sent();
8119
+ return [4 /*yield*/, async_test("Bulk Enduser create, admin", function () { return sdk.sync({ from: from }); }, { onResult: function (_a) {
8120
+ var results = _a.results;
8121
+ return (results.length === 4
8122
+ && results[0].modelName === 'endusers'
8123
+ && results[0].recordId === e2.id
8124
+ && results[0].data.includes(e2.id)
8125
+ && JSON.parse(results[0].data) // tests no error throwing
8126
+ );
8127
+ } })];
8128
+ case 35:
8129
+ _a.sent();
8130
+ return [4 /*yield*/, async_test("Bulk Enduser create, non-admin", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8131
+ var results = _a.results;
8132
+ return results.length === 1;
8133
+ } })];
8134
+ case 36:
8135
+ _a.sent();
8136
+ return [4 /*yield*/, async_test("Bulk Enduser create, sub organization", function () { return sdkSub.sync({ from: from }); }, { onResult: function (_a) {
8137
+ var results = _a.results;
8138
+ return results.length === 0;
8139
+ } })];
8140
+ case 37:
8141
+ _a.sent();
8142
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(e2.id)];
8143
+ case 38:
8144
+ _a.sent();
8145
+ return [4 /*yield*/, wait(undefined, 100)];
8146
+ case 39:
8147
+ _a.sent();
8148
+ return [4 /*yield*/, async_test("Bulk Enduser delete, admin", function () { return sdk.sync({ from: from }); }, { onResult: function (_a) {
8149
+ var results = _a.results;
8150
+ return (results.length === 4
8151
+ && results[0].modelName === 'endusers'
8152
+ && results[0].recordId === e2.id
8153
+ && results[0].data === 'deleted');
8154
+ } })];
8155
+ case 40:
8156
+ _a.sent();
8157
+ return [4 /*yield*/, async_test("Bulk Enduser delete, non-admin", function () { return sdkNonAdmin.sync({ from: from }); }, { onResult: function (_a) {
8158
+ var results = _a.results;
8159
+ return results.length === 1;
8160
+ } })];
8161
+ case 41:
8162
+ _a.sent();
8163
+ return [4 /*yield*/, async_test("Bulk Enduser delete, sub organization", function () { return sdkSub.sync({ from: from }); }, { onResult: function (_a) {
8164
+ var results = _a.results;
8165
+ return results.length === 0;
8166
+ } })];
8167
+ case 42:
8168
+ _a.sent();
8169
+ return [2 /*return*/];
8170
+ }
8171
+ });
8172
+ }); };
8173
+ // to cover potential vulernabilities with enduser public register endpoint
8174
+ var register_as_enduser_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
8175
+ var enduser;
8176
+ return __generator(this, function (_a) {
8177
+ switch (_a.label) {
8178
+ case 0:
8179
+ log_header("Register as Enduser");
8180
+ return [4 /*yield*/, async_test("Enduser register", function () { return enduserSDK.register({ email: 'test@tellescope.com', password: 'testpassWord12345!' }); }, passOnAnyResult)];
8181
+ case 1:
8182
+ _a.sent();
8183
+ 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"; } })];
8184
+ case 2:
8185
+ _a.sent();
8186
+ return [4 /*yield*/, wait(undefined, 1000)];
8187
+ case 3:
8188
+ _a.sent();
8189
+ 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)];
8190
+ case 4:
8191
+ _a.sent();
8192
+ return [4 /*yield*/, sdk.api.endusers.getOne({ email: 'test@tellescope.com' })];
8193
+ case 5:
8194
+ enduser = _a.sent();
8195
+ if (!enduser) return [3 /*break*/, 7];
8196
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser.id)];
8197
+ case 6:
8198
+ _a.sent();
8199
+ _a.label = 7;
8200
+ case 7: return [2 /*return*/];
8201
+ }
8202
+ });
8203
+ }); };
7873
8204
  (function () { return __awaiter(void 0, void 0, void 0, function () {
7874
8205
  var err_1, n, _a, _b, _c, _i, returnValidation, t, _d, _f, _g, _h, err_2;
7875
8206
  var _j, _k;
@@ -7882,7 +8213,7 @@ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, funct
7882
8213
  _l.sent();
7883
8214
  _l.label = 2;
7884
8215
  case 2:
7885
- _l.trys.push([2, 47, , 48]);
8216
+ _l.trys.push([2, 49, , 50]);
7886
8217
  form_conditional_logic_tests();
7887
8218
  return [4 /*yield*/, test_weighted_round_robin()];
7888
8219
  case 3:
@@ -7896,11 +8227,10 @@ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, funct
7896
8227
  sdkOtherSub.authenticate(otherSubUserEmail, password),
7897
8228
  sdkSubSub.authenticate(subSubUserEmail, password),
7898
8229
  sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword),
7899
- ])
7900
- // console.log(JSON.stringify(await sdk.bulk_load({ load: [{ model: 'users' }]}), null, 2))
7901
- ];
8230
+ ])];
7902
8231
  case 5:
7903
8232
  _l.sent();
8233
+ console.log("Authentication done");
7904
8234
  // console.log(JSON.stringify(await sdk.bulk_load({ load: [{ model: 'users' }]}), null, 2))
7905
8235
  return [4 /*yield*/, async_test("count exists",
7906
8236
  // @ts-ignore
@@ -7920,120 +8250,126 @@ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, funct
7920
8250
  return [4 /*yield*/, multi_tenant_tests()]; // should come right after setup tests
7921
8251
  case 10:
7922
8252
  _l.sent(); // should come right after setup tests
7923
- return [4 /*yield*/, lockout_tests()];
8253
+ return [4 /*yield*/, register_as_enduser_tests()];
7924
8254
  case 11:
7925
8255
  _l.sent();
7926
- return [4 /*yield*/, self_serve_appointment_booking_tests()];
8256
+ return [4 /*yield*/, sync_tests()];
7927
8257
  case 12:
8258
+ _l.sent();
8259
+ return [4 /*yield*/, lockout_tests()];
8260
+ case 13:
8261
+ _l.sent();
8262
+ return [4 /*yield*/, self_serve_appointment_booking_tests()];
8263
+ case 14:
7928
8264
  _l.sent();
7929
8265
  return [4 /*yield*/, delete_user_tests()
7930
8266
  // await test_send_with_template()
7931
8267
  ];
7932
- case 13:
8268
+ case 15:
7933
8269
  _l.sent();
7934
8270
  // await test_send_with_template()
7935
8271
  return [4 /*yield*/, bulk_read_tests()];
7936
- case 14:
8272
+ case 16:
7937
8273
  // await test_send_with_template()
7938
8274
  _l.sent();
7939
8275
  return [4 /*yield*/, ticket_reminder_tests()];
7940
- case 15:
8276
+ case 17:
7941
8277
  _l.sent();
7942
8278
  return [4 /*yield*/, enduser_access_tags_tests()];
7943
- case 16:
8279
+ case 18:
7944
8280
  _l.sent();
7945
8281
  return [4 /*yield*/, marketing_email_unsubscribe_tests()];
7946
- case 17:
8282
+ case 19:
7947
8283
  _l.sent();
7948
8284
  return [4 /*yield*/, unique_strings_tests()];
7949
- case 18:
8285
+ case 20:
7950
8286
  _l.sent();
7951
8287
  return [4 /*yield*/, alternate_phones_tests()];
7952
- case 19:
8288
+ case 21:
7953
8289
  _l.sent();
7954
8290
  return [4 /*yield*/, ticket_queue_tests()];
7955
- case 20:
8291
+ case 22:
7956
8292
  _l.sent();
7957
8293
  return [4 /*yield*/, no_chained_triggers_tests()];
7958
- case 21:
8294
+ case 23:
7959
8295
  _l.sent();
7960
8296
  return [4 /*yield*/, field_equals_trigger_tests()];
7961
- case 22:
8297
+ case 24:
7962
8298
  _l.sent();
7963
8299
  return [4 /*yield*/, test_ticket_automation_assignment_and_optimization()];
7964
- case 23:
8300
+ case 25:
7965
8301
  _l.sent();
7966
8302
  return [4 /*yield*/, role_based_access_tests()];
7967
- case 24:
8303
+ case 26:
7968
8304
  _l.sent();
7969
8305
  return [4 /*yield*/, automation_trigger_tests()];
7970
- case 25:
8306
+ case 27:
7971
8307
  _l.sent();
7972
8308
  return [4 /*yield*/, enduser_session_tests()];
7973
- case 26:
8309
+ case 28:
7974
8310
  _l.sent();
7975
8311
  return [4 /*yield*/, nextReminderInMS_tests()];
7976
- case 27:
8312
+ case 29:
7977
8313
  _l.sent();
7978
8314
  return [4 /*yield*/, search_tests()];
7979
- case 28:
8315
+ case 30:
7980
8316
  _l.sent();
7981
8317
  return [4 /*yield*/, wait_for_trigger_tests()];
7982
- case 29:
8318
+ case 31:
7983
8319
  _l.sent();
7984
8320
  return [4 /*yield*/, pdf_generation()];
7985
- case 30:
8321
+ case 32:
7986
8322
  _l.sent();
7987
8323
  return [4 /*yield*/, remove_from_journey_on_incoming_comms_tests()];
7988
- case 31:
8324
+ case 33:
7989
8325
  _l.sent();
7990
8326
  return [4 /*yield*/, rate_limit_tests()];
7991
- case 32:
8327
+ case 34:
7992
8328
  _l.sent();
7993
8329
  return [4 /*yield*/, merge_enduser_tests()];
7994
- case 33:
8330
+ case 35:
7995
8331
  _l.sent();
7996
8332
  return [4 /*yield*/, auto_reply_tests()];
7997
- case 34:
8333
+ case 36:
7998
8334
  _l.sent();
7999
8335
  return [4 /*yield*/, sub_organization_enduser_tests()];
8000
- case 35:
8336
+ case 37:
8001
8337
  _l.sent();
8002
8338
  return [4 /*yield*/, sub_organization_tests()];
8003
- case 36:
8339
+ case 38:
8004
8340
  _l.sent();
8005
8341
  return [4 /*yield*/, filter_by_date_tests()];
8006
- case 37:
8342
+ case 39:
8007
8343
  _l.sent();
8008
8344
  return [4 /*yield*/, generate_user_auth_tests()];
8009
- case 38:
8345
+ case 40:
8010
8346
  _l.sent();
8011
8347
  return [4 /*yield*/, generateEnduserAuthTests()];
8012
- case 39:
8348
+ case 41:
8013
8349
  _l.sent();
8014
8350
  return [4 /*yield*/, public_form_tests()];
8015
- case 40:
8351
+ case 42:
8016
8352
  _l.sent();
8017
8353
  return [4 /*yield*/, badInputTests()];
8018
- case 41:
8354
+ case 43:
8019
8355
  _l.sent();
8020
8356
  return [4 /*yield*/, filterTests()];
8021
- case 42:
8357
+ case 44:
8022
8358
  _l.sent();
8023
8359
  return [4 /*yield*/, updatesTests()];
8024
- case 43:
8360
+ case 45:
8025
8361
  _l.sent();
8026
8362
  return [4 /*yield*/, threadKeyTests()];
8027
- case 44:
8363
+ case 46:
8028
8364
  _l.sent();
8029
8365
  return [4 /*yield*/, enduserAccessTests()];
8030
- case 45:
8366
+ case 47:
8031
8367
  _l.sent();
8032
8368
  return [4 /*yield*/, enduser_redaction_tests()];
8033
- case 46:
8369
+ case 48:
8034
8370
  _l.sent();
8035
- return [3 /*break*/, 48];
8036
- case 47:
8371
+ return [3 /*break*/, 50];
8372
+ case 49:
8037
8373
  err_1 = _l.sent();
8038
8374
  console.error("Failed during custom test");
8039
8375
  if (err_1.message && err_1.info) {
@@ -8043,18 +8379,18 @@ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, funct
8043
8379
  console.error(err_1);
8044
8380
  }
8045
8381
  process.exit(1);
8046
- return [3 /*break*/, 48];
8047
- case 48:
8382
+ return [3 /*break*/, 50];
8383
+ case 50:
8048
8384
  _a = schema;
8049
8385
  _b = [];
8050
8386
  for (_c in _a)
8051
8387
  _b.push(_c);
8052
8388
  _i = 0;
8053
- _l.label = 49;
8054
- case 49:
8055
- if (!(_i < _b.length)) return [3 /*break*/, 52];
8389
+ _l.label = 51;
8390
+ case 51:
8391
+ if (!(_i < _b.length)) return [3 /*break*/, 54];
8056
8392
  _c = _b[_i];
8057
- if (!(_c in _a)) return [3 /*break*/, 51];
8393
+ if (!(_c in _a)) return [3 /*break*/, 53];
8058
8394
  n = _c;
8059
8395
  returnValidation = (_k = (_j = schema[n].customActions) === null || _j === void 0 ? void 0 : _j.create) === null || _k === void 0 ? void 0 : _k.returns;
8060
8396
  return [4 /*yield*/, run_generated_tests({
@@ -8065,41 +8401,41 @@ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, funct
8065
8401
  create: returnValidation // ModelFields<ClientModel>,
8066
8402
  }
8067
8403
  })];
8068
- case 50:
8404
+ case 52:
8069
8405
  _l.sent();
8070
- _l.label = 51;
8071
- case 51:
8406
+ _l.label = 53;
8407
+ case 53:
8072
8408
  _i++;
8073
- return [3 /*break*/, 49];
8074
- case 52:
8409
+ return [3 /*break*/, 51];
8410
+ case 54:
8075
8411
  _d = tests;
8076
8412
  _f = [];
8077
8413
  for (_g in _d)
8078
8414
  _f.push(_g);
8079
8415
  _h = 0;
8080
- _l.label = 53;
8081
- case 53:
8082
- if (!(_h < _f.length)) return [3 /*break*/, 58];
8416
+ _l.label = 55;
8417
+ case 55:
8418
+ if (!(_h < _f.length)) return [3 /*break*/, 60];
8083
8419
  _g = _f[_h];
8084
- if (!(_g in _d)) return [3 /*break*/, 57];
8420
+ if (!(_g in _d)) return [3 /*break*/, 59];
8085
8421
  t = _g;
8086
- _l.label = 54;
8087
- case 54:
8088
- _l.trys.push([54, 56, , 57]);
8422
+ _l.label = 56;
8423
+ case 56:
8424
+ _l.trys.push([56, 58, , 59]);
8089
8425
  return [4 /*yield*/, tests[t]()];
8090
- case 55:
8426
+ case 57:
8091
8427
  _l.sent();
8092
- return [3 /*break*/, 57];
8093
- case 56:
8428
+ return [3 /*break*/, 59];
8429
+ case 58:
8094
8430
  err_2 = _l.sent();
8095
8431
  console.error("Error running test:");
8096
8432
  console.error(err_2);
8097
8433
  process.exit(1);
8098
- return [3 /*break*/, 57];
8099
- case 57:
8434
+ return [3 /*break*/, 59];
8435
+ case 59:
8100
8436
  _h++;
8101
- return [3 /*break*/, 53];
8102
- case 58:
8437
+ return [3 /*break*/, 55];
8438
+ case 60:
8103
8439
  process.exit();
8104
8440
  return [2 /*return*/];
8105
8441
  }