@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.
Files changed (124) hide show
  1. package/lib/cjs/sdk.d.ts +4 -0
  2. package/lib/cjs/sdk.d.ts.map +1 -1
  3. package/lib/cjs/tests/api_tests/_tmp_bc_verify.test.d.ts.map +1 -0
  4. package/lib/cjs/tests/api_tests/_tmp_blank_status_verify.test.d.ts.map +1 -0
  5. package/lib/cjs/tests/api_tests/_tmp_followup_verify.test.d.ts.map +1 -0
  6. package/lib/cjs/tests/api_tests/_tmp_nonmatch_verify.test.d.ts.map +1 -0
  7. package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.d.ts +16 -0
  8. package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.d.ts.map +1 -0
  9. package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.js +187 -0
  10. package/lib/cjs/tests/api_tests/ai_decision_summary_config.test.js.map +1 -0
  11. package/lib/cjs/tests/api_tests/field_redaction.test.d.ts.map +1 -1
  12. package/lib/cjs/tests/api_tests/field_redaction.test.js +112 -99
  13. package/lib/cjs/tests/api_tests/field_redaction.test.js.map +1 -1
  14. package/lib/cjs/tests/api_tests/journey_error_branching.test.js +7 -2
  15. package/lib/cjs/tests/api_tests/journey_error_branching.test.js.map +1 -1
  16. package/lib/cjs/tests/api_tests/mdi_case_offerings.test.d.ts +6 -0
  17. package/lib/cjs/tests/api_tests/mdi_case_offerings.test.d.ts.map +1 -0
  18. package/lib/cjs/tests/api_tests/mdi_case_offerings.test.js +443 -0
  19. package/lib/cjs/tests/api_tests/mdi_case_offerings.test.js.map +1 -0
  20. package/lib/cjs/tests/api_tests/resource_access_tags.test.d.ts +22 -0
  21. package/lib/cjs/tests/api_tests/resource_access_tags.test.d.ts.map +1 -0
  22. package/lib/cjs/tests/api_tests/resource_access_tags.test.js +488 -0
  23. package/lib/cjs/tests/api_tests/resource_access_tags.test.js.map +1 -0
  24. package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts +21 -0
  25. package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts.map +1 -0
  26. package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js +362 -0
  27. package/lib/cjs/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js.map +1 -0
  28. package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts +20 -0
  29. package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts.map +1 -0
  30. package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.js +139 -0
  31. package/lib/cjs/tests/api_tests/security/F-0145-globalunique-leak.test.js.map +1 -0
  32. package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts +18 -0
  33. package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts.map +1 -0
  34. package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.js +156 -0
  35. package/lib/cjs/tests/api_tests/security/F-0151-load-inbox-redaction.test.js.map +1 -0
  36. package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts +20 -0
  37. package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts.map +1 -0
  38. package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.js +157 -0
  39. package/lib/cjs/tests/api_tests/security/F-0155-webhook-timeout.test.js.map +1 -0
  40. package/lib/cjs/tests/api_tests/time_tracks.test.d.ts +8 -0
  41. package/lib/cjs/tests/api_tests/time_tracks.test.d.ts.map +1 -1
  42. package/lib/cjs/tests/api_tests/time_tracks.test.js +638 -1
  43. package/lib/cjs/tests/api_tests/time_tracks.test.js.map +1 -1
  44. package/lib/cjs/tests/setup.d.ts.map +1 -1
  45. package/lib/cjs/tests/setup.js +20 -1
  46. package/lib/cjs/tests/setup.js.map +1 -1
  47. package/lib/cjs/tests/tests.d.ts.map +1 -1
  48. package/lib/cjs/tests/tests.js +606 -178
  49. package/lib/cjs/tests/tests.js.map +1 -1
  50. package/lib/esm/sdk.d.ts +6 -2
  51. package/lib/esm/sdk.d.ts.map +1 -1
  52. package/lib/esm/tests/api_tests/_tmp_bc_verify.test.d.ts +2 -0
  53. package/lib/esm/tests/api_tests/_tmp_bc_verify.test.d.ts.map +1 -0
  54. package/lib/esm/tests/api_tests/_tmp_bc_verify.test.js +120 -0
  55. package/lib/esm/tests/api_tests/_tmp_bc_verify.test.js.map +1 -0
  56. package/lib/esm/tests/api_tests/_tmp_blank_status_verify.test.d.ts +2 -0
  57. package/lib/esm/tests/api_tests/_tmp_blank_status_verify.test.d.ts.map +1 -0
  58. package/lib/esm/tests/api_tests/_tmp_blank_status_verify.test.js +200 -0
  59. package/lib/esm/tests/api_tests/_tmp_blank_status_verify.test.js.map +1 -0
  60. package/lib/esm/tests/api_tests/_tmp_followup_verify.test.d.ts +2 -0
  61. package/lib/esm/tests/api_tests/_tmp_followup_verify.test.d.ts.map +1 -0
  62. package/lib/esm/tests/api_tests/_tmp_followup_verify.test.js +194 -0
  63. package/lib/esm/tests/api_tests/_tmp_followup_verify.test.js.map +1 -0
  64. package/lib/esm/tests/api_tests/_tmp_nonmatch_verify.test.d.ts +2 -0
  65. package/lib/esm/tests/api_tests/_tmp_nonmatch_verify.test.d.ts.map +1 -0
  66. package/lib/esm/tests/api_tests/_tmp_nonmatch_verify.test.js +115 -0
  67. package/lib/esm/tests/api_tests/_tmp_nonmatch_verify.test.js.map +1 -0
  68. package/lib/esm/tests/api_tests/ai_decision_summary_config.test.d.ts +16 -0
  69. package/lib/esm/tests/api_tests/ai_decision_summary_config.test.d.ts.map +1 -0
  70. package/lib/esm/tests/api_tests/ai_decision_summary_config.test.js +183 -0
  71. package/lib/esm/tests/api_tests/ai_decision_summary_config.test.js.map +1 -0
  72. package/lib/esm/tests/api_tests/field_redaction.test.d.ts.map +1 -1
  73. package/lib/esm/tests/api_tests/field_redaction.test.js +112 -99
  74. package/lib/esm/tests/api_tests/field_redaction.test.js.map +1 -1
  75. package/lib/esm/tests/api_tests/journey_error_branching.test.js +7 -2
  76. package/lib/esm/tests/api_tests/journey_error_branching.test.js.map +1 -1
  77. package/lib/esm/tests/api_tests/mdi_case_offerings.test.d.ts +6 -0
  78. package/lib/esm/tests/api_tests/mdi_case_offerings.test.d.ts.map +1 -0
  79. package/lib/esm/tests/api_tests/mdi_case_offerings.test.js +439 -0
  80. package/lib/esm/tests/api_tests/mdi_case_offerings.test.js.map +1 -0
  81. package/lib/esm/tests/api_tests/resource_access_tags.test.d.ts +22 -0
  82. package/lib/esm/tests/api_tests/resource_access_tags.test.d.ts.map +1 -0
  83. package/lib/esm/tests/api_tests/resource_access_tags.test.js +484 -0
  84. package/lib/esm/tests/api_tests/resource_access_tags.test.js.map +1 -0
  85. package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts +21 -0
  86. package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.d.ts.map +1 -0
  87. package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js +358 -0
  88. package/lib/esm/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.js.map +1 -0
  89. package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts +20 -0
  90. package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.d.ts.map +1 -0
  91. package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.js +135 -0
  92. package/lib/esm/tests/api_tests/security/F-0145-globalunique-leak.test.js.map +1 -0
  93. package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts +18 -0
  94. package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.d.ts.map +1 -0
  95. package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.js +152 -0
  96. package/lib/esm/tests/api_tests/security/F-0151-load-inbox-redaction.test.js.map +1 -0
  97. package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts +20 -0
  98. package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.d.ts.map +1 -0
  99. package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.js +150 -0
  100. package/lib/esm/tests/api_tests/security/F-0155-webhook-timeout.test.js.map +1 -0
  101. package/lib/esm/tests/api_tests/time_tracks.test.d.ts +8 -0
  102. package/lib/esm/tests/api_tests/time_tracks.test.d.ts.map +1 -1
  103. package/lib/esm/tests/api_tests/time_tracks.test.js +635 -0
  104. package/lib/esm/tests/api_tests/time_tracks.test.js.map +1 -1
  105. package/lib/esm/tests/setup.d.ts.map +1 -1
  106. package/lib/esm/tests/setup.js +20 -1
  107. package/lib/esm/tests/setup.js.map +1 -1
  108. package/lib/esm/tests/tests.d.ts.map +1 -1
  109. package/lib/esm/tests/tests.js +607 -179
  110. package/lib/esm/tests/tests.js.map +1 -1
  111. package/lib/tsconfig.tsbuildinfo +1 -1
  112. package/package.json +10 -10
  113. package/src/tests/api_tests/field_redaction.test.ts +13 -0
  114. package/src/tests/api_tests/journey_error_branching.test.ts +5 -1
  115. package/src/tests/api_tests/mdi_case_offerings.test.ts +414 -0
  116. package/src/tests/api_tests/resource_access_tags.test.ts +303 -0
  117. package/src/tests/api_tests/security/F-0116-F-0119-enduser-cross-create.test.ts +221 -0
  118. package/src/tests/api_tests/security/F-0145-globalunique-leak.test.ts +78 -0
  119. package/src/tests/api_tests/security/F-0151-load-inbox-redaction.test.ts +81 -0
  120. package/src/tests/api_tests/security/F-0155-webhook-timeout.test.ts +85 -0
  121. package/src/tests/api_tests/time_tracks.test.ts +420 -0
  122. package/src/tests/setup.ts +9 -0
  123. package/src/tests/tests.ts +308 -5
  124. 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;mBAwmBtG,CAAA"}
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
- originalRoles = sdkNonAdmin.userInfo.roles;
123
- _b.label = 4;
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
- _b.trys.push([4, , 57, 71]);
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 5:
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 6:
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 7:
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 8:
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 9:
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.trys.push([11, , 16, 21]);
208
- return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [partialRedactionRole] }, { replaceObjectFields: true })];
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 13:
225
+ case 14:
213
226
  _b.sent();
