@tellescope/sdk 1.75.0 → 1.76.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.
@@ -4879,7 +4879,7 @@ export var filter_by_date_tests = function () { return __awaiter(void 0, void 0,
4879
4879
  });
4880
4880
  }); };
4881
4881
  export var self_serve_appointment_booking_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
4882
- var e1, e2, event15min, event30min, dayOfWeekStartingSundayIndexedByZero, nySlots, bookedAppointment, conflict, multiSlots, bookedMultiAppointment;
4882
+ var e1, e2, e3, event15min, event30min, event30minGroup, dayOfWeekStartingSundayIndexedByZero, enduserSDK2, enduserSDK3, nySlots, bookedAppointment, conflict, groupEvent, multiSlots, bookedMultiAppointment;
4883
4883
  return __generator(this, function (_a) {
4884
4884
  switch (_a.label) {
4885
4885
  case 0:
@@ -4890,28 +4890,42 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
4890
4890
  return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'sebass+ca@tellescope.com', state: 'CA' })];
4891
4891
  case 2:
4892
4892
  e2 = _a.sent();
4893
- return [4 /*yield*/, sdk.api.endusers.set_password({ id: e1.id, password: password })];
4893
+ return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'sebass+3@tellescope.com' })];
4894
4894
  case 3:
4895
+ e3 = _a.sent();
4896
+ return [4 /*yield*/, sdk.api.endusers.set_password({ id: e1.id, password: password })];
4897
+ case 4:
4895
4898
  _a.sent();
4896
4899
  return [4 /*yield*/, sdk.api.endusers.set_password({ id: e2.id, password: password })];
4897
- case 4:
4900
+ case 5:
4901
+ _a.sent();
4902
+ return [4 /*yield*/, sdk.api.endusers.set_password({ id: e3.id, password: password })];
4903
+ case 6:
4898
4904
  _a.sent();
4899
4905
  return [4 /*yield*/, sdk.api.calendar_event_templates.createOne({
4900
4906
  title: 'test 2', durationInMinutes: 15,
4901
4907
  confirmationEmailDisabled: true,
4902
4908
  confirmationSMSDisabled: true,
4903
4909
  })];
4904
- case 5:
4910
+ case 7:
4905
4911
  event15min = _a.sent();
4906
4912
  return [4 /*yield*/, sdk.api.calendar_event_templates.createOne({
4907
4913
  title: 'test 1', durationInMinutes: 30,
4908
4914
  confirmationEmailDisabled: true,
4909
4915
  confirmationSMSDisabled: true,
4916
+ })];
4917
+ case 8:
4918
+ event30min = _a.sent();
4919
+ return [4 /*yield*/, sdk.api.calendar_event_templates.createOne({
4920
+ title: 'test group', durationInMinutes: 30,
4921
+ confirmationEmailDisabled: true,
4922
+ confirmationSMSDisabled: true,
4923
+ enduserAttendeeLimit: 2,
4910
4924
  })
4911
4925
  // ensure it doesn't match current day, to avoid errors on testing
4912
4926
  ];
4913
- case 6:
4914
- event30min = _a.sent();
4927
+ case 9:
4928
+ event30minGroup = _a.sent();
4915
4929
  dayOfWeekStartingSundayIndexedByZero = (new Date().getDay() + 1) % 7;
4916
4930
  return [4 /*yield*/, sdk.api.users.updateOne(sdk.userInfo.id, {
4917
4931
  weeklyAvailabilities: [
@@ -4931,7 +4945,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
4931
4945
  }, {
4932
4946
  replaceObjectFields: true,
4933
4947
  })];
4934
- case 7:
4948
+ case 10:
4935
4949
  _a.sent();
4936
4950
  return [4 /*yield*/, sdkNonAdmin.api.users.updateOne(sdkNonAdmin.userInfo.id, {
4937
4951
  weeklyAvailabilities: [
@@ -4945,14 +4959,22 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
4945
4959
  timezone: 'America/Los_Angeles',
4946
4960
  }, {
4947
4961
  replaceObjectFields: true,
4948
- })
4962
+ })];
4963
+ case 11:
4964
+ _a.sent();
4965
+ enduserSDK2 = new EnduserSession({ host: host, businessId: businessId });
4966
+ return [4 /*yield*/, enduserSDK2.authenticate('sebass+ca@tellescope.com', password).catch(console.error)];
4967
+ case 12:
4968
+ _a.sent();
4969
+ enduserSDK3 = new EnduserSession({ host: host, businessId: businessId });
4970
+ return [4 /*yield*/, enduserSDK3.authenticate('sebass+3@tellescope.com', password).catch(console.error)
4949
4971
  // NY Enduser Tests
4950
4972
  ];
4951
- case 8:
4973
+ case 13:
4952
4974
  _a.sent();
4953
4975
  // NY Enduser Tests
4954
4976
  return [4 /*yield*/, enduserSDK.authenticate('sebass+ny@tellescope.com', password).catch(console.error)];
4955
- case 9:
4977
+ case 14:
4956
4978
  // NY Enduser Tests
