@tellescope/sdk 1.254.0 → 1.255.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.
Files changed (98) hide show
  1. package/lib/cjs/sdk.d.ts +4 -0
  2. package/lib/cjs/sdk.d.ts.map +1 -1
  3. package/lib/cjs/sdk.js +5 -0
  4. package/lib/cjs/sdk.js.map +1 -1
  5. package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.d.ts +16 -0
  6. package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.d.ts.map +1 -0
  7. package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.js +187 -0
  8. package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.js.map +1 -0
  9. package/lib/cjs/tests/api_tests/mdi_case_offerings.test.d.ts +6 -0
  10. package/lib/cjs/tests/api_tests/mdi_case_offerings.test.d.ts.map +1 -0
  11. package/lib/cjs/tests/api_tests/mdi_case_offerings.test.js +443 -0
  12. package/lib/cjs/tests/api_tests/mdi_case_offerings.test.js.map +1 -0
  13. package/lib/cjs/tests/api_tests/order_status_equals_frequency.test.d.ts +6 -0
  14. package/lib/cjs/tests/api_tests/order_status_equals_frequency.test.d.ts.map +1 -0
  15. package/lib/cjs/tests/api_tests/order_status_equals_frequency.test.js +254 -0
  16. package/lib/cjs/tests/api_tests/order_status_equals_frequency.test.js.map +1 -0
  17. package/lib/cjs/tests/api_tests/organization_api_keys.test.d.ts +6 -0
  18. package/lib/cjs/tests/api_tests/organization_api_keys.test.d.ts.map +1 -0
  19. package/lib/cjs/tests/api_tests/organization_api_keys.test.js +226 -0
  20. package/lib/cjs/tests/api_tests/organization_api_keys.test.js.map +1 -0
  21. package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts +21 -0
  22. package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts.map +1 -0
  23. package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js +362 -0
  24. package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js.map +1 -0
  25. package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts +20 -0
  26. package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts.map +1 -0
  27. package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.js +139 -0
  28. package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.js.map +1 -0
  29. package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts +18 -0
  30. package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts.map +1 -0
  31. package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.js +156 -0
  32. package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.js.map +1 -0
  33. package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts +20 -0
  34. package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts.map +1 -0
  35. package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.js +157 -0
  36. package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.js.map +1 -0
  37. package/lib/cjs/tests/setup.d.ts.map +1 -1
  38. package/lib/cjs/tests/setup.js +20 -1
  39. package/lib/cjs/tests/setup.js.map +1 -1
  40. package/lib/cjs/tests/tests.d.ts.map +1 -1
  41. package/lib/cjs/tests/tests.js +543 -282
  42. package/lib/cjs/tests/tests.js.map +1 -1
  43. package/lib/esm/sdk.d.ts +6 -2
  44. package/lib/esm/sdk.d.ts.map +1 -1
  45. package/lib/esm/sdk.js +5 -0
  46. package/lib/esm/sdk.js.map +1 -1
  47. package/lib/esm/session.d.ts +1 -0
  48. package/lib/esm/session.d.ts.map +1 -1
  49. package/lib/esm/tests/api_tests/ai_decision_summary_config.test.d.ts +16 -0
  50. package/lib/esm/tests/api_tests/ai_decision_summary_config.test.d.ts.map +1 -0
  51. package/lib/esm/tests/api_tests/ai_decision_summary_config.test.js +183 -0
  52. package/lib/esm/tests/api_tests/ai_decision_summary_config.test.js.map +1 -0
  53. package/lib/esm/tests/api_tests/mdi_case_offerings.test.d.ts +6 -0
  54. package/lib/esm/tests/api_tests/mdi_case_offerings.test.d.ts.map +1 -0
  55. package/lib/esm/tests/api_tests/mdi_case_offerings.test.js +439 -0
  56. package/lib/esm/tests/api_tests/mdi_case_offerings.test.js.map +1 -0
  57. package/lib/esm/tests/api_tests/order_status_equals_frequency.test.d.ts +6 -0
  58. package/lib/esm/tests/api_tests/order_status_equals_frequency.test.d.ts.map +1 -0
  59. package/lib/esm/tests/api_tests/order_status_equals_frequency.test.js +250 -0
  60. package/lib/esm/tests/api_tests/order_status_equals_frequency.test.js.map +1 -0
  61. package/lib/esm/tests/api_tests/organization_api_keys.test.d.ts +6 -0
  62. package/lib/esm/tests/api_tests/organization_api_keys.test.d.ts.map +1 -0
  63. package/lib/esm/tests/api_tests/organization_api_keys.test.js +222 -0
  64. package/lib/esm/tests/api_tests/organization_api_keys.test.js.map +1 -0
  65. package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts +21 -0
  66. package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts.map +1 -0
  67. package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js +358 -0
  68. package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js.map +1 -0
  69. package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts +20 -0
  70. package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts.map +1 -0
  71. package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.js +135 -0
  72. package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.js.map +1 -0
  73. package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts +18 -0
  74. package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts.map +1 -0
  75. package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.js +152 -0
  76. package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.js.map +1 -0
  77. package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts +20 -0
  78. package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts.map +1 -0
  79. package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.js +150 -0
  80. package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.js.map +1 -0
  81. package/lib/esm/tests/setup.d.ts.map +1 -1
  82. package/lib/esm/tests/setup.js +20 -1
  83. package/lib/esm/tests/setup.js.map +1 -1
  84. package/lib/esm/tests/tests.d.ts.map +1 -1
  85. package/lib/esm/tests/tests.js +543 -282
  86. package/lib/esm/tests/tests.js.map +1 -1
  87. package/lib/tsconfig.tsbuildinfo +1 -1
  88. package/package.json +10 -10
  89. package/src/sdk.ts +11 -0
  90. package/src/tests/api_tests/mdi_case_offerings.test.ts +414 -0
  91. package/src/tests/api_tests/organization_api_keys.test.ts +207 -0
  92. package/src/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.ts +221 -0
  93. package/src/tests/api_tests/security/F-0145-globalunique-leak.test.ts +78 -0
  94. package/src/tests/api_tests/security/F-0151-load-inbox-redaction.test.ts +81 -0
  95. package/src/tests/api_tests/security/F-0155-webhook-timeout.test.ts +85 -0
  96. package/src/tests/setup.ts +9 -0
  97. package/src/tests/tests.ts +199 -2
  98. package/test_generated.pdf +0 -0
@@ -99,6 +99,7 @@ import { enduser_login_tests } from "./api_tests/enduser_login.test";
99
99
  import { enduser_login_rate_limits_tests } from "./api_tests/enduser_login_rate_limits.test";
100
100
  import { eom_procedure_codes_tests } from "./api_tests/eom_procedure_codes.test";
101
101
  import { cross_org_api_key_tests } from "./api_tests/cross_org_api_key.test";
102
+ import { organization_api_keys_tests } from "./api_tests/organization_api_keys.test";
102
103
  import { custom_dashboards_tests } from "./api_tests/custom_dashboards.test";
103
104
  import { message_assignment_trigger_tests } from "./api_tests/message_assignment_trigger.test";
104
105
  import { outbound_chat_sent_trigger_tests } from "./api_tests/outbound_chat_sent_trigger.test";
@@ -119,6 +120,10 @@ import { invite_user_enumeration_tests } from "./api_tests/security/F-0007-invit
119
120
  import { handle_incoming_communication_cross_tenant_tests } from "./api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test";
120
121
  import { sanitize_user_html_xss_tests } from "./api_tests/security/F-0013-sanitize-user-html.test";
121
122
  import { prototype_pollution_tests } from "./api_tests/security/F-0016-prototype-pollution.test";
123
+ import { enduser_cross_create_tests } from "./api_tests/security/F-0116-F-0119-enduser-cross-create.test";
124
+ import { globalunique_leak_tests } from "./api_tests/security/F-0145-globalunique-leak.test";
125
+ import { load_inbox_redaction_tests } from "./api_tests/security/F-0151-load-inbox-redaction.test";
126
+ import { webhook_timeout_tests } from "./api_tests/security/F-0155-webhook-timeout.test";
122
127
  import { bulk_assignment_tests } from "./api_tests/bulk_assignment.test";
123
128
  import { managed_content_enduser_access_tests } from "./api_tests/managed_content_enduser_access.test";
124
129
  import { managed_content_file_access_tests } from "./api_tests/managed_content_file_access.test";
@@ -135,6 +140,7 @@ import { organization_settings_duplicates_tests } from "./api_tests/organization
135
140
  import { calendar_events_bulk_update_tests } from "./api_tests/calendar_events_bulk_update.test";
136
141
  import { openloop_webhooks_tests } from "./api_tests/openloop_webhooks.test";
137
142
  import { beluga_pharmacy_mappings_tests } from "./api_tests/beluga_pharmacy_mappings.test";
143
+ import { mdi_case_offerings_tests } from "./api_tests/mdi_case_offerings.test";
138
144
  import { beluga_manual_sync_tests } from "./api_tests/beluga_manual_sync.test";
139
145
  import { mdi_webhooks_tests } from "./api_tests/mdi_webhooks.test";
140
146
  import { account_switcher_tests } from "./api_tests/account_switcher.test";
@@ -4130,7 +4136,7 @@ var order_created_tests = function () { return __awaiter(void 0, void 0, void 0,
4130
4136
  });
4131
4137
  }); };
4132
4138
  var order_status_equals_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
4133
- var t1, t2, t3, t4, t5, t6, t7, t8, t9, e, u;
4139
+ var t1, t2, t3, t4, t5, t6, t7, t8, t9, tf1, tf2, tf3, tf4, tf5, e, u, ef;
4134
4140
  return __generator(this, function (_a) {
4135
4141
  switch (_a.label) {
4136
4142
  case 0:
@@ -4204,48 +4210,91 @@ var order_status_equals_tests = function () { return __awaiter(void 0, void 0, v
4204
4210
  action: { type: 'Add Tags', info: { tags: ['Protocol Match'] } },
4205
4211
  status: 'Active',
4206
4212
  title: "Protocol Condition"
4207
- })];
4213
+ })
4214
+ // Frequency filter triggers (exact-match array filter, mirrors fills/skus). All use a dedicated
4215
+ // source/status so their assertions stay isolated from the t1-t9 incremental tag-count checks above.
4216
+ ];
4208
4217
  case 9:
4209
4218
  t9 = _a.sent();
4210
- return [4 /*yield*/, sdk.api.endusers.createOne({})];
4219
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
4220
+ event: { type: 'Order Status Equals', info: { source: 'FreqSource', status: "FreqStatus" } },
4221
+ action: { type: 'Add Tags', info: { tags: ['Freq No Filter'] } },
4222
+ status: 'Active',
4223
+ title: "Frequency - no filter (backward compat)"
4224
+ })];
4211
4225
  case 10:
4226
+ tf1 = _a.sent();
4227
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
4228
+ event: { type: 'Order Status Equals', info: { source: 'FreqSource', status: "FreqStatus", frequencies: ['4', '12'] } },
4229
+ action: { type: 'Add Tags', info: { tags: ['Freq Match'] } },
4230
+ status: 'Active',
4231
+ title: "Frequency - multi-value match"
4232
+ })];
4233
+ case 11:
4234
+ tf2 = _a.sent();
4235
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
4236
+ event: { type: 'Order Status Equals', info: { source: 'FreqSource', status: "FreqStatus", frequencies: [] } },
4237
+ action: { type: 'Add Tags', info: { tags: ['Freq Empty All'] } },
4238
+ status: 'Active',
4239
+ title: "Frequency - empty array means all"
4240
+ })];
4241
+ case 12:
4242
+ tf3 = _a.sent();
4243
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
4244
+ event: { type: 'Order Status Equals', info: { source: 'FreqSource', status: "FreqShipped", frequencies: ['4'] } },
4245
+ action: { type: 'Add Tags', info: { tags: ['Freq Status Combo'] } },
4246
+ status: 'Active',
4247
+ title: "Frequency + status combination (AND semantics)"
4248
+ })];
4249
+ case 13:
4250
+ tf4 = _a.sent();
4251
+ return [4 /*yield*/, sdk.api.automation_triggers.createOne({
4252
+ event: { type: 'Order Status Equals', info: { source: 'FreqSource', status: "FreqStatus", frequencies: ['12'] } },
4253
+ action: { type: 'Add Tags', info: { tags: ['Freq Match 12'] } },
4254
+ status: 'Active',
4255
+ title: "Frequency - second listed value"
4256
+ })];
4257
+ case 14:
4258
+ tf5 = _a.sent();
4259
+ return [4 /*yield*/, sdk.api.endusers.createOne({})];
4260
+ case 15:
4212
4261
  e = _a.sent();
