@tellescope/sdk 1.255.13 → 1.255.15

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 (59) hide show
  1. package/lib/cjs/sdk.d.ts +1 -0
  2. package/lib/cjs/sdk.d.ts.map +1 -1
  3. package/lib/cjs/sdk.js +1 -0
  4. package/lib/cjs/sdk.js.map +1 -1
  5. package/lib/cjs/tests/api_tests/calendar_event_references_update.test.d.ts +14 -0
  6. package/lib/cjs/tests/api_tests/calendar_event_references_update.test.d.ts.map +1 -0
  7. package/lib/cjs/tests/api_tests/calendar_event_references_update.test.js +172 -0
  8. package/lib/cjs/tests/api_tests/calendar_event_references_update.test.js.map +1 -0
  9. package/lib/cjs/tests/api_tests/formsort_header_auth.test.d.ts +6 -0
  10. package/lib/cjs/tests/api_tests/formsort_header_auth.test.d.ts.map +1 -0
  11. package/lib/cjs/tests/api_tests/formsort_header_auth.test.js +221 -0
  12. package/lib/cjs/tests/api_tests/formsort_header_auth.test.js.map +1 -0
  13. package/lib/cjs/tests/api_tests/phone_calls_cold_transfer.test.d.ts +6 -0
  14. package/lib/cjs/tests/api_tests/phone_calls_cold_transfer.test.d.ts.map +1 -0
  15. package/lib/cjs/tests/api_tests/phone_calls_cold_transfer.test.js +179 -0
  16. package/lib/cjs/tests/api_tests/phone_calls_cold_transfer.test.js.map +1 -0
  17. package/lib/cjs/tests/api_tests/phone_tree_enduser_condition.test.d.ts +6 -0
  18. package/lib/cjs/tests/api_tests/phone_tree_enduser_condition.test.d.ts.map +1 -0
  19. package/lib/cjs/tests/api_tests/phone_tree_enduser_condition.test.js +237 -0
  20. package/lib/cjs/tests/api_tests/phone_tree_enduser_condition.test.js.map +1 -0
  21. package/lib/cjs/tests/api_tests/send_message_model.test.d.ts.map +1 -0
  22. package/lib/cjs/tests/api_tests/send_message_model.test.js.map +1 -0
  23. package/lib/cjs/tests/tests.d.ts.map +1 -1
  24. package/lib/cjs/tests/tests.js +148 -132
  25. package/lib/cjs/tests/tests.js.map +1 -1
  26. package/lib/esm/sdk.d.ts +1 -0
  27. package/lib/esm/sdk.d.ts.map +1 -1
  28. package/lib/esm/sdk.js +1 -0
  29. package/lib/esm/sdk.js.map +1 -1
  30. package/lib/esm/tests/api_tests/calendar_event_references_update.test.d.ts +14 -0
  31. package/lib/esm/tests/api_tests/calendar_event_references_update.test.d.ts.map +1 -0
  32. package/lib/esm/tests/api_tests/calendar_event_references_update.test.js +168 -0
  33. package/lib/esm/tests/api_tests/calendar_event_references_update.test.js.map +1 -0
  34. package/lib/esm/tests/api_tests/formsort_header_auth.test.d.ts +6 -0
  35. package/lib/esm/tests/api_tests/formsort_header_auth.test.d.ts.map +1 -0
  36. package/lib/esm/tests/api_tests/formsort_header_auth.test.js +214 -0
  37. package/lib/esm/tests/api_tests/formsort_header_auth.test.js.map +1 -0
  38. package/lib/esm/tests/api_tests/phone_calls_cold_transfer.test.d.ts +6 -0
  39. package/lib/esm/tests/api_tests/phone_calls_cold_transfer.test.d.ts.map +1 -0
  40. package/lib/esm/tests/api_tests/phone_calls_cold_transfer.test.js +175 -0
  41. package/lib/esm/tests/api_tests/phone_calls_cold_transfer.test.js.map +1 -0
  42. package/lib/esm/tests/api_tests/phone_tree_enduser_condition.test.d.ts +6 -0
  43. package/lib/esm/tests/api_tests/phone_tree_enduser_condition.test.d.ts.map +1 -0
  44. package/lib/esm/tests/api_tests/phone_tree_enduser_condition.test.js +233 -0
  45. package/lib/esm/tests/api_tests/phone_tree_enduser_condition.test.js.map +1 -0
  46. package/lib/esm/tests/api_tests/send_message_model.test.d.ts.map +1 -0
  47. package/lib/esm/tests/api_tests/send_message_model.test.js.map +1 -0
  48. package/lib/esm/tests/tests.d.ts.map +1 -1
  49. package/lib/esm/tests/tests.js +148 -132
  50. package/lib/esm/tests/tests.js.map +1 -1
  51. package/lib/tsconfig.tsbuildinfo +1 -1
  52. package/package.json +10 -10
  53. package/src/sdk.ts +4 -0
  54. package/src/tests/api_tests/calendar_event_references_update.test.ts +108 -0
  55. package/src/tests/api_tests/formsort_header_auth.test.ts +179 -0
  56. package/src/tests/api_tests/phone_calls_cold_transfer.test.ts +113 -0
  57. package/src/tests/api_tests/phone_tree_enduser_condition.test.ts +174 -0
  58. package/src/tests/tests.ts +8 -0
  59. package/test_generated.pdf +0 -0
