@tellescope/sdk 1.256.0 → 1.256.2

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 +2 -2
  2. package/lib/cjs/tests/api_tests/appointment_link_expiration.test.d.ts +6 -0
  3. package/lib/cjs/tests/api_tests/appointment_link_expiration.test.d.ts.map +1 -0
  4. package/lib/cjs/tests/api_tests/appointment_link_expiration.test.js +163 -0
  5. package/lib/cjs/tests/api_tests/appointment_link_expiration.test.js.map +1 -0
  6. package/lib/cjs/tests/api_tests/beluga_trigger_refill.test.d.ts +6 -0
  7. package/lib/cjs/tests/api_tests/beluga_trigger_refill.test.d.ts.map +1 -0
  8. package/lib/cjs/tests/api_tests/beluga_trigger_refill.test.js +224 -0
  9. package/lib/cjs/tests/api_tests/beluga_trigger_refill.test.js.map +1 -0
  10. package/lib/cjs/tests/api_tests/embeddables_auth_token.test.d.ts +6 -0
  11. package/lib/cjs/tests/api_tests/embeddables_auth_token.test.d.ts.map +1 -0
  12. package/lib/cjs/tests/api_tests/embeddables_auth_token.test.js +354 -0
  13. package/lib/cjs/tests/api_tests/embeddables_auth_token.test.js.map +1 -0
  14. package/lib/cjs/tests/api_tests/start_ai_conversation.test.d.ts +6 -0
  15. package/lib/cjs/tests/api_tests/start_ai_conversation.test.d.ts.map +1 -0
  16. package/lib/cjs/tests/api_tests/start_ai_conversation.test.js +351 -0
  17. package/lib/cjs/tests/api_tests/start_ai_conversation.test.js.map +1 -0
  18. package/lib/cjs/tests/tests.d.ts.map +1 -1
  19. package/lib/cjs/tests/tests.js +217 -189
  20. package/lib/cjs/tests/tests.js.map +1 -1
  21. package/lib/cjs/tests/unit_tests/phone_validation.test.d.ts +3 -0
  22. package/lib/cjs/tests/unit_tests/phone_validation.test.d.ts.map +1 -0
  23. package/lib/cjs/tests/unit_tests/phone_validation.test.js +96 -0
  24. package/lib/cjs/tests/unit_tests/phone_validation.test.js.map +1 -0
  25. package/lib/esm/sdk.d.ts +2 -2
  26. package/lib/esm/tests/api_tests/appointment_link_expiration.test.d.ts +6 -0
  27. package/lib/esm/tests/api_tests/appointment_link_expiration.test.d.ts.map +1 -0
  28. package/lib/esm/tests/api_tests/appointment_link_expiration.test.js +156 -0
  29. package/lib/esm/tests/api_tests/appointment_link_expiration.test.js.map +1 -0
  30. package/lib/esm/tests/api_tests/beluga_trigger_refill.test.d.ts +6 -0
  31. package/lib/esm/tests/api_tests/beluga_trigger_refill.test.d.ts.map +1 -0
  32. package/lib/esm/tests/api_tests/beluga_trigger_refill.test.js +220 -0
  33. package/lib/esm/tests/api_tests/beluga_trigger_refill.test.js.map +1 -0
  34. package/lib/esm/tests/api_tests/embeddables_auth_token.test.d.ts +6 -0
  35. package/lib/esm/tests/api_tests/embeddables_auth_token.test.d.ts.map +1 -0
  36. package/lib/esm/tests/api_tests/embeddables_auth_token.test.js +347 -0
  37. package/lib/esm/tests/api_tests/embeddables_auth_token.test.js.map +1 -0
  38. package/lib/esm/tests/api_tests/start_ai_conversation.test.d.ts +6 -0
  39. package/lib/esm/tests/api_tests/start_ai_conversation.test.d.ts.map +1 -0
  40. package/lib/esm/tests/api_tests/start_ai_conversation.test.js +347 -0
  41. package/lib/esm/tests/api_tests/start_ai_conversation.test.js.map +1 -0
  42. package/lib/esm/tests/tests.d.ts.map +1 -1
  43. package/lib/esm/tests/tests.js +217 -189
  44. package/lib/esm/tests/tests.js.map +1 -1
  45. package/lib/esm/tests/unit_tests/phone_validation.test.d.ts +3 -0
  46. package/lib/esm/tests/unit_tests/phone_validation.test.d.ts.map +1 -0
  47. package/lib/esm/tests/unit_tests/phone_validation.test.js +93 -0
  48. package/lib/esm/tests/unit_tests/phone_validation.test.js.map +1 -0
  49. package/lib/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +10 -10
  51. package/src/tests/api_tests/appointment_link_expiration.test.ts +92 -0
  52. package/src/tests/api_tests/beluga_trigger_refill.test.ts +152 -0
  53. package/src/tests/api_tests/embeddables_auth_token.test.ts +417 -0
  54. package/src/tests/api_tests/security/F-0015-webhook-outbound-ssrf.test.ts +292 -0
  55. package/src/tests/api_tests/security/F-0025-proxy-image-unauth-ssrf.test.ts +179 -0
  56. package/src/tests/api_tests/start_ai_conversation.test.ts +256 -0
  57. package/src/tests/tests.ts +14 -0
  58. package/src/tests/unit_tests/phone_validation.test.ts +108 -0
  59. package/test_generated.pdf +0 -0