4213
4262
  return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'Nooo', source: 'Source', title: 'nomatch', externalId: '1', enduserId: e.id })];
4214
- case 11:
4263
+ case 16:
4215
4264
  _a.sent();
4216
4265
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4217
- case 12:
4266
+ case 17:
4218
4267
  _a.sent(); // allow triggers to happen
4219
4268
  return [4 /*yield*/, async_test("No tag is added (no fill)", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length); } })];
4220
- case 13:
4269
+ case 18:
4221
4270
  _a.sent();
4222
4271
  return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'Filled', source: 'Source', title: 'nomatch', externalId: '2', enduserId: e.id, fill: 'nomatch' })];
4223
- case 14:
4272
+ case 19:
4224
4273
  _a.sent();
4225
4274
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4226
- case 15:
4275
+ case 20:
4227
4276
  _a.sent(); // allow triggers to happen
4228
4277
  return [4 /*yield*/, async_test("No tag is added (fill mistmatch)", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length); } })];
4229
- case 16:
4278
+ case 21:
4230
4279
  _a.sent();
4231
4280
  return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'Status', source: 'Source', externalId: '3', enduserId: e.id, title: "Title" })];
4232
- case 17:
4281
+ case 22:
4233
4282
  _a.sent();
4234
4283
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4235
- case 18:
4284
+ case 23:
4236
4285
  _a.sent(); // allow triggers to happen
4237
4286
  return [4 /*yield*/, async_test("First tag is added", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4238
4287
  var _a, _b;
4239
4288
  return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 1
4240
4289
  && ((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Source')));
4241
4290
  } })];
4242
- case 19:
4291
+ case 24:
4243
4292
  _a.sent();
4244
4293
  return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'Status', source: 'Source', externalId: '4', enduserId: e.id, title: "Title", fill: '1' })];
4245
- case 20:
4294
+ case 25:
4246
4295
  _a.sent();
4247
4296
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4248
- case 21:
4297
+ case 26:
4249
4298
  _a.sent(); // allow triggers to happen
4250
4299
  return [4 /*yield*/, async_test("Fill tag not added yet (mismatch)", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4251
4300
  var _a, _b, _c;
@@ -4253,13 +4302,13 @@ var order_status_equals_tests = function () { return __awaiter(void 0, void 0, v
4253
4302
  && ((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Source'))
4254
4303
  && !((_c = e.tags) === null || _c === void 0 ? void 0 : _c.includes('Fill')));
4255
4304
  } })];
4256
- case 22:
4305
+ case 27:
4257
4306
  _a.sent();
4258
4307
  return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'Filled', source: 'Source', externalId: '5', enduserId: e.id, title: "Title", fill: "Fill" })];
4259
- case 23:
4308
+ case 28:
4260
4309
  _a.sent();
4261
4310
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4262
- case 24:
4311
+ case 29:
4263
4312
  _a.sent(); // allow triggers to happen
4264
4313
  return [4 /*yield*/, async_test("Fill tag added", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4265
4314
  var _a, _b, _c;
@@ -4267,16 +4316,16 @@ var order_status_equals_tests = function () { return __awaiter(void 0, void 0, v
4267
4316
  && ((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Source'))
4268
4317
  && ((_c = e.tags) === null || _c === void 0 ? void 0 : _c.includes('Fill')));
4269
4318
  } })];
4270
- case 25:
4319
+ case 30:
4271
4320
  _a.sent();
4272
4321
  return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'Status', source: 'Source', externalId: '6', enduserId: e.id, title: "Title" })];
4273
- case 26:
4322
+ case 31:
4274
4323
  u = _a.sent();
4275
4324
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: 'Update' })];
4276
- case 27:
4325
+ case 32:
4277
4326
  _a.sent();
4278
4327
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4279
- case 28:
4328
+ case 33:
4280
4329
  _a.sent(); // allow triggers to happen
4281
4330
  return [4 /*yield*/, async_test("Status update tag added", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4282
4331
  var _a, _b, _c, _d;
@@ -4287,18 +4336,18 @@ var order_status_equals_tests = function () { return __awaiter(void 0, void 0, v
4287
4336
  } })
4288
4337
  // duplicate updates get rate limited, so we need to make each update unique
4289
4338
  ];
4290
- case 29:
4339
+ case 34:
4291
4340
  _a.sent();
4292
4341
  // duplicate updates get rate limited, so we need to make each update unique
4293
4342
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: 'Toggle' })];
4294
- case 30:
4343
+ case 35:
4295
4344
  // duplicate updates get rate limited, so we need to make each update unique
4296
4345
  _a.sent();
4297
4346
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: "Update", fill: 'Update', externalId: 'avoid rate limiting' })];
4298
- case 31:
4347
+ case 36:
4299
4348
  _a.sent();
4300
4349
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4301
- case 32:
4350
+ case 37:
4302
4351
  _a.sent(); // allow triggers to happen
4303
4352
  return [4 /*yield*/, async_test("Fill update tag added", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4304
4353
  var _a, _b, _c, _d, _f;
@@ -4308,16 +4357,16 @@ var order_status_equals_tests = function () { return __awaiter(void 0, void 0, v
4308
4357
  && ((_d = e.tags) === null || _d === void 0 ? void 0 : _d.includes('Status Update'))
4309
4358
  && ((_f = e.tags) === null || _f === void 0 ? void 0 : _f.includes('Fill Update')));
4310
4359
  } })];
4311
- case 33:
4360
+ case 38:
4312
4361
  _a.sent();
4313
4362
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: 'Toggle', externalId: "also avoid rate limit 1" })];
4314
- case 34:
4363
+ case 39:
4315
4364
  _a.sent();
4316
4365
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: "Update", sku: 'SK', externalId: 'avoid rate limiting 2' })];
4317
- case 35:
4366
+ case 40:
4318
4367
  _a.sent();
4319
4368
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4320
- case 36:
4369
+ case 41:
4321
4370
  _a.sent(); // allow triggers to happen
4322
4371
  return [4 /*yield*/, async_test("SKU update no match", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4323
4372
  var _a, _b, _c, _d, _f;
@@ -4327,16 +4376,16 @@ var order_status_equals_tests = function () { return __awaiter(void 0, void 0, v
4327
4376
  && ((_d = e.tags) === null || _d === void 0 ? void 0 : _d.includes('Status Update'))
4328
4377
  && ((_f = e.tags) === null || _f === void 0 ? void 0 : _f.includes('Fill Update')));
4329
4378
  } })];
4330
- case 37:
4379
+ case 42:
4331
4380
  _a.sent();
4332
4381
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: 'Toggle', externalId: "also avoid rate limit 2" })];
4333
- case 38:
4382
+ case 43:
4334
4383
  _a.sent();
4335
4384
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: "Update", sku: 'SKU', externalId: 'avoid rate limiting 3' })];
4336
- case 39:
4385
+ case 44:
4337
4386
  _a.sent();
4338
4387
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4339
- case 40:
4388
+ case 45:
4340
4389
  _a.sent(); // allow triggers to happen
4341
4390
  return [4 /*yield*/, async_test("SKU update tag added", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4342
4391
  var _a, _b, _c, _d, _f, _g;
@@ -4347,16 +4396,16 @@ var order_status_equals_tests = function () { return __awaiter(void 0, void 0, v
4347
4396
  && ((_f = e.tags) === null || _f === void 0 ? void 0 : _f.includes('Fill Update'))
4348
4397
  && ((_g = e.tags) === null || _g === void 0 ? void 0 : _g.includes('SKU Update')));
4349
4398
  } })];
4350
- case 41:
4399
+ case 46:
4351
4400
  _a.sent();
4352
4401
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: 'Toggle', externalId: "also avoid rate limit 3" })];
4353
- case 42:
4402
+ case 47:
4354
4403
  _a.sent();
4355
4404
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: "Update", sku: '___SKU-PARTIAL--_' })];
4356
- case 43:
4405
+ case 48:
4357
4406
  _a.sent();
4358
4407
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4359
- case 44:
4408
+ case 49:
4360
4409
  _a.sent(); // allow triggers to happen
4361
4410
  return [4 /*yield*/, async_test("SKU partial update tag added", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4362
4411
  var _a, _b, _c, _d, _f, _g, _h;
@@ -4368,16 +4417,16 @@ var order_status_equals_tests = function () { return __awaiter(void 0, void 0, v
4368
4417
  && ((_g = e.tags) === null || _g === void 0 ? void 0 : _g.includes('SKU Update'))
4369
4418
  && ((_h = e.tags) === null || _h === void 0 ? void 0 : _h.includes('SKU Partial Update')));
4370
4419
  } })];
4371
- case 45:
4420
+ case 50:
4372
4421
  _a.sent();
4373
4422
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: 'Toggle', externalId: "also avoid rate limit 4" })];
4374
- case 46:
4423
+ case 51:
4375
4424
  _a.sent();
4376
4425
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: "Update", title: "TITLE-PARTIAL" })];
4377
- case 47:
4426
+ case 52:
4378
4427
  _a.sent();
4379
4428
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4380
- case 48:
4429
+ case 53:
4381
4430
  _a.sent(); // allow triggers to happen
4382
4431
  return [4 /*yield*/, async_test("Title partial update tag added", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4383
4432
  var _a, _b, _c, _d, _f, _g, _h, _j;
@@ -4390,32 +4439,32 @@ var order_status_equals_tests = function () { return __awaiter(void 0, void 0, v
4390
4439
  && ((_h = e.tags) === null || _h === void 0 ? void 0 : _h.includes('SKU Partial Update'))
4391
4440
  && ((_j = e.tags) === null || _j === void 0 ? void 0 : _j.includes('Title Partial Update')));
4392
4441
  } })];
4393
- case 49:
4442
+ case 54:
4394
4443
  _a.sent();
4395
4444
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: 'Toggle', externalId: "also avoid rate limit 5" })];
4396
- case 50:
4445
+ case 55:
4397
4446
  _a.sent();
4398
4447
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: "Update", title: "PARTIAL-A only" })];
4399
- case 51:
4448
+ case 56:
4400
4449
  _a.sent();
4401
4450
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4402
- case 52:
4451
+ case 57:
4403
4452
  _a.sent(); // allow triggers to happen
4404
4453
  return [4 /*yield*/, async_test("Title partial AND no match (only one partial present)", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4405
4454
  var _a, _b;
4406
4455
  return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 7
4407
4456
  && !((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Title Partial And Update')));
4408
4457
  } })];
4409
- case 53:
4458
+ case 58:
4410
4459
  _a.sent();
4411
4460
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: 'Toggle', externalId: "also avoid rate limit 6" })];
4412
- case 54:
4461
+ case 59:
4413
4462
  _a.sent();
4414
4463
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: "Update", title: "PARTIAL-A and PARTIAL-B together" })];
4415
- case 55:
4464
+ case 60:
4416
4465
  _a.sent();
4417
4466
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4418
- case 56:
4467
+ case 61:
4419
4468
  _a.sent(); // allow triggers to happen
4420
4469
  return [4 /*yield*/, async_test("Title partial AND update tag added (both partials present)", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4421
4470
  var _a, _b, _c, _d, _f, _g, _h, _j, _k;
@@ -4429,32 +4478,32 @@ var order_status_equals_tests = function () { return __awaiter(void 0, void 0, v
4429
4478
  && ((_j = e.tags) === null || _j === void 0 ? void 0 : _j.includes('Title Partial Update'))
4430
4479
  && ((_k = e.tags) === null || _k === void 0 ? void 0 : _k.includes('Title Partial And Update')));
4431
4480
  } })];
4432
- case 57:
4481
+ case 62:
4433
4482
  _a.sent();
4434
4483
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: 'Toggle', externalId: "also avoid rate limit 7" })];
4435
- case 58:
4484
+ case 63:
4436
4485
  _a.sent();
4437
4486
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: "Update", protocol: 'Protocol-Mismatch', externalId: 'avoid rate limiting 7' })];
4438
- case 59:
4487
+ case 64:
4439
4488
  _a.sent();
