@tellescope/sdk 1.255.18 → 1.256.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 (165) hide show
  1. package/lib/cjs/sdk.d.ts +7 -2
  2. package/lib/cjs/sdk.d.ts.map +1 -1
  3. package/lib/cjs/sdk.js +1 -0
  4. package/lib/cjs/sdk.js.map +1 -1
  5. package/lib/cjs/tests/api_tests/auto_merge_form_submission.test.d.ts.map +1 -1
  6. package/lib/cjs/tests/api_tests/auto_merge_form_submission.test.js +18 -8
  7. package/lib/cjs/tests/api_tests/auto_merge_form_submission.test.js.map +1 -1
  8. package/lib/cjs/tests/api_tests/custom_dashboards.test.d.ts.map +1 -1
  9. package/lib/cjs/tests/api_tests/custom_dashboards.test.js +99 -8
  10. package/lib/cjs/tests/api_tests/custom_dashboards.test.js.map +1 -1
  11. package/lib/cjs/tests/api_tests/default_summary_journey.test.d.ts.map +1 -0
  12. package/lib/cjs/tests/api_tests/default_summary_journey.test.js.map +1 -0
  13. package/lib/cjs/tests/api_tests/file_download_unicode_names.test.d.ts +6 -0
  14. package/lib/cjs/tests/api_tests/file_download_unicode_names.test.d.ts.map +1 -0
  15. package/lib/cjs/tests/api_tests/file_download_unicode_names.test.js +278 -0
  16. package/lib/cjs/tests/api_tests/file_download_unicode_names.test.js.map +1 -0
  17. package/lib/cjs/tests/api_tests/healthie_multi_integration.test.d.ts.map +1 -1
  18. package/lib/cjs/tests/api_tests/healthie_multi_integration.test.js +203 -72
  19. package/lib/cjs/tests/api_tests/healthie_multi_integration.test.js.map +1 -1
  20. package/lib/cjs/tests/api_tests/openloop_webhooks.test.d.ts.map +1 -1
  21. package/lib/cjs/tests/api_tests/openloop_webhooks.test.js +212 -33
  22. package/lib/cjs/tests/api_tests/openloop_webhooks.test.js.map +1 -1
  23. package/lib/cjs/tests/api_tests/phone_calls_cold_transfer.test.d.ts.map +1 -1
  24. package/lib/cjs/tests/api_tests/phone_calls_cold_transfer.test.js +85 -9
  25. package/lib/cjs/tests/api_tests/phone_calls_cold_transfer.test.js.map +1 -1
  26. package/lib/cjs/tests/api_tests/phone_calls_conference_hold.test.d.ts +6 -0
  27. package/lib/cjs/tests/api_tests/phone_calls_conference_hold.test.d.ts.map +1 -0
  28. package/lib/cjs/tests/api_tests/phone_calls_conference_hold.test.js +102 -0
  29. package/lib/cjs/tests/api_tests/phone_calls_conference_hold.test.js.map +1 -0
  30. package/lib/cjs/tests/api_tests/scoped_api_keys.test.d.ts.map +1 -1
  31. package/lib/cjs/tests/api_tests/scoped_api_keys.test.js +84 -81
  32. package/lib/cjs/tests/api_tests/scoped_api_keys.test.js.map +1 -1
  33. package/lib/cjs/tests/api_tests/security/F-0013-sanitize-user-html-with-iframes.test.d.ts +2 -0
  34. package/lib/cjs/tests/api_tests/security/F-0013-sanitize-user-html-with-iframes.test.d.ts.map +1 -0
  35. package/lib/cjs/tests/api_tests/security/F-0013-sanitize-user-html-with-iframes.test.js +242 -0
  36. package/lib/cjs/tests/api_tests/security/F-0013-sanitize-user-html-with-iframes.test.js.map +1 -0
  37. package/lib/cjs/tests/api_tests/security/F-0015-webhook-outbound-ssrf.test.d.ts +29 -0
  38. package/lib/cjs/tests/api_tests/security/F-0015-webhook-outbound-ssrf.test.d.ts.map +1 -0
  39. package/lib/cjs/tests/api_tests/security/F-0015-webhook-outbound-ssrf.test.js +443 -0
  40. package/lib/cjs/tests/api_tests/security/F-0015-webhook-outbound-ssrf.test.js.map +1 -0
  41. package/lib/cjs/tests/api_tests/security/F-0025-proxy-image-unauth-ssrf.test.d.ts +35 -0
  42. package/lib/cjs/tests/api_tests/security/F-0025-proxy-image-unauth-ssrf.test.d.ts.map +1 -0
  43. package/lib/cjs/tests/api_tests/security/F-0025-proxy-image-unauth-ssrf.test.js +231 -0
  44. package/lib/cjs/tests/api_tests/security/F-0025-proxy-image-unauth-ssrf.test.js.map +1 -0
  45. package/lib/cjs/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.d.ts.map +1 -1
  46. package/lib/cjs/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.js +121 -78
  47. package/lib/cjs/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.js.map +1 -1
  48. package/lib/cjs/tests/api_tests/security/F-0166-allowed-paths-wildcard-bypass.test.d.ts +6 -0
  49. package/lib/cjs/tests/api_tests/security/F-0166-allowed-paths-wildcard-bypass.test.d.ts.map +1 -0
  50. package/lib/cjs/tests/api_tests/security/F-0166-allowed-paths-wildcard-bypass.test.js +1003 -0
  51. package/lib/cjs/tests/api_tests/security/F-0166-allowed-paths-wildcard-bypass.test.js.map +1 -0
  52. package/lib/cjs/tests/api_tests/security/enduser-ai-summary-trust-gate.test.d.ts +17 -0
  53. package/lib/cjs/tests/api_tests/security/enduser-ai-summary-trust-gate.test.d.ts.map +1 -0
  54. package/lib/cjs/tests/api_tests/security/enduser-ai-summary-trust-gate.test.js +215 -0
  55. package/lib/cjs/tests/api_tests/security/enduser-ai-summary-trust-gate.test.js.map +1 -0
  56. package/lib/cjs/tests/api_tests/security/formsort_webhook_auth_field_lock.test.d.ts +6 -0
  57. package/lib/cjs/tests/api_tests/security/formsort_webhook_auth_field_lock.test.d.ts.map +1 -0
  58. package/lib/cjs/tests/api_tests/security/formsort_webhook_auth_field_lock.test.js +1200 -0
  59. package/lib/cjs/tests/api_tests/security/formsort_webhook_auth_field_lock.test.js.map +1 -0
  60. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.d.ts +6 -0
  61. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.d.ts.map +1 -0
  62. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.js +2330 -0
  63. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.js.map +1 -0
  64. package/lib/cjs/tests/api_tests/tickets_bulk_assign_care_team.test.d.ts +6 -0
  65. package/lib/cjs/tests/api_tests/tickets_bulk_assign_care_team.test.d.ts.map +1 -0
  66. package/lib/cjs/tests/api_tests/tickets_bulk_assign_care_team.test.js +204 -0
  67. package/lib/cjs/tests/api_tests/tickets_bulk_assign_care_team.test.js.map +1 -0
  68. package/lib/cjs/tests/tests.d.ts.map +1 -1
  69. package/lib/cjs/tests/tests.js +489 -255
  70. package/lib/cjs/tests/tests.js.map +1 -1
  71. package/lib/esm/enduser.d.ts +0 -1
  72. package/lib/esm/enduser.d.ts.map +1 -1
  73. package/lib/esm/sdk.d.ts +9 -5
  74. package/lib/esm/sdk.d.ts.map +1 -1
  75. package/lib/esm/sdk.js +1 -0
  76. package/lib/esm/sdk.js.map +1 -1
  77. package/lib/esm/session.d.ts +0 -1
  78. package/lib/esm/session.d.ts.map +1 -1
  79. package/lib/esm/tests/api_tests/auto_merge_form_submission.test.d.ts.map +1 -1
  80. package/lib/esm/tests/api_tests/auto_merge_form_submission.test.js +18 -8
  81. package/lib/esm/tests/api_tests/auto_merge_form_submission.test.js.map +1 -1
  82. package/lib/esm/tests/api_tests/custom_dashboards.test.d.ts.map +1 -1
  83. package/lib/esm/tests/api_tests/custom_dashboards.test.js +99 -8
  84. package/lib/esm/tests/api_tests/custom_dashboards.test.js.map +1 -1
  85. package/lib/esm/tests/api_tests/default_summary_journey.test.d.ts.map +1 -0
  86. package/lib/esm/tests/api_tests/default_summary_journey.test.js.map +1 -0
  87. package/lib/esm/tests/api_tests/file_download_unicode_names.test.d.ts +6 -0
  88. package/lib/esm/tests/api_tests/file_download_unicode_names.test.d.ts.map +1 -0
  89. package/lib/esm/tests/api_tests/file_download_unicode_names.test.js +248 -0
  90. package/lib/esm/tests/api_tests/file_download_unicode_names.test.js.map +1 -0
  91. package/lib/esm/tests/api_tests/healthie_multi_integration.test.d.ts.map +1 -1
  92. package/lib/esm/tests/api_tests/healthie_multi_integration.test.js +205 -74
  93. package/lib/esm/tests/api_tests/healthie_multi_integration.test.js.map +1 -1
  94. package/lib/esm/tests/api_tests/openloop_webhooks.test.d.ts.map +1 -1
  95. package/lib/esm/tests/api_tests/openloop_webhooks.test.js +213 -34
  96. package/lib/esm/tests/api_tests/openloop_webhooks.test.js.map +1 -1
  97. package/lib/esm/tests/api_tests/phone_calls_cold_transfer.test.d.ts.map +1 -1
  98. package/lib/esm/tests/api_tests/phone_calls_cold_transfer.test.js +85 -9
  99. package/lib/esm/tests/api_tests/phone_calls_cold_transfer.test.js.map +1 -1
  100. package/lib/esm/tests/api_tests/phone_calls_conference_hold.test.d.ts +6 -0
  101. package/lib/esm/tests/api_tests/phone_calls_conference_hold.test.d.ts.map +1 -0
  102. package/lib/esm/tests/api_tests/phone_calls_conference_hold.test.js +98 -0
  103. package/lib/esm/tests/api_tests/phone_calls_conference_hold.test.js.map +1 -0
  104. package/lib/esm/tests/api_tests/scoped_api_keys.test.d.ts.map +1 -1
  105. package/lib/esm/tests/api_tests/scoped_api_keys.test.js +84 -81
  106. package/lib/esm/tests/api_tests/scoped_api_keys.test.js.map +1 -1
  107. package/lib/esm/tests/api_tests/security/F-0013-sanitize-user-html-with-iframes.test.d.ts +2 -0
  108. package/lib/esm/tests/api_tests/security/F-0013-sanitize-user-html-with-iframes.test.d.ts.map +1 -0
  109. package/lib/esm/tests/api_tests/security/F-0013-sanitize-user-html-with-iframes.test.js +238 -0
  110. package/lib/esm/tests/api_tests/security/F-0013-sanitize-user-html-with-iframes.test.js.map +1 -0
  111. package/lib/esm/tests/api_tests/security/F-0015-webhook-outbound-ssrf.test.d.ts +29 -0
  112. package/lib/esm/tests/api_tests/security/F-0015-webhook-outbound-ssrf.test.d.ts.map +1 -0
  113. package/lib/esm/tests/api_tests/security/F-0015-webhook-outbound-ssrf.test.js +436 -0
  114. package/lib/esm/tests/api_tests/security/F-0015-webhook-outbound-ssrf.test.js.map +1 -0
  115. package/lib/esm/tests/api_tests/security/F-0025-proxy-image-unauth-ssrf.test.d.ts +35 -0
  116. package/lib/esm/tests/api_tests/security/F-0025-proxy-image-unauth-ssrf.test.d.ts.map +1 -0
  117. package/lib/esm/tests/api_tests/security/F-0025-proxy-image-unauth-ssrf.test.js +224 -0
  118. package/lib/esm/tests/api_tests/security/F-0025-proxy-image-unauth-ssrf.test.js.map +1 -0
  119. package/lib/esm/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.d.ts.map +1 -1
  120. package/lib/esm/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.js +121 -78
  121. package/lib/esm/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.js.map +1 -1
  122. package/lib/esm/tests/api_tests/security/F-0166-allowed-paths-wildcard-bypass.test.d.ts +6 -0
  123. package/lib/esm/tests/api_tests/security/F-0166-allowed-paths-wildcard-bypass.test.d.ts.map +1 -0
  124. package/lib/esm/tests/api_tests/security/F-0166-allowed-paths-wildcard-bypass.test.js +996 -0
  125. package/lib/esm/tests/api_tests/security/F-0166-allowed-paths-wildcard-bypass.test.js.map +1 -0
  126. package/lib/esm/tests/api_tests/security/enduser-ai-summary-trust-gate.test.d.ts +17 -0
  127. package/lib/esm/tests/api_tests/security/enduser-ai-summary-trust-gate.test.d.ts.map +1 -0
  128. package/lib/esm/tests/api_tests/security/enduser-ai-summary-trust-gate.test.js +211 -0
  129. package/lib/esm/tests/api_tests/security/enduser-ai-summary-trust-gate.test.js.map +1 -0
  130. package/lib/esm/tests/api_tests/security/formsort_webhook_auth_field_lock.test.d.ts +6 -0
  131. package/lib/esm/tests/api_tests/security/formsort_webhook_auth_field_lock.test.d.ts.map +1 -0
  132. package/lib/esm/tests/api_tests/security/formsort_webhook_auth_field_lock.test.js +1193 -0
  133. package/lib/esm/tests/api_tests/security/formsort_webhook_auth_field_lock.test.js.map +1 -0
  134. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.d.ts +6 -0
  135. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.d.ts.map +1 -0
  136. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.js +2323 -0
  137. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.js.map +1 -0
  138. package/lib/esm/tests/api_tests/tickets_bulk_assign_care_team.test.d.ts +6 -0
  139. package/lib/esm/tests/api_tests/tickets_bulk_assign_care_team.test.d.ts.map +1 -0
  140. package/lib/esm/tests/api_tests/tickets_bulk_assign_care_team.test.js +200 -0
  141. package/lib/esm/tests/api_tests/tickets_bulk_assign_care_team.test.js.map +1 -0
  142. package/lib/esm/tests/tests.d.ts.map +1 -1
  143. package/lib/esm/tests/tests.js +489 -255
  144. package/lib/esm/tests/tests.js.map +1 -1
  145. package/lib/tsconfig.tsbuildinfo +1 -1
  146. package/package.json +10 -10
  147. package/src/sdk.ts +4 -0
  148. package/src/tests/api_tests/auto_merge_form_submission.test.ts +13 -4
  149. package/src/tests/api_tests/custom_dashboards.test.ts +92 -0
  150. package/src/tests/api_tests/file_download_unicode_names.test.ts +223 -0
  151. package/src/tests/api_tests/healthie_multi_integration.test.ts +103 -5
  152. package/src/tests/api_tests/openloop_webhooks.test.ts +138 -0
  153. package/src/tests/api_tests/phone_calls_cold_transfer.test.ts +54 -0
  154. package/src/tests/api_tests/phone_calls_conference_hold.test.ts +62 -0
  155. package/src/tests/api_tests/scoped_api_keys.test.ts +5 -0
  156. package/src/tests/api_tests/security/F-0013-sanitize-user-html-with-iframes.test.ts +215 -0
  157. package/src/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.ts +38 -4
  158. package/src/tests/api_tests/security/F-0166-allowed-paths-wildcard-bypass.test.ts +721 -0
  159. package/src/tests/api_tests/security/enduser-ai-summary-trust-gate.test.ts +125 -0
  160. package/src/tests/api_tests/security/formsort_webhook_auth_field_lock.test.ts +753 -0
  161. package/src/tests/api_tests/security/public_endpoint_auth_field_lock.test.ts +1707 -0
  162. package/src/tests/api_tests/tickets_bulk_assign_care_team.test.ts +132 -0
  163. package/src/tests/tests.ts +232 -2
  164. package/test_generated.pdf +0 -0
  165. package/.env +0 -13
