@tellescope/sdk 1.256.6 → 1.256.7

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 (115) hide show
  1. package/lib/cjs/enduser.d.ts +1 -1
  2. package/lib/cjs/enduser.d.ts.map +1 -1
  3. package/lib/cjs/enduser.js +1 -0
  4. package/lib/cjs/enduser.js.map +1 -1
  5. package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts +6 -0
  6. package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts.map +1 -0
  7. package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js +505 -0
  8. package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js.map +1 -0
  9. package/lib/cjs/tests/api_tests/configurations_public_read.test.d.ts +6 -0
  10. package/lib/cjs/tests/api_tests/configurations_public_read.test.d.ts.map +1 -0
  11. package/lib/cjs/tests/api_tests/configurations_public_read.test.js +173 -0
  12. package/lib/cjs/tests/api_tests/configurations_public_read.test.js.map +1 -0
  13. package/lib/cjs/tests/api_tests/form_started_trigger.test.d.ts.map +1 -1
  14. package/lib/cjs/tests/api_tests/form_started_trigger.test.js +87 -24
  15. package/lib/cjs/tests/api_tests/form_started_trigger.test.js.map +1 -1
  16. package/lib/cjs/tests/api_tests/form_translations.test.d.ts +6 -0
  17. package/lib/cjs/tests/api_tests/form_translations.test.d.ts.map +1 -0
  18. package/lib/cjs/tests/api_tests/form_translations.test.js +259 -0
  19. package/lib/cjs/tests/api_tests/form_translations.test.js.map +1 -0
  20. package/lib/cjs/tests/api_tests/group_event_attendee_status_triggers.test.d.ts.map +1 -1
  21. package/lib/cjs/tests/api_tests/group_event_attendee_status_triggers.test.js +340 -124
  22. package/lib/cjs/tests/api_tests/group_event_attendee_status_triggers.test.js.map +1 -1
  23. package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.d.ts +6 -0
  24. package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.d.ts.map +1 -0
  25. package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.js +277 -0
  26. package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.js.map +1 -0
  27. package/lib/cjs/tests/api_tests/purchase_made_trigger.test.d.ts.map +1 -1
  28. package/lib/cjs/tests/api_tests/purchase_made_trigger.test.js +262 -78
  29. package/lib/cjs/tests/api_tests/purchase_made_trigger.test.js.map +1 -1
  30. package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts +31 -0
  31. package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts.map +1 -0
  32. package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js +230 -0
  33. package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js.map +1 -0
  34. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.d.ts.map +1 -1
  35. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.js +206 -198
  36. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.js.map +1 -1
  37. package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.d.ts.map +1 -1
  38. package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.js +343 -80
  39. package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.js.map +1 -1
  40. package/lib/cjs/tests/api_tests/welle_partner_token.test.d.ts.map +1 -1
  41. package/lib/cjs/tests/api_tests/welle_partner_token.test.js +74 -35
  42. package/lib/cjs/tests/api_tests/welle_partner_token.test.js.map +1 -1
  43. package/lib/cjs/tests/stripe_webhook_helpers.d.ts +134 -0
  44. package/lib/cjs/tests/stripe_webhook_helpers.d.ts.map +1 -1
  45. package/lib/cjs/tests/stripe_webhook_helpers.js +126 -1
  46. package/lib/cjs/tests/stripe_webhook_helpers.js.map +1 -1
  47. package/lib/cjs/tests/tests.d.ts.map +1 -1
  48. package/lib/cjs/tests/tests.js +238 -212
  49. package/lib/cjs/tests/tests.js.map +1 -1
  50. package/lib/esm/enduser.d.ts +1 -1
  51. package/lib/esm/enduser.d.ts.map +1 -1
  52. package/lib/esm/enduser.js +1 -0
  53. package/lib/esm/enduser.js.map +1 -1
  54. package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts +6 -0
  55. package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts.map +1 -0
  56. package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js +501 -0
  57. package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js.map +1 -0
  58. package/lib/esm/tests/api_tests/configurations_public_read.test.d.ts +6 -0
  59. package/lib/esm/tests/api_tests/configurations_public_read.test.d.ts.map +1 -0
  60. package/lib/esm/tests/api_tests/configurations_public_read.test.js +169 -0
  61. package/lib/esm/tests/api_tests/configurations_public_read.test.js.map +1 -0
  62. package/lib/esm/tests/api_tests/form_started_trigger.test.d.ts.map +1 -1
  63. package/lib/esm/tests/api_tests/form_started_trigger.test.js +87 -24
  64. package/lib/esm/tests/api_tests/form_started_trigger.test.js.map +1 -1
  65. package/lib/esm/tests/api_tests/form_translations.test.d.ts +6 -0
  66. package/lib/esm/tests/api_tests/form_translations.test.d.ts.map +1 -0
  67. package/lib/esm/tests/api_tests/form_translations.test.js +255 -0
  68. package/lib/esm/tests/api_tests/form_translations.test.js.map +1 -0
  69. package/lib/esm/tests/api_tests/group_event_attendee_status_triggers.test.d.ts.map +1 -1
  70. package/lib/esm/tests/api_tests/group_event_attendee_status_triggers.test.js +340 -124
  71. package/lib/esm/tests/api_tests/group_event_attendee_status_triggers.test.js.map +1 -1
  72. package/lib/esm/tests/api_tests/mdi_trigger_refill.test.d.ts +6 -0
  73. package/lib/esm/tests/api_tests/mdi_trigger_refill.test.d.ts.map +1 -0
  74. package/lib/esm/tests/api_tests/mdi_trigger_refill.test.js +273 -0
  75. package/lib/esm/tests/api_tests/mdi_trigger_refill.test.js.map +1 -0
  76. package/lib/esm/tests/api_tests/purchase_made_trigger.test.d.ts.map +1 -1
  77. package/lib/esm/tests/api_tests/purchase_made_trigger.test.js +262 -78
  78. package/lib/esm/tests/api_tests/purchase_made_trigger.test.js.map +1 -1
  79. package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts +31 -0
  80. package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts.map +1 -0
  81. package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js +226 -0
  82. package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js.map +1 -0
  83. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.d.ts.map +1 -1
  84. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.js +206 -198
  85. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.js.map +1 -1
  86. package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.d.ts.map +1 -1
  87. package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.js +344 -81
  88. package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.js.map +1 -1
  89. package/lib/esm/tests/api_tests/welle_partner_token.test.d.ts.map +1 -1
  90. package/lib/esm/tests/api_tests/welle_partner_token.test.js +74 -35
  91. package/lib/esm/tests/api_tests/welle_partner_token.test.js.map +1 -1
  92. package/lib/esm/tests/stripe_webhook_helpers.d.ts +134 -0
  93. package/lib/esm/tests/stripe_webhook_helpers.d.ts.map +1 -1
  94. package/lib/esm/tests/stripe_webhook_helpers.js +119 -0
  95. package/lib/esm/tests/stripe_webhook_helpers.js.map +1 -1
  96. package/lib/esm/tests/tests.d.ts.map +1 -1
  97. package/lib/esm/tests/tests.js +238 -212
  98. package/lib/esm/tests/tests.js.map +1 -1
  99. package/lib/tsconfig.tsbuildinfo +1 -1
  100. package/package.json +10 -10
  101. package/src/enduser.ts +4 -2
  102. package/src/tests/api_tests/calendar_event_create_and_bulk_triggers.test.ts +293 -0
  103. package/src/tests/api_tests/configurations_public_read.test.ts +116 -0
  104. package/src/tests/api_tests/form_started_trigger.test.ts +49 -1
  105. package/src/tests/api_tests/form_translations.test.ts +205 -0
  106. package/src/tests/api_tests/group_event_attendee_status_triggers.test.ts +135 -0
  107. package/src/tests/api_tests/mdi_trigger_refill.test.ts +184 -0
  108. package/src/tests/api_tests/purchase_made_trigger.test.ts +137 -0
  109. package/src/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.ts +144 -0
  110. package/src/tests/api_tests/security/public_endpoint_auth_field_lock.test.ts +16 -6
  111. package/src/tests/api_tests/stripe_webhook_triggers.test.ts +221 -0
  112. package/src/tests/api_tests/welle_partner_token.test.ts +49 -6
  113. package/src/tests/stripe_webhook_helpers.ts +116 -0
  114. package/src/tests/tests.ts +27 -12
  115. package/test_generated.pdf +0 -0