4440
4489
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4441
- case 60:
4490
+ case 65:
4442
4491
  _a.sent(); // allow triggers to happen
4443
4492
  return [4 /*yield*/, async_test("Protocol no match (wrong protocol)", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4444
4493
  var _a, _b;
4445
4494
  return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 8
4446
4495
  && !((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Protocol Match')));
4447
4496
  } })];
4448
- case 61:
4497
+ case 66:
4449
4498
  _a.sent();
4450
4499
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: 'Toggle', externalId: "also avoid rate limit 8" })];
4451
- case 62:
4500
+ case 67:
4452
4501
  _a.sent();
4453
4502
  return [4 /*yield*/, sdk.api.enduser_orders.updateOne(u.id, { status: "Update", protocol: 'Protocol-A', externalId: 'avoid rate limiting 8' })];
4454
- case 63:
4503
+ case 68:
4455
4504
  _a.sent();
4456
4505
  return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4457
- case 64:
4506
+ case 69:
4458
4507
  _a.sent(); // allow triggers to happen
4459
4508
  return [4 /*yield*/, async_test("Protocol match tag added", function () { return sdk.api.endusers.getOne(e.id); }, { onResult: function (e) {
4460
4509
  var _a, _b, _c, _d, _f, _g, _h, _j, _k, _l;
@@ -4468,8 +4517,121 @@ var order_status_equals_tests = function () { return __awaiter(void 0, void 0, v
4468
4517
  && ((_j = e.tags) === null || _j === void 0 ? void 0 : _j.includes('Title Partial Update'))
4469
4518
  && ((_k = e.tags) === null || _k === void 0 ? void 0 : _k.includes('Title Partial And Update'))
4470
4519
  && ((_l = e.tags) === null || _l === void 0 ? void 0 : _l.includes('Protocol Match')));
4520
+ } })
4521
+ // --- Frequency filter coverage (fresh enduser keeps tag-count assertions isolated) ---
4522
+ ];
4523
+ case 70:
4524
+ _a.sent();
4525
+ return [4 /*yield*/, sdk.api.endusers.createOne({})
4526
+ // Order with NO frequency: no-filter trigger (tf1) and empty-array trigger (tf3) both fire;
4527
+ // populated-filter trigger (tf2) does NOT (missing frequency must never match a populated filter).
4528
+ ];
4529
+ case 71:
4530
+ ef = _a.sent();
4531
+ // Order with NO frequency: no-filter trigger (tf1) and empty-array trigger (tf3) both fire;
4532
+ // populated-filter trigger (tf2) does NOT (missing frequency must never match a populated filter).
4533
+ return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'FreqStatus', source: 'FreqSource', externalId: 'f1', enduserId: ef.id, title: "Freq No Frequency" })];
4534
+ case 72:
4535
+ // Order with NO frequency: no-filter trigger (tf1) and empty-array trigger (tf3) both fire;
4536
+ // populated-filter trigger (tf2) does NOT (missing frequency must never match a populated filter).
4537
+ _a.sent();
4538
+ return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4539
+ case 73:
4540
+ _a.sent(); // allow triggers to happen
4541
+ return [4 /*yield*/, async_test("Frequency: no-filter + empty-array fire for order with no frequency (backward compat)", function () { return sdk.api.endusers.getOne(ef.id); }, { onResult: function (e) {
4542
+ var _a, _b, _c, _d;
4543
+ return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 2
4544
+ && ((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Freq No Filter'))
4545
+ && ((_c = e.tags) === null || _c === void 0 ? void 0 : _c.includes('Freq Empty All'))
4546
+ && !((_d = e.tags) === null || _d === void 0 ? void 0 : _d.includes('Freq Match')));
4547
+ } })
4548
+ // Order with a frequency NOT in ['4','12'] -> populated-filter trigger still does not fire.
4549
+ ];
4550
+ case 74:
4551
+ _a.sent();
4552
+ // Order with a frequency NOT in ['4','12'] -> populated-filter trigger still does not fire.
4553
+ return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'FreqStatus', source: 'FreqSource', externalId: 'f2', enduserId: ef.id, title: "Freq 8", frequency: '8' })];
4554
+ case 75:
4555
+ // Order with a frequency NOT in ['4','12'] -> populated-filter trigger still does not fire.
4556
+ _a.sent();
4557
+ return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4558
+ case 76:
4559
+ _a.sent(); // allow triggers to happen
4560
+ return [4 /*yield*/, async_test("Frequency: no match (order frequency '8' not in ['4','12'])", function () { return sdk.api.endusers.getOne(ef.id); }, { onResult: function (e) {
4561
+ var _a, _b;
4562
+ return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 2
4563
+ && !((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Freq Match')));
4564
+ } })
4565
+ // Order with frequency '4' -> ['4','12'] trigger fires.
4566
+ ];
4567
+ case 77:
4568
+ _a.sent();
4569
+ // Order with frequency '4' -> ['4','12'] trigger fires.
4570
+ return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'FreqStatus', source: 'FreqSource', externalId: 'f3', enduserId: ef.id, title: "Freq 4", frequency: '4' })];
4571
+ case 78:
4572
+ // Order with frequency '4' -> ['4','12'] trigger fires.
4573
+ _a.sent();
4574
+ return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4575
+ case 79:
4576
+ _a.sent(); // allow triggers to happen
4577
+ return [4 /*yield*/, async_test("Frequency: match (order frequency '4' is in ['4','12'])", function () { return sdk.api.endusers.getOne(ef.id); }, { onResult: function (e) {
4578
+ var _a, _b, _c;
4579
+ return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 3
4580
+ && ((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Freq Match'))
4581
+ && !((_c = e.tags) === null || _c === void 0 ? void 0 : _c.includes('Freq Match 12')));
4582
+ } })
4583
+ // Order with frequency '12' -> the second listed value also matches (tf5 frequencies: ['12']).
4584
+ ];
4585
+ case 80:
4586
+ _a.sent();
4587
+ // Order with frequency '12' -> the second listed value also matches (tf5 frequencies: ['12']).
4588
+ return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'FreqStatus', source: 'FreqSource', externalId: 'f4', enduserId: ef.id, title: "Freq 12", frequency: '12' })];
4589
+ case 81:
4590
+ // Order with frequency '12' -> the second listed value also matches (tf5 frequencies: ['12']).
4591
+ _a.sent();
4592
+ return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4593
+ case 82:
4594
+ _a.sent(); // allow triggers to happen
4595
+ return [4 /*yield*/, async_test("Frequency: second listed value '12' also matches", function () { return sdk.api.endusers.getOne(ef.id); }, { onResult: function (e) {
4596
+ var _a, _b;
4597
+ return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 4
4598
+ && ((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Freq Match 12')));
4599
+ } })
4600
+ // AND semantics: frequency + status must BOTH match. Right frequency, wrong status -> no fire.
4601
+ ];
4602
+ case 83:
4603
+ _a.sent();
4604
+ // AND semantics: frequency + status must BOTH match. Right frequency, wrong status -> no fire.
4605
+ return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'FreqShipped', source: 'FreqSource', externalId: 'f5', enduserId: ef.id, title: "Freq Combo Wrong Freq", frequency: '8' })];
4606
+ case 84:
4607
+ // AND semantics: frequency + status must BOTH match. Right frequency, wrong status -> no fire.
4608
+ _a.sent();
4609
+ return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4610
+ case 85:
4611
+ _a.sent(); // allow triggers to happen
4612
+ return [4 /*yield*/, async_test("Frequency + status combo: status matches but frequency does not -> no fire", function () { return sdk.api.endusers.getOne(ef.id); }, { onResult: function (e) {
4613
+ var _a, _b;
4614
+ return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 4
4615
+ && !((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Freq Status Combo')));
4616
+ } })
4617
+ // AND semantics: right status AND right frequency -> fires.
4618
+ ];
4619
+ case 86:
4620
+ _a.sent();
4621
+ // AND semantics: right status AND right frequency -> fires.
4622
+ return [4 /*yield*/, sdk.api.enduser_orders.createOne({ status: 'FreqShipped', source: 'FreqSource', externalId: 'f6', enduserId: ef.id, title: "Freq Combo Match", frequency: '4' })];
4623
+ case 87:
4624
+ // AND semantics: right status AND right frequency -> fires.
4625
+ _a.sent();
4626
+ return [4 /*yield*/, wait(undefined, 500)]; // allow triggers to happen
4627
+ case 88:
4628
+ _a.sent(); // allow triggers to happen
4629
+ return [4 /*yield*/, async_test("Frequency + status combo: both match -> fires (AND semantics)", function () { return sdk.api.endusers.getOne(ef.id); }, { onResult: function (e) {
4630
+ var _a, _b;
4631
+ return !!(((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length) === 5
4632
+ && ((_b = e.tags) === null || _b === void 0 ? void 0 : _b.includes('Freq Status Combo')));
4471
4633
  } })];
4472
- case 65:
4634
+ case 89:
4473
4635
  _a.sent();
4474
4636
  return [4 /*yield*/, Promise.all([
4475
4637
  sdk.api.automation_triggers.deleteOne(t1.id),
@@ -4481,9 +4643,15 @@ var order_status_equals_tests = function () { return __awaiter(void 0, void 0, v
4481
4643
  sdk.api.automation_triggers.deleteOne(t7.id),
4482
4644
  sdk.api.automation_triggers.deleteOne(t8.id),
4483
4645
  sdk.api.automation_triggers.deleteOne(t9.id),
4646
+ sdk.api.automation_triggers.deleteOne(tf1.id),
4647
+ sdk.api.automation_triggers.deleteOne(tf2.id),
4648
+ sdk.api.automation_triggers.deleteOne(tf3.id),
4649
+ sdk.api.automation_triggers.deleteOne(tf4.id),
4650
+ sdk.api.automation_triggers.deleteOne(tf5.id),
4484
4651
  sdk.api.endusers.deleteOne(e.id),
4652
+ sdk.api.endusers.deleteOne(ef.id),
4485
4653
  ])];
4486
- case 66:
4654
+ case 90:
4487
4655
  _a.sent();
4488
4656
  return [2 /*return*/];
4489
4657
  }
@@ -8008,7 +8176,7 @@ export var filter_by_date_tests = function () { return __awaiter(void 0, void 0,
8008
8176
  });
8009
8177
  }); };
8010
8178
  export var self_serve_appointment_booking_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
8011
- var e1, e2, e3, event15min, event30min, event30minGroup, dayOfWeekStartingSundayIndexedByZero, enduserSDK2, enduserSDK3, nySlots, bookedAppointment, conflict, groupEvent, multiSlots, bookedMultiAppointment, conflict2, conflict3, rescheduleSlots, templatePreserveHosts, originalMultiHostAppt, rescheduledPreserveHosts, templateReplaceHosts, originalForReplace, rescheduledReplaceHosts;
8179
+ var e1, e2, e3, event15min, event30min, event30minGroup, event30minTwilio, event30minZoom, dayOfWeekStartingSundayIndexedByZero, enduserSDK2, enduserSDK3, nySlots, bookedAppointment, conflict, groupEvent, multiSlots, bookedMultiAppointment, conflict2, conflict3, rescheduleSlots, templatePreserveHosts, originalMultiHostAppt, rescheduledPreserveHosts, templateReplaceHosts, originalForReplace, rescheduledReplaceHosts, twilioSlots, bookedTwilioAppointment, zoomSlots, bookedZoomAppointment;
8012
8180
  return __generator(this, function (_a) {
8013
8181
  switch (_a.label) {
8014
8182
  case 0:
@@ -8050,11 +8218,29 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8050
8218
  confirmationEmailDisabled: true,
8051
8219
  confirmationSMSDisabled: true,
8052
8220
  enduserAttendeeLimit: 2,
8221
+ })];
8222
+ case 9:
8223
+ event30minGroup = _a.sent();
8224
+ return [4 /*yield*/, sdk.api.calendar_event_templates.createOne({
8225
+ title: 'test twilio', durationInMinutes: 30,
8226
+ confirmationEmailDisabled: true,
8227
+ confirmationSMSDisabled: true,
8228
+ enableVideoCall: true,
8229
+ videoIntegration: 'Twilio',
8230
+ })];
8231
+ case 10:
8232
+ event30minTwilio = _a.sent();
8233
+ return [4 /*yield*/, sdk.api.calendar_event_templates.createOne({
8234
+ title: 'test zoom', durationInMinutes: 30,
8235
+ confirmationEmailDisabled: true,
8236
+ confirmationSMSDisabled: true,
8237
+ enableVideoCall: true,
8238
+ videoIntegration: 'Zoom',
8053
8239
  })
8054
8240
  // ensure it doesn't match current day, to avoid errors on testing
8055
8241
  ];
8056
- case 9:
8057
- event30minGroup = _a.sent();
8242
+ case 11:
8243
+ event30minZoom = _a.sent();
8058
8244
  dayOfWeekStartingSundayIndexedByZero = (new Date().getDay() + 1) % 7;
8059
8245
  return [4 /*yield*/, sdk.api.users.updateOne(sdk.userInfo.id, {
8060
8246
  weeklyAvailabilities: [
@@ -8074,7 +8260,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8074
8260
  }, {
8075
8261
  replaceObjectFields: true,
8076
8262
  })];
8077
- case 10:
8263
+ case 12:
8078
8264
  _a.sent();
8079
8265
  return [4 /*yield*/, sdkNonAdmin.api.users.updateOne(sdkNonAdmin.userInfo.id, {
8080
8266
  weeklyAvailabilities: [
@@ -8089,21 +8275,21 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8089
8275
  }, {
8090
8276
  replaceObjectFields: true,
8091
8277
  })];
8092
- case 11:
8278
+ case 13:
8093
8279
  _a.sent();
8094
8280
  enduserSDK2 = new EnduserSession({ host: host, businessId: businessId });
8095
8281
  return [4 /*yield*/, enduserSDK2.authenticate('sebass+ca@tellescope.com', password).catch(console.error)];
8096
- case 12:
8282
+ case 14:
8097
8283
  _a.sent();
8098
8284
  enduserSDK3 = new EnduserSession({ host: host, businessId: businessId });
8099
8285
  return [4 /*yield*/, enduserSDK3.authenticate('sebass+3@tellescope.com', password).catch(console.error)
8100
8286
  // NY Enduser Tests
8101
8287
  ];
8102
- case 13:
8288
+ case 15:
8103
8289
  _a.sent();
8104
8290
  // NY Enduser Tests
8105
8291
  return [4 /*yield*/, enduserSDK.authenticate('sebass+ny@tellescope.com', password).catch(console.error)];
8106
- case 14:
8292
+ case 16:
8107
8293
  // NY Enduser Tests
8108
8294
  _a.sent();
8109
8295
  return [4 /*yield*/, async_test('30 minute slots for state restriction', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
@@ -8112,7 +8298,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8112
8298
  to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
8113
8299
  restrictedByState: true,
8114
8300
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 2; } })];
8115
- case 15:
8301
+ case 17:
8116
8302
  _a.sent();
8117
8303
  return [4 /*yield*/, async_test('30 minute slots for state restriction (called as user)', function () { return sdk.api.calendar_events.get_appointment_availability({
8118
8304
  calendarEventTemplateId: event30min.id,
@@ -8121,7 +8307,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8121
8307
  restrictedByState: true,
8122
8308
  state: "NY", // same state as enduserSDK
8123
8309
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 2; } })];
8124
- case 16:
8310
+ case 18:
8125
8311
  _a.sent();
8126
8312
  return [4 /*yield*/, async_test('30 minute slots for state restriction with 15 min interval', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
8127
8313
  calendarEventTemplateId: event30min.id,
@@ -8130,7 +8316,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8130
8316
  restrictedByState: true,
8131
8317
  intervalInMinutes: 15,
8132
8318
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 3; } })];
8133
- case 17:
8319
+ case 19:
8134
8320
  _a.sent();
