@tellescope/sdk 1.253.1 → 1.254.1
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 +4 -0
- package/lib/cjs/sdk.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/_tmp_bc_verify.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/_tmp_blank_status_verify.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/_tmp_followup_verify.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/_tmp_nonmatch_verify.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.d.ts +16 -0
- package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.js +187 -0
- package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/field_redaction.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/field_redaction.test.js +112 -99
- package/lib/cjs/tests/api_tests/field_redaction.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/journey_error_branching.test.js +7 -2
- package/lib/cjs/tests/api_tests/journey_error_branching.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/mdi_case_offerings.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/mdi_case_offerings.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/mdi_case_offerings.test.js +443 -0
- package/lib/cjs/tests/api_tests/mdi_case_offerings.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/resource_access_tags.test.d.ts +22 -0
- package/lib/cjs/tests/api_tests/resource_access_tags.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/resource_access_tags.test.js +488 -0
- package/lib/cjs/tests/api_tests/resource_access_tags.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts +21 -0
- package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js +362 -0
- package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts +20 -0
- package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.js +139 -0
- package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts +18 -0
- package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.js +156 -0
- package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts +20 -0
- package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.js +157 -0
- package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/time_tracks.test.d.ts +8 -0
- package/lib/cjs/tests/api_tests/time_tracks.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/time_tracks.test.js +638 -1
- package/lib/cjs/tests/api_tests/time_tracks.test.js.map +1 -1
- package/lib/cjs/tests/setup.d.ts.map +1 -1
- package/lib/cjs/tests/setup.js +20 -1
- package/lib/cjs/tests/setup.js.map +1 -1
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +606 -178
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/sdk.d.ts +6 -2
- package/lib/esm/sdk.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/_tmp_bc_verify.test.d.ts +2 -0
- package/lib/esm/tests/api_tests/_tmp_bc_verify.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_bc_verify.test.js +120 -0
- package/lib/esm/tests/api_tests/_tmp_bc_verify.test.js.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_blank_status_verify.test.d.ts +2 -0
- package/lib/esm/tests/api_tests/_tmp_blank_status_verify.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_blank_status_verify.test.js +200 -0
- package/lib/esm/tests/api_tests/_tmp_blank_status_verify.test.js.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_followup_verify.test.d.ts +2 -0
- package/lib/esm/tests/api_tests/_tmp_followup_verify.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_followup_verify.test.js +194 -0
- package/lib/esm/tests/api_tests/_tmp_followup_verify.test.js.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_nonmatch_verify.test.d.ts +2 -0
- package/lib/esm/tests/api_tests/_tmp_nonmatch_verify.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_nonmatch_verify.test.js +115 -0
- package/lib/esm/tests/api_tests/_tmp_nonmatch_verify.test.js.map +1 -0
- package/lib/esm/tests/api_tests/ai_decision_summary_config.test.d.ts +16 -0
- package/lib/esm/tests/api_tests/ai_decision_summary_config.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/ai_decision_summary_config.test.js +183 -0
- package/lib/esm/tests/api_tests/ai_decision_summary_config.test.js.map +1 -0
- package/lib/esm/tests/api_tests/field_redaction.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/field_redaction.test.js +112 -99
- package/lib/esm/tests/api_tests/field_redaction.test.js.map +1 -1
- package/lib/esm/tests/api_tests/journey_error_branching.test.js +7 -2
- package/lib/esm/tests/api_tests/journey_error_branching.test.js.map +1 -1
- package/lib/esm/tests/api_tests/mdi_case_offerings.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/mdi_case_offerings.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/mdi_case_offerings.test.js +439 -0
- package/lib/esm/tests/api_tests/mdi_case_offerings.test.js.map +1 -0
- package/lib/esm/tests/api_tests/resource_access_tags.test.d.ts +22 -0
- package/lib/esm/tests/api_tests/resource_access_tags.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/resource_access_tags.test.js +484 -0
- package/lib/esm/tests/api_tests/resource_access_tags.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts +21 -0
- package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js +358 -0
- package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts +20 -0
- package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.js +135 -0
- package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts +18 -0
- package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.js +152 -0
- package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts +20 -0
- package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.js +150 -0
- package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.js.map +1 -0
- package/lib/esm/tests/api_tests/time_tracks.test.d.ts +8 -0
- package/lib/esm/tests/api_tests/time_tracks.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/time_tracks.test.js +635 -0
- package/lib/esm/tests/api_tests/time_tracks.test.js.map +1 -1
- package/lib/esm/tests/setup.d.ts.map +1 -1
- package/lib/esm/tests/setup.js +20 -1
- package/lib/esm/tests/setup.js.map +1 -1
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +607 -179
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/tests/api_tests/field_redaction.test.ts +13 -0
- package/src/tests/api_tests/journey_error_branching.test.ts +5 -1
- package/src/tests/api_tests/mdi_case_offerings.test.ts +414 -0
- package/src/tests/api_tests/resource_access_tags.test.ts +303 -0
- package/src/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.ts +221 -0
- package/src/tests/api_tests/security/F-0145-globalunique-leak.test.ts +78 -0
- package/src/tests/api_tests/security/F-0151-load-inbox-redaction.test.ts +81 -0
- package/src/tests/api_tests/security/F-0155-webhook-timeout.test.ts +85 -0
- package/src/tests/api_tests/time_tracks.test.ts +420 -0
- package/src/tests/setup.ts +9 -0
- package/src/tests/tests.ts +308 -5
- package/test_generated.pdf +0 -0
|
@@ -0,0 +1,183 @@
|
|
|
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 { async_test, log_header, } from "@tellescope/testing";
|
|
40
|
+
import { setup_tests } from "../setup";
|
|
41
|
+
var host = process.env.API_URL || 'http://localhost:8080';
|
|
42
|
+
/**
|
|
43
|
+
* Exercises generate_ai_decision with the new `aiSummaryConfiguration` payload (CU-86e1h0j7f).
|
|
44
|
+
*
|
|
45
|
+
* The handler responds early with `{}` and then builds context + calls Bedrock in the background,
|
|
46
|
+
* so the deterministic, Bedrock-independent assertions here are:
|
|
47
|
+
* 1. A valid `aiSummaryConfiguration` payload is accepted (schema + validator wiring) → resolves.
|
|
48
|
+
* 2. The legacy `{ prompt, sources }` payload still validates (back-compat) → resolves.
|
|
49
|
+
* 3. A malformed `aiSummaryConfiguration` (invalid data source type) is rejected by the validator
|
|
50
|
+
* BEFORE the early response → throws.
|
|
51
|
+
*/
|
|
52
|
+
export var ai_decision_summary_config_tests = function (_a) {
|
|
53
|
+
var sdk = _a.sdk;
|
|
54
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
55
|
+
var enduser, journey, decisionStep;
|
|
56
|
+
return __generator(this, function (_b) {
|
|
57
|
+
switch (_b.label) {
|
|
58
|
+
case 0:
|
|
59
|
+
log_header("AI Decision — aiSummaryConfiguration payload");
|
|
60
|
+
return [4 /*yield*/, sdk.api.endusers.createOne({
|
|
61
|
+
fname: 'AIDecision',
|
|
62
|
+
lname: 'Config',
|
|
63
|
+
email: "ai-decision-config-".concat(Date.now(), "@example.com"),
|
|
64
|
+
})];
|
|
65
|
+
case 1:
|
|
66
|
+
enduser = _b.sent();
|
|
67
|
+
return [4 /*yield*/, sdk.api.journeys.createOne({ title: "AI Decision Config Journey ".concat(Date.now()) })
|
|
68
|
+
// a real aiDecision step using the new shared config shape
|
|
69
|
+
];
|
|
70
|
+
case 2:
|
|
71
|
+
journey = _b.sent();
|
|
72
|
+
return [4 /*yield*/, sdk.api.automation_steps.createOne({
|
|
73
|
+
journeyId: journey.id,
|
|
74
|
+
action: {
|
|
75
|
+
type: 'aiDecision',
|
|
76
|
+
info: {
|
|
77
|
+
outcomes: ['needs_followup', 'no_action'],
|
|
78
|
+
aiSummaryConfiguration: {
|
|
79
|
+
prompt: 'Decide whether the patient needs a follow-up based on recent activity.',
|
|
80
|
+
dataSources: [
|
|
81
|
+
{ type: 'sms_messages', limit: 5, lookbackMS: 30 * 24 * 60 * 60 * 1000 },
|
|
82
|
+
{ type: 'chats', limit: 5 },
|
|
83
|
+
{ type: 'form_responses', limit: 3 },
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
events: [{ type: 'onJourneyStart', info: {} }],
|
|
89
|
+
})];
|
|
90
|
+
case 3:
|
|
91
|
+
decisionStep = _b.sent();
|
|
92
|
+
_b.label = 4;
|
|
93
|
+
case 4:
|
|
94
|
+
_b.trys.push([4, , 8, 10]);
|
|
95
|
+
// 1. valid new-shape payload — handler accepts and returns early with {}
|
|
96
|
+
return [4 /*yield*/, async_test("generate_ai_decision accepts aiSummaryConfiguration payload", function () { return sdk.api.ai_conversations.generate_ai_decision({
|
|
97
|
+
enduserId: enduser.id,
|
|
98
|
+
automationStepId: decisionStep.id,
|
|
99
|
+
outcomes: ['needs_followup', 'no_action'],
|
|
100
|
+
aiSummaryConfiguration: {
|
|
101
|
+
prompt: 'Decide whether the patient needs a follow-up based on recent activity.',
|
|
102
|
+
dataSources: [
|
|
103
|
+
{ type: 'sms_messages', limit: 5, lookbackMS: 30 * 24 * 60 * 60 * 1000 },
|
|
104
|
+
{ type: 'chats', limit: 5 },
|
|
105
|
+
],
|
|
106
|
+
maxOutputTokens: 50,
|
|
107
|
+
},
|
|
108
|
+
}); }, { onResult: function () { return true; } })
|
|
109
|
+
// 2. legacy payload still validates (back-compat)
|
|
110
|
+
];
|
|
111
|
+
case 5:
|
|
112
|
+
// 1. valid new-shape payload — handler accepts and returns early with {}
|
|
113
|
+
_b.sent();
|
|
114
|
+
// 2. legacy payload still validates (back-compat)
|
|
115
|
+
return [4 /*yield*/, async_test("generate_ai_decision still accepts legacy prompt/sources payload", function () { return sdk.api.ai_conversations.generate_ai_decision({
|
|
116
|
+
enduserId: enduser.id,
|
|
117
|
+
automationStepId: decisionStep.id,
|
|
118
|
+
outcomes: ['needs_followup', 'no_action'],
|
|
119
|
+
prompt: 'Legacy decision prompt',
|
|
120
|
+
sources: [{ type: 'SMS', limit: 3 }],
|
|
121
|
+
}); }, { onResult: function () { return true; } })
|
|
122
|
+
// 3. malformed aiSummaryConfiguration (invalid data source type) rejected by the validator
|
|
123
|
+
];
|
|
124
|
+
case 6:
|
|
125
|
+
// 2. legacy payload still validates (back-compat)
|
|
126
|
+
_b.sent();
|
|
127
|
+
// 3. malformed aiSummaryConfiguration (invalid data source type) rejected by the validator
|
|
128
|
+
return [4 /*yield*/, async_test("generate_ai_decision rejects an invalid aiSummaryConfiguration data source", function () { return sdk.api.ai_conversations.generate_ai_decision({
|
|
129
|
+
enduserId: enduser.id,
|
|
130
|
+
automationStepId: decisionStep.id,
|
|
131
|
+
outcomes: ['needs_followup', 'no_action'],
|
|
132
|
+
aiSummaryConfiguration: {
|
|
133
|
+
prompt: 'bad config',
|
|
134
|
+
dataSources: [{ type: 'not_a_real_source', limit: 1 }],
|
|
135
|
+
},
|
|
136
|
+
}); }, { shouldError: true, onError: function () { return true; } })];
|
|
137
|
+
case 7:
|
|
138
|
+
// 3. malformed aiSummaryConfiguration (invalid data source type) rejected by the validator
|
|
139
|
+
_b.sent();
|
|
140
|
+
return [3 /*break*/, 10];
|
|
141
|
+
case 8: return [4 /*yield*/, Promise.all([
|
|
142
|
+
sdk.api.journeys.deleteOne(journey.id).catch(function () { }),
|
|
143
|
+
sdk.api.endusers.deleteOne(enduser.id).catch(function () { }),
|
|
144
|
+
])];
|
|
145
|
+
case 9:
|
|
146
|
+
_b.sent();
|
|
147
|
+
return [7 /*endfinally*/];
|
|
148
|
+
case 10:
|
|
149
|
+
console.log("✅ AI Decision aiSummaryConfiguration tests completed successfully");
|
|
150
|
+
return [2 /*return*/];
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
// Allow running this test file independently
|
|
156
|
+
if (require.main === module) {
|
|
157
|
+
console.log("\uD83C\uDF10 Using API URL: ".concat(host));
|
|
158
|
+
var sdk_1 = new Session({ host: host });
|
|
159
|
+
var sdkNonAdmin_1 = new Session({ host: host });
|
|
160
|
+
var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
161
|
+
return __generator(this, function (_a) {
|
|
162
|
+
switch (_a.label) {
|
|
163
|
+
case 0: return [4 /*yield*/, setup_tests(sdk_1, sdkNonAdmin_1)];
|
|
164
|
+
case 1:
|
|
165
|
+
_a.sent();
|
|
166
|
+
return [4 /*yield*/, ai_decision_summary_config_tests({ sdk: sdk_1, sdkNonAdmin: sdkNonAdmin_1 })];
|
|
167
|
+
case 2:
|
|
168
|
+
_a.sent();
|
|
169
|
+
return [2 /*return*/];
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}); };
|
|
173
|
+
runTests()
|
|
174
|
+
.then(function () {
|
|
175
|
+
console.log("✅ AI Decision aiSummaryConfiguration test suite completed successfully");
|
|
176
|
+
process.exit(0);
|
|
177
|
+
})
|
|
178
|
+
.catch(function (error) {
|
|
179
|
+
console.error("❌ AI Decision aiSummaryConfiguration test suite failed:", error);
|
|
180
|
+
process.exit(1);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=ai_decision_summary_config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai_decision_summary_config.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/ai_decision_summary_config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field_redaction.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/field_redaction.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqBnC;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB;SAAwC,OAAO;iBAAe,OAAO;
|
|
1
|
+
{"version":3,"file":"field_redaction.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/field_redaction.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqBnC;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB;SAAwC,OAAO;iBAAe,OAAO;mBAqnBtG,CAAA"}
|
|
@@ -79,7 +79,7 @@ var lacksFields = function (record, fields) {
|
|
|
79
79
|
export var field_redaction_tests = function (_a) {
|
|
80
80
|
var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
|
|
81
81
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
82
|
-
var testEnduser, testPhoneCall, FULL_ACCESS, fullRedactionRole, rbapFull, originalRoles, partialRedactionRole, rbapPartial, createdPhoneCallId_1, e_1, adminCreatedPhoneCallId_1, e_2, noRedactionRole, rbapNoRedaction, syncFrom_1, e_3, e_4, e_5;
|
|
82
|
+
var testEnduser, testPhoneCall, FULL_ACCESS, fullRedactionRole, ROLE_COLOR, ROLE_DESCRIPTION, rbapFull, originalRoles, partialRedactionRole, rbapPartial, createdPhoneCallId_1, e_1, adminCreatedPhoneCallId_1, e_2, noRedactionRole, rbapNoRedaction, syncFrom_1, e_3, e_4, e_5;
|
|
83
83
|
return __generator(this, function (_b) {
|
|
84
84
|
switch (_b.label) {
|
|
85
85
|
case 0:
|
|
@@ -110,33 +110,46 @@ export var field_redaction_tests = function (_a) {
|
|
|
110
110
|
testPhoneCall = _b.sent();
|
|
111
111
|
FULL_ACCESS = { create: 'All', read: 'All', update: 'All', delete: 'All' };
|
|
112
112
|
fullRedactionRole = 'full-redaction-test-role';
|
|
113
|
+
ROLE_COLOR = '#FF8800';
|
|
114
|
+
ROLE_DESCRIPTION = 'Role used by field redaction tests';
|
|
113
115
|
return [4 /*yield*/, sdk.api.role_based_access_permissions.createOne({
|
|
114
116
|
role: fullRedactionRole,
|
|
115
117
|
permissions: __assign(__assign({}, PROVIDER_PERMISSIONS), { phone_calls: FULL_ACCESS, endusers: FULL_ACCESS }),
|
|
116
118
|
fieldRedactions: {
|
|
117
119
|
phone_calls: __spreadArray([], ALL_REDACTABLE_FIELDS, true),
|
|
118
120
|
},
|
|
119
|
-
|
|
121
|
+
color: ROLE_COLOR,
|
|
122
|
+
description: ROLE_DESCRIPTION,
|
|
123
|
+
})
|
|
124
|
+
// Verify color/description persist and round-trip via getOne
|
|
125
|
+
];
|
|
120
126
|
case 3:
|
|
121
127
|
rbapFull = _b.sent();
|
|
122
|
-
|
|
123
|
-
|
|
128
|
+
// Verify color/description persist and round-trip via getOne
|
|
129
|
+
return [4 /*yield*/, async_test("role_based_access_permissions - color and description persist on create/read", function () { return sdk.api.role_based_access_permissions.getOne(rbapFull.id); }, {
|
|
130
|
+
onResult: function (r) { return r.color === ROLE_COLOR && r.description === ROLE_DESCRIPTION; },
|
|
131
|
+
})];
|
|
124
132
|
case 4:
|
|
125
|
-
|
|
133
|
+
// Verify color/description persist and round-trip via getOne
|
|
134
|
+
_b.sent();
|
|
135
|
+
originalRoles = sdkNonAdmin.userInfo.roles;
|
|
136
|
+
_b.label = 5;
|
|
137
|
+
case 5:
|
|
138
|
+
_b.trys.push([5, , 58, 72]);
|
|
126
139
|
// Assign full-redaction role to non-admin
|
|
127
140
|
return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [fullRedactionRole] }, { replaceObjectFields: true })];
|
|
128
|
-
case
|
|
141
|
+
case 6:
|
|
129
142
|
// Assign full-redaction role to non-admin
|
|
130
143
|
_b.sent();
|
|
131
144
|
return [4 /*yield*/, wait(undefined, 1500)];
|
|
132
|
-
case
|
|
145
|
+
case 7:
|
|
133
146
|
_b.sent();
|
|
134
147
|
return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)
|
|
135
148
|
// ========================================
|
|
136
149
|
// Test 1: Full redaction on getOne
|
|
137
150
|
// ========================================
|
|
138
151
|
];
|
|
139
|
-
case
|
|
152
|
+
case 8:
|
|
140
153
|
_b.sent();
|
|
141
154
|
// ========================================
|
|
142
155
|
// Test 1: Full redaction on getOne
|
|
@@ -163,7 +176,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
163
176
|
// Test 2: Admin sees all fields
|
|
164
177
|
// ========================================
|
|
165
178
|
];
|
|
166
|
-
case
|
|
179
|
+
case 9:
|
|
167
180
|
_b.sent();
|
|
168
181
|
// ========================================
|
|
169
182
|
// Test 2: Admin sees all fields
|
|
@@ -186,7 +199,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
186
199
|
// Test 3: Partial redaction (recordings only)
|
|
187
200
|
// ========================================
|
|
188
201
|
];
|
|
189
|
-
case
|
|
202
|
+
case 10:
|
|
190
203
|
_b.sent();
|
|
191
204
|
// ========================================
|
|
192
205
|
// Test 3: Partial redaction (recordings only)
|
|
@@ -200,19 +213,19 @@ export var field_redaction_tests = function (_a) {
|
|
|
200
213
|
phone_calls: __spreadArray([], RECORDING_FIELDS, true),
|
|
201
214
|
},
|
|
202
215
|
})];
|
|
203
|
-
case 10:
|
|
204
|
-
rbapPartial = _b.sent();
|
|
205
|
-
_b.label = 11;
|
|
206
216
|
case 11:
|
|
207
|
-
_b.
|
|
208
|
-
|
|
217
|
+
rbapPartial = _b.sent();
|
|
218
|
+
_b.label = 12;
|
|
209
219
|
case 12:
|
|
220
|
+
_b.trys.push([12, , 17, 22]);
|
|
221
|
+
return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [partialRedactionRole] }, { replaceObjectFields: true })];
|
|
222
|
+
case 13:
|
|
210
223
|
_b.sent();
|
|
211
224
|
return [4 /*yield*/, wait(undefined, 1500)];
|
|
212
|
-
case
|
|
225
|
+
case 14:
|
|
213
226
|
_b.sent();
|
|
214
227
|
return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)];
|
|
215
|
-
case
|
|
228
|
+
case 15:
|
|
216
229
|
_b.sent();
|
|
217
230
|
return [4 /*yield*/, async_test("getOne - only recording fields should be redacted, transcription/summary visible", function () { return sdkNonAdmin.api.phone_calls.getOne(testPhoneCall.id); }, {
|
|
218
231
|
onResult: function (r) {
|
|
@@ -232,26 +245,26 @@ export var field_redaction_tests = function (_a) {
|
|
|
232
245
|
return recordingRedacted && nonRecordingPresent;
|
|
233
246
|
}
|
|
234
247
|
})];
|
|
235
|
-
case
|
|
248
|
+
case 16:
|
|
236
249
|
_b.sent();
|
|
237
|
-
return [3 /*break*/,
|
|
238
|
-
case
|
|
250
|
+
return [3 /*break*/, 22];
|
|
251
|
+
case 17:
|
|
239
252
|
// Restore full-redaction role and clean up partial role
|
|
240
253
|
return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [fullRedactionRole] }, { replaceObjectFields: true })];
|
|
241
|
-
case
|
|
254
|
+
case 18:
|
|
242
255
|
// Restore full-redaction role and clean up partial role
|
|
243
256
|
_b.sent();
|
|
244
257
|
return [4 /*yield*/, wait(undefined, 1500)];
|
|
245
|
-
case
|
|
258
|
+
case 19:
|
|
246
259
|
_b.sent();
|
|
247
260
|
return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)];
|
|
248
|
-
case
|
|
261
|
+
case 20:
|
|
249
262
|
_b.sent();
|
|
250
263
|
return [4 /*yield*/, sdk.api.role_based_access_permissions.deleteOne(rbapPartial.id)];
|
|
251
|
-
case
|
|
264
|
+
case 21:
|
|
252
265
|
_b.sent();
|
|
253
266
|
return [7 /*endfinally*/];
|
|
254
|
-
case
|
|
267
|
+
case 22:
|
|
255
268
|
// ========================================
|
|
256
269
|
// Test 4: getSome/readMany consistency
|
|
257
270
|
// ========================================
|
|
@@ -275,7 +288,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
275
288
|
return redacted;
|
|
276
289
|
}
|
|
277
290
|
})];
|
|
278
|
-
case
|
|
291
|
+
case 23:
|
|
279
292
|
_b.sent();
|
|
280
293
|
return [4 /*yield*/, async_test("getSome (admin) - all fields should be visible", function () { return sdk.api.phone_calls.getSome(); }, {
|
|
281
294
|
onResult: function (r) {
|
|
@@ -299,7 +312,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
299
312
|
// Test 5: Update response doesn't leak
|
|
300
313
|
// ========================================
|
|
301
314
|
];
|
|
302
|
-
case
|
|
315
|
+
case 24:
|
|
303
316
|
_b.sent();
|
|
304
317
|
// ========================================
|
|
305
318
|
// Test 5: Update response doesn't leak
|
|
@@ -318,7 +331,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
318
331
|
return redacted;
|
|
319
332
|
}
|
|
320
333
|
})];
|
|
321
|
-
case
|
|
334
|
+
case 25:
|
|
322
335
|
_b.sent();
|
|
323
336
|
return [4 /*yield*/, async_test("updateOne (admin) - all fields should be visible in response", function () { return sdk.api.phone_calls.updateOne(testPhoneCall.id, { note: 'admin update test' }); }, {
|
|
324
337
|
onResult: function (r) {
|
|
@@ -337,7 +350,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
337
350
|
// Test 6: Create response doesn't leak
|
|
338
351
|
// ========================================
|
|
339
352
|
];
|
|
340
|
-
case
|
|
353
|
+
case 26:
|
|
341
354
|
_b.sent();
|
|
342
355
|
// ========================================
|
|
343
356
|
// Test 6: Create response doesn't leak
|
|
@@ -370,20 +383,20 @@ export var field_redaction_tests = function (_a) {
|
|
|
370
383
|
})
|
|
371
384
|
// Cleanup the created phone call
|
|
372
385
|
];
|
|
373
|
-
case 26:
|
|
374
|
-
_b.sent();
|
|
375
|
-
if (!createdPhoneCallId_1) return [3 /*break*/, 30];
|
|
376
|
-
_b.label = 27;
|
|
377
386
|
case 27:
|
|
378
|
-
_b.trys.push([27, 29, , 30]);
|
|
379
|
-
return [4 /*yield*/, sdk.api.phone_calls.deleteOne(createdPhoneCallId_1)];
|
|
380
|
-
case 28:
|
|
381
387
|
_b.sent();
|
|
382
|
-
return [3 /*break*/,
|
|
388
|
+
if (!createdPhoneCallId_1) return [3 /*break*/, 31];
|
|
389
|
+
_b.label = 28;
|
|
390
|
+
case 28:
|
|
391
|
+
_b.trys.push([28, 30, , 31]);
|
|
392
|
+
return [4 /*yield*/, sdk.api.phone_calls.deleteOne(createdPhoneCallId_1)];
|
|
383
393
|
case 29:
|
|
394
|
+
_b.sent();
|
|
395
|
+
return [3 /*break*/, 31];
|
|
396
|
+
case 30:
|
|
384
397
|
e_1 = _b.sent();
|
|
385
|
-
return [3 /*break*/,
|
|
386
|
-
case
|
|
398
|
+
return [3 /*break*/, 31];
|
|
399
|
+
case 31: return [4 /*yield*/, async_test("createOne (admin) - all fields should be visible in response", function () { return sdk.api.phone_calls.createOne({
|
|
387
400
|
enduserId: testEnduser.id,
|
|
388
401
|
inbound: false,
|
|
389
402
|
from: '+15553333333',
|
|
@@ -408,20 +421,20 @@ export var field_redaction_tests = function (_a) {
|
|
|
408
421
|
return allPresent;
|
|
409
422
|
}
|
|
410
423
|
})];
|
|
411
|
-
case 31:
|
|
412
|
-
_b.sent();
|
|
413
|
-
if (!adminCreatedPhoneCallId_1) return [3 /*break*/, 35];
|
|
414
|
-
_b.label = 32;
|
|
415
424
|
case 32:
|
|
416
|
-
_b.trys.push([32, 34, , 35]);
|
|
417
|
-
return [4 /*yield*/, sdk.api.phone_calls.deleteOne(adminCreatedPhoneCallId_1)];
|
|
418
|
-
case 33:
|
|
419
425
|
_b.sent();
|
|
420
|
-
return [3 /*break*/,
|
|
426
|
+
if (!adminCreatedPhoneCallId_1) return [3 /*break*/, 36];
|
|
427
|
+
_b.label = 33;
|
|
428
|
+
case 33:
|
|
429
|
+
_b.trys.push([33, 35, , 36]);
|
|
430
|
+
return [4 /*yield*/, sdk.api.phone_calls.deleteOne(adminCreatedPhoneCallId_1)];
|
|
421
431
|
case 34:
|
|
422
|
-
|
|
423
|
-
return [3 /*break*/,
|
|
432
|
+
_b.sent();
|
|
433
|
+
return [3 /*break*/, 36];
|
|
424
434
|
case 35:
|
|
435
|
+
e_2 = _b.sent();
|
|
436
|
+
return [3 /*break*/, 36];
|
|
437
|
+
case 36:
|
|
425
438
|
// ========================================
|
|
426
439
|
// Test 7: bulk_load redaction
|
|
427
440
|
// ========================================
|
|
@@ -449,7 +462,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
449
462
|
return redacted;
|
|
450
463
|
}
|
|
451
464
|
})];
|
|
452
|
-
case
|
|
465
|
+
case 37:
|
|
453
466
|
_b.sent();
|
|
454
467
|
return [4 /*yield*/, async_test("bulk_load (admin) - all fields should be visible", function () { return sdk.bulk_load({ load: [{ model: 'phone_calls', options: { limit: 100 } }] }); }, {
|
|
455
468
|
onResult: function (r) {
|
|
@@ -478,7 +491,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
478
491
|
// Test 7b: bulk-read (getByIds) redaction
|
|
479
492
|
// ========================================
|
|
480
493
|
];
|
|
481
|
-
case
|
|
494
|
+
case 38:
|
|
482
495
|
_b.sent();
|
|
483
496
|
// ========================================
|
|
484
497
|
// Test 7b: bulk-read (getByIds) redaction
|
|
@@ -506,7 +519,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
506
519
|
return redacted;
|
|
507
520
|
}
|
|
508
521
|
})];
|
|
509
|
-
case
|
|
522
|
+
case 39:
|
|
510
523
|
_b.sent();
|
|
511
524
|
return [4 /*yield*/, async_test("getByIds (admin) - all fields should be visible", function () { return sdk.api.phone_calls.getByIds({ ids: [testPhoneCall.id] }); }, {
|
|
512
525
|
onResult: function (r) {
|
|
@@ -534,7 +547,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
534
547
|
// Test 8: load_inbox_data redaction
|
|
535
548
|
// ========================================
|
|
536
549
|
];
|
|
537
|
-
case
|
|
550
|
+
case 40:
|
|
538
551
|
_b.sent();
|
|
539
552
|
// ========================================
|
|
540
553
|
// Test 8: load_inbox_data redaction
|
|
@@ -562,7 +575,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
562
575
|
return redacted;
|
|
563
576
|
}
|
|
564
577
|
})];
|
|
565
|
-
case
|
|
578
|
+
case 41:
|
|
566
579
|
_b.sent();
|
|
567
580
|
return [4 /*yield*/, async_test("load_inbox_data (admin) - all phone_call fields should be visible", function () { return sdk.api.endusers.load_inbox_data({ enduserIds: [testEnduser.id] }); }, {
|
|
568
581
|
onResult: function (r) {
|
|
@@ -590,7 +603,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
590
603
|
// Test 9: No-redaction role sees all fields
|
|
591
604
|
// ========================================
|
|
592
605
|
];
|
|
593
|
-
case
|
|
606
|
+
case 42:
|
|
594
607
|
_b.sent();
|
|
595
608
|
// ========================================
|
|
596
609
|
// Test 9: No-redaction role sees all fields
|
|
@@ -602,19 +615,19 @@ export var field_redaction_tests = function (_a) {
|
|
|
602
615
|
permissions: __assign(__assign({}, PROVIDER_PERMISSIONS), { phone_calls: FULL_ACCESS, endusers: FULL_ACCESS }),
|
|
603
616
|
// No fieldRedactions
|
|
604
617
|
})];
|
|
605
|
-
case 42:
|
|
606
|
-
rbapNoRedaction = _b.sent();
|
|
607
|
-
_b.label = 43;
|
|
608
618
|
case 43:
|
|
609
|
-
_b.
|
|
610
|
-
|
|
619
|
+
rbapNoRedaction = _b.sent();
|
|
620
|
+
_b.label = 44;
|
|
611
621
|
case 44:
|
|
622
|
+
_b.trys.push([44, , 49, 54]);
|
|
623
|
+
return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [noRedactionRole] }, { replaceObjectFields: true })];
|
|
624
|
+
case 45:
|
|
612
625
|
_b.sent();
|
|
613
626
|
return [4 /*yield*/, wait(undefined, 1500)];
|
|
614
|
-
case
|
|
627
|
+
case 46:
|
|
615
628
|
_b.sent();
|
|
616
629
|
return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)];
|
|
617
|
-
case
|
|
630
|
+
case 47:
|
|
618
631
|
_b.sent();
|
|
619
632
|
return [4 /*yield*/, async_test("getOne - role without fieldRedactions should see all fields", function () { return sdkNonAdmin.api.phone_calls.getOne(testPhoneCall.id); }, {
|
|
620
633
|
onResult: function (r) {
|
|
@@ -629,23 +642,23 @@ export var field_redaction_tests = function (_a) {
|
|
|
629
642
|
return allPresent;
|
|
630
643
|
}
|
|
631
644
|
})];
|
|
632
|
-
case
|
|
645
|
+
case 48:
|
|
633
646
|
_b.sent();
|
|
634
|
-
return [3 /*break*/,
|
|
635
|
-
case
|
|
636
|
-
case
|
|
647
|
+
return [3 /*break*/, 54];
|
|
648
|
+
case 49: return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [fullRedactionRole] }, { replaceObjectFields: true })];
|
|
649
|
+
case 50:
|
|
637
650
|
_b.sent();
|
|
638
651
|
return [4 /*yield*/, wait(undefined, 1500)];
|
|
639
|
-
case
|
|
652
|
+
case 51:
|
|
640
653
|
_b.sent();
|
|
641
654
|
return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)];
|
|
642
|
-
case
|
|
655
|
+
case 52:
|
|
643
656
|
_b.sent();
|
|
644
657
|
return [4 /*yield*/, sdk.api.role_based_access_permissions.deleteOne(rbapNoRedaction.id)];
|
|
645
|
-
case
|
|
658
|
+
case 53:
|
|
646
659
|
_b.sent();
|
|
647
660
|
return [7 /*endfinally*/];
|
|
648
|
-
case
|
|
661
|
+
case 54:
|
|
649
662
|
// ========================================
|
|
650
663
|
// Test 10: Redaction scoped to model
|
|
651
664
|
// ========================================
|
|
@@ -666,7 +679,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
666
679
|
// Test 11: data-sync redaction
|
|
667
680
|
// ========================================
|
|
668
681
|
];
|
|
669
|
-
case
|
|
682
|
+
case 55:
|
|
670
683
|
_b.sent();
|
|
671
684
|
// ========================================
|
|
672
685
|
// Test 11: data-sync redaction
|
|
@@ -701,7 +714,7 @@ export var field_redaction_tests = function (_a) {
|
|
|
701
714
|
return redacted && corePresent;
|
|
702
715
|
}
|
|
703
716
|
})];
|
|
704
|
-
case
|
|
717
|
+
case 56:
|
|
705
718
|
_b.sent();
|
|
706
719
|
return [4 /*yield*/, async_test("data-sync (admin) - all fields should be visible in parsed data", function () { return sdk.sync({ from: syncFrom_1 }); }, {
|
|
707
720
|
onResult: function (r) {
|
|
@@ -726,59 +739,59 @@ export var field_redaction_tests = function (_a) {
|
|
|
726
739
|
return allPresent;
|
|
727
740
|
}
|
|
728
741
|
})];
|
|
729
|
-
case
|
|
742
|
+
case 57:
|
|
730
743
|
_b.sent();
|
|
731
744
|
console.log("\n" + "=".repeat(60));
|
|
732
745
|
console.log("Field Redaction Tests Complete");
|
|
733
746
|
console.log("=".repeat(60));
|
|
734
|
-
return [3 /*break*/,
|
|
735
|
-
case
|
|
747
|
+
return [3 /*break*/, 72];
|
|
748
|
+
case 58:
|
|
736
749
|
// Restore original roles
|
|
737
750
|
return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: originalRoles }, { replaceObjectFields: true })];
|
|
738
|
-
case
|
|
751
|
+
case 59:
|
|
739
752
|
// Restore original roles
|
|
740
753
|
_b.sent();
|
|
741
754
|
return [4 /*yield*/, wait(undefined, 1000)];
|
|
742
|
-
case
|
|
755
|
+
case 60:
|
|
743
756
|
_b.sent();
|
|
744
757
|
return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)
|
|
745
758
|
// Cleanup test data
|
|
746
759
|
];
|
|
747
|
-
case 60:
|
|
748
|
-
_b.sent();
|
|
749
|
-
_b.label = 61;
|
|
750
760
|
case 61:
|
|
751
|
-
_b.trys.push([61, 63, , 64]);
|
|
752
|
-
return [4 /*yield*/, sdk.api.role_based_access_permissions.deleteOne(rbapFull.id)];
|
|
753
|
-
case 62:
|
|
754
761
|
_b.sent();
|
|
755
|
-
|
|
762
|
+
_b.label = 62;
|
|
763
|
+
case 62:
|
|
764
|
+
_b.trys.push([62, 64, , 65]);
|
|
765
|
+
return [4 /*yield*/, sdk.api.role_based_access_permissions.deleteOne(rbapFull.id)];
|
|
756
766
|
case 63:
|
|
767
|
+
_b.sent();
|
|
768
|
+
return [3 /*break*/, 65];
|
|
769
|
+
case 64:
|
|
757
770
|
e_3 = _b.sent();
|
|
758
771
|
console.error('Cleanup error (rbap):', e_3);
|
|
759
|
-
return [3 /*break*/,
|
|
760
|
-
case 64:
|
|
761
|
-
_b.trys.push([64, 66, , 67]);
|
|
762
|
-
return [4 /*yield*/, sdk.api.phone_calls.deleteOne(testPhoneCall.id)];
|
|
772
|
+
return [3 /*break*/, 65];
|
|
763
773
|
case 65:
|
|
764
|
-
_b.
|
|
765
|
-
return [
|
|
774
|
+
_b.trys.push([65, 67, , 68]);
|
|
775
|
+
return [4 /*yield*/, sdk.api.phone_calls.deleteOne(testPhoneCall.id)];
|
|
766
776
|
case 66:
|
|
777
|
+
_b.sent();
|
|
778
|
+
return [3 /*break*/, 68];
|
|
779
|
+
case 67:
|
|
767
780
|
e_4 = _b.sent();
|
|
768
781
|
console.error('Cleanup error (phone_call):', e_4);
|
|
769
|
-
return [3 /*break*/,
|
|
770
|
-
case 67:
|
|
771
|
-
_b.trys.push([67, 69, , 70]);
|
|
772
|
-
return [4 /*yield*/, sdk.api.endusers.deleteOne(testEnduser.id)];
|
|
782
|
+
return [3 /*break*/, 68];
|
|
773
783
|
case 68:
|
|
774
|
-
_b.
|
|
775
|
-
return [
|
|
784
|
+
_b.trys.push([68, 70, , 71]);
|
|
785
|
+
return [4 /*yield*/, sdk.api.endusers.deleteOne(testEnduser.id)];
|
|
776
786
|
case 69:
|
|
787
|
+
_b.sent();
|
|
788
|
+
return [3 /*break*/, 71];
|
|
789
|
+
case 70:
|
|
777
790
|
e_5 = _b.sent();
|
|
778
791
|
console.error('Cleanup error (enduser):', e_5);
|
|
779
|
-
return [3 /*break*/,
|
|
780
|
-
case
|
|
781
|
-
case
|
|
792
|
+
return [3 /*break*/, 71];
|
|
793
|
+
case 71: return [7 /*endfinally*/];
|
|
794
|
+
case 72: return [2 /*return*/];
|
|
782
795
|
}
|
|
783
796
|
});
|
|
784
797
|
});
|