@@ -199,10 +199,10 @@ var sleep = function (ms) { return new Promise(function (resolve) { return setTi
199
199
  var public_endpoint_auth_field_lock_tests = function (_a) {
200
200
  var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
201
201
  return __awaiter(void 0, void 0, void 0, function () {
202
- var businessId, RUN, results, record, skip, runScenario, phoneOffset, phoneSeed, nextPhone, emailFor, createdEnduserIds, createdFormIds, createdFormFieldIds, createdUserIds, createdEventIds, createdTemplateIds, organization, MATCH_EMAIL_AND_NAMES, form, plainField, autoMergeForm, autoMergeField, makeIntakeForm, intake, partialIntake, pivotIntake, MERGE_CUSTOM_KEY, autoMergeIntake, template, hostUser, publicSDK, startForm, startBooking, startFormOn, asEnduser, postAuthed, tokenFromURL, patchAuthed, intakeAnswers, pollEnduser, describe, makeVictim, VICTIM_SHAPES, _loop_1, _i, VICTIM_SHAPES_1, shape, _loop_2, _b, VICTIM_SHAPES_2, shape, formSessions, bookingTokens, _loop_3, _c, VICTIM_SHAPES_3, shape, G12_NAME, G13_NAME, G14_NAME, G15_NAME, namelessDob, makeNamelessVictim, G19_NAME, G20_NAME, coldStartCase, G23_NAME, chainForVictim, G24_NAME, G25_NAME, G26_NAME, G27_NAME, G28_NAME, failures, skipped, _d, results_1, r, status_1, _e, createdEventIds_1, id, _f, createdFormIds_1, formId, responses, _g, responses_1, response, _h, createdFormFieldIds_1, id, _j, createdFormIds_2, id, uniqueEnduserIds, _k, uniqueEnduserIds_1, id, _l, createdTemplateIds_1, id, _m, createdUserIds_1, id, _o, results_2, r;
203
- var _p, _q;
204
- return __generator(this, function (_r) {
205
- switch (_r.label) {
202
+ var businessId, RUN, results, record, skip, runScenario, phoneOffset, phoneSeed, nextPhone, emailFor, createdEnduserIds, createdFormIds, createdFormFieldIds, createdUserIds, createdEventIds, createdTemplateIds, organization, MATCH_EMAIL_AND_NAMES, form, plainField, autoMergeForm, autoMergeField, makeIntakeForm, intake, partialIntake, pivotIntake, MERGE_CUSTOM_KEY, autoMergeIntake, template, hostEmail, hostUser, _b, publicSDK, startForm, startBooking, startFormOn, asEnduser, postAuthed, tokenFromURL, patchAuthed, intakeAnswers, pollEnduser, describe, makeVictim, VICTIM_SHAPES, _loop_1, _i, VICTIM_SHAPES_1, shape, _loop_2, _c, VICTIM_SHAPES_2, shape, formSessions, bookingTokens, _loop_3, _d, VICTIM_SHAPES_3, shape, G12_NAME, G13_NAME, G14_NAME, G15_NAME, namelessDob, makeNamelessVictim, G19_NAME, G20_NAME, coldStartCase, G23_NAME, chainForVictim, G24_NAME, G25_NAME, G26_NAME, G27_NAME, G28_NAME, failures, skipped, _e, results_1, r, status_1, _f, createdEventIds_1, id, _g, createdFormIds_1, formId, responses, _h, responses_1, response, _j, createdFormFieldIds_1, id, _k, createdFormIds_2, id, uniqueEnduserIds, _l, uniqueEnduserIds_1, id, _m, createdTemplateIds_1, id, _o, createdUserIds_1, id, _p, results_2, r;
203
+ var _q, _r;
204
+ return __generator(this, function (_s) {
205
+ switch (_s.label) {
206
206
  case 0:
207
207
  (0, testing_1.log_header)("Public Endpoint Auth Field Lock (email / phone)");
208
208
  businessId = sdk.userInfo.businessId;
@@ -249,11 +249,11 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
249
249
  createdTemplateIds = [];
250
250
  return [4 /*yield*/, sdk.api.organizations.getOne(businessId).catch(function () { return null; })];
251
251
  case 1:
252
- organization = _r.sent();
253
- MATCH_EMAIL_AND_NAMES = !!((_q = (_p = organization === null || organization === void 0 ? void 0 : organization.settings) === null || _p === void 0 ? void 0 : _p.endusers) === null || _q === void 0 ? void 0 : _q.matchEmailAndNames);
252
+ organization = _s.sent();
253
+ MATCH_EMAIL_AND_NAMES = !!((_r = (_q = organization === null || organization === void 0 ? void 0 : organization.settings) === null || _q === void 0 ? void 0 : _q.endusers) === null || _r === void 0 ? void 0 : _r.matchEmailAndNames);
254
254
  return [4 /*yield*/, sdk.api.forms.createOne({ title: "auth field lock ".concat(RUN), allowPublicURL: true })];
255
255
  case 2:
256
- form = _r.sent();
256
+ form = _s.sent();
257
257
  createdFormIds.push(form.id);
258
258
  return [4 /*yield*/, sdk.api.form_fields.createOne({
259
259
  formId: form.id,
@@ -262,7 +262,7 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
262
262
  previousFields: [{ type: 'root', info: {} }],
263
263
  })];
264
264
  case 3:
265
- plainField = _r.sent();
265
+ plainField = _s.sent();
266
266
  createdFormFieldIds.push(plainField.id);
267
267
  return [4 /*yield*/, sdk.api.forms.createOne({
268
268
  title: "auth field lock automerge ".concat(RUN),
@@ -270,7 +270,7 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
270
270
  autoMergeOnSubmission: true,
271
271
  })];
272
272
  case 4:
273
- autoMergeForm = _r.sent();
273
+ autoMergeForm = _s.sent();
274
274
  createdFormIds.push(autoMergeForm.id);
275
275
  return [4 /*yield*/, sdk.api.form_fields.createOne({
276
276
  formId: autoMergeForm.id,
@@ -279,7 +279,7 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
279
279
  previousFields: [{ type: 'root', info: {} }],
280
280
  })];
281
281
  case 5:
282
- autoMergeField = _r.sent();
282
+ autoMergeField = _s.sent();
283
283
  createdFormFieldIds.push(autoMergeField.id);
284
284
  makeIntakeForm = function (label, opts) {
285
285
  if (opts === void 0) { opts = {}; }
@@ -307,20 +307,20 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
307
307
  };
308
308
  return [4 /*yield*/, makeIntakeForm('intake')];
309
309
  case 6:
310
- intake = _r.sent();
310
+ intake = _s.sent();
311
311
  return [4 /*yield*/, makeIntakeForm('partial', { saveIntakeOnPartial: true })
312
312
  // Deliberately NOT allowPublicURL. prepare_form_response does not require it, so a public session
313
313
  // can pivot from any public form to any form in the org carrying an email/phone intake mapping.
314
314
  ];
315
315
  case 7:
316
- partialIntake = _r.sent();
316
+ partialIntake = _s.sent();
317
317
  return [4 /*yield*/, makeIntakeForm('pivot', { public: false })
318
318
  // Auto-merge fixture for G26. Needs real intakeField mappings, because resolveAutoMergeBeforeSubmission
319
319
  // derives its match values from the submitted answers via those mappings — and the custom field is the
320
320
  // anti-vacuity control (it proves the intake write ran at all).
321
321
  ];
322
322
  case 8:
323
- pivotIntake = _r.sent();
323
+ pivotIntake = _s.sent();
324
324
  MERGE_CUSTOM_KEY = "aflMerge".concat(RUN);
325
325
  return [4 /*yield*/, (function () { return __awaiter(void 0, void 0, void 0, function () {
326
326
  var form, spec, made, _i, spec_1, s, field, fname, lname, dateOfBirth, email, custom;
@@ -372,7 +372,7 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
372
372
  });
373
373
  }); })()];
374
374
  case 9:
375
- autoMergeIntake = _r.sent();
375
+ autoMergeIntake = _s.sent();
376
376
  return [4 /*yield*/, sdk.api.calendar_event_templates.createOne({
377
377
  title: "auth field lock ".concat(RUN),
378
378
  durationInMinutes: 60,
@@ -381,16 +381,24 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
381
381
  reminders: [],
382
382
  })];
383
383
  case 10:
384
- template = _r.sent();
384
+ template = _s.sent();
385
385
  createdTemplateIds.push(template.id);
386
+ hostEmail = 'lock-host@tellescope.com';
387
+ return [4 /*yield*/, sdk.api.users.getOne({ email: hostEmail }).catch(function () { return null; })];
388
+ case 11:
389
+ _b = (_s.sent());
390
+ if (_b) return [3 /*break*/, 13];
386
391
  return [4 /*yield*/, sdk.api.users.createOne({
387
- email: emailFor('lock-host'),
392
+ email: hostEmail,
388
393
  verifiedEmail: true,
389
394
  fname: 'Lock',
390
- lname: "Host".concat(RUN),
395
+ lname: 'Host',
391
396
  })];
392
- case 11:
393
- hostUser = _r.sent();
397
+ case 12:
398
+ _b = (_s.sent());
399
+ _s.label = 13;
400
+ case 13:
401
+ hostUser = _b;
394
402
  createdUserIds.push(hostUser.id);
395
403
  return [4 /*yield*/, sdk.api.users.updateOne(hostUser.id, {
396
404
  weeklyAvailabilities: [0, 1, 2, 3, 4, 5, 6].map(function (dayOfWeekStartingSundayIndexedByZero) { return ({
@@ -401,15 +409,15 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
401
409
  }); }),
402
410
  calendarEventLimits: [],
403
411
  }, { replaceObjectFields: true })];
404
- case 12:
405
- _r.sent();
412
+ case 14:
413
+ _s.sent();
406
414
  return [4 /*yield*/, sleep(250)
407
415
  // ---------------------------------------------------------------------------------------------
408
416
  // Helpers
409
417
  // ---------------------------------------------------------------------------------------------
410
418
  ]; // let form.numFields settle before the public endpoints validate it
411
- case 13:
412
- _r.sent(); // let form.numFields settle before the public endpoints validate it
419
+ case 15:
420
+ _s.sent(); // let form.numFields settle before the public endpoints validate it
413
421
  publicSDK = function () { return new sdk_1.EnduserSession({ host: host, businessId: businessId }); };
414
422
  startForm = function (args) { return publicSDK().api.form_responses.session_for_public_form(__assign({ formId: form.id, businessId: businessId }, args)); };
415
423
  startBooking = function (args) { return publicSDK().api.calendar_events.session_for_public_appointment_booking(__assign({ calendarEventTemplateId: template.id, businessId: businessId }, args)); };
@@ -511,8 +519,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
511
519
  ];
512
520
  _loop_1 = function (shape) {
513
521
  var name_1;
514
- return __generator(this, function (_s) {
515
- switch (_s.label) {
522
+ return __generator(this, function (_t) {
523
+ switch (_t.label) {
516
524
  case 0:
517
525
  name_1 = "A blocks email/phone overwrite \u2014 ".concat(shape.label);
518
526
  return [4 /*yield*/, runScenario('G1', name_1, function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -555,28 +563,28 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
555
563
  });
556
564
  }); })];
557
565
  case 1:
558
- _s.sent();
566
+ _t.sent();
559
567
  return [2 /*return*/];
560
568
  }
561
569
  });
562
570
  };
563
571
  _i = 0, VICTIM_SHAPES_1 = VICTIM_SHAPES;
564
- _r.label = 14;
565
- case 14:
566
- if (!(_i < VICTIM_SHAPES_1.length)) return [3 /*break*/, 17];
572
+ _s.label = 16;
573
+ case 16:
574
+ if (!(_i < VICTIM_SHAPES_1.length)) return [3 /*break*/, 19];
567
575
  shape = VICTIM_SHAPES_1[_i];
568
576
  return [5 /*yield**/, _loop_1(shape)];
569
- case 15:
570
- _r.sent();
571
- _r.label = 16;
572
- case 16:
573
- _i++;
574
- return [3 /*break*/, 14];
575
577
  case 17:
578
+ _s.sent();
579
+ _s.label = 18;
580
+ case 18:
581
+ _i++;
582
+ return [3 /*break*/, 16];
583
+ case 19:
576
584
  _loop_2 = function (shape) {
577
585
  var name_2;
578
- return __generator(this, function (_t) {
579
- switch (_t.label) {
586
+ return __generator(this, function (_u) {
587
+ switch (_u.label) {
580
588
  case 0:
581
589
  name_2 = "B blocks email/phone overwrite \u2014 ".concat(shape.label);
582
590
  return [4 /*yield*/, runScenario('G2', name_2, function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -620,24 +628,24 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
620
628
  });
621
629
  }); })];
622
630
  case 1:
623
- _t.sent();
631
+ _u.sent();
624
632
  return [2 /*return*/];
625
633
  }
626
634
  });
627
635
  };
628
- _b = 0, VICTIM_SHAPES_2 = VICTIM_SHAPES;
629
- _r.label = 18;
630
- case 18:
631
- if (!(_b < VICTIM_SHAPES_2.length)) return [3 /*break*/, 21];
632
- shape = VICTIM_SHAPES_2[_b];
633
- return [5 /*yield**/, _loop_2(shape)];
634
- case 19:
635
- _r.sent();
636
- _r.label = 20;
636
+ _c = 0, VICTIM_SHAPES_2 = VICTIM_SHAPES;
637
+ _s.label = 20;
637
638
  case 20:
638
- _b++;
639
- return [3 /*break*/, 18];
640
- case 21:
639
+ if (!(_c < VICTIM_SHAPES_2.length)) return [3 /*break*/, 23];
640
+ shape = VICTIM_SHAPES_2[_c];
641
+ return [5 /*yield**/, _loop_2(shape)];
642
+ case 21:
643
+ _s.sent();
644
+ _s.label = 22;
645
+ case 22:
646
+ _c++;
647
+ return [3 /*break*/, 20];
648
+ case 23:
641
649
  // ---------------------------------------------------------------------------------------------
642
650
  // G3 — Endpoint A with the raw enduserId parameter (findById, no ownership check). Not reachable
643
651
  // as an attack through the first-party frontend, but trivially reachable by POSTing directly.
@@ -690,13 +698,13 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
690
698
  // this file runs as part of tests.ts).
691
699
  // ---------------------------------------------------------------------------------------------
692
700
  ];
693
- case 22:
701
+ case 24:
694
702
  // ---------------------------------------------------------------------------------------------
695
703
  // G3 — Endpoint A with the raw enduserId parameter (findById, no ownership check). Not reachable
696
704
  // as an attack through the first-party frontend, but trivially reachable by POSTing directly.
697
705
  // The field lock must hold on this path too.
698
706
  // ---------------------------------------------------------------------------------------------
699
- _r.sent();
707
+ _s.sent();
700
708
  // ---------------------------------------------------------------------------------------------
701
709
  // G4 — The takeover chain itself.
702
710
  //
@@ -784,7 +792,7 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
784
792
  // G5 — Intended intake behavior preserved: blank match keys still get filled, blank phone does not.
785
793
  // ---------------------------------------------------------------------------------------------
786
794
  ];
787
- case 23:
795
+ case 25:
788
796
  // ---------------------------------------------------------------------------------------------
789
797
  // G4 — The takeover chain itself.
790
798
  //
@@ -802,7 +810,7 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
802
810
  // failure (reset_db is deliberately NOT called here — it would wipe other suites' fixtures when
803
811
  // this file runs as part of tests.ts).
804
812
  // ---------------------------------------------------------------------------------------------
805
- _r.sent();
813
+ _s.sent();
806
814
  // ---------------------------------------------------------------------------------------------
807
815
  // G5 — Intended intake behavior preserved: blank match keys still get filled, blank phone does not.
808
816
  // ---------------------------------------------------------------------------------------------
@@ -858,11 +866,11 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
858
866
  // provider licensed in their new state.
859
867
  // ---------------------------------------------------------------------------------------------
860
868
  ];
861
- case 24:
869
+ case 26:
862
870
  // ---------------------------------------------------------------------------------------------
863
871
  // G5 — Intended intake behavior preserved: blank match keys still get filled, blank phone does not.
864
872
  // ---------------------------------------------------------------------------------------------
865
- _r.sent();
873
+ _s.sent();
866
874
  // ---------------------------------------------------------------------------------------------
867
875
  // G6 — Status-quo pin: state still overwrites on match. This is deliberate, not incidental —
868
876
  // state is not an auth channel, and locking it would break a relocated patient booking with a
@@ -904,13 +912,13 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
904
912
  // Accumulator arrays rather than `let ... | null`: values are assigned inside runScenario's
905
913
  // callback, and TS's control-flow narrowing does not account for closure assignments.
906
914
  ];
907
- case 25:
915
+ case 27:
908
916
  // ---------------------------------------------------------------------------------------------
909
917
  // G6 — Status-quo pin: state still overwrites on match. This is deliberate, not incidental —
910
918
  // state is not an auth channel, and locking it would break a relocated patient booking with a
911
919
  // provider licensed in their new state.
912
920
  // ---------------------------------------------------------------------------------------------
913
- _r.sent();
921
+ _s.sent();
914
922
  formSessions = [];
915
923
  return [4 /*yield*/, runScenario('G7', 'A creates a new visitor with submitted email + phone', function () { return __awaiter(void 0, void 0, void 0, function () {
916
924
  var email, phone, session, created, ok;
@@ -940,8 +948,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
940
948
  }
941
949
  });
942
950
  }); })];