8135
8321
  return [4 /*yield*/, async_test('30 minute slots for state restriction with 10 min interval', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
8136
8322
  calendarEventTemplateId: event30min.id,
@@ -8139,7 +8325,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8139
8325
  restrictedByState: true,
8140
8326
  intervalInMinutes: 10,
8141
8327
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 4; } })];
8142
- case 18:
8328
+ case 20:
8143
8329
  _a.sent();
8144
8330
  return [4 /*yield*/, async_test('30 minute slots for no state restrictions', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
8145
8331
  calendarEventTemplateId: event30min.id,
@@ -8158,7 +8344,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8158
8344
  }
8159
8345
  return true;
8160
8346
  } })];
8161
- case 19:
8347
+ case 21:
8162
8348
  _a.sent();
8163
8349
  return [4 /*yield*/, enduserSDK.api.calendar_events.get_appointment_availability({
8164
8350
  calendarEventTemplateId: event30min.id,
@@ -8166,7 +8352,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8166
8352
  to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
8167
8353
  restrictedByState: true,
8168
8354
  })];
8169
- case 20:
8355
+ case 22:
8170
8356
  nySlots = _a.sent();
8171
8357
  return [4 /*yield*/, enduserSDK.api.calendar_events.book_appointment({
8172
8358
  calendarEventTemplateId: event30min.id,
@@ -8177,7 +8363,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8177
8363
  fields: "Test",
8178
8364
  }
8179
8365
  })];
8180
- case 21:
8366
+ case 23:
8181
8367
  bookedAppointment = (_a.sent()).createdEvent;
8182
8368
  assert(bookedAppointment.attendees.length === 2, 'did not get 2 attendees', '2 attendees fo non-multi-event');
8183
8369
  return [4 /*yield*/, async_test('double-booking prevented', function () { return enduserSDK.api.calendar_events.book_appointment({
@@ -8185,7 +8371,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8185
8371
  startTime: new Date(nySlots.availabilityBlocks[0].startTimeInMS),
8186
8372
  userId: nySlots.availabilityBlocks[0].userId,
8187
8373
  }); }, handleAnyError)];
8188
- case 22:
8374
+ case 24:
8189
8375
  _a.sent();
8190
8376
  return [4 /*yield*/, async_test('30 minute slots for state restriction with 1 overlapping conflict', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
8191
8377
  calendarEventTemplateId: event30min.id,
@@ -8197,7 +8383,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8197
8383
  && r.availabilityBlocks[0].startTimeInMS === nySlots.availabilityBlocks[1].startTimeInMS;
8198
8384
  } // the first slot of nySlots is booked
8199
8385
  })];
8200
- case 23:
8386
+ case 25:
8201
8387
  _a.sent();
8202
8388
  return [4 /*yield*/, sdk.api.calendar_events.createOne({
8203
8389
  title: 'conflict',
@@ -8205,7 +8391,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8205
8391
  durationInMinutes: nySlots.availabilityBlocks[1].durationInMinutes,
8206
8392
  attendees: [{ type: 'user', id: sdk.userInfo.id }]
8207
8393
  })];
8208
- case 24:
8394
+ case 26:
8209
8395
  conflict = _a.sent();
8210
8396
  return [4 /*yield*/, async_test('30 minute slots for state restriction with 2 overlapping conflict', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
8211
8397
  calendarEventTemplateId: event30min.id,
@@ -8213,7 +8399,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8213
8399
  to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
8214
8400
  restrictedByState: true,
8215
8401
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 0; } })];
8216
- case 25:
8402
+ case 27:
8217
8403
  _a.sent();
8218
8404
  return [4 /*yield*/, async_test('booking against conflict prevented', function () { return enduserSDK.api.calendar_events.book_appointment({
8219
8405
  calendarEventTemplateId: event30min.id,
@@ -8222,11 +8408,11 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8222
8408
  }); }, handleAnyError)
8223
8409
  // test group bookings
8224
8410
  ];
8225
- case 26:
8411
+ case 28:
8226
8412
  _a.sent();
8227
8413
  // test group bookings
8228
8414
  return [4 /*yield*/, sdk.api.calendar_events.updateOne(conflict.id, { enduserAttendeeLimit: 2 })];
8229
- case 27:
8415
+ case 29:
8230
8416
  // test group bookings
8231
8417
  _a.sent();
8232
8418
  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({
@@ -8234,52 +8420,52 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8234
8420
  from: new Date(Date.now() - 10000),
8235
8421
  to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
8236
8422
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 2; } })];
8237
- case 28:
8423
+ case 30:
8238
8424
  _a.sent();
8239
8425
  return [4 /*yield*/, sdk.api.calendar_events.deleteOne(conflict.id)];
8240
- case 29:
8426
+ case 31:
8241
8427
  _a.sent();
8242
8428
  return [4 /*yield*/, async_test('[group booking] availability', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
8243
8429
  calendarEventTemplateId: event30minGroup.id,
8244
8430
  from: new Date(Date.now() - 10000),
8245
8431
  to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
8246
8432
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 3; } })];
8247
- case 30:
8433
+ case 32:
8248
8434
  _a.sent();
8249
8435
  return [4 /*yield*/, enduserSDK.api.calendar_events.book_appointment({
8250
8436
  calendarEventTemplateId: event30minGroup.id,
8251
8437
  startTime: new Date(nySlots.availabilityBlocks[1].startTimeInMS),
8252
8438
  userId: nySlots.availabilityBlocks[1].userId,
8253
8439
  })];
8254
- case 31:
8440
+ case 33:
8255
8441
  groupEvent = (_a.sent()).createdEvent;
8256
8442
  return [4 /*yield*/, async_test('[group booking] more booking allowed', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
8257
8443
  calendarEventTemplateId: event30minGroup.id,
8258
8444
  from: new Date(Date.now() - 10000),
8259
8445
  to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
8260
8446
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 3; } })];
8261
- case 32:
8447
+ case 34:
8262
8448
  _a.sent();
8263
8449
  return [4 /*yield*/, async_test('[group booking] prevent double-book same-enduser', function () { return enduserSDK.api.calendar_events.book_appointment({
8264
8450
  calendarEventTemplateId: event30minGroup.id,
8265
8451
  startTime: new Date(nySlots.availabilityBlocks[1].startTimeInMS),
8266
8452
  userId: nySlots.availabilityBlocks[1].userId,
8267
8453
  }); }, handleAnyError)];
8268
- case 33:
8454
+ case 35:
8269
8455
  _a.sent();
8270
8456
  return [4 /*yield*/, async_test('[group booking] allow other enduser to book', function () { return enduserSDK2.api.calendar_events.book_appointment({
8271
8457
  calendarEventTemplateId: event30minGroup.id,
8272
8458
  startTime: new Date(nySlots.availabilityBlocks[1].startTimeInMS),
8273
8459
  userId: nySlots.availabilityBlocks[1].userId,
8274
8460
  }); }, passOnAnyResult)];
8275
- case 34:
8461
+ case 36:
8276
8462
  _a.sent();
8277
8463
  return [4 /*yield*/, async_test('[group booking] no more booking allowed', function () { return enduserSDK.api.calendar_events.get_appointment_availability({
8278
8464
  calendarEventTemplateId: event30minGroup.id,
8279
8465
  from: new Date(Date.now() - 10000),
8280
8466
  to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
8281
8467
  }); }, { onResult: function (r) { return r.availabilityBlocks.length === 2; } })];
8282
- case 35:
8468
+ case 37:
8283
8469
  _a.sent();
8284
8470
  return [4 /*yield*/, async_test('[group booking] other enduser cant book over capacity', function () { return enduserSDK3.api.calendar_events.book_appointment({
8285
8471
  calendarEventTemplateId: event30minGroup.id,
@@ -8288,7 +8474,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8288
8474
  }); }, handleAnyError)
8289
8475
  // test 'multi' flag for booking multiple providers for a given patient
8290
8476
  ];
8291
- case 36:
8477
+ case 38:
8292
8478
  _a.sent();
8293
8479
  // test 'multi' flag for booking multiple providers for a given patient
8294
8480
  return [4 /*yield*/, sdk.api.users.updateOne(sdk.userInfo.id, {
@@ -8303,7 +8489,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8303
8489
  }, {
8304
8490
  replaceObjectFields: true,
8305
8491
  })];
8306
- case 37:
8492
+ case 39:
8307
8493
  // test 'multi' flag for booking multiple providers for a given patient
8308
8494
  _a.sent();
8309
8495
  return [4 /*yield*/, sdkNonAdmin.api.users.updateOne(sdkNonAdmin.userInfo.id, {
@@ -8318,7 +8504,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8318
8504
  }, {
8319
8505
  replaceObjectFields: true,
8320
8506
  })];
8321
- case 38:
8507
+ case 40:
8322
8508
  _a.sent();