@@ -0,0 +1,3 @@
1
+ declare const run_all: () => void;
2
+ export { run_all as phone_validation_unit_tests };
3
+ //# sourceMappingURL=phone_validation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone_validation.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/unit_tests/phone_validation.test.ts"],"names":[],"mappings":"AA8FA,QAAA,MAAM,OAAO,YAOZ,CAAA;AAMD,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,CAAA"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.phone_validation_unit_tests = void 0;
4
+ var validation_1 = require("@tellescope/validation");
5
+ var utilities_1 = require("@tellescope/utilities");
6
+ var failures = 0;
7
+ var passed = 0;
8
+ var assert = function (name, actual, expected) {
9
+ if (actual === expected) {
10
+ passed++;
11
+ console.log(" \u2713 ".concat(name));
12
+ }
13
+ else {
14
+ failures++;
15
+ console.error(" \u2717 ".concat(name, " \u2014 expected ").concat(JSON.stringify(expected), ", got ").concat(JSON.stringify(actual)));
16
+ }
17
+ };
18
+ // validators throw on invalid input; THREW lets us assert rejection without try/catch per case
19
+ var THREW = 'THREW';
20
+ var attempt = function (validate, value) {
21
+ try {
22
+ return validate(value);
23
+ }
24
+ catch (err) {
25
+ return THREW;
26
+ }
27
+ };
28
+ // phoneValidator and phoneValidatorOptional carry identical parsing logic and differ only in
29
+ // their build_validator options, so every parsing case runs against both.
30
+ var run_validator_tests = function () {
31
+ console.log("\n[phoneValidator / phoneValidatorOptional]");
32
+ var cases = [
33
+ // [input, expected, description]
34
+ ['+14155551234', '+14155551234', 'normalized E.164 passes through'],
35
+ ['4155551234', '+14155551234', 'bare 10 digits gets a US country code'],
36
+ ['(415) 555-1234', '+14155551234', 'formatted number is normalized'],
37
+ [' 415-555-1234 ', '+14155551234', 'whitespace and dashes are stripped'],
38
+ ['311', '311', 'N11 service code passes through (pre-existing behavior)'],
39
+ // Short codes: valid SMS endpoints, but not E.164 — no country code, no '+'
40
+ ['894546', '894546', '6-digit short code passes through unchanged'],
41
+ ['89454', '89454', '5-digit short code passes through unchanged'],
42
+ ['00000', '00000', 'leading zeroes are preserved, not normalized away'],
43
+ // The short-code allowance must not widen past bare 5-6 digits
44
+ ['+1894546', THREW, 'a leading + forces the strict E.164 path'],
45
+ ['1234', THREW, '4 digits still rejects'],
46
+ ['1234567', THREW, '7 digits still rejects'],
47
+ ['123456789', THREW, '9 digits still rejects'],
48
+ ['12', THREW, 'too-few digits still rejects'],
49
+ ['not a phone', THREW, 'junk still rejects'],
50
+ ];
51
+ for (var _i = 0, cases_1 = cases; _i < cases_1.length; _i++) {
52
+ var _a = cases_1[_i], input = _a[0], expected = _a[1], description = _a[2];
53
+ assert("".concat(description, " (required)"), attempt(validation_1.phoneValidator.validate(), input), expected);
54
+ assert("".concat(description, " (optional)"), attempt(validation_1.phoneValidatorOptional.validate(), input), expected);
55
+ }
56
+ assert('optional variant accepts empty string', attempt(validation_1.phoneValidatorOptional.validate(), ''), '');
57
+ };
58
+ // parse_phone_number is the non-throwing wrapper used on integration payloads, where a junk
59
+ // number must not fail the whole request. It inherits the short-code rule from phoneValidator.
60
+ var run_parse_tests = function () {
61
+ console.log("\n[parse_phone_number]");
62
+ assert('E.164 passes through', (0, validation_1.parse_phone_number)('+14155551234'), '+14155551234');
63
+ assert('bare 10 digits normalizes', (0, validation_1.parse_phone_number)('4155551234'), '+14155551234');
64
+ assert('short code passes through', (0, validation_1.parse_phone_number)('894546'), '894546');
65
+ assert('7 digits returns undefined', (0, validation_1.parse_phone_number)('1234567'), undefined);
66
+ assert('junk returns undefined', (0, validation_1.parse_phone_number)('not a phone'), undefined);
67
+ assert('empty string returns undefined', (0, validation_1.parse_phone_number)(''), undefined);
68
+ assert('undefined returns undefined', (0, validation_1.parse_phone_number)(undefined), undefined);
69
+ assert('null returns undefined', (0, validation_1.parse_phone_number)(null), undefined);
70
+ };
71
+ // Guards the display formatter against the negative-slice bug: before the length check,
72
+ // a 6-digit short code rendered as '+ (894) 546-'
73
+ var run_display_tests = function () {
74
+ console.log("\n[to_human_readable_phone_number]");
75
+ assert('E.164 formats with country code', (0, utilities_1.to_human_readable_phone_number)('+15555555555'), '+1 (555) 555-5555');
76
+ assert('bare 10 digits formats', (0, utilities_1.to_human_readable_phone_number)('5555555555'), '(555) 555-5555');
77
+ assert('6-digit short code is returned as-is', (0, utilities_1.to_human_readable_phone_number)('894546'), '894546');
78
+ assert('5-digit short code is returned as-is', (0, utilities_1.to_human_readable_phone_number)('89454'), '89454');
79
+ assert('311 is returned as-is', (0, utilities_1.to_human_readable_phone_number)('311'), '311');
80
+ assert('empty string returns empty string', (0, utilities_1.to_human_readable_phone_number)(''), '');
81
+ assert('undefined returns empty string', (0, utilities_1.to_human_readable_phone_number)(undefined), '');
82
+ };
83
+ var run_all = function () {
84
+ console.log("Running phone_validation unit tests");
85
+ run_validator_tests();
86
+ run_parse_tests();
87
+ run_display_tests();
88
+ console.log("\nResults: ".concat(passed, " passed, ").concat(failures, " failed"));
89
+ if (failures > 0)
90
+ process.exit(1);
91
+ };
92
+ exports.phone_validation_unit_tests = run_all;
93
+ if (require.main === module) {
94
+ run_all();
95
+ }
96
+ //# sourceMappingURL=phone_validation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone_validation.test.js","sourceRoot":"","sources":["../../../../src/tests/unit_tests/phone_validation.test.ts"],"names":[],"mappings":"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"}
package/lib/esm/sdk.d.ts CHANGED
@@ -4192,7 +4192,7 @@ export declare class Session extends SessionManager {
4192
4192
  iat: number;
4193
4193
  exp: number;
4194
4194
  requiresMFA?: boolean | undefined;
4195
- sessionScopes?: ("video-join-link" | "video-start-link" | "public-form" | "appointment-booking" | "ics-download")[] | undefined;
4195
+ sessionScopes?: ("video-join-link" | "video-start-link" | "public-form" | "appointment-booking" | "ics-download" | "embeddables-token")[] | undefined;
4196
4196
  scopeContext?: import("@tellescope/types-models").SessionScopeContext | undefined;
4197
4197
  allowedPaths?: string[] | undefined;
4198
4198
  inbox_threads?: number | undefined;
@@ -4357,7 +4357,7 @@ export declare class Session extends SessionManager {
4357
4357
  iat: number;
4358
4358
  exp: number;
4359
4359
  requiresMFA?: boolean | undefined;
4360
- sessionScopes?: ("video-join-link" | "video-start-link" | "public-form" | "appointment-booking" | "ics-download")[] | undefined;
4360
+ sessionScopes?: ("video-join-link" | "video-start-link" | "public-form" | "appointment-booking" | "ics-download" | "embeddables-token")[] | undefined;
4361
4361
  scopeContext?: import("@tellescope/types-models").SessionScopeContext | undefined;
4362
4362
  allowedPaths?: string[] | undefined;
4363
4363
  inbox_threads?: number | undefined;
@@ -0,0 +1,6 @@
1
+ import { Session } from "../../sdk";
2
+ export declare const appointment_link_expiration_tests: ({ sdk }: {
3
+ sdk: Session;
4
+ sdkNonAdmin: Session;
5
+ }) => Promise<void>;
6
+ //# sourceMappingURL=appointment_link_expiration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appointment_link_expiration.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/appointment_link_expiration.test.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmCnC,eAAO,MAAM,iCAAiC;SAA2B,OAAO;iBAAe,OAAO;mBA+BrG,CAAA"}
@@ -0,0 +1,156 @@
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 } from "@tellescope/testing";
41
+ import { setup_tests } from "../setup";
42
+ var host = process.env.API_URL || 'http://localhost:8080';
43
+ var ONE_DAY_IN_SECONDS = 86400;
44
+ var EVENT_DAYS_OUT = 120; // under the old expiry (event lead time + 4 weeks) this token lived ~148 days
45
+ // Decode a JWT payload WITHOUT verifying it — the signing key is server-side only, and the only
46
+ // thing under test is the lifetime the server stamped on the token.
47
+ var decode_jwt_payload = function (token) {
48
+ var _a = token.split('.'), payload = _a[1];
49
+ if (!payload)
50
+ throw new Error("Not a JWT");
51
+ return JSON.parse(Buffer.from(payload.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf8'));
52
+ };
53
+ // The API returns a /r/<token> shortlink, not the destination — follow one hop and pull the
54
+ // `token` query param out of the URL the patient actually lands on.
55
+ var resolve_redirect_token = function (link) { return __awaiter(void 0, void 0, void 0, function () {
56
+ var _a, status, headers, location, token;
57
+ return __generator(this, function (_b) {
58
+ switch (_b.label) {
59
+ case 0: return [4 /*yield*/, axios.get(link, {
60
+ maxRedirects: 0,
61
+ validateStatus: function () { return true; },
62
+ })];
63
+ case 1:
64
+ _a = _b.sent(), status = _a.status, headers = _a.headers;
65
+ location = headers['location'];
66
+ if (!location)
67
+ throw new Error("Expected a redirect from ".concat(link, ", got status ").concat(status));
68
+ token = new URL(location).searchParams.get('token');
69
+ if (!token)
70
+ throw new Error("No token query param in redirect destination: ".concat(location));
71
+ return [2 /*return*/, token];
72
+ }
73
+ });
74
+ }); };
75
+ export var appointment_link_expiration_tests = function (_a) {
76
+ var sdk = _a.sdk;
77
+ return __awaiter(void 0, void 0, void 0, function () {
78
+ var enduser, event, link, _b, iat, exp, _c, lifetimeInSeconds_1;
79
+ return __generator(this, function (_d) {
80
+ switch (_d.label) {
81
+ case 0:
82
+ log_header("Appointment Link Expiration");
83
+ return [4 /*yield*/, sdk.api.endusers.createOne({
84
+ email: "appointment-link-expiration-".concat(Date.now(), "@tellescope.com"),
85
+ })];
86
+ case 1:
87
+ enduser = _d.sent();
88
+ return [4 /*yield*/, sdk.api.calendar_events.createOne({
89
+ title: 'Appointment Link Expiration Test',
90
+ durationInMinutes: 30,
91
+ startTimeInMS: Date.now() + EVENT_DAYS_OUT * ONE_DAY_IN_SECONDS * 1000,
92
+ enableVideoCall: true,
93
+ attendees: [{ type: 'enduser', id: enduser.id }],
94
+ })];
95
+ case 2:
96
+ event = _d.sent();
97
+ _d.label = 3;
98
+ case 3:
99
+ _d.trys.push([3, , 7, 10]);
100
+ return [4 /*yield*/, sdk.api.calendar_events.generate_meeting_link({
101
+ eventId: event.id,
102
+ enduserId: enduser.id,
103
+ })];
104
+ case 4:
105
+ link = (_d.sent()).link;
106
+ _c = decode_jwt_payload;
107
+ return [4 /*yield*/, resolve_redirect_token(link)];
108
+ case 5:
109
+ _b = _c.apply(void 0, [_d.sent()]), iat = _b.iat, exp = _b.exp;
110
+ lifetimeInSeconds_1 = exp - iat;
111
+ return [4 /*yield*/, async_test("meeting link token for an event ".concat(EVENT_DAYS_OUT, " days out expires within 24h"), function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
112
+ return [2 /*return*/, lifetimeInSeconds_1];
113
+ }); }); }, { onResult: function (lifetime) { return lifetime > 0 && lifetime <= ONE_DAY_IN_SECONDS; } })];
114
+ case 6:
115
+ _d.sent();
116
+ return [3 /*break*/, 10];
117
+ case 7: return [4 /*yield*/, sdk.api.calendar_events.deleteOne(event.id).catch(console.error)];
118
+ case 8:
119
+ _d.sent();
120
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser.id).catch(console.error)];
121
+ case 9:
122
+ _d.sent();
123
+ return [7 /*endfinally*/];
124
+ case 10: return [2 /*return*/];
125
+ }
126
+ });
127
+ });
128
+ };
129
+ // Allow running this test file independently
130
+ if (require.main === module) {
131
+ var sdk_1 = new Session({ host: host });
132
+ var sdkNonAdmin_1 = new Session({ host: host });
133
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
134
+ return __generator(this, function (_a) {
135
+ switch (_a.label) {
136
+ case 0: return [4 /*yield*/, setup_tests(sdk_1, sdkNonAdmin_1)];
137
+ case 1:
138
+ _a.sent();
139
+ return [4 /*yield*/, appointment_link_expiration_tests({ sdk: sdk_1, sdkNonAdmin: sdkNonAdmin_1 })];
140
+ case 2:
141
+ _a.sent();
142
+ return [2 /*return*/];
143
+ }
144
+ });
145
+ }); };
146
+ runTests()
147
+ .then(function () {
148
+ console.log("✅ Appointment link expiration test suite completed successfully");
149
+ process.exit(0);
150
+ })
151
+ .catch(function (error) {
152
+ console.error("❌ Appointment link expiration test suite failed:", error);
153
+ process.exit(1);
154
+ });
155
+ }
156
+ //# sourceMappingURL=appointment_link_expiration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appointment_link_expiration.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/appointment_link_expiration.test.ts"],"names":[],"mappings":"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"}
@@ -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,220 @@
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, passOnAnyResult, } from "@tellescope/testing";
40
+ import { setup_tests } from "../setup";
41
+ var host = process.env.API_URL || 'http://localhost:8080';
42
+ // Beluga Trigger Refill journey action tests (CU-86e2gbv7y).
43
+ //
44
+ // Validator-acceptance only: verifies that automation steps configured with the new
45
+ // belugaTriggerRefill action (org-mapping and inline-medIds variants) pass validation, and that
46
+ // invalid shapes are rejected. No live Beluga call is made — external/triggerRefill requires
47
+ // sandbox credentials, and the process endpoint's guard branches (missing integration, missing
48
+ // preferences) mirror the already-tested belugaAutoRx/belugaUpdateVisit handlers.
49
+ export var beluga_trigger_refill_tests = function (_a) {
50
+ var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
51
+ return __awaiter(void 0, void 0, void 0, function () {
52
+ var journeyId, formId, stepIds, journey_1, form_1, _i, stepIds_1, id;
53
+ return __generator(this, function (_b) {
54
+ switch (_b.label) {
55
+ case 0:
56
+ log_header("Beluga Trigger Refill Journey Action Tests");
57
+ stepIds = [];
58
+ _b.label = 1;
59
+ case 1:
60
+ _b.trys.push([1, , 9, 18]);
61
+ return [4 /*yield*/, sdk.api.journeys.createOne({ title: 'Beluga Trigger Refill Test Journey' })];
62
+ case 2:
63
+ journey_1 = _b.sent();
64
+ journeyId = journey_1.id;
65
+ return [4 /*yield*/, sdk.api.forms.createOne({ title: 'Beluga Trigger Refill Test Form' })];
66
+ case 3:
67
+ form_1 = _b.sent();
68
+ formId = form_1.id;
69
+ // Inline med IDs variant
70
+ return [4 /*yield*/, async_test("belugaTriggerRefill step accepted (inline medIds)", function () { return sdk.api.automation_steps.createOne({
71
+ journeyId: journey_1.id,
72
+ events: [{ type: 'onJourneyStart', info: {} }],
73
+ action: {
74
+ type: 'belugaTriggerRefill',
75
+ info: {
76
+ formId: form_1.id,
77
+ patientPreferences: [{ medId: 'med-123' }, { medId: 'med-456' }],
78
+ customFieldName: 'Refill Medication',
79
+ },
80
+ },
81
+ }).then(function (s) { stepIds.push(s.id); return s; }); }, passOnAnyResult)
82
+ // Organization mapping variant
83
+ ];
84
+ case 4:
85
+ // Inline med IDs variant
86
+ _b.sent();
87
+ // Organization mapping variant
88
+ return [4 /*yield*/, async_test("belugaTriggerRefill step accepted (organization mapping)", function () { return sdk.api.automation_steps.createOne({
89
+ journeyId: journey_1.id,
90
+ events: [{ type: 'onJourneyStart', info: {} }],
91
+ action: {
92
+ type: 'belugaTriggerRefill',
93
+ info: {
94
+ formId: form_1.id,
95
+ useOrganizationMapping: true,
96
+ },
97
+ },
98
+ }).then(function (s) { stepIds.push(s.id); return s; }); }, passOnAnyResult)
99
+ // Invalid formId (not a mongo id) rejected
100
+ ];
101
+ case 5:
102
+ // Organization mapping variant
103
+ _b.sent();
104
+ // Invalid formId (not a mongo id) rejected
105
+ return [4 /*yield*/, async_test("belugaTriggerRefill step rejected (invalid formId)", function () { return sdk.api.automation_steps.createOne({
106
+ journeyId: journey_1.id,
107
+ events: [{ type: 'onJourneyStart', info: {} }],
108
+ action: {
109
+ type: 'belugaTriggerRefill',
110
+ info: {
111
+ formId: 'not-a-mongo-id',
112
+ patientPreferences: [{ medId: 'med-123' }],
113
+ },
114
+ },
115
+ }); }, { shouldError: true, onError: function () { return true; } })
116
+ // Missing formId rejected
117
+ ];
118
+ case 6:
119
+ // Invalid formId (not a mongo id) rejected
120
+ _b.sent();
121
+ // Missing formId rejected
122
+ return [4 /*yield*/, async_test("belugaTriggerRefill step rejected (missing formId)", function () { return sdk.api.automation_steps.createOne({
123
+ journeyId: journey_1.id,
124
+ events: [{ type: 'onJourneyStart', info: {} }],
125
+ action: {
126
+ type: 'belugaTriggerRefill',
127
+ info: {
128
+ patientPreferences: [{ medId: 'med-123' }],
129
+ },
130
+ },
131
+ }); }, { shouldError: true, onError: function () { return true; } })
132
+ // Unexpected fields in a patient preference are stripped by objectValidator, not rejected —
133
+ // assert they never reach the stored config (the step itself is accepted)
134
+ ];
135
+ case 7:
136
+ // Missing formId rejected
137
+ _b.sent();
138
+ // Unexpected fields in a patient preference are stripped by objectValidator, not rejected —
139
+ // assert they never reach the stored config (the step itself is accepted)
140
+ return [4 /*yield*/, async_test("belugaTriggerRefill step strips unexpected patientPreferences field", function () { return sdk.api.automation_steps.createOne({
141
+ journeyId: journey_1.id,
142
+ events: [{ type: 'onJourneyStart', info: {} }],
143
+ action: {
144
+ type: 'belugaTriggerRefill',
145
+ info: {
146
+ formId: form_1.id,
147
+ patientPreferences: [{ medId: 'med-123', pharmacyId: 'not-allowed' }],
148
+ },
149
+ },
150
+ }).then(function (s) { stepIds.push(s.id); return s; }); }, {
151
+ onResult: function (s) {
152
+ var _a;
153
+ var preference = (_a = s.action.info.patientPreferences) === null || _a === void 0 ? void 0 : _a[0];
154
+ return (preference === null || preference === void 0 ? void 0 : preference.medId) === 'med-123' && (preference === null || preference === void 0 ? void 0 : preference.pharmacyId) === undefined;
155
+ },
156
+ })];
157
+ case 8:
158
+ // Unexpected fields in a patient preference are stripped by objectValidator, not rejected —
159
+ // assert they never reach the stored config (the step itself is accepted)
160
+ _b.sent();
161
+ return [3 /*break*/, 18];
162
+ case 9:
163
+ _i = 0, stepIds_1 = stepIds;
164
+ _b.label = 10;
165
+ case 10:
166
+ if (!(_i < stepIds_1.length)) return [3 /*break*/, 13];
167
+ id = stepIds_1[_i];
168
+ return [4 /*yield*/, sdk.api.automation_steps.deleteOne(id).catch(console.error)];
169
+ case 11:
170
+ _b.sent();
171
+ _b.label = 12;
172
+ case 12:
173
+ _i++;
174
+ return [3 /*break*/, 10];
175
+ case 13:
176
+ if (!formId) return [3 /*break*/, 15];
177
+ return [4 /*yield*/, sdk.api.forms.deleteOne(formId).catch(console.error)];
178
+ case 14:
179
+ _b.sent();
180
+ _b.label = 15;
181
+ case 15:
182
+ if (!journeyId) return [3 /*break*/, 17];
183
+ return [4 /*yield*/, sdk.api.journeys.deleteOne(journeyId).catch(console.error)];
184
+ case 16:
185
+ _b.sent();
186
+ _b.label = 17;
187
+ case 17: return [7 /*endfinally*/];
188
+ case 18: return [2 /*return*/];
189
+ }
190
+ });
191
+ });
192
+ };
193
+ if (require.main === module) {
194
+ console.log("Using API URL: ".concat(host));
195
+ var sdk_1 = new Session({ host: host });
196
+ var sdkNonAdmin_1 = new Session({ host: host });
197
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
198
+ return __generator(this, function (_a) {
199
+ switch (_a.label) {
200
+ case 0: return [4 /*yield*/, setup_tests(sdk_1, sdkNonAdmin_1)];
201
+ case 1:
202
+ _a.sent();
203
+ return [4 /*yield*/, beluga_trigger_refill_tests({ sdk: sdk_1, sdkNonAdmin: sdkNonAdmin_1 })];
204
+ case 2:
205
+ _a.sent();
206
+ return [2 /*return*/];
207
+ }
208
+ });
209
+ }); };
210
+ runTests()
211
+ .then(function () {
212
+ console.log("✅ Beluga trigger refill test suite completed successfully");
213
+ process.exit(0);
214
+ })
215
+ .catch(function (error) {
216
+ console.error("❌ Beluga trigger refill test suite failed:", error);
217
+ process.exit(1);
218
+ });
219
+ }
220
+ //# 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 embeddables_auth_token_tests: ({ sdk, sdkNonAdmin }: {
3
+ sdk: Session;
4
+ sdkNonAdmin: Session;
5
+ }) => Promise<void>;
6
+ //# sourceMappingURL=embeddables_auth_token.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddables_auth_token.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/embeddables_auth_token.test.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAA;AA+CnD,eAAO,MAAM,4BAA4B;SAAwC,OAAO;iBAAe,OAAO;mBAwV7G,CAAA"}