943
- case 26:
944
- _r.sent();
951
+ case 28:
952
+ _s.sent();
945
953
  bookingTokens = [];
946
954
  return [4 /*yield*/, runScenario('G7', 'B creates a new visitor with submitted email + phone', function () { return __awaiter(void 0, void 0, void 0, function () {
947
955
  var email, phone, lname, session, matching, _i, matching_2, m, created, ok;
@@ -980,8 +988,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
980
988
  // G8 — The returned public-form session still works end-to-end.
981
989
  // ---------------------------------------------------------------------------------------------
982
990
  ];
983
- case 27:
984
- _r.sent();
991
+ case 29:
992
+ _s.sent();
985
993
  // ---------------------------------------------------------------------------------------------
986
994
  // G8 — The returned public-form session still works end-to-end.
987
995
  // ---------------------------------------------------------------------------------------------
@@ -1017,11 +1025,11 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1017
1025
  // regression.
1018
1026
  // ---------------------------------------------------------------------------------------------
1019
1027
  ];
1020
- case 28:
1028
+ case 30:
1021
1029
  // ---------------------------------------------------------------------------------------------
1022
1030
  // G8 — The returned public-form session still works end-to-end.
1023
1031
  // ---------------------------------------------------------------------------------------------
1024
- _r.sent();
1032
+ _s.sent();
1025
1033
  // ---------------------------------------------------------------------------------------------
1026
1034
  // G9 — The returned booking session still works. Tiered: availability is always asserted; an
1027
1035
  // actual booking is attempted only when a slot exists, so an empty window never reads as a
@@ -1075,13 +1083,13 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1075
1083
  // G10 — skipMatch behavior unchanged.
1076
1084
  // ---------------------------------------------------------------------------------------------
1077
1085
  ];
1078
- case 29:
1086
+ case 31:
1079
1087
  // ---------------------------------------------------------------------------------------------
1080
1088
  // G9 — The returned booking session still works. Tiered: availability is always asserted; an
1081
1089
  // actual booking is attempted only when a slot exists, so an empty window never reads as a
1082
1090
  // regression.
1083
1091
  // ---------------------------------------------------------------------------------------------
1084
- _r.sent();
1092
+ _s.sent();
1085
1093
  // ---------------------------------------------------------------------------------------------
1086
1094
  // G10 — skipMatch behavior unchanged.
1087
1095
  // ---------------------------------------------------------------------------------------------
@@ -1109,11 +1117,11 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1109
1117
  }
1110
1118
  });
