@tellescope/sdk 1.251.0 → 1.252.0

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 (89) hide show
  1. package/lib/cjs/tests/api_tests/calendar_event_webhook_template.test.d.ts +6 -0
  2. package/lib/cjs/tests/api_tests/calendar_event_webhook_template.test.d.ts.map +1 -0
  3. package/lib/cjs/tests/api_tests/calendar_event_webhook_template.test.js +337 -0
  4. package/lib/cjs/tests/api_tests/calendar_event_webhook_template.test.js.map +1 -0
  5. package/lib/cjs/tests/api_tests/enduser_login_rate_limits.test.d.ts +6 -0
  6. package/lib/cjs/tests/api_tests/enduser_login_rate_limits.test.d.ts.map +1 -0
  7. package/lib/cjs/tests/api_tests/enduser_login_rate_limits.test.js +287 -0
  8. package/lib/cjs/tests/api_tests/enduser_login_rate_limits.test.js.map +1 -0
  9. package/lib/cjs/tests/api_tests/push_forms_to_portal_group_completion.test.d.ts.map +1 -1
  10. package/lib/cjs/tests/api_tests/push_forms_to_portal_group_completion.test.js +234 -198
  11. package/lib/cjs/tests/api_tests/push_forms_to_portal_group_completion.test.js.map +1 -1
  12. package/lib/cjs/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.d.ts +28 -0
  13. package/lib/cjs/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.d.ts.map +1 -0
  14. package/lib/cjs/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.js +349 -0
  15. package/lib/cjs/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.js.map +1 -0
  16. package/lib/cjs/tests/api_tests/security/F-0005-ai-conversations-rbac.test.d.ts +28 -0
  17. package/lib/cjs/tests/api_tests/security/F-0005-ai-conversations-rbac.test.d.ts.map +1 -0
  18. package/lib/cjs/tests/api_tests/security/F-0005-ai-conversations-rbac.test.js +247 -0
  19. package/lib/cjs/tests/api_tests/security/F-0005-ai-conversations-rbac.test.js.map +1 -0
  20. package/lib/cjs/tests/api_tests/security/F-0007-invite-user-enumeration.test.d.ts +29 -0
  21. package/lib/cjs/tests/api_tests/security/F-0007-invite-user-enumeration.test.d.ts.map +1 -0
  22. package/lib/cjs/tests/api_tests/security/F-0007-invite-user-enumeration.test.js +278 -0
  23. package/lib/cjs/tests/api_tests/security/F-0007-invite-user-enumeration.test.js.map +1 -0
  24. package/lib/cjs/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.d.ts +24 -0
  25. package/lib/cjs/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.d.ts.map +1 -0
  26. package/lib/cjs/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.js +201 -0
  27. package/lib/cjs/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.js.map +1 -0
  28. package/lib/cjs/tests/api_tests/security/F-0013-sanitize-user-html.test.d.ts +2 -0
  29. package/lib/cjs/tests/api_tests/security/F-0013-sanitize-user-html.test.d.ts.map +1 -0
  30. package/lib/cjs/tests/api_tests/security/F-0013-sanitize-user-html.test.js +148 -0
  31. package/lib/cjs/tests/api_tests/security/F-0013-sanitize-user-html.test.js.map +1 -0
  32. package/lib/cjs/tests/api_tests/security/F-0016-prototype-pollution.test.d.ts +2 -0
  33. package/lib/cjs/tests/api_tests/security/F-0016-prototype-pollution.test.d.ts.map +1 -0
  34. package/lib/cjs/tests/api_tests/security/F-0016-prototype-pollution.test.js +88 -0
  35. package/lib/cjs/tests/api_tests/security/F-0016-prototype-pollution.test.js.map +1 -0
  36. package/lib/cjs/tests/tests.d.ts.map +1 -1
  37. package/lib/cjs/tests/tests.js +186 -151
  38. package/lib/cjs/tests/tests.js.map +1 -1
  39. package/lib/esm/tests/api_tests/calendar_event_webhook_template.test.d.ts +6 -0
  40. package/lib/esm/tests/api_tests/calendar_event_webhook_template.test.d.ts.map +1 -0
  41. package/lib/esm/tests/api_tests/calendar_event_webhook_template.test.js +333 -0
  42. package/lib/esm/tests/api_tests/calendar_event_webhook_template.test.js.map +1 -0
  43. package/lib/esm/tests/api_tests/enduser_login_rate_limits.test.d.ts +6 -0
  44. package/lib/esm/tests/api_tests/enduser_login_rate_limits.test.d.ts.map +1 -0
  45. package/lib/esm/tests/api_tests/enduser_login_rate_limits.test.js +280 -0
  46. package/lib/esm/tests/api_tests/enduser_login_rate_limits.test.js.map +1 -0
  47. package/lib/esm/tests/api_tests/push_forms_to_portal_group_completion.test.d.ts.map +1 -1
  48. package/lib/esm/tests/api_tests/push_forms_to_portal_group_completion.test.js +235 -199
  49. package/lib/esm/tests/api_tests/push_forms_to_portal_group_completion.test.js.map +1 -1
  50. package/lib/esm/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.d.ts +28 -0
  51. package/lib/esm/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.d.ts.map +1 -0
  52. package/lib/esm/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.js +345 -0
  53. package/lib/esm/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.js.map +1 -0
  54. package/lib/esm/tests/api_tests/security/F-0005-ai-conversations-rbac.test.d.ts +28 -0
  55. package/lib/esm/tests/api_tests/security/F-0005-ai-conversations-rbac.test.d.ts.map +1 -0
  56. package/lib/esm/tests/api_tests/security/F-0005-ai-conversations-rbac.test.js +243 -0
  57. package/lib/esm/tests/api_tests/security/F-0005-ai-conversations-rbac.test.js.map +1 -0
  58. package/lib/esm/tests/api_tests/security/F-0007-invite-user-enumeration.test.d.ts +29 -0
  59. package/lib/esm/tests/api_tests/security/F-0007-invite-user-enumeration.test.d.ts.map +1 -0
  60. package/lib/esm/tests/api_tests/security/F-0007-invite-user-enumeration.test.js +271 -0
  61. package/lib/esm/tests/api_tests/security/F-0007-invite-user-enumeration.test.js.map +1 -0
  62. package/lib/esm/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.d.ts +24 -0
  63. package/lib/esm/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.d.ts.map +1 -0
  64. package/lib/esm/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.js +194 -0
  65. package/lib/esm/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.js.map +1 -0
  66. package/lib/esm/tests/api_tests/security/F-0013-sanitize-user-html.test.d.ts +2 -0
  67. package/lib/esm/tests/api_tests/security/F-0013-sanitize-user-html.test.d.ts.map +1 -0
  68. package/lib/esm/tests/api_tests/security/F-0013-sanitize-user-html.test.js +144 -0
  69. package/lib/esm/tests/api_tests/security/F-0013-sanitize-user-html.test.js.map +1 -0
  70. package/lib/esm/tests/api_tests/security/F-0016-prototype-pollution.test.d.ts +2 -0
  71. package/lib/esm/tests/api_tests/security/F-0016-prototype-pollution.test.d.ts.map +1 -0
  72. package/lib/esm/tests/api_tests/security/F-0016-prototype-pollution.test.js +84 -0
  73. package/lib/esm/tests/api_tests/security/F-0016-prototype-pollution.test.js.map +1 -0
  74. package/lib/esm/tests/tests.d.ts.map +1 -1
  75. package/lib/esm/tests/tests.js +186 -151
  76. package/lib/esm/tests/tests.js.map +1 -1
  77. package/lib/tsconfig.tsbuildinfo +1 -1
  78. package/package.json +10 -10
  79. package/src/tests/api_tests/calendar_event_webhook_template.test.ts +204 -0
  80. package/src/tests/api_tests/enduser_login_rate_limits.test.ts +178 -0
  81. package/src/tests/api_tests/push_forms_to_portal_group_completion.test.ts +113 -88
  82. package/src/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.ts +236 -0
  83. package/src/tests/api_tests/security/F-0005-ai-conversations-rbac.test.ts +154 -0
  84. package/src/tests/api_tests/security/F-0007-invite-user-enumeration.test.ts +198 -0
  85. package/src/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.ts +130 -0
  86. package/src/tests/api_tests/security/F-0013-sanitize-user-html.test.ts +109 -0
  87. package/src/tests/api_tests/security/F-0016-prototype-pollution.test.ts +50 -0
  88. package/src/tests/tests.ts +19 -2
  89. package/test_generated.pdf +0 -0
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.enduser_login_rate_limits_tests = void 0;
43
+ require('source-map-support').install();
44
+ var axios_1 = __importDefault(require("axios"));
45
+ var sdk_1 = require("../../sdk");
46
+ var testing_1 = require("@tellescope/testing");
47
+ var setup_1 = require("../setup");
48
+ var host = process.env.API_URL || 'http://localhost:8080';
49
+ // Per-IP rate limits applied to enduser public endpoints:
50
+ // POST /v1/login-enduser 20 / min, 100 / hour
51
+ // POST /v1/begin-enduser-login-flow 10 / min, 50 / hour
52
+ // POST /v1/endusers/send-otp-code 5 / min, 30 / hour
53
+ // Plus a per-identifier limit on begin_login_flow: 5 / 10 min per email|phone.
54
+ var post = function (path, body) { return __awaiter(void 0, void 0, void 0, function () {
55
+ var res, err_1;
56
+ var _a, _b;
57
+ return __generator(this, function (_c) {
58
+ switch (_c.label) {
59
+ case 0:
60
+ _c.trys.push([0, 2, , 3]);
61
+ return [4 /*yield*/, axios_1.default.post("".concat(host).concat(path), body, { validateStatus: function () { return true; } })];
62
+ case 1:
63
+ res = _c.sent();
64
+ return [2 /*return*/, { status: res.status, data: res.data }];
65
+ case 2:
66
+ err_1 = _c.sent();
67
+ return [2 /*return*/, { status: (_a = err_1 === null || err_1 === void 0 ? void 0 : err_1.response) === null || _a === void 0 ? void 0 : _a.status, data: (_b = err_1 === null || err_1 === void 0 ? void 0 : err_1.response) === null || _b === void 0 ? void 0 : _b.data }];
68
+ case 3: return [2 /*return*/];
69
+ }
70
+ });
71
+ }); };
72
+ var fire_until_429 = function (cap, send) { return __awaiter(void 0, void 0, void 0, function () {
73
+ var triggeredAt, i, status_1;
74
+ return __generator(this, function (_a) {
75
+ switch (_a.label) {
76
+ case 0:
77
+ triggeredAt = -1;
78
+ i = 0;
79
+ _a.label = 1;
80
+ case 1:
81
+ if (!(i < cap + 5)) return [3 /*break*/, 4];
82
+ return [4 /*yield*/, send(i)];
83
+ case 2:
84
+ status_1 = (_a.sent()).status;
85
+ if (status_1 === 429) {
86
+ triggeredAt = i;
87
+ return [3 /*break*/, 4];
88
+ }
89
+ _a.label = 3;
90
+ case 3:
91
+ i++;
92
+ return [3 /*break*/, 1];
93
+ case 4: return [2 /*return*/, triggeredAt];
94
+ }
95
+ });
96
+ }); };
97
+ var enduser_login_rate_limits_tests = function (_a) {
98
+ var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
99
+ return __awaiter(void 0, void 0, void 0, function () {
100
+ var businessId, loginTrip, beginIpTrip, fixedEmail, beginIdTrip, fakeToken, sendOtpTrip, tripped, ts, enduser, goodLogin_1, goodLoginRetry_1;
101
+ return __generator(this, function (_b) {
102
+ switch (_b.label) {
103
+ case 0:
104
+ (0, testing_1.log_header)("Enduser Login Rate Limit Tests");
105
+ businessId = sdk.userInfo.businessId;
106
+ // Ensure throttled_events from prior tests don't bleed in.
107
+ return [4 /*yield*/, sdk.reset_db()
108
+ // ---- /v1/login-enduser per-IP cap (20/min) ----
109
+ // Bogus emails ensure we never reach the actual DB lookup / login work.
110
+ ];
111
+ case 1:
112
+ // Ensure throttled_events from prior tests don't bleed in.
113
+ _b.sent();
114
+ return [4 /*yield*/, fire_until_429(20, function (i) { return post('/v1/login-enduser', {
115
+ email: "rl-login-".concat(Date.now(), "-").concat(i, "@tellescope.com"),
116
+ password: 'NotARealPassword!2025',
117
+ businessId: businessId,
118
+ }); })];
119
+ case 2:
120
+ loginTrip = _b.sent();
121
+ return [4 /*yield*/, (0, testing_1.async_test)('login per-IP throttle trips within first 21 requests', function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
122
+ return [2 /*return*/, (loginTrip >= 0 && loginTrip <= 20) ? 'tripped' : "not-tripped:".concat(loginTrip)];
123
+ }); }); }, { expectedResult: 'tripped' })];
124
+ case 3:
125
+ _b.sent();
126
+ return [4 /*yield*/, sdk.reset_db()
127
+ // ---- /v1/begin-enduser-login-flow per-IP cap (10/min) ----
128
+ // Use distinct emails so the per-identifier limit (5/10min) does NOT trip first;
129
+ // we want the IP cap to be the first thing to fire.
130
+ ];
131
+ case 4:
132
+ _b.sent();
133
+ return [4 /*yield*/, fire_until_429(10, function (i) { return post('/v1/begin-enduser-login-flow', {
134
+ email: "rl-begin-ip-".concat(Date.now(), "-").concat(i, "@tellescope.com"),
135
+ businessId: businessId,
136
+ }); })];
137
+ case 5:
138
+ beginIpTrip = _b.sent();
139
+ return [4 /*yield*/, (0, testing_1.async_test)('begin_login_flow per-IP throttle trips within first 11 requests', function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
140
+ return [2 /*return*/, (beginIpTrip >= 0 && beginIpTrip <= 10) ? 'tripped' : "not-tripped:".concat(beginIpTrip)];
141
+ }); }); }, { expectedResult: 'tripped' })];
142
+ case 6:
143
+ _b.sent();
144
+ return [4 /*yield*/, sdk.reset_db()
145
+ // ---- /v1/begin-enduser-login-flow per-identifier cap (5 / 10 min per email) ----
146
+ // Hit a single email below the per-IP cap.
147
+ ];
148
+ case 7:
149
+ _b.sent();
150
+ fixedEmail = "rl-begin-id-".concat(Date.now(), "@tellescope.com");
151
+ return [4 /*yield*/, fire_until_429(5, function () { return post('/v1/begin-enduser-login-flow', {
152
+ email: fixedEmail,
153
+ businessId: businessId,
154
+ }); })];
155
+ case 8:
156
+ beginIdTrip = _b.sent();
157
+ return [4 /*yield*/, (0, testing_1.async_test)('begin_login_flow per-identifier throttle trips within first 6 requests', function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
158
+ return [2 /*return*/, (beginIdTrip >= 0 && beginIdTrip <= 5) ? 'tripped' : "not-tripped:".concat(beginIdTrip)];
159
+ }); }); }, { expectedResult: 'tripped' })];
160
+ case 9:
161
+ _b.sent();
162
+ return [4 /*yield*/, sdk.reset_db()
163
+ // ---- /v1/endusers/send-otp-code per-IP cap (5/min) ----
164
+ // Use a bogus JWT-shaped token so we trip the IP guard first (it runs before any DB work).
165
+ ];
166
+ case 10:
167
+ _b.sent();
168
+ fakeToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJ9.sig';
169
+ return [4 /*yield*/, fire_until_429(5, function () { return post('/v1/endusers/send-otp-code', {
170
+ token: fakeToken,
171
+ method: 'email',
172
+ }); })];
173
+ case 11:
174
+ sendOtpTrip = _b.sent();
175
+ return [4 /*yield*/, (0, testing_1.async_test)('send_otp per-IP throttle trips within first 6 requests', function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
176
+ return [2 /*return*/, (sendOtpTrip >= 0 && sendOtpTrip <= 5) ? 'tripped' : "not-tripped:".concat(sendOtpTrip)];
177
+ }); }); }, { expectedResult: 'tripped' })
178
+ // Confirm 429 response does not leak the keying strategy (no mention of "ip" or "address").
179
+ ];
180
+ case 12:
181
+ _b.sent();
182
+ return [4 /*yield*/, post('/v1/endusers/send-otp-code', { token: fakeToken, method: 'email' })];
183
+ case 13:
184
+ tripped = _b.sent();
185
+ return [4 /*yield*/, (0, testing_1.async_test)('429 response does not mention "ip" or "address"', function () { return __awaiter(void 0, void 0, void 0, function () {
186
+ var msg;
187
+ var _a, _b;
188
+ return __generator(this, function (_c) {
189
+ msg = ((_b = (_a = tripped.data) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : '').toLowerCase();
190
+ return [2 /*return*/, (msg.includes('ip') || msg.includes('address')) ? 'leaked' : 'safe'];
191
+ });
192
+ }); }, { expectedResult: 'safe' })
193
+ // ---- Legitimate-login regression: a single successful login should still go through ----
194
+ // Reset state, then create a real enduser with a password and confirm one login succeeds.
195
+ ];
196
+ case 14:
197
+ _b.sent();
198
+ // ---- Legitimate-login regression: a single successful login should still go through ----
199
+ // Reset state, then create a real enduser with a password and confirm one login succeeds.
200
+ return [4 /*yield*/, sdk.reset_db()];
201
+ case 15:
202
+ // ---- Legitimate-login regression: a single successful login should still go through ----
203
+ // Reset state, then create a real enduser with a password and confirm one login succeeds.
204
+ _b.sent();
205
+ ts = Date.now();
206
+ return [4 /*yield*/, sdk.api.endusers.createOne({
207
+ fname: 'RateLimitOk', lname: 'Enduser',
208
+ email: "rl-legit-".concat(ts, "@tellescope.com"),
209
+ })];
210
+ case 16:
211
+ enduser = _b.sent();
212
+ _b.label = 17;
213
+ case 17:
214
+ _b.trys.push([17, , 23, 26]);
215
+ return [4 /*yield*/, sdk.api.endusers.set_password({ id: enduser.id, password: 'CorrectPassword123!' })];
216
+ case 18:
217
+ _b.sent();
218
+ return [4 /*yield*/, post('/v1/login-enduser', {
219
+ email: enduser.email,
220
+ password: 'CorrectPassword123!',
221
+ businessId: businessId,
222
+ })];
223
+ case 19:
224
+ goodLogin_1 = _b.sent();
225
+ return [4 /*yield*/, (0, testing_1.async_test)('legitimate login still succeeds (returns authToken, not 429)', function () { return __awaiter(void 0, void 0, void 0, function () { var _a; return __generator(this, function (_b) {
226
+ return [2 /*return*/, goodLogin_1.status === 200 && !!((_a = goodLogin_1.data) === null || _a === void 0 ? void 0 : _a.authToken) ? 'ok' : "failed:".concat(goodLogin_1.status)];
227
+ }); }); }, { expectedResult: 'ok' })
228
+ // A subsequent successful login by the same user/IP should also succeed —
229
+ // a single legitimate user retrying must not trip the per-IP cap.
230
+ ];
231
+ case 20:
232
+ _b.sent();
233
+ return [4 /*yield*/, post('/v1/login-enduser', {
234
+ email: enduser.email,
235
+ password: 'CorrectPassword123!',
236
+ businessId: businessId,
237
+ })];
238
+ case 21:
239
+ goodLoginRetry_1 = _b.sent();
240
+ return [4 /*yield*/, (0, testing_1.async_test)('legitimate login retry still succeeds', function () { return __awaiter(void 0, void 0, void 0, function () { var _a; return __generator(this, function (_b) {
241
+ return [2 /*return*/, goodLoginRetry_1.status === 200 && !!((_a = goodLoginRetry_1.data) === null || _a === void 0 ? void 0 : _a.authToken) ? 'ok' : "failed:".concat(goodLoginRetry_1.status)];
242
+ }); }); }, { expectedResult: 'ok' })];
243
+ case 22:
244
+ _b.sent();
245
+ return [3 /*break*/, 26];
246
+ case 23: return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser.id).catch(function () { return null; })];
247
+ case 24:
248
+ _b.sent();
249
+ return [4 /*yield*/, sdk.reset_db().catch(function () { return null; })];
250
+ case 25:
251
+ _b.sent();
252
+ return [7 /*endfinally*/];
253
+ case 26: return [2 /*return*/];
254
+ }
255
+ });
256
+ });
257
+ };
258
+ exports.enduser_login_rate_limits_tests = enduser_login_rate_limits_tests;
259
+ // Allow running this test file independently
260
+ if (require.main === module) {
261
+ console.log("\uD83C\uDF10 Using API URL: ".concat(host));
262
+ var sdk_2 = new sdk_1.Session({ host: host });
263
+ var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
264
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
265
+ return __generator(this, function (_a) {
266
+ switch (_a.label) {
267
+ case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
268
+ case 1:
269
+ _a.sent();
270
+ return [4 /*yield*/, (0, exports.enduser_login_rate_limits_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
271
+ case 2:
272
+ _a.sent();
273
+ return [2 /*return*/];
274
+ }
275
+ });
276
+ }); };
277
+ runTests()
278
+ .then(function () {
279
+ console.log("✅ Enduser login rate limit test suite completed successfully");
280
+ process.exit(0);
281
+ })
282
+ .catch(function (error) {
283
+ console.error("❌ Enduser login rate limit test suite failed:", error);
284
+ process.exit(1);
285
+ });
286
+ }
287
+ //# sourceMappingURL=enduser_login_rate_limits.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enduser_login_rate_limits.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/enduser_login_rate_limits.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"push_forms_to_portal_group_completion.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/push_forms_to_portal_group_completion.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAuBnC,eAAO,MAAM,2CAA2C;SAAwC,OAAO;iBAAe,OAAO;mBAuJ5H,CAAA"}
1
+ {"version":3,"file":"push_forms_to_portal_group_completion.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/push_forms_to_portal_group_completion.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAA;AAuBnD,eAAO,MAAM,2CAA2C;SAAwC,OAAO;iBAAe,OAAO;mBAgL5H,CAAA"}