@tellescope/sdk 1.255.5 → 1.255.7
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/tests/api_tests/healthie_multi_integration.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/healthie_multi_integration.test.js +66 -37
- package/lib/cjs/tests/api_tests/healthie_multi_integration.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/journey_delete_cancels_actions.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/journey_delete_cancels_actions.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/journey_delete_cancels_actions.test.js +250 -0
- package/lib/cjs/tests/api_tests/journey_delete_cancels_actions.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/register_business_id_injection.test.d.ts +36 -0
- package/lib/cjs/tests/api_tests/security/register_business_id_injection.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/register_business_id_injection.test.js +203 -0
- package/lib/cjs/tests/api_tests/security/register_business_id_injection.test.js.map +1 -0
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +174 -166
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/sdk.d.ts +2 -2
- package/lib/esm/tests/api_tests/healthie_multi_integration.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/healthie_multi_integration.test.js +67 -38
- package/lib/esm/tests/api_tests/healthie_multi_integration.test.js.map +1 -1
- package/lib/esm/tests/api_tests/journey_delete_cancels_actions.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/journey_delete_cancels_actions.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/journey_delete_cancels_actions.test.js +223 -0
- package/lib/esm/tests/api_tests/journey_delete_cancels_actions.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/register_business_id_injection.test.d.ts +36 -0
- package/lib/esm/tests/api_tests/security/register_business_id_injection.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/register_business_id_injection.test.js +196 -0
- package/lib/esm/tests/api_tests/security/register_business_id_injection.test.js.map +1 -0
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +174 -166
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/src/tests/api_tests/healthie_multi_integration.test.ts +56 -15
- package/src/tests/api_tests/journey_delete_cancels_actions.test.ts +152 -0
- package/src/tests/api_tests/security/register_business_id_injection.test.ts +140 -0
- package/src/tests/tests.ts +4 -0
- package/test_generated.pdf +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"healthie_multi_integration.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/healthie_multi_integration.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"healthie_multi_integration.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/healthie_multi_integration.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAgBnC,eAAO,MAAM,gCAAgC;SAAwC,OAAO;iBAAe,OAAO;mBAqPjH,CAAA"}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
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
|
+
};
|
|
2
13
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
14
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
15
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -44,6 +55,7 @@ require('source-map-support').install();
|
|
|
44
55
|
var axios_1 = __importDefault(require("axios"));
|
|
45
56
|
var sdk_1 = require("../../sdk");
|
|
46
57
|
var testing_1 = require("@tellescope/testing");
|
|
58
|
+
var utilities_1 = require("@tellescope/utilities");
|
|
47
59
|
var setup_1 = require("../setup");
|
|
48
60
|
var constants_1 = require("@tellescope/constants");
|
|
49
61
|
var host = process.env.API_URL || 'http://localhost:8080';
|
|
@@ -52,7 +64,7 @@ var FORMSORT_TEST_KEY = '9d4f9dff00f60df2690a16da2cb848f289b447614ad9bef850e54af
|
|
|
52
64
|
var healthie_multi_integration_tests = function (_a) {
|
|
53
65
|
var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
|
|
54
66
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
55
|
-
var businessId, primaryIntegrationId, taggedIntegrationId, enduserId, formsortEnduserId, formId, primary, tagged, enduser, form_1, formsortEmail_1, postToFormsort, _i, _b, id;
|
|
67
|
+
var businessId, primaryIntegrationId, taggedIntegrationId, enduserId, formsortEnduserId, formId, conditionPlaceholders, taggedForConditions, untaggedForConditions, primary, tagged, enduser, form_1, formsortEmail_1, postToFormsort, _i, _b, id;
|
|
56
68
|
return __generator(this, function (_c) {
|
|
57
69
|
switch (_c.label) {
|
|
58
70
|
case 0:
|
|
@@ -71,6 +83,19 @@ var healthie_multi_integration_tests = function (_a) {
|
|
|
71
83
|
throw new Error("healthieIntegrationId missing from BUILT_INS_FOR_SET_FIELDS");
|
|
72
84
|
}
|
|
73
85
|
console.log("✅ healthieIntegrationId exposed in BUILT_INS_FOR_SET_FIELDS");
|
|
86
|
+
conditionPlaceholders = {
|
|
87
|
+
businessId: '', creator: '', hashedPassword: '', lastActive: '', lastLogout: '', updatedAt: new Date(),
|
|
88
|
+
};
|
|
89
|
+
taggedForConditions = __assign(__assign({}, conditionPlaceholders), { healthieIntegrationId: TAG });
|
|
90
|
+
untaggedForConditions = __assign({}, conditionPlaceholders);
|
|
91
|
+
(0, testing_1.assert)((0, utilities_1.evaluate_conditional_logic_for_enduser_fields)(taggedForConditions, { $and: [{ condition: { healthieIntegrationId: TAG } }] }), 'Conditional logic error', 'healthieIntegrationId equality matches a tagged patient');
|
|
92
|
+
(0, testing_1.assert)(!(0, utilities_1.evaluate_conditional_logic_for_enduser_fields)(taggedForConditions, { $and: [{ condition: { healthieIntegrationId: 'other-clinic' } }] }), 'Conditional logic error', 'healthieIntegrationId equality rejects a different id');
|
|
93
|
+
(0, testing_1.assert)(!(0, utilities_1.evaluate_conditional_logic_for_enduser_fields)(untaggedForConditions, { $and: [{ condition: { healthieIntegrationId: TAG } }] }), 'Conditional logic error', 'healthieIntegrationId equality rejects an unset (primary) patient');
|
|
94
|
+
(0, testing_1.assert)((0, utilities_1.evaluate_conditional_logic_for_enduser_fields)(taggedForConditions, { $and: [{ condition: { healthieIntegrationId: { $isSet: true } } }] }), 'Conditional logic error', 'healthieIntegrationId $isSet matches a tagged patient');
|
|
95
|
+
(0, testing_1.assert)((0, utilities_1.evaluate_conditional_logic_for_enduser_fields)(untaggedForConditions, { $and: [{ condition: { healthieIntegrationId: { $isNotSet: true } } }] }), 'Conditional logic error', 'healthieIntegrationId $isNotSet matches an unset (primary) patient');
|
|
96
|
+
(0, testing_1.assert)(!(0, utilities_1.evaluate_conditional_logic_for_enduser_fields)(taggedForConditions, { $and: [{ condition: { healthieIntegrationId: { $ne: TAG } } }] }), 'Conditional logic error', 'healthieIntegrationId $ne rejects the matching tag');
|
|
97
|
+
(0, testing_1.assert)((0, utilities_1.evaluate_conditional_logic_for_enduser_fields)(untaggedForConditions, { $and: [{ condition: { healthieIntegrationId: { $ne: TAG } } }] }), 'Conditional logic error', 'healthieIntegrationId $ne matches an unset (primary) patient');
|
|
98
|
+
console.log("✅ healthieIntegrationId evaluates in conditional logic (equality, $isSet/$isNotSet, $ne)");
|
|
74
99
|
return [4 /*yield*/, sdk.api.integrations.createOne({
|
|
75
100
|
title: constants_1.HEALTHIE_TITLE,
|
|
76
101
|
disableEnduserAutoSync: true,
|
|
@@ -109,76 +134,85 @@ var healthie_multi_integration_tests = function (_a) {
|
|
|
109
134
|
case 5:
|
|
110
135
|
_c.sent();
|
|
111
136
|
return [4 /*yield*/, (0, testing_1.async_test)("primary integration unaffected by tagged settings update", function () { return sdk.api.integrations.getOne(primaryIntegrationId); }, { onResult: function (i) { return !i.pushAddedTags; } })
|
|
112
|
-
// ──
|
|
137
|
+
// ── Invalid API key surfaces as an actionable 400 (fake key → Healthie rejects the request) ──
|
|
113
138
|
];
|
|
114
139
|
case 6:
|
|
140
|
+
_c.sent();
|
|
141
|
+
// ── Invalid API key surfaces as an actionable 400 (fake key → Healthie rejects the request) ──
|
|
142
|
+
return [4 /*yield*/, (0, testing_1.async_test)("proxy_read webhooks with an invalid API key returns a clear error", function () { return sdk.api.integrations.proxy_read({
|
|
143
|
+
integration: constants_1.HEALTHIE_TITLE, type: 'webhooks', healthieIntegrationId: TAG,
|
|
144
|
+
}); }, { shouldError: true, onError: function (e) { return ((e === null || e === void 0 ? void 0 : e.message) || '').includes('API Key is Invalid'); } })
|
|
145
|
+
// ── Organization.healthieIntegrationIds pushed by create side effect ──
|
|
146
|
+
];
|
|
147
|
+
case 7:
|
|
148
|
+
// ── Invalid API key surfaces as an actionable 400 (fake key → Healthie rejects the request) ──
|
|
115
149
|
_c.sent();
|
|
116
150
|
// ── Organization.healthieIntegrationIds pushed by create side effect ──
|
|
117
151
|
return [4 /*yield*/, (0, testing_1.wait)(undefined, 2000)]; // side effects are async
|
|
118
|
-
case
|
|
152
|
+
case 8:
|
|
119
153
|
// ── Organization.healthieIntegrationIds pushed by create side effect ──
|
|
120
154
|
_c.sent(); // side effects are async
|
|
121
155
|
return [4 /*yield*/, (0, testing_1.async_test)("organization.healthieIntegrationIds includes tag after create", function () { return sdk.api.organizations.getOne(businessId); }, { onResult: function (o) { var _a; return !!((_a = o.healthieIntegrationIds) === null || _a === void 0 ? void 0 : _a.includes(TAG)); } })
|
|
122
156
|
// ── Inbound webhook resolution (help page proves the integration lookup without network) ──
|
|
123
157
|
];
|
|
124
|
-
case
|
|
158
|
+
case 9:
|
|
125
159
|
_c.sent();
|
|
126
160
|
// ── Inbound webhook resolution (help page proves the integration lookup without network) ──
|
|
127
161
|
return [4 /*yield*/, (0, testing_1.async_test)("webhook help page resolves primary (sandbox) without query param", function () { return axios_1.default.get("".concat(host, "/v1/webhooks/healthie/").concat(businessId)); }, { onResult: function (r) { return typeof r.data === 'string' && r.data.startsWith('Sandbox'); } })];
|
|
128
|
-
case
|
|
162
|
+
case 10:
|
|
129
163
|
// ── Inbound webhook resolution (help page proves the integration lookup without network) ──
|
|
130
164
|
_c.sent();
|
|
131
165
|
return [4 /*yield*/, (0, testing_1.async_test)("webhook help page resolves tagged (production) integration via healthieIntegrationId param", function () { return axios_1.default.get("".concat(host, "/v1/webhooks/healthie/").concat(businessId, "?healthieIntegrationId=").concat(TAG)); }, { onResult: function (r) { return typeof r.data === 'string' && r.data.startsWith('Production'); } })];
|
|
132
|
-
case
|
|
166
|
+
case 11:
|
|
133
167
|
_c.sent();
|
|
134
168
|
return [4 /*yield*/, (0, testing_1.async_test)("webhook help page rejects unknown healthieIntegrationId", function () { return axios_1.default.get("".concat(host, "/v1/webhooks/healthie/").concat(businessId, "?healthieIntegrationId=not-a-real-id")); }, { shouldError: true, onError: function (e) { var _a; return ((_a = e === null || e === void 0 ? void 0 : e.response) === null || _a === void 0 ? void 0 : _a.status) === 400; } })
|
|
135
169
|
// ── Enduser field + one-org-per-patient lock (relationship constraint) ──
|
|
136
170
|
];
|
|
137
|
-
case
|
|
171
|
+
case 12:
|
|
138
172
|
_c.sent();
|
|
139
173
|
return [4 /*yield*/, sdk.api.endusers.createOne({
|
|
140
174
|
email: 'multi-healthie-test@tellescope.com',
|
|
141
175
|
healthieIntegrationId: TAG,
|
|
142
176
|
})];
|
|
143
|
-
case
|
|
177
|
+
case 13:
|
|
144
178
|
enduser = _c.sent();
|
|
145
179
|
enduserId = enduser.id;
|
|
146
180
|
if (enduser.healthieIntegrationId !== TAG) {
|
|
147
181
|
throw new Error("healthieIntegrationId not persisted on enduser create");
|
|
148
182
|
}
|
|
149
183
|
return [4 /*yield*/, (0, testing_1.async_test)("healthieIntegrationId freely changeable while unlinked", function () { return sdk.api.endusers.updateOne(enduserId, { healthieIntegrationId: '' }); }, { onResult: function (e) { return !e.healthieIntegrationId; } })];
|
|
150
|
-
case
|
|
184
|
+
case 14:
|
|
151
185
|
_c.sent();
|
|
152
186
|
return [4 /*yield*/, (0, testing_1.async_test)("healthieIntegrationId re-set while unlinked", function () { return sdk.api.endusers.updateOne(enduserId, { healthieIntegrationId: TAG }); }, { onResult: function (e) { return e.healthieIntegrationId === TAG; } })
|
|
153
187
|
// link the patient to Healthie (reference with a Healthie patient id)
|
|
154
188
|
];
|
|
155
|
-
case 14:
|
|
156
|
-
_c.sent();
|
|
157
|
-
// link the patient to Healthie (reference with a Healthie patient id)
|
|
158
|
-
return [4 /*yield*/, sdk.api.endusers.updateOne(enduserId, { references: [{ type: constants_1.HEALTHIE_TITLE, id: '12345' }] }, { replaceObjectFields: true })];
|
|
159
189
|
case 15:
|
|
160
|
-
// link the patient to Healthie (reference with a Healthie patient id)
|
|
161
190
|
_c.sent();
|
|
162
|
-
|
|
191
|
+
// link the patient to Healthie (reference with a Healthie patient id)
|
|
192
|
+
return [4 /*yield*/, sdk.api.endusers.updateOne(enduserId, { references: [{ type: constants_1.HEALTHIE_TITLE, id: '12345' }] }, { replaceObjectFields: true })
|
|
193
|
+
// no lock: linked patients stay editable so customers can self-serve fix or migrate them
|
|
194
|
+
];
|
|
163
195
|
case 16:
|
|
196
|
+
// link the patient to Healthie (reference with a Healthie patient id)
|
|
164
197
|
_c.sent();
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
];
|
|
198
|
+
// no lock: linked patients stay editable so customers can self-serve fix or migrate them
|
|
199
|
+
return [4 /*yield*/, (0, testing_1.async_test)("healthieIntegrationId changeable while linked (self-serve fix/migrate)", function () { return sdk.api.endusers.updateOne(enduserId, { healthieIntegrationId: 'somewhere-else' }); }, { onResult: function (e) { return e.healthieIntegrationId === 'somewhere-else'; } })];
|
|
168
200
|
case 17:
|
|
201
|
+
// no lock: linked patients stay editable so customers can self-serve fix or migrate them
|
|
169
202
|
_c.sent();
|
|
170
|
-
|
|
171
|
-
return [4 /*yield*/, sdk.api.endusers.updateOne(enduserId, { references: [] }, { replaceObjectFields: true })];
|
|
203
|
+
return [4 /*yield*/, (0, testing_1.async_test)("healthieIntegrationId revertible while linked", function () { return sdk.api.endusers.updateOne(enduserId, { healthieIntegrationId: TAG }); }, { onResult: function (e) { return e.healthieIntegrationId === TAG; } })];
|
|
172
204
|
case 18:
|
|
173
|
-
// unlink → changeable again
|
|
174
205
|
_c.sent();
|
|
175
|
-
return [4 /*yield*/,
|
|
206
|
+
return [4 /*yield*/, sdk.api.endusers.updateOne(enduserId, { references: [] }, { replaceObjectFields: true })];
|
|
207
|
+
case 19:
|
|
208
|
+
_c.sent();
|
|
209
|
+
return [4 /*yield*/, (0, testing_1.async_test)("healthieIntegrationId clearable", function () { return sdk.api.endusers.updateOne(enduserId, { healthieIntegrationId: '' }); }, { onResult: function (e) { return !e.healthieIntegrationId; } })
|
|
176
210
|
// ── Formsort mapping ──
|
|
177
211
|
];
|
|
178
|
-
case
|
|
212
|
+
case 20:
|
|
179
213
|
_c.sent();
|
|
180
214
|
return [4 /*yield*/, sdk.api.forms.createOne({ title: "Multi Healthie FormSort" })];
|
|
181
|
-
case
|
|
215
|
+
case 21:
|
|
182
216
|
form_1 = _c.sent();
|
|
183
217
|
formId = form_1.id;
|
|
184
218
|
formsortEmail_1 = 'multi-healthie-formsort@tellescope.com';
|
|
@@ -191,37 +225,32 @@ var healthie_multi_integration_tests = function (_a) {
|
|
|
191
225
|
{ key: 'email', value: formsortEmail_1 },
|
|
192
226
|
{ key: 'healthieIntegrationId', value: TAG },
|
|
193
227
|
], "multi-healthie-1")];
|
|
194
|
-
case
|
|
228
|
+
case 22:
|
|
195
229
|
_c.sent();
|
|
196
230
|
return [4 /*yield*/, (0, testing_1.async_test)("formsort sets healthieIntegrationId on unlinked enduser", function () { return sdk.api.endusers.getSome({ filter: { email: formsortEmail_1 } }); }, { onResult: function (es) {
|
|
197
231
|
var e = es.find(function (e) { return e.email === formsortEmail_1; });
|
|
198
232
|
formsortEnduserId = (e === null || e === void 0 ? void 0 : e.id) || '';
|
|
199
233
|
return (e === null || e === void 0 ? void 0 : e.healthieIntegrationId) === TAG;
|
|
200
234
|
} })
|
|
201
|
-
//
|
|
235
|
+
// linked endusers are re-routable via formsort too (self-serve fix/migrate)
|
|
202
236
|
];
|
|
203
|
-
case
|
|
237
|
+
case 23:
|
|
204
238
|
_c.sent();
|
|
205
|
-
//
|
|
239
|
+
// linked endusers are re-routable via formsort too (self-serve fix/migrate)
|
|
206
240
|
return [4 /*yield*/, sdk.api.endusers.updateOne(formsortEnduserId, { references: [{ type: constants_1.HEALTHIE_TITLE, id: '6789' }] }, { replaceObjectFields: true })];
|
|
207
|
-
case
|
|
208
|
-
//
|
|
241
|
+
case 24:
|
|
242
|
+
// linked endusers are re-routable via formsort too (self-serve fix/migrate)
|
|
209
243
|
_c.sent();
|
|
210
244
|
return [4 /*yield*/, postToFormsort([
|
|
211
245
|
{ key: 'email', value: formsortEmail_1 },
|
|
212
246
|
{ key: 'healthieIntegrationId', value: 'somewhere-else' },
|
|
213
247
|
], "multi-healthie-2")];
|
|
214
|
-
case 24:
|
|
215
|
-
_c.sent();
|
|
216
|
-
return [4 /*yield*/, (0, testing_1.wait)(undefined, 1000)];
|
|
217
248
|
case 25:
|
|
218
249
|
_c.sent();
|
|
219
|
-
return [4 /*yield*/, (0, testing_1.
|
|
250
|
+
return [4 /*yield*/, (0, testing_1.wait)(undefined, 1000)];
|
|
220
251
|
case 26:
|
|
221
252
|
_c.sent();
|
|
222
|
-
return [4 /*yield*/, (0, testing_1.async_test)("formsort
|
|
223
|
-
return e.title === "Healthie Integration Change Blocked" && e.enduserId === formsortEnduserId;
|
|
224
|
-
}); } })
|
|
253
|
+
return [4 /*yield*/, (0, testing_1.async_test)("formsort updates healthieIntegrationId on a linked enduser", function () { return sdk.api.endusers.getOne(formsortEnduserId); }, { onResult: function (e) { return e.healthieIntegrationId === 'somewhere-else'; } })
|
|
225
254
|
// ── Removing the primary must not affect the tagged integration; org list recomputes on delete ──
|
|
226
255
|
];
|
|
227
256
|
case 27:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"healthie_multi_integration.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/healthie_multi_integration.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"healthie_multi_integration.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/healthie_multi_integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journey_delete_cancels_actions.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/journey_delete_cancels_actions.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,eAAO,MAAM,oCAAoC;SAAuC,OAAO;iBAAe,OAAO;mBAmGpH,CAAA"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
35
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
36
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
37
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
38
|
+
function step(op) {
|
|
39
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
40
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
41
|
+
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;
|
|
42
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
43
|
+
switch (op[0]) {
|
|
44
|
+
case 0: case 1: t = op; break;
|
|
45
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
46
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
47
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
48
|
+
default:
|
|
49
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
50
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
51
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
52
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
53
|
+
if (t[2]) _.ops.pop();
|
|
54
|
+
_.trys.pop(); continue;
|
|
55
|
+
}
|
|
56
|
+
op = body.call(thisArg, _);
|
|
57
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
58
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
+
exports.journey_delete_cancels_actions_tests = void 0;
|
|
63
|
+
var sdk_1 = require("../../sdk");
|
|
64
|
+
var testing_1 = require("@tellescope/testing");
|
|
65
|
+
var constants_1 = require("@tellescope/constants");
|
|
66
|
+
var host = process.env.API_URL || 'http://localhost:8080';
|
|
67
|
+
var journey_delete_cancels_actions_tests = function (_a) {
|
|
68
|
+
var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
|
|
69
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
70
|
+
var journeyId, enduserId, stepId, journey, step, enduser_1, activeAction_1, finishedAction_1, before, expectedReason_1, finishedAfter;
|
|
71
|
+
return __generator(this, function (_b) {
|
|
72
|
+
switch (_b.label) {
|
|
73
|
+
case 0:
|
|
74
|
+
(0, testing_1.log_header)("Journey Delete Cancels Pending Actions Tests");
|
|
75
|
+
_b.label = 1;
|
|
76
|
+
case 1:
|
|
77
|
+
_b.trys.push([1, , 11, 13]);
|
|
78
|
+
return [4 /*yield*/, sdk.api.journeys.createOne({ title: "Cascade Cancel Journey " + Date.now() })];
|
|
79
|
+
case 2:
|
|
80
|
+
journey = _b.sent();
|
|
81
|
+
journeyId = journey.id;
|
|
82
|
+
return [4 /*yield*/, sdk.api.automation_steps.createOne({
|
|
83
|
+
journeyId: journey.id,
|
|
84
|
+
action: { type: 'setEnduserStatus', info: { status: 'Test Status' } },
|
|
85
|
+
events: [{ type: 'onJourneyStart', info: {} }],
|
|
86
|
+
})];
|
|
87
|
+
case 3:
|
|
88
|
+
step = _b.sent();
|
|
89
|
+
stepId = step.id;
|
|
90
|
+
return [4 /*yield*/, sdk.api.endusers.createOne({
|
|
91
|
+
fname: 'Cascade',
|
|
92
|
+
lname: 'Cancel',
|
|
93
|
+
email: 'test-cascade-cancel-' + Date.now() + '@example.com',
|
|
94
|
+
})];
|
|
95
|
+
case 4:
|
|
96
|
+
enduser_1 = _b.sent();
|
|
97
|
+
enduserId = enduser_1.id;
|
|
98
|
+
return [4 /*yield*/, sdk.api.automated_actions.createOne({
|
|
99
|
+
journeyId: journey.id,
|
|
100
|
+
automationStepId: step.id,
|
|
101
|
+
enduserId: enduser_1.id,
|
|
102
|
+
processAfter: Date.now() + 1000000,
|
|
103
|
+
status: 'active',
|
|
104
|
+
event: { type: 'onJourneyStart', info: {} },
|
|
105
|
+
action: { type: 'setEnduserStatus', info: { status: 'Test Status' } },
|
|
106
|
+
})
|
|
107
|
+
// Create a finished action to confirm it is left untouched by the cascade
|
|
108
|
+
];
|
|
109
|
+
case 5:
|
|
110
|
+
activeAction_1 = _b.sent();
|
|
111
|
+
return [4 /*yield*/, sdk.api.automated_actions.createOne({
|
|
112
|
+
journeyId: journey.id,
|
|
113
|
+
automationStepId: step.id,
|
|
114
|
+
enduserId: enduser_1.id,
|
|
115
|
+
processAfter: Date.now() + 1000000,
|
|
116
|
+
status: 'finished',
|
|
117
|
+
event: { type: 'onJourneyStart', info: {} },
|
|
118
|
+
action: { type: 'setEnduserStatus', info: { status: 'Test Status' } },
|
|
119
|
+
})
|
|
120
|
+
// Assert the action starts active
|
|
121
|
+
];
|
|
122
|
+
case 6:
|
|
123
|
+
finishedAction_1 = _b.sent();
|
|
124
|
+
return [4 /*yield*/, sdk.api.automated_actions.getOne(activeAction_1.id)];
|
|
125
|
+
case 7:
|
|
126
|
+
before = _b.sent();
|
|
127
|
+
if (before.status !== 'active') {
|
|
128
|
+
throw new Error("Expected action to start 'active', got '".concat(before.status, "'"));
|
|
129
|
+
}
|
|
130
|
+
console.log("✓ Action is active before journey deletion");
|
|
131
|
+
// Delete the journey — this should cascade cancel the pending action
|
|
132
|
+
return [4 /*yield*/, sdk.api.journeys.deleteOne(journey.id)];
|
|
133
|
+
case 8:
|
|
134
|
+
// Delete the journey — this should cascade cancel the pending action
|
|
135
|
+
_b.sent();
|
|
136
|
+
journeyId = undefined; // already deleted, skip in cleanup
|
|
137
|
+
expectedReason_1 = constants_1.AUTOMATED_ACTION_CANCEL_REASONS.indexOf('Journey Deleted');
|
|
138
|
+
return [4 /*yield*/, pollForResults(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
139
|
+
var actions, active, finished;
|
|
140
|
+
return __generator(this, function (_a) {
|
|
141
|
+
switch (_a.label) {
|
|
142
|
+
case 0: return [4 /*yield*/, sdk.api.automated_actions.getSome({ filter: { enduserId: enduser_1.id } })];
|
|
143
|
+
case 1:
|
|
144
|
+
actions = _a.sent();
|
|
145
|
+
active = actions.find(function (a) { return a.id === activeAction_1.id; });
|
|
146
|
+
finished = actions.find(function (a) { return a.id === finishedAction_1.id; });
|
|
147
|
+
return [2 /*return*/, { active: active, finished: finished }];
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}); }, function (_a) {
|
|
151
|
+
var active = _a.active;
|
|
152
|
+
return ((active === null || active === void 0 ? void 0 : active.status) === 'cancelled'
|
|
153
|
+
&& (active === null || active === void 0 ? void 0 : active.cancelReason) === expectedReason_1
|
|
154
|
+
&& (active === null || active === void 0 ? void 0 : active.cancelledBy) === sdk.userInfo.id);
|
|
155
|
+
}, 'Active action should be cancelled with Journey Deleted reason and cancelledBy after journey deletion')];
|
|
156
|
+
case 9:
|
|
157
|
+
_b.sent();
|
|
158
|
+
console.log("✓ Active action cancelled with Journey Deleted reason and cancelledBy set to deleting user");
|
|
159
|
+
return [4 /*yield*/, sdk.api.automated_actions.getOne(finishedAction_1.id)];
|
|
160
|
+
case 10:
|
|
161
|
+
finishedAfter = _b.sent();
|
|
162
|
+
if (finishedAfter.status !== 'finished') {
|
|
163
|
+
throw new Error("Expected finished action to remain 'finished', got '".concat(finishedAfter.status, "'"));
|
|
164
|
+
}
|
|
165
|
+
console.log("✓ Finished action left untouched");
|
|
166
|
+
console.log("✅ Journey Delete Cancels Pending Actions tests completed successfully");
|
|
167
|
+
return [3 /*break*/, 13];
|
|
168
|
+
case 11:
|
|
169
|
+
// Cleanup — journey is already deleted if the flow completed
|
|
170
|
+
return [4 /*yield*/, Promise.all([
|
|
171
|
+
enduserId ? sdk.api.endusers.deleteOne(enduserId).catch(function () { }) : undefined,
|
|
172
|
+
stepId ? sdk.api.automation_steps.deleteOne(stepId).catch(function () { }) : undefined,
|
|
173
|
+
journeyId ? sdk.api.journeys.deleteOne(journeyId).catch(function () { }) : undefined,
|
|
174
|
+
])];
|
|
175
|
+
case 12:
|
|
176
|
+
// Cleanup — journey is already deleted if the flow completed
|
|
177
|
+
_b.sent();
|
|
178
|
+
return [7 /*endfinally*/];
|
|
179
|
+
case 13: return [2 /*return*/];
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
exports.journey_delete_cancels_actions_tests = journey_delete_cancels_actions_tests;
|
|
185
|
+
var pollForResults = function (fetchFn, evaluateFn, description, intervalMs, maxIterations) {
|
|
186
|
+
if (intervalMs === void 0) { intervalMs = 500; }
|
|
187
|
+
if (maxIterations === void 0) { maxIterations = 30; }
|
|
188
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
189
|
+
var lastResult, i;
|
|
190
|
+
return __generator(this, function (_a) {
|
|
191
|
+
switch (_a.label) {
|
|
192
|
+
case 0:
|
|
193
|
+
i = 0;
|
|
194
|
+
_a.label = 1;
|
|
195
|
+
case 1:
|
|
196
|
+
if (!(i < maxIterations)) return [3 /*break*/, 5];
|
|
197
|
+
return [4 /*yield*/, (0, testing_1.wait)(undefined, intervalMs)];
|
|
198
|
+
case 2:
|
|
199
|
+
_a.sent();
|
|
200
|
+
return [4 /*yield*/, fetchFn()];
|
|
201
|
+
case 3:
|
|
202
|
+
lastResult = _a.sent();
|
|
203
|
+
if (evaluateFn(lastResult)) {
|
|
204
|
+
console.log("\u2713 ".concat(description, " - completed after ").concat((i + 1) * intervalMs, "ms"));
|
|
205
|
+
return [2 /*return*/];
|
|
206
|
+
}
|
|
207
|
+
_a.label = 4;
|
|
208
|
+
case 4:
|
|
209
|
+
i++;
|
|
210
|
+
return [3 /*break*/, 1];
|
|
211
|
+
case 5:
|
|
212
|
+
console.log('Final polling result:', lastResult);
|
|
213
|
+
throw new Error("Polling timeout: ".concat(description, " - waited ").concat(maxIterations * intervalMs, "ms"));
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
};
|
|
218
|
+
// Allow running this test file independently
|
|
219
|
+
if (require.main === module) {
|
|
220
|
+
console.log("\uD83C\uDF10 Using API URL: ".concat(host));
|
|
221
|
+
var sdk_2 = new sdk_1.Session({ host: host });
|
|
222
|
+
var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
|
|
223
|
+
var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
224
|
+
var setup_tests;
|
|
225
|
+
return __generator(this, function (_a) {
|
|
226
|
+
switch (_a.label) {
|
|
227
|
+
case 0: return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("../setup")); })];
|
|
228
|
+
case 1:
|
|
229
|
+
setup_tests = (_a.sent()).setup_tests;
|
|
230
|
+
return [4 /*yield*/, setup_tests(sdk_2, sdkNonAdmin_1)];
|
|
231
|
+
case 2:
|
|
232
|
+
_a.sent();
|
|
233
|
+
return [4 /*yield*/, (0, exports.journey_delete_cancels_actions_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
|
|
234
|
+
case 3:
|
|
235
|
+
_a.sent();
|
|
236
|
+
return [2 /*return*/];
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
}); };
|
|
240
|
+
runTests()
|
|
241
|
+
.then(function () {
|
|
242
|
+
console.log("✅ Journey Delete Cancels Pending Actions test suite completed successfully");
|
|
243
|
+
process.exit(0);
|
|
244
|
+
})
|
|
245
|
+
.catch(function (error) {
|
|
246
|
+
console.error("❌ Journey Delete Cancels Pending Actions test suite failed:", error);
|
|
247
|
+
process.exit(1);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=journey_delete_cancels_actions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journey_delete_cancels_actions.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/journey_delete_cancels_actions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Session } from "../../../sdk";
|
|
2
|
+
/**
|
|
3
|
+
* Reproduction + regression test for the reported vulnerability:
|
|
4
|
+
*
|
|
5
|
+
* A @wearehackerone.com email "joined" a customer's organization without being invited, and
|
|
6
|
+
* duplicate user records existed for that email — each bound to a different businessId.
|
|
7
|
+
*
|
|
8
|
+
* Root cause: the public `POST /v1/users/register` endpoint. `addPublicEndpoint` accepts an
|
|
9
|
+
* OPTIONAL, caller-supplied `businessId` (routing.ts) and bakes it into the handler's DB. The
|
|
10
|
+
* register handler's only duplicate guard (`DB.users.findOne({ email })`) is therefore scoped to
|
|
11
|
+
* whatever org the caller named, and the subsequent `DB.users.insertOne(...)` stamps that
|
|
12
|
+
* caller-supplied businessId onto a new `accountType: 'Business'` user — bypassing the
|
|
13
|
+
* globalUnique: ['email'] enforcement that only runs in the generic create route.
|
|
14
|
+
*
|
|
15
|
+
* The "victim org" here is the test admin's own org (sdk.userInfo.businessId): an org the
|
|
16
|
+
* anonymous caller was never invited to. The admin is used purely to OBSERVE whether an
|
|
17
|
+
* uninvited user record materialized inside their org (getOne({ email }) is org-scoped and
|
|
18
|
+
* throws when the email is absent from the caller's tenant).
|
|
19
|
+
*
|
|
20
|
+
* Expected results:
|
|
21
|
+
* - VULNERABLE code: the assertions FAIL — the planted user appears inside the victim org,
|
|
22
|
+
* proving the exploit ("EXPLOIT CONFIRMED" in the failure message).
|
|
23
|
+
* - FIXED code: register ignores the caller-supplied businessId (self-signups are created
|
|
24
|
+
* org-less and duplicates are rejected globally), so nothing appears in the victim org and
|
|
25
|
+
* the assertions PASS.
|
|
26
|
+
*
|
|
27
|
+
* Uses unique emails per run (Date.now()) so re-runs never collide on the platform-wide unique
|
|
28
|
+
* email constraint. NOTE: on the FIXED path these registrations create org-less user records
|
|
29
|
+
* that an org-scoped admin cannot delete — harmless residue (unique emails), inherent to the
|
|
30
|
+
* legitimate "root register, no org" signup behavior.
|
|
31
|
+
*/
|
|
32
|
+
export declare const register_business_id_injection_tests: ({ sdk }: {
|
|
33
|
+
sdk: Session;
|
|
34
|
+
sdkNonAdmin: Session;
|
|
35
|
+
}) => Promise<void>;
|
|
36
|
+
//# sourceMappingURL=register_business_id_injection.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register_business_id_injection.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/register_business_id_injection.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAsBtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,oCAAoC;SAA2B,OAAO;iBAAe,OAAO;mBA+DxG,CAAA"}
|