@tellescope/sdk 1.256.0 → 1.256.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 (36) hide show
  1. package/lib/cjs/tests/api_tests/beluga_trigger_refill.test.d.ts +6 -0
  2. package/lib/cjs/tests/api_tests/beluga_trigger_refill.test.d.ts.map +1 -0
  3. package/lib/cjs/tests/api_tests/beluga_trigger_refill.test.js +224 -0
  4. package/lib/cjs/tests/api_tests/beluga_trigger_refill.test.js.map +1 -0
  5. package/lib/cjs/tests/api_tests/start_ai_conversation.test.d.ts +6 -0
  6. package/lib/cjs/tests/api_tests/start_ai_conversation.test.d.ts.map +1 -0
  7. package/lib/cjs/tests/api_tests/start_ai_conversation.test.js +351 -0
  8. package/lib/cjs/tests/api_tests/start_ai_conversation.test.js.map +1 -0
  9. package/lib/cjs/tests/tests.d.ts.map +1 -1
  10. package/lib/cjs/tests/tests.js +201 -185
  11. package/lib/cjs/tests/tests.js.map +1 -1
  12. package/lib/esm/enduser.d.ts +1 -0
  13. package/lib/esm/enduser.d.ts.map +1 -1
  14. package/lib/esm/sdk.d.ts +3 -2
  15. package/lib/esm/sdk.d.ts.map +1 -1
  16. package/lib/esm/session.d.ts +1 -0
  17. package/lib/esm/session.d.ts.map +1 -1
  18. package/lib/esm/tests/api_tests/beluga_trigger_refill.test.d.ts +6 -0
  19. package/lib/esm/tests/api_tests/beluga_trigger_refill.test.d.ts.map +1 -0
  20. package/lib/esm/tests/api_tests/beluga_trigger_refill.test.js +220 -0
  21. package/lib/esm/tests/api_tests/beluga_trigger_refill.test.js.map +1 -0
  22. package/lib/esm/tests/api_tests/start_ai_conversation.test.d.ts +6 -0
  23. package/lib/esm/tests/api_tests/start_ai_conversation.test.d.ts.map +1 -0
  24. package/lib/esm/tests/api_tests/start_ai_conversation.test.js +347 -0
  25. package/lib/esm/tests/api_tests/start_ai_conversation.test.js.map +1 -0
  26. package/lib/esm/tests/tests.d.ts.map +1 -1
  27. package/lib/esm/tests/tests.js +201 -185
  28. package/lib/esm/tests/tests.js.map +1 -1
  29. package/lib/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +8 -8
  31. package/src/tests/api_tests/beluga_trigger_refill.test.ts +152 -0
  32. package/src/tests/api_tests/security/F-0015-webhook-outbound-ssrf.test.ts +292 -0
  33. package/src/tests/api_tests/security/F-0025-proxy-image-unauth-ssrf.test.ts +179 -0
  34. package/src/tests/api_tests/start_ai_conversation.test.ts +256 -0
  35. package/src/tests/tests.ts +8 -0
  36. package/test_generated.pdf +0 -0
