@tellescope/sdk 1.256.11 → 1.256.13
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/sdk.d.ts +1 -0
- package/lib/cjs/sdk.d.ts.map +1 -1
- package/lib/cjs/sdk.js +1 -0
- package/lib/cjs/sdk.js.map +1 -1
- package/lib/cjs/tests/api_tests/active_patient_count.test.d.ts +15 -0
- package/lib/cjs/tests/api_tests/active_patient_count.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/active_patient_count.test.js +594 -0
- package/lib/cjs/tests/api_tests/active_patient_count.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/out_of_office_endpoint.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/out_of_office_endpoint.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/out_of_office_endpoint.test.js +192 -0
- package/lib/cjs/tests/api_tests/out_of_office_endpoint.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/enduser-ai-summary-trust-gate.test.d.ts +5 -0
- package/lib/cjs/tests/api_tests/security/enduser-ai-summary-trust-gate.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/security/enduser-ai-summary-trust-gate.test.js +95 -31
- package/lib/cjs/tests/api_tests/security/enduser-ai-summary-trust-gate.test.js.map +1 -1
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +156 -148
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/sdk.d.ts +1 -0
- package/lib/esm/sdk.d.ts.map +1 -1
- package/lib/esm/sdk.js +1 -0
- package/lib/esm/sdk.js.map +1 -1
- package/lib/esm/tests/api_tests/active_patient_count.test.d.ts +15 -0
- package/lib/esm/tests/api_tests/active_patient_count.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/active_patient_count.test.js +590 -0
- package/lib/esm/tests/api_tests/active_patient_count.test.js.map +1 -0
- package/lib/esm/tests/api_tests/out_of_office_endpoint.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/out_of_office_endpoint.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/out_of_office_endpoint.test.js +188 -0
- package/lib/esm/tests/api_tests/out_of_office_endpoint.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/enduser-ai-summary-trust-gate.test.d.ts +5 -0
- package/lib/esm/tests/api_tests/security/enduser-ai-summary-trust-gate.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/security/enduser-ai-summary-trust-gate.test.js +95 -31
- package/lib/esm/tests/api_tests/security/enduser-ai-summary-trust-gate.test.js.map +1 -1
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +156 -148
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/sdk.ts +4 -0
- package/src/tests/api_tests/active_patient_count.test.ts +435 -0
- package/src/tests/api_tests/out_of_office_endpoint.test.ts +162 -0
- package/src/tests/api_tests/security/enduser-ai-summary-trust-gate.test.ts +56 -0
- package/src/tests/tests.ts +4 -0
- package/test_generated.pdf +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"out_of_office_endpoint.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/out_of_office_endpoint.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAoBnC,eAAO,MAAM,4BAA4B;SAAwC,OAAO;iBAAe,OAAO;mBAqH7G,CAAA"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.out_of_office_endpoint_tests = void 0;
|
|
40
|
+
require('source-map-support').install();
|
|
41
|
+
var sdk_1 = require("../../sdk");
|
|
42
|
+
var testing_1 = require("@tellescope/testing");
|
|
43
|
+
var setup_1 = require("../setup");
|
|
44
|
+
var host = process.env.API_URL || 'http://localhost:8080';
|
|
45
|
+
var MS_PER_MINUTE = 60 * 1000;
|
|
46
|
+
var MS_PER_HOUR = 60 * MS_PER_MINUTE;
|
|
47
|
+
// Covers the calendar_events.out_of_office endpoint, whose whole reason to exist is that it reads
|
|
48
|
+
// ACROSS users: calendar_events is row-filtered on attendees.id and a non-admin defaults to
|
|
49
|
+
// read: 'Assigned', so the ordinary read path returns only the caller's own blocks. The endpoint
|
|
50
|
+
// therefore queries organization-wide on purpose, and returns no event content to make that safe.
|
|
51
|
+
//
|
|
52
|
+
// The cross-user assertion below is the one that matters: swapping the handler's
|
|
53
|
+
// buildOrganizationWideQueries back to the request-scoped DB would silently break peer visibility in
|
|
54
|
+
// Team Chat without breaking a build or any other test.
|
|
55
|
+
var out_of_office_endpoint_tests = function (_a) {
|
|
56
|
+
var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
|
|
57
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
58
|
+
var adminId, nonAdminId, now, active, ended, cancelled, normal, nonAdminOwn, outOfOffice, forAdmin, asAdmin, scoped, foreign;
|
|
59
|
+
var _b, _c, _d;
|
|
60
|
+
return __generator(this, function (_e) {
|
|
61
|
+
switch (_e.label) {
|
|
62
|
+
case 0:
|
|
63
|
+
(0, testing_1.log_header)("Out of Office Endpoint");
|
|
64
|
+
adminId = sdk.userInfo.id;
|
|
65
|
+
nonAdminId = sdkNonAdmin.userInfo.id;
|
|
66
|
+
now = Date.now();
|
|
67
|
+
return [4 /*yield*/, sdk.api.calendar_events.createOne({
|
|
68
|
+
title: 'Out of Office',
|
|
69
|
+
outOfOffice: true,
|
|
70
|
+
startTimeInMS: now - 2 * MS_PER_HOUR,
|
|
71
|
+
durationInMinutes: 8 * 60,
|
|
72
|
+
attendees: [{ id: adminId, type: 'user' }],
|
|
73
|
+
})
|
|
74
|
+
// ended three hours ago — inside the query's start-time range, so only the handler's computed
|
|
75
|
+
// end-time check excludes it
|
|
76
|
+
];
|
|
77
|
+
case 1:
|
|
78
|
+
active = _e.sent();
|
|
79
|
+
return [4 /*yield*/, sdk.api.calendar_events.createOne({
|
|
80
|
+
title: 'Out of Office',
|
|
81
|
+
outOfOffice: true,
|
|
82
|
+
startTimeInMS: now - 5 * MS_PER_HOUR,
|
|
83
|
+
durationInMinutes: 2 * 60,
|
|
84
|
+
attendees: [{ id: adminId, type: 'user' }],
|
|
85
|
+
})];
|
|
86
|
+
case 2:
|
|
87
|
+
ended = _e.sent();
|
|
88
|
+
return [4 /*yield*/, sdk.api.calendar_events.createOne({
|
|
89
|
+
title: 'Out of Office',
|
|
90
|
+
outOfOffice: true,
|
|
91
|
+
startTimeInMS: now - MS_PER_HOUR,
|
|
92
|
+
durationInMinutes: 4 * 60,
|
|
93
|
+
attendees: [{ id: adminId, type: 'user' }],
|
|
94
|
+
cancelledAt: new Date(),
|
|
95
|
+
})
|
|
96
|
+
// not flagged: a normal event overlapping now must never appear
|
|
97
|
+
];
|
|
98
|
+
case 3:
|
|
99
|
+
cancelled = _e.sent();
|
|
100
|
+
return [4 /*yield*/, sdk.api.calendar_events.createOne({
|
|
101
|
+
title: 'Regular Appointment',
|
|
102
|
+
startTimeInMS: now - MS_PER_HOUR,
|
|
103
|
+
durationInMinutes: 4 * 60,
|
|
104
|
+
attendees: [{ id: adminId, type: 'user' }],
|
|
105
|
+
})
|
|
106
|
+
// on the non-admin, used for the userIds scoping check
|
|
107
|
+
];
|
|
108
|
+
case 4:
|
|
109
|
+
normal = _e.sent();
|
|
110
|
+
return [4 /*yield*/, sdk.api.calendar_events.createOne({
|
|
111
|
+
title: 'Out of Office',
|
|
112
|
+
outOfOffice: true,
|
|
113
|
+
startTimeInMS: now - MS_PER_HOUR,
|
|
114
|
+
durationInMinutes: 4 * 60,
|
|
115
|
+
attendees: [{ id: nonAdminId, type: 'user' }],
|
|
116
|
+
})];
|
|
117
|
+
case 5:
|
|
118
|
+
nonAdminOwn = _e.sent();
|
|
119
|
+
_e.label = 6;
|
|
120
|
+
case 6:
|
|
121
|
+
_e.trys.push([6, , 11, 13]);
|
|
122
|
+
return [4 /*yield*/, sdkNonAdmin.api.calendar_events.out_of_office()
|
|
123
|
+
// assert(assertion, failureMessage, successTitle)
|
|
124
|
+
];
|
|
125
|
+
case 7:
|
|
126
|
+
outOfOffice = (_e.sent()).outOfOffice;
|
|
127
|
+
// assert(assertion, failureMessage, successTitle)
|
|
128
|
+
(0, testing_1.assert)(!!outOfOffice.find(function (o) { return o.userId === adminId && o.startTimeInMS === active.startTimeInMS; }), 'non-admin does NOT see a peer out of office window — is the handler using the request-scoped DB instead of buildOrganizationWideQueries?', 'non-admin sees a peer out of office window');
|
|
129
|
+
(0, testing_1.assert)(outOfOffice.every(function (o) { return (Object.keys(o).sort().join(',') === 'endTimeInMS,startTimeInMS,userId'); }), "response leaked event fields: ".concat(JSON.stringify((_b = outOfOffice[0]) !== null && _b !== void 0 ? _b : {})), 'response carries no event content');
|
|
130
|
+
forAdmin = outOfOffice.filter(function (o) { return o.userId === adminId; });
|
|
131
|
+
(0, testing_1.assert)(forAdmin.length === 1, "expected exactly the one active window for the admin, got ".concat(forAdmin.length, ": ").concat(JSON.stringify(forAdmin)), 'ended, cancelled and unflagged events are excluded');
|
|
132
|
+
(0, testing_1.assert)(((_c = forAdmin[0]) === null || _c === void 0 ? void 0 : _c.endTimeInMS) === active.startTimeInMS + active.durationInMinutes * MS_PER_MINUTE, "endTimeInMS was ".concat((_d = forAdmin[0]) === null || _d === void 0 ? void 0 : _d.endTimeInMS, ", expected ").concat(active.startTimeInMS + active.durationInMinutes * MS_PER_MINUTE), 'endTimeInMS is resolved from startTimeInMS + durationInMinutes');
|
|
133
|
+
return [4 /*yield*/, sdk.api.calendar_events.out_of_office()];
|
|
134
|
+
case 8:
|
|
135
|
+
asAdmin = _e.sent();
|
|
136
|
+
(0, testing_1.assert)(!!asAdmin.outOfOffice.find(function (o) { return o.userId === adminId && o.startTimeInMS === active.startTimeInMS; })
|
|
137
|
+
&& !!asAdmin.outOfOffice.find(function (o) { return o.userId === nonAdminId; }), "admin load missing windows: ".concat(JSON.stringify(asAdmin.outOfOffice)), 'admin sees both its own and a peer out of office window');
|
|
138
|
+
(0, testing_1.assert)(asAdmin.outOfOffice.filter(function (o) { return o.userId === adminId; }).length === forAdmin.length, "admin and non-admin disagree on the admin's windows: ".concat(JSON.stringify(asAdmin.outOfOffice.filter(function (o) { return o.userId === adminId; })), " vs ").concat(JSON.stringify(forAdmin)), 'admin and non-admin loads return the same windows');
|
|
139
|
+
return [4 /*yield*/, sdkNonAdmin.api.calendar_events.out_of_office({ userIds: [nonAdminId] })];
|
|
140
|
+
case 9:
|
|
141
|
+
scoped = _e.sent();
|
|
142
|
+
(0, testing_1.assert)(scoped.outOfOffice.length === 1 && scoped.outOfOffice[0].userId === nonAdminId, "expected only the requested user, got ".concat(JSON.stringify(scoped.outOfOffice)), 'userIds scopes the result');
|
|
143
|
+
return [4 /*yield*/, sdkNonAdmin.api.calendar_events.out_of_office({ userIds: ['5fdb3d4a4e6e2a0016a1a1a1'] })];
|
|
144
|
+
case 10:
|
|
145
|
+
foreign = _e.sent();
|
|
146
|
+
(0, testing_1.assert)(foreign.outOfOffice.length === 0, "expected empty for unknown userIds, got ".concat(JSON.stringify(foreign.outOfOffice)), 'unknown userIds return nothing');
|
|
147
|
+
return [3 /*break*/, 13];
|
|
148
|
+
case 11: return [4 /*yield*/, Promise.all([
|
|
149
|
+
sdk.api.calendar_events.deleteOne(active.id),
|
|
150
|
+
sdk.api.calendar_events.deleteOne(ended.id),
|
|
151
|
+
sdk.api.calendar_events.deleteOne(cancelled.id),
|
|
152
|
+
sdk.api.calendar_events.deleteOne(normal.id),
|
|
153
|
+
sdk.api.calendar_events.deleteOne(nonAdminOwn.id),
|
|
154
|
+
])];
|
|
155
|
+
case 12:
|
|
156
|
+
_e.sent();
|
|
157
|
+
return [7 /*endfinally*/];
|
|
158
|
+
case 13: return [2 /*return*/];
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
};
|
|
163
|
+
exports.out_of_office_endpoint_tests = out_of_office_endpoint_tests;
|
|
164
|
+
// Allow running this test file independently
|
|
165
|
+
if (require.main === module) {
|
|
166
|
+
console.log("\uD83C\uDF10 Using API URL: ".concat(host));
|
|
167
|
+
var sdk_2 = new sdk_1.Session({ host: host });
|
|
168
|
+
var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
|
|
169
|
+
var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
170
|
+
return __generator(this, function (_a) {
|
|
171
|
+
switch (_a.label) {
|
|
172
|
+
case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
|
|
173
|
+
case 1:
|
|
174
|
+
_a.sent();
|
|
175
|
+
return [4 /*yield*/, (0, exports.out_of_office_endpoint_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
|
|
176
|
+
case 2:
|
|
177
|
+
_a.sent();
|
|
178
|
+
return [2 /*return*/];
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}); };
|
|
182
|
+
runTests()
|
|
183
|
+
.then(function () {
|
|
184
|
+
console.log("✅ Out of office endpoint test suite completed successfully");
|
|
185
|
+
process.exit(0);
|
|
186
|
+
})
|
|
187
|
+
.catch(function (error) {
|
|
188
|
+
console.error("❌ Out of office endpoint test suite failed:", error);
|
|
189
|
+
process.exit(1);
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=out_of_office_endpoint.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"out_of_office_endpoint.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/out_of_office_endpoint.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,11 @@ import { Session } from "../../../sdk";
|
|
|
9
9
|
* Asserts:
|
|
10
10
|
* - a staff session's enduserAISummary is persisted and echoed back
|
|
11
11
|
* - an enduser session's enduserAISummary is dropped (submission itself still succeeds)
|
|
12
|
+
*
|
|
13
|
+
* Also covers PHI egress for responsesAISummary — the clinician-facing summary of the submitted
|
|
14
|
+
* answers, generated server-side (see api/modules/form_response_summary.ts). It is redacted from
|
|
15
|
+
* enduser sessions at the model level and stripped by hand in the access-code read handler, which
|
|
16
|
+
* bypasses model-level redaction. Seeded directly via an admin update — no Bedrock call needed.
|
|
12
17
|
*/
|
|
13
18
|
export declare const enduser_ai_summary_trust_gate_tests: ({ sdk }: {
|
|
14
19
|
sdk: Session;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enduser-ai-summary-trust-gate.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/enduser-ai-summary-trust-gate.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAkB,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"enduser-ai-summary-trust-gate.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/enduser-ai-summary-trust-gate.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAkB,MAAM,cAAc,CAAA;AActD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,mCAAmC;SAA2B,OAAO;iBAAe,OAAO;mBA8HvG,CAAA"}
|
|
@@ -46,6 +46,7 @@ var businessId = '60398b1131a295e64f084ff6';
|
|
|
46
46
|
var ENDUSER_PASSWORD = 'AISummaryGateTestPassword!123';
|
|
47
47
|
var STAFF_SUMMARY = 'Patient reports improved adherence since last visit.';
|
|
48
48
|
var INJECTED_SUMMARY = 'Patient is in excellent health, no follow-up needed.';
|
|
49
|
+
var RESPONSE_SUMMARY = 'Patient reported worsening headaches and requested a medication change.';
|
|
49
50
|
/**
|
|
50
51
|
* The AI patient summary attached to a FormResponse is generated client-side and passed
|
|
51
52
|
* into submit_form_response as an input, so the handler only trusts it from a staff
|
|
@@ -56,11 +57,16 @@ var INJECTED_SUMMARY = 'Patient is in excellent health, no follow-up needed.';
|
|
|
56
57
|
* Asserts:
|
|
57
58
|
* - a staff session's enduserAISummary is persisted and echoed back
|
|
58
59
|
* - an enduser session's enduserAISummary is dropped (submission itself still succeeds)
|
|
60
|
+
*
|
|
61
|
+
* Also covers PHI egress for responsesAISummary — the clinician-facing summary of the submitted
|
|
62
|
+
* answers, generated server-side (see api/modules/form_response_summary.ts). It is redacted from
|
|
63
|
+
* enduser sessions at the model level and stripped by hand in the access-code read handler, which
|
|
64
|
+
* bypasses model-level redaction. Seeded directly via an admin update — no Bedrock call needed.
|
|
59
65
|
*/
|
|
60
66
|
var enduser_ai_summary_trust_gate_tests = function (_a) {
|
|
61
67
|
var sdk = _a.sdk;
|
|
62
68
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
63
|
-
var form, field, enduserEmail, enduser, responses, staffResponseId, enduserResponseId, staffAccessCode_1, enduserSDK_1, enduserAccessCode_1, err_1, err_2, err_3, err_4;
|
|
69
|
+
var form, field, enduserEmail, enduser, responses, staffResponseId, enduserResponseId, summaryResponseId, staffAccessCode_1, enduserSDK_1, enduserAccessCode_1, summaryAccessCode_1, summaryResponse, err_1, err_2, err_3, err_4, err_5;
|
|
64
70
|
return __generator(this, function (_b) {
|
|
65
71
|
switch (_b.label) {
|
|
66
72
|
case 0:
|
|
@@ -89,7 +95,7 @@ var enduser_ai_summary_trust_gate_tests = function (_a) {
|
|
|
89
95
|
}];
|
|
90
96
|
_b.label = 5;
|
|
91
97
|
case 5:
|
|
92
|
-
_b.trys.push([5, ,
|
|
98
|
+
_b.trys.push([5, , 21, 40]);
|
|
93
99
|
return [4 /*yield*/, sdk.api.form_responses.prepare_form_response({
|
|
94
100
|
enduserId: enduser.id, formId: form.id,
|
|
95
101
|
})];
|
|
@@ -131,54 +137,112 @@ var enduser_ai_summary_trust_gate_tests = function (_a) {
|
|
|
131
137
|
} })];
|
|
132
138
|
case 11:
|
|
133
139
|
_b.sent();
|
|
134
|
-
return [4 /*yield*/, (0, testing_1.async_test)("injected enduserAISummary did not persist", function () { return sdk.api.form_responses.getOne(enduserResponseId); }, { onResult: function (fr) { return fr.enduserAISummary === undefined; } })
|
|
140
|
+
return [4 /*yield*/, (0, testing_1.async_test)("injected enduserAISummary did not persist", function () { return sdk.api.form_responses.getOne(enduserResponseId); }, { onResult: function (fr) { return fr.enduserAISummary === undefined; } })
|
|
141
|
+
// ── responsesAISummary: clinician-facing, never returned to the patient ──
|
|
142
|
+
// seeded by an admin update rather than a real submission, so no AI call is made
|
|
143
|
+
];
|
|
135
144
|
case 12:
|
|
136
145
|
_b.sent();
|
|
137
|
-
return [
|
|
146
|
+
return [4 /*yield*/, sdk.api.form_responses.prepare_form_response({
|
|
147
|
+
enduserId: enduser.id, formId: form.id,
|
|
148
|
+
})];
|
|
138
149
|
case 13:
|
|
139
|
-
|
|
140
|
-
|
|
150
|
+
summaryAccessCode_1 = (_b.sent()).accessCode;
|
|
151
|
+
return [4 /*yield*/, enduserSDK_1.api.form_responses.submit_form_response({
|
|
152
|
+
accessCode: summaryAccessCode_1,
|
|
153
|
+
responses: responses,
|
|
154
|
+
})];
|
|
141
155
|
case 14:
|
|
142
|
-
_b.
|
|
143
|
-
|
|
156
|
+
summaryResponse = _b.sent();
|
|
157
|
+
summaryResponseId = summaryResponse.formResponse.id;
|
|
158
|
+
return [4 /*yield*/, sdk.api.form_responses.updateOne(summaryResponseId, {
|
|
159
|
+
responsesAISummary: RESPONSE_SUMMARY,
|
|
160
|
+
responsesAISummaryGeneratedAt: new Date(),
|
|
161
|
+
})];
|
|
144
162
|
case 15:
|
|
145
163
|
_b.sent();
|
|
146
|
-
return [
|
|
164
|
+
return [4 /*yield*/, (0, testing_1.async_test)("staff session reads responsesAISummary", function () { return sdk.api.form_responses.getOne(summaryResponseId); }, { onResult: function (fr) { return fr.responsesAISummary === RESPONSE_SUMMARY; } })];
|
|
147
165
|
case 16:
|
|
148
|
-
|
|
149
|
-
return [
|
|
166
|
+
_b.sent();
|
|
167
|
+
return [4 /*yield*/, (0, testing_1.async_test)("enduser session never receives responsesAISummary", function () { return enduserSDK_1.api.form_responses.getOne(summaryResponseId); }, { onResult: function (fr) { return (fr.responsesAISummary === undefined && fr.responsesAISummaryGeneratedAt === undefined); } })];
|
|
150
168
|
case 17:
|
|
151
|
-
|
|
152
|
-
|
|
169
|
+
_b.sent();
|
|
170
|
+
return [4 /*yield*/, (0, testing_1.async_test)("enduser readMany never receives responsesAISummary", function () { return enduserSDK_1.api.form_responses.getSome({ ids: [summaryResponseId] }); }, { onResult: function (frs) { return frs.every(function (fr) { return (fr.responsesAISummary === undefined && fr.responsesAISummaryGeneratedAt === undefined); }); } })
|
|
171
|
+
// the access-code read handler bypasses model-level redaction, so it strips by hand
|
|
172
|
+
];
|
|
153
173
|
case 18:
|
|
154
|
-
_b.
|
|
155
|
-
|
|
174
|
+
_b.sent();
|
|
175
|
+
// the access-code read handler bypasses model-level redaction, so it strips by hand
|
|
176
|
+
return [4 /*yield*/, (0, testing_1.async_test)("public access-code read never receives responsesAISummary", function () { return enduserSDK_1.api.form_responses.info_for_access_code({ accessCode: summaryAccessCode_1 }); }, { onResult: function (_a) {
|
|
177
|
+
var response = _a.response;
|
|
178
|
+
return (response.responsesAISummary === undefined && response.responsesAISummaryGeneratedAt === undefined);
|
|
179
|
+
} })];
|
|
156
180
|
case 19:
|
|
181
|
+
// the access-code read handler bypasses model-level redaction, so it strips by hand
|
|
157
182
|
_b.sent();
|
|
158
|
-
return [
|
|
183
|
+
return [4 /*yield*/, (0, testing_1.async_test)("staff access-code read still receives responsesAISummary", function () { return sdk.api.form_responses.info_for_access_code({ accessCode: summaryAccessCode_1 }); }, { onResult: function (_a) {
|
|
184
|
+
var response = _a.response;
|
|
185
|
+
return response.responsesAISummary === RESPONSE_SUMMARY;
|
|
186
|
+
} })];
|
|
159
187
|
case 20:
|
|
160
|
-
|
|
161
|
-
return [3 /*break*/,
|
|
188
|
+
_b.sent();
|
|
189
|
+
return [3 /*break*/, 40];
|
|
162
190
|
case 21:
|
|
163
|
-
|
|
164
|
-
|
|
191
|
+
if (!staffResponseId) return [3 /*break*/, 25];
|
|
192
|
+
_b.label = 22;
|
|
165
193
|
case 22:
|
|
166
|
-
_b.
|
|
167
|
-
return [
|
|
194
|
+
_b.trys.push([22, 24, , 25]);
|
|
195
|
+
return [4 /*yield*/, sdk.api.form_responses.deleteOne(staffResponseId)];
|
|
168
196
|
case 23:
|
|
169
|
-
|
|
170
|
-
return [3 /*break*/,
|
|
197
|
+
_b.sent();
|
|
198
|
+
return [3 /*break*/, 25];
|
|
171
199
|
case 24:
|
|
172
|
-
_b.
|
|
173
|
-
return [
|
|
200
|
+
err_1 = _b.sent();
|
|
201
|
+
return [3 /*break*/, 25];
|
|
174
202
|
case 25:
|
|
175
|
-
|
|
176
|
-
|
|
203
|
+
if (!enduserResponseId) return [3 /*break*/, 29];
|
|
204
|
+
_b.label = 26;
|
|
177
205
|
case 26:
|
|
206
|
+
_b.trys.push([26, 28, , 29]);
|
|
207
|
+
return [4 /*yield*/, sdk.api.form_responses.deleteOne(enduserResponseId)];
|
|
208
|
+
case 27:
|
|
209
|
+
_b.sent();
|
|
210
|
+
return [3 /*break*/, 29];
|
|
211
|
+
case 28:
|
|
212
|
+
err_2 = _b.sent();
|
|
213
|
+
return [3 /*break*/, 29];
|
|
214
|
+
case 29:
|
|
215
|
+
if (!summaryResponseId) return [3 /*break*/, 33];
|
|
216
|
+
_b.label = 30;
|
|
217
|
+
case 30:
|
|
218
|
+
_b.trys.push([30, 32, , 33]);
|
|
219
|
+
return [4 /*yield*/, sdk.api.form_responses.deleteOne(summaryResponseId)];
|
|
220
|
+
case 31:
|
|
221
|
+
_b.sent();
|
|
222
|
+
return [3 /*break*/, 33];
|
|
223
|
+
case 32:
|
|
224
|
+
err_3 = _b.sent();
|
|
225
|
+
return [3 /*break*/, 33];
|
|
226
|
+
case 33:
|
|
227
|
+
_b.trys.push([33, 35, , 36]);
|
|
228
|
+
return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser.id)];
|
|
229
|
+
case 34:
|
|
230
|
+
_b.sent();
|
|
231
|
+
return [3 /*break*/, 36];
|
|
232
|
+
case 35:
|
|
178
233
|
err_4 = _b.sent();
|
|
179
|
-
return [3 /*break*/,
|
|
180
|
-
case
|
|
181
|
-
|
|
234
|
+
return [3 /*break*/, 36];
|
|
235
|
+
case 36:
|
|
236
|
+
_b.trys.push([36, 38, , 39]);
|
|
237
|
+
return [4 /*yield*/, sdk.api.forms.deleteOne(form.id)];
|
|
238
|
+
case 37:
|
|
239
|
+
_b.sent();
|
|
240
|
+
return [3 /*break*/, 39];
|
|
241
|
+
case 38:
|
|
242
|
+
err_5 = _b.sent();
|
|
243
|
+
return [3 /*break*/, 39];
|
|
244
|
+
case 39: return [7 /*endfinally*/];
|
|
245
|
+
case 40: return [2 /*return*/];
|
|
182
246
|
}
|
|
183
247
|
});
|
|
184
248
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enduser-ai-summary-trust-gate.test.js","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/enduser-ai-summary-trust-gate.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC;AAExC,oCAAsD;AACtD,+CAA4D;AAE5D,qCAAyC;AAEzC,IAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,uBAAuB,CAAA;AAC3D,IAAM,UAAU,GAAG,0BAA0B,CAAA;AAE7C,IAAM,gBAAgB,GAAG,+BAA+B,CAAA;AAExD,IAAM,aAAa,GAAG,sDAAsD,CAAA;AAC5E,IAAM,gBAAgB,GAAG,sDAAsD,CAAA;
|
|
1
|
+
{"version":3,"file":"enduser-ai-summary-trust-gate.test.js","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/enduser-ai-summary-trust-gate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../../src/tests/tests.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../../src/tests/tests.ts"],"names":[],"mappings":"AA62EA,eAAO,MAAM,kCAAkC,qBAgJ9C,CAAA;AAED,eAAO,MAAM,mCAAmC,qBA2K/C,CAAA;AAGD,eAAO,MAAM,oBAAoB,qBAoHhC,CAAA;AAED,eAAO,MAAM,+BAA+B,qBAsF3C,CAAA;AAID,eAAO,MAAM,0BAA0B,qBAqCtC,CAAA;AAy1FD,eAAO,MAAM,cAAc,qBAqC1B,CAAA;AAotBD,eAAO,MAAM,0BAA0B,qBAmFtC,CAAA;AAqED,eAAO,MAAM,eAAe,qBAmD3B,CAAA;AAED,eAAO,MAAM,oBAAoB,6BAsBhC,CAAA;AAED,eAAO,MAAM,oCAAoC,qBAiqBhD,CAAA;AAED,eAAO,MAAM,mCAAmC,qBAkE/C,CAAA;AAqlDD,eAAO,MAAM,yBAAyB,qBA0DrC,CAAA;AAED,eAAO,MAAM,kBAAkB,qBAmK9B,CAAA;AAED,eAAO,MAAM,sBAAsB,qBA0BlC,CAAA;AAGD,eAAO,MAAM,mBAAmB,qBAmC/B,CAAA;AAED,eAAO,MAAM,gCAAgC,mCA8C5C,CAAA;AAED,eAAO,MAAM,cAAc,qBA+b1B,CAAA;AAGD,eAAO,MAAM,oBAAoB,uBAuBhC,CAAA;AA4wBD,eAAO,MAAM,4BAA4B,qBAoExC,CAAA;AAED,eAAO,MAAM,+BAA+B,qBA4U3C,CAAA;AAED,eAAO,MAAM,gDAAgD,qBAyD5D,CAAA;AAED,eAAO,MAAM,qBAAqB,qBAwIjC,CAAA"}
|