@tellescope/sdk 1.256.14 → 1.256.16

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 (293) hide show
  1. package/lib/cjs/sdk.d.ts +2 -2
  2. package/lib/cjs/tests/api_tests/auto_merge_form_submission.test.js +1 -1
  3. package/lib/cjs/tests/api_tests/auto_merge_form_submission.test.js.map +1 -1
  4. package/lib/cjs/tests/api_tests/enduser_observations_auto_review.test.d.ts +5 -0
  5. package/lib/cjs/tests/api_tests/enduser_observations_auto_review.test.d.ts.map +1 -0
  6. package/lib/cjs/tests/api_tests/enduser_observations_auto_review.test.js +388 -0
  7. package/lib/cjs/tests/api_tests/enduser_observations_auto_review.test.js.map +1 -0
  8. package/lib/cjs/tests/api_tests/integrations_redacted.test.js +3 -3
  9. package/lib/cjs/tests/api_tests/integrations_redacted.test.js.map +1 -1
  10. package/lib/cjs/tests/api_tests/organization_signup.test.d.ts +1 -1
  11. package/lib/cjs/tests/api_tests/organization_signup.test.js +1 -1
  12. package/lib/cjs/tests/api_tests/purchase_made_trigger.test.d.ts.map +1 -1
  13. package/lib/cjs/tests/api_tests/purchase_made_trigger.test.js +103 -162
  14. package/lib/cjs/tests/api_tests/purchase_made_trigger.test.js.map +1 -1
  15. package/lib/cjs/tests/api_tests/security/F-0200-form-logic-js-execution.test.d.ts +33 -0
  16. package/lib/cjs/tests/api_tests/security/F-0200-form-logic-js-execution.test.d.ts.map +1 -0
  17. package/lib/cjs/tests/api_tests/security/F-0200-form-logic-js-execution.test.js +249 -0
  18. package/lib/cjs/tests/api_tests/security/F-0200-form-logic-js-execution.test.js.map +1 -0
  19. package/lib/cjs/tests/api_tests/security/add-to-journey-foreign-enduserid.test.d.ts +42 -0
  20. package/lib/cjs/tests/api_tests/security/add-to-journey-foreign-enduserid.test.d.ts.map +1 -0
  21. package/lib/cjs/tests/api_tests/security/add-to-journey-foreign-enduserid.test.js +281 -0
  22. package/lib/cjs/tests/api_tests/security/add-to-journey-foreign-enduserid.test.js.map +1 -0
  23. package/lib/cjs/tests/api_tests/security/ai-conversations-rbac.test.d.ts +38 -0
  24. package/lib/cjs/tests/api_tests/security/ai-conversations-rbac.test.d.ts.map +1 -0
  25. package/lib/cjs/tests/api_tests/security/ai-conversations-rbac.test.js +390 -0
  26. package/lib/cjs/tests/api_tests/security/ai-conversations-rbac.test.js.map +1 -0
  27. package/lib/cjs/tests/api_tests/security/allowed-paths-confinement.test.d.ts +6 -0
  28. package/lib/cjs/tests/api_tests/security/allowed-paths-confinement.test.d.ts.map +1 -0
  29. package/lib/cjs/tests/api_tests/security/allowed-paths-confinement.test.js +1003 -0
  30. package/lib/cjs/tests/api_tests/security/allowed-paths-confinement.test.js.map +1 -0
  31. package/lib/cjs/tests/api_tests/security/automated-actions-process-gate.test.d.ts +42 -0
  32. package/lib/cjs/tests/api_tests/security/automated-actions-process-gate.test.d.ts.map +1 -0
  33. package/lib/cjs/tests/api_tests/security/automated-actions-process-gate.test.js +323 -0
  34. package/lib/cjs/tests/api_tests/security/automated-actions-process-gate.test.js.map +1 -0
  35. package/lib/cjs/tests/api_tests/security/booking-info-idor-token-mint.test.d.ts +29 -0
  36. package/lib/cjs/tests/api_tests/security/booking-info-idor-token-mint.test.d.ts.map +1 -0
  37. package/lib/cjs/tests/api_tests/security/booking-info-idor-token-mint.test.js +335 -0
  38. package/lib/cjs/tests/api_tests/security/booking-info-idor-token-mint.test.js.map +1 -0
  39. package/lib/cjs/tests/api_tests/security/cascade-role-rename-cross-tenant.test.d.ts +32 -0
  40. package/lib/cjs/tests/api_tests/security/cascade-role-rename-cross-tenant.test.d.ts.map +1 -0
  41. package/lib/cjs/tests/api_tests/security/cascade-role-rename-cross-tenant.test.js +237 -0
  42. package/lib/cjs/tests/api_tests/security/cascade-role-rename-cross-tenant.test.js.map +1 -0
  43. package/lib/cjs/tests/api_tests/security/data-sync-redaction-bypass.test.d.ts +28 -0
  44. package/lib/cjs/tests/api_tests/security/data-sync-redaction-bypass.test.d.ts.map +1 -0
  45. package/lib/cjs/tests/api_tests/security/data-sync-redaction-bypass.test.js +349 -0
  46. package/lib/cjs/tests/api_tests/security/data-sync-redaction-bypass.test.js.map +1 -0
  47. package/lib/cjs/tests/api_tests/security/develop-health-benefit-verification-rbac.test.d.ts +30 -0
  48. package/lib/cjs/tests/api_tests/security/develop-health-benefit-verification-rbac.test.d.ts.map +1 -0
  49. package/lib/cjs/tests/api_tests/security/develop-health-benefit-verification-rbac.test.js +314 -0
  50. package/lib/cjs/tests/api_tests/security/develop-health-benefit-verification-rbac.test.js.map +1 -0
  51. package/lib/cjs/tests/api_tests/security/enduser-cross-create.test.d.ts +21 -0
  52. package/lib/cjs/tests/api_tests/security/enduser-cross-create.test.d.ts.map +1 -0
  53. package/lib/cjs/tests/api_tests/security/enduser-cross-create.test.js +362 -0
  54. package/lib/cjs/tests/api_tests/security/enduser-cross-create.test.js.map +1 -0
  55. package/lib/cjs/tests/api_tests/security/enduser-write-restrictions.test.d.ts +21 -0
  56. package/lib/cjs/tests/api_tests/security/enduser-write-restrictions.test.d.ts.map +1 -0
  57. package/lib/cjs/tests/api_tests/security/enduser-write-restrictions.test.js +366 -0
  58. package/lib/cjs/tests/api_tests/security/enduser-write-restrictions.test.js.map +1 -0
  59. package/lib/cjs/tests/api_tests/security/file-link-session-confinement.test.d.ts +5 -0
  60. package/lib/cjs/tests/api_tests/security/file-link-session-confinement.test.d.ts.map +1 -0
  61. package/lib/cjs/tests/api_tests/security/file-link-session-confinement.test.js +357 -0
  62. package/lib/cjs/tests/api_tests/security/file-link-session-confinement.test.js.map +1 -0
  63. package/lib/cjs/tests/api_tests/security/form-logic-js-execution.test.d.ts +32 -0
  64. package/lib/cjs/tests/api_tests/security/form-logic-js-execution.test.d.ts.map +1 -0
  65. package/lib/cjs/tests/api_tests/security/form-logic-js-execution.test.js +248 -0
  66. package/lib/cjs/tests/api_tests/security/form-logic-js-execution.test.js.map +1 -0
  67. package/lib/cjs/tests/api_tests/security/globalunique-conflict-redaction.test.d.ts +19 -0
  68. package/lib/cjs/tests/api_tests/security/globalunique-conflict-redaction.test.d.ts.map +1 -0
  69. package/lib/cjs/tests/api_tests/security/globalunique-conflict-redaction.test.js +138 -0
  70. package/lib/cjs/tests/api_tests/security/globalunique-conflict-redaction.test.js.map +1 -0
  71. package/lib/cjs/tests/api_tests/security/handle-incoming-communication-cross-tenant.test.d.ts +24 -0
  72. package/lib/cjs/tests/api_tests/security/handle-incoming-communication-cross-tenant.test.d.ts.map +1 -0
  73. package/lib/cjs/tests/api_tests/security/handle-incoming-communication-cross-tenant.test.js +201 -0
  74. package/lib/cjs/tests/api_tests/security/handle-incoming-communication-cross-tenant.test.js.map +1 -0
  75. package/lib/cjs/tests/api_tests/security/invite-user-enumeration.test.d.ts +29 -0
  76. package/lib/cjs/tests/api_tests/security/invite-user-enumeration.test.d.ts.map +1 -0
  77. package/lib/cjs/tests/api_tests/security/invite-user-enumeration.test.js +278 -0
  78. package/lib/cjs/tests/api_tests/security/invite-user-enumeration.test.js.map +1 -0
  79. package/lib/cjs/tests/api_tests/security/load-inbox-redaction.test.d.ts +17 -0
  80. package/lib/cjs/tests/api_tests/security/load-inbox-redaction.test.d.ts.map +1 -0
  81. package/lib/cjs/tests/api_tests/security/load-inbox-redaction.test.js +155 -0
  82. package/lib/cjs/tests/api_tests/security/load-inbox-redaction.test.js.map +1 -0
  83. package/lib/cjs/tests/api_tests/security/prototype-pollution.test.d.ts +2 -0
  84. package/lib/cjs/tests/api_tests/security/prototype-pollution.test.d.ts.map +1 -0
  85. package/lib/cjs/tests/api_tests/security/prototype-pollution.test.js +88 -0
  86. package/lib/cjs/tests/api_tests/security/prototype-pollution.test.js.map +1 -0
  87. package/lib/cjs/tests/api_tests/security/proxy-image-unauth-ssrf.test.d.ts +34 -0
  88. package/lib/cjs/tests/api_tests/security/proxy-image-unauth-ssrf.test.d.ts.map +1 -0
  89. package/lib/cjs/tests/api_tests/security/proxy-image-unauth-ssrf.test.js +230 -0
  90. package/lib/cjs/tests/api_tests/security/proxy-image-unauth-ssrf.test.js.map +1 -0
  91. package/lib/cjs/tests/api_tests/security/sanitize-user-html-with-iframes.test.d.ts +2 -0
  92. package/lib/cjs/tests/api_tests/security/sanitize-user-html-with-iframes.test.d.ts.map +1 -0
  93. package/lib/cjs/tests/api_tests/security/sanitize-user-html-with-iframes.test.js +242 -0
  94. package/lib/cjs/tests/api_tests/security/sanitize-user-html-with-iframes.test.js.map +1 -0
  95. package/lib/cjs/tests/api_tests/security/sanitize-user-html.test.d.ts +2 -0
  96. package/lib/cjs/tests/api_tests/security/sanitize-user-html.test.d.ts.map +1 -0
  97. package/lib/cjs/tests/api_tests/security/sanitize-user-html.test.js +148 -0
  98. package/lib/cjs/tests/api_tests/security/sanitize-user-html.test.js.map +1 -0
  99. package/lib/cjs/tests/api_tests/security/schema-adminonly-enforcement.test.d.ts +45 -0
  100. package/lib/cjs/tests/api_tests/security/schema-adminonly-enforcement.test.d.ts.map +1 -0
  101. package/lib/cjs/tests/api_tests/security/schema-adminonly-enforcement.test.js +388 -0
  102. package/lib/cjs/tests/api_tests/security/schema-adminonly-enforcement.test.js.map +1 -0
  103. package/lib/cjs/tests/api_tests/security/self-admin-role-assignment.test.d.ts +38 -0
  104. package/lib/cjs/tests/api_tests/security/self-admin-role-assignment.test.d.ts.map +1 -0
  105. package/lib/cjs/tests/api_tests/security/self-admin-role-assignment.test.js +222 -0
  106. package/lib/cjs/tests/api_tests/security/self-admin-role-assignment.test.js.map +1 -0
  107. package/lib/cjs/tests/api_tests/security/startlinktoken-enduser-staff-escalation.test.d.ts +6 -0
  108. package/lib/cjs/tests/api_tests/security/startlinktoken-enduser-staff-escalation.test.d.ts.map +1 -0
  109. package/lib/cjs/tests/api_tests/security/startlinktoken-enduser-staff-escalation.test.js +354 -0
  110. package/lib/cjs/tests/api_tests/security/startlinktoken-enduser-staff-escalation.test.js.map +1 -0
  111. package/lib/cjs/tests/api_tests/security/webhook-outbound-ssrf.test.d.ts +28 -0
  112. package/lib/cjs/tests/api_tests/security/webhook-outbound-ssrf.test.d.ts.map +1 -0
  113. package/lib/cjs/tests/api_tests/security/webhook-outbound-ssrf.test.js +442 -0
  114. package/lib/cjs/tests/api_tests/security/webhook-outbound-ssrf.test.js.map +1 -0
  115. package/lib/cjs/tests/api_tests/security/webhook-timeout.test.d.ts +19 -0
  116. package/lib/cjs/tests/api_tests/security/webhook-timeout.test.d.ts.map +1 -0
  117. package/lib/cjs/tests/api_tests/security/webhook-timeout.test.js +156 -0
  118. package/lib/cjs/tests/api_tests/security/webhook-timeout.test.js.map +1 -0
  119. package/lib/cjs/tests/api_tests/webhook_error_handling.test.js +2 -2
  120. package/lib/cjs/tests/api_tests/webhook_error_handling.test.js.map +1 -1
  121. package/lib/cjs/tests/tests.d.ts.map +1 -1
  122. package/lib/cjs/tests/tests.js +60 -46
  123. package/lib/cjs/tests/tests.js.map +1 -1
  124. package/lib/cjs/tests/unit_tests/openapi_spec_freshness.test.d.ts +1 -1
  125. package/lib/cjs/tests/unit_tests/openapi_spec_freshness.test.js +1 -1
  126. package/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  127. package/lib/esm/enduser.d.ts +0 -1
  128. package/lib/esm/enduser.d.ts.map +1 -1
  129. package/lib/esm/sdk.d.ts +4 -5
  130. package/lib/esm/sdk.d.ts.map +1 -1
  131. package/lib/esm/session.d.ts +0 -1
  132. package/lib/esm/session.d.ts.map +1 -1
  133. package/lib/esm/tests/api_tests/auto_merge_form_submission.test.js +1 -1
  134. package/lib/esm/tests/api_tests/auto_merge_form_submission.test.js.map +1 -1
  135. package/lib/esm/tests/api_tests/enduser_observations_auto_review.test.d.ts +5 -0
  136. package/lib/esm/tests/api_tests/enduser_observations_auto_review.test.d.ts.map +1 -0
  137. package/lib/esm/tests/api_tests/enduser_observations_auto_review.test.js +383 -0
  138. package/lib/esm/tests/api_tests/enduser_observations_auto_review.test.js.map +1 -0
  139. package/lib/esm/tests/api_tests/integrations_redacted.test.js +3 -3
  140. package/lib/esm/tests/api_tests/integrations_redacted.test.js.map +1 -1
  141. package/lib/esm/tests/api_tests/organization_signup.test.d.ts +1 -1
  142. package/lib/esm/tests/api_tests/organization_signup.test.js +1 -1
  143. package/lib/esm/tests/api_tests/purchase_made_trigger.test.d.ts.map +1 -1
  144. package/lib/esm/tests/api_tests/purchase_made_trigger.test.js +104 -163
  145. package/lib/esm/tests/api_tests/purchase_made_trigger.test.js.map +1 -1
  146. package/lib/esm/tests/api_tests/security/F-0200-form-logic-js-execution.test.d.ts +33 -0
  147. package/lib/esm/tests/api_tests/security/F-0200-form-logic-js-execution.test.d.ts.map +1 -0
  148. package/lib/esm/tests/api_tests/security/F-0200-form-logic-js-execution.test.js +244 -0
  149. package/lib/esm/tests/api_tests/security/F-0200-form-logic-js-execution.test.js.map +1 -0
  150. package/lib/esm/tests/api_tests/security/add-to-journey-foreign-enduserid.test.d.ts +42 -0
  151. package/lib/esm/tests/api_tests/security/add-to-journey-foreign-enduserid.test.d.ts.map +1 -0
  152. package/lib/esm/tests/api_tests/security/add-to-journey-foreign-enduserid.test.js +276 -0
  153. package/lib/esm/tests/api_tests/security/add-to-journey-foreign-enduserid.test.js.map +1 -0
  154. package/lib/esm/tests/api_tests/security/ai-conversations-rbac.test.d.ts +38 -0
  155. package/lib/esm/tests/api_tests/security/ai-conversations-rbac.test.d.ts.map +1 -0
  156. package/lib/esm/tests/api_tests/security/ai-conversations-rbac.test.js +386 -0
  157. package/lib/esm/tests/api_tests/security/ai-conversations-rbac.test.js.map +1 -0
  158. package/lib/esm/tests/api_tests/security/allowed-paths-confinement.test.d.ts +6 -0
  159. package/lib/esm/tests/api_tests/security/allowed-paths-confinement.test.d.ts.map +1 -0
  160. package/lib/esm/tests/api_tests/security/allowed-paths-confinement.test.js +996 -0
  161. package/lib/esm/tests/api_tests/security/allowed-paths-confinement.test.js.map +1 -0
  162. package/lib/esm/tests/api_tests/security/automated-actions-process-gate.test.d.ts +42 -0
  163. package/lib/esm/tests/api_tests/security/automated-actions-process-gate.test.d.ts.map +1 -0
  164. package/lib/esm/tests/api_tests/security/automated-actions-process-gate.test.js +316 -0
  165. package/lib/esm/tests/api_tests/security/automated-actions-process-gate.test.js.map +1 -0
  166. package/lib/esm/tests/api_tests/security/booking-info-idor-token-mint.test.d.ts +29 -0
  167. package/lib/esm/tests/api_tests/security/booking-info-idor-token-mint.test.d.ts.map +1 -0
  168. package/lib/esm/tests/api_tests/security/booking-info-idor-token-mint.test.js +331 -0
  169. package/lib/esm/tests/api_tests/security/booking-info-idor-token-mint.test.js.map +1 -0
  170. package/lib/esm/tests/api_tests/security/cascade-role-rename-cross-tenant.test.d.ts +32 -0
  171. package/lib/esm/tests/api_tests/security/cascade-role-rename-cross-tenant.test.d.ts.map +1 -0
  172. package/lib/esm/tests/api_tests/security/cascade-role-rename-cross-tenant.test.js +233 -0
  173. package/lib/esm/tests/api_tests/security/cascade-role-rename-cross-tenant.test.js.map +1 -0
  174. package/lib/esm/tests/api_tests/security/data-sync-redaction-bypass.test.d.ts +28 -0
  175. package/lib/esm/tests/api_tests/security/data-sync-redaction-bypass.test.d.ts.map +1 -0
  176. package/lib/esm/tests/api_tests/security/data-sync-redaction-bypass.test.js +345 -0
  177. package/lib/esm/tests/api_tests/security/data-sync-redaction-bypass.test.js.map +1 -0
  178. package/lib/esm/tests/api_tests/security/develop-health-benefit-verification-rbac.test.d.ts +30 -0
  179. package/lib/esm/tests/api_tests/security/develop-health-benefit-verification-rbac.test.d.ts.map +1 -0
  180. package/lib/esm/tests/api_tests/security/develop-health-benefit-verification-rbac.test.js +310 -0
  181. package/lib/esm/tests/api_tests/security/develop-health-benefit-verification-rbac.test.js.map +1 -0
  182. package/lib/esm/tests/api_tests/security/enduser-cross-create.test.d.ts +21 -0
  183. package/lib/esm/tests/api_tests/security/enduser-cross-create.test.d.ts.map +1 -0
  184. package/lib/esm/tests/api_tests/security/enduser-cross-create.test.js +358 -0
  185. package/lib/esm/tests/api_tests/security/enduser-cross-create.test.js.map +1 -0
  186. package/lib/esm/tests/api_tests/security/enduser-write-restrictions.test.d.ts +21 -0
  187. package/lib/esm/tests/api_tests/security/enduser-write-restrictions.test.d.ts.map +1 -0
  188. package/lib/esm/tests/api_tests/security/enduser-write-restrictions.test.js +362 -0
  189. package/lib/esm/tests/api_tests/security/enduser-write-restrictions.test.js.map +1 -0
  190. package/lib/esm/tests/api_tests/security/file-link-session-confinement.test.d.ts +5 -0
  191. package/lib/esm/tests/api_tests/security/file-link-session-confinement.test.d.ts.map +1 -0
  192. package/lib/esm/tests/api_tests/security/file-link-session-confinement.test.js +349 -0
  193. package/lib/esm/tests/api_tests/security/file-link-session-confinement.test.js.map +1 -0
  194. package/lib/esm/tests/api_tests/security/form-logic-js-execution.test.d.ts +32 -0
  195. package/lib/esm/tests/api_tests/security/form-logic-js-execution.test.d.ts.map +1 -0
  196. package/lib/esm/tests/api_tests/security/form-logic-js-execution.test.js +243 -0
  197. package/lib/esm/tests/api_tests/security/form-logic-js-execution.test.js.map +1 -0
  198. package/lib/esm/tests/api_tests/security/globalunique-conflict-redaction.test.d.ts +19 -0
  199. package/lib/esm/tests/api_tests/security/globalunique-conflict-redaction.test.d.ts.map +1 -0
  200. package/lib/esm/tests/api_tests/security/globalunique-conflict-redaction.test.js +134 -0
  201. package/lib/esm/tests/api_tests/security/globalunique-conflict-redaction.test.js.map +1 -0
  202. package/lib/esm/tests/api_tests/security/handle-incoming-communication-cross-tenant.test.d.ts +24 -0
  203. package/lib/esm/tests/api_tests/security/handle-incoming-communication-cross-tenant.test.d.ts.map +1 -0
  204. package/lib/esm/tests/api_tests/security/handle-incoming-communication-cross-tenant.test.js +194 -0
  205. package/lib/esm/tests/api_tests/security/handle-incoming-communication-cross-tenant.test.js.map +1 -0
  206. package/lib/esm/tests/api_tests/security/invite-user-enumeration.test.d.ts +29 -0
  207. package/lib/esm/tests/api_tests/security/invite-user-enumeration.test.d.ts.map +1 -0
  208. package/lib/esm/tests/api_tests/security/invite-user-enumeration.test.js +271 -0
  209. package/lib/esm/tests/api_tests/security/invite-user-enumeration.test.js.map +1 -0
  210. package/lib/esm/tests/api_tests/security/load-inbox-redaction.test.d.ts +17 -0
  211. package/lib/esm/tests/api_tests/security/load-inbox-redaction.test.d.ts.map +1 -0
  212. package/lib/esm/tests/api_tests/security/load-inbox-redaction.test.js +151 -0
  213. package/lib/esm/tests/api_tests/security/load-inbox-redaction.test.js.map +1 -0
  214. package/lib/esm/tests/api_tests/security/prototype-pollution.test.d.ts +2 -0
  215. package/lib/esm/tests/api_tests/security/prototype-pollution.test.d.ts.map +1 -0
  216. package/lib/esm/tests/api_tests/security/prototype-pollution.test.js +84 -0
  217. package/lib/esm/tests/api_tests/security/prototype-pollution.test.js.map +1 -0
  218. package/lib/esm/tests/api_tests/security/proxy-image-unauth-ssrf.test.d.ts +34 -0
  219. package/lib/esm/tests/api_tests/security/proxy-image-unauth-ssrf.test.d.ts.map +1 -0
  220. package/lib/esm/tests/api_tests/security/proxy-image-unauth-ssrf.test.js +223 -0
  221. package/lib/esm/tests/api_tests/security/proxy-image-unauth-ssrf.test.js.map +1 -0
  222. package/lib/esm/tests/api_tests/security/sanitize-user-html-with-iframes.test.d.ts +2 -0
  223. package/lib/esm/tests/api_tests/security/sanitize-user-html-with-iframes.test.d.ts.map +1 -0
  224. package/lib/esm/tests/api_tests/security/sanitize-user-html-with-iframes.test.js +238 -0
  225. package/lib/esm/tests/api_tests/security/sanitize-user-html-with-iframes.test.js.map +1 -0
  226. package/lib/esm/tests/api_tests/security/sanitize-user-html.test.d.ts +2 -0
  227. package/lib/esm/tests/api_tests/security/sanitize-user-html.test.d.ts.map +1 -0
  228. package/lib/esm/tests/api_tests/security/sanitize-user-html.test.js +144 -0
  229. package/lib/esm/tests/api_tests/security/sanitize-user-html.test.js.map +1 -0
  230. package/lib/esm/tests/api_tests/security/schema-adminonly-enforcement.test.d.ts +45 -0
  231. package/lib/esm/tests/api_tests/security/schema-adminonly-enforcement.test.d.ts.map +1 -0
  232. package/lib/esm/tests/api_tests/security/schema-adminonly-enforcement.test.js +381 -0
  233. package/lib/esm/tests/api_tests/security/schema-adminonly-enforcement.test.js.map +1 -0
  234. package/lib/esm/tests/api_tests/security/self-admin-role-assignment.test.d.ts +38 -0
  235. package/lib/esm/tests/api_tests/security/self-admin-role-assignment.test.d.ts.map +1 -0
  236. package/lib/esm/tests/api_tests/security/self-admin-role-assignment.test.js +218 -0
  237. package/lib/esm/tests/api_tests/security/self-admin-role-assignment.test.js.map +1 -0
  238. package/lib/esm/tests/api_tests/security/startlinktoken-enduser-staff-escalation.test.d.ts +6 -0
  239. package/lib/esm/tests/api_tests/security/startlinktoken-enduser-staff-escalation.test.d.ts.map +1 -0
  240. package/lib/esm/tests/api_tests/security/startlinktoken-enduser-staff-escalation.test.js +350 -0
  241. package/lib/esm/tests/api_tests/security/startlinktoken-enduser-staff-escalation.test.js.map +1 -0
  242. package/lib/esm/tests/api_tests/security/webhook-outbound-ssrf.test.d.ts +28 -0
  243. package/lib/esm/tests/api_tests/security/webhook-outbound-ssrf.test.d.ts.map +1 -0
  244. package/lib/esm/tests/api_tests/security/webhook-outbound-ssrf.test.js +435 -0
  245. package/lib/esm/tests/api_tests/security/webhook-outbound-ssrf.test.js.map +1 -0
  246. package/lib/esm/tests/api_tests/security/webhook-timeout.test.d.ts +19 -0
  247. package/lib/esm/tests/api_tests/security/webhook-timeout.test.d.ts.map +1 -0
  248. package/lib/esm/tests/api_tests/security/webhook-timeout.test.js +149 -0
  249. package/lib/esm/tests/api_tests/security/webhook-timeout.test.js.map +1 -0
  250. package/lib/esm/tests/api_tests/webhook_error_handling.test.js +2 -2
  251. package/lib/esm/tests/api_tests/webhook_error_handling.test.js.map +1 -1
  252. package/lib/esm/tests/tests.d.ts.map +1 -1
  253. package/lib/esm/tests/tests.js +38 -24
  254. package/lib/esm/tests/tests.js.map +1 -1
  255. package/lib/esm/tests/unit_tests/openapi_spec_freshness.test.d.ts +1 -1
  256. package/lib/esm/tests/unit_tests/openapi_spec_freshness.test.js +1 -1
  257. package/lib/tsconfig.tsbuildinfo +1 -1
  258. package/package.json +10 -10
  259. package/src/tests/api_tests/auto_merge_form_submission.test.ts +1 -1
  260. package/src/tests/api_tests/enduser_observations_auto_review.test.ts +358 -0
  261. package/src/tests/api_tests/integrations_redacted.test.ts +1 -1
  262. package/src/tests/api_tests/organization_signup.test.ts +2 -2
  263. package/src/tests/api_tests/purchase_made_trigger.test.ts +29 -41
  264. package/src/tests/api_tests/security/{F-0196-add-to-journey-foreign-enduserid.test.ts → add-to-journey-foreign-enduserid.test.ts} +6 -7
  265. package/src/tests/api_tests/security/{F-0005-ai-conversations-rbac.test.ts → ai-conversations-rbac.test.ts} +14 -14
  266. package/src/tests/api_tests/security/{F-0166-allowed-paths-wildcard-bypass.test.ts → allowed-paths-confinement.test.ts} +11 -11
  267. package/src/tests/api_tests/security/{F-0192-automated-actions-process-gate.test.ts → automated-actions-process-gate.test.ts} +6 -7
  268. package/src/tests/api_tests/security/{F-0179-booking-info-idor-token-mint.test.ts → booking-info-idor-token-mint.test.ts} +5 -6
  269. package/src/tests/api_tests/security/{F-0053-cascade-role-rename-cross-tenant.test.ts → cascade-role-rename-cross-tenant.test.ts} +10 -10
  270. package/src/tests/api_tests/security/{F-0001-data-sync-redaction-bypass.test.ts → data-sync-redaction-bypass.test.ts} +9 -9
  271. package/src/tests/api_tests/security/{F-0006-develop-health-benefit-verification-rbac.test.ts → develop-health-benefit-verification-rbac.test.ts} +7 -8
  272. package/src/tests/api_tests/security/{F-0116-F-0119-enduser-cross-create.test.ts → enduser-cross-create.test.ts} +25 -25
  273. package/src/tests/api_tests/security/{F-0106-F-0110-enduser-write-restrictions.test.ts → enduser-write-restrictions.test.ts} +12 -14
  274. package/src/tests/api_tests/security/file-link-session-confinement.test.ts +291 -0
  275. package/src/tests/api_tests/security/form-logic-js-execution.test.ts +183 -0
  276. package/src/tests/api_tests/security/{F-0145-globalunique-leak.test.ts → globalunique-conflict-redaction.test.ts} +5 -6
  277. package/src/tests/api_tests/security/{F-0008-handle-incoming-communication-cross-tenant.test.ts → handle-incoming-communication-cross-tenant.test.ts} +8 -8
  278. package/src/tests/api_tests/security/{F-0007-invite-user-enumeration.test.ts → invite-user-enumeration.test.ts} +8 -8
  279. package/src/tests/api_tests/security/{F-0151-load-inbox-redaction.test.ts → load-inbox-redaction.test.ts} +5 -6
  280. package/src/tests/api_tests/security/{F-0016-prototype-pollution.test.ts → prototype-pollution.test.ts} +4 -4
  281. package/src/tests/api_tests/security/{F-0025-proxy-image-unauth-ssrf.test.ts → proxy-image-unauth-ssrf.test.ts} +11 -12
  282. package/src/tests/api_tests/security/{F-0013-sanitize-user-html-with-iframes.test.ts → sanitize-user-html-with-iframes.test.ts} +5 -5
  283. package/src/tests/api_tests/security/{F-0013-sanitize-user-html.test.ts → sanitize-user-html.test.ts} +4 -4
  284. package/src/tests/api_tests/security/{F-0191-schema-adminonly-enforcement.test.ts → schema-adminonly-enforcement.test.ts} +6 -7
  285. package/src/tests/api_tests/security/{F-0076-self-admin-role-assignment.test.ts → self-admin-role-assignment.test.ts} +13 -13
  286. package/src/tests/api_tests/security/{F-0185-startlinktoken-enduser-staff-escalation.test.ts → startlinktoken-enduser-staff-escalation.test.ts} +6 -6
  287. package/src/tests/api_tests/security/{F-0015-webhook-outbound-ssrf.test.ts → webhook-outbound-ssrf.test.ts} +13 -14
  288. package/src/tests/api_tests/security/{F-0155-webhook-timeout.test.ts → webhook-timeout.test.ts} +6 -7
  289. package/src/tests/api_tests/webhook_error_handling.test.ts +1 -1
  290. package/src/tests/tests.ts +43 -24
  291. package/src/tests/unit_tests/openapi_spec_freshness.test.ts +1 -1
  292. package/test_generated.pdf +0 -0
  293. package/src/tests/api_tests/security/readonly-enduser-preview.test.ts +0 -301