@@ -0,0 +1,168 @@
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, EnduserSession } from "../../sdk";
39
+ import { async_test, log_header, } from "@tellescope/testing";
40
+ import { setup_tests, authenticate_enduser_via_token } from "../setup";
41
+ var host = process.env.API_URL || 'http://localhost:8080';
42
+ var businessId = '60398b1131a295e64f084ff6';
43
+ /**
44
+ * CU-86e2dvrn9: calendar_events.references switched from updatesDisabled to
45
+ * enduserUpdatesDisabled (schema.ts), mirroring the Enduser references behavior:
46
+ * - staff / API-key sessions may update references (e.g. to set or clear
47
+ * external appointment IDs like stale Elation references)
48
+ * - enduser (patient) sessions remain blocked — required because endusers DO
49
+ * have update access on calendar_events they attend (for cancelling)
50
+ */
51
+ export var calendar_event_references_update_tests = function (_a) {
52
+ var sdk = _a.sdk;
53
+ return __awaiter(void 0, void 0, void 0, function () {
54
+ var enduserId, eventId, enduser, event_1, enduserSDK_1, staffReferences_1, _b, _c;
55
+ return __generator(this, function (_d) {
56
+ switch (_d.label) {
57
+ case 0:
58
+ log_header("Calendar Event References Update (enduserUpdatesDisabled)");
59
+ _d.label = 1;
60
+ case 1:
61
+ _d.trys.push([1, , 10, 19]);
62
+ return [4 /*yield*/, sdk.api.endusers.createOne({
63
+ email: "references-update-".concat(Date.now(), "@example.com"),
64
+ fname: 'References',
65
+ lname: 'UpdateTest',
66
+ })];
67
+ case 2:
68
+ enduser = _d.sent();
69
+ enduserId = enduser.id;
70
+ return [4 /*yield*/, sdk.api.calendar_events.createOne({
71
+ title: "References Update Test Event",
72
+ durationInMinutes: 30,
73
+ startTimeInMS: Date.now(),
74
+ attendees: [{ id: enduser.id, type: 'enduser' }],
75
+ })];
76
+ case 3:
77
+ event_1 = _d.sent();
78
+ eventId = event_1.id;
79
+ enduserSDK_1 = new EnduserSession({ host: host, businessId: businessId });
80
+ return [4 /*yield*/, authenticate_enduser_via_token(sdk, enduserSDK_1, { id: enduser.id })
81
+ // ---- Staff/API session can update references ----
82
+ ];
83
+ case 4:
84
+ _d.sent();
85
+ staffReferences_1 = [{ type: 'Elation', id: 'elation-appointment-123' }];
86
+ return [4 /*yield*/, async_test('staff can update calendar_events.references', function () { return sdk.api.calendar_events.updateOne(event_1.id, { references: staffReferences_1 }); }, { onResult: function (e) { var _a; return ((_a = e.references) === null || _a === void 0 ? void 0 : _a.length) === 1 && e.references[0].type === 'Elation' && e.references[0].id === 'elation-appointment-123'; } })];
87
+ case 5:
88
+ _d.sent();
89
+ return [4 /*yield*/, async_test('staff references update persisted', function () { return sdk.api.calendar_events.getOne(event_1.id); }, { onResult: function (e) { var _a; return ((_a = e.references) === null || _a === void 0 ? void 0 : _a.length) === 1 && e.references[0].type === 'Elation' && e.references[0].id === 'elation-appointment-123'; } })
90
+ // ---- Enduser session (attendee with update access) is still blocked on references ----
91
+ ];
92
+ case 6:
93
+ _d.sent();
94
+ // ---- Enduser session (attendee with update access) is still blocked on references ----
95
+ return [4 /*yield*/, async_test('enduser cannot update calendar_events.references', function () { return enduserSDK_1.api.calendar_events.updateOne(event_1.id, { references: [{ type: 'Attacker', id: 'attacker-reference' }] }); }, { shouldError: true, onError: function (e) { return e.message === "references cannot be updated by endusers"; } })];
96
+ case 7:
97
+ // ---- Enduser session (attendee with update access) is still blocked on references ----
98
+ _d.sent();
99
+ return [4 /*yield*/, async_test('rejected enduser references update did not persist', function () { return sdk.api.calendar_events.getOne(event_1.id); }, { onResult: function (e) { var _a; return ((_a = e.references) === null || _a === void 0 ? void 0 : _a.length) === 1 && e.references[0].type === 'Elation' && e.references[0].id === 'elation-appointment-123'; } })
100
+ // ---- Positive control: the guard is field-scoped — enduser can still cancel the event ----
101
+ ];
102
+ case 8:
103
+ _d.sent();
104
+ // ---- Positive control: the guard is field-scoped — enduser can still cancel the event ----
105
+ return [4 /*yield*/, async_test('enduser can still perform allowed update (cancelledAt)', function () { return enduserSDK_1.api.calendar_events.updateOne(event_1.id, { cancelledAt: new Date() }); }, { onResult: function (e) { return !!e.cancelledAt; } })];
106
+ case 9:
107
+ // ---- Positive control: the guard is field-scoped — enduser can still cancel the event ----
108
+ _d.sent();
109
+ return [3 /*break*/, 19];
110
+ case 10:
111
+ if (!eventId) return [3 /*break*/, 14];
112
+ _d.label = 11;
113
+ case 11:
114
+ _d.trys.push([11, 13, , 14]);
115
+ return [4 /*yield*/, sdk.api.calendar_events.deleteOne(eventId)];
116
+ case 12:
117
+ _d.sent();
118
+ return [3 /*break*/, 14];
119
+ case 13:
120
+ _b = _d.sent();
121
+ return [3 /*break*/, 14];
122
+ case 14:
123
+ if (!enduserId) return [3 /*break*/, 18];
124
+ _d.label = 15;
125
+ case 15:
126
+ _d.trys.push([15, 17, , 18]);
127
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(enduserId)];
128
+ case 16:
129
+ _d.sent();
130
+ return [3 /*break*/, 18];
131
+ case 17:
132
+ _c = _d.sent();
133
+ return [3 /*break*/, 18];
134
+ case 18: return [7 /*endfinally*/];
135
+ case 19: return [2 /*return*/];
136
+ }
137
+ });
138
+ });
139
+ };
140
+ // Allow running this test file independently
141
+ if (require.main === module) {
142
+ console.log("\uD83C\uDF10 Using API URL: ".concat(host));
143
+ var sdk_1 = new Session({ host: host });
144
+ var sdkNonAdmin_1 = new Session({ host: host });
145
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
146
+ return __generator(this, function (_a) {
147
+ switch (_a.label) {
148
+ case 0: return [4 /*yield*/, setup_tests(sdk_1, sdkNonAdmin_1)];
149
+ case 1:
150
+ _a.sent();
151
+ return [4 /*yield*/, calendar_event_references_update_tests({ sdk: sdk_1, sdkNonAdmin: sdkNonAdmin_1 })];
152
+ case 2:
153
+ _a.sent();
154
+ return [2 /*return*/];
155
+ }
156
+ });
157
+ }); };
158
+ runTests()
159
+ .then(function () {
160
+ console.log("✅ Calendar event references update test suite completed successfully");
161
+ process.exit(0);
162
+ })
163
+ .catch(function (error) {
164
+ console.error("❌ Calendar event references update test suite failed:", error);
165
+ process.exit(1);
166
+ });
167
+ }
168
+ //# sourceMappingURL=calendar_event_references_update.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar_event_references_update.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/calendar_event_references_update.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Session } from "../../sdk";
2
+ export declare const formsort_header_auth_tests: ({ sdk, sdkNonAdmin }: {
3
+ sdk: Session;
4
+ sdkNonAdmin: Session;
5
+ }) => Promise<void>;
6
+ //# sourceMappingURL=formsort_header_auth.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formsort_header_auth.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/formsort_header_auth.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAYnC,eAAO,MAAM,0BAA0B;SAAwC,OAAO;iBAAe,OAAO;mBA6I3G,CAAA"}
@@ -0,0 +1,214 @@
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 axios from "axios";
39
+ import { Session } from "../../sdk";
40
+ import { log_header, async_test, assert } from "@tellescope/testing";
41
+ import { setup_tests } from "../setup";
42
+ var host = process.env.API_URL || "http://localhost:8080";
43
+ // same seeded test API key used by formsort_tests (tests.ts)
44
+ var TEST_API_KEY = "9d4f9dff00f60df2690a16da2cb848f289b447614ad9bef850e54af09a1fbf7a";
45
+ // seeded second-tenant key (sdkOther in tests.ts) — valid, but for a different organization
46
+ var OTHER_TENANT_API_KEY = "ba745e25162bb95a795c5fa1af70df188d93c4d3aac9c48b34a5c8c9dd7b80f7";
47
+ var TEST_EMAIL = "formsort-header-auth@tellescope.com";
48
+ export var formsort_header_auth_tests = function (_a) {
49
+ var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
50
+ return __awaiter(void 0, void 0, void 0, function () {
51
+ var form, buildUrl, bodyFor, formResponseIds, headerAuthResult_1, pathAuthResult, bearerFallthroughResult, aliasResult, emptyValueResult, singleTokenResult, _i, formResponseIds_1, id, err_1, enduser, err_2, err_3;
52
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
53
+ return __generator(this, function (_q) {
54
+ switch (_q.label) {
55
+ case 0:
56
+ log_header("FormSort Header Auth Tests");
57
+ return [4 /*yield*/, sdk.api.forms.createOne({ title: "FormSort Header Auth" })];
58
+ case 1:
59
+ form = _q.sent();
60
+ buildUrl = function (route, pathSegment) {
61
+ var url = new URL("".concat(host, "/v1/webhooks/").concat(route, "/").concat(pathSegment));
62
+ url.searchParams.set('formId', form.id);
63
+ url.searchParams.set('returnJSON', 'true');
64
+ return url.toString();
65
+ };
66
+ bodyFor = function (responder_uuid) { return ({
67
+ answers: [{ key: 'email', value: TEST_EMAIL }],
68
+ responder_uuid: responder_uuid,
69
+ finalized: true,
70
+ }); };
71
+ formResponseIds = [];
72
+ _q.label = 2;
73
+ case 2:
74
+ _q.trys.push([2, , 13, 27]);
75
+ return [4 /*yield*/, axios.post(buildUrl('formsort', 'key-in-header'), bodyFor("fha-1"), { headers: { Authorization: "API_KEY ".concat(TEST_API_KEY) } })];
76
+ case 3:
77
+ headerAuthResult_1 = _q.sent();
78
+ assert(headerAuthResult_1.status === 200 && !!((_b = headerAuthResult_1.data) === null || _b === void 0 ? void 0 : _b.formResponseId) && !!((_c = headerAuthResult_1.data) === null || _c === void 0 ? void 0 : _c.enduserId), "Header auth failed: ".concat(headerAuthResult_1.status, " ").concat(JSON.stringify(headerAuthResult_1.data)), "Valid API_KEY header authenticates");
79
+ if ((_d = headerAuthResult_1.data) === null || _d === void 0 ? void 0 : _d.formResponseId)
80
+ formResponseIds.push(headerAuthResult_1.data.formResponseId);
81
+ return [4 /*yield*/, async_test("Form response created via header auth is retrievable", function () { return sdk.api.form_responses.getOne(headerAuthResult_1.data.formResponseId); }, { onResult: function (fr) { return fr.formId === form.id && fr.source === 'Formsort' && !!fr.submittedAt; } })
82
+ // 2. Invalid key in header rejected, even with a valid key in the path (header takes precedence)
83
+ ];
84
+ case 4:
85
+ _q.sent();
86
+ // 2. Invalid key in header rejected, even with a valid key in the path (header takes precedence)
87
+ return [4 /*yield*/, async_test("Invalid API_KEY header rejected despite valid key in path", function () { return axios.post(buildUrl('formsort', TEST_API_KEY), bodyFor("fha-2"), { headers: { Authorization: "API_KEY not-a-real-key" } }); }, { shouldError: true, onError: function (e) { var _a; return ((_a = e.response) === null || _a === void 0 ? void 0 : _a.status) === 401; } })
88
+ // 3. Back-compat: valid key in path, no Authorization header
89
+ ];
90
+ case 5:
91
+ // 2. Invalid key in header rejected, even with a valid key in the path (header takes precedence)
92
+ _q.sent();
93
+ return [4 /*yield*/, axios.post(buildUrl('formsort', TEST_API_KEY), bodyFor("fha-3"))];
94
+ case 6:
95
+ pathAuthResult = _q.sent();
96
+ assert(pathAuthResult.status === 200 && !!((_e = pathAuthResult.data) === null || _e === void 0 ? void 0 : _e.formResponseId), "Path auth failed: ".concat(pathAuthResult.status, " ").concat(JSON.stringify(pathAuthResult.data)), "Path-segment API key still authenticates (no header)");
97
+ if ((_f = pathAuthResult.data) === null || _f === void 0 ? void 0 : _f.formResponseId)
98
+ formResponseIds.push(pathAuthResult.data.formResponseId);
99
+ return [4 /*yield*/, axios.post(buildUrl('formsort', TEST_API_KEY), bodyFor("fha-4"), { headers: { Authorization: 'Bearer unrelated-token' } })];
100
+ case 7:
101
+ bearerFallthroughResult = _q.sent();
102
+ assert(bearerFallthroughResult.status === 200 && !!((_g = bearerFallthroughResult.data) === null || _g === void 0 ? void 0 : _g.formResponseId), "Bearer fallthrough failed: ".concat(bearerFallthroughResult.status, " ").concat(JSON.stringify(bearerFallthroughResult.data)), "Non-API_KEY Authorization scheme falls through to path key");
103
+ if ((_h = bearerFallthroughResult.data) === null || _h === void 0 ? void 0 : _h.formResponseId)
104
+ formResponseIds.push(bearerFallthroughResult.data.formResponseId);
105
+ // 5. No valid key in header or path
106
+ return [4 /*yield*/, async_test("No valid key anywhere rejected", function () { return axios.post(buildUrl('formsort', 'not-a-real-key'), bodyFor("fha-5")); }, { shouldError: true, onError: function (e) { var _a; return ((_a = e.response) === null || _a === void 0 ? void 0 : _a.status) === 401; } })
107
+ // 6. Alias route accepts header auth too
108
+ ];
109
+ case 8:
110
+ // 5. No valid key in header or path
111
+ _q.sent();
112
+ return [4 /*yield*/, axios.post(buildUrl('form-ingestion', 'key-in-header'), bodyFor("fha-6"), { headers: { Authorization: "API_KEY ".concat(TEST_API_KEY) } })];
113
+ case 9:
114
+ aliasResult = _q.sent();
115
+ assert(aliasResult.status === 200 && !!((_j = aliasResult.data) === null || _j === void 0 ? void 0 : _j.formResponseId), "form-ingestion header auth failed: ".concat(aliasResult.status, " ").concat(JSON.stringify(aliasResult.data)), "form-ingestion alias accepts API_KEY header");
116
+ if ((_k = aliasResult.data) === null || _k === void 0 ? void 0 : _k.formResponseId)
117
+ formResponseIds.push(aliasResult.data.formResponseId);
118
+ return [4 /*yield*/, axios.post(buildUrl('formsort', TEST_API_KEY), bodyFor("fha-7"), { headers: { Authorization: 'API_KEY' } })];
119
+ case 10:
120
+ emptyValueResult = _q.sent();
121
+ assert(emptyValueResult.status === 200 && !!((_l = emptyValueResult.data) === null || _l === void 0 ? void 0 : _l.formResponseId), "Empty-value header fallthrough failed: ".concat(emptyValueResult.status, " ").concat(JSON.stringify(emptyValueResult.data)), "API_KEY scheme without value falls through to path key");
122
+ if ((_m = emptyValueResult.data) === null || _m === void 0 ? void 0 : _m.formResponseId)
123
+ formResponseIds.push(emptyValueResult.data.formResponseId);
124
+ return [4 /*yield*/, axios.post(buildUrl('formsort', TEST_API_KEY), bodyFor("fha-8"), { headers: { Authorization: 'some-opaque-token' } })];
125
+ case 11:
126
+ singleTokenResult = _q.sent();
127
+ assert(singleTokenResult.status === 200 && !!((_o = singleTokenResult.data) === null || _o === void 0 ? void 0 : _o.formResponseId), "Single-token header fallthrough failed: ".concat(singleTokenResult.status, " ").concat(JSON.stringify(singleTokenResult.data)), "Schemeless Authorization header falls through to path key");
128
+ if ((_p = singleTokenResult.data) === null || _p === void 0 ? void 0 : _p.formResponseId)
129
+ formResponseIds.push(singleTokenResult.data.formResponseId);
130
+ // 9. When header and path both hold VALID keys, the header key's organization scopes the request:
131
+ // the formId belongs to the primary tenant, so an other-tenant header key must fail form lookup (400),
132
+ // proving the path key's org is not used
133
+ return [4 /*yield*/, async_test("Valid other-tenant header key overrides valid path key (org scoping)", function () { return axios.post(buildUrl('formsort', TEST_API_KEY), bodyFor("fha-9"), { headers: { Authorization: "API_KEY ".concat(OTHER_TENANT_API_KEY) } }); }, { shouldError: true, onError: function (e) { var _a, _b; return ((_a = e.response) === null || _a === void 0 ? void 0 : _a.status) === 400 && ((_b = e.response) === null || _b === void 0 ? void 0 : _b.data) === 'formId Invalid'; } })];
134
+ case 12:
135
+ // 9. When header and path both hold VALID keys, the header key's organization scopes the request:
136
+ // the formId belongs to the primary tenant, so an other-tenant header key must fail form lookup (400),
137
+ // proving the path key's org is not used
138
+ _q.sent();
139
+ return [3 /*break*/, 27];
140
+ case 13:
141
+ _i = 0, formResponseIds_1 = formResponseIds;
142
+ _q.label = 14;
143
+ case 14:
144
+ if (!(_i < formResponseIds_1.length)) return [3 /*break*/, 19];
145
+ id = formResponseIds_1[_i];
146
+ _q.label = 15;
147
+ case 15:
148
+ _q.trys.push([15, 17, , 18]);
149
+ return [4 /*yield*/, sdk.api.form_responses.deleteOne(id)];
150
+ case 16:
151
+ _q.sent();
152
+ return [3 /*break*/, 18];
153
+ case 17:
154
+ err_1 = _q.sent();
155
+ return [3 /*break*/, 18];
156
+ case 18:
157
+ _i++;
158
+ return [3 /*break*/, 14];
159
+ case 19:
160
+ _q.trys.push([19, 22, , 23]);
161
+ return [4 /*yield*/, sdk.api.endusers.getOne({ email: TEST_EMAIL })];
162
+ case 20:
163
+ enduser = _q.sent();
164
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser.id)];
165
+ case 21:
166
+ _q.sent();
167
+ return [3 /*break*/, 23];
168
+ case 22:
169
+ err_2 = _q.sent();
170
+ return [3 /*break*/, 23];
171
+ case 23:
172
+ _q.trys.push([23, 25, , 26]);
173
+ return [4 /*yield*/, sdk.api.forms.deleteOne(form.id)];
174
+ case 24:
175
+ _q.sent();
176
+ return [3 /*break*/, 26];
177
+ case 25:
178
+ err_3 = _q.sent();
179
+ return [3 /*break*/, 26];
180
+ case 26: return [7 /*endfinally*/];
181
+ case 27: return [2 /*return*/];
182
+ }
183
+ });
184
+ });
185
+ };
186
+ // Allow running this test file independently
187
+ if (require.main === module) {
188
+ console.log("\uD83C\uDF10 Using API URL: ".concat(host));
189
+ var sdk_1 = new Session({ host: host });
190
+ var sdkNonAdmin_1 = new Session({ host: host });
191
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
192
+ return __generator(this, function (_a) {
193
+ switch (_a.label) {
194
+ case 0: return [4 /*yield*/, setup_tests(sdk_1, sdkNonAdmin_1)];
195
+ case 1:
196
+ _a.sent();
197
+ return [4 /*yield*/, formsort_header_auth_tests({ sdk: sdk_1, sdkNonAdmin: sdkNonAdmin_1 })];
198
+ case 2:
199
+ _a.sent();
200
+ return [2 /*return*/];
201
+ }
202
+ });
203
+ }); };
204
+ runTests()
205
+ .then(function () {
206
+ console.log("✅ FormSort header auth tests completed successfully");
207
+ process.exit(0);
208
+ })
209
+ .catch(function (error) {
210
+ console.error("❌ FormSort header auth tests failed:", error);
211
+ process.exit(1);
212
+ });
213
+ }
214
+ //# sourceMappingURL=formsort_header_auth.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formsort_header_auth.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/formsort_header_auth.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Session } from "../../sdk";
2
+ export declare const phone_calls_cold_transfer_tests: ({ sdk, sdkNonAdmin }: {
3
+ sdk: Session;
4
+ sdkNonAdmin: Session;
5
+ }) => Promise<void>;
6
+ //# sourceMappingURL=phone_calls_cold_transfer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone_calls_cold_transfer.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/phone_calls_cold_transfer.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAcnC,eAAO,MAAM,+BAA+B;SAAwC,OAAO;iBAAe,OAAO;mBA0EhH,CAAA"}
@@ -0,0 +1,175 @@
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
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
38
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
39
+ if (ar || !(i in from)) {
40
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
41
+ ar[i] = from[i];
42
+ }
43
+ }
44
+ return to.concat(ar || Array.prototype.slice.call(from));
45
+ };
46
+ require('source-map-support').install();
47
+ import { Session } from "../../sdk";
48
+ import { async_test, handleAnyError, log_header, } from "@tellescope/testing";
49
+ import { setup_tests } from "../setup";
50
+ var host = process.env.API_URL || 'http://localhost:8080';
51
+ var NONEXISTENT_MONGO_ID = '60398b1131a295e64f084fff';
52
+ // Validation-path tests for the cold transfer endpoint. All assertions below hit
53
+ // validations that run before any Twilio access, so no Twilio config is needed.
54
+ export var phone_calls_cold_transfer_tests = function (_a) {
55
+ var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
56
+ return __awaiter(void 0, void 0, void 0, function () {
57
+ var enduser, targetUsers, inboundCall_1, outboundCall_1, disabledTargetUser_1;
58
+ return __generator(this, function (_b) {
59
+ switch (_b.label) {
60
+ case 0:
61
+ log_header("Phone Calls Cold Transfer Tests");
62
+ return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'Cold', lname: 'Transfer' })];
63
+ case 1:
64
+ enduser = _b.sent();
65
+ targetUsers = [];
66
+ _b.label = 2;
67
+ case 2:
68
+ _b.trys.push([2, , 12, 14]);
69
+ return [4 /*yield*/, sdk.api.phone_calls.createOne({
70
+ enduserId: enduser.id,
71
+ inbound: true,
72
+ externalId: 'CAcoldtransfertestinbound000000001',
73
+ from: '+15550001111',
74
+ to: '+15550002222',
75
+ userId: sdk.userInfo.id,
76
+ })];
77
+ case 3:
78
+ inboundCall_1 = _b.sent();
79
+ return [4 /*yield*/, sdk.api.phone_calls.createOne({
80
+ enduserId: enduser.id,
81
+ inbound: false,
82
+ externalId: 'CAcoldtransfertestoutbound00000001',
83
+ from: '+15550002222',
84
+ to: '+15550001111',
85
+ userId: sdk.userInfo.id,
86
+ })
87
+ // throwaway target users (never modify existing users' roles)
88
+ ];
89
+ case 4:
90
+ outboundCall_1 = _b.sent();
91
+ return [4 /*yield*/, sdk.api.users.createOne({
92
+ email: 'cold.transfer.disabled@tellescope.com',
93
+ verifiedEmail: true,
94
+ notificationEmailsDisabled: true,
95
+ disableIncomingPhoneCalls: true,
96
+ })];
97
+ case 5:
98
+ disabledTargetUser_1 = _b.sent();
99
+ targetUsers.push(disabledTargetUser_1);
100
+ return [4 /*yield*/, async_test("cold_transfer: cannot transfer to yourself", function () { return sdk.api.phone_calls.cold_transfer({ callSid: inboundCall_1.externalId, targetUserId: sdk.userInfo.id }); }, { shouldError: true, onError: function (e) { return e.message === "Cannot transfer a call to yourself"; } })];
101
+ case 6:
102
+ _b.sent();
103
+ return [4 /*yield*/, async_test("cold_transfer: bogus callSid rejected", function () { return sdk.api.phone_calls.cold_transfer({ callSid: 'CAdoesnotexist0000000000000000000', targetUserId: disabledTargetUser_1.id }); }, { shouldError: true, onError: function (e) { return e.message === "Call not found"; } })];
104
+ case 7:
105
+ _b.sent();
106
+ return [4 /*yield*/, async_test("cold_transfer: outbound calls rejected", function () { return sdk.api.phone_calls.cold_transfer({ callSid: outboundCall_1.externalId, targetUserId: disabledTargetUser_1.id }); }, { shouldError: true, onError: function (e) { return e.message === "Only inbound calls can be transferred"; } })
107
+ // conferenceId is not settable via the public API (only set internally by conference webhooks),
108
+ // so the "Conference calls cannot be transferred" branch is covered by manual E2E testing only
109
+ ];
110
+ case 8:
111
+ _b.sent();
112
+ // conferenceId is not settable via the public API (only set internally by conference webhooks),
113
+ // so the "Conference calls cannot be transferred" branch is covered by manual E2E testing only
114
+ return [4 /*yield*/, async_test("cold_transfer: nonexistent target user rejected", function () { return sdk.api.phone_calls.cold_transfer({ callSid: inboundCall_1.externalId, targetUserId: NONEXISTENT_MONGO_ID }); }, { shouldError: true, onError: function (e) { return e.message === "Target user not found"; } })];
115
+ case 9:
116
+ // conferenceId is not settable via the public API (only set internally by conference webhooks),
117
+ // so the "Conference calls cannot be transferred" branch is covered by manual E2E testing only
118
+ _b.sent();
119
+ return [4 /*yield*/, async_test("cold_transfer: target user with incoming calls disabled rejected", function () { return sdk.api.phone_calls.cold_transfer({ callSid: inboundCall_1.externalId, targetUserId: disabledTargetUser_1.id }); }, { shouldError: true, onError: function (e) { return e.message === "Target user has incoming calls disabled"; } })
120
+ // non-admin either can't see the call (Call not found) or is stopped by a later
121
+ // validation (target has incoming calls disabled) — errors on every path
122
+ ];
123
+ case 10:
124
+ _b.sent();
125
+ // non-admin either can't see the call (Call not found) or is stopped by a later
126
+ // validation (target has incoming calls disabled) — errors on every path
127
+ return [4 /*yield*/, async_test("cold_transfer: non-admin cannot transfer an inaccessible call", function () { return sdkNonAdmin.api.phone_calls.cold_transfer({ callSid: inboundCall_1.externalId, targetUserId: disabledTargetUser_1.id }); }, handleAnyError)];
128
+ case 11:
129
+ // non-admin either can't see the call (Call not found) or is stopped by a later
130
+ // validation (target has incoming calls disabled) — errors on every path
131
+ _b.sent();
132
+ return [3 /*break*/, 14];
133
+ case 12:
134
+ // deleting the enduser cascades deletion of its phone_calls records
135
+ return [4 /*yield*/, Promise.all(__spreadArray([
136
+ sdk.api.endusers.deleteOne(enduser.id)
137
+ ], targetUsers.map(function (u) { return sdk.api.users.deleteOne(u.id); }), true)).catch(console.error)];
138
+ case 13:
139
+ // deleting the enduser cascades deletion of its phone_calls records
140
+ _b.sent();
141
+ return [7 /*endfinally*/];
142
+ case 14: return [2 /*return*/];
143
+ }
144
+ });
145
+ });
146
+ };
147
+ // Allow running this test file independently
148
+ if (require.main === module) {
149
+ console.log("\uD83C\uDF10 Using API URL: ".concat(host));
150
+ var sdk_1 = new Session({ host: host });
151
+ var sdkNonAdmin_1 = new Session({ host: host });
152
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
153
+ return __generator(this, function (_a) {
154
+ switch (_a.label) {
155
+ case 0: return [4 /*yield*/, setup_tests(sdk_1, sdkNonAdmin_1)];
156
+ case 1:
157
+ _a.sent();
158
+ return [4 /*yield*/, phone_calls_cold_transfer_tests({ sdk: sdk_1, sdkNonAdmin: sdkNonAdmin_1 })];
159
+ case 2:
160
+ _a.sent();
161
+ return [2 /*return*/];
162
+ }
163
+ });
164
+ }); };
165
+ runTests()
166
+ .then(function () {
167
+ console.log("✅ Phone calls cold transfer test suite completed successfully");
168
+ process.exit(0);
169
+ })
170
+ .catch(function (error) {
171
+ console.error("❌ Phone calls cold transfer test suite failed:", error);
172
+ process.exit(1);
173
+ });
174
+ }
175
+ //# sourceMappingURL=phone_calls_cold_transfer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone_calls_cold_transfer.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/phone_calls_cold_transfer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Session } from "../../sdk";
2
+ export declare const phone_tree_enduser_condition_tests: ({ sdk, sdkNonAdmin }: {
3
+ sdk: Session;
4
+ sdkNonAdmin: Session;
5
+ }) => Promise<void>;
6
+ //# sourceMappingURL=phone_tree_enduser_condition.test.d.ts.map