@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.
- package/lib/cjs/sdk.d.ts +2 -2
- package/lib/cjs/tests/api_tests/appointment_link_expiration.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/appointment_link_expiration.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/appointment_link_expiration.test.js +163 -0
- package/lib/cjs/tests/api_tests/appointment_link_expiration.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/beluga_trigger_refill.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/beluga_trigger_refill.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/beluga_trigger_refill.test.js +224 -0
- package/lib/cjs/tests/api_tests/beluga_trigger_refill.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/embeddables_auth_token.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/embeddables_auth_token.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/embeddables_auth_token.test.js +354 -0
- package/lib/cjs/tests/api_tests/embeddables_auth_token.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/start_ai_conversation.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/start_ai_conversation.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/start_ai_conversation.test.js +351 -0
- package/lib/cjs/tests/api_tests/start_ai_conversation.test.js.map +1 -0
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +217 -189
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/cjs/tests/unit_tests/phone_validation.test.d.ts +3 -0
- package/lib/cjs/tests/unit_tests/phone_validation.test.d.ts.map +1 -0
- package/lib/cjs/tests/unit_tests/phone_validation.test.js +96 -0
- package/lib/cjs/tests/unit_tests/phone_validation.test.js.map +1 -0
- package/lib/esm/sdk.d.ts +2 -2
- package/lib/esm/tests/api_tests/appointment_link_expiration.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/appointment_link_expiration.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/appointment_link_expiration.test.js +156 -0
- package/lib/esm/tests/api_tests/appointment_link_expiration.test.js.map +1 -0
- package/lib/esm/tests/api_tests/beluga_trigger_refill.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/beluga_trigger_refill.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/beluga_trigger_refill.test.js +220 -0
- package/lib/esm/tests/api_tests/beluga_trigger_refill.test.js.map +1 -0
- package/lib/esm/tests/api_tests/embeddables_auth_token.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/embeddables_auth_token.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/embeddables_auth_token.test.js +347 -0
- package/lib/esm/tests/api_tests/embeddables_auth_token.test.js.map +1 -0
- package/lib/esm/tests/api_tests/start_ai_conversation.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/start_ai_conversation.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/start_ai_conversation.test.js +347 -0
- package/lib/esm/tests/api_tests/start_ai_conversation.test.js.map +1 -0
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +217 -189
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/esm/tests/unit_tests/phone_validation.test.d.ts +3 -0
- package/lib/esm/tests/unit_tests/phone_validation.test.d.ts.map +1 -0
- package/lib/esm/tests/unit_tests/phone_validation.test.js +93 -0
- package/lib/esm/tests/unit_tests/phone_validation.test.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/tests/api_tests/appointment_link_expiration.test.ts +92 -0
- package/src/tests/api_tests/beluga_trigger_refill.test.ts +152 -0
- package/src/tests/api_tests/embeddables_auth_token.test.ts +417 -0
- package/src/tests/api_tests/security/F-0015-webhook-outbound-ssrf.test.ts +292 -0
- package/src/tests/api_tests/security/F-0025-proxy-image-unauth-ssrf.test.ts +179 -0
- package/src/tests/api_tests/start_ai_conversation.test.ts +256 -0
- package/src/tests/tests.ts +14 -0
- package/src/tests/unit_tests/phone_validation.test.ts +108 -0
- package/test_generated.pdf +0 -0
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EACL,UAAU,EACV,UAAU,EACV,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,IAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,uBAAgC,CAAA;AAEpE,6DAA6D;AAC7D,EAAE;AACF,oFAAoF;AACpF,gGAAgG;AAChG,6FAA6F;AAC7F,+FAA+F;AAC/F,kFAAkF;AAClF,MAAM,CAAC,IAAM,2BAA2B,GAAG,UAAO,EAA4D;QAA1D,GAAG,SAAA,EAAE,WAAW,iBAAA;;;;;;oBAClE,UAAU,CAAC,4CAA4C,CAAC,CAAA;oBAIlD,OAAO,GAAa,EAAE,CAAA;;;;oBAGV,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,EAAA;;oBAA3F,YAAU,SAAiF;oBACjG,SAAS,GAAG,SAAO,CAAC,EAAE,CAAA;oBAET,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,EAAA;;oBAAlF,SAAO,SAA2E;oBACxF,MAAM,GAAG,MAAI,CAAC,EAAE,CAAA;oBAEhB,yBAAyB;oBACzB,qBAAM,UAAU,CACd,mDAAmD,EACnD,cAAM,OAAA,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC;4BACvC,SAAS,EAAE,SAAO,CAAC,EAAE;4BACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;4BAC9C,MAAM,EAAE;gCACN,IAAI,EAAE,qBAAqB;gCAC3B,IAAI,EAAE;oCACJ,MAAM,EAAE,MAAI,CAAC,EAAE;oCACf,kBAAkB,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;oCAChE,eAAe,EAAE,mBAAmB;iCACrC;6BACF;yBACF,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,CAAC,EAXxC,CAWwC,EAC9C,eAAe,CAChB;wBAED,+BAA+B;sBAF9B;;oBAhBD,yBAAyB;oBACzB,SAeC,CAAA;oBAED,+BAA+B;oBAC/B,qBAAM,UAAU,CACd,0DAA0D,EAC1D,cAAM,OAAA,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC;4BACvC,SAAS,EAAE,SAAO,CAAC,EAAE;4BACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;4BAC9C,MAAM,EAAE;gCACN,IAAI,EAAE,qBAAqB;gCAC3B,IAAI,EAAE;oCACJ,MAAM,EAAE,MAAI,CAAC,EAAE;oCACf,sBAAsB,EAAE,IAAI;iCAC7B;6BACF;yBACF,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,CAAC,EAVxC,CAUwC,EAC9C,eAAe,CAChB;wBAED,2CAA2C;sBAF1C;;oBAfD,+BAA+B;oBAC/B,SAcC,CAAA;oBAED,2CAA2C;oBAC3C,qBAAM,UAAU,CACd,oDAAoD,EACpD,cAAM,OAAA,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC;4BACvC,SAAS,EAAE,SAAO,CAAC,EAAE;4BACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;4BAC9C,MAAM,EAAE;gCACN,IAAI,EAAE,qBAAqB;gCAC3B,IAAI,EAAE;oCACJ,MAAM,EAAE,gBAAgB;oCACxB,kBAAkB,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;iCAC3C;6BACK;yBACT,CAAC,EAVI,CAUJ,EACF,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI,EAAE,CAC3C;wBAED,0BAA0B;sBAFzB;;oBAfD,2CAA2C;oBAC3C,SAcC,CAAA;oBAED,0BAA0B;oBAC1B,qBAAM,UAAU,CACd,oDAAoD,EACpD,cAAM,OAAA,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC;4BACvC,SAAS,EAAE,SAAO,CAAC,EAAE;4BACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;4BAC9C,MAAM,EAAE;gCACN,IAAI,EAAE,qBAAqB;gCAC3B,IAAI,EAAE;oCACJ,kBAAkB,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;iCAC3C;6BACK;yBACT,CAAC,EATI,CASJ,EACF,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI,EAAE,CAC3C;wBAED,4FAA4F;wBAC5F,0EAA0E;sBAHzE;;oBAdD,0BAA0B;oBAC1B,SAaC,CAAA;oBAED,4FAA4F;oBAC5F,0EAA0E;oBAC1E,qBAAM,UAAU,CACd,qEAAqE,EACrE,cAAM,OAAA,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC;4BACvC,SAAS,EAAE,SAAO,CAAC,EAAE;4BACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;4BAC9C,MAAM,EAAE;gCACN,IAAI,EAAE,qBAAqB;gCAC3B,IAAI,EAAE;oCACJ,MAAM,EAAE,MAAI,CAAC,EAAE;oCACf,kBAAkB,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;iCACtE;6BACK;yBACT,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,CAAC,EAVxC,CAUwC,EAC9C;4BACE,QAAQ,EAAE,UAAA,CAAC;;gCACT,IAAM,UAAU,GAAG,MAAC,CAAC,CAAC,MAAM,CAAC,IAAY,CAAC,kBAAkB,0CAAG,CAAC,CAAC,CAAA;gCACjE,OAAO,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,MAAK,SAAS,IAAI,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,MAAK,SAAS,CAAA;4BAChF,CAAC;yBACF,CACF,EAAA;;oBArBD,4FAA4F;oBAC5F,0EAA0E;oBAC1E,SAmBC,CAAA;;;0BAEuB,EAAP,mBAAO;;;yBAAP,CAAA,qBAAO,CAAA;oBAAb,EAAE;oBACX,qBAAM,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAA;;oBAAjE,SAAiE,CAAA;;;oBADlD,IAAO,CAAA;;;yBAGpB,MAAM,EAAN,yBAAM;oBAAE,qBAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAA;;oBAA1D,SAA0D,CAAA;;;yBAClE,SAAS,EAAT,yBAAS;oBAAE,qBAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAA;;oBAAhE,SAAgE,CAAA;;;;;;;CAElF,CAAA;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAC3B,OAAO,CAAC,GAAG,CAAC,yBAAkB,IAAI,CAAE,CAAC,CAAA;IACrC,IAAM,KAAG,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAA;IACjC,IAAM,aAAW,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAA;IAEzC,IAAM,QAAQ,GAAG;;;wBACf,qBAAM,WAAW,CAAC,KAAG,EAAE,aAAW,CAAC,EAAA;;oBAAnC,SAAmC,CAAA;oBACnC,qBAAM,2BAA2B,CAAC,EAAE,GAAG,OAAA,EAAE,WAAW,eAAA,EAAE,CAAC,EAAA;;oBAAvD,SAAuD,CAAA;;;;SACxD,CAAA;IAED,QAAQ,EAAE;SACP,IAAI,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAA;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC;SACD,KAAK,CAAC,UAAC,KAAK;QACX,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAA;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;CACL"}
|
|
@@ -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"}
|