4957
4979
  _a.sent();
4958
4980
  return [4 /*yield*/, async_test('30 minute slots for state restriction', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
@@ -4961,7 +4983,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
4961
4983
  to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
4962
4984
  restrictedByState: true,
4963
4985
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 2; } })];
4964
- case 10:
4986
+ case 15:
4965
4987
  _a.sent();
4966
4988
  return [4 /*yield*/, async_test('30 minute slots for state restriction with 15 min interval', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
4967
4989
  calendarEventTemplateId: event30min.id,
@@ -4970,7 +4992,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
4970
4992
  restrictedByState: true,
4971
4993
  intervalInMinutes: 15,
4972
4994
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 3; } })];
4973
- case 11:
4995
+ case 16:
4974
4996
  _a.sent();
4975
4997
  return [4 /*yield*/, async_test('30 minute slots for state restriction with 10 min interval', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
4976
4998
  calendarEventTemplateId: event30min.id,
@@ -4979,7 +5001,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
4979
5001
  restrictedByState: true,
4980
5002
  intervalInMinutes: 10,
4981
5003
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 4; } })];
4982
- case 12:
5004
+ case 17:
4983
5005
  _a.sent();
4984
5006
  return [4 /*yield*/, async_test('30 minute slots for no state restrictions', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
4985
5007
  calendarEventTemplateId: event30min.id,
@@ -4998,7 +5020,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
4998
5020
  }
4999
5021
  return true;
5000
5022
  } })];
5001
- case 13:
5023
+ case 18:
5002
5024
  _a.sent();
5003
5025
  return [4 /*yield*/, enduserSDK.api.calendar_events.get_appointment_availability({
5004
5026
  calendarEventTemplateId: event30min.id,
@@ -5006,7 +5028,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
5006
5028
  to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
5007
5029
  restrictedByState: true,
5008
5030
  })];
5009
- case 14:
5031
+ case 19:
5010
5032
  nySlots = _a.sent();
5011
5033
  return [4 /*yield*/, enduserSDK.api.calendar_events.book_appointment({
5012
5034
  calendarEventTemplateId: event30min.id,
@@ -5017,7 +5039,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
5017
5039
  fields: "Test",
5018
5040
  }
5019
5041
  })];
5020
- case 15:
5042
+ case 20:
5021
5043
  bookedAppointment = (_a.sent()).createdEvent;
5022
5044
  assert(bookedAppointment.attendees.length === 2, 'did not get 2 attendees', '2 attendees fo non-multi-event');
5023
5045
  return [4 /*yield*/, async_test('double-booking prevented', function () { return enduserSDK.api.calendar_events.book_appointment({
@@ -5025,7 +5047,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
5025
5047
  startTime: new Date(nySlots.availabilityBlocks[0].startTimeInMS),
5026
5048
  userId: nySlots.availabilityBlocks[0].userId,
5027
5049
  }); }, handleAnyError)];
5028
- case 16:
5050
+ case 21:
5029
5051
  _a.sent();
5030
5052
  return [4 /*yield*/, async_test('30 minute slots for state restriction with 1 overlapping conflict', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
5031
5053
  calendarEventTemplateId: event30min.id,
@@ -5037,14 +5059,14 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
5037
5059
  && r.availabilityBlocks[0].startTimeInMS === nySlots.availabilityBlocks[1].startTimeInMS;
5038
5060
  } // the first slot of nySlots is booked
5039
5061
  })];
5040
- case 17:
5062
+ case 22:
5041
5063
  _a.sent();
5042
5064
  return [4 /*yield*/, sdk.api.calendar_events.createOne({
5043
5065
  title: 'conflict',
5044
5066
  startTimeInMS: nySlots.availabilityBlocks[1].startTimeInMS,
5045
5067
  durationInMinutes: nySlots.availabilityBlocks[1].durationInMinutes,
5046
5068
  })];
5047
- case 18:
5069
+ case 23:
5048
5070
  conflict = _a.sent();
5049
5071
  return [4 /*yield*/, async_test('30 minute slots for state restriction with 2 overlapping conflict', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
5050
5072
  calendarEventTemplateId: event30min.id,
@@ -5052,16 +5074,82 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
5052
5074
  to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
5053
5075
  restrictedByState: true,
5054
5076
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 0; } })];
5055
- case 19:
5077
+ case 24:
5056
5078
  _a.sent();
