@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.
- package/lib/cjs/enduser.d.ts +1 -1
- package/lib/cjs/enduser.d.ts.map +1 -1
- package/lib/cjs/enduser.js +1 -0
- package/lib/cjs/enduser.js.map +1 -1
- package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js +505 -0
- package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/configurations_public_read.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/configurations_public_read.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/configurations_public_read.test.js +173 -0
- package/lib/cjs/tests/api_tests/configurations_public_read.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/form_started_trigger.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/form_started_trigger.test.js +87 -24
- package/lib/cjs/tests/api_tests/form_started_trigger.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/form_translations.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/form_translations.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/form_translations.test.js +259 -0
- package/lib/cjs/tests/api_tests/form_translations.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/group_event_attendee_status_triggers.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/group_event_attendee_status_triggers.test.js +340 -124
- package/lib/cjs/tests/api_tests/group_event_attendee_status_triggers.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.js +277 -0
- package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/purchase_made_trigger.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/purchase_made_trigger.test.js +262 -78
- package/lib/cjs/tests/api_tests/purchase_made_trigger.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts +31 -0
- package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js +230 -0
- package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.js +206 -198
- package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.js +343 -80
- package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/welle_partner_token.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/welle_partner_token.test.js +74 -35
- package/lib/cjs/tests/api_tests/welle_partner_token.test.js.map +1 -1
- package/lib/cjs/tests/stripe_webhook_helpers.d.ts +134 -0
- package/lib/cjs/tests/stripe_webhook_helpers.d.ts.map +1 -1
- package/lib/cjs/tests/stripe_webhook_helpers.js +126 -1
- package/lib/cjs/tests/stripe_webhook_helpers.js.map +1 -1
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +238 -212
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/enduser.d.ts +1 -1
- package/lib/esm/enduser.d.ts.map +1 -1
- package/lib/esm/enduser.js +1 -0
- package/lib/esm/enduser.js.map +1 -1
- package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js +501 -0
- package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js.map +1 -0
- package/lib/esm/tests/api_tests/configurations_public_read.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/configurations_public_read.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/configurations_public_read.test.js +169 -0
- package/lib/esm/tests/api_tests/configurations_public_read.test.js.map +1 -0
- package/lib/esm/tests/api_tests/form_started_trigger.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/form_started_trigger.test.js +87 -24
- package/lib/esm/tests/api_tests/form_started_trigger.test.js.map +1 -1
- package/lib/esm/tests/api_tests/form_translations.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/form_translations.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/form_translations.test.js +255 -0
- package/lib/esm/tests/api_tests/form_translations.test.js.map +1 -0
- package/lib/esm/tests/api_tests/group_event_attendee_status_triggers.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/group_event_attendee_status_triggers.test.js +340 -124
- package/lib/esm/tests/api_tests/group_event_attendee_status_triggers.test.js.map +1 -1
- package/lib/esm/tests/api_tests/mdi_trigger_refill.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/mdi_trigger_refill.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/mdi_trigger_refill.test.js +273 -0
- package/lib/esm/tests/api_tests/mdi_trigger_refill.test.js.map +1 -0
- package/lib/esm/tests/api_tests/purchase_made_trigger.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/purchase_made_trigger.test.js +262 -78
- package/lib/esm/tests/api_tests/purchase_made_trigger.test.js.map +1 -1
- package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts +31 -0
- package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js +226 -0
- package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.js +206 -198
- package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.js.map +1 -1
- package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.js +344 -81
- package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.js.map +1 -1
- package/lib/esm/tests/api_tests/welle_partner_token.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/welle_partner_token.test.js +74 -35
- package/lib/esm/tests/api_tests/welle_partner_token.test.js.map +1 -1
- package/lib/esm/tests/stripe_webhook_helpers.d.ts +134 -0
- package/lib/esm/tests/stripe_webhook_helpers.d.ts.map +1 -1
- package/lib/esm/tests/stripe_webhook_helpers.js +119 -0
- package/lib/esm/tests/stripe_webhook_helpers.js.map +1 -1
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +238 -212
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/enduser.ts +4 -2
- package/src/tests/api_tests/calendar_event_create_and_bulk_triggers.test.ts +293 -0
- package/src/tests/api_tests/configurations_public_read.test.ts +116 -0
- package/src/tests/api_tests/form_started_trigger.test.ts +49 -1
- package/src/tests/api_tests/form_translations.test.ts +205 -0
- package/src/tests/api_tests/group_event_attendee_status_triggers.test.ts +135 -0
- package/src/tests/api_tests/mdi_trigger_refill.test.ts +184 -0
- package/src/tests/api_tests/purchase_made_trigger.test.ts +137 -0
- package/src/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.ts +144 -0
- package/src/tests/api_tests/security/public_endpoint_auth_field_lock.test.ts +16 -6
- package/src/tests/api_tests/stripe_webhook_triggers.test.ts +221 -0
- package/src/tests/api_tests/welle_partner_token.test.ts +49 -6
- package/src/tests/stripe_webhook_helpers.ts +116 -0
- package/src/tests/tests.ts +27 -12
- 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,
|
|
203
|
-
var
|
|
204
|
-
return __generator(this, function (
|
|
205
|
-
switch (
|
|
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 =
|
|
253
|
-
MATCH_EMAIL_AND_NAMES = !!((
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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:
|
|
392
|
+
email: hostEmail,
|
|
388
393
|
verifiedEmail: true,
|
|
389
394
|
fname: 'Lock',
|
|
390
|
-
lname:
|
|
395
|
+
lname: 'Host',
|
|
391
396
|
})];
|
|
392
|
-
case
|
|
393
|
-
|
|
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
|
|
405
|
-
|
|
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
|
|
412
|
-
|
|
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 (
|
|
515
|
-
switch (
|
|
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
|
-
|
|
566
|
+
_t.sent();
|
|
559
567
|
return [2 /*return*/];
|
|
560
568
|
}
|
|
561
569
|
});
|
|
562
570
|
};
|
|
563
571
|
_i = 0, VICTIM_SHAPES_1 = VICTIM_SHAPES;
|
|
564
|
-
|
|
565
|
-
case
|
|
566
|
-
if (!(_i < VICTIM_SHAPES_1.length)) return [3 /*break*/,
|
|
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 (
|
|
579
|
-
switch (
|
|
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
|
-
|
|
631
|
+
_u.sent();
|
|
624
632
|
return [2 /*return*/];
|
|
625
633
|
}
|
|
626
634
|
});
|
|
627
635
|
};
|
|
628
|
-
|
|
629
|
-
|
|
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
|
-
|
|
639
|
-
|
|
640
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
944
|
-
|
|
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
|
|
984
|
-
|
|
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
|
|
1028
|
+
case 30:
|
|
1021
1029
|
// ---------------------------------------------------------------------------------------------
|
|
1022
1030
|
// G8 — The returned public-form session still works end-to-end.
|
|
1023
1031
|
// ---------------------------------------------------------------------------------------------
|
|
1024
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
1120
|
+
case 32:
|
|
1113
1121
|
// ---------------------------------------------------------------------------------------------
|
|
1114
1122
|
// G10 — skipMatch behavior unchanged.
|
|
1115
1123
|
// ---------------------------------------------------------------------------------------------
|
|
1116
|
-
|
|
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
|
|
1148
|
-
|
|
1155
|
+
case 33:
|
|
1156
|
+
_s.sent();
|
|
1149
1157
|
_loop_3 = function (shape) {
|
|
1150
1158
|
var name_3;
|
|
1151
|
-
return __generator(this, function (
|
|
1152
|
-
switch (
|
|
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
|
-
|
|
1208
|
+
_v.sent();
|
|
1201
1209
|
return [2 /*return*/];
|
|
1202
1210
|
}
|
|
1203
1211
|
});
|
|
1204
1212
|
};
|
|
1205
|
-
|
|
1206
|
-
|
|
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
|
-
|
|
1216
|
-
|
|
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
|
|
1268
|
-
|
|
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
|
|
1332
|
-
|
|
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
|
|
1387
|
-
|
|
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
|
|
1462
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
1560
|
+
case 43:
|
|
1553
1561
|
// ---------------------------------------------------------------------------------------------
|
|
1554
1562
|
// G17 — No-regression: a fully authenticated (non-public) portal session may still self-update.
|
|
1555
1563
|
// ---------------------------------------------------------------------------------------------
|
|
1556
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
1652
|
-
|
|
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
|
|
1690
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
1777
|
+
case 48:
|
|
1770
1778
|
// The shape the real webapp sends (public_form.tsx handleNoIntakeRedirect): nothing but ids.
|
|
1771
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
1857
|
-
|
|
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
|
|
1932
|
-
|
|
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
|
|
1985
|
-
|
|
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
|
|
2055
|
-
|
|
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
|
|
2119
|
-
|
|
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
|
|
2174
|
-
|
|
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 (
|
|
2180
|
-
r = results_1[
|
|
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
|
-
|
|
2187
|
-
|
|
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
|
-
|
|
2197
|
-
|
|
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
|
-
|
|
2200
|
-
|
|
2201
|
+
_s.sent();
|
|
2202
|
+
_s.label = 58;
|
|
2201
2203
|
case 58:
|
|
2202
|
-
|
|
2203
|
-
|
|
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
|
-
|
|
2207
|
-
|
|
2208
|
-
_r.label = 60;
|
|
2207
|
+
_g = 0, createdFormIds_1 = createdFormIds;
|
|
2208
|
+
_s.label = 60;
|
|
2209
2209
|
case 60:
|
|
2210
|
-
if (!(_g <
|
|
2211
|
-
|
|
2212
|
-
return [4 /*yield*/, sdk.api.form_responses.
|
|
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
|
-
|
|
2215
|
-
|
|
2214
|
+
responses = _s.sent();
|
|
2215
|
+
_h = 0, responses_1 = responses;
|
|
2216
|
+
_s.label = 62;
|
|
2216
2217
|
case 62:
|
|
2217
|
-
|
|
2218
|
-
|
|
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
|
-
|
|
2221
|
-
|
|
2222
|
+
_s.sent();
|
|
2223
|
+
_s.label = 64;
|
|
2222
2224
|
case 64:
|
|
2223
|
-
_h
|
|
2224
|
-
|
|
2225
|
+
_h++;
|
|
2226
|
+
return [3 /*break*/, 62];
|
|
2225
2227
|
case 65:
|
|
2226
|
-
|
|
2227
|
-
|
|
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
|
-
|
|
2231
|
-
|
|
2231
|
+
_j = 0, createdFormFieldIds_1 = createdFormFieldIds;
|
|
2232
|
+
_s.label = 67;
|
|
2232
2233
|
case 67:
|
|
2233
|
-
|
|
2234
|
-
|
|
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
|
-
|
|
2237
|
-
|
|
2238
|
+
_s.sent();
|
|
2239
|
+
_s.label = 69;
|
|
2238
2240
|
case 69:
|
|
2239
|
-
|
|
2240
|
-
|
|
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
|
-
|
|
2244
|
-
|
|
2244
|
+
_k = 0, createdFormIds_2 = createdFormIds;
|
|
2245
|
+
_s.label = 71;
|
|
2245
2246
|
case 71:
|
|
2246
|
-
|
|
2247
|
-
|
|
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
|
-
|
|
2250
|
-
|
|
2251
|
-
_r.label = 73;
|
|
2251
|
+
_s.sent();
|
|
2252
|
+
_s.label = 73;
|
|
2252
2253
|
case 73:
|
|
2253
|
-
|
|
2254
|
-
|
|
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
|
-
|
|
2258
|
-
|
|
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
|
-
|
|
2261
|
-
|
|
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
|
-
|
|
2264
|
-
|
|
2265
|
+
_s.sent();
|
|
2266
|
+
_s.label = 77;
|
|
2265
2267
|
case 77:
|
|
2266
|
-
|
|
2267
|
-
|
|
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
|
-
|
|
2271
|
-
|
|
2271
|
+
_m = 0, createdTemplateIds_1 = createdTemplateIds;
|
|
2272
|
+
_s.label = 79;
|
|
2272
2273
|
case 79:
|
|
2273
|
-
|
|
2274
|
-
|
|
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
|
-
|
|
2277
|
-
|
|
2278
|
+
_s.sent();
|
|
2279
|
+
_s.label = 81;
|
|
2278
2280
|
case 81:
|
|
2279
|
-
|
|
2280
|
-
|
|
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
|
-
|
|
2284
|
-
|
|
2284
|
+
_o = 0, createdUserIds_1 = createdUserIds;
|
|
2285
|
+
_s.label = 83;
|
|
2285
2286
|
case 83:
|
|
2286
|
-
|
|
2287
|
-
|
|
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 (
|
|
2293
|
-
r = results_2[
|
|
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*/];
|