@@ -0,0 +1,349 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ require('source-map-support').install();
38
+ import axios from "axios";
39
+ import { assert_checks, setup_isolated_tenant, } from "../../setup_isolated";
40
+ var host = process.env.API_URL || 'http://localhost:8080';
41
+ var RAND = function () { return Math.random().toString(36).slice(2, 10); };
42
+ var probe = function (method, path, o) {
43
+ if (o === void 0) { o = {}; }
44
+ return __awaiter(void 0, void 0, void 0, function () {
45
+ var r;
46
+ return __generator(this, function (_a) {
47
+ switch (_a.label) {
48
+ case 0: return [4 /*yield*/, axios.request({
49
+ method: method,
50
+ url: "".concat(host, "/v1").concat(path),
51
+ params: o.params,
52
+ data: o.data,
53
+ headers: o.token ? { Authorization: "Bearer ".concat(o.token) } : undefined,
54
+ validateStatus: function () { return true; },
55
+ })];
56
+ case 1:
57
+ r = _a.sent();
58
+ return [2 /*return*/, { status: r.status, body: r.data }];
59
+ }
60
+ });
61
+ });
62
+ };
63
+ export var file_link_session_confinement_checks = function () { return __awaiter(void 0, void 0, void 0, function () {
64
+ var checks, record, tenant, sdk_1, enduser_1, newFile, fileA_1, fileB_1, mint, adminFiles, confinement_probes, plain, shared, methods, send, verify, _a, header, payload, decoded, forged, forgedSend, send, e_1;
65
+ return __generator(this, function (_b) {
66
+ switch (_b.label) {
67
+ case 0:
68
+ checks = [];
69
+ record = function (label, pass, detail) { return checks.push({ label: label, pass: pass, detail: detail }); };
70
+ _b.label = 1;
71
+ case 1:
72
+ _b.trys.push([1, , 22, 27]);
73
+ return [4 /*yield*/, setup_isolated_tenant({
74
+ name: "FileLink ".concat(RAND()), users: [{ isAdmin: true }], apiKeys: 0,
75
+ })];
76
+ case 2:
77
+ tenant = _b.sent();
78
+ sdk_1 = tenant.sdk;
79
+ return [4 /*yield*/, sdk_1.api.endusers.createOne({
80
+ fname: 'FileLink', lname: 'Recipient',
81
+ email: "dontsend-filelink-".concat(RAND(), "@tellescope.com"),
82
+ phone: '+15555550100',
83
+ dateOfBirth: '01-01-1990',
84
+ })
85
+ // No S3 upload needed: prepare_file_upload inserts the files record with its secureName
86
+ // immediately, and file_download_URL only SIGNS a GET url — it never checks the object exists.
87
+ ];
88
+ case 3:
89
+ enduser_1 = _b.sent();
90
+ newFile = function (name) { return __awaiter(void 0, void 0, void 0, function () {
91
+ return __generator(this, function (_a) {
92
+ switch (_a.label) {
93
+ case 0: return [4 /*yield*/, sdk_1.api.files.prepare_file_upload({
94
+ name: name,
95
+ type: 'application/pdf', size: 1000, enduserId: enduser_1.id,
96
+ })];
97
+ case 1: return [2 /*return*/, ((_a.sent()).file)];
98
+ }
99
+ });
100
+ }); };
101
+ return [4 /*yield*/, newFile("shared-".concat(RAND(), ".pdf"))]; // the one that gets shared
102
+ case 4:
103
+ fileA_1 = _b.sent() // the one that gets shared
104
+ ;
105
+ return [4 /*yield*/, newFile("private-".concat(RAND(), ".pdf"))
106
+ /**
107
+ * Mints a token exactly the way a real send does — get_templated_message is the endpoint the
108
+ * worker calls (worker/app.js handleOutgoingEmail).
109
+ *
110
+ * replaceLinks always rewrites the resolved link into a tracking redirect, so `plaintext` holds
111
+ * `doc (${API_URL}/r/<redirectToken>)` rather than the portal URL. Follow the 302 to recover it.
112
+ */
113
+ ]; // the rest of the patient's chart
114
+ case 5:
115
+ fileB_1 = _b.sent() // the rest of the patient's chart
116
+ ;
117
+ mint = function (verb) { return __awaiter(void 0, void 0, void 0, function () {
118
+ var plaintext, redirectURL, r, location, token;
119
+ var _a, _b;
120
+ return __generator(this, function (_c) {
121
+ switch (_c.label) {
122
+ case 0: return [4 /*yield*/, sdk_1.api.templates.get_templated_message({
123
+ channel: 'Email',
124
+ userId: tenant.users[0].id,
125
+ enduserId: enduser_1.id,
126
+ message: "{{files.".concat(fileA_1.id, ".").concat(verb, ":doc}}"),
127
+ })];
128
+ case 1:
129
+ plaintext = (_c.sent()).plaintext;
130
+ redirectURL = (_a = plaintext.match(/\((https?:\/\/[^)\s]+)\)/)) === null || _a === void 0 ? void 0 : _a[1];
131
+ if (!redirectURL)
132
+ return [2 /*return*/, { token: undefined, detail: "no link resolved from: ".concat(plaintext) }];
133
+ return [4 /*yield*/, axios.get(redirectURL, { maxRedirects: 0, validateStatus: function () { return true; } })];
134
+ case 2:
135
+ r = _c.sent();
136
+ location = r.headers['location'];
137
+ if (!location)
138
+ return [2 /*return*/, { token: undefined, detail: "redirect did not 302 (".concat(r.status, ")") }];
139
+ token = (_b = new URL(location).searchParams.get('token')) !== null && _b !== void 0 ? _b : undefined;
140
+ return [2 /*return*/, { token: token, detail: token ? 'minted' : "no token in ".concat(location) }];
141
+ }
142
+ });
143
+ }); };
144
+ return [4 /*yield*/, probe('get', '/files', { token: tenant.users[0].authToken })];
145
+ case 6:
146
+ adminFiles = _b.sent();
147
+ record('control: admin session lists files', adminFiles.status === 200, "status ".concat(adminFiles.status));
148
+ confinement_probes = function (variant, token) { return __awaiter(void 0, void 0, void 0, function () {
149
+ var p, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, refreshed, leaked, refreshedToken, _s, _t, _u, _v;
150
+ var _w;
151
+ return __generator(this, function (_x) {
152
+ switch (_x.label) {
153
+ case 0:
154
+ p = function (label, expected, r) { return record("".concat(variant, " \u2014 ").concat(label), r.status === expected, "status ".concat(r.status, " (expected ").concat(expected, ")")); };
155
+ _a = p;
156
+ _b = ['1: downloads the shared file', 200];
157
+ return [4 /*yield*/, probe('get', '/file-download-URL', { token: token, params: { secureName: fileA_1.secureName } })];
158
+ case 1:
159
+ _a.apply(void 0, _b.concat([_x.sent()]));
160
+ _c = p;
161
+ _d = ['2: cannot download another file on the same patient', 403];
162
+ return [4 /*yield*/, probe('get', '/file-download-URL', { token: token, params: { secureName: fileB_1.secureName } })];
163
+ case 2:
164
+ _c.apply(void 0, _d.concat([_x.sent()]));
165
+ // validateInput merges query, then body, then params — body wins over query, so a pin checked
166
+ // against req.query rather than req.validated would be sidesteppable exactly like this.
167
+ _e = p;
168
+ _f = ['3: cannot smuggle another secureName through the body', 403];
169
+ return [4 /*yield*/, probe('get', '/file-download-URL', {
170
+ token: token,
171
+ params: { secureName: fileA_1.secureName }, data: { secureName: fileB_1.secureName },
172
+ })];
173
+ case 3:
174
+ // validateInput merges query, then body, then params — body wins over query, so a pin checked
175
+ // against req.query rather than req.validated would be sidesteppable exactly like this.
176
+ _e.apply(void 0, _f.concat([_x.sent()]));
177
+ // a listing would turn the pin into a directory of the patient's chart
178
+ _g = p;
179
+ _h = ['4: cannot list files', 403];
180
+ return [4 /*yield*/, probe('get', '/files', { token: token })];
181
+ case 4:
182
+ // a listing would turn the pin into a directory of the patient's chart
183
+ _g.apply(void 0, _h.concat([_x.sent()]));
184
+ _j = p;
185
+ _k = ['5a: cannot read chats', 403];
186
+ return [4 /*yield*/, probe('get', '/chats', { token: token })];
187
+ case 5:
188
+ _j.apply(void 0, _k.concat([_x.sent()]));
189
+ _l = p;
190
+ _m = ['5b: cannot read form responses', 403];
191
+ return [4 /*yield*/, probe('get', '/form-responses', { token: token })];
192
+ case 6:
193
+ _l.apply(void 0, _m.concat([_x.sent()]));
194
+ _o = p;
195
+ _p = ['5c: cannot read observations', 403];
196
+ return [4 /*yield*/, probe('get', '/enduser-observations', { token: token })];
197
+ case 7:
198
+ _o.apply(void 0, _p.concat([_x.sent()]));
199
+ _q = p;
200
+ _r = ['6: cannot update the patient', 403];
201
+ return [4 /*yield*/, probe('patch', "/enduser/".concat(enduser_1.id), { token: token, data: { updates: { fname: 'Overwritten' } } })];
202
+ case 8:
203
+ _q.apply(void 0, _r.concat([_x.sent()]));
204
+ return [4 /*yield*/, probe('post', '/refresh-enduser-session', { token: token })];
205
+ case 9:
206
+ refreshed = _x.sent();
207
+ p('7: can refresh its own session', 200, refreshed);
208
+ leaked = ['dateOfBirth', 'email', 'phone', 'fields', 'insurance', 'lname']
209
+ .filter(function (f) { var _a, _b; return ((_b = (_a = refreshed.body) === null || _a === void 0 ? void 0 : _a.enduser) !== null && _b !== void 0 ? _b : {})[f] !== undefined; });
210
+ record("".concat(variant, " \u2014 7b: refresh response withholds patient fields"), refreshed.status === 200 && leaked.length === 0, leaked.length ? "leaked: ".concat(leaked.join(', ')) : 'no patient fields in payload');
211
+ refreshedToken = (_w = refreshed.body) === null || _w === void 0 ? void 0 : _w.authToken;
212
+ if (!(typeof refreshedToken === 'string' && refreshedToken)) return [3 /*break*/, 12];
213
+ _s = p;
214
+ _t = ['8a: refreshed token still cannot download another file', 403];
215
+ return [4 /*yield*/, probe('get', '/file-download-URL', {
216
+ token: refreshedToken, params: { secureName: fileB_1.secureName },
217
+ })];
218
+ case 10:
219
+ _s.apply(void 0, _t.concat([_x.sent()]));
220
+ _u = p;
221
+ _v = ['8b: refreshed token still cannot update the patient', 403];
222
+ return [4 /*yield*/, probe('patch', "/enduser/".concat(enduser_1.id), {
223
+ token: refreshedToken, data: { updates: { fname: 'Overwritten' } },
224
+ })];
225
+ case 11:
226
+ _u.apply(void 0, _v.concat([_x.sent()]));
227
+ return [3 /*break*/, 13];
228
+ case 12:
229
+ record("".concat(variant, " \u2014 8: refreshed token available"), false, 'refresh returned no authToken');
230
+ _x.label = 13;
231
+ case 13: return [2 /*return*/];
232
+ }
233
+ });
234
+ }); };
235
+ return [4 /*yield*/, mint('link')];
236
+ case 7:
237
+ plain = _b.sent();
238
+ if (!plain.token) return [3 /*break*/, 9];
239
+ return [4 /*yield*/, confinement_probes('link', plain.token)];
240
+ case 8:
241
+ _b.sent();
242
+ return [3 /*break*/, 10];
243
+ case 9:
244
+ record('link — minted', false, plain.detail);
245
+ _b.label = 10;
246
+ case 10: return [4 /*yield*/, mint('shared-link')];
247
+ case 11:
248
+ shared = _b.sent();
249
+ if (!shared.token) return [3 /*break*/, 13];
250
+ return [4 /*yield*/, confinement_probes('shared-link', shared.token)];
251
+ case 12:
252
+ _b.sent();
253
+ return [3 /*break*/, 14];
254
+ case 13:
255
+ // Before the shared-link verb exists the merge field does not resolve. Record it and skip the
256
+ // shared probes rather than throwing, so the first run reports the whole picture at once.
257
+ record('shared-link — minted', false, shared.detail);
258
+ _b.label = 14;
259
+ case 14:
260
+ if (!shared.token) return [3 /*break*/, 19];
261
+ return [4 /*yield*/, probe('get', '/endusers/otp-methods', { params: { token: shared.token } })];
262
+ case 15:
263
+ methods = _b.sent();
264
+ record('shared-link — 9: OTP methods are not offered', methods.status === 403, "status ".concat(methods.status, " (expected 403)"));
265
+ return [4 /*yield*/, probe('post', '/endusers/send-otp-code', {
266
+ data: { token: shared.token, method: 'email' },
267
+ })];
268
+ case 16:
269
+ send = _b.sent();
270
+ record('shared-link — 10: cannot make us send the patient a login code', send.status === 403, "status ".concat(send.status, " (expected 403)"));
271
+ return [4 /*yield*/, probe('post', '/endusers/verify-otp-code', {
272
+ data: { token: shared.token, code: '000000' },
273
+ })];
274
+ case 17:
275
+ verify = _b.sent();
276
+ record('shared-link — 11: OTP verification refuses the scope before checking the code', verify.status === 403, "status ".concat(verify.status, " (expected 403, 400 = reached the code check)"));
277
+ _a = shared.token.split('.'), header = _a[0], payload = _a[1];
278
+ decoded = JSON.parse(Buffer.from(payload, 'base64url').toString());
279
+ delete decoded.sessionScopes;
280
+ delete decoded.scopeContext;
281
+ forged = [
282
+ header,
283
+ Buffer.from(JSON.stringify(decoded)).toString('base64url'),
284
+ 'not-a-real-signature',
285
+ ].join('.');
286
+ return [4 /*yield*/, probe('post', '/endusers/send-otp-code', {
287
+ data: { token: forged, method: 'email' },
288
+ })];
289
+ case 18:
290
+ forgedSend = _b.sent();
291
+ record('shared-link — 12: a forged token cannot strip the scope to unlock OTP', forgedSend.status === 403 || forgedSend.status === 401 || forgedSend.status === 404, "status ".concat(forgedSend.status, " (expected 401/403/404; 204 = signature never verified)"));
292
+ _b.label = 19;
293
+ case 19:
294
+ if (!plain.token) return [3 /*break*/, 21];
295
+ return [4 /*yield*/, probe('post', '/endusers/send-otp-code', {
296
+ data: { token: plain.token, method: 'email' },
297
+ })];
298
+ case 20:
299
+ send = _b.sent();
300
+ record('link — 13: patient OTP recovery still works', send.status === 204, "status ".concat(send.status, " (expected 204)"));
301
+ _b.label = 21;
302
+ case 21: return [3 /*break*/, 27];
303
+ case 22:
304
+ if (!tenant) return [3 /*break*/, 26];
305
+ _b.label = 23;
306
+ case 23:
307
+ _b.trys.push([23, 25, , 26]);
308
+ return [4 /*yield*/, tenant.teardown()];
309
+ case 24:
310
+ _b.sent();
311
+ return [3 /*break*/, 26];
312
+ case 25:
313
+ e_1 = _b.sent();
314
+ console.error('teardown failed', e_1);
315
+ return [3 /*break*/, 26];
316
+ case 26: return [7 /*endfinally*/];
317
+ case 27: return [2 /*return*/, checks];
318
+ }
319
+ });
320
+ }); };
321
+ /** Asserting wrapper, for standalone runs and for sequential use in the suite. */
322
+ export var file_link_session_confinement_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
323
+ var _a, _b;
324
+ return __generator(this, function (_c) {
325
+ switch (_c.label) {
326
+ case 0:
327
+ _a = assert_checks;
328
+ _b = ['Shared file link session confinement'];
329
+ return [4 /*yield*/, file_link_session_confinement_checks()];
330
+ case 1:
331
+ _a.apply(void 0, _b.concat([_c.sent()]));
332
+ return [2 /*return*/];
333
+ }
334
+ });
335
+ }); };
336
+ // Allow running this test file independently
337
+ if (require.main === module) {
338
+ console.log("\uD83C\uDF10 Using API URL: ".concat(host));
339
+ file_link_session_confinement_tests()
340
+ .then(function () {
341
+ console.log("✅ file link session confinement test suite completed successfully");
342
+ process.exit(0);
343
+ })
344
+ .catch(function (error) {
345
+ console.error("❌ file link session confinement test suite failed:", error);
346
+ process.exit(1);
347
+ });
348
+ }
349
+ //# sourceMappingURL=file-link-session-confinement.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-link-session-confinement.test.js","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/file-link-session-confinement.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Check } from "../../setup_isolated";
2
+ /**
3
+ * Regression test: `$JS(...)` must be rejected in stored conditional logic.
4
+ *
5
+ * `responses_satisfy_conditions` (utilities/src/utils.ts) compiled a stored condition value of the
6
+ * form `$JS(...)` with `new Function()` and executed it — in every form-filler's browser, including
7
+ * anonymous visitors on public intake pages, AND inside the API process (automation_triggers.ts
8
+ * trigger matching on every form submission, ai_agent/form_filling.ts voice-agent navigation). The
9
+ * API process holds every tenant's database handle, so a condition authored by staff in one tenant
10
+ * reached all of them. Any staff user or API key with form_fields write access could plant one by
11
+ * typing into the free-text $gt/$lt box — no API call required.
12
+ *
13
+ * The sink is removed. This asserts the second half of the fix: `compoundFilterValidator` rejects the
14
+ * syntax at write time on every field that feeds that evaluator, so it cannot be reintroduced through
15
+ * stored configuration. The runtime half — that a `$JS` value is never evaluated — is covered by the
16
+ * pure-function cases in `form_conditional_logic_tests` in tests.ts.
17
+ *
18
+ * The five condition locations were established by enumerating every `responses_satisfy_conditions`
19
+ * call site, and all five are covered here. That completeness matters: the first run of this test
20
+ * caught a half fix. `event.conditions` is wrapped in an `orValidator`, which returns the first arm
21
+ * that does not throw, and its permissive `optional: optionalAnyObjectValidator` arm was declared
22
+ * before the guarded one — so the payload was accepted and stored even though the validator had been
23
+ * swapped. Pointing a field at the guard is not the same as the guard being reachable, which is why
24
+ * every location gets an assertion rather than an argument.
25
+ *
26
+ * Each rejection is paired with a positive control using the same shape without `$JS(`, so a passing
27
+ * test cannot be explained by the write failing for an unrelated reason.
28
+ */
29
+ export declare const form_logic_js_execution_checks: () => Promise<Check[]>;
30
+ /** Asserting wrapper, for standalone runs and for sequential use in the suite. */
31
+ export declare const form_logic_js_execution_tests: () => Promise<void>;
32
+ //# sourceMappingURL=form-logic-js-execution.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-logic-js-execution.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/form-logic-js-execution.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,EAEN,MAAM,sBAAsB,CAAA;AAM7B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,8BAA8B,QAAa,QAAQ,KAAK,EAAE,CA4HtE,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,6BAA6B,qBAEzC,CAAA"}