@@ -0,0 +1,231 @@
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.proxy_image_ssrf_tests = void 0;
43
+ require('source-map-support').install();
44
+ var http_1 = __importDefault(require("http"));
45
+ var axios_1 = __importDefault(require("axios"));
46
+ var sdk_1 = require("../../../sdk");
47
+ var testing_1 = require("@tellescope/testing");
48
+ var setup_1 = require("../../setup");
49
+ var host = process.env.API_URL || 'http://localhost:8080';
50
+ var LOCAL_HOSTNAMES = ['localhost', '127.0.0.1', '::1'];
51
+ /**
52
+ * 127.0.0.1 only means "the machine running this test" when the API is also local. Against staging or
53
+ * prod it is the API server itself — the sentinel below would never be contacted, every assertion
54
+ * here would pass for the wrong reason, and we would be probing a live environment. Fail loudly.
55
+ */
56
+ var assert_local_api = function () {
57
+ var hostname = new URL(host).hostname;
58
+ if (!LOCAL_HOSTNAMES.includes(hostname)) {
59
+ throw new Error("F-0025 SSRF tests must run against a local API (got ".concat(host, "). ")
60
+ + "127.0.0.1 would resolve to the API server rather than this machine, so the tests would be meaningless.");
61
+ }
62
+ };
63
+ /**
64
+ * Regression tests for F-0025
65
+ * (security-audit/findings/F-0025-proxy-image-unauth-ssrf.md).
66
+ *
67
+ * GET /v1/proxy-image accepted an arbitrary ?url= and streamed the upstream response body straight
68
+ * back with Access-Control-Allow-Origin: *, with no authentication, no destination validation and no
69
+ * content-type restriction. That reaches http://169.254.169.254/ (EC2 instance credentials under
70
+ * IMDSv1), 127.0.0.1, and anything else inside the VPC.
71
+ *
72
+ * The endpoint's only legitimate job is to re-serve an image that ALREADY renders in the staff
73
+ * browser, with permissive CORS headers, so html2canvas can rasterize a form-response PDF without
74
+ * tainting the canvas (canvas.toDataURL() throws on a tainted canvas, and the form-response view sets
75
+ * crossOrigin="anonymous"). Anything reachable only from inside our network was therefore never a
76
+ * legitimate input — which is why refusing non-public destinations cannot regress the feature.
77
+ *
78
+ * Repro: stand up a local HTTP server that serves a JSON secret, point proxy-image at it with no
79
+ * credentials, and assert the secret does not come back.
80
+ * - red (unfixed): the sentinel body is streamed back to an unauthenticated caller
81
+ * - green (fixed): the request is refused and the sentinel server is never contacted
82
+ *
83
+ * Assertions are deliberately written as "4xx and nothing leaked" rather than pinning an exact status,
84
+ * because the fix both authenticates the endpoint and moves it to POST (the url moves into the body so
85
+ * presigned S3 URLs for patient attachments stop landing in access logs). Either 401 or 404/405 on the
86
+ * old GET shape is an acceptable outcome; streaming the body is not.
87
+ *
88
+ * The authenticated happy-path test lives with the Phase 2 endpoint change — it cannot exist here
89
+ * because the POST route does not yet exist, and a test that fails for "not implemented" would muddy
90
+ * the vulnerability proof.
91
+ */
92
+ var proxy_image_ssrf_tests = function (_a) {
93
+ var sdk = _a.sdk;
94
+ return __awaiter(void 0, void 0, void 0, function () {
95
+ var SENTINEL, sentinelHits, sentinel, sentinelPort, sentinelURL_1, call_unauthenticated, call_authenticated_1;
96
+ return __generator(this, function (_b) {
97
+ switch (_b.label) {
98
+ case 0:
99
+ (0, testing_1.log_header)("F-0025: proxy-image unauthenticated SSRF");
100
+ assert_local_api();
101
+ SENTINEL = "f0025-sentinel-".concat(Date.now(), "-").concat(Math.random().toString(36).slice(2));
102
+ sentinelHits = 0;
103
+ sentinel = http_1.default.createServer(function (_, res) {
104
+ sentinelHits++;
105
+ res.writeHead(200, { 'content-type': 'application/json' });
106
+ res.end(JSON.stringify({ sentinel: SENTINEL, credentials: 'internal-only' }));
107
+ });
108
+ _b.label = 1;
109
+ case 1:
110
+ _b.trys.push([1, , 9, 10]);
111
+ return [4 /*yield*/, new Promise(function (resolve) { return sentinel.listen(0, '127.0.0.1', function () { return resolve(); }); })];
112
+ case 2:
113
+ _b.sent();
114
+ sentinelPort = sentinel.address().port;
115
+ sentinelURL_1 = "http://127.0.0.1:".concat(sentinelPort, "/latest/meta-data/iam/security-credentials/");
116
+ call_unauthenticated = function () { return __awaiter(void 0, void 0, void 0, function () {
117
+ var res, body;
118
+ var _a;
119
+ return __generator(this, function (_b) {
120
+ switch (_b.label) {
121
+ case 0:
122
+ sentinelHits = 0;
123
+ return [4 /*yield*/, axios_1.default.get("".concat(host, "/v1/proxy-image"), {
124
+ params: { url: sentinelURL_1 },
125
+ validateStatus: function () { return true; },
126
+ responseType: 'text',
127
+ transformResponse: [function (d) { return d; }],
128
+ timeout: 10000,
129
+ })];
130
+ case 1:
131
+ res = _b.sent();
132
+ body = typeof res.data === 'string' ? res.data : JSON.stringify((_a = res.data) !== null && _a !== void 0 ? _a : '');
133
+ return [2 /*return*/, { status: res.status, leaked: body.includes(SENTINEL), sentinelHits: sentinelHits }];
134
+ }
135
+ });
136
+ }); };
137
+ // T1 — the core SSRF: an unauthenticated caller must not be able to read an internal resource.
138
+ return [4 /*yield*/, (0, testing_1.async_test)('F-0025: proxy-image does not stream an internal non-image resource to an unauthenticated caller', call_unauthenticated, {
139
+ // Positive control: a numeric status proves we actually reached our API rather than failing to
140
+ // connect (a connection error would make "nothing leaked" true for the wrong reason).
141
+ onResult: function (r) { return (typeof r.status === 'number'
142
+ && r.leaked === false
143
+ && r.sentinelHits === 0); },
144
+ })
145
+ // T2 — the unauthenticated surface itself: the request must be refused outright, and the
146
+ // destination must never be contacted (no SSRF-as-a-side-effect even when the body is withheld).
147
+ ];
148
+ case 3:
149
+ // T1 — the core SSRF: an unauthenticated caller must not be able to read an internal resource.
150
+ _b.sent();
151
+ // T2 — the unauthenticated surface itself: the request must be refused outright, and the
152
+ // destination must never be contacted (no SSRF-as-a-side-effect even when the body is withheld).
153
+ return [4 /*yield*/, (0, testing_1.async_test)('F-0025: proxy-image refuses an unauthenticated request without contacting the destination', call_unauthenticated, { onResult: function (r) { return r.status >= 400 && r.status < 500 && r.sentinelHits === 0; } })
154
+ // Authenticating is not enough on its own — a staff session must not be able to reach an internal
155
+ // address either. These use the real session, and are deterministic (no external network).
156
+ ];
157
+ case 4:
158
+ // T2 — the unauthenticated surface itself: the request must be refused outright, and the
159
+ // destination must never be contacted (no SSRF-as-a-side-effect even when the body is withheld).
160
+ _b.sent();
161
+ call_authenticated_1 = function (url) { return __awaiter(void 0, void 0, void 0, function () {
162
+ var res;
163
+ return __generator(this, function (_a) {
164
+ switch (_a.label) {
165
+ case 0:
166
+ sentinelHits = 0;
167
+ return [4 /*yield*/, axios_1.default.post("".concat(host, "/v1/proxy-image"), { url: url }, {
168
+ headers: { Authorization: "Bearer ".concat(sdk.authToken) },
169
+ validateStatus: function () { return true; },
170
+ timeout: 10000,
171
+ })];
172
+ case 1:
173
+ res = _a.sent();
174
+ return [2 /*return*/, { status: res.status, sentinelHits: sentinelHits }];
175
+ }
176
+ });
177
+ }); };
178
+ return [4 /*yield*/, (0, testing_1.async_test)('F-0025: proxy-image refuses a private destination even for an authenticated staff session', function () { return call_authenticated_1(sentinelURL_1); }, { onResult: function (r) { return r.status === 400 && r.sentinelHits === 0; } })];
179
+ case 5:
180
+ _b.sent();
181
+ return [4 /*yield*/, (0, testing_1.async_test)('F-0025: proxy-image refuses cloud metadata for an authenticated staff session', function () { return call_authenticated_1('https://169.254.169.254/latest/meta-data/'); }, { onResult: function (r) { return r.status === 400; } })
182
+ // Scheme and port are pinned: only https on 443, which is all the PDF export ever needs.
183
+ ];
184
+ case 6:
185
+ _b.sent();
186
+ // Scheme and port are pinned: only https on 443, which is all the PDF export ever needs.
187
+ return [4 /*yield*/, (0, testing_1.async_test)('F-0025: proxy-image refuses a plain http destination', function () { return call_authenticated_1('http://example.com/logo.png'); }, { onResult: function (r) { return r.status === 400; } })];
188
+ case 7:
189
+ // Scheme and port are pinned: only https on 443, which is all the PDF export ever needs.
190
+ _b.sent();
191
+ return [4 /*yield*/, (0, testing_1.async_test)('F-0025: proxy-image refuses a non-443 port', function () { return call_authenticated_1('https://example.com:8443/logo.png'); }, { onResult: function (r) { return r.status === 400; } })];
192
+ case 8:
193
+ _b.sent();
194
+ return [3 /*break*/, 10];
195
+ case 9:
196
+ sentinel.close();
197
+ return [7 /*endfinally*/];
198
+ case 10: return [2 /*return*/];
199
+ }
200
+ });
201
+ });
202
+ };
203
+ exports.proxy_image_ssrf_tests = proxy_image_ssrf_tests;
204
+ if (require.main === module) {
205
+ console.log("\uD83C\uDF10 Using API URL: ".concat(host));
206
+ var sdk_2 = new sdk_1.Session({ host: host });
207
+ var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
208
+ var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
209
+ return __generator(this, function (_a) {
210
+ switch (_a.label) {
211
+ case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
212
+ case 1:
213
+ _a.sent();
214
+ return [4 /*yield*/, (0, exports.proxy_image_ssrf_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
215
+ case 2:
216
+ _a.sent();
217
+ return [2 /*return*/];
218
+ }
219
+ });
220
+ }); };
221
+ runTests()
222
+ .then(function () {
223
+ console.log("✅ F-0025 proxy-image SSRF test suite completed successfully");
224
+ process.exit(0);
225
+ })
226
+ .catch(function (error) {
227
+ console.error("❌ F-0025 proxy-image SSRF test suite failed:", error);
228
+ process.exit(1);
229
+ });
230
+ }
231
+ //# sourceMappingURL=F-0025-proxy-image-unauth-ssrf.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"F-0025-proxy-image-unauth-ssrf.test.js","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/F-0025-proxy-image-unauth-ssrf.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"F-0106-F-0110-enduser-write-restrictions.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAkB,MAAM,cAAc,CAAA;AA+DtD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,gCAAgC;SAA2B,OAAO;iBAAe,OAAO;mBA6GpG,CAAA"}
1
+ {"version":3,"file":"F-0106-F-0110-enduser-write-restrictions.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAkB,MAAM,cAAc,CAAA;AAsEtD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,gCAAgC;SAA2B,OAAO;iBAAe,OAAO;mBAwIpG,CAAA"}
@@ -77,8 +77,15 @@ var restrictedEnduserUpdates = function (staffId, mongoId) {
77
77
  });