214
227
  return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)];
215
- case 14:
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 15:
248
+ case 16:
236
249
  _b.sent();
237
- return [3 /*break*/, 21];
238
- case 16:
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 17:
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 18:
258
+ case 19:
246
259
  _b.sent();
247
260
  return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)];
248
- case 19:
261
+ case 20:
249
262
  _b.sent();
250
263
  return [4 /*yield*/, sdk.api.role_based_access_permissions.deleteOne(rbapPartial.id)];
251
- case 20:
264
+ case 21:
252
265
  _b.sent();
253
266
  return [7 /*endfinally*/];
254
- case 21:
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 22:
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 23:
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 24:
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 25:
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*/, 30];
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*/, 30];
386
- case 30: return [4 /*yield*/, async_test("createOne (admin) - all fields should be visible in response", function () { return sdk.api.phone_calls.createOne({
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*/, 35];
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
- e_2 = _b.sent();
423
- return [3 /*break*/, 35];
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 36:
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 37:
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 38:
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 39:
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 40:
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 41:
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.trys.push([43, , 48, 53]);
610
- return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [noRedactionRole] }, { replaceObjectFields: true })];
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 45:
627
+ case 46:
615
628
  _b.sent();
616
629
  return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)];
617
- case 46:
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 47:
645
+ case 48:
633
646
  _b.sent();