5057
5079
  return [4 /*yield*/, async_test('booking against conflict prevented', function () { return enduserSDK.api.calendar_events.book_appointment({
5058
5080
  calendarEventTemplateId: event30min.id,
5059
5081
  startTime: new Date(nySlots.availabilityBlocks[1].startTimeInMS),
5060
5082
  userId: nySlots.availabilityBlocks[1].userId,
5061
5083
  }); }, handleAnyError)
5084
+ // test group bookings
5085
+ ];
5086
+ case 25:
5087
+ _a.sent();
5088
+ // test group bookings
5089
+ return [4 /*yield*/, sdk.api.calendar_events.updateOne(conflict.id, { enduserAttendeeLimit: 2 })];
5090
+ case 26:
5091
+ // test group bookings
5092
+ _a.sent();
5093
+ return [4 /*yield*/, async_test('[group booking] different event type conflict as group still blocks availability', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
5094
+ calendarEventTemplateId: event30minGroup.id,
5095
+ from: new Date(Date.now() - 10000),
5096
+ to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
5097
+ }); }, { onResult: function (r) { return r.availabilityBlocks.length === 2; } })];
5098
+ case 27:
5099
+ _a.sent();
5100
+ return [4 /*yield*/, sdk.api.calendar_events.deleteOne(conflict.id)];
5101
+ case 28:
5102
+ _a.sent();
5103
+ return [4 /*yield*/, async_test('[group booking] availability', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
5104
+ calendarEventTemplateId: event30minGroup.id,
5105
+ from: new Date(Date.now() - 10000),
5106
+ to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
5107
+ }); }, { onResult: function (r) { return r.availabilityBlocks.length === 3; } })];
5108
+ case 29:
5109
+ _a.sent();
5110
+ return [4 /*yield*/, enduserSDK.api.calendar_events.book_appointment({
5111
+ calendarEventTemplateId: event30minGroup.id,
5112
+ startTime: new Date(nySlots.availabilityBlocks[1].startTimeInMS),
5113
+ userId: nySlots.availabilityBlocks[1].userId,
5114
+ })];
5115
+ case 30:
5116
+ groupEvent = (_a.sent()).createdEvent;
5117
+ return [4 /*yield*/, async_test('[group booking] more booking allowed', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
5118
+ calendarEventTemplateId: event30minGroup.id,
5119
+ from: new Date(Date.now() - 10000),
5120
+ to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
5121
+ }); }, { onResult: function (r) { return r.availabilityBlocks.length === 3; } })];
5122
+ case 31:
5123
+ _a.sent();
5124
+ return [4 /*yield*/, async_test('[group booking] prevent double-book same-enduser', function () { return enduserSDK.api.calendar_events.book_appointment({
5125
+ calendarEventTemplateId: event30minGroup.id,
5126
+ startTime: new Date(nySlots.availabilityBlocks[1].startTimeInMS),
5127
+ userId: nySlots.availabilityBlocks[1].userId,
5128
+ }); }, handleAnyError)];
5129
+ case 32:
5130
+ _a.sent();
5131
+ return [4 /*yield*/, async_test('[group booking] allow other enduser to book', function () { return enduserSDK2.api.calendar_events.book_appointment({
5132
+ calendarEventTemplateId: event30minGroup.id,
5133
+ startTime: new Date(nySlots.availabilityBlocks[1].startTimeInMS),
5134
+ userId: nySlots.availabilityBlocks[1].userId,
5135
+ }); }, passOnAnyResult)];
5136
+ case 33:
5137
+ _a.sent();
5138
+ return [4 /*yield*/, async_test('[group booking] no more booking allowed', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
5139
+ calendarEventTemplateId: event30minGroup.id,
5140
+ from: new Date(Date.now() - 10000),
5141
+ to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
5142
+ }); }, { onResult: function (r) { return r.availabilityBlocks.length === 2; } })];
5143
+ case 34:
5144
+ _a.sent();
5145
+ return [4 /*yield*/, async_test('[group booking] other enduser cant book over capacity', function () { return enduserSDK3.api.calendar_events.book_appointment({
5146
+ calendarEventTemplateId: event30minGroup.id,
5147
+ startTime: new Date(nySlots.availabilityBlocks[1].startTimeInMS),
5148
+ userId: nySlots.availabilityBlocks[1].userId,
5149
+ }); }, handleAnyError)
5062
5150
  // test 'multi' flag for booking multiple providers for a given patient
5063
5151
  ];
5064
- case 20:
5152
+ case 35:
5065
5153
  _a.sent();
5066
5154
  // test 'multi' flag for booking multiple providers for a given patient
5067
5155
  return [4 /*yield*/, sdk.api.users.updateOne(sdk.userInfo.id, {
@@ -5076,7 +5164,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
5076
5164
  }, {
5077
5165
  replaceObjectFields: true,
5078
5166
  })];
5079
- case 21:
5167
+ case 36:
5080
5168
  // test 'multi' flag for booking multiple providers for a given patient
5081
5169
  _a.sent();
5082
5170
  return [4 /*yield*/, sdkNonAdmin.api.users.updateOne(sdkNonAdmin.userInfo.id, {
@@ -5091,7 +5179,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
5091
5179
  }, {
5092
5180
  replaceObjectFields: true,
5093
5181
  })];
5094
- case 22:
5182
+ case 37:
5095
5183
  _a.sent();
5096
5184
  return [4 /*yield*/, enduserSDK.api.calendar_events.get_appointment_availability({
5097
5185
  calendarEventTemplateId: event30min.id,
@@ -5100,7 +5188,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
5100
5188
  multi: true,
5101
5189
  userIds: [sdk.userInfo.id, sdkNonAdmin.userInfo.id]
5102
5190
  })];