78
78
  };
79
79
  // Every form_responses field marked enduserUpdatesDisabled in schema.ts.
80
- var restrictedFormResponseUpdates = function (staffId) { return ({
80
+ // otherEnduserId must be a REAL enduser other than the one submitting the update: enduserId's
81
+ // foreign key is existence-checked, so a nonexistent id would be rejected as a bad dependency
82
+ // rather than by the write restriction under test.
83
+ var restrictedFormResponseUpdates = function (staffId, otherEnduserId) { return ({
81
84
  markedAsSubmitted: true,
85
+ // repointing a response at another patient redirects the intake write in
86
+ // save_enduser_updates_for_form_response, which is how email/phone (authentication channels)
87
+ // reach an enduser record — see api_tests/security/public_endpoint_auth_field_lock.test.ts
88
+ enduserId: otherEnduserId,
82
89
  submittedBy: staffId,
83
90
  submittedAt: new Date("2024-01-01T00:00:00Z"),
84
91
  submittedByIsPlaceholder: true,
@@ -116,112 +123,123 @@ var restrictedFormResponseUpdates = function (staffId) { return ({
116
123
  var enduser_write_restrictions_tests = function (_a) {
117
124
  var sdk = _a.sdk;
118
125
  return __awaiter(void 0, void 0, void 0, function () {
119
- var enduserId, formId, formResponseId, enduserEmail, enduser_1, enduserSDK_1, form, formResponse_1, _loop_1, _i, _b, _c, field, value, _loop_2, _d, _e, _f, field, value, _g, _h, _j;
120
- return __generator(this, function (_k) {
121
- switch (_k.label) {
126
+ var enduserId, otherEnduserId, formId, formResponseId, enduserEmail, enduser_1, otherEnduser_1, enduserSDK_1, form, formResponse_1, _loop_1, _i, _b, _c, field, value, _loop_2, _d, _e, _f, field, value, _g, _h, _j, _k;
127
+ return __generator(this, function (_l) {
128
+ switch (_l.label) {
122
129
  case 0:
123
130
  (0, testing_1.log_header)("F-0106/F-0110: enduser write restrictions (enduserUpdatesDisabled)");
124
- _k.label = 1;
131
+ _l.label = 1;
125
132
  case 1:
126
- _k.trys.push([1, , 21, 34]);
133
+ _l.trys.push([1, , 24, 41]);
127
134
  enduserEmail = "f0106-enduser-".concat(Date.now(), "@example.com");
128
135
  return [4 /*yield*/, sdk.api.endusers.createOne({ email: enduserEmail, fname: 'F0106', lname: 'Restricted' })];
129
136
  case 2:
130
- enduser_1 = _k.sent();
137
+ enduser_1 = _l.sent();
131
138
  enduserId = enduser_1.id;
132
- return [4 /*yield*/, sdk.api.endusers.set_password({ id: enduser_1.id, password: ENDUSER_PASSWORD })];
139
+ return [4 /*yield*/, sdk.api.endusers.createOne({
140
+ email: "f0106-other-".concat(Date.now(), "@example.com"), fname: 'F0106', lname: 'Other',
141
+ })];
133
142
  case 3:
134
- _k.sent();
143
+ otherEnduser_1 = _l.sent();
144
+ otherEnduserId = otherEnduser_1.id;
145
+ return [4 /*yield*/, sdk.api.endusers.set_password({ id: enduser_1.id, password: ENDUSER_PASSWORD })];
146
+ case 4:
147
+ _l.sent();
135
148
  enduserSDK_1 = new sdk_1.EnduserSession({ host: host, businessId: businessId });
136
149
  return [4 /*yield*/, enduserSDK_1.authenticate(enduserEmail, ENDUSER_PASSWORD)];
137
- case 4:
138
- _k.sent();
139
- return [4 /*yield*/, sdk.api.forms.createOne({ title: 'F-0106/F-0110 Write Restriction Test Form' })];
140
150
  case 5:
141
- form = _k.sent();
151
+ _l.sent();
152
+ return [4 /*yield*/, sdk.api.forms.createOne({ title: 'F-0106/F-0110 Write Restriction Test Form' })];
153
+ case 6:
154
+ form = _l.sent();
142
155
  formId = form.id;
143
156
  return [4 /*yield*/, sdk.api.form_responses.prepare_form_response({
144
157
  formId: form.id,
145
158
  enduserId: enduser_1.id,
146
159
  })];
147
- case 6:
148
- formResponse_1 = (_k.sent()).response;
160
+ case 7:
161
+ formResponse_1 = (_l.sent()).response;
149
162
  formResponseId = formResponse_1.id;
150
163
  _loop_1 = function (field, value) {
151
- return __generator(this, function (_l) {
152
- switch (_l.label) {
164
+ return __generator(this, function (_m) {
165
+ switch (_m.label) {
153
166
  case 0: return [4 /*yield*/, (0, testing_1.async_test)("F-0106: enduser cannot self-update endusers.".concat(field), function () {
154
167
  var _a;
155
168
  return enduserSDK_1.api.endusers.updateOne(enduser_1.id, (_a = {}, _a[field] = value, _a));
156
169
  }, { shouldError: true, onError: function (e) { return e.message === "".concat(field, " cannot be updated by endusers"); } })];
157
170
  case 1:
158
- _l.sent();
171
+ _m.sent();
159
172
  return [2 /*return*/];
160
173
  }
161
174
  });
162
175
  };
163
176
  _i = 0, _b = Object.entries(restrictedEnduserUpdates(sdk.userInfo.id, enduser_1.id));
164
- _k.label = 7;
165
- case 7:
166
- if (!(_i < _b.length)) return [3 /*break*/, 10];
177
+ _l.label = 8;
178
+ case 8:
179
+ if (!(_i < _b.length)) return [3 /*break*/, 11];
167
180
  _c = _b[_i], field = _c[0], value = _c[1];
168
181
  return [5 /*yield**/, _loop_1(field, value)];
169
- case 8:
170
- _k.sent();
171
- _k.label = 9;
172
182
  case 9:
183
+ _l.sent();
184
+ _l.label = 10;
185
+ case 10:
173
186
  _i++;
174
- return [3 /*break*/, 7];
175
- case 10:
187
+ return [3 /*break*/, 8];
188
+ case 11:
176
189
  // F-0106 Variant A persistence check: the rejected assignedTo write must not
177
190
  // have granted the staff read-filter match.
178
191
  return [4 /*yield*/, (0, testing_1.async_test)('F-0106: rejected assignedTo write did not persist', function () { return sdk.api.endusers.getOne(enduser_1.id); }, { onResult: function (e) { var _a, _b; return !((_a = e.assignedTo) === null || _a === void 0 ? void 0 : _a.length) && !((_b = e.tags) === null || _b === void 0 ? void 0 : _b.length) && e.externalId === undefined; } })
179
192
  // ---- F-0110: enduser self-update of restricted form_responses fields must 400 ----
180
193
  ];
181
- case 11:
194
+ case 12:
182
195
  // F-0106 Variant A persistence check: the rejected assignedTo write must not
183
196
  // have granted the staff read-filter match.
184
- _k.sent();
197
+ _l.sent();
185
198
  _loop_2 = function (field, value) {
186
- return __generator(this, function (_m) {
187
- switch (_m.label) {
199
+ return __generator(this, function (_o) {
200
+ switch (_o.label) {
188
201
  case 0: return [4 /*yield*/, (0, testing_1.async_test)("F-0110: enduser cannot self-update form_responses.".concat(field), function () {
189
202
  var _a;
190
203
  return enduserSDK_1.api.form_responses.updateOne(formResponse_1.id, (_a = {}, _a[field] = value, _a));
191
204
  }, { shouldError: true, onError: function (e) { return e.message === "".concat(field, " cannot be updated by endusers"); } })];
192
205
  case 1:
193
- _m.sent();
206
+ _o.sent();
194
207
  return [2 /*return*/];
195
208
  }
196
209
  });
197
210
  };
198
- _d = 0, _e = Object.entries(restrictedFormResponseUpdates(sdk.userInfo.id));
199
- _k.label = 12;
200
- case 12:
201
- if (!(_d < _e.length)) return [3 /*break*/, 15];
211
+ _d = 0, _e = Object.entries(restrictedFormResponseUpdates(sdk.userInfo.id, otherEnduser_1.id));
212
+ _l.label = 13;
213
+ case 13:
214
+ if (!(_d < _e.length)) return [3 /*break*/, 16];
202
215
  _f = _e[_d], field = _f[0], value = _f[1];
203
216
  return [5 /*yield**/, _loop_2(field, value)];
204
- case 13:
205
- _k.sent();
206
- _k.label = 14;
207
217
  case 14:
218
+ _l.sent();
219
+ _l.label = 15;
220
+ case 15:
208
221
  _d++;
209
- return [3 /*break*/, 12];
210
- case 15: return [4 /*yield*/, (0, testing_1.async_test)('F-0110: rejected writes did not persist (markedAsSubmitted, procedureCodes, submittedBy)', function () { return sdk.api.form_responses.getOne(formResponse_1.id); }, { onResult: function (fr) { var _a; return !fr.markedAsSubmitted && !((_a = fr.procedureCodes) === null || _a === void 0 ? void 0 : _a.length) && fr.submittedBy === undefined; } })
222
+ return [3 /*break*/, 13];
223
+ case 16: return [4 /*yield*/, (0, testing_1.async_test)('F-0110: rejected writes did not persist (markedAsSubmitted, procedureCodes, submittedBy, enduserId)', function () { return sdk.api.form_responses.getOne(formResponse_1.id); }, { onResult: function (fr) {
224
+ var _a;
225
+ return (!fr.markedAsSubmitted && !((_a = fr.procedureCodes) === null || _a === void 0 ? void 0 : _a.length) && fr.submittedBy === undefined
226
+ // still points at its own patient: a successful repoint is what redirects the intake write
227
+ && fr.enduserId === enduser_1.id);
228
+ } })
211
229
  // ---- Positive controls: intended enduser self-updates still work ----
212
230
  ];
213
- case 16:
214
- _k.sent();
231
+ case 17:
232
+ _l.sent();
215
233
  // ---- Positive controls: intended enduser self-updates still work ----
216
234
  return [4 /*yield*/, (0, testing_1.async_test)('enduser can still update own profile fields (fname/lname)', function () { return enduserSDK_1.api.endusers.updateOne(enduser_1.id, { fname: 'StillAllowed', lname: 'Patient' }); }, { onResult: function (e) { return e.fname === 'StillAllowed' && e.lname === 'Patient'; } })];
217
- case 17:
235
+ case 18:
218
236
  // ---- Positive controls: intended enduser self-updates still work ----
219
- _k.sent();
237
+ _l.sent();
220
238
  return [4 /*yield*/, (0, testing_1.async_test)('enduser can still update own form_response (hideFromEnduserPortal — intended per schema)', function () { return enduserSDK_1.api.form_responses.updateOne(formResponse_1.id, { hideFromEnduserPortal: true }); }, { onResult: function (fr) { return fr.hideFromEnduserPortal === true; } })
221
239
  // ---- Positive controls: staff sessions are unaffected by enduserUpdatesDisabled ----
222
240
  ];
223
- case 18:
224
- _k.sent();
241
+ case 19:
242
+ _l.sent();
225
243
  // ---- Positive controls: staff sessions are unaffected by enduserUpdatesDisabled ----
226
244
  return [4 /*yield*/, (0, testing_1.async_test)('staff can still update restricted endusers fields (tags, assignedTo, externalId, note, source)', function () { return sdk.api.endusers.updateOne(enduser_1.id, {
227
245
  tags: ['staff-set-tag'],
@@ -235,9 +253,9 @@ var enduser_write_restrictions_tests = function (_a) {
235
253
  && !!((_b = e.assignedTo) === null || _b === void 0 ? void 0 : _b.includes(sdk.userInfo.id))
236
254
  && e.externalId === 'staff-set-external-id');
237
255
  } })];
238
- case 19:
256
+ case 20:
239
257
  // ---- Positive controls: staff sessions are unaffected by enduserUpdatesDisabled ----
240
- _k.sent();
258
+ _l.sent();
241
259
  return [4 /*yield*/, (0, testing_1.async_test)('staff can still update restricted form_responses fields (procedureCodes, diagnosisCodes, tags)', function () { return sdk.api.form_responses.updateOne(formResponse_1.id, {
242
260
  procedureCodes: [{ code: 'G0019', units: 1 }],
243
261
  diagnosisCodes: [{ code: 'Z71.3', description: 'Dietary counseling and surveillance' }],
@@ -247,48 +265,73 @@ var enduser_write_restrictions_tests = function (_a) {
247
265
  return (((_b = (_a = fr.procedureCodes) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.code) === 'G0019'
248
266
  && ((_d = (_c = fr.diagnosisCodes) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.code) === 'Z71.3'
249
267
  && !!((_e = fr.tags) === null || _e === void 0 ? void 0 : _e.includes('staff-set-tag')));
250
- } })];
251
- case 20:
252
- _k.sent();
253
- return [3 /*break*/, 34];
268
+ } })
269
+ // enduserId is enduserUpdatesDisabled rather than updatesDisabled specifically so this keeps
270
+ // working: staff sometimes need to move a response to the correct profile to fix a mistake.
271
+ ];
254
272
  case 21:
255
- if (!formResponseId) return [3 /*break*/, 25];
256
- _k.label = 22;
273
+ _l.sent();
274
+ // enduserId is enduserUpdatesDisabled rather than updatesDisabled specifically so this keeps
275
+ // working: staff sometimes need to move a response to the correct profile to fix a mistake.
276
+ return [4 /*yield*/, (0, testing_1.async_test)('staff can still repoint form_responses.enduserId to another patient', function () { return sdk.api.form_responses.updateOne(formResponse_1.id, { enduserId: otherEnduser_1.id }); }, { onResult: function (fr) { return fr.enduserId === otherEnduser_1.id; } })];
257
277
  case 22:
258
- _k.trys.push([22, 24, , 25]);
259
- return [4 /*yield*/, sdk.api.form_responses.deleteOne(formResponseId)];
278
+ // enduserId is enduserUpdatesDisabled rather than updatesDisabled specifically so this keeps
279
+ // working: staff sometimes need to move a response to the correct profile to fix a mistake.
280
+ _l.sent();
281
+ return [4 /*yield*/, (0, testing_1.async_test)('staff can repoint form_responses.enduserId back', function () { return sdk.api.form_responses.updateOne(formResponse_1.id, { enduserId: enduser_1.id }); }, { onResult: function (fr) { return fr.enduserId === enduser_1.id; } })];
260
282
  case 23:
261
- _k.sent();
262
- return [3 /*break*/, 25];
283
+ _l.sent();
284
+ return [3 /*break*/, 41];
263
285
  case 24:
264
- _g = _k.sent();
265
- return [3 /*break*/, 25];
286
+ if (!formResponseId) return [3 /*break*/, 28];
287
+ _l.label = 25;
266
288
  case 25:
267
- if (!formId) return [3 /*break*/, 29];
268
- _k.label = 26;
289
+ _l.trys.push([25, 27, , 28]);
290
+ return [4 /*yield*/, sdk.api.form_responses.deleteOne(formResponseId)];
269
291
  case 26:
270
- _k.trys.push([26, 28, , 29]);
271
- return [4 /*yield*/, sdk.api.forms.deleteOne(formId)];
292
+ _l.sent();
293
+ return [3 /*break*/, 28];
272
294
  case 27:
273
- _k.sent();
274
- return [3 /*break*/, 29];
295
+ _g = _l.sent();
296
+ return [3 /*break*/, 28];
275
297
  case 28:
276
- _h = _k.sent();
277
- return [3 /*break*/, 29];
298
+ if (!formId) return [3 /*break*/, 32];
299
+ _l.label = 29;
278
300
  case 29:
279
- if (!enduserId) return [3 /*break*/, 33];
280
- _k.label = 30;
301
+ _l.trys.push([29, 31, , 32]);
302
+ return [4 /*yield*/, sdk.api.forms.deleteOne(formId)];
281
303
  case 30:
282
- _k.trys.push([30, 32, , 33]);
283
- return [4 /*yield*/, sdk.api.endusers.deleteOne(enduserId)];
304
+ _l.sent();
305
+ return [3 /*break*/, 32];
284
306
  case 31:
285
- _k.sent();
286
- return [3 /*break*/, 33];
307
+ _h = _l.sent();
308
+ return [3 /*break*/, 32];
287
309
  case 32:
288
- _j = _k.sent();
289
- return [3 /*break*/, 33];
290
- case 33: return [7 /*endfinally*/];
291
- case 34: return [2 /*return*/];
310
+ if (!enduserId) return [3 /*break*/, 36];
311
+ _l.label = 33;
312
+ case 33:
313
+ _l.trys.push([33, 35, , 36]);
314
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(enduserId)];
315
+ case 34:
316
+ _l.sent();
317
+ return [3 /*break*/, 36];
318
+ case 35:
319
+ _j = _l.sent();
320
+ return [3 /*break*/, 36];
321
+ case 36:
322
+ if (!otherEnduserId) return [3 /*break*/, 40];
323
+ _l.label = 37;
324
+ case 37:
325
+ _l.trys.push([37, 39, , 40]);
326
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(otherEnduserId)];
327
+ case 38:
328
+ _l.sent();
329
+ return [3 /*break*/, 40];
330
+ case 39:
331
+ _k = _l.sent();
332
+ return [3 /*break*/, 40];
333
+ case 40: return [7 /*endfinally*/];
334
+ case 41: return [2 /*return*/];
292
335
  }
293
336
  });
294
337
  });
@@ -1 +1 @@
1
- {"version":3,"file":"F-0106-F-0110-enduser-write-restrictions.test.js","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"F-0106-F-0110-enduser-write-restrictions.test.js","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Session } from "../../../sdk";
2
+ export declare const allowed_paths_confinement_tests: ({ sdk }: {
3
+ sdk: Session;
4
+ sdkNonAdmin: Session;
5
+ }) => Promise<void>;
6
+ //# sourceMappingURL=F-0166-allowed-paths-wildcard-bypass.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"F-0166-allowed-paths-wildcard-bypass.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/F-0166-allowed-paths-wildcard-bypass.test.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAkB,MAAM,cAAc,CAAA;AAkEtD,eAAO,MAAM,+BAA+B;SAA2B,OAAO;iBAAe,OAAO;mBAqnBnG,CAAA"}