@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,188 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
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;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
require('source-map-support').install();
|
|
38
|
+
import { Session } from "../../sdk";
|
|
39
|
+
import { assert, log_header, } from "@tellescope/testing";
|
|
40
|
+
import { setup_tests } from "../setup";
|
|
41
|
+
var host = process.env.API_URL || 'http://localhost:8080';
|
|
42
|
+
var MS_PER_MINUTE = 60 * 1000;
|
|
43
|
+
var MS_PER_HOUR = 60 * MS_PER_MINUTE;
|
|
44
|
+
// Covers the calendar_events.out_of_office endpoint, whose whole reason to exist is that it reads
|
|
45
|
+
// ACROSS users: calendar_events is row-filtered on attendees.id and a non-admin defaults to
|
|
46
|
+
// read: 'Assigned', so the ordinary read path returns only the caller's own blocks. The endpoint
|
|
47
|
+
// therefore queries organization-wide on purpose, and returns no event content to make that safe.
|
|
48
|
+
//
|
|
49
|
+
// The cross-user assertion below is the one that matters: swapping the handler's
|
|
50
|
+
// buildOrganizationWideQueries back to the request-scoped DB would silently break peer visibility in
|
|
51
|
+
// Team Chat without breaking a build or any other test.
|
|
52
|
+
export var out_of_office_endpoint_tests = function (_a) {
|
|
53
|
+
var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
|
|
54
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
55
|
+
var adminId, nonAdminId, now, active, ended, cancelled, normal, nonAdminOwn, outOfOffice, forAdmin, asAdmin, scoped, foreign;
|
|
56
|
+
var _b, _c, _d;
|
|
57
|
+
return __generator(this, function (_e) {
|
|
58
|
+
switch (_e.label) {
|
|
59
|
+
case 0:
|
|
60
|
+
log_header("Out of Office Endpoint");
|
|
61
|
+
adminId = sdk.userInfo.id;
|
|
62
|
+
nonAdminId = sdkNonAdmin.userInfo.id;
|
|
63
|
+
now = Date.now();
|
|
64
|
+
return [4 /*yield*/, sdk.api.calendar_events.createOne({
|
|
65
|
+
title: 'Out of Office',
|
|
66
|
+
outOfOffice: true,
|
|
67
|
+
startTimeInMS: now - 2 * MS_PER_HOUR,
|
|
68
|
+
durationInMinutes: 8 * 60,
|
|
69
|
+
attendees: [{ id: adminId, type: 'user' }],
|
|
70
|
+
})
|
|
71
|
+
// ended three hours ago — inside the query's start-time range, so only the handler's computed
|
|
72
|
+
// end-time check excludes it
|
|
73
|
+
];
|
|
74
|
+
case 1:
|
|
75
|
+
active = _e.sent();
|
|
76
|
+
return [4 /*yield*/, sdk.api.calendar_events.createOne({
|
|
77
|
+
title: 'Out of Office',
|
|
78
|
+
outOfOffice: true,
|
|
79
|
+
startTimeInMS: now - 5 * MS_PER_HOUR,
|
|
80
|
+
durationInMinutes: 2 * 60,
|
|
81
|
+
attendees: [{ id: adminId, type: 'user' }],
|
|
82
|
+
})];
|
|
83
|
+
case 2:
|
|
84
|
+
ended = _e.sent();
|
|
85
|
+
return [4 /*yield*/, sdk.api.calendar_events.createOne({
|
|
86
|
+
title: 'Out of Office',
|
|
87
|
+
outOfOffice: true,
|
|
88
|
+
startTimeInMS: now - MS_PER_HOUR,
|
|
89
|
+
durationInMinutes: 4 * 60,
|
|
90
|
+
attendees: [{ id: adminId, type: 'user' }],
|
|
91
|
+
cancelledAt: new Date(),
|
|
92
|
+
})
|
|
93
|
+
// not flagged: a normal event overlapping now must never appear
|
|
94
|
+
];
|
|
95
|
+
case 3:
|
|
96
|
+
cancelled = _e.sent();
|
|
97
|
+
return [4 /*yield*/, sdk.api.calendar_events.createOne({
|
|
98
|
+
title: 'Regular Appointment',
|
|
99
|
+
startTimeInMS: now - MS_PER_HOUR,
|
|
100
|
+
durationInMinutes: 4 * 60,
|
|
101
|
+
attendees: [{ id: adminId, type: 'user' }],
|
|
102
|
+
})
|
|
103
|
+
// on the non-admin, used for the userIds scoping check
|
|
104
|
+
];
|
|
105
|
+
case 4:
|
|
106
|
+
normal = _e.sent();
|
|
107
|
+
return [4 /*yield*/, sdk.api.calendar_events.createOne({
|
|
108
|
+
title: 'Out of Office',
|
|
109
|
+
outOfOffice: true,
|
|
110
|
+
startTimeInMS: now - MS_PER_HOUR,
|
|
111
|
+
durationInMinutes: 4 * 60,
|
|
112
|
+
attendees: [{ id: nonAdminId, type: 'user' }],
|
|
113
|
+
})];
|
|
114
|
+
case 5:
|
|
115
|
+
nonAdminOwn = _e.sent();
|
|
116
|
+
_e.label = 6;
|
|
117
|
+
case 6:
|
|
118
|
+
_e.trys.push([6, , 11, 13]);
|
|
119
|
+
return [4 /*yield*/, sdkNonAdmin.api.calendar_events.out_of_office()
|
|
120
|
+
// assert(assertion, failureMessage, successTitle)
|
|
121
|
+
];
|
|
122
|
+
case 7:
|
|
123
|
+
outOfOffice = (_e.sent()).outOfOffice;
|
|
124
|
+
// assert(assertion, failureMessage, successTitle)
|
|
125
|
+
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');
|
|
126
|
+
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');
|
|
127
|
+
forAdmin = outOfOffice.filter(function (o) { return o.userId === adminId; });
|
|
128
|
+
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');
|
|
129
|
+
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');
|
|
130
|
+
return [4 /*yield*/, sdk.api.calendar_events.out_of_office()];
|
|
131
|
+
case 8:
|
|
132
|
+
asAdmin = _e.sent();
|
|
133
|
+
assert(!!asAdmin.outOfOffice.find(function (o) { return o.userId === adminId && o.startTimeInMS === active.startTimeInMS; })
|
|
134
|
+
&& !!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');
|
|
135
|
+
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');
|
|
136
|
+
return [4 /*yield*/, sdkNonAdmin.api.calendar_events.out_of_office({ userIds: [nonAdminId] })];
|
|
137
|
+
case 9:
|
|
138
|
+
scoped = _e.sent();
|
|
139
|
+
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');
|
|
140
|
+
return [4 /*yield*/, sdkNonAdmin.api.calendar_events.out_of_office({ userIds: ['5fdb3d4a4e6e2a0016a1a1a1'] })];
|
|
141
|
+
case 10:
|
|
142
|
+
foreign = _e.sent();
|
|
143
|
+
assert(foreign.outOfOffice.length === 0, "expected empty for unknown userIds, got ".concat(JSON.stringify(foreign.outOfOffice)), 'unknown userIds return nothing');
|
|
144
|
+
return [3 /*break*/, 13];
|
|
145
|
+
case 11: return [4 /*yield*/, Promise.all([
|
|
146
|
+
sdk.api.calendar_events.deleteOne(active.id),
|
|
147
|
+
sdk.api.calendar_events.deleteOne(ended.id),
|
|
148
|
+
sdk.api.calendar_events.deleteOne(cancelled.id),
|
|
149
|
+
sdk.api.calendar_events.deleteOne(normal.id),
|
|
150
|
+
sdk.api.calendar_events.deleteOne(nonAdminOwn.id),
|
|
151
|
+
])];
|
|
152
|
+
case 12:
|
|
153
|
+
_e.sent();
|
|
154
|
+
return [7 /*endfinally*/];
|
|
155
|
+
case 13: return [2 /*return*/];
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
// Allow running this test file independently
|
|
161
|
+
if (require.main === module) {
|
|
162
|
+
console.log("\uD83C\uDF10 Using API URL: ".concat(host));
|
|
163
|
+
var sdk_1 = new Session({ host: host });
|
|
164
|
+
var sdkNonAdmin_1 = new Session({ host: host });
|
|
165
|
+
var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
166
|
+
return __generator(this, function (_a) {
|
|
167
|
+
switch (_a.label) {
|
|
168
|
+
case 0: return [4 /*yield*/, setup_tests(sdk_1, sdkNonAdmin_1)];
|
|
169
|
+
case 1:
|
|
170
|
+
_a.sent();
|
|
171
|
+
return [4 /*yield*/, out_of_office_endpoint_tests({ sdk: sdk_1, sdkNonAdmin: sdkNonAdmin_1 })];
|
|
172
|
+
case 2:
|
|
173
|
+
_a.sent();
|
|
174
|
+
return [2 /*return*/];
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}); };
|
|
178
|
+
runTests()
|
|
179
|
+
.then(function () {
|
|
180
|
+
console.log("✅ Out of office endpoint test suite completed successfully");
|
|
181
|
+
process.exit(0);
|
|
182
|
+
})
|
|
183
|
+
.catch(function (error) {
|
|
184
|
+
console.error("❌ Out of office endpoint test suite failed:", error);
|
|
185
|
+
process.exit(1);
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
//# 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EACL,MAAM,EACN,UAAU,GACX,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,IAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,uBAAgC,CAAA;AAEpE,IAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAA;AAC/B,IAAM,WAAW,GAAG,EAAE,GAAG,aAAa,CAAA;AAEtC,kGAAkG;AAClG,4FAA4F;AAC5F,iGAAiG;AACjG,kGAAkG;AAClG,EAAE;AACF,iFAAiF;AACjF,qGAAqG;AACrG,wDAAwD;AACxD,MAAM,CAAC,IAAM,4BAA4B,GAAG,UAAO,EAA6D;QAA3D,GAAG,SAAA,EAAE,WAAW,iBAAA;;;;;;;oBACnE,UAAU,CAAC,wBAAwB,CAAC,CAAA;oBAE9B,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAA;oBACzB,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAA;oBACpC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;oBAGP,qBAAM,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC;4BACrD,KAAK,EAAE,eAAe;4BACtB,WAAW,EAAE,IAAI;4BACjB,aAAa,EAAE,GAAG,GAAG,CAAC,GAAG,WAAW;4BACpC,iBAAiB,EAAE,CAAC,GAAG,EAAE;4BACzB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yBAC3C,CAAC;wBACF,8FAA8F;wBAC9F,6BAA6B;sBAF3B;;oBANI,MAAM,GAAG,SAMb;oBAGY,qBAAM,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC;4BACpD,KAAK,EAAE,eAAe;4BACtB,WAAW,EAAE,IAAI;4BACjB,aAAa,EAAE,GAAG,GAAG,CAAC,GAAG,WAAW;4BACpC,iBAAiB,EAAE,CAAC,GAAG,EAAE;4BACzB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yBAC3C,CAAC,EAAA;;oBANI,KAAK,GAAG,SAMZ;oBACgB,qBAAM,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC;4BACxD,KAAK,EAAE,eAAe;4BACtB,WAAW,EAAE,IAAI;4BACjB,aAAa,EAAE,GAAG,GAAG,WAAW;4BAChC,iBAAiB,EAAE,CAAC,GAAG,EAAE;4BACzB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4BAC1C,WAAW,EAAE,IAAI,IAAI,EAAE;yBACxB,CAAC;wBACF,gEAAgE;sBAD9D;;oBAPI,SAAS,GAAG,SAOhB;oBAEa,qBAAM,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC;4BACrD,KAAK,EAAE,qBAAqB;4BAC5B,aAAa,EAAE,GAAG,GAAG,WAAW;4BAChC,iBAAiB,EAAE,CAAC,GAAG,EAAE;4BACzB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yBAC3C,CAAC;wBACF,uDAAuD;sBADrD;;oBALI,MAAM,GAAG,SAKb;oBAEkB,qBAAM,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC;4BAC1D,KAAK,EAAE,eAAe;4BACtB,WAAW,EAAE,IAAI;4BACjB,aAAa,EAAE,GAAG,GAAG,WAAW;4BAChC,iBAAiB,EAAE,CAAC,GAAG,EAAE;4BACzB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yBAC9C,CAAC,EAAA;;oBANI,WAAW,GAAG,SAMlB;;;;oBAGwB,qBAAM,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,EAAE;wBAE7E,kDAAkD;sBAF2B;;oBAArE,WAAW,GAAK,CAAA,SAAqD,CAAA,YAA1D;oBAEnB,kDAAkD;oBAClD,MAAM,CACJ,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,EAAhE,CAAgE,CAAC,EACzF,0IAA0I,EAC1I,4CAA4C,CAC7C,CAAA;oBAED,MAAM,CACJ,WAAW,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CACrB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,kCAAkC,CACvE,EAFsB,CAEtB,CAAC,EACF,wCAAiC,IAAI,CAAC,SAAS,CAAC,MAAA,WAAW,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC,CAAE,EACvE,mCAAmC,CACpC,CAAA;oBAEK,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,OAAO,EAApB,CAAoB,CAAC,CAAA;oBAC9D,MAAM,CACJ,QAAQ,CAAC,MAAM,KAAK,CAAC,EACrB,oEAA6D,QAAQ,CAAC,MAAM,eAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAE,EAC3G,oDAAoD,CACrD,CAAA;oBACD,MAAM,CACJ,CAAA,MAAA,QAAQ,CAAC,CAAC,CAAC,0CAAE,WAAW,MAAK,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,iBAAiB,GAAG,aAAa,EAC5F,0BAAmB,MAAA,QAAQ,CAAC,CAAC,CAAC,0CAAE,WAAW,wBAAc,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,iBAAiB,GAAG,aAAa,CAAE,EAC1H,gEAAgE,CACjE,CAAA;oBAKe,qBAAM,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,EAAE,EAAA;;oBAAvD,OAAO,GAAG,SAA6C;oBAC7D,MAAM,CACJ,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,EAAhE,CAAgE,CAAC;2BAC9F,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,UAAU,EAAvB,CAAuB,CAAC,EAC3D,sCAA+B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAE,EACpE,yDAAyD,CAC1D,CAAA;oBACD,MAAM,CACJ,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,OAAO,EAApB,CAAoB,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAChF,+DAAwD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,OAAO,EAApB,CAAoB,CAAC,CAAC,iBAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAE,EAC9J,mDAAmD,CACpD,CAAA;oBAEc,qBAAM,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;;oBAAvF,MAAM,GAAG,SAA8E;oBAC7F,MAAM,CACJ,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,EAC9E,gDAAyC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAE,EAC7E,2BAA2B,CAC5B,CAAA;oBAGe,qBAAM,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC,EAAA;;oBAAxG,OAAO,GAAG,SAA8F;oBAC9G,MAAM,CACJ,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAChC,kDAA2C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAE,EAChF,gCAAgC,CACjC,CAAA;;yBAED,qBAAM,OAAO,CAAC,GAAG,CAAC;wBAChB,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC5C,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3C,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC/C,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC5C,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;qBAClD,CAAC,EAAA;;oBANF,SAME,CAAA;;;;;;CAEL,CAAA;AAED,6CAA6C;AAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAC3B,OAAO,CAAC,GAAG,CAAC,sCAAqB,IAAI,CAAE,CAAC,CAAA;IACxC,IAAM,KAAG,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAA;IACjC,IAAM,aAAW,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAA;IAEzC,IAAM,QAAQ,GAAG;;;wBACf,qBAAM,WAAW,CAAC,KAAG,EAAE,aAAW,CAAC,EAAA;;oBAAnC,SAAmC,CAAA;oBACnC,qBAAM,4BAA4B,CAAC,EAAE,GAAG,OAAA,EAAE,WAAW,eAAA,EAAE,CAAC,EAAA;;oBAAxD,SAAwD,CAAA;;;;SACzD,CAAA;IAED,QAAQ,EAAE;SACP,IAAI,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC;SACD,KAAK,CAAC,UAAC,KAAK;QACX,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAA;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;CACL"}
|
|
@@ -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"}
|
|
@@ -43,6 +43,7 @@ var businessId = '60398b1131a295e64f084ff6';
|
|
|
43
43
|
var ENDUSER_PASSWORD = 'AISummaryGateTestPassword!123';
|
|
44
44
|
var STAFF_SUMMARY = 'Patient reports improved adherence since last visit.';
|
|
45
45
|
var INJECTED_SUMMARY = 'Patient is in excellent health, no follow-up needed.';
|
|
46
|
+
var RESPONSE_SUMMARY = 'Patient reported worsening headaches and requested a medication change.';
|
|
46
47
|
/**
|
|
47
48
|
* The AI patient summary attached to a FormResponse is generated client-side and passed
|
|
48
49
|
* into submit_form_response as an input, so the handler only trusts it from a staff
|
|
@@ -53,11 +54,16 @@ var INJECTED_SUMMARY = 'Patient is in excellent health, no follow-up needed.';
|
|
|
53
54
|
* Asserts:
|
|
54
55
|
* - a staff session's enduserAISummary is persisted and echoed back
|
|
55
56
|
* - an enduser session's enduserAISummary is dropped (submission itself still succeeds)
|
|
57
|
+
*
|
|
58
|
+
* Also covers PHI egress for responsesAISummary — the clinician-facing summary of the submitted
|
|
59
|
+
* answers, generated server-side (see api/modules/form_response_summary.ts). It is redacted from
|
|
60
|
+
* enduser sessions at the model level and stripped by hand in the access-code read handler, which
|
|
61
|
+
* bypasses model-level redaction. Seeded directly via an admin update — no Bedrock call needed.
|
|
56
62
|
*/
|
|
57
63
|
export var enduser_ai_summary_trust_gate_tests = function (_a) {
|
|
58
64
|
var sdk = _a.sdk;
|
|
59
65
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
60
|
-
var form, field, enduserEmail, enduser, responses, staffResponseId, enduserResponseId, staffAccessCode_1, enduserSDK_1, enduserAccessCode_1, err_1, err_2, err_3, err_4;
|
|
66
|
+
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;
|
|
61
67
|
return __generator(this, function (_b) {
|
|
62
68
|
switch (_b.label) {
|
|
63
69
|
case 0:
|
|
@@ -86,7 +92,7 @@ export var enduser_ai_summary_trust_gate_tests = function (_a) {
|
|
|
86
92
|
}];
|
|
87
93
|
_b.label = 5;
|
|
88
94
|
case 5:
|
|
89
|
-
_b.trys.push([5, ,
|
|
95
|
+
_b.trys.push([5, , 21, 40]);
|
|
90
96
|
return [4 /*yield*/, sdk.api.form_responses.prepare_form_response({
|
|
91
97
|
enduserId: enduser.id, formId: form.id,
|
|
92
98
|
})];
|
|
@@ -128,54 +134,112 @@ export var enduser_ai_summary_trust_gate_tests = function (_a) {
|
|
|
128
134
|
} })];
|
|
129
135
|
case 11:
|
|
130
136
|
_b.sent();
|
|
131
|
-
return [4 /*yield*/, async_test("injected enduserAISummary did not persist", function () { return sdk.api.form_responses.getOne(enduserResponseId); }, { onResult: function (fr) { return fr.enduserAISummary === undefined; } })
|
|
137
|
+
return [4 /*yield*/, async_test("injected enduserAISummary did not persist", function () { return sdk.api.form_responses.getOne(enduserResponseId); }, { onResult: function (fr) { return fr.enduserAISummary === undefined; } })
|
|
138
|
+
// ── responsesAISummary: clinician-facing, never returned to the patient ──
|
|
139
|
+
// seeded by an admin update rather than a real submission, so no AI call is made
|
|
140
|
+
];
|
|
132
141
|
case 12:
|
|
133
142
|
_b.sent();
|
|
134
|
-
return [
|
|
143
|
+
return [4 /*yield*/, sdk.api.form_responses.prepare_form_response({
|
|
144
|
+
enduserId: enduser.id, formId: form.id,
|
|
145
|
+
})];
|
|
135
146
|
case 13:
|
|
136
|
-
|
|
137
|
-
|
|
147
|
+
summaryAccessCode_1 = (_b.sent()).accessCode;
|
|
148
|
+
return [4 /*yield*/, enduserSDK_1.api.form_responses.submit_form_response({
|
|
149
|
+
accessCode: summaryAccessCode_1,
|
|
150
|
+
responses: responses,
|
|
151
|
+
})];
|
|
138
152
|
case 14:
|
|
139
|
-
_b.
|
|
140
|
-
|
|
153
|
+
summaryResponse = _b.sent();
|
|
154
|
+
summaryResponseId = summaryResponse.formResponse.id;
|
|
155
|
+
return [4 /*yield*/, sdk.api.form_responses.updateOne(summaryResponseId, {
|
|
156
|
+
responsesAISummary: RESPONSE_SUMMARY,
|
|
157
|
+
responsesAISummaryGeneratedAt: new Date(),
|
|
158
|
+
})];
|
|
141
159
|
case 15:
|
|
142
160
|
_b.sent();
|
|
143
|
-
return [
|
|
161
|
+
return [4 /*yield*/, async_test("staff session reads responsesAISummary", function () { return sdk.api.form_responses.getOne(summaryResponseId); }, { onResult: function (fr) { return fr.responsesAISummary === RESPONSE_SUMMARY; } })];
|
|
144
162
|
case 16:
|
|
145
|
-
|
|
146
|
-
return [
|
|
163
|
+
_b.sent();
|
|
164
|
+
return [4 /*yield*/, 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); } })];
|
|
147
165
|
case 17:
|
|
148
|
-
|
|
149
|
-
|
|
166
|
+
_b.sent();
|
|
167
|
+
return [4 /*yield*/, 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); }); } })
|
|
168
|
+
// the access-code read handler bypasses model-level redaction, so it strips by hand
|
|
169
|
+
];
|
|
150
170
|
case 18:
|
|
151
|
-
_b.
|
|
152
|
-
|
|
171
|
+
_b.sent();
|
|
172
|
+
// the access-code read handler bypasses model-level redaction, so it strips by hand
|
|
173
|
+
return [4 /*yield*/, 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) {
|
|
174
|
+
var response = _a.response;
|
|
175
|
+
return (response.responsesAISummary === undefined && response.responsesAISummaryGeneratedAt === undefined);
|
|
176
|
+
} })];
|
|
153
177
|
case 19:
|
|
178
|
+
// the access-code read handler bypasses model-level redaction, so it strips by hand
|
|
154
179
|
_b.sent();
|
|
155
|
-
return [
|
|
180
|
+
return [4 /*yield*/, 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) {
|
|
181
|
+
var response = _a.response;
|
|
182
|
+
return response.responsesAISummary === RESPONSE_SUMMARY;
|
|
183
|
+
} })];
|
|
156
184
|
case 20:
|
|
157
|
-
|
|
158
|
-
return [3 /*break*/,
|
|
185
|
+
_b.sent();
|
|
186
|
+
return [3 /*break*/, 40];
|
|
159
187
|
case 21:
|
|
160
|
-
|
|
161
|
-
|
|
188
|
+
if (!staffResponseId) return [3 /*break*/, 25];
|
|
189
|
+
_b.label = 22;
|
|
162
190
|
case 22:
|
|
163
|
-
_b.
|
|
164
|
-
return [
|
|
191
|
+
_b.trys.push([22, 24, , 25]);
|
|
192
|
+
return [4 /*yield*/, sdk.api.form_responses.deleteOne(staffResponseId)];
|
|
165
193
|
case 23:
|
|
166
|
-
|
|
167
|
-
return [3 /*break*/,
|
|
194
|
+
_b.sent();
|
|
195
|
+
return [3 /*break*/, 25];
|
|
168
196
|
case 24:
|
|
169
|
-
_b.
|
|
170
|
-
return [
|
|
197
|
+
err_1 = _b.sent();
|
|
198
|
+
return [3 /*break*/, 25];
|
|
171
199
|
case 25:
|
|
172
|
-
|
|
173
|
-
|
|
200
|
+
if (!enduserResponseId) return [3 /*break*/, 29];
|
|
201
|
+
_b.label = 26;
|
|
174
202
|
case 26:
|
|
203
|
+
_b.trys.push([26, 28, , 29]);
|
|
204
|
+
return [4 /*yield*/, sdk.api.form_responses.deleteOne(enduserResponseId)];
|
|
205
|
+
case 27:
|
|
206
|
+
_b.sent();
|
|
207
|
+
return [3 /*break*/, 29];
|
|
208
|
+
case 28:
|
|
209
|
+
err_2 = _b.sent();
|
|
210
|
+
return [3 /*break*/, 29];
|
|
211
|
+
case 29:
|
|
212
|
+
if (!summaryResponseId) return [3 /*break*/, 33];
|
|
213
|
+
_b.label = 30;
|
|
214
|
+
case 30:
|
|
215
|
+
_b.trys.push([30, 32, , 33]);
|
|
216
|
+
return [4 /*yield*/, sdk.api.form_responses.deleteOne(summaryResponseId)];
|
|
217
|
+
case 31:
|
|
218
|
+
_b.sent();
|
|
219
|
+
return [3 /*break*/, 33];
|
|
220
|
+
case 32:
|
|
221
|
+
err_3 = _b.sent();
|
|
222
|
+
return [3 /*break*/, 33];
|
|
223
|
+
case 33:
|
|
224
|
+
_b.trys.push([33, 35, , 36]);
|
|
225
|
+
return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser.id)];
|
|
226
|
+
case 34:
|
|
227
|
+
_b.sent();
|
|
228
|
+
return [3 /*break*/, 36];
|
|
229
|
+
case 35:
|
|
175
230
|
err_4 = _b.sent();
|
|
176
|
-
return [3 /*break*/,
|
|
177
|
-
case
|
|
178
|
-
|
|
231
|
+
return [3 /*break*/, 36];
|
|
232
|
+
case 36:
|
|
233
|
+
_b.trys.push([36, 38, , 39]);
|
|
234
|
+
return [4 /*yield*/, sdk.api.forms.deleteOne(form.id)];
|
|
235
|
+
case 37:
|
|
236
|
+
_b.sent();
|
|
237
|
+
return [3 /*break*/, 39];
|
|
238
|
+
case 38:
|
|
239
|
+
err_5 = _b.sent();
|
|
240
|
+
return [3 /*break*/, 39];
|
|
241
|
+
case 39: return [7 /*endfinally*/];
|
|
242
|
+
case 40: return [2 /*return*/];
|
|
179
243
|
}
|
|
180
244
|
});
|
|
181
245
|
});
|
|
@@ -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,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;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"}
|