8323
8509
  return [4 /*yield*/, enduserSDK.api.calendar_events.get_appointment_availability({
8324
8510
  calendarEventTemplateId: event30min.id,
@@ -8327,7 +8513,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8327
8513
  multi: true,
8328
8514
  userIds: [sdk.userInfo.id, sdkNonAdmin.userInfo.id]
8329
8515
  })];
8330
- case 39:
8516
+ case 41:
8331
8517
  multiSlots = _a.sent();
8332
8518
  assert(multiSlots.availabilityBlocks.length === 2, 'expected 2 slots', 'multi slots are intersection of availability');
8333
8519
  return [4 /*yield*/, enduserSDK.api.calendar_events.book_appointment({
@@ -8336,7 +8522,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8336
8522
  userId: sdk.userInfo.id,
8337
8523
  otherUserIds: [sdkNonAdmin.userInfo.id]
8338
8524
  })];
8339
- case 40:
8525
+ case 42:
8340
8526
  bookedMultiAppointment = (_a.sent()).createdEvent;
8341
8527
  assert((bookedMultiAppointment.attendees.length === 3
8342
8528
  && bookedMultiAppointment.attendees.filter(function (a) { return a.type === 'enduser'; }).length === 1), 'did not get valid attendees', 'Multi attendees fo multi-event');
@@ -8345,14 +8531,14 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8345
8531
  startTime: new Date(multiSlots.availabilityBlocks[0].startTimeInMS),
8346
8532
  userId: sdk.userInfo.id,
8347
8533
  }); }, handleAnyError)];
8348
- case 41:
8534
+ case 43:
8349
8535
  _a.sent();
8350
8536
  return [4 /*yield*/, async_test('booking against conflict prevented other user', function () { return enduserSDK.api.calendar_events.book_appointment({
8351
8537
  calendarEventTemplateId: event30min.id,
8352
8538
  startTime: new Date(multiSlots.availabilityBlocks[0].startTimeInMS),
8353
8539
  userId: sdkNonAdmin.userInfo.id,
8354
8540
  }); }, handleAnyError)];
8355
- case 42:
8541
+ case 44:
8356
8542
  _a.sent();
8357
8543
  return [4 /*yield*/, async_test('booking against conflict prevented 2 users', function () { return enduserSDK.api.calendar_events.book_appointment({
8358
8544
  calendarEventTemplateId: event30min.id,
@@ -8360,7 +8546,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8360
8546
  userId: sdk.userInfo.id,
8361
8547
  otherUserIds: [sdkNonAdmin.userInfo.id],
8362
8548
  }); }, handleAnyError)];
8363
- case 43:
8549
+ case 45:
8364
8550
  _a.sent();
8365
8551
  return [4 /*yield*/, sdk.api.calendar_events.createOne({
8366
8552
  title: 'conflict',
@@ -8368,36 +8554,36 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8368
8554
  durationInMinutes: nySlots.availabilityBlocks[0].durationInMinutes,
8369
8555
  attendees: [{ type: 'user', id: sdk.userInfo.id }]
8370
8556
  })];
8371
- case 44:
8557
+ case 46:
8372
8558
  conflict2 = _a.sent();
8373
8559
  return [4 /*yield*/, sdk.api.calendar_events.updateOne(conflict2.id, { bufferEndMinutes: 30 })];
8374
- case 45:
8560
+ case 47:
8375
8561
  _a.sent();
8376
8562
  return [4 /*yield*/, async_test('Event buffer end prevents booking', function () { return enduserSDK.api.calendar_events.book_appointment({
8377
8563
  calendarEventTemplateId: event30min.id,
8378
8564
  startTime: new Date(nySlots.availabilityBlocks[1].startTimeInMS),
8379
8565
  userId: nySlots.availabilityBlocks[1].userId,
8380
8566
  }); }, handleAnyError)];
8381
- case 46:
8567
+ case 48:
8382
8568
  _a.sent();
8383
8569
  return [4 /*yield*/, sdk.api.calendar_events.updateOne(conflict2.id, { bufferEndMinutes: 0 })];
8384
- case 47:
8570
+ case 49:
8385
8571
  _a.sent();
8386
8572
  return [4 /*yield*/, sdk.api.calendar_event_templates.updateOne(event30min.id, { bufferStartMinutes: 30 })];
8387
- case 48:
8573
+ case 50:
8388
8574
  _a.sent();
8389
8575
  return [4 /*yield*/, async_test('Template buffer start prevents booking', function () { return enduserSDK.api.calendar_events.book_appointment({
8390
8576
  calendarEventTemplateId: event30min.id,
8391
8577
  startTime: new Date(nySlots.availabilityBlocks[1].startTimeInMS),
8392
8578
  userId: nySlots.availabilityBlocks[1].userId,
8393
8579
  }); }, handleAnyError)];
8394
- case 49:
8580
+ case 51:
8395
8581
  _a.sent();
8396
8582
  return [4 /*yield*/, sdk.api.calendar_event_templates.updateOne(event30min.id, { bufferStartMinutes: 0 })];
8397
- case 50:
8583
+ case 52:
8398
8584
  _a.sent();
8399
8585
  return [4 /*yield*/, sdk.api.calendar_events.deleteOne(conflict2.id)];
8400
- case 51:
8586
+ case 53:
8401
8587
  _a.sent();
8402
8588
  return [4 /*yield*/, sdk.api.calendar_events.createOne({
8403
8589
  title: 'conflict',
@@ -8405,23 +8591,23 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8405
8591
  durationInMinutes: nySlots.availabilityBlocks[1].durationInMinutes,
8406
8592
  attendees: [{ type: 'user', id: sdk.userInfo.id }]
8407
8593
  })];
8408
- case 52:
8594
+ case 54:
8409
8595
  conflict3 = _a.sent();
8410
8596
  return [4 /*yield*/, sdk.api.calendar_events.updateOne(conflict3.id, { bufferStartMinutes: 30 })];
8411
- case 53:
8597
+ case 55:
8412
8598
  _a.sent();
8413
8599
  return [4 /*yield*/, async_test('Event buffer start prevents booking', function () { return enduserSDK.api.calendar_events.book_appointment({
8414
8600
  calendarEventTemplateId: event30min.id,
8415
8601
  startTime: new Date(nySlots.availabilityBlocks[0].startTimeInMS),
8416
8602
  userId: nySlots.availabilityBlocks[0].userId,
8417
8603
  }); }, handleAnyError)];
8418
- case 54:
8604
+ case 56:
8419
8605
  _a.sent();
8420
8606
  return [4 /*yield*/, sdk.api.calendar_events.updateOne(conflict3.id, { bufferStartMinutes: 0 })];
8421
- case 55:
8607
+ case 57:
8422
8608
  _a.sent();
8423
8609
  return [4 /*yield*/, sdk.api.calendar_event_templates.updateOne(event30min.id, { bufferEndMinutes: 30 })];
8424
- case 56:
8610
+ case 58:
8425
8611
  _a.sent();
8426
8612
  return [4 /*yield*/, async_test('Template buffer end prevents booking', function () { return enduserSDK.api.calendar_events.book_appointment({
8427
8613
  calendarEventTemplateId: event30min.id,
@@ -8430,17 +8616,17 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8430
8616
  }); }, handleAnyError)
8431
8617
  // Test reschedule functionality with replaceHostOnReschedule setting
8432
8618
  ];
8433
- case 57:
8619
+ case 59:
8434
8620
  _a.sent();
8435
8621
  // Test reschedule functionality with replaceHostOnReschedule setting
8436
8622
  return [4 /*yield*/, sdk.api.calendar_event_templates.updateOne(event30min.id, { bufferEndMinutes: 0 })];
8437
- case 58:
8623
+ case 60:
8438
8624
  // Test reschedule functionality with replaceHostOnReschedule setting
8439
8625
  _a.sent();
8440
8626
  return [4 /*yield*/, sdk.api.calendar_events.deleteOne(conflict3.id)
8441
8627
  // Setup fresh availability for reschedule tests
8442
8628
  ];
8443
- case 59:
8629
+ case 61:
8444
8630
  _a.sent();
8445
8631
  // Setup fresh availability for reschedule tests
8446
8632
  return [4 /*yield*/, sdk.api.users.updateOne(sdk.userInfo.id, {
@@ -8455,7 +8641,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8455
8641
  }, {
8456
8642
  replaceObjectFields: true,
8457
8643
  })];
8458
- case 60:
8644
+ case 62:
8459
8645
  // Setup fresh availability for reschedule tests
8460
8646
  _a.sent();
8461
8647
  return [4 /*yield*/, sdkNonAdmin.api.users.updateOne(sdkNonAdmin.userInfo.id, {
@@ -8470,7 +8656,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8470
8656
  }, {
8471
8657
  replaceObjectFields: true,
8472
8658
  })];
8473
- case 61:
8659
+ case 63:
8474
8660
  _a.sent();
8475
8661
  return [4 /*yield*/, enduserSDK.api.calendar_events.get_appointment_availability({
8476
8662
  calendarEventTemplateId: event30min.id,
@@ -8481,7 +8667,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8481
8667
  })
8482
8668
  // Test 1: replaceHostOnReschedule: false (old behavior - preserve all attendees)
8483
8669
  ];
8484
- case 62:
8670
+ case 64:
8485
8671
  rescheduleSlots = _a.sent();
8486
8672
  return [4 /*yield*/, sdk.api.calendar_event_templates.createOne({
8487
8673
  title: 'Preserve Hosts Template',
@@ -8490,7 +8676,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8490
8676
  confirmationSMSDisabled: true,
8491
8677
  replaceHostOnReschedule: false, // explicitly set to false
8492
8678
  })];
8493
- case 63:
8679
+ case 65:
8494
8680
  templatePreserveHosts = _a.sent();
8495
8681
  return [4 /*yield*/, enduserSDK.api.calendar_events.book_appointment({
8496
8682
  calendarEventTemplateId: templatePreserveHosts.id,
@@ -8498,7 +8684,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8498
8684
  userId: sdk.userInfo.id,
8499
8685
  otherUserIds: [sdkNonAdmin.userInfo.id], // book with both hosts
8500
8686
  })];
8501
- case 64:
8687
+ case 66:
8502
8688
  originalMultiHostAppt = (_a.sent()).createdEvent;
8503
8689
  assert(originalMultiHostAppt.attendees.filter(function (a) { return a.type === 'user'; }).length === 2, 'Original appointment should have 2 user attendees', 'Original multi-host appointment created');
8504
8690
  return [4 /*yield*/, enduserSDK.api.calendar_events.book_appointment({
@@ -8507,7 +8693,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8507
8693
  startTime: new Date(rescheduleSlots.availabilityBlocks[1].startTimeInMS),
8508
8694
  userId: sdkNonAdmin.userInfo.id, // reschedule with different primary host
8509
8695
  })];
8510
- case 65:
8696
+ case 67:
8511
8697
  rescheduledPreserveHosts = (_a.sent()).createdEvent;
8512
8698
  return [4 /*yield*/, async_test('[reschedule] replaceHostOnReschedule: false preserves all user attendees', function () { return sdk.api.calendar_events.getOne(rescheduledPreserveHosts.id); }, { onResult: function (event) {
8513
8699
  var userAttendees = event.attendees.filter(function (a) { return a.type === 'user'; });
@@ -8529,7 +8715,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8529
8715
  } })
8530
8716
  // Test 2: replaceHostOnReschedule: true (new behavior - replace hosts)
8531
8717
  ];
8532
- case 66:
8718
+ case 68:
8533
8719
  _a.sent();
8534
8720
  return [4 /*yield*/, sdk.api.calendar_event_templates.createOne({
8535
8721
  title: 'Replace Hosts Template',
@@ -8538,7 +8724,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8538
8724
  confirmationSMSDisabled: true,
8539
8725
  replaceHostOnReschedule: true, // new default behavior
8540
8726
  })];
8541
- case 67:
8727
+ case 69:
8542
8728
  templateReplaceHosts = _a.sent();
8543
8729
  return [4 /*yield*/, enduserSDK.api.calendar_events.book_appointment({
8544
8730
  calendarEventTemplateId: templateReplaceHosts.id,
@@ -8546,7 +8732,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8546
8732
  userId: sdk.userInfo.id,
8547
8733
  otherUserIds: [sdkNonAdmin.userInfo.id], // book with both hosts
8548
8734
  })];
8549
- case 68:
8735
+ case 70:
8550
8736
  originalForReplace = (_a.sent()).createdEvent;