634
- return [3 /*break*/, 53];
635
- case 48: return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [fullRedactionRole] }, { replaceObjectFields: true })];
636
- case 49:
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 50:
652
+ case 51:
640
653
  _b.sent();
641
654
  return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)];
642
- case 51:
655
+ case 52:
643
656
  _b.sent();
644
657
  return [4 /*yield*/, sdk.api.role_based_access_permissions.deleteOne(rbapNoRedaction.id)];
645
- case 52:
658
+ case 53:
646
659
  _b.sent();
647
660
  return [7 /*endfinally*/];
648
- case 53:
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 54:
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 55:
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 56:
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*/, 71];
735
- case 57:
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 58:
751
+ case 59:
739
752
  // Restore original roles
740
753
  _b.sent();
741
754
  return [4 /*yield*/, wait(undefined, 1000)];
742
- case 59:
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
- return [3 /*break*/, 64];
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*/, 64];
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.sent();
765
- return [3 /*break*/, 67];
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*/, 67];
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.sent();
775
- return [3 /*break*/, 70];
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*/, 70];
780
- case 70: return [7 /*endfinally*/];
781
- case 71: return [2 /*return*/];
792
+ return [3 /*break*/, 71];
793
+ case 71: return [7 /*endfinally*/];
794
+ case 72: return [2 /*return*/];
782
795
  }
783
796
  });
784
797
  });