5103
- case 23:
5191
+ case 38:
5104
5192
  multiSlots = _a.sent();
5105
5193
  assert(multiSlots.availabilityBlocks.length === 2, 'expected 2 slots', 'multi slots are intersection of availability');
5106
5194
  return [4 /*yield*/, enduserSDK.api.calendar_events.book_appointment({
@@ -5109,7 +5197,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
5109
5197
  userId: sdk.userInfo.id,
5110
5198
  otherUserIds: [sdkNonAdmin.userInfo.id]
5111
5199
  })];
5112
- case 24:
5200
+ case 39:
5113
5201
  bookedMultiAppointment = (_a.sent()).createdEvent;
5114
5202
  assert((bookedMultiAppointment.attendees.length === 3
5115
5203
  && bookedMultiAppointment.attendees.filter(function (a) { return a.type === 'enduser'; }).length === 1), 'did not get valid attendees', 'Multi attendees fo multi-event');
@@ -5118,14 +5206,14 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
5118
5206
  startTime: new Date(multiSlots.availabilityBlocks[0].startTimeInMS),
5119
5207
  userId: sdk.userInfo.id,
5120
5208
  }); }, handleAnyError)];
5121
- case 25:
5209
+ case 40:
5122
5210
  _a.sent();
5123
5211
  return [4 /*yield*/, async_test('booking against conflict prevented other user', function () { return enduserSDK.api.calendar_events.book_appointment({
5124
5212
  calendarEventTemplateId: event30min.id,
5125
5213
  startTime: new Date(multiSlots.availabilityBlocks[0].startTimeInMS),
5126
5214
  userId: sdkNonAdmin.userInfo.id,
5127
5215
  }); }, handleAnyError)];
5128
- case 26:
5216
+ case 41:
5129
5217
  _a.sent();
5130
5218
  return [4 /*yield*/, async_test('booking against conflict prevented 2 users', function () { return enduserSDK.api.calendar_events.book_appointment({
5131
5219
  calendarEventTemplateId: event30min.id,
@@ -5133,18 +5221,20 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
5133
5221
  userId: sdk.userInfo.id,
5134
5222
  otherUserIds: [sdkNonAdmin.userInfo.id],
5135
5223
  }); }, handleAnyError)];
5136
- case 27:
5224
+ case 42:
5137
5225
  _a.sent();
5138
5226
  return [4 /*yield*/, Promise.all([
5139
5227
  sdk.api.endusers.deleteOne(e1.id),
5140
5228
  sdk.api.endusers.deleteOne(e2.id),
5229
+ sdk.api.endusers.deleteOne(e3.id),
5141
5230
  sdk.api.calendar_event_templates.deleteOne(event30min.id),
5231
+ sdk.api.calendar_event_templates.deleteOne(event30minGroup.id),
5142
5232
  sdk.api.calendar_event_templates.deleteOne(event15min.id),
5143
5233
  sdk.api.calendar_events.deleteOne(bookedAppointment.id),
5144
- sdk.api.calendar_events.deleteOne(conflict.id),
5145
5234
  sdk.api.calendar_events.deleteOne(bookedMultiAppointment.id),
5235
+ sdk.api.calendar_events.deleteOne(groupEvent.id),
5146
5236
  ])];
5147
- case 28:
5237
+ case 43:
5148
5238
  _a.sent();
5149
5239
  return [2 /*return*/];
5150
5240
  }
@@ -7631,11 +7721,13 @@ var test_send_with_template = function () { return __awaiter(void 0, void 0, voi
7631
7721
  });
7632
7722
  }); };
7633
7723
  var delete_user_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
7634
- var existing, u, authToken, createdUserSDK;
7724
+ var existing, u, authToken, createdUserSDK, enduser, enduserAuthToken, enduserSDK;
7635
7725
  var _a;
7636
7726
  return __generator(this, function (_b) {
7637
7727
  switch (_b.label) {
7638
- case 0: return [4 /*yield*/, sdk.api.users.getSome({ filter: { email: 'deleteme@tellescope.com' } })];
7728
+ case 0:
7729
+ log_header("Delete user tests");
7730
+ return [4 /*yield*/, sdk.api.users.getSome({ filter: { email: 'deleteme@tellescope.com' } })];
7639
7731
  case 1:
7640
7732
  existing = _b.sent();
7641
7733
  if (!(((_a = existing[0]) === null || _a === void 0 ? void 0 : _a.email) === 'deleteme@tellescope.com')) return [3 /*break*/, 3];
@@ -7661,11 +7753,123 @@ var delete_user_tests = function () { return __awaiter(void 0, void 0, void 0, f
7661
7753
  _b.sent();
7662
7754
  return [4 /*yield*/, async_test("De-authenticated after deletion", createdUserSDK.test_authenticated, handleAnyError)];
7663
7755
  case 9:
7756
+ _b.sent();
7757
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
7758
+ case 10:
7759
+ enduser = _b.sent();
7760
+ return [4 /*yield*/, sdk.api.endusers.generate_auth_token({ id: enduser.id })];
7761
+ case 11:
7762
+ enduserAuthToken = (_b.sent()).authToken;
7763
+ enduserSDK = new EnduserSession({ host: host, businessId: businessId, authToken: enduserAuthToken });
7764
+ return [4 /*yield*/, async_test("Enduser Authenticated", function () { return enduserSDK.api.endusers.getSome(); }, passOnAnyResult)];
7765
+ case 12:
7766
+ _b.sent();
7767
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser.id)];
7768
+ case 13:
7769
+ _b.sent();
7770
+ return [4 /*yield*/, wait(undefined, 250)];
7771
+ case 14:
7772
+ _b.sent();
7773
+ return [4 /*yield*/, async_test("Enduser De-authenticated after deletion", function () { return enduserSDK.api.endusers.getSome(); }, handleAnyError)];
7774
+ case 15:
7664
7775
  _b.sent();
7665
7776
  return [2 /*return*/];
7666
7777
  }
7667
7778
  });