8551
8737
  assert(originalForReplace.attendees.filter(function (a) { return a.type === 'user'; }).length === 2, 'Original appointment should have 2 user attendees', 'Original multi-host appointment for replace test created');
8552
8738
  return [4 /*yield*/, enduserSDK.api.calendar_events.book_appointment({
@@ -8555,7 +8741,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8555
8741
  startTime: new Date(rescheduleSlots.availabilityBlocks[3].startTimeInMS),
8556
8742
  userId: sdkNonAdmin.userInfo.id, // reschedule with only this host
8557
8743
  })];
8558
- case 69:
8744
+ case 71:
8559
8745
  rescheduledReplaceHosts = (_a.sent()).createdEvent;
8560
8746
  return [4 /*yield*/, async_test('[reschedule] replaceHostOnReschedule: true replaces user attendees with new host only', function () { return sdk.api.calendar_events.getOne(rescheduledReplaceHosts.id); }, { onResult: function (event) {
8561
8747
  var userAttendees = event.attendees.filter(function (a) { return a.type === 'user'; });
@@ -8575,7 +8761,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8575
8761
  }
8576
8762
  return true;
8577
8763
  } })];
8578
- case 70:
8764
+ case 72:
8579
8765
  _a.sent();
8580
8766
  return [4 /*yield*/, async_test('[reschedule] replaceHostOnReschedule: true preserves enduser attendees', function () { return sdk.api.calendar_events.getOne(rescheduledReplaceHosts.id); }, { onResult: function (event) {
8581
8767
  var enduserAttendees = event.attendees.filter(function (a) { return a.type === 'enduser'; });
@@ -8591,31 +8777,88 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
8591
8777
  } })
8592
8778
  // Test 3: Verify old event is marked as rescheduled
8593
8779
  ];
8594
- case 71:
8780
+ case 73:
8595
8781
  _a.sent();
8596
8782
  // Test 3: Verify old event is marked as rescheduled
8597
- return [4 /*yield*/, async_test('[reschedule] original event marked as rescheduled', function () { return sdk.api.calendar_events.getOne(originalForReplace.id); }, { onResult: function (event) { return !!event.rescheduledAt; } })];
8598
- case 72:
8783
+ return [4 /*yield*/, async_test('[reschedule] original event marked as rescheduled', function () { return sdk.api.calendar_events.getOne(originalForReplace.id); }, { onResult: function (event) { return !!event.rescheduledAt; } })
8784
+ // videoIntegration passthrough from template to booked event (Twilio fix + Zoom regression guard)
8785
+ // set up fresh, dedicated availability so this doesn't interfere with the slot-accounting tests above
8786
+ ];
8787
+ case 74:
8599
8788
  // Test 3: Verify old event is marked as rescheduled
8600
8789
  _a.sent();
8790
+ // videoIntegration passthrough from template to booked event (Twilio fix + Zoom regression guard)
8791
+ // set up fresh, dedicated availability so this doesn't interfere with the slot-accounting tests above
8792
+ return [4 /*yield*/, sdk.api.users.updateOne(sdk.userInfo.id, {
8793
+ weeklyAvailabilities: [
8794
+ {
8795
+ dayOfWeekStartingSundayIndexedByZero: dayOfWeekStartingSundayIndexedByZero,
8796
+ startTimeInMinutes: 60 * 9,
8797
+ endTimeInMinutes: 60 * 11, // 11am,
8798
+ },
8799
+ ],
8800
+ timezone: 'America/New_York',
8801
+ }, {
8802
+ replaceObjectFields: true,
8803
+ })];
8804
+ case 75:
8805
+ // videoIntegration passthrough from template to booked event (Twilio fix + Zoom regression guard)
8806
+ // set up fresh, dedicated availability so this doesn't interfere with the slot-accounting tests above
8807
+ _a.sent();
8808
+ return [4 /*yield*/, enduserSDK.api.calendar_events.get_appointment_availability({
8809
+ calendarEventTemplateId: event30minTwilio.id,
8810
+ from: new Date(Date.now() - 10000),
8811
+ to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
8812
+ userIds: [sdk.userInfo.id],
8813
+ })];
8814
+ case 76:
8815
+ twilioSlots = _a.sent();
8816
+ return [4 /*yield*/, enduserSDK.api.calendar_events.book_appointment({
8817
+ calendarEventTemplateId: event30minTwilio.id,
8818
+ startTime: new Date(twilioSlots.availabilityBlocks[0].startTimeInMS),
8819
+ userId: sdk.userInfo.id,
8820
+ })];
8821
+ case 77:
8822
+ bookedTwilioAppointment = (_a.sent()).createdEvent;
8823
+ assert(bookedTwilioAppointment.videoIntegration === 'Twilio', 'Twilio videoIntegration not propagated to booked event', 'Twilio videoIntegration propagated to booked event');
8824
+ return [4 /*yield*/, enduserSDK.api.calendar_events.get_appointment_availability({
8825
+ calendarEventTemplateId: event30minZoom.id,
8826
+ from: new Date(Date.now() - 10000),
8827
+ to: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000),
8828
+ userIds: [sdk.userInfo.id],
8829
+ })];
8830
+ case 78:
8831
+ zoomSlots = _a.sent();
8832
+ return [4 /*yield*/, enduserSDK.api.calendar_events.book_appointment({
8833
+ calendarEventTemplateId: event30minZoom.id,
8834
+ startTime: new Date(zoomSlots.availabilityBlocks[0].startTimeInMS),
8835
+ userId: sdk.userInfo.id,
8836
+ })];
8837
+ case 79:
8838
+ bookedZoomAppointment = (_a.sent()).createdEvent;
8839
+ assert(bookedZoomAppointment.videoIntegration === 'Zoom', 'Zoom videoIntegration not propagated to booked event', 'Zoom videoIntegration propagated to booked event');
8601
8840
  return [4 /*yield*/, Promise.all([
8602
8841
  sdk.api.endusers.deleteOne(e1.id),
8603
8842
  sdk.api.endusers.deleteOne(e2.id),
8604
8843
  sdk.api.endusers.deleteOne(e3.id),
8605
8844
  sdk.api.calendar_event_templates.deleteOne(event30min.id),
8606
8845
  sdk.api.calendar_event_templates.deleteOne(event30minGroup.id),
8846
+ sdk.api.calendar_event_templates.deleteOne(event30minTwilio.id),
8847
+ sdk.api.calendar_event_templates.deleteOne(event30minZoom.id),
8607
8848
  sdk.api.calendar_event_templates.deleteOne(event15min.id),
8608
8849
  sdk.api.calendar_event_templates.deleteOne(templatePreserveHosts.id),
8609
8850
  sdk.api.calendar_event_templates.deleteOne(templateReplaceHosts.id),
8610
8851
  sdk.api.calendar_events.deleteOne(bookedAppointment.id),
8611
8852
  sdk.api.calendar_events.deleteOne(bookedMultiAppointment.id),
8853
+ sdk.api.calendar_events.deleteOne(bookedTwilioAppointment.id),
8854
+ sdk.api.calendar_events.deleteOne(bookedZoomAppointment.id),
8612
8855
  sdk.api.calendar_events.deleteOne(groupEvent.id),
8613
8856
  sdk.api.calendar_events.deleteOne(originalMultiHostAppt.id),
8614
8857
  sdk.api.calendar_events.deleteOne(rescheduledPreserveHosts.id),
8615
8858
  sdk.api.calendar_events.deleteOne(originalForReplace.id),
8616
8859
  sdk.api.calendar_events.deleteOne(rescheduledReplaceHosts.id),
8617
8860
  ])];
8618
- case 73:
8861
+ case 80:
8619
8862
  _a.sent();
8620
8863
  return [2 /*return*/];
8621
8864
  }