@@ -0,0 +1,6 @@
1
+ import { Session } from "../../sdk";
2
+ export declare const beluga_trigger_refill_tests: ({ sdk, sdkNonAdmin }: {
3
+ sdk: Session;
4
+ sdkNonAdmin: Session;
5
+ }) => Promise<void>;
6
+ //# sourceMappingURL=beluga_trigger_refill.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beluga_trigger_refill.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/beluga_trigger_refill.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiBnC,eAAO,MAAM,2BAA2B;SAAuC,OAAO;iBAAe,OAAO;mBA+G3G,CAAA"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.beluga_trigger_refill_tests = void 0;
40
+ require('source-map-support').install();
41
+ var sdk_1 = require("../../sdk");
42
+ var testing_1 = require("@tellescope/testing");
43
+ var setup_1 = require("../setup");
44
+ var host = process.env.API_URL || 'http://localhost:8080';
45
+ // Beluga Trigger Refill journey action tests (CU-86e2gbv7y).
46
+ //
47
+ // Validator-acceptance only: verifies that automation steps configured with the new
48
+ // belugaTriggerRefill action (org-mapping and inline-medIds variants) pass validation, and that
49
+ // invalid shapes are rejected. No live Beluga call is made — external/triggerRefill requires
50
+ // sandbox credentials, and the process endpoint's guard branches (missing integration, missing
51
+ // preferences) mirror the already-tested belugaAutoRx/belugaUpdateVisit handlers.
52
+ var beluga_trigger_refill_tests = function (_a) {
53
+ var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
54
+ return __awaiter(void 0, void 0, void 0, function () {
55
+ var journeyId, formId, stepIds, journey_1, form_1, _i, stepIds_1, id;
56
+ return __generator(this, function (_b) {
57
+ switch (_b.label) {
58
+ case 0:
59
+ (0, testing_1.log_header)("Beluga Trigger Refill Journey Action Tests");
60
+ stepIds = [];
61
+ _b.label = 1;
62
+ case 1:
63
+ _b.trys.push([1, , 9, 18]);
64
+ return [4 /*yield*/, sdk.api.journeys.createOne({ title: 'Beluga Trigger Refill Test Journey' })];
65
+ case 2:
66
+ journey_1 = _b.sent();
67
+ journeyId = journey_1.id;
68
+ return [4 /*yield*/, sdk.api.forms.createOne({ title: 'Beluga Trigger Refill Test Form' })];
69
+ case 3:
70
+ form_1 = _b.sent();
71
+ formId = form_1.id;
72
+ // Inline med IDs variant
73
+ return [4 /*yield*/, (0, testing_1.async_test)("belugaTriggerRefill step accepted (inline medIds)", function () { return sdk.api.automation_steps.createOne({
74
+ journeyId: journey_1.id,
75
+ events: [{ type: 'onJourneyStart', info: {} }],
76
+ action: {
77
+ type: 'belugaTriggerRefill',
78
+ info: {
79
+ formId: form_1.id,
80
+ patientPreferences: [{ medId: 'med-123' }, { medId: 'med-456' }],
81
+ customFieldName: 'Refill Medication',
82
+ },
83
+ },
84
+ }).then(function (s) { stepIds.push(s.id); return s; }); }, testing_1.passOnAnyResult)
85
+ // Organization mapping variant
86
+ ];
87
+ case 4:
88
+ // Inline med IDs variant
89
+ _b.sent();
90
+ // Organization mapping variant
91
+ return [4 /*yield*/, (0, testing_1.async_test)("belugaTriggerRefill step accepted (organization mapping)", function () { return sdk.api.automation_steps.createOne({
92
+ journeyId: journey_1.id,
93
+ events: [{ type: 'onJourneyStart', info: {} }],
94
+ action: {
95
+ type: 'belugaTriggerRefill',
96
+ info: {
97
+ formId: form_1.id,
98
+ useOrganizationMapping: true,
99
+ },
100
+ },
101
+ }).then(function (s) { stepIds.push(s.id); return s; }); }, testing_1.passOnAnyResult)
102
+ // Invalid formId (not a mongo id) rejected
103
+ ];
104
+ case 5:
105
+ // Organization mapping variant
106
+ _b.sent();
107
+ // Invalid formId (not a mongo id) rejected
108
+ return [4 /*yield*/, (0, testing_1.async_test)("belugaTriggerRefill step rejected (invalid formId)", function () { return sdk.api.automation_steps.createOne({
109
+ journeyId: journey_1.id,
110
+ events: [{ type: 'onJourneyStart', info: {} }],
111
+ action: {
112
+ type: 'belugaTriggerRefill',
113
+ info: {
114
+ formId: 'not-a-mongo-id',
115
+ patientPreferences: [{ medId: 'med-123' }],
116
+ },
117
+ },
118
+ }); }, { shouldError: true, onError: function () { return true; } })
119
+ // Missing formId rejected
120
+ ];
121
+ case 6:
122
+ // Invalid formId (not a mongo id) rejected
123
+ _b.sent();
124
+ // Missing formId rejected
125
+ return [4 /*yield*/, (0, testing_1.async_test)("belugaTriggerRefill step rejected (missing formId)", function () { return sdk.api.automation_steps.createOne({
126
+ journeyId: journey_1.id,
127
+ events: [{ type: 'onJourneyStart', info: {} }],
128
+ action: {
129
+ type: 'belugaTriggerRefill',
130
+ info: {
131
+ patientPreferences: [{ medId: 'med-123' }],
132
+ },
133
+ },
134
+ }); }, { shouldError: true, onError: function () { return true; } })
135
+ // Unexpected fields in a patient preference are stripped by objectValidator, not rejected —
136
+ // assert they never reach the stored config (the step itself is accepted)
137
+ ];
138
+ case 7:
139
+ // Missing formId rejected
140
+ _b.sent();
141
+ // Unexpected fields in a patient preference are stripped by objectValidator, not rejected —
142
+ // assert they never reach the stored config (the step itself is accepted)
143
+ return [4 /*yield*/, (0, testing_1.async_test)("belugaTriggerRefill step strips unexpected patientPreferences field", function () { return sdk.api.automation_steps.createOne({
144
+ journeyId: journey_1.id,
145
+ events: [{ type: 'onJourneyStart', info: {} }],
146
+ action: {
147
+ type: 'belugaTriggerRefill',
148
+ info: {
149
+ formId: form_1.id,
150
+ patientPreferences: [{ medId: 'med-123', pharmacyId: 'not-allowed' }],
151
+ },
152
+ },
153
+ }).then(function (s) { stepIds.push(s.id); return s; }); }, {
154
+ onResult: function (s) {
155
+ var _a;
156
+ var preference = (_a = s.action.info.patientPreferences) === null || _a === void 0 ? void 0 : _a[0];
157
+ return (preference === null || preference === void 0 ? void 0 : preference.medId) === 'med-123' && (preference === null || preference === void 0 ? void 0 : preference.pharmacyId) === undefined;
158
+ },
159
+ })];
160
+ case 8:
161
+ // Unexpected fields in a patient preference are stripped by objectValidator, not rejected —
162
+ // assert they never reach the stored config (the step itself is accepted)
163
+ _b.sent();
164
+ return [3 /*break*/, 18];
165
+ case 9:
166
+ _i = 0, stepIds_1 = stepIds;
167
+ _b.label = 10;
168
+ case 10:
169
+ if (!(_i < stepIds_1.length)) return [3 /*break*/, 13];
170
+ id = stepIds_1[_i];
171
+ return [4 /*yield*/, sdk.api.automation_steps.deleteOne(id).catch(console.error)];
172
+ case 11:
173
+ _b.sent();
174
+ _b.label = 12;
175
+ case 12:
176
+ _i++;
177
+ return [3 /*break*/, 10];
178
+ case 13:
179
+ if (!formId) return [3 /*break*/, 15];
180
+ return [4 /*yield*/, sdk.api.forms.deleteOne(formId).catch(console.error)];
181
+ case 14:
182
+ _b.sent();
183
+ _b.label = 15;
184
+ case 15:
185
+ if (!journeyId) return [3 /*break*/, 17];
186
+ return [4 /*yield*/, sdk.api.journeys.deleteOne(journeyId).catch(console.error)];
187
+ case 16:
188
+ _b.sent();
189
+ _b.label = 17;
190
+ case 17: return [7 /*endfinally*/];
191
+ case 18: return [2 /*return*/];
192
+ }
193
+ });
194
+ });
195
+ };
196
+ exports.beluga_trigger_refill_tests = beluga_trigger_refill_tests;
197
+ if (require.main === module) {
198
+ console.log("Using API URL: ".concat(host));
199
+ var sdk_2 = new sdk_1.Session({ host: host });
200
+ var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
201
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
202
+ return __generator(this, function (_a) {
203
+ switch (_a.label) {
204
+ case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
205
+ case 1:
206
+ _a.sent();
207
+ return [4 /*yield*/, (0, exports.beluga_trigger_refill_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
208
+ case 2:
209
+ _a.sent();
210
+ return [2 /*return*/];
211
+ }
212
+ });
213
+ }); };
214
+ runTests()
215
+ .then(function () {
216
+ console.log("✅ Beluga trigger refill test suite completed successfully");
217
+ process.exit(0);
218
+ })
219
+ .catch(function (error) {
220
+ console.error("❌ Beluga trigger refill test suite failed:", error);
221
+ process.exit(1);
222
+ });
223
+ }
224
+ //# sourceMappingURL=beluga_trigger_refill.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beluga_trigger_refill.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/beluga_trigger_refill.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Session } from "../../sdk";
2
+ export declare const start_ai_conversation_tests: ({ sdk, sdkNonAdmin }: {
3
+ sdk: Session;
4
+ sdkNonAdmin: Session;
5
+ }) => Promise<void>;
6
+ //# sourceMappingURL=start_ai_conversation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start_ai_conversation.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/start_ai_conversation.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAanC,eAAO,MAAM,2BAA2B;SAAwC,OAAO;iBAAe,OAAO;mBA2N5G,CAAA"}
@@ -0,0 +1,351 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ 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;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
50
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
51
+ if (ar || !(i in from)) {
52
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
53
+ ar[i] = from[i];
54
+ }
55
+ }
56
+ return to.concat(ar || Array.prototype.slice.call(from));
57
+ };
58
+ Object.defineProperty(exports, "__esModule", { value: true });
59
+ exports.start_ai_conversation_tests = void 0;
60
+ require('source-map-support').install();
61
+ var sdk_1 = require("../../sdk");
62
+ var testing_1 = require("@tellescope/testing");
63
+ var setup_1 = require("../setup");
64
+ var host = process.env.API_URL || "http://localhost:8080";
65
+ var TEST_MARKER = '__TELLESCOPE_TEST_INCOMING_SMS_AUTOMATION__';
66
+ var TEST_PHONE = '+15555555555'; // send_sms short-circuits real sends for this number
67
+ // SMS AI conversations (startAIConversation journey action).
68
+ // Runtime flows (start/supersede/takeover/inbound absorption) require the organization to have an
69
+ // SMS number configured — when it doesn't (typical dev org), those sections assert the
70
+ // configuration error path and are otherwise skipped; config validation runs everywhere.
71
+ var start_ai_conversation_tests = function (_a) {
72
+ var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
73
+ return __awaiter(void 0, void 0, void 0, function () {
74
+ var users, senderId, journey, createdEnduserIds, validInfo_1, step_1, outcomeChild, processFor, phonelessEnduser, noPhoneResult, session, resolvedOrgId_1, organization, orgHasNumber, enduser_1, result, enduser, startResult, refreshed, entry, conversation, initialMessages, outbound, secondStart, activeEntries_1, stopped, takeoverStart, _b, _c, takenOver, baselineEnduser, baselineRefreshed, baselineMessages, _i, createdEnduserIds_1, id;
75
+ var _d;
76
+ var _e, _f, _g, _h, _j, _k, _l, _m, _o;
77
+ return __generator(this, function (_p) {
78
+ switch (_p.label) {
79
+ case 0:
80
+ (0, testing_1.log_header)("Start AI Conversation (SMS Agent) Tests");
81
+ return [4 /*yield*/, sdk.api.users.getSome({})];
82
+ case 1:
83
+ users = _p.sent();
84
+ senderId = users[0].id;
85
+ return [4 /*yield*/, sdk.api.journeys.createOne({ title: 'SMS Agent Test Journey' })];
86
+ case 2:
87
+ journey = _p.sent();
88
+ createdEnduserIds = [];
89
+ _p.label = 3;
90
+ case 3:
91
+ _p.trys.push([3, , 39, 45]);
92
+ validInfo_1 = {
93
+ channel: 'SMS',
94
+ senderId: senderId,
95
+ initialMessage: 'Hello {{enduser.fname}}! Quick question for you.',
96
+ prompt: 'You are texting on behalf of Test Clinic. Answer briefly.',
97
+ outcomes: [{ value: 'resolved', description: 'The question was answered' }],
98
+ };
99
+ return [4 /*yield*/, sdk.api.automation_steps.createOne({
100
+ journeyId: journey.id,
101
+ events: [{ type: 'onJourneyStart', info: {} }],
102
+ action: { type: 'startAIConversation', info: validInfo_1 },
103
+ })];
104
+ case 4:
105
+ step_1 = _p.sent();
106
+ (0, testing_1.assert)(step_1.action.type === 'startAIConversation' && step_1.action.info.initialMessage === validInfo_1.initialMessage, 'startAIConversation step round-trip failed', 'startAIConversation step round-trips');
107
+ return [4 /*yield*/, sdk.api.automation_steps.createOne({
108
+ journeyId: journey.id,
109
+ events: [{ type: 'onAIConversationOutcome', info: { automationStepId: step_1.id, outcome: 'resolved' } }],
110
+ action: { type: 'addEnduserTags', info: { tags: ['sms-agent-resolved'] } },
111
+ })];
112
+ case 5:
113
+ outcomeChild = _p.sent();
114
+ (0, testing_1.assert)(outcomeChild.events[0].type === 'onAIConversationOutcome', 'onAIConversationOutcome event round-trip failed', 'onAIConversationOutcome event round-trips');
115
+ return [4 /*yield*/, (0, testing_1.async_test)('startAIConversation without prompt is rejected', function () { return sdk.api.automation_steps.createOne({
116
+ journeyId: journey.id,
117
+ events: [{ type: 'onJourneyStart', info: {} }],
118
+ action: { type: 'startAIConversation', info: __assign(__assign({}, validInfo_1), { prompt: undefined }) },
119
+ }); }, { shouldError: true, onError: function () { return true; } })];
120
+ case 6:
121
+ _p.sent();
122
+ return [4 /*yield*/, (0, testing_1.async_test)('startAIConversation without senderId is rejected', function () { return sdk.api.automation_steps.createOne({
123
+ journeyId: journey.id,
124
+ events: [{ type: 'onJourneyStart', info: {} }],
125
+ action: { type: 'startAIConversation', info: __assign(__assign({}, validInfo_1), { senderId: undefined }) },
126
+ }); }, { shouldError: true, onError: function () { return true; } })];
127
+ case 7:
128
+ _p.sent();
129
+ return [4 /*yield*/, (0, testing_1.async_test)('startAIConversation without initialMessage is rejected', function () { return sdk.api.automation_steps.createOne({
130
+ journeyId: journey.id,
131
+ events: [{ type: 'onJourneyStart', info: {} }],
132
+ action: { type: 'startAIConversation', info: __assign(__assign({}, validInfo_1), { initialMessage: undefined }) },
133
+ }); }, { shouldError: true, onError: function () { return true; } })];
134
+ case 8:
135
+ _p.sent();
136
+ return [4 /*yield*/, (0, testing_1.async_test)('startAIConversation with invalid tool is rejected', function () { return sdk.api.automation_steps.createOne({
137
+ journeyId: journey.id,
138
+ events: [{ type: 'onJourneyStart', info: {} }],
139
+ action: { type: 'startAIConversation', info: __assign(__assign({}, validInfo_1), { tools: [{ type: 'Submit Form', info: { formId: 'not-an-id' } }] }) },
140
+ }); }, { shouldError: true, onError: function () { return true; } })
141
+ /*************** Runtime: the process endpoint ***************/
142
+ ];
143
+ case 9:
144
+ _p.sent();
145
+ processFor = function (enduserId) { return __awaiter(void 0, void 0, void 0, function () {
146
+ var automatedAction;
147
+ return __generator(this, function (_a) {
148
+ switch (_a.label) {
149
+ case 0: return [4 /*yield*/, sdk.api.automated_actions.createOne({
150
+ enduserId: enduserId,
151
+ journeyId: journey.id,
152
+ automationStepId: step_1.id,
153
+ event: { type: 'onJourneyStart', info: {} },
154
+ action: { type: 'startAIConversation', info: validInfo_1 },
155
+ status: 'active',
156
+ processAfter: Date.now(),
157
+ })];
158
+ case 1:
159
+ automatedAction = _a.sent();
160
+ return [2 /*return*/, sdk.api.automated_actions.process({ automatedActionId: automatedAction.id })];
161
+ }
162
+ });
163
+ }); };
164
+ return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'sms-agent-nophone' })];
165
+ case 10:
166
+ phonelessEnduser = _p.sent();
167
+ createdEnduserIds.push(phonelessEnduser.id);
168
+ return [4 /*yield*/, processFor(phonelessEnduser.id)];
169
+ case 11:
170
+ noPhoneResult = _p.sent();
171
+ (0, testing_1.assert)(!noPhoneResult.success && !!noPhoneResult.error, 'phoneless start should fail with an error', 'start action errors for a contact without a phone');
172
+ session = sdk.userInfo;
173
+ resolvedOrgId_1 = __spreadArray([], ((_e = session.organizationIds) !== null && _e !== void 0 ? _e : []), true).pop() || session.businessId;
174
+ return [4 /*yield*/, sdk.api.organizations.getSome({})];
175
+ case 12:
176
+ organization = (_p.sent()).find(function (o) { return o.id === resolvedOrgId_1; });
177
+ orgHasNumber = !!(organization === null || organization === void 0 ? void 0 : organization.twilioNumber) || !!((_f = organization === null || organization === void 0 ? void 0 : organization.twilioNumbers) === null || _f === void 0 ? void 0 : _f.length);
178
+ if (!!orgHasNumber) return [3 /*break*/, 15];
179
+ return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'sms-agent-nonumber', phone: TEST_PHONE })];
180
+ case 13:
181
+ enduser_1 = _p.sent();
182
+ createdEnduserIds.push(enduser_1.id);
183
+ return [4 /*yield*/, processFor(enduser_1.id)];
184
+ case 14:
185
+ result = _p.sent();
186
+ (0, testing_1.assert)(!result.success && /no sms number configured|ai is not enabled/i.test(result.error || ''), "expected a configuration error, got: ".concat(result.error), 'start action reports a configuration error (org has no SMS number — runtime flows skipped)');
187
+ return [2 /*return*/];
188
+ case 15: return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'sms-agent-runtime', phone: TEST_PHONE })];
189
+ case 16:
190
+ enduser = _p.sent();
191
+ createdEnduserIds.push(enduser.id);
192
+ return [4 /*yield*/, processFor(enduser.id)];
193
+ case 17:
194
+ startResult = _p.sent();
195
+ (0, testing_1.assert)(startResult.success === true, "start failed: ".concat(startResult.error), 'start action succeeds');
196
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 1000)];
197
+ case 18:
198
+ _p.sent();
199
+ return [4 /*yield*/, sdk.api.endusers.getOne(enduser.id)];
200
+ case 19:
201
+ refreshed = _p.sent();
202
+ entry = ((_g = refreshed.aiConversations) !== null && _g !== void 0 ? _g : []).find(function (c) { return c.active; });
203
+ (0, testing_1.assert)(!!entry, 'no active aiConversations entry on enduser', 'enduser has an active conversation entry');
204
+ (0, testing_1.assert)((entry === null || entry === void 0 ? void 0 : entry.destination) === TEST_PHONE, 'wrong destination on entry', 'conversation entry pairs the contact number');
205
+ return [4 /*yield*/, sdk.api.ai_conversations.getOne(entry.aiConversationId)];
206
+ case 20:
207
+ conversation = _p.sent();
208
+ (0, testing_1.assert)(conversation.type === 'sms_agent', 'wrong ai_conversations type', 'ai_conversations doc has type sms_agent');
209
+ return [4 /*yield*/, sdk.api.sms_messages.getSome({ filter: { enduserId: enduser.id } })];
210
+ case 21:
211
+ initialMessages = _p.sent();
212
+ outbound = initialMessages.find(function (m) { return !m.inbound && m.automationStepId === step_1.id; });
213
+ // exact equality on a merge-field-containing opener guards two regressions: templating must
214
+ // happen in send_sms (raw text on the record), and the agent-reply {{ escaping must NOT be
215
+ // applied to the org-authored initial message (preserveMergeFields)
216
+ (0, testing_1.assert)(!!outbound && outbound.message === validInfo_1.initialMessage, 'initial SMS record missing or not raw text', 'initial SMS logged with raw (untemplated) text + automationStepId');
217
+ return [4 /*yield*/, processFor(enduser.id)];
218
+ case 22:
219
+ secondStart = _p.sent();
220
+ (0, testing_1.assert)(secondStart.success === true, "second start failed: ".concat(secondStart.error), 'duplicate start succeeds (replace)');
221
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 1000)];
222
+ case 23:
223
+ _p.sent();
224
+ return [4 /*yield*/, sdk.api.endusers.getOne(enduser.id)];
225
+ case 24:
226
+ refreshed = _p.sent();
227
+ activeEntries_1 = ((_h = refreshed.aiConversations) !== null && _h !== void 0 ? _h : []).filter(function (c) { return c.active; });
228
+ (0, testing_1.assert)(activeEntries_1.length === 1, 'expected exactly one active conversation', 'supersede leaves exactly one active conversation');
229
+ (0, testing_1.assert)(activeEntries_1[0].aiConversationId !== entry.aiConversationId, 'active conversation was not replaced', 'supersede started a fresh conversation');
230
+ // inbound absorption via the testing hook: STOP ends the conversation
231
+ return [4 /*yield*/, sdk.api.sms_messages.createOne({
232
+ enduserId: enduser.id,
233
+ message: "stop".concat(TEST_MARKER),
234
+ inbound: true,
235
+ logOnly: true,
236
+ phoneNumber: activeEntries_1[0].source,
237
+ enduserPhoneNumber: TEST_PHONE,
238
+ })];
239
+ case 25:
240
+ // inbound absorption via the testing hook: STOP ends the conversation
241
+ _p.sent();
242
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 2000)];
243
+ case 26:
244
+ _p.sent();
245
+ return [4 /*yield*/, sdk.api.endusers.getOne(enduser.id)];
246
+ case 27:
247
+ refreshed = _p.sent();
248
+ stopped = ((_j = refreshed.aiConversations) !== null && _j !== void 0 ? _j : []).find(function (c) { return c.aiConversationId === activeEntries_1[0].aiConversationId; });
249
+ (0, testing_1.assert)((stopped === null || stopped === void 0 ? void 0 : stopped.active) === false && (stopped === null || stopped === void 0 ? void 0 : stopped.endedReason) === 'unsubscribed', "STOP did not end the conversation (".concat(JSON.stringify(stopped), ")"), 'STOP reply ends the conversation');
250
+ return [4 /*yield*/, processFor(enduser.id)];
251
+ case 28:
252
+ takeoverStart = _p.sent();
253
+ (0, testing_1.assert)(takeoverStart.success === true, "takeover-start failed: ".concat(takeoverStart.error), 'start (for takeover test) succeeds');
254
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 1000)];
255
+ case 29:
256
+ _p.sent();
257
+ _c = (_b = sdk.api.sms_messages).createOne;
258
+ _d = {
259
+ enduserId: enduser.id,
260
+ message: 'Hi, this is a real person taking over.',
261
+ inbound: false
262
+ };
263
+ return [4 /*yield*/, sdk.api.endusers.getOne(enduser.id)];
264
+ case 30: return [4 /*yield*/, _c.apply(_b, [(_d.phoneNumber = (_l = (_k = (_p.sent()).aiConversations) === null || _k === void 0 ? void 0 : _k.find(function (c) { return c.active; })) === null || _l === void 0 ? void 0 : _l.source,
265
+ _d.enduserPhoneNumber = TEST_PHONE,
266
+ _d)])];
267
+ case 31:
268
+ _p.sent();
269
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 2000)];
270
+ case 32:
271
+ _p.sent();
272
+ return [4 /*yield*/, sdk.api.endusers.getOne(enduser.id)];
273
+ case 33:
274
+ refreshed = _p.sent();
275
+ takenOver = ((_m = refreshed.aiConversations) !== null && _m !== void 0 ? _m : []).find(function (c) { return c.endedReason === 'staff-takeover'; });
276
+ (0, testing_1.assert)(!!takenOver, 'no staff-takeover ended entry found', 'manual staff SMS ends the conversation (takeover)');
277
+ return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'sms-agent-baseline', phone: '+15555555554' })];
278
+ case 34:
279
+ baselineEnduser = _p.sent();
280
+ createdEnduserIds.push(baselineEnduser.id);
281
+ return [4 /*yield*/, sdk.api.sms_messages.createOne({
282
+ enduserId: baselineEnduser.id,
283
+ message: "hello there".concat(TEST_MARKER),
284
+ inbound: true,
285
+ logOnly: true,
286
+ phoneNumber: activeEntries_1[0].source,
287
+ enduserPhoneNumber: '+15555555554',
288
+ })];
289
+ case 35:
290
+ _p.sent();
291
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 2000)];
292
+ case 36:
293
+ _p.sent();
294
+ return [4 /*yield*/, sdk.api.endusers.getOne(baselineEnduser.id)];
295
+ case 37:
296
+ baselineRefreshed = _p.sent();
297
+ return [4 /*yield*/, sdk.api.sms_messages.getSome({ filter: { enduserId: baselineEnduser.id } })];
298
+ case 38:
299
+ baselineMessages = _p.sent();
300
+ (0, testing_1.assert)(!((_o = baselineRefreshed.aiConversations) !== null && _o !== void 0 ? _o : []).length && !baselineMessages.find(function (m) { return !m.inbound; }), 'AI artifacts appeared for an enduser with no conversation', 'no-conversation inbound produces zero AI artifacts (regression baseline)');
301
+ return [3 /*break*/, 45];
302
+ case 39: return [4 /*yield*/, sdk.api.journeys.deleteOne(journey.id).catch(function () { })];
303
+ case 40:
304
+ _p.sent();
305
+ _i = 0, createdEnduserIds_1 = createdEnduserIds;
306
+ _p.label = 41;
307
+ case 41:
308
+ if (!(_i < createdEnduserIds_1.length)) return [3 /*break*/, 44];
309
+ id = createdEnduserIds_1[_i];
310
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(id).catch(function () { })];
311
+ case 42:
312
+ _p.sent();
313
+ _p.label = 43;
314
+ case 43:
315
+ _i++;
316
+ return [3 /*break*/, 41];
317
+ case 44: return [7 /*endfinally*/];
318
+ case 45: return [2 /*return*/];
319
+ }
320
+ });
321
+ });
322
+ };
323
+ exports.start_ai_conversation_tests = start_ai_conversation_tests;
324
+ // Allow running this test file independently
325
+ if (require.main === module) {
326
+ var sdk_2 = new sdk_1.Session({ host: host });
327
+ var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
328
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
329
+ return __generator(this, function (_a) {
330
+ switch (_a.label) {
331
+ case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
332
+ case 1:
333
+ _a.sent();
334
+ return [4 /*yield*/, (0, exports.start_ai_conversation_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
335
+ case 2:
336
+ _a.sent();
337
+ return [2 /*return*/];
338
+ }
339
+ });
340
+ }); };
341
+ runTests()
342
+ .then(function () {
343
+ console.log("✅ Start AI Conversation test suite completed successfully");
344
+ process.exit(0);
345
+ })
346
+ .catch(function (error) {
347
+ console.error("❌ Start AI Conversation test suite failed:", error);
348
+ process.exit(1);
349
+ });
350
+ }
351
+ //# sourceMappingURL=start_ai_conversation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start_ai_conversation.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/start_ai_conversation.test.ts"],"names":[],"mappings":"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"}