1111
1119
  }); })];
1112
- case 30:
1120
+ case 32:
1113
1121
  // ---------------------------------------------------------------------------------------------
1114
1122
  // G10 — skipMatch behavior unchanged.
1115
1123
  // ---------------------------------------------------------------------------------------------
1116
- _r.sent();
1124
+ _s.sent();
1117
1125
  return [4 /*yield*/, runScenario('G10', 'skipMatch + autoMergeOnSubmission sets eligibleForAutoMerge', function () { return __awaiter(void 0, void 0, void 0, function () {
1118
1126
  var session, created;
1119
1127
  return __generator(this, function (_a) {
@@ -1144,12 +1152,12 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1144
1152
  // G11 — Intake answers must not overwrite email/phone on a matched patient (submit path).
1145
1153
  // ---------------------------------------------------------------------------------------------
1146
1154
  ];
1147
- case 31:
1148
- _r.sent();
1155
+ case 33:
1156
+ _s.sent();
1149
1157
  _loop_3 = function (shape) {
1150
1158
  var name_3;
1151
- return __generator(this, function (_u) {
1152
- switch (_u.label) {
1159
+ return __generator(this, function (_v) {
1160
+ switch (_v.label) {
1153
1161
  case 0:
1154
1162
  name_3 = "intake answers do not overwrite a matched patient \u2014 ".concat(shape.label);
1155
1163
  return [4 /*yield*/, runScenario('G11', name_3, function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -1197,24 +1205,24 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1197
1205
  });
1198
1206
  }); })];
1199
1207
  case 1:
1200
- _u.sent();
1208
+ _v.sent();
1201
1209
  return [2 /*return*/];
1202
1210
  }
1203
1211
  });
1204
1212
  };
1205
- _c = 0, VICTIM_SHAPES_3 = VICTIM_SHAPES;
1206
- _r.label = 32;
1207
- case 32:
1208
- if (!(_c < VICTIM_SHAPES_3.length)) return [3 /*break*/, 35];
1209
- shape = VICTIM_SHAPES_3[_c];
1210
- return [5 /*yield**/, _loop_3(shape)];
1211
- case 33:
1212
- _r.sent();
1213
- _r.label = 34;
1213
+ _d = 0, VICTIM_SHAPES_3 = VICTIM_SHAPES;
1214
+ _s.label = 34;
1214
1215
  case 34:
1215
- _c++;
1216
- return [3 /*break*/, 32];
1216
+ if (!(_d < VICTIM_SHAPES_3.length)) return [3 /*break*/, 37];
1217
+ shape = VICTIM_SHAPES_3[_d];
1218
+ return [5 /*yield**/, _loop_3(shape)];
1217
1219
  case 35:
1220
+ _s.sent();
1221
+ _s.label = 36;
1222
+ case 36:
1223
+ _d++;
1224
+ return [3 /*break*/, 34];
1225
+ case 37:
1218
1226
  G12_NAME = 'saveIntakeOnPartial answers do not overwrite a matched patient';
1219
1227
  return [4 /*yield*/, runScenario('G12', G12_NAME, function () { return __awaiter(void 0, void 0, void 0, function () {
1220
1228
  var victim, attackerEmail, session, enduser;
@@ -1264,8 +1272,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1264
1272
  // G13 — The full takeover chain, driven through an intake answer instead of the endpoint.
1265
1273
  // ---------------------------------------------------------------------------------------------
1266
1274
  ];
1267
- case 36:
1268
- _r.sent();
1275
+ case 38:
1276
+ _s.sent();
1269
1277
  G13_NAME = 'takeover chain via intake answer: victim not made resolvable';
1270
1278
  return [4 /*yield*/, runScenario('G13', G13_NAME, function () { return __awaiter(void 0, void 0, void 0, function () {
1271
1279
  var victim, attackerEmail, session, enduser, resetRes, resolvable, after, afterResult;
@@ -1328,8 +1336,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1328
1336
  // G14 — Pivot: a public session can prepare a response for a NON-public form and submit that.
1329
1337
  // ---------------------------------------------------------------------------------------------
1330
1338
  ];
1331
- case 37:
1332
- _r.sent();
1339
+ case 39:
1340
+ _s.sent();
1333
1341
  G14_NAME = 'pivot via prepare_form_response to a non-public form is also blocked';
1334
1342
  return [4 /*yield*/, runScenario('G14', G14_NAME, function () { return __awaiter(void 0, void 0, void 0, function () {
1335
1343
  var victimPhone, victim, attackerEmail, attackerPhone, session, authed, prepared, enduser;
@@ -1383,8 +1391,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1383
1391
  // G15 — save_field_response ownership: a guessable formResponseId must not reach another patient.
1384
1392
  // ---------------------------------------------------------------------------------------------
1385
1393
  ];
1386
- case 38:
1387
- _r.sent();
1394
+ case 40:
1395
+ _s.sent();
1388
1396
  G15_NAME = "save_field_response rejects another patient's formResponseId";
1389
1397
  return [4 /*yield*/, runScenario('G15', G15_NAME, function () { return __awaiter(void 0, void 0, void 0, function () {
1390
1398
  var patientA, patientB, sessionA, bPrepared, bResponseId, answer, byId, byCode, byIdWrongCode, aResponse, ownBoth;
@@ -1458,8 +1466,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1458
1466
  // scoped to "matched a pre-existing patient" rather than "any public session".
1459
1467
  // ---------------------------------------------------------------------------------------------
1460
1468
  ];
1461
- case 39:
1462
- _r.sent();
1469
+ case 41:
1470
+ _s.sent();
1463
1471
  // ---------------------------------------------------------------------------------------------
1464
1472
  // G16 — No-regression: the intake path is the ONLY source of contact info for a new visitor.
1465
1473
  // This is the intakeEmailHidden / intakePhone:'hidden' configuration, and the reason the lock is
@@ -1502,13 +1510,13 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1502
1510
  // G17 — No-regression: a fully authenticated (non-public) portal session may still self-update.
1503
1511
  // ---------------------------------------------------------------------------------------------
1504
1512
  ];
1505
- case 40:
1513
+ case 42:
1506
1514
  // ---------------------------------------------------------------------------------------------
1507
1515
  // G16 — No-regression: the intake path is the ONLY source of contact info for a new visitor.
1508
1516
  // This is the intakeEmailHidden / intakePhone:'hidden' configuration, and the reason the lock is
1509
1517
  // scoped to "matched a pre-existing patient" rather than "any public session".
1510
1518
  // ---------------------------------------------------------------------------------------------
1511
- _r.sent();
1519
+ _s.sent();
1512
1520
  // ---------------------------------------------------------------------------------------------
1513
1521
  // G17 — No-regression: a fully authenticated (non-public) portal session may still self-update.
1514
1522
  // ---------------------------------------------------------------------------------------------
@@ -1549,11 +1557,11 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1549
1557
  // G18 — No-regression: staff submitting on a patient's behalf may still set email/phone.
1550
1558
  // ---------------------------------------------------------------------------------------------
1551
1559
  ];
1552
- case 41:
1560
+ case 43:
1553
1561
  // ---------------------------------------------------------------------------------------------
1554
1562
  // G17 — No-regression: a fully authenticated (non-public) portal session may still self-update.
1555
1563
  // ---------------------------------------------------------------------------------------------
1556
- _r.sent();
1564
+ _s.sent();
1557
1565
  // ---------------------------------------------------------------------------------------------
1558
1566
  // G18 — No-regression: staff submitting on a patient's behalf may still set email/phone.
1559
1567
  // ---------------------------------------------------------------------------------------------
@@ -1603,11 +1611,11 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1603
1611
  // accepted. Deliberately opaque rather than date-shaped, so match-vs-insert is unambiguous even when
1604
1612
  // this file runs inside the full suite (no reset_db between files).
1605
1613
  ];
1606
- case 42:
1614
+ case 44:
1607
1615
  // ---------------------------------------------------------------------------------------------
1608
1616
  // G18 — No-regression: staff submitting on a patient's behalf may still set email/phone.
1609
1617
  // ---------------------------------------------------------------------------------------------
1610
- _r.sent();
1618
+ _s.sent();
1611
1619
  namelessDob = "01-02-1990-".concat(RUN);
1612
1620
  makeNamelessVictim = function (tag) { return __awaiter(void 0, void 0, void 0, function () {
1613
1621
  var victim, stored;
@@ -1648,8 +1656,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1648
1656
  }
1649
1657
  });
1650
1658
  }); })];
1651
- case 43:
1652
- _r.sent();
1659
+ case 45:
1660
+ _s.sent();
1653
1661
  G20_NAME = 'DOB-only request does not hijack a nameless patient (booking endpoint)';
1654
1662
  return [4 /*yield*/, runScenario('G20', G20_NAME, function () { return __awaiter(void 0, void 0, void 0, function () {
1655
1663
  var _a, victim, stored, dob, withDob;
@@ -1686,8 +1694,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1686
1694
  // enduserInfo (which is spread into both the enduser insert and the form_responses record).
1687
1695
  // ---------------------------------------------------------------------------------------------
1688
1696
  ];
1689
- case 44:
1690
- _r.sent();
1697
+ case 46:
1698
+ _s.sent();
1691
1699
  // ---------------------------------------------------------------------------------------------
1692
1700
  // G21 — The match sentinel must never be stored as a patient's name.
1693
1701
  // Guard rail on the fix: the fallback belongs in the filter literal only, never written into
@@ -1722,13 +1730,13 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1722
1730
  // "any public session", precisely so this keeps working.
1723
1731
  // ---------------------------------------------------------------------------------------------
1724
1732
  ];
1725
- case 45:
1733
+ case 47:
1726
1734
  // ---------------------------------------------------------------------------------------------
1727
1735
  // G21 — The match sentinel must never be stored as a patient's name.
1728
1736
  // Guard rail on the fix: the fallback belongs in the filter literal only, never written into
1729
1737
  // enduserInfo (which is spread into both the enduser insert and the form_responses record).
1730
1738
  // ---------------------------------------------------------------------------------------------
1731
- _r.sent();
1739
+ _s.sent();
1732
1740
  coldStartCase = function (label, args) { return __awaiter(void 0, void 0, void 0, function () {
1733
1741
  var group, submittedEmail, submittedPhone, session, created, enduser;
1734
1742
  return __generator(this, function (_a) {
@@ -1766,9 +1774,9 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1766
1774
  // And the same with no skipMatch, which still cannot match: the email branch needs email === "never"
1767
1775
  // (unstorable) and the name branch needs dateOfBirth === "never" literally.
1768
1776
  ];
1769
- case 46:
1777
+ case 48:
1770
1778
  // The shape the real webapp sends (public_form.tsx handleNoIntakeRedirect): nothing but ids.
1771
- _r.sent();
1779
+ _s.sent();
1772
1780
  // And the same with no skipMatch, which still cannot match: the email branch needs email === "never"
1773
1781
  // (unstorable) and the name branch needs dateOfBirth === "never" literally.
1774
1782
  return [4 /*yield*/, runScenario('G22', 'cold start without skipMatch', function () { return coldStartCase('no-skipMatch', {}); })
@@ -1790,10 +1798,10 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1790
1798
  // sentinels constrain which record shapes the filter can match, not which tenants it searches.
1791
1799
  // ---------------------------------------------------------------------------------------------
1792
1800
  ];
1793
- case 47:
1801
+ case 49:
1794
1802
  // And the same with no skipMatch, which still cannot match: the email branch needs email === "never"
1795
1803
  // (unstorable) and the name branch needs dateOfBirth === "never" literally.
1796
- _r.sent();
1804
+ _s.sent();
1797
1805
  G23_NAME = 'session_for_public_form requires businessId';
1798
1806
  return [4 /*yield*/, runScenario('G23', G23_NAME, function () { return __awaiter(void 0, void 0, void 0, function () {
1799
1807
  var victim, omitted, blocked, wrongBiz, badBiz;
@@ -1853,8 +1861,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1853
1861
  // redact_field(enduser, 'hashedPassword') — the whole record — instead of just assignedTo.
1854
1862
  // ---------------------------------------------------------------------------------------------
1855
1863
  ];
1856
- case 48:
1857
- _r.sent();
1864
+ case 50:
1865
+ _s.sent();
1858
1866
  chainForVictim = function (tag, victim) { return __awaiter(void 0, void 0, void 0, function () {
1859
1867
  var t1, hop1;
1860
1868
  return __generator(this, function (_a) {
@@ -1928,8 +1936,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1928
1936
  }
1929
1937
  });
1930
1938
  }); })];
1931
- case 49:
1932
- _r.sent();
1939
+ case 51:
1940
+ _s.sent();
1933
1941
  G25_NAME = 'chained session does not expose the enduser record on refresh';
1934
1942
  return [4 /*yield*/, runScenario('G25', G25_NAME, function () { return __awaiter(void 0, void 0, void 0, function () {
1935
1943
  var victim, _a, matched, t1, t2, PHI_KEYS, leakedIn, base, chained, leaked;
@@ -1981,8 +1989,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
1981
1989
  // unchanged" cannot pass just because nothing happened.
1982
1990
  // ---------------------------------------------------------------------------------------------
1983
1991
  ];
1984
- case 50:
1985
- _r.sent();
1992
+ case 52:
1993
+ _s.sent();
1986
1994
  G26_NAME = 'auto-merge does not let an intake answer repoint the merged patient';
1987
1995
  return [4 /*yield*/, runScenario('G26', G26_NAME, function () { return __awaiter(void 0, void 0, void 0, function () {
1988
1996
  var victimEmail, victimPhone, victimDob, victim, attackerEmail, session, sourceId, f, after, merged, customLanded;
@@ -2051,8 +2059,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
2051
2059
  // stored flag is the load-bearing assertion here, not a follow-up submit.
2052
2060
  // ---------------------------------------------------------------------------------------------
2053
2061
  ];
2054
- case 51:
2055
- _r.sent();
2062
+ case 53:
2063
+ _s.sent();
2056
2064
  G27_NAME = 'staff merge applies the lock when it repoints a response';
2057
2065
  return [4 /*yield*/, runScenario('G27', G27_NAME, function () { return __awaiter(void 0, void 0, void 0, function () {
2058
2066
  var victimEmail, victim, session, beforeMerge, afterMerge, repointed, stillVictim;
@@ -2115,8 +2123,8 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
2115
2123
  // caller including this one, with no other test noticing.
2116
2124
  // ---------------------------------------------------------------------------------------------
2117
2125
  ];
2118
- case 52:
2119
- _r.sent();
2126
+ case 54:
2127
+ _s.sent();
2120
2128
  G28_NAME = 'a fresh Stripe-created patient gets no grace on the public form path';
2121
2129
  return [4 /*yield*/, runScenario('G28', G28_NAME, function () { return __awaiter(void 0, void 0, void 0, function () {
2122
2130
  var victimEmail, victim, attackerEmail, attackerPhone, session, enduser;
@@ -2170,127 +2178,127 @@ var public_endpoint_auth_field_lock_tests = function (_a) {
2170
2178
  // Report
2171
2179
  // ---------------------------------------------------------------------------------------------
2172
2180
  ];
2173
- case 53:
2174
- _r.sent();
2181
+ case 55:
2182
+ _s.sent();
2175
2183
  failures = results.filter(function (r) { return !r.ok; });
2176
2184
  skipped = results.filter(function (r) { return !!r.skipped; });
2177
2185
  console.log('');
2178
2186
  console.log(' ┌─ Public endpoint auth-field lock — summary ────────────────────────────');
2179
- for (_d = 0, results_1 = results; _d < results_1.length; _d++) {
2180
- r = results_1[_d];
2187
+ for (_e = 0, results_1 = results; _e < results_1.length; _e++) {
2188
+ r = results_1[_e];
2181
2189
  status_1 = r.skipped ? 'SKIP' : r.ok ? 'PASS' : 'FAIL';
2182
2190
  console.log(" \u2502 ".concat(status_1, " ").concat(r.group.padEnd(3), " ").concat(r.name).concat(r.detail ? " \u2014 ".concat(r.detail) : ''));
2183
2191
  }
2184
2192
  console.log(" \u2514\u2500 ".concat(results.length - failures.length, "/").concat(results.length, " passed, ").concat(skipped.length, " skipped, ").concat(failures.length, " failed"));
2185
2193
  console.log('');
2186
- _e = 0, createdEventIds_1 = createdEventIds;
2187
- _r.label = 54;
2188
- case 54:
2189
- if (!(_e < createdEventIds_1.length)) return [3 /*break*/, 57];
2190
- id = createdEventIds_1[_e];
2191
- return [4 /*yield*/, sdk.api.calendar_events.deleteOne(id).catch(function () { return null; })];
2192
- case 55:
2193
- _r.sent();
2194
- _r.label = 56;
2194
+ _f = 0, createdEventIds_1 = createdEventIds;
2195
+ _s.label = 56;
2195
2196
  case 56:
2196
- _e++;
2197
- return [3 /*break*/, 54];
2197
+ if (!(_f < createdEventIds_1.length)) return [3 /*break*/, 59];
2198
+ id = createdEventIds_1[_f];
2199
+ return [4 /*yield*/, sdk.api.calendar_events.deleteOne(id).catch(function () { return null; })];
2198
2200
  case 57:
2199
- _f = 0, createdFormIds_1 = createdFormIds;
2200
- _r.label = 58;
2201
+ _s.sent();
2202
+ _s.label = 58;
2201
2203
  case 58:
2202
- if (!(_f < createdFormIds_1.length)) return [3 /*break*/, 64];
2203
- formId = createdFormIds_1[_f];
2204
- return [4 /*yield*/, sdk.api.form_responses.getSome({ filter: { formId: formId } }).catch(function () { return []; })];
2204
+ _f++;
2205
+ return [3 /*break*/, 56];
2205
2206
  case 59:
2206
- responses = _r.sent();
2207
- _g = 0, responses_1 = responses;
2208
- _r.label = 60;
2207
+ _g = 0, createdFormIds_1 = createdFormIds;
2208
+ _s.label = 60;
2209
2209
  case 60:
2210
- if (!(_g < responses_1.length)) return [3 /*break*/, 63];
2211
- response = responses_1[_g];
2212
- return [4 /*yield*/, sdk.api.form_responses.deleteOne(response.id).catch(function () { return null; })];
2210
+ if (!(_g < createdFormIds_1.length)) return [3 /*break*/, 66];
2211
+ formId = createdFormIds_1[_g];
2212
+ return [4 /*yield*/, sdk.api.form_responses.getSome({ filter: { formId: formId } }).catch(function () { return []; })];
2213
2213
  case 61:
2214
- _r.sent();
2215
- _r.label = 62;
2214
+ responses = _s.sent();
2215
+ _h = 0, responses_1 = responses;
2216
+ _s.label = 62;
2216
2217
  case 62:
2217
- _g++;
2218
- return [3 /*break*/, 60];
2218
+ if (!(_h < responses_1.length)) return [3 /*break*/, 65];
2219
+ response = responses_1[_h];
2220
+ return [4 /*yield*/, sdk.api.form_responses.deleteOne(response.id).catch(function () { return null; })];
2219
2221
  case 63:
2220
- _f++;
2221
- return [3 /*break*/, 58];
2222
+ _s.sent();
2223
+ _s.label = 64;
2222
2224
  case 64:
2223
- _h = 0, createdFormFieldIds_1 = createdFormFieldIds;
2224
- _r.label = 65;
2225
+ _h++;
2226
+ return [3 /*break*/, 62];
2225
2227
  case 65:
2226
- if (!(_h < createdFormFieldIds_1.length)) return [3 /*break*/, 68];
2227
- id = createdFormFieldIds_1[_h];
2228
- return [4 /*yield*/, sdk.api.form_fields.deleteOne(id).catch(function () { return null; })];
2228
+ _g++;
2229
+ return [3 /*break*/, 60];
2229
2230
  case 66:
2230
- _r.sent();
2231
- _r.label = 67;
2231
+ _j = 0, createdFormFieldIds_1 = createdFormFieldIds;
2232
+ _s.label = 67;
2232
2233
  case 67:
2233
- _h++;
2234
- return [3 /*break*/, 65];
2234
+ if (!(_j < createdFormFieldIds_1.length)) return [3 /*break*/, 70];
2235
+ id = createdFormFieldIds_1[_j];
2236
+ return [4 /*yield*/, sdk.api.form_fields.deleteOne(id).catch(function () { return null; })];
2235
2237
  case 68:
2236
- _j = 0, createdFormIds_2 = createdFormIds;
2237
- _r.label = 69;
2238
+ _s.sent();
2239
+ _s.label = 69;
2238
2240
  case 69:
2239
- if (!(_j < createdFormIds_2.length)) return [3 /*break*/, 72];
2240
- id = createdFormIds_2[_j];
2241
- return [4 /*yield*/, sdk.api.forms.deleteOne(id).catch(function () { return null; })];
2241
+ _j++;
2242
+ return [3 /*break*/, 67];
2242
2243
  case 70:
2243
- _r.sent();
2244
- _r.label = 71;
2244
+ _k = 0, createdFormIds_2 = createdFormIds;
2245
+ _s.label = 71;
2245
2246
  case 71:
2246
- _j++;
2247
- return [3 /*break*/, 69];
2247
+ if (!(_k < createdFormIds_2.length)) return [3 /*break*/, 74];
2248
+ id = createdFormIds_2[_k];
2249
+ return [4 /*yield*/, sdk.api.forms.deleteOne(id).catch(function () { return null; })];
2248
2250
  case 72:
2249
- uniqueEnduserIds = createdEnduserIds.filter(function (id, i) { return !!id && createdEnduserIds.indexOf(id) === i; });
2250
- _k = 0, uniqueEnduserIds_1 = uniqueEnduserIds;
2251
- _r.label = 73;
2251
+ _s.sent();
2252
+ _s.label = 73;
2252
2253
  case 73:
2253
- if (!(_k < uniqueEnduserIds_1.length)) return [3 /*break*/, 76];
2254
- id = uniqueEnduserIds_1[_k];
2255
- return [4 /*yield*/, sdk.api.endusers.deleteOne(id).catch(function () { return null; })];
2254
+ _k++;
2255
+ return [3 /*break*/, 71];
2256
2256
  case 74:
2257
- _r.sent();
2258
- _r.label = 75;
2257
+ uniqueEnduserIds = createdEnduserIds.filter(function (id, i) { return !!id && createdEnduserIds.indexOf(id) === i; });
2258
+ _l = 0, uniqueEnduserIds_1 = uniqueEnduserIds;
2259
+ _s.label = 75;
2259
2260
  case 75:
2260
- _k++;
2261
- return [3 /*break*/, 73];
2261
+ if (!(_l < uniqueEnduserIds_1.length)) return [3 /*break*/, 78];
2262
+ id = uniqueEnduserIds_1[_l];
2263
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(id).catch(function () { return null; })];
2262
2264
  case 76:
2263
- _l = 0, createdTemplateIds_1 = createdTemplateIds;
2264
- _r.label = 77;
2265
+ _s.sent();
2266
+ _s.label = 77;
2265
2267
  case 77:
2266
- if (!(_l < createdTemplateIds_1.length)) return [3 /*break*/, 80];
2267
- id = createdTemplateIds_1[_l];
2268
- return [4 /*yield*/, sdk.api.calendar_event_templates.deleteOne(id).catch(function () { return null; })];
2268
+ _l++;
2269
+ return [3 /*break*/, 75];
2269
2270
  case 78:
2270
- _r.sent();
2271
- _r.label = 79;
2271
+ _m = 0, createdTemplateIds_1 = createdTemplateIds;
2272
+ _s.label = 79;
2272
2273
  case 79:
2273
- _l++;
2274
- return [3 /*break*/, 77];
2274
+ if (!(_m < createdTemplateIds_1.length)) return [3 /*break*/, 82];
2275
+ id = createdTemplateIds_1[_m];
2276
+ return [4 /*yield*/, sdk.api.calendar_event_templates.deleteOne(id).catch(function () { return null; })];
2275
2277
  case 80:
2276
- _m = 0, createdUserIds_1 = createdUserIds;
2277
- _r.label = 81;
2278
+ _s.sent();
2279
+ _s.label = 81;
2278
2280
  case 81:
2279
- if (!(_m < createdUserIds_1.length)) return [3 /*break*/, 84];
2280
- id = createdUserIds_1[_m];
2281
- return [4 /*yield*/, sdk.api.users.deleteOne(id).catch(function () { return null; })];
2281
+ _m++;
2282
+ return [3 /*break*/, 79];
2282
2283
  case 82:
2283
- _r.sent();
2284
- _r.label = 83;
2284
+ _o = 0, createdUserIds_1 = createdUserIds;
2285
+ _s.label = 83;
2285
2286
  case 83:
2286
- _m++;
2287
- return [3 /*break*/, 81];
2287
+ if (!(_o < createdUserIds_1.length)) return [3 /*break*/, 86];
2288
+ id = createdUserIds_1[_o];
2289
+ return [4 /*yield*/, sdk.api.users.deleteOne(id).catch(function () { return null; })];
2288
2290
  case 84:
2291
+ _s.sent();
2292
+ _s.label = 85;
2293
+ case 85:
2294
+ _o++;
2295
+ return [3 /*break*/, 83];
2296
+ case 86:
2289
2297
  // ---------------------------------------------------------------------------------------------
2290
2298
  // Assert — single pass, last, so the full table above is always printed first.
2291
2299
  // ---------------------------------------------------------------------------------------------
2292
- for (_o = 0, results_2 = results; _o < results_2.length; _o++) {
2293
- r = results_2[_o];
2300
+ for (_p = 0, results_2 = results; _p < results_2.length; _p++) {
2301
+ r = results_2[_p];
2294
2302
  (0, testing_1.assert)(r.ok, "\u274C [".concat(r.group, "] ").concat(r.name, " \u2014 ").concat(r.detail), "[".concat(r.group, "] ").concat(r.name).concat(r.skipped ? ' (SKIPPED)' : ''));
2295
2303
  }
2296
2304
  return [2 /*return*/];