7668
7779
  }); };
7780
+ var sdkMfaApiKeyUserId = '6525a43e1e75f0350d62afc4';
7781
+ var lockout_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
7782
+ var nonAdminId;
7783
+ return __generator(this, function (_a) {
7784
+ switch (_a.label) {
7785
+ case 0:
7786
+ log_header("Lockout tests");
7787
+ return [4 /*yield*/, async_test("API Key is authenticated", sdkMfaApiKey.test_authenticated, passOnAnyResult)];
7788
+ case 1:
7789
+ _a.sent();
7790
+ return [4 /*yield*/, async_test("API Key lock to future date", function () { return sdk.api.users.updateOne(sdkMfaApiKeyUserId, { lockedOutUntil: 0 }); }, passOnAnyResult)];
7791
+ case 2:
7792
+ _a.sent();
7793
+ return [4 /*yield*/, wait(undefined, 250)];
7794
+ case 3:
7795
+ _a.sent();
7796
+ return [4 /*yield*/, async_test("API Key is de-authenticated when locked", sdkMfaApiKey.test_authenticated, handleAnyError)];
7797
+ case 4:
7798
+ _a.sent();
7799
+ return [4 /*yield*/, async_test("API Key unlock to -1", function () { return sdk.api.users.updateOne(sdkMfaApiKeyUserId, { lockedOutUntil: -1 }); }, passOnAnyResult)];
7800
+ case 5:
7801
+ _a.sent();
7802
+ return [4 /*yield*/, async_test("API Key is authenticated", sdkMfaApiKey.test_authenticated, passOnAnyResult)];
7803
+ case 6:
7804
+ _a.sent();
7805
+ nonAdminId = sdkNonAdmin.userInfo.id;
7806
+ return [4 /*yield*/, async_test("users cannot update own lock status", function () { return sdk.api.users.updateOne(sdk.userInfo.id, { lockedOutUntil: -1 }); }, handleAnyError)];
7807
+ case 7:
7808
+ _a.sent();
7809
+ return [4 /*yield*/, async_test("non-admin can't lock out others", function () { return sdkNonAdmin.api.users.updateOne(sdk.userInfo.id, { lockedOutUntil: Date.now() }); }, handleAnyError)];
7810
+ case 8:
7811
+ _a.sent();
7812
+ return [4 /*yield*/, async_test("non-admin is authenticated", sdkNonAdmin.test_authenticated, passOnAnyResult)];
7813
+ case 9:
7814
+ _a.sent();
7815
+ return [4 /*yield*/, async_test("admin unlock to -1", function () { return sdk.api.users.updateOne(nonAdminId, { lockedOutUntil: -1 }); }, passOnAnyResult)];
7816
+ case 10:
7817
+ _a.sent();
7818
+ return [4 /*yield*/, async_test("non-admin is authenticated (-1)", sdkNonAdmin.test_authenticated, passOnAnyResult)];
7819
+ case 11:
7820
+ _a.sent();
7821
+ return [4 /*yield*/, async_test("admin lock to past date", function () { return sdk.api.users.updateOne(nonAdminId, { lockedOutUntil: Date.now() - 1000 }); }, passOnAnyResult)];
7822
+ case 12:
7823
+ _a.sent();
7824
+ return [4 /*yield*/, async_test("non-admin is authenticated (past date)", sdkNonAdmin.test_authenticated, passOnAnyResult)];
7825
+ case 13:
7826
+ _a.sent();
7827
+ return [4 /*yield*/, async_test("admin lock to 0 (indefinite)", function () { return sdk.api.users.updateOne(nonAdminId, { lockedOutUntil: 0 }); }, passOnAnyResult)];
7828
+ case 14:
7829
+ _a.sent();
7830
+ return [4 /*yield*/, wait(undefined, 250)];
7831
+ case 15:
7832
+ _a.sent();
7833
+ return [4 /*yield*/, async_test("non-admin is de-authenticated when locked to 0", sdkNonAdmin.test_authenticated, handleAnyError)];
7834
+ case 16:
7835
+ _a.sent();
7836
+ return [4 /*yield*/, async_test("non-admin can't authenciate when locked to 0", function () { return sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword); }, handleAnyError)];
7837
+ case 17:
7838
+ _a.sent();
7839
+ return [4 /*yield*/, async_test("admin unlock to -1", function () { return sdk.api.users.updateOne(nonAdminId, { lockedOutUntil: -1 }); }, passOnAnyResult)];
7840
+ case 18:
7841
+ _a.sent();
7842
+ return [4 /*yield*/, async_test("non-admin can re authenciate when locked to 0", function () { return sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword); }, passOnAnyResult)];
7843
+ case 19:
7844
+ _a.sent();
7845
+ return [4 /*yield*/, async_test("non-admin is authenticated", sdkNonAdmin.test_authenticated, passOnAnyResult)];
7846
+ case 20:
7847
+ _a.sent();
7848
+ return [4 /*yield*/, async_test("admin lock to future date", function () { return sdk.api.users.updateOne(nonAdminId, { lockedOutUntil: Date.now() + 10000 }); }, passOnAnyResult)];
7849
+ case 21:
7850
+ _a.sent();
7851
+ return [4 /*yield*/, wait(undefined, 250)];
7852
+ case 22:
7853
+ _a.sent();
7854
+ return [4 /*yield*/, async_test("non-admin is de-authenticated when locked to future date", sdkNonAdmin.test_authenticated, handleAnyError)];
7855
+ case 23:
7856
+ _a.sent();
7857
+ return [4 /*yield*/, async_test("non-admin can't authenciate when locked to future date", function () { return sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword); }, handleAnyError)];
7858
+ case 24:
7859
+ _a.sent();
7860
+ return [4 /*yield*/, async_test("admin unlock to -1", function () { return sdk.api.users.updateOne(nonAdminId, { lockedOutUntil: -1 }); }, passOnAnyResult)];
7861
+ case 25:
7862
+ _a.sent();
7863
+ return [4 /*yield*/, async_test("non-admin can re authenciate when locked to future date", function () { return sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword); }, passOnAnyResult)];
7864
+ case 26:
7865
+ _a.sent();
7866
+ return [4 /*yield*/, async_test("non-admin is authenticated", sdkNonAdmin.test_authenticated, passOnAnyResult)];
7867
+ case 27:
7868
+ _a.sent();
7869
+ return [2 /*return*/];
7870
+ }
7871
+ });
7872
+ }); };
7669
7873
  (function () { return __awaiter(void 0, void 0, void 0, function () {
7670
7874
  var err_1, n, _a, _b, _c, _i, returnValidation, t, _d, _f, _g, _h, err_2;
7671
7875
  var _j, _k;
@@ -7678,7 +7882,7 @@ var delete_user_tests = function () { return __awaiter(void 0, void 0, void 0, f
7678
7882
  _l.sent();
7679
7883
  _l.label = 2;
7680
7884
  case 2:
7681
- _l.trys.push([2, 46, , 47]);
7885
+ _l.trys.push([2, 47, , 48]);
7682
7886
  form_conditional_logic_tests();
7683
7887
  return [4 /*yield*/, test_weighted_round_robin()];
7684
7888
  case 3:
@@ -7716,117 +7920,120 @@ var delete_user_tests = function () { return __awaiter(void 0, void 0, void 0, f
7716
7920
  return [4 /*yield*/, multi_tenant_tests()]; // should come right after setup tests
7717
7921
  case 10:
7718
7922
  _l.sent(); // should come right after setup tests
7719
- return [4 /*yield*/, delete_user_tests()
7720
- // await test_send_with_template()
7721
- ];
7923
+ return [4 /*yield*/, lockout_tests()];
7722
7924
  case 11:
7723
7925
  _l.sent();
7724
- // await test_send_with_template()
7725
7926
  return [4 /*yield*/, self_serve_appointment_booking_tests()];
7726
7927
  case 12:
7727
- // await test_send_with_template()
7728
7928
  _l.sent();
7729
- return [4 /*yield*/, bulk_read_tests()];
7929
+ return [4 /*yield*/, delete_user_tests()
7930
+ // await test_send_with_template()
7931
+ ];
7730
7932
  case 13:
7731
7933
  _l.sent();
7732
- return [4 /*yield*/, ticket_reminder_tests()];
7934
+ // await test_send_with_template()
7935
+ return [4 /*yield*/, bulk_read_tests()];
7733
7936
  case 14:
7937
+ // await test_send_with_template()
7734
7938
  _l.sent();
7735
- return [4 /*yield*/, enduser_access_tags_tests()];
7939
+ return [4 /*yield*/, ticket_reminder_tests()];
7736
7940
  case 15:
7737
7941
  _l.sent();
7738
- return [4 /*yield*/, marketing_email_unsubscribe_tests()];
7942
+ return [4 /*yield*/, enduser_access_tags_tests()];
7739
7943
  case 16:
7740
7944
  _l.sent();
7741
- return [4 /*yield*/, unique_strings_tests()];
7945
+ return [4 /*yield*/, marketing_email_unsubscribe_tests()];
7742
7946
  case 17:
7743
7947
  _l.sent();
7744
- return [4 /*yield*/, alternate_phones_tests()];
7948
+ return [4 /*yield*/, unique_strings_tests()];
7745
7949
  case 18:
7746
7950
  _l.sent();
7747
- return [4 /*yield*/, ticket_queue_tests()];
7951
+ return [4 /*yield*/, alternate_phones_tests()];
7748
7952
  case 19:
7749
7953
  _l.sent();
7750
- return [4 /*yield*/, no_chained_triggers_tests()];
7954
+ return [4 /*yield*/, ticket_queue_tests()];
7751
7955
  case 20:
7752
7956
  _l.sent();
7753
- return [4 /*yield*/, field_equals_trigger_tests()];
7957
+ return [4 /*yield*/, no_chained_triggers_tests()];
7754
7958
  case 21:
7755
7959
  _l.sent();
7756
- return [4 /*yield*/, test_ticket_automation_assignment_and_optimization()];
7960
+ return [4 /*yield*/, field_equals_trigger_tests()];
7757
7961
  case 22:
7758
7962
  _l.sent();
7759
- return [4 /*yield*/, role_based_access_tests()];
7963
+ return [4 /*yield*/, test_ticket_automation_assignment_and_optimization()];
7760
7964
  case 23:
7761
7965
  _l.sent();
7762
- return [4 /*yield*/, automation_trigger_tests()];
7966
+ return [4 /*yield*/, role_based_access_tests()];
7763
7967
  case 24:
7764
7968
  _l.sent();
7765
- return [4 /*yield*/, enduser_session_tests()];
7969
+ return [4 /*yield*/, automation_trigger_tests()];
7766
7970
  case 25:
7767
7971
  _l.sent();
7768
- return [4 /*yield*/, nextReminderInMS_tests()];
7972
+ return [4 /*yield*/, enduser_session_tests()];
7769
7973
  case 26:
7770
7974
  _l.sent();
7771
- return [4 /*yield*/, search_tests()];
7975
+ return [4 /*yield*/, nextReminderInMS_tests()];
7772
7976
  case 27:
7773
7977
  _l.sent();
7774
- return [4 /*yield*/, wait_for_trigger_tests()];
7978
+ return [4 /*yield*/, search_tests()];
7775
7979
  case 28:
7776
7980
  _l.sent();
7777
- return [4 /*yield*/, pdf_generation()];
7981
+ return [4 /*yield*/, wait_for_trigger_tests()];
7778
7982
  case 29:
7779
7983
  _l.sent();
7780
- return [4 /*yield*/, remove_from_journey_on_incoming_comms_tests()];
7984
+ return [4 /*yield*/, pdf_generation()];
7781
7985
  case 30:
7782
7986
  _l.sent();
7783
- return [4 /*yield*/, rate_limit_tests()];
7987
+ return [4 /*yield*/, remove_from_journey_on_incoming_comms_tests()];
7784
7988
  case 31:
7785
7989
  _l.sent();
7786
- return [4 /*yield*/, merge_enduser_tests()];
7990
+ return [4 /*yield*/, rate_limit_tests()];
7787
7991
  case 32:
7788
7992
  _l.sent();
7789
- return [4 /*yield*/, auto_reply_tests()];
7993
+ return [4 /*yield*/, merge_enduser_tests()];
7790
7994
  case 33:
7791
7995
  _l.sent();
7792
- return [4 /*yield*/, sub_organization_enduser_tests()];
7996
+ return [4 /*yield*/, auto_reply_tests()];
7793
7997
  case 34:
7794
7998
  _l.sent();
7795
- return [4 /*yield*/, sub_organization_tests()];
7999
+ return [4 /*yield*/, sub_organization_enduser_tests()];
7796
8000
  case 35:
7797
8001
  _l.sent();
7798
- return [4 /*yield*/, filter_by_date_tests()];
8002
+ return [4 /*yield*/, sub_organization_tests()];
7799
8003
  case 36:
7800
8004
  _l.sent();
7801
- return [4 /*yield*/, generate_user_auth_tests()];
8005
+ return [4 /*yield*/, filter_by_date_tests()];
7802
8006
  case 37:
7803
8007
  _l.sent();
7804
- return [4 /*yield*/, generateEnduserAuthTests()];
8008
+ return [4 /*yield*/, generate_user_auth_tests()];
7805
8009
  case 38:
7806
8010
  _l.sent();
7807
- return [4 /*yield*/, public_form_tests()];
8011
+ return [4 /*yield*/, generateEnduserAuthTests()];
7808
8012
  case 39:
7809
8013
  _l.sent();
7810
- return [4 /*yield*/, badInputTests()];
8014
+ return [4 /*yield*/, public_form_tests()];
7811
8015
  case 40:
7812
8016
  _l.sent();
7813
- return [4 /*yield*/, filterTests()];
8017
+ return [4 /*yield*/, badInputTests()];
7814
8018
  case 41:
7815
8019
  _l.sent();
7816
- return [4 /*yield*/, updatesTests()];
8020
+ return [4 /*yield*/, filterTests()];
7817
8021
  case 42:
7818
8022
  _l.sent();
7819
- return [4 /*yield*/, threadKeyTests()];
8023
+ return [4 /*yield*/, updatesTests()];
7820
8024
  case 43:
7821
8025
  _l.sent();
7822
- return [4 /*yield*/, enduserAccessTests()];
8026
+ return [4 /*yield*/, threadKeyTests()];
7823
8027
  case 44:
7824
8028
  _l.sent();
7825
- return [4 /*yield*/, enduser_redaction_tests()];
8029
+ return [4 /*yield*/, enduserAccessTests()];
7826
8030
  case 45:
7827
8031
  _l.sent();
7828
- return [3 /*break*/, 47];
8032
+ return [4 /*yield*/, enduser_redaction_tests()];
7829
8033
  case 46:
8034
+ _l.sent();
8035
+ return [3 /*break*/, 48];
8036
+ case 47:
7830
8037
  err_1 = _l.sent();
7831
8038
  console.error("Failed during custom test");
7832
8039
  if (err_1.message && err_1.info) {
@@ -7836,18 +8043,18 @@ var delete_user_tests = function () { return __awaiter(void 0, void 0, void 0, f
7836
8043
  console.error(err_1);
7837
8044
  }
7838
8045
  process.exit(1);
7839
- return [3 /*break*/, 47];
7840
- case 47:
8046
+ return [3 /*break*/, 48];
8047
+ case 48:
7841
8048
  _a = schema;
7842
8049
  _b = [];
7843
8050
  for (_c in _a)
7844
8051
  _b.push(_c);
7845
8052
  _i = 0;
7846
- _l.label = 48;
7847
- case 48:
7848
- if (!(_i < _b.length)) return [3 /*break*/, 51];
8053
+ _l.label = 49;
8054
+ case 49:
8055
+ if (!(_i < _b.length)) return [3 /*break*/, 52];
7849
8056
  _c = _b[_i];
7850
- if (!(_c in _a)) return [3 /*break*/, 50];
8057
+ if (!(_c in _a)) return [3 /*break*/, 51];
7851
8058
  n = _c;
7852
8059
  returnValidation = (_k = (_j = schema[n].customActions) === null || _j === void 0 ? void 0 : _j.create) === null || _k === void 0 ? void 0 : _k.returns;
7853
8060
  return [4 /*yield*/, run_generated_tests({
@@ -7858,41 +8065,41 @@ var delete_user_tests = function () { return __awaiter(void 0, void 0, void 0, f
7858
8065
  create: returnValidation // ModelFields<ClientModel>,
7859
8066
  }
7860
8067
  })];
7861
- case 49:
7862
- _l.sent();
7863
- _l.label = 50;
7864
8068
  case 50:
7865
- _i++;
7866
- return [3 /*break*/, 48];
8069
+ _l.sent();
8070
+ _l.label = 51;
7867
8071
  case 51:
8072
+ _i++;
8073
+ return [3 /*break*/, 49];
8074
+ case 52:
7868
8075
  _d = tests;
7869
8076
  _f = [];
7870
8077
  for (_g in _d)
7871
8078
  _f.push(_g);
7872
8079
  _h = 0;
7873
- _l.label = 52;
7874
- case 52:
7875
- if (!(_h < _f.length)) return [3 /*break*/, 57];
7876
- _g = _f[_h];
7877
- if (!(_g in _d)) return [3 /*break*/, 56];
7878
- t = _g;
7879
8080
  _l.label = 53;
7880
8081
  case 53:
7881
- _l.trys.push([53, 55, , 56]);
7882
- return [4 /*yield*/, tests[t]()];
8082
+ if (!(_h < _f.length)) return [3 /*break*/, 58];
8083
+ _g = _f[_h];
8084
+ if (!(_g in _d)) return [3 /*break*/, 57];
8085
+ t = _g;
8086
+ _l.label = 54;
7883
8087
  case 54:
7884
- _l.sent();
7885
- return [3 /*break*/, 56];
8088
+ _l.trys.push([54, 56, , 57]);
8089
+ return [4 /*yield*/, tests[t]()];
7886
8090
  case 55:
8091
+ _l.sent();
8092
+ return [3 /*break*/, 57];
8093
+ case 56:
7887
8094
  err_2 = _l.sent();
7888
8095
  console.error("Error running test:");
7889
8096
  console.error(err_2);
7890
8097
  process.exit(1);
7891
- return [3 /*break*/, 56];
7892
- case 56:
7893
- _h++;
7894
- return [3 /*break*/, 52];
8098
+ return [3 /*break*/, 57];
7895
8099
  case 57:
8100
+ _h++;
8101
+ return [3 /*break*/, 53];
8102
+ case 58:
7896
8103
  process.exit();
7897
8104
  return [2 /*return*/];
7898
8105
  }