@tellescope/sdk 1.242.9 → 1.243.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/enduser.d.ts +20 -0
- package/lib/cjs/enduser.d.ts.map +1 -1
- package/lib/cjs/sdk.d.ts +45 -0
- package/lib/cjs/sdk.d.ts.map +1 -1
- package/lib/cjs/sdk.js +2 -0
- package/lib/cjs/sdk.js.map +1 -1
- package/lib/cjs/tests/api_tests/concurrent_build_threads.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/concurrent_build_threads.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/concurrent_build_threads.test.js +169 -0
- package/lib/cjs/tests/api_tests/concurrent_build_threads.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/custom_aggregation.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/custom_aggregation.test.js +109 -7
- package/lib/cjs/tests/api_tests/custom_aggregation.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/custom_dashboards.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/custom_dashboards.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/custom_dashboards.test.js +304 -0
- package/lib/cjs/tests/api_tests/custom_dashboards.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/inbox_thread_assignment_updates.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/inbox_thread_assignment_updates.test.js +655 -139
- package/lib/cjs/tests/api_tests/inbox_thread_assignment_updates.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/no_access_permission_checks.test.d.ts +20 -0
- package/lib/cjs/tests/api_tests/no_access_permission_checks.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/no_access_permission_checks.test.js +481 -0
- package/lib/cjs/tests/api_tests/no_access_permission_checks.test.js.map +1 -0
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +125 -112
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/enduser.d.ts +20 -0
- package/lib/esm/enduser.d.ts.map +1 -1
- package/lib/esm/sdk.d.ts +45 -0
- package/lib/esm/sdk.d.ts.map +1 -1
- package/lib/esm/sdk.js +2 -0
- package/lib/esm/sdk.js.map +1 -1
- package/lib/esm/tests/api_tests/concurrent_build_threads.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/concurrent_build_threads.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/concurrent_build_threads.test.js +165 -0
- package/lib/esm/tests/api_tests/concurrent_build_threads.test.js.map +1 -0
- package/lib/esm/tests/api_tests/custom_aggregation.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/custom_aggregation.test.js +110 -8
- package/lib/esm/tests/api_tests/custom_aggregation.test.js.map +1 -1
- package/lib/esm/tests/api_tests/custom_dashboards.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/custom_dashboards.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/custom_dashboards.test.js +300 -0
- package/lib/esm/tests/api_tests/custom_dashboards.test.js.map +1 -0
- package/lib/esm/tests/api_tests/inbox_thread_assignment_updates.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/inbox_thread_assignment_updates.test.js +655 -139
- package/lib/esm/tests/api_tests/inbox_thread_assignment_updates.test.js.map +1 -1
- package/lib/esm/tests/api_tests/no_access_permission_checks.test.d.ts +20 -0
- package/lib/esm/tests/api_tests/no_access_permission_checks.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/no_access_permission_checks.test.js +477 -0
- package/lib/esm/tests/api_tests/no_access_permission_checks.test.js.map +1 -0
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +125 -112
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/sdk.ts +9 -1
- package/src/tests/api_tests/concurrent_build_threads.test.ts +103 -0
- package/src/tests/api_tests/custom_aggregation.test.ts +74 -0
- package/src/tests/api_tests/custom_dashboards.test.ts +258 -0
- package/src/tests/api_tests/inbox_thread_assignment_updates.test.ts +431 -1
- package/src/tests/api_tests/no_access_permission_checks.test.ts +365 -0
- package/src/tests/tests.ts +8 -1
- package/test_generated.pdf +0 -0
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
23
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
+
function step(op) {
|
|
26
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
+
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;
|
|
29
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
+
switch (op[0]) {
|
|
31
|
+
case 0: case 1: t = op; break;
|
|
32
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
+
default:
|
|
36
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
+
if (t[2]) _.ops.pop();
|
|
41
|
+
_.trys.pop(); continue;
|
|
42
|
+
}
|
|
43
|
+
op = body.call(thisArg, _);
|
|
44
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
require('source-map-support').install();
|
|
49
|
+
import { Session } from "../../sdk";
|
|
50
|
+
import { async_test, log_header, wait, } from "@tellescope/testing";
|
|
51
|
+
import { setup_tests } from "../setup";
|
|
52
|
+
import { PROVIDER_PERMISSIONS } from "@tellescope/constants";
|
|
53
|
+
var host = process.env.API_URL || 'http://localhost:8080';
|
|
54
|
+
var _a = [process.env.NON_ADMIN_EMAIL, process.env.NON_ADMIN_PASSWORD], nonAdminEmail = _a[0], nonAdminPassword = _a[1];
|
|
55
|
+
/**
|
|
56
|
+
* Security tests for endpoints with noAccessPermissions: true
|
|
57
|
+
*
|
|
58
|
+
* These tests verify that endpoints which bypass the standard middleware access check
|
|
59
|
+
* still properly enforce NO_ACCESS restrictions in their handlers.
|
|
60
|
+
*
|
|
61
|
+
* Test approach:
|
|
62
|
+
* 1. Create a role with NO_ACCESS (null) for a specific model
|
|
63
|
+
* 2. Assign that role to a non-admin user
|
|
64
|
+
* 3. Attempt to call the endpoint
|
|
65
|
+
* 4. Verify whether access is properly denied
|
|
66
|
+
*
|
|
67
|
+
* If a test shows data is returned when it shouldn't be, that endpoint needs a fix.
|
|
68
|
+
*/
|
|
69
|
+
export var no_access_permission_checks_tests = function (_a) {
|
|
70
|
+
var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
|
|
71
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
72
|
+
var testEnduser, noAccessTestRole, rbap, originalRoles, templatesOnlyRole, rbapTemplatesOnly, testJourney, waitlistEntry_1, assignedEnduserRole, rbapAssigned, resultAssigned_1;
|
|
73
|
+
return __generator(this, function (_b) {
|
|
74
|
+
switch (_b.label) {
|
|
75
|
+
case 0:
|
|
76
|
+
log_header("NO_ACCESS Permission Checks Tests");
|
|
77
|
+
return [4 /*yield*/, sdk.api.endusers.createOne({
|
|
78
|
+
fname: 'NoAccessTest',
|
|
79
|
+
lname: 'User',
|
|
80
|
+
email: 'no-access-test@example.com',
|
|
81
|
+
})
|
|
82
|
+
// Create a role with NO_ACCESS to multiple models we want to test
|
|
83
|
+
];
|
|
84
|
+
case 1:
|
|
85
|
+
testEnduser = _b.sent();
|
|
86
|
+
noAccessTestRole = 'no-access-test-role';
|
|
87
|
+
return [4 /*yield*/, sdk.api.role_based_access_permissions.createOne({
|
|
88
|
+
role: noAccessTestRole,
|
|
89
|
+
permissions: __assign(__assign({}, PROVIDER_PERMISSIONS), {
|
|
90
|
+
// Set NO_ACCESS for models we want to test
|
|
91
|
+
endusers: {
|
|
92
|
+
create: null,
|
|
93
|
+
read: null,
|
|
94
|
+
update: null,
|
|
95
|
+
delete: null,
|
|
96
|
+
}, inbox_threads: {
|
|
97
|
+
create: null,
|
|
98
|
+
read: null,
|
|
99
|
+
update: null,
|
|
100
|
+
delete: null,
|
|
101
|
+
}, templates: {
|
|
102
|
+
create: null,
|
|
103
|
+
read: null,
|
|
104
|
+
update: null,
|
|
105
|
+
delete: null,
|
|
106
|
+
}, waitlists: {
|
|
107
|
+
create: null,
|
|
108
|
+
read: null,
|
|
109
|
+
update: null,
|
|
110
|
+
delete: null,
|
|
111
|
+
}, background_errors: {
|
|
112
|
+
create: null,
|
|
113
|
+
read: null,
|
|
114
|
+
update: null,
|
|
115
|
+
delete: null,
|
|
116
|
+
} }),
|
|
117
|
+
})
|
|
118
|
+
// Save original role to restore later
|
|
119
|
+
];
|
|
120
|
+
case 2:
|
|
121
|
+
rbap = _b.sent();
|
|
122
|
+
originalRoles = sdkNonAdmin.userInfo.roles;
|
|
123
|
+
_b.label = 3;
|
|
124
|
+
case 3:
|
|
125
|
+
_b.trys.push([3, , 46, 52]);
|
|
126
|
+
// Assign the restricted role to non-admin user
|
|
127
|
+
return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [noAccessTestRole] }, { replaceObjectFields: true })];
|
|
128
|
+
case 4:
|
|
129
|
+
// Assign the restricted role to non-admin user
|
|
130
|
+
_b.sent();
|
|
131
|
+
return [4 /*yield*/, wait(undefined, 1500)]; // wait for role change to propagate
|
|
132
|
+
case 5:
|
|
133
|
+
_b.sent(); // wait for role change to propagate
|
|
134
|
+
return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)
|
|
135
|
+
// ========================================
|
|
136
|
+
// Test 1: /bulk-actions/read (HIGH PRIORITY)
|
|
137
|
+
// ========================================
|
|
138
|
+
];
|
|
139
|
+
case 6:
|
|
140
|
+
_b.sent();
|
|
141
|
+
// ========================================
|
|
142
|
+
// Test 1: /bulk-actions/read (HIGH PRIORITY)
|
|
143
|
+
// ========================================
|
|
144
|
+
log_header("Test 1: /bulk-actions/read with NO_ACCESS to endusers");
|
|
145
|
+
return [4 /*yield*/, async_test("bulk_load - should block NO_ACCESS user from reading endusers", function () { return sdkNonAdmin.bulk_load({
|
|
146
|
+
load: [{ model: 'endusers', options: { limit: 10 } }]
|
|
147
|
+
}); }, {
|
|
148
|
+
// If this returns records, it's a vulnerability
|
|
149
|
+
// If it returns empty records or errors, it's safe
|
|
150
|
+
onResult: function (r) {
|
|
151
|
+
var enduserResult = r.results[0];
|
|
152
|
+
if (enduserResult === null) {
|
|
153
|
+
console.log(" ✅ SAFE: bulk_load returned null for NO_ACCESS model");
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
if (enduserResult.records.length === 0) {
|
|
157
|
+
console.log(" ✅ SAFE: bulk_load returned empty records for NO_ACCESS model");
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
console.log(" \u274C VULNERABILITY: bulk_load returned ".concat(enduserResult.records.length, " records when user has NO_ACCESS!"));
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
})
|
|
164
|
+
// ========================================
|
|
165
|
+
// Test 2: inbox_threads/build_threads
|
|
166
|
+
// ========================================
|
|
167
|
+
];
|
|
168
|
+
case 7:
|
|
169
|
+
_b.sent();
|
|
170
|
+
// ========================================
|
|
171
|
+
// Test 2: inbox_threads/build_threads
|
|
172
|
+
// ========================================
|
|
173
|
+
log_header("Test 2: inbox_threads/build_threads with NO_ACCESS");
|
|
174
|
+
return [4 /*yield*/, async_test("build_threads - should block NO_ACCESS user", function () { return sdkNonAdmin.api.inbox_threads.build_threads({
|
|
175
|
+
from: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),
|
|
176
|
+
to: new Date(),
|
|
177
|
+
}); }, { shouldError: true, onError: function (e) { return e.message === "You do not have access to this resource"; } })
|
|
178
|
+
// ========================================
|
|
179
|
+
// Test 2b: inbox_threads/load_threads with NO_ACCESS
|
|
180
|
+
// ========================================
|
|
181
|
+
];
|
|
182
|
+
case 8:
|
|
183
|
+
_b.sent();
|
|
184
|
+
// ========================================
|
|
185
|
+
// Test 2b: inbox_threads/load_threads with NO_ACCESS
|
|
186
|
+
// ========================================
|
|
187
|
+
log_header("Test 2b: load_threads with NO_ACCESS");
|
|
188
|
+
return [4 /*yield*/, async_test("load_threads - should block NO_ACCESS user", function () { return sdkNonAdmin.api.inbox_threads.load_threads({ limit: 10 }); }, { shouldError: true, onError: function (e) { return e.message === "You do not have access to this resource"; } })
|
|
189
|
+
// ========================================
|
|
190
|
+
// Test 3a: get_templated_message - NO_ACCESS to templates
|
|
191
|
+
// ========================================
|
|
192
|
+
];
|
|
193
|
+
case 9:
|
|
194
|
+
_b.sent();
|
|
195
|
+
// ========================================
|
|
196
|
+
// Test 3a: get_templated_message - NO_ACCESS to templates
|
|
197
|
+
// ========================================
|
|
198
|
+
log_header("Test 3a: get_templated_message (templates NO_ACCESS)");
|
|
199
|
+
return [4 /*yield*/, async_test("get_templated_message - should block user with NO_ACCESS to templates", function () { return sdkNonAdmin.api.templates.get_templated_message({
|
|
200
|
+
message: "Hello {{enduser.fname}}!",
|
|
201
|
+
userId: sdkNonAdmin.userInfo.id,
|
|
202
|
+
enduserId: testEnduser.id,
|
|
203
|
+
channel: 'Email',
|
|
204
|
+
}); }, { shouldError: true, onError: function (e) { return e.message === "You do not have access to this resource"; } })
|
|
205
|
+
// ========================================
|
|
206
|
+
// Test 3b: get_templated_message - NO_ACCESS to endusers (PHI leak prevention)
|
|
207
|
+
// ========================================
|
|
208
|
+
];
|
|
209
|
+
case 10:
|
|
210
|
+
_b.sent();
|
|
211
|
+
// ========================================
|
|
212
|
+
// Test 3b: get_templated_message - NO_ACCESS to endusers (PHI leak prevention)
|
|
213
|
+
// ========================================
|
|
214
|
+
log_header("Test 3b: get_templated_message (endusers NO_ACCESS)");
|
|
215
|
+
templatesOnlyRole = 'templates-only-test-role';
|
|
216
|
+
return [4 /*yield*/, sdk.api.role_based_access_permissions.createOne({
|
|
217
|
+
role: templatesOnlyRole,
|
|
218
|
+
permissions: __assign(__assign({}, PROVIDER_PERMISSIONS), {
|
|
219
|
+
// Allow templates access
|
|
220
|
+
templates: {
|
|
221
|
+
create: 'All',
|
|
222
|
+
read: 'All',
|
|
223
|
+
update: 'All',
|
|
224
|
+
delete: 'All',
|
|
225
|
+
},
|
|
226
|
+
// But NO_ACCESS to endusers
|
|
227
|
+
endusers: {
|
|
228
|
+
create: null,
|
|
229
|
+
read: null,
|
|
230
|
+
update: null,
|
|
231
|
+
delete: null,
|
|
232
|
+
} }),
|
|
233
|
+
})];
|
|
234
|
+
case 11:
|
|
235
|
+
rbapTemplatesOnly = _b.sent();
|
|
236
|
+
_b.label = 12;
|
|
237
|
+
case 12:
|
|
238
|
+
_b.trys.push([12, , 17, 22]);
|
|
239
|
+
// Temporarily assign the templates-only role
|
|
240
|
+
return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [templatesOnlyRole] }, { replaceObjectFields: true })];
|
|
241
|
+
case 13:
|
|
242
|
+
// Temporarily assign the templates-only role
|
|
243
|
+
_b.sent();
|
|
244
|
+
return [4 /*yield*/, wait(undefined, 1500)];
|
|
245
|
+
case 14:
|
|
246
|
+
_b.sent();
|
|
247
|
+
return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)];
|
|
248
|
+
case 15:
|
|
249
|
+
_b.sent();
|
|
250
|
+
return [4 /*yield*/, async_test("get_templated_message - should block user with NO_ACCESS to endusers (prevents PHI leak)", function () { return sdkNonAdmin.api.templates.get_templated_message({
|
|
251
|
+
message: "Hello {{enduser.fname}} {{enduser.lname}} {{enduser.email}}!",
|
|
252
|
+
userId: sdkNonAdmin.userInfo.id,
|
|
253
|
+
enduserId: testEnduser.id,
|
|
254
|
+
channel: 'Email',
|
|
255
|
+
}); }, { shouldError: true, onError: function (e) { return e.message === "You do not have access to this resource"; } })];
|
|
256
|
+
case 16:
|
|
257
|
+
_b.sent();
|
|
258
|
+
return [3 /*break*/, 22];
|
|
259
|
+
case 17:
|
|
260
|
+
// Restore the original test role
|
|
261
|
+
return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [noAccessTestRole] }, { replaceObjectFields: true })];
|
|
262
|
+
case 18:
|
|
263
|
+
// Restore the original test role
|
|
264
|
+
_b.sent();
|
|
265
|
+
return [4 /*yield*/, wait(undefined, 1000)];
|
|
266
|
+
case 19:
|
|
267
|
+
_b.sent();
|
|
268
|
+
return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)
|
|
269
|
+
// Cleanup the templates-only role
|
|
270
|
+
];
|
|
271
|
+
case 20:
|
|
272
|
+
_b.sent();
|
|
273
|
+
// Cleanup the templates-only role
|
|
274
|
+
return [4 /*yield*/, sdk.api.role_based_access_permissions.deleteOne(rbapTemplatesOnly.id)];
|
|
275
|
+
case 21:
|
|
276
|
+
// Cleanup the templates-only role
|
|
277
|
+
_b.sent();
|
|
278
|
+
return [7 /*endfinally*/];
|
|
279
|
+
case 22:
|
|
280
|
+
// ========================================
|
|
281
|
+
// Test 4: waitlists/grant_access_from_waitlist
|
|
282
|
+
// ========================================
|
|
283
|
+
log_header("Test 4: waitlists/grant_access_from_waitlist with NO_ACCESS");
|
|
284
|
+
return [4 /*yield*/, sdk.api.journeys.createOne({
|
|
285
|
+
title: 'Waitlist Test Journey',
|
|
286
|
+
})];
|
|
287
|
+
case 23:
|
|
288
|
+
testJourney = _b.sent();
|
|
289
|
+
return [4 /*yield*/, sdk.api.waitlists.createOne({
|
|
290
|
+
title: 'Test Waitlist',
|
|
291
|
+
journeyId: testJourney.id,
|
|
292
|
+
enduserIds: [],
|
|
293
|
+
})];
|
|
294
|
+
case 24:
|
|
295
|
+
waitlistEntry_1 = _b.sent();
|
|
296
|
+
_b.label = 25;
|
|
297
|
+
case 25:
|
|
298
|
+
_b.trys.push([25, , 27, 30]);
|
|
299
|
+
return [4 /*yield*/, async_test("grant_access_from_waitlist - should block NO_ACCESS user", function () { return sdkNonAdmin.api.waitlists.grant_access_from_waitlist({
|
|
300
|
+
id: waitlistEntry_1.id,
|
|
301
|
+
count: 1,
|
|
302
|
+
}); }, { shouldError: true, onError: function (e) { return e.message === "You do not have access to this resource"; } })];
|
|
303
|
+
case 26:
|
|
304
|
+
_b.sent();
|
|
305
|
+
return [3 /*break*/, 30];
|
|
306
|
+
case 27:
|
|
307
|
+
// Cleanup
|
|
308
|
+
return [4 /*yield*/, sdk.api.waitlists.deleteOne(waitlistEntry_1.id)];
|
|
309
|
+
case 28:
|
|
310
|
+
// Cleanup
|
|
311
|
+
_b.sent();
|
|
312
|
+
return [4 /*yield*/, sdk.api.journeys.deleteOne(testJourney.id)];
|
|
313
|
+
case 29:
|
|
314
|
+
_b.sent();
|
|
315
|
+
return [7 /*endfinally*/];
|
|
316
|
+
case 30:
|
|
317
|
+
// ========================================
|
|
318
|
+
// Test 5: background_errors/mark_read
|
|
319
|
+
// ========================================
|
|
320
|
+
log_header("Test 5: background_errors/mark_read with NO_ACCESS");
|
|
321
|
+
return [4 /*yield*/, async_test("mark_read (background_errors) - should block NO_ACCESS user", function () { return sdkNonAdmin.api.background_errors.mark_read({}); }, { shouldError: true, onError: function (e) { return e.message === "You do not have access to this resource"; } })
|
|
322
|
+
// ========================================
|
|
323
|
+
// Test 6: load_threads searchKeywords redaction
|
|
324
|
+
// ========================================
|
|
325
|
+
];
|
|
326
|
+
case 31:
|
|
327
|
+
_b.sent();
|
|
328
|
+
// ========================================
|
|
329
|
+
// Test 6: load_threads searchKeywords redaction
|
|
330
|
+
// ========================================
|
|
331
|
+
log_header("Test 6: load_threads searchKeywords redaction");
|
|
332
|
+
assignedEnduserRole = 'assigned-enduser-test-role';
|
|
333
|
+
return [4 /*yield*/, sdk.api.role_based_access_permissions.createOne({
|
|
334
|
+
role: assignedEnduserRole,
|
|
335
|
+
permissions: __assign(__assign({}, PROVIDER_PERMISSIONS), { endusers: { create: 'All', read: 'Assigned', update: 'Assigned', delete: 'Assigned' }, emails: { create: 'All', read: 'All', update: 'All', delete: 'All' }, sms_messages: { create: 'All', read: 'All', update: 'All', delete: 'All' }, inbox_threads: { create: 'All', read: 'All', update: 'All', delete: 'All' } }),
|
|
336
|
+
})];
|
|
337
|
+
case 32:
|
|
338
|
+
rbapAssigned = _b.sent();
|
|
339
|
+
_b.label = 33;
|
|
340
|
+
case 33:
|
|
341
|
+
_b.trys.push([33, , 39, 44]);
|
|
342
|
+
return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [assignedEnduserRole] }, { replaceObjectFields: true })];
|
|
343
|
+
case 34:
|
|
344
|
+
_b.sent();
|
|
345
|
+
return [4 /*yield*/, wait(undefined, 1500)];
|
|
346
|
+
case 35:
|
|
347
|
+
_b.sent();
|
|
348
|
+
return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)
|
|
349
|
+
// Load threads and verify searchKeywords is redacted for Assigned enduser access
|
|
350
|
+
];
|
|
351
|
+
case 36:
|
|
352
|
+
_b.sent();
|
|
353
|
+
return [4 /*yield*/, sdkNonAdmin.api.inbox_threads.load_threads({ limit: 10 })];
|
|
354
|
+
case 37:
|
|
355
|
+
resultAssigned_1 = _b.sent();
|
|
356
|
+
return [4 /*yield*/, async_test("load_threads - searchKeywords redacted for Assigned enduser access", function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
357
|
+
return [2 /*return*/, resultAssigned_1];
|
|
358
|
+
}); }); }, {
|
|
359
|
+
onResult: function (r) {
|
|
360
|
+
// All threads should have searchKeywords undefined/missing
|
|
361
|
+
var allRedacted = r.threads.every(function (t) { return t.searchKeywords === undefined; });
|
|
362
|
+
if (!allRedacted) {
|
|
363
|
+
console.log(" ❌ VULNERABILITY: searchKeywords visible to user with Assigned enduser access!");
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
console.log(" ✅ SAFE: searchKeywords properly redacted");
|
|
367
|
+
}
|
|
368
|
+
return allRedacted;
|
|
369
|
+
}
|
|
370
|
+
})];
|
|
371
|
+
case 38:
|
|
372
|
+
_b.sent();
|
|
373
|
+
return [3 /*break*/, 44];
|
|
374
|
+
case 39:
|
|
375
|
+
// Restore the original test role
|
|
376
|
+
return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [noAccessTestRole] }, { replaceObjectFields: true })];
|
|
377
|
+
case 40:
|
|
378
|
+
// Restore the original test role
|
|
379
|
+
_b.sent();
|
|
380
|
+
return [4 /*yield*/, wait(undefined, 1000)];
|
|
381
|
+
case 41:
|
|
382
|
+
_b.sent();
|
|
383
|
+
return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)
|
|
384
|
+
// Cleanup the assigned role
|
|
385
|
+
];
|
|
386
|
+
case 42:
|
|
387
|
+
_b.sent();
|
|
388
|
+
// Cleanup the assigned role
|
|
389
|
+
return [4 /*yield*/, sdk.api.role_based_access_permissions.deleteOne(rbapAssigned.id)];
|
|
390
|
+
case 43:
|
|
391
|
+
// Cleanup the assigned role
|
|
392
|
+
_b.sent();
|
|
393
|
+
return [7 /*endfinally*/];
|
|
394
|
+
case 44:
|
|
395
|
+
// Test that admin/full access users CAN see searchKeywords
|
|
396
|
+
return [4 /*yield*/, async_test("load_threads - searchKeywords visible for admin/full enduser access", function () { return sdk.api.inbox_threads.load_threads({ limit: 10 }); }, {
|
|
397
|
+
onResult: function (r) {
|
|
398
|
+
// Skip check if no threads exist (can't verify without data)
|
|
399
|
+
if (r.threads.length === 0) {
|
|
400
|
+
console.log(" ⏭️ SKIPPED: No threads exist to verify searchKeywords visibility");
|
|
401
|
+
return true;
|
|
402
|
+
}
|
|
403
|
+
// At least some threads should have searchKeywords
|
|
404
|
+
var hasSearchKeywords = r.threads.some(function (t) { return t.searchKeywords !== undefined; });
|
|
405
|
+
if (hasSearchKeywords) {
|
|
406
|
+
console.log(" ✅ Admin can see searchKeywords");
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
console.log(" ⚠️ No searchKeywords found on threads (may not have been built yet)");
|
|
410
|
+
}
|
|
411
|
+
return true; // Don't fail if keywords don't exist yet
|
|
412
|
+
}
|
|
413
|
+
})];
|
|
414
|
+
case 45:
|
|
415
|
+
// Test that admin/full access users CAN see searchKeywords
|
|
416
|
+
_b.sent();
|
|
417
|
+
console.log("\n" + "=".repeat(60));
|
|
418
|
+
console.log("NO_ACCESS Permission Checks Tests Complete");
|
|
419
|
+
console.log("=".repeat(60));
|
|
420
|
+
return [3 /*break*/, 52];
|
|
421
|
+
case 46:
|
|
422
|
+
// Restore original role
|
|
423
|
+
return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: originalRoles }, { replaceObjectFields: true })];
|
|
424
|
+
case 47:
|
|
425
|
+
// Restore original role
|
|
426
|
+
_b.sent();
|
|
427
|
+
return [4 /*yield*/, wait(undefined, 1000)];
|
|
428
|
+
case 48:
|
|
429
|
+
_b.sent();
|
|
430
|
+
return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)
|
|
431
|
+
// Cleanup
|
|
432
|
+
];
|
|
433
|
+
case 49:
|
|
434
|
+
_b.sent();
|
|
435
|
+
// Cleanup
|
|
436
|
+
return [4 /*yield*/, sdk.api.role_based_access_permissions.deleteOne(rbap.id)];
|
|
437
|
+
case 50:
|
|
438
|
+
// Cleanup
|
|
439
|
+
_b.sent();
|
|
440
|
+
return [4 /*yield*/, sdk.api.endusers.deleteOne(testEnduser.id)];
|
|
441
|
+
case 51:
|
|
442
|
+
_b.sent();
|
|
443
|
+
return [7 /*endfinally*/];
|
|
444
|
+
case 52: return [2 /*return*/];
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
});
|
|
448
|
+
};
|
|
449
|
+
// Allow running this test file independently
|
|
450
|
+
if (require.main === module) {
|
|
451
|
+
console.log("\uD83C\uDF10 Using API URL: ".concat(host));
|
|
452
|
+
var sdk_1 = new Session({ host: host });
|
|
453
|
+
var sdkNonAdmin_1 = new Session({ host: host });
|
|
454
|
+
var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
455
|
+
return __generator(this, function (_a) {
|
|
456
|
+
switch (_a.label) {
|
|
457
|
+
case 0: return [4 /*yield*/, setup_tests(sdk_1, sdkNonAdmin_1)];
|
|
458
|
+
case 1:
|
|
459
|
+
_a.sent();
|
|
460
|
+
return [4 /*yield*/, no_access_permission_checks_tests({ sdk: sdk_1, sdkNonAdmin: sdkNonAdmin_1 })];
|
|
461
|
+
case 2:
|
|
462
|
+
_a.sent();
|
|
463
|
+
return [2 /*return*/];
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
}); };
|
|
467
|
+
runTests()
|
|
468
|
+
.then(function () {
|
|
469
|
+
console.log("✅ NO_ACCESS permission checks test suite completed successfully");
|
|
470
|
+
process.exit(0);
|
|
471
|
+
})
|
|
472
|
+
.catch(function (error) {
|
|
473
|
+
console.error("❌ NO_ACCESS permission checks test suite failed:", error);
|
|
474
|
+
process.exit(1);
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
//# sourceMappingURL=no_access_permission_checks.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no_access_permission_checks.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/no_access_permission_checks.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EACL,UAAU,EACV,UAAU,EACV,IAAI,GACL,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAE5D,IAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,uBAAgC,CAAA;AAC9D,IAAA,KAAoC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAhG,aAAa,QAAA,EAAE,gBAAgB,QAAiE,CAAA;AAEvG;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,IAAM,iCAAiC,GAAG,UAAO,EAA6D;QAA3D,GAAG,SAAA,EAAE,WAAW,iBAAA;;;;;;oBACxE,UAAU,CAAC,mCAAmC,CAAC,CAAA;oBAG3B,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;4BACnD,KAAK,EAAE,cAAc;4BACrB,KAAK,EAAE,MAAM;4BACb,KAAK,EAAE,4BAA4B;yBACpC,CAAC;wBAEF,kEAAkE;sBAFhE;;oBAJI,WAAW,GAAG,SAIlB;oBAGI,gBAAgB,GAAG,qBAAqB,CAAA;oBACjC,qBAAM,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,SAAS,CAAC;4BACjE,IAAI,EAAE,gBAAgB;4BACtB,WAAW,wBACN,oBAAoB;gCACvB,2CAA2C;gCAC3C,QAAQ,EAAE;oCACR,MAAM,EAAE,IAAI;oCACZ,IAAI,EAAE,IAAI;oCACV,MAAM,EAAE,IAAI;oCACZ,MAAM,EAAE,IAAI;iCACb,EACD,aAAa,EAAE;oCACb,MAAM,EAAE,IAAI;oCACZ,IAAI,EAAE,IAAI;oCACV,MAAM,EAAE,IAAI;oCACZ,MAAM,EAAE,IAAI;iCACb,EACD,SAAS,EAAE;oCACT,MAAM,EAAE,IAAI;oCACZ,IAAI,EAAE,IAAI;oCACV,MAAM,EAAE,IAAI;oCACZ,MAAM,EAAE,IAAI;iCACb,EACD,SAAS,EAAE;oCACT,MAAM,EAAE,IAAI;oCACZ,IAAI,EAAE,IAAI;oCACV,MAAM,EAAE,IAAI;oCACZ,MAAM,EAAE,IAAI;iCACb,EACD,iBAAiB,EAAE;oCACjB,MAAM,EAAE,IAAI;oCACZ,IAAI,EAAE,IAAI;oCACV,MAAM,EAAE,IAAI;oCACZ,MAAM,EAAE,IAAI;iCACb,GACF;yBACF,CAAC;wBAEF,sCAAsC;sBAFpC;;oBApCI,IAAI,GAAG,SAoCX;oBAGI,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAA;;;;oBAG9C,+CAA+C;oBAC/C,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAA;;oBADpH,+CAA+C;oBAC/C,SAAoH,CAAA;oBACpH,qBAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAA,CAAC,oCAAoC;;oBAAhE,SAA2B,CAAA,CAAC,oCAAoC;oBAChE,qBAAM,WAAW,CAAC,YAAY,CAAC,aAAc,EAAE,gBAAiB,CAAC;wBAEjE,2CAA2C;wBAC3C,6CAA6C;wBAC7C,2CAA2C;sBAJsB;;oBAAjE,SAAiE,CAAA;oBAEjE,2CAA2C;oBAC3C,6CAA6C;oBAC7C,2CAA2C;oBAC3C,UAAU,CAAC,uDAAuD,CAAC,CAAA;oBAEnE,qBAAM,UAAU,CACd,+DAA+D,EAC/D,cAAM,OAAA,WAAW,CAAC,SAAS,CAAC;4BAC1B,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,UAAiB,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;yBAC7D,CAAC,EAFI,CAEJ,EACF;4BACE,gDAAgD;4BAChD,mDAAmD;4BACnD,QAAQ,EAAE,UAAA,CAAC;gCACT,IAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gCAClC,IAAI,aAAa,KAAK,IAAI,EAAE;oCAC1B,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAA;oCACpE,OAAO,IAAI,CAAA;iCACZ;gCACD,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;oCACtC,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAA;oCAC7E,OAAO,IAAI,CAAA;iCACZ;gCACD,OAAO,CAAC,GAAG,CAAC,qDAAyC,aAAa,CAAC,OAAO,CAAC,MAAM,sCAAmC,CAAC,CAAA;gCACrH,OAAO,KAAK,CAAA;4BACd,CAAC;yBACF,CACF;wBAED,2CAA2C;wBAC3C,sCAAsC;wBACtC,2CAA2C;sBAJ1C;;oBAtBD,SAsBC,CAAA;oBAED,2CAA2C;oBAC3C,sCAAsC;oBACtC,2CAA2C;oBAC3C,UAAU,CAAC,oDAAoD,CAAC,CAAA;oBAEhE,qBAAM,UAAU,CACd,6CAA6C,EAC7C,cAAM,OAAA,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC;4BAChD,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;4BACpD,EAAE,EAAE,IAAI,IAAI,EAAE;yBACf,CAAC,EAHI,CAGJ,EACF,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,yCAAyC,EAAvD,CAAuD,EAAE,CACpG;wBAED,2CAA2C;wBAC3C,qDAAqD;wBACrD,2CAA2C;sBAJ1C;;oBAPD,SAOC,CAAA;oBAED,2CAA2C;oBAC3C,qDAAqD;oBACrD,2CAA2C;oBAC3C,UAAU,CAAC,sCAAsC,CAAC,CAAA;oBAElD,qBAAM,UAAU,CACd,4CAA4C,EAC5C,cAAM,OAAA,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAzD,CAAyD,EAC/D,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,yCAAyC,EAAvD,CAAuD,EAAE,CACpG;wBAED,2CAA2C;wBAC3C,0DAA0D;wBAC1D,2CAA2C;sBAJ1C;;oBAJD,SAIC,CAAA;oBAED,2CAA2C;oBAC3C,0DAA0D;oBAC1D,2CAA2C;oBAC3C,UAAU,CAAC,sDAAsD,CAAC,CAAA;oBAElE,qBAAM,UAAU,CACd,uEAAuE,EACvE,cAAM,OAAA,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,qBAAqB,CAAC;4BACpD,OAAO,EAAE,0BAA0B;4BACnC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE;4BAC/B,SAAS,EAAE,WAAW,CAAC,EAAE;4BACzB,OAAO,EAAE,OAAO;yBACjB,CAAC,EALI,CAKJ,EACF,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,yCAAyC,EAAvD,CAAuD,EAAE,CACpG;wBAED,2CAA2C;wBAC3C,+EAA+E;wBAC/E,2CAA2C;sBAJ1C;;oBATD,SASC,CAAA;oBAED,2CAA2C;oBAC3C,+EAA+E;oBAC/E,2CAA2C;oBAC3C,UAAU,CAAC,qDAAqD,CAAC,CAAA;oBAG3D,iBAAiB,GAAG,0BAA0B,CAAA;oBAC1B,qBAAM,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,SAAS,CAAC;4BAC9E,IAAI,EAAE,iBAAiB;4BACvB,WAAW,wBACN,oBAAoB;gCACvB,yBAAyB;gCACzB,SAAS,EAAE;oCACT,MAAM,EAAE,KAAK;oCACb,IAAI,EAAE,KAAK;oCACX,MAAM,EAAE,KAAK;oCACb,MAAM,EAAE,KAAK;iCACd;gCACD,4BAA4B;gCAC5B,QAAQ,EAAE;oCACR,MAAM,EAAE,IAAI;oCACZ,IAAI,EAAE,IAAI;oCACV,MAAM,EAAE,IAAI;oCACZ,MAAM,EAAE,IAAI;iCACb,GACF;yBACF,CAAC,EAAA;;oBAnBI,iBAAiB,GAAG,SAmBxB;;;;oBAGA,6CAA6C;oBAC7C,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAA;;oBADrH,6CAA6C;oBAC7C,SAAqH,CAAA;oBACrH,qBAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAA;;oBAA3B,SAA2B,CAAA;oBAC3B,qBAAM,WAAW,CAAC,YAAY,CAAC,aAAc,EAAE,gBAAiB,CAAC,EAAA;;oBAAjE,SAAiE,CAAA;oBAEjE,qBAAM,UAAU,CACd,0FAA0F,EAC1F,cAAM,OAAA,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,qBAAqB,CAAC;4BACpD,OAAO,EAAE,8DAA8D;4BACvE,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE;4BAC/B,SAAS,EAAE,WAAW,CAAC,EAAE;4BACzB,OAAO,EAAE,OAAO;yBACjB,CAAC,EALI,CAKJ,EACF,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,yCAAyC,EAAvD,CAAuD,EAAE,CACpG,EAAA;;oBATD,SASC,CAAA;;;gBAED,iCAAiC;gBACjC,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAA;;oBADpH,iCAAiC;oBACjC,SAAoH,CAAA;oBACpH,qBAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAA;;oBAA3B,SAA2B,CAAA;oBAC3B,qBAAM,WAAW,CAAC,YAAY,CAAC,aAAc,EAAE,gBAAiB,CAAC;wBAEjE,kCAAkC;sBAF+B;;oBAAjE,SAAiE,CAAA;oBAEjE,kCAAkC;oBAClC,qBAAM,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAA;;oBAD3E,kCAAkC;oBAClC,SAA2E,CAAA;;;oBAG7E,2CAA2C;oBAC3C,+CAA+C;oBAC/C,2CAA2C;oBAC3C,UAAU,CAAC,6DAA6D,CAAC,CAAA;oBAGrD,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;4BACnD,KAAK,EAAE,uBAAuB;yBAC/B,CAAC,EAAA;;oBAFI,WAAW,GAAG,SAElB;oBAEoB,qBAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC;4BACtD,KAAK,EAAE,eAAe;4BACtB,SAAS,EAAE,WAAW,CAAC,EAAE;4BACzB,UAAU,EAAE,EAAE;yBACf,CAAC,EAAA;;oBAJI,kBAAgB,SAIpB;;;;oBAGA,qBAAM,UAAU,CACd,0DAA0D,EAC1D,cAAM,OAAA,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,0BAA0B,CAAC;4BACzD,EAAE,EAAE,eAAa,CAAC,EAAE;4BACpB,KAAK,EAAE,CAAC;yBACT,CAAC,EAHI,CAGJ,EACF,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,yCAAyC,EAAvD,CAAuD,EAAE,CACpG,EAAA;;oBAPD,SAOC,CAAA;;;gBAED,UAAU;gBACV,qBAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,eAAa,CAAC,EAAE,CAAC,EAAA;;oBADnD,UAAU;oBACV,SAAmD,CAAA;oBACnD,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,EAAA;;oBAAhD,SAAgD,CAAA;;;oBAGlD,2CAA2C;oBAC3C,sCAAsC;oBACtC,2CAA2C;oBAC3C,UAAU,CAAC,oDAAoD,CAAC,CAAA;oBAEhE,qBAAM,UAAU,CACd,6DAA6D,EAC7D,cAAM,OAAA,WAAW,CAAC,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,EAA/C,CAA+C,EACrD,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,yCAAyC,EAAvD,CAAuD,EAAE,CACpG;wBAED,2CAA2C;wBAC3C,gDAAgD;wBAChD,2CAA2C;sBAJ1C;;oBAJD,SAIC,CAAA;oBAED,2CAA2C;oBAC3C,gDAAgD;oBAChD,2CAA2C;oBAC3C,UAAU,CAAC,+CAA+C,CAAC,CAAA;oBAGrD,mBAAmB,GAAG,4BAA4B,CAAA;oBACnC,qBAAM,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,SAAS,CAAC;4BACzE,IAAI,EAAE,mBAAmB;4BACzB,WAAW,wBACN,oBAAoB,KACvB,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,EACrF,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EACpE,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAC1E,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAC5E;yBACF,CAAC,EAAA;;oBATI,YAAY,GAAG,SASnB;;;;oBAGA,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAA;;oBAAvH,SAAuH,CAAA;oBACvH,qBAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAA;;oBAA3B,SAA2B,CAAA;oBAC3B,qBAAM,WAAW,CAAC,YAAY,CAAC,aAAc,EAAE,gBAAiB,CAAC;wBAEjE,iFAAiF;sBAFhB;;oBAAjE,SAAiE,CAAA;oBAG1C,qBAAM,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAA;;oBAAhF,mBAAiB,SAA+D;oBAEtF,qBAAM,UAAU,CACd,oEAAoE,EACpE;4BAAY,sBAAA,gBAAc,EAAA;iCAAA,EAC1B;4BACE,QAAQ,EAAE,UAAA,CAAC;gCACT,2DAA2D;gCAC3D,IAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,cAAc,KAAK,SAAS,EAA9B,CAA8B,CAAC,CAAA;gCAC/E,IAAI,CAAC,WAAW,EAAE;oCAChB,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAA;iCAC/F;qCAAM;oCACL,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAA;iCAC1D;gCACD,OAAO,WAAW,CAAA;4BACpB,CAAC;yBACF,CACF,EAAA;;oBAfD,SAeC,CAAA;;;gBAED,iCAAiC;gBACjC,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAA;;oBADpH,iCAAiC;oBACjC,SAAoH,CAAA;oBACpH,qBAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAA;;oBAA3B,SAA2B,CAAA;oBAC3B,qBAAM,WAAW,CAAC,YAAY,CAAC,aAAc,EAAE,gBAAiB,CAAC;wBAEjE,4BAA4B;sBAFqC;;oBAAjE,SAAiE,CAAA;oBAEjE,4BAA4B;oBAC5B,qBAAM,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,EAAA;;oBADtE,4BAA4B;oBAC5B,SAAsE,CAAA;;;gBAGxE,2DAA2D;gBAC3D,qBAAM,UAAU,CACd,qEAAqE,EACrE,cAAM,OAAA,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAjD,CAAiD,EACvD;wBACE,QAAQ,EAAE,UAAA,CAAC;4BACT,6DAA6D;4BAC7D,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gCAC1B,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAA;gCACjF,OAAO,IAAI,CAAA;6BACZ;4BACD,mDAAmD;4BACnD,IAAM,iBAAiB,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,cAAc,KAAK,SAAS,EAA9B,CAA8B,CAAC,CAAA;4BACpF,IAAI,iBAAiB,EAAE;gCACrB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;6BAChD;iCAAM;gCACL,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAA;6BACrF;4BACD,OAAO,IAAI,CAAA,CAAC,yCAAyC;wBACvD,CAAC;qBACF,CACF,EAAA;;oBArBD,2DAA2D;oBAC3D,SAoBC,CAAA;oBAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;oBAClC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAA;oBACzD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;;;gBAG3B,wBAAwB;gBACxB,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAA;;oBAD/G,wBAAwB;oBACxB,SAA+G,CAAA;oBAC/G,qBAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAA;;oBAA3B,SAA2B,CAAA;oBAC3B,qBAAM,WAAW,CAAC,YAAY,CAAC,aAAc,EAAE,gBAAiB,CAAC;wBAEjE,UAAU;sBAFuD;;oBAAjE,SAAiE,CAAA;oBAEjE,UAAU;oBACV,qBAAM,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAA;;oBAD9D,UAAU;oBACV,SAA8D,CAAA;oBAC9D,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,EAAA;;oBAAhD,SAAgD,CAAA;;;;;;CAEnD,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,iCAAiC,CAAC,EAAE,GAAG,OAAA,EAAE,WAAW,eAAA,EAAE,CAAC,EAAA;;oBAA7D,SAA6D,CAAA;;;;SAC9D,CAAA;IAED,QAAQ,EAAE;SACP,IAAI,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAA;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC;SACD,KAAK,CAAC,UAAC,KAAK;QACX,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAA;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;CACL"}
|
|
@@ -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":"AAwvEA,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;AA8qED,eAAO,MAAM,cAAc,qBAqC1B,CAAA;AAgnBD,eAAO,MAAM,0BAA0B,qBAmFtC,CAAA;AAqED,eAAO,MAAM,eAAe,qBAmD3B,CAAA;AAED,eAAO,MAAM,oBAAoB,6BAsBhC,CAAA;AAED,eAAO,MAAM,oCAAoC,qBAylBhD,CAAA;AAED,eAAO,MAAM,mCAAmC,qBAkE/C,CAAA;AAm7CD,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,mCA2C5C,CAAA;AAED,eAAO,MAAM,cAAc,qBAyZ1B,CAAA;AAGD,eAAO,MAAM,oBAAoB,uBAuBhC,CAAA;AA4wBD,eAAO,MAAM,4BAA4B,qBAoExC,CAAA;AAED,eAAO,MAAM,+BAA+B,qBA4U3C,CAAA;AAED,eAAO,MAAM,gDAAgD,qBAwC5D,CAAA;AAED,eAAO,MAAM,qBAAqB,qBAwIjC,CAAA"}
|