@@ -16687,7 +16930,7 @@ var ip_address_form_tests = function () { return __awaiter(void 0, void 0, void
16687
16930
  assert(truncate_string(null, { length: 4, showEllipsis: false }) === '', 'truncate doesnt work for non string', 'trucate works for non-string');
16688
16931
  _l.label = 2;
16689
16932
  case 2:
16690
- _l.trys.push([2, 149, , 150]);
16933
+ _l.trys.push([2, 155, , 156]);
16691
16934
  get_next_reminder_timestamp_tests();
16692
16935
  form_conditional_logic_tests();
16693
16936
  return [4 /*yield*/, test_weighted_round_robin()];
@@ -16843,393 +17086,411 @@ var ip_address_form_tests = function () { return __awaiter(void 0, void 0, void
16843
17086
  return [4 /*yield*/, beluga_pharmacy_mappings_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16844
17087
  case 21:
16845
17088
  _l.sent();
16846
- return [4 /*yield*/, enduser_write_restrictions_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17089
+ return [4 /*yield*/, mdi_case_offerings_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16847
17090
  case 22:
16848
17091
  _l.sent();
16849
- return [4 /*yield*/, user_portal_settings_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17092
+ return [4 /*yield*/, enduser_write_restrictions_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16850
17093
  case 23:
16851
17094
  _l.sent();
16852
- return [4 /*yield*/, automation_trigger_tests()];
17095
+ return [4 /*yield*/, enduser_cross_create_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16853
17096
  case 24:
16854
17097
  _l.sent();
16855
- return [4 /*yield*/, invite_user_enumeration_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17098
+ return [4 /*yield*/, globalunique_leak_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16856
17099
  case 25:
16857
17100
  _l.sent();
16858
- return [4 /*yield*/, handle_incoming_communication_cross_tenant_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17101
+ return [4 /*yield*/, load_inbox_redaction_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16859
17102
  case 26:
16860
17103
  _l.sent();
16861
- return [4 /*yield*/, calendar_event_webhook_template_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17104
+ return [4 /*yield*/, webhook_timeout_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16862
17105
  case 27:
16863
17106
  _l.sent();
16864
- return [4 /*yield*/, outbound_chat_sent_trigger_tests({ sdk: sdk })];
17107
+ return [4 /*yield*/, user_portal_settings_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16865
17108
  case 28:
16866
17109
  _l.sent();
16867
- return [4 /*yield*/, enduser_login_rate_limits_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17110
+ return [4 /*yield*/, automation_trigger_tests()];
16868
17111
  case 29:
16869
17112
  _l.sent();
16870
- return [4 /*yield*/, data_sync_redaction_bypass_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17113
+ return [4 /*yield*/, invite_user_enumeration_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16871
17114
  case 30:
16872
17115
  _l.sent();
16873
- return [4 /*yield*/, ai_conversations_rbac_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17116
+ return [4 /*yield*/, handle_incoming_communication_cross_tenant_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16874
17117
  case 31:
16875
17118
  _l.sent();
16876
- return [4 /*yield*/, cascade_role_rename_cross_tenant_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17119
+ return [4 /*yield*/, calendar_event_webhook_template_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16877
17120
  case 32:
16878
17121
  _l.sent();
16879
- return [4 /*yield*/, self_admin_role_assignment_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17122
+ return [4 /*yield*/, outbound_chat_sent_trigger_tests({ sdk: sdk })];
16880
17123
  case 33:
16881
17124
  _l.sent();
16882
- return [4 /*yield*/, sanitize_user_html_xss_tests()];
17125
+ return [4 /*yield*/, enduser_login_rate_limits_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16883
17126
  case 34:
16884
17127
  _l.sent();
16885
- return [4 /*yield*/, prototype_pollution_tests()];
17128
+ return [4 /*yield*/, data_sync_redaction_bypass_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16886
17129
  case 35:
16887
17130
  _l.sent();
16888
- return [4 /*yield*/, account_switcher_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17131
+ return [4 /*yield*/, ai_conversations_rbac_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16889
17132
  case 36:
16890
17133
  _l.sent();
16891
- return [4 /*yield*/, enduser_login_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17134
+ return [4 /*yield*/, cascade_role_rename_cross_tenant_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16892
17135
  case 37:
16893
17136
  _l.sent();
16894
- return [4 /*yield*/, outbound_chat_sent_trigger_tests({ sdk: sdk })];
17137
+ return [4 /*yield*/, self_admin_role_assignment_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16895
17138
  case 38:
16896
17139
  _l.sent();
16897
- return [4 /*yield*/, enduser_cross_access_isolation_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17140
+ return [4 /*yield*/, sanitize_user_html_xss_tests()];
16898
17141
  case 39:
16899
17142
  _l.sent();
16900
- return [4 /*yield*/, eom_procedure_codes_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17143
+ return [4 /*yield*/, prototype_pollution_tests()];
16901
17144
  case 40:
16902
17145
  _l.sent();
16903
- return [4 /*yield*/, cross_org_api_key_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17146
+ return [4 /*yield*/, account_switcher_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16904
17147
  case 41:
16905
17148
  _l.sent();
16906
- return [4 /*yield*/, organization_settings_duplicates_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17149
+ return [4 /*yield*/, enduser_login_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16907
17150
  case 42:
16908
17151
  _l.sent();
16909
- return [4 /*yield*/, enduser_session_invalidation_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17152
+ return [4 /*yield*/, outbound_chat_sent_trigger_tests({ sdk: sdk })];
16910
17153
  case 43:
16911
17154
  _l.sent();
16912
- return [4 /*yield*/, chats_analytics_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17155
+ return [4 /*yield*/, enduser_cross_access_isolation_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16913
17156
  case 44:
16914
17157
  _l.sent();
16915
- return [4 /*yield*/, field_redaction_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17158
+ return [4 /*yield*/, eom_procedure_codes_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16916
17159
  case 45:
16917
17160
  _l.sent();
16918
- return [4 /*yield*/, form_submitted_trigger_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17161
+ return [4 /*yield*/, cross_org_api_key_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16919
17162
  case 46:
16920
17163
  _l.sent();
16921
- return [4 /*yield*/, date_string_validation_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17164
+ return [4 /*yield*/, organization_api_keys_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16922
17165
  case 47:
16923
17166
  _l.sent();
16924
- return [4 /*yield*/, openloop_webhooks_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17167
+ return [4 /*yield*/, organization_settings_duplicates_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16925
17168
  case 48:
16926
17169
  _l.sent();
16927
- return [4 /*yield*/, mdi_webhooks_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17170
+ return [4 /*yield*/, enduser_session_invalidation_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16928
17171
  case 49:
16929
17172
  _l.sent();
16930
- return [4 /*yield*/, integrations_redacted_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17173
+ return [4 /*yield*/, chats_analytics_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16931
17174
  case 50:
16932
17175
  _l.sent();
16933
- return [4 /*yield*/, mdb_sort_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17176
+ return [4 /*yield*/, field_redaction_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16934
17177
  case 51:
16935
17178
  _l.sent();
16936
- return [4 /*yield*/, search_tests()];
17179
+ return [4 /*yield*/, form_submitted_trigger_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16937
17180
  case 52:
16938
17181
  _l.sent();
16939
- return [4 /*yield*/, time_tracks_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17182
+ return [4 /*yield*/, date_string_validation_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16940
17183
  case 53:
16941
17184
  _l.sent();
16942
- return [4 /*yield*/, time_tracks_historical_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17185
+ return [4 /*yield*/, openloop_webhooks_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16943
17186
  case 54:
16944
17187
  _l.sent();
16945
- return [4 /*yield*/, time_tracks_correction_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17188
+ return [4 /*yield*/, mdi_webhooks_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16946
17189
  case 55:
16947
17190
  _l.sent();
16948
- return [4 /*yield*/, time_tracks_review_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17191
+ return [4 /*yield*/, integrations_redacted_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16949
17192
  case 56:
16950
17193
  _l.sent();
16951
- return [4 /*yield*/, time_tracks_lock_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17194
+ return [4 /*yield*/, mdb_sort_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16952
17195
  case 57:
16953
17196
  _l.sent();
16954
- return [4 /*yield*/, time_tracks_edge_case_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17197
+ return [4 /*yield*/, search_tests()];
16955
17198
  case 58:
16956
17199
  _l.sent();
16957
- return [4 /*yield*/, time_tracks_resubmit_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17200
+ return [4 /*yield*/, time_tracks_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16958
17201
  case 59:
16959
17202
  _l.sent();
16960
- return [4 /*yield*/, time_tracks_appointment_duration_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17203
+ return [4 /*yield*/, time_tracks_historical_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16961
17204
  case 60:
16962
17205
  _l.sent();
16963
- return [4 /*yield*/, calendar_event_limits_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17206
+ return [4 /*yield*/, time_tracks_correction_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16964
17207
  case 61:
16965
17208
  _l.sent();
16966
- return [4 /*yield*/, get_some_projection_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17209
+ return [4 /*yield*/, time_tracks_review_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16967
17210
  case 62:
16968
17211
  _l.sent();
16969
- return [4 /*yield*/, elation_user_id_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17212
+ return [4 /*yield*/, time_tracks_lock_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16970
17213
  case 63:
16971
17214
  _l.sent();
16972
- return [4 /*yield*/, custom_dashboards_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17215
+ return [4 /*yield*/, time_tracks_edge_case_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16973
17216
  case 64:
16974
17217
  _l.sent();
16975
- return [4 /*yield*/, concurrent_build_threads_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17218
+ return [4 /*yield*/, time_tracks_resubmit_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16976
17219
  case 65:
16977
17220
  _l.sent();
16978
- return [4 /*yield*/, custom_aggregation_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17221
+ return [4 /*yield*/, time_tracks_appointment_duration_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16979
17222
  case 66:
16980
17223
  _l.sent();
16981
- return [4 /*yield*/, no_access_permission_checks_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17224
+ return [4 /*yield*/, calendar_event_limits_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16982
17225
  case 67:
16983
17226
  _l.sent();
16984
- return [4 /*yield*/, enduser_tests()];
17227
+ return [4 /*yield*/, get_some_projection_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16985
17228
  case 68:
16986
17229
  _l.sent();
16987
- return [4 /*yield*/, form_started_trigger_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17230
+ return [4 /*yield*/, elation_user_id_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16988
17231
  case 69:
16989
17232
  _l.sent();
16990
- return [4 /*yield*/, load_team_chat_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17233
+ return [4 /*yield*/, custom_dashboards_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16991
17234
  case 70:
16992
17235
  _l.sent();
16993
- return [4 /*yield*/, ai_conversations_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17236
+ return [4 /*yield*/, concurrent_build_threads_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16994
17237
  case 71:
16995
17238
  _l.sent();
16996
- return [4 /*yield*/, inbox_thread_assignment_updates_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17239
+ return [4 /*yield*/, custom_aggregation_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
16997
17240
  case 72:
16998
17241
  _l.sent();
16999
- return [4 /*yield*/, inbox_thread_draft_scheduled_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17242
+ return [4 /*yield*/, no_access_permission_checks_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17000
17243
  case 73:
17001
17244
  _l.sent();
17002
- return [4 /*yield*/, load_threads_autobuild_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17245
+ return [4 /*yield*/, enduser_tests()];
17003
17246
  case 74:
17004
17247
  _l.sent();
17005
- return [4 /*yield*/, inbox_threads_new_fields_tests()];
17248
+ return [4 /*yield*/, form_started_trigger_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17006
17249
  case 75:
17007
17250
  _l.sent();
17008
- return [4 /*yield*/, auto_merge_form_submission_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17251
+ return [4 /*yield*/, load_team_chat_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17009
17252
  case 76:
17010
17253
  _l.sent();
17011
- return [4 /*yield*/, threadKeyTests()];
17254
+ return [4 /*yield*/, ai_conversations_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17012
17255
  case 77:
17013
17256
  _l.sent();
17014
- return [4 /*yield*/, managed_content_enduser_access_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17257
+ return [4 /*yield*/, inbox_thread_assignment_updates_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17015
17258
  case 78:
17016
17259
  _l.sent();
17017
- return [4 /*yield*/, managed_content_file_access_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17260
+ return [4 /*yield*/, inbox_thread_draft_scheduled_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17018
17261
  case 79:
17019
17262
  _l.sent();
17020
- return [4 /*yield*/, afteraction_day_of_month_delay_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17263
+ return [4 /*yield*/, load_threads_autobuild_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17021
17264
  case 80:
17022
17265
  _l.sent();
17023
- return [4 /*yield*/, bulk_assignment_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17266
+ return [4 /*yield*/, inbox_threads_new_fields_tests()];
17024
17267
  case 81:
17025
17268
  _l.sent();
17026
- return [4 /*yield*/, formsort_tests()];
17269
+ return [4 /*yield*/, auto_merge_form_submission_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17027
17270
  case 82:
17028
17271
  _l.sent();
17029
- return [4 /*yield*/, self_serve_appointment_booking_tests()];
17272
+ return [4 /*yield*/, threadKeyTests()];
17030
17273
  case 83:
17031
17274
  _l.sent();
17032
- return [4 /*yield*/, test_ticket_automation_assignment_and_optimization()];
17275
+ return [4 /*yield*/, managed_content_enduser_access_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17033
17276
  case 84:
17034
17277
  _l.sent();
17035
- return [4 /*yield*/, monthly_availability_restrictions_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17278
+ return [4 /*yield*/, managed_content_file_access_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17036
17279
  case 85:
17037
17280
  _l.sent();
17038
- return [4 /*yield*/, journey_error_branching_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17281
+ return [4 /*yield*/, afteraction_day_of_month_delay_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17039
17282
  case 86:
17040
17283
  _l.sent();
17041
- return [4 /*yield*/, message_assignment_trigger_tests({ sdk: sdk })];
17284
+ return [4 /*yield*/, bulk_assignment_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17042
17285
  case 87:
17043
17286
  _l.sent();
17044
- return [4 /*yield*/, inbox_threads_building_tests()];
17287
+ return [4 /*yield*/, formsort_tests()];
17045
17288
  case 88:
17046
17289
  _l.sent();
17047
- return [4 /*yield*/, inbox_threads_loading_tests()];
17290
+ return [4 /*yield*/, self_serve_appointment_booking_tests()];
17048
17291
  case 89:
17049
17292
  _l.sent();
17050
- return [4 /*yield*/, load_inbox_data_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17293
+ return [4 /*yield*/, test_ticket_automation_assignment_and_optimization()];
17051
17294
  case 90:
17052
17295
  _l.sent();
17053
- return [4 /*yield*/, enduser_observations_acknowledge_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17296
+ return [4 /*yield*/, monthly_availability_restrictions_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17054
17297
  case 91:
17055
17298
  _l.sent();
17056
- return [4 /*yield*/, create_user_notifications_trigger_tests({ sdk: sdk })];
17299
+ return [4 /*yield*/, journey_error_branching_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17057
17300
  case 92:
17058
17301
  _l.sent();
17059
- return [4 /*yield*/, group_mms_active_tests()];
17302
+ return [4 /*yield*/, message_assignment_trigger_tests({ sdk: sdk })];
17060
17303
  case 93:
17061
17304
  _l.sent();
17062
- return [4 /*yield*/, auto_reply_tests()];
17305
+ return [4 /*yield*/, inbox_threads_building_tests()];
17063
17306
  case 94:
17064
17307
  _l.sent();
17065
- return [4 /*yield*/, relationships_tests()];
17308
+ return [4 /*yield*/, inbox_threads_loading_tests()];
17066
17309
  case 95:
17067
17310
  _l.sent();
17068
- return [4 /*yield*/, rate_limit_tests()];
17311
+ return [4 /*yield*/, load_inbox_data_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17069
17312
  case 96:
17070
17313
  _l.sent();
17071
- return [4 /*yield*/, ip_address_form_tests()];
17314
+ return [4 /*yield*/, enduser_observations_acknowledge_tests({ sdk: sdk, sdkNonAdmin: sdkNonAdmin })];
17072
17315
  case 97:
17073
17316
  _l.sent();
17074
- return [4 /*yield*/, bulk_update_tests()];
17317
+ return [4 /*yield*/, create_user_notifications_trigger_tests({ sdk: sdk })];
17075
17318
  case 98:
17076
17319
  _l.sent();
17077
- return [4 /*yield*/, calendar_events_bulk_update_tests({ sdk: sdk })];
17320
+ return [4 /*yield*/, group_mms_active_tests()];
17078
17321
  case 99:
17079
17322
  _l.sent();
17080
- return [4 /*yield*/, cancel_upcoming_appointments_journey_action_test()];
17323
+ return [4 /*yield*/, auto_reply_tests()];
17081
17324
  case 100:
17082
17325
  _l.sent();
17083
- return [4 /*yield*/, multi_tenant_tests()]; // should come right after setup tests
17326
+ return [4 /*yield*/, relationships_tests()];
17084
17327
  case 101:
17328
+ _l.sent();
17329
+ return [4 /*yield*/, rate_limit_tests()];
17330
+ case 102:
17331
+ _l.sent();
17332
+ return [4 /*yield*/, ip_address_form_tests()];
17333
+ case 103:
17334
+ _l.sent();
17335
+ return [4 /*yield*/, bulk_update_tests()];
17336
+ case 104:
17337
+ _l.sent();
17338
+ return [4 /*yield*/, calendar_events_bulk_update_tests({ sdk: sdk })];
17339
+ case 105:
17340
+ _l.sent();
17341
+ return [4 /*yield*/, cancel_upcoming_appointments_journey_action_test()];
17342
+ case 106:
17343
+ _l.sent();
17344
+ return [4 /*yield*/, multi_tenant_tests()]; // should come right after setup tests
17345
+ case 107:
17085
17346
  _l.sent(); // should come right after setup tests
17086
17347
  return [4 /*yield*/, sync_tests_with_access_tags()]; // should come directly after setup to avoid extra sync values
17087
- case 102:
17348
+ case 108:
17088
17349
  _l.sent(); // should come directly after setup to avoid extra sync values
17089
17350
  return [4 /*yield*/, sync_tests()]; // should come directly after setup to avoid extra sync values
17090
- case 103:
17351
+ case 109:
17091
17352
  _l.sent(); // should come directly after setup to avoid extra sync values
17092
17353
  return [4 /*yield*/, get_templated_message_tests()];
17093
- case 104:
17354
+ case 110:
17094
17355
  _l.sent();
17095
17356
  return [4 /*yield*/, updatedAt_tests()];
17096
- case 105:
17357
+ case 111:
17097
17358
  _l.sent();
17098
17359
  return [4 /*yield*/, file_source_tests()];
17099
- case 106:
17360
+ case 112:
17100
17361
  _l.sent();
17101
17362
  return [4 /*yield*/, enduser_access_tags_tests()];
17102
- case 107:
17363
+ case 113:
17103
17364
  _l.sent();
17104
17365
  return [4 /*yield*/, enduserAccessTests()];
17105
- case 108:
17366
+ case 114:
17106
17367
  _l.sent();
17107
17368
  return [4 /*yield*/, test_form_response_search()];
17108
- case 109:
17369
+ case 115:
17109
17370
  _l.sent();
17110
17371
  return [4 /*yield*/, date_parsing_tests()];
17111
- case 110:
17372
+ case 116:
17112
17373
  _l.sent();
17113
17374
  return [4 /*yield*/, fromEmailOverride_tests()];
17114
- case 111:
17375
+ case 117:
17115
17376
  _l.sent();
17116
17377
  return [4 /*yield*/, ticket_tests()];
17117
- case 112:
17378
+ case 118:
17118
17379
  _l.sent();
17119
17380
  return [4 /*yield*/, uniqueness_tests()];
17120
- case 113:
17381
+ case 119:
17121
17382
  _l.sent();
17122
17383
  return [4 /*yield*/, enduser_orders_tests()];
17123
- case 114:
17384
+ case 120:
17124
17385
  _l.sent();
17125
17386
  return [4 /*yield*/, calendar_event_care_team_tests()];
17126
- case 115:
17387
+ case 121:
17127
17388
  _l.sent();
17128
17389
  return [4 /*yield*/, merge_enduser_tests()];
17129
- case 116:
17390
+ case 122:
17130
17391
  _l.sent();
17131
17392
  return [4 /*yield*/, input_modifier_tests()];
17132
- case 117:
17393
+ case 123:
17133
17394
  _l.sent();
17134
17395
  return [4 /*yield*/, switch_to_related_contacts_tests()];
17135
- case 118:
17396
+ case 124:
17136
17397
  _l.sent();
17137
17398
  return [4 /*yield*/, redaction_tests()];
17138
- case 119:
17399
+ case 125:
17139
17400
  _l.sent();
17140
17401
  return [4 /*yield*/, no_chained_triggers_tests()];
17141
- case 120:
17402
+ case 126:
17142
17403
  _l.sent();
17143
17404
  return [4 /*yield*/, mdb_filter_tests()];
17144
- case 121:
17405
+ case 127:
17145
17406
  _l.sent();
17146
17407
  return [4 /*yield*/, superadmin_tests()];
17147
- case 122:
17408
+ case 128:
17148
17409
  _l.sent();
17149
17410
  return [4 /*yield*/, ticket_queue_tests()];
17150
- case 123:
17411
+ case 129:
17151
17412
  _l.sent();
17152
17413
  return [4 /*yield*/, vital_trigger_tests()];
17153
- case 124:
17414
+ case 130:
17154
17415
  _l.sent();
17155
17416
  return [4 /*yield*/, close_reasons_no_duplicates_tests()];
17156
- case 125:
17417
+ case 131:
17157
17418
  _l.sent();
17158
17419
  return [4 /*yield*/, register_as_enduser_tests()];
17159
- case 126:
17420
+ case 132:
17160
17421
  _l.sent();
17161
17422
  return [4 /*yield*/, lockout_tests()];
17162
- case 127:
17423
+ case 133:
17163
17424
  _l.sent();
17164
17425
  return [4 /*yield*/, delete_user_tests()
17165
17426
  // await test_send_with_template()
17166
17427
  ];
17167
- case 128:
17428
+ case 134:
17168
17429
  _l.sent();
17169
17430
  // await test_send_with_template()
17170
17431
  return [4 /*yield*/, bulk_read_tests()];
17171
- case 129:
17432
+ case 135:
17172
17433
  // await test_send_with_template()
17173
17434
  _l.sent();
17174
17435
  return [4 /*yield*/, ticket_reminder_tests()];
17175
- case 130:
17436
+ case 136:
17176
17437
  _l.sent();
17177
17438
  return [4 /*yield*/, marketing_email_unsubscribe_tests()];
17178
- case 131:
17439
+ case 137:
17179
17440
  _l.sent();
17180
17441
  return [4 /*yield*/, unique_strings_tests()];
17181
- case 132:
17442
+ case 138:
17182
17443
  _l.sent();
17183
17444
  return [4 /*yield*/, alternate_phones_tests()];
17184
- case 133:
17445
+ case 139:
17185
17446
  _l.sent();
17186
17447
  return [4 /*yield*/, role_based_access_tests()];
17187
- case 134:
17448
+ case 140:
17188
17449
  _l.sent();
17189
17450
  return [4 /*yield*/, enduser_session_tests()];
17190
- case 135:
17451
+ case 141:
17191
17452
  _l.sent();
17192
17453
  return [4 /*yield*/, nextReminderInMS_tests()];
17193
- case 136:
17454
+ case 142:
17194
17455
  _l.sent();
17195
17456
  return [4 /*yield*/, wait_for_trigger_tests()];
17196
- case 137:
17457
+ case 143:
17197
17458
  _l.sent();
17198
17459
  return [4 /*yield*/, pdf_generation()];
17199
- case 138:
17460
+ case 144:
17200
17461
  _l.sent();
17201
17462
  return [4 /*yield*/, remove_from_journey_on_incoming_comms_tests().catch(console.error)]; // timing is unreliable, uncomment if changing logic
17202
- case 139:
17463
+ case 145:
17203
17464
  _l.sent(); // timing is unreliable, uncomment if changing logic
17204
17465
  return [4 /*yield*/, sub_organization_enduser_tests()];
17205
- case 140:
17466
+ case 146:
17206
17467
  _l.sent();
17207
17468
  return [4 /*yield*/, sub_organization_tests()];
17208
- case 141:
17469
+ case 147:
17209
17470
  _l.sent();
17210
17471
  return [4 /*yield*/, filter_by_date_tests()];
17211
- case 142:
17472
+ case 148:
17212
17473
  _l.sent();
17213
17474
  return [4 /*yield*/, generate_user_auth_tests()];
17214
- case 143:
17475
+ case 149:
17215
17476
  _l.sent();
17216
17477
  return [4 /*yield*/, generateEnduserAuthTests()];
17217
- case 144:
17478
+ case 150:
17218
17479
  _l.sent();
17219
17480
  return [4 /*yield*/, public_form_tests()];
17220
- case 145:
17481
+ case 151:
17221
17482
  _l.sent();
17222
17483
  return [4 /*yield*/, badInputTests()];
17223
- case 146:
17484
+ case 152:
17224
17485
  _l.sent();
17225
17486
  return [4 /*yield*/, filterTests()];
17226
- case 147:
17487
+ case 153:
17227
17488
  _l.sent();
17228
17489
  return [4 /*yield*/, updatesTests()];
17229
- case 148:
17490
+ case 154:
17230
17491
  _l.sent();
17231
- return [3 /*break*/, 150];
17232
- case 149:
17492
+ return [3 /*break*/, 156];
17493
+ case 155:
17233
17494
  err_1 = _l.sent();
17234
17495
  console.error("Failed during custom test");
17235
17496
  if (err_1.message && err_1.info) {
@@ -17239,18 +17500,18 @@ var ip_address_form_tests = function () { return __awaiter(void 0, void 0, void
17239
17500
  console.error(err_1);
17240
17501
  }
17241
17502
  process.exit(1);
17242
- return [3 /*break*/, 150];
17243
- case 150:
17503
+ return [3 /*break*/, 156];
17504
+ case 156:
17244
17505
  _a = schema;
17245
17506
  _b = [];
17246
17507
  for (_c in _a)
17247
17508
  _b.push(_c);
17248
17509
  _i = 0;
17249
- _l.label = 151;
17250
- case 151:
17251
- if (!(_i < _b.length)) return [3 /*break*/, 154];
17510
+ _l.label = 157;
17511
+ case 157:
17512
+ if (!(_i < _b.length)) return [3 /*break*/, 160];
17252
17513
  _c = _b[_i];
17253
- if (!(_c in _a)) return [3 /*break*/, 153];
17514
+ if (!(_c in _a)) return [3 /*break*/, 159];
17254
17515
  n = _c;
17255
17516
  returnValidation = (_k = (_j = schema[n].customActions) === null || _j === void 0 ? void 0 : _j.create) === null || _k === void 0 ? void 0 : _k.returns;
17256
17517
  return [4 /*yield*/, run_generated_tests({
@@ -17261,41 +17522,41 @@ var ip_address_form_tests = function () { return __awaiter(void 0, void 0, void
17261
17522
  create: returnValidation // ModelFields<ClientModel>,
17262
17523
  }
17263
17524
  })];
17264
- case 152:
17525
+ case 158:
17265
17526
  _l.sent();
17266
- _l.label = 153;
17267
- case 153:
17527
+ _l.label = 159;
17528
+ case 159:
17268
17529
  _i++;
17269
- return [3 /*break*/, 151];
17270
- case 154:
17530
+ return [3 /*break*/, 157];
17531
+ case 160:
17271
17532
  _d = tests;
17272
17533
  _f = [];
17273
17534
  for (_g in _d)
17274
17535
  _f.push(_g);
17275
17536
  _h = 0;
17276
- _l.label = 155;
17277
- case 155:
17278
- if (!(_h < _f.length)) return [3 /*break*/, 160];
17537
+ _l.label = 161;
17538
+ case 161:
17539
+ if (!(_h < _f.length)) return [3 /*break*/, 166];
17279
17540
  _g = _f[_h];
17280
- if (!(_g in _d)) return [3 /*break*/, 159];
17541
+ if (!(_g in _d)) return [3 /*break*/, 165];
17281
17542
  t = _g;
17282
- _l.label = 156;
17283
- case 156:
17284
- _l.trys.push([156, 158, , 159]);
17543
+ _l.label = 162;
17544
+ case 162:
17545
+ _l.trys.push([162, 164, , 165]);
17285
17546
  return [4 /*yield*/, tests[t]()];
17286
- case 157:
17547
+ case 163:
17287
17548
  _l.sent();
17288
- return [3 /*break*/, 159];
17289
- case 158:
17549
+ return [3 /*break*/, 165];
17550
+ case 164:
17290
17551
  err_2 = _l.sent();
17291
17552
  console.error("Error running test:");
17292
17553
  console.error(err_2);
17293
17554
  process.exit(1);
17294
- return [3 /*break*/, 159];
17295
- case 159:
17555
+ return [3 /*break*/, 165];
17556
+ case 165:
17296
17557
  _h++;
17297
- return [3 /*break*/, 155];
17298
- case 160:
17558
+ return [3 /*break*/, 161];
17559
+ case 166:
17299
17560
  process.exit();
17300
17561
  return [2 /*return*/];
17301
17562
  }