@tellescope/sdk 1.256.16 → 2.0.0-beta.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 (290) hide show
  1. package/CLAUDE.md +5 -0
  2. package/env.example +39 -0
  3. package/lib/cjs/enduser.d.ts +1 -0
  4. package/lib/cjs/enduser.d.ts.map +1 -1
  5. package/lib/cjs/sdk.d.ts +3 -1
  6. package/lib/cjs/sdk.d.ts.map +1 -1
  7. package/lib/cjs/sdk.js +1 -0
  8. package/lib/cjs/sdk.js.map +1 -1
  9. package/lib/cjs/session.d.ts +1 -0
  10. package/lib/cjs/session.d.ts.map +1 -1
  11. package/lib/cjs/tests/api_tests/active_patient_count.test.js +1 -1
  12. package/lib/cjs/tests/api_tests/active_patient_count.test.js.map +1 -1
  13. package/lib/cjs/tests/api_tests/appointment_rescheduled_trigger.test.js +1 -1
  14. package/lib/cjs/tests/api_tests/appointment_rescheduled_trigger.test.js.map +1 -1
  15. package/lib/cjs/tests/api_tests/calendar_event_limits.test.js +5 -5
  16. package/lib/cjs/tests/api_tests/calendar_event_limits.test.js.map +1 -1
  17. package/lib/cjs/tests/api_tests/calendar_event_references_update.test.js +1 -1
  18. package/lib/cjs/tests/api_tests/calendar_event_references_update.test.js.map +1 -1
  19. package/lib/cjs/tests/api_tests/enduser_cross_access_isolation.test.js +1 -1
  20. package/lib/cjs/tests/api_tests/enduser_cross_access_isolation.test.js.map +1 -1
  21. package/lib/cjs/tests/api_tests/enduser_fields_sync.test.d.ts +21 -0
  22. package/lib/cjs/tests/api_tests/enduser_fields_sync.test.d.ts.map +1 -0
  23. package/lib/cjs/tests/api_tests/enduser_fields_sync.test.js +215 -0
  24. package/lib/cjs/tests/api_tests/enduser_fields_sync.test.js.map +1 -0
  25. package/lib/cjs/tests/api_tests/enduser_login_rate_limits.test.js +6 -6
  26. package/lib/cjs/tests/api_tests/enduser_login_rate_limits.test.js.map +1 -1
  27. package/lib/cjs/tests/api_tests/enduser_session_invalidation.test.js +3 -3
  28. package/lib/cjs/tests/api_tests/enduser_session_invalidation.test.js.map +1 -1
  29. package/lib/cjs/tests/api_tests/load_threads_care_team.test.d.ts +32 -0
  30. package/lib/cjs/tests/api_tests/load_threads_care_team.test.d.ts.map +1 -0
  31. package/lib/cjs/tests/api_tests/load_threads_care_team.test.js +257 -0
  32. package/lib/cjs/tests/api_tests/load_threads_care_team.test.js.map +1 -0
  33. package/lib/cjs/tests/api_tests/managed_content_enduser_access.test.js +1 -1
  34. package/lib/cjs/tests/api_tests/managed_content_enduser_access.test.js.map +1 -1
  35. package/lib/cjs/tests/api_tests/managed_content_file_access.test.js +1 -1
  36. package/lib/cjs/tests/api_tests/managed_content_file_access.test.js.map +1 -1
  37. package/lib/cjs/tests/api_tests/mdi_webhooks.test.d.ts.map +1 -1
  38. package/lib/cjs/tests/api_tests/mdi_webhooks.test.js +21 -8
  39. package/lib/cjs/tests/api_tests/mdi_webhooks.test.js.map +1 -1
  40. package/lib/cjs/tests/api_tests/nutrition_tracking.test.js +1 -1
  41. package/lib/cjs/tests/api_tests/nutrition_tracking.test.js.map +1 -1
  42. package/lib/cjs/tests/api_tests/openloop_webhooks.test.js +1 -1
  43. package/lib/cjs/tests/api_tests/openloop_webhooks.test.js.map +1 -1
  44. package/lib/cjs/tests/api_tests/programs.test.d.ts +5 -0
  45. package/lib/cjs/tests/api_tests/programs.test.d.ts.map +1 -0
  46. package/lib/cjs/tests/api_tests/programs.test.js +370 -0
  47. package/lib/cjs/tests/api_tests/programs.test.js.map +1 -0
  48. package/lib/cjs/tests/api_tests/programs_trigger_filters.test.d.ts +5 -0
  49. package/lib/cjs/tests/api_tests/programs_trigger_filters.test.d.ts.map +1 -0
  50. package/lib/cjs/tests/api_tests/programs_trigger_filters.test.js +295 -0
  51. package/lib/cjs/tests/api_tests/programs_trigger_filters.test.js.map +1 -0
  52. package/lib/cjs/tests/api_tests/security/allowed-paths-confinement.test.js +1 -1
  53. package/lib/cjs/tests/api_tests/security/allowed-paths-confinement.test.js.map +1 -1
  54. package/lib/cjs/tests/api_tests/security/appointment-reschedule-ownership.test.d.ts +42 -0
  55. package/lib/cjs/tests/api_tests/security/appointment-reschedule-ownership.test.d.ts.map +1 -0
  56. package/lib/cjs/tests/api_tests/security/appointment-reschedule-ownership.test.js +484 -0
  57. package/lib/cjs/tests/api_tests/security/appointment-reschedule-ownership.test.js.map +1 -0
  58. package/lib/cjs/tests/api_tests/security/booking-info-idor-token-mint.test.js +1 -1
  59. package/lib/cjs/tests/api_tests/security/booking-info-idor-token-mint.test.js.map +1 -1
  60. package/lib/cjs/tests/api_tests/security/enduser-ai-summary-trust-gate.test.js +1 -1
  61. package/lib/cjs/tests/api_tests/security/enduser-ai-summary-trust-gate.test.js.map +1 -1
  62. package/lib/cjs/tests/api_tests/security/enduser-cross-create.test.js +1 -1
  63. package/lib/cjs/tests/api_tests/security/enduser-cross-create.test.js.map +1 -1
  64. package/lib/cjs/tests/api_tests/security/enduser-write-restrictions.test.js +1 -1
  65. package/lib/cjs/tests/api_tests/security/enduser-write-restrictions.test.js.map +1 -1
  66. package/lib/cjs/tests/api_tests/security/invite-user-enumeration.test.js +2 -2
  67. package/lib/cjs/tests/api_tests/security/invite-user-enumeration.test.js.map +1 -1
  68. package/lib/cjs/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.d.ts +32 -0
  69. package/lib/cjs/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.d.ts.map +1 -0
  70. package/lib/cjs/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.js +297 -0
  71. package/lib/cjs/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.js.map +1 -0
  72. package/lib/cjs/tests/api_tests/security/sanitize-user-html-with-iframes.test.d.ts.map +1 -1
  73. package/lib/cjs/tests/api_tests/security/sanitize-user-html-with-iframes.test.js +4 -1
  74. package/lib/cjs/tests/api_tests/security/sanitize-user-html-with-iframes.test.js.map +1 -1
  75. package/lib/cjs/tests/api_tests/templated_message_date_fields.test.d.ts +3 -0
  76. package/lib/cjs/tests/api_tests/templated_message_date_fields.test.d.ts.map +1 -0
  77. package/lib/cjs/tests/api_tests/templated_message_date_fields.test.js +202 -0
  78. package/lib/cjs/tests/api_tests/templated_message_date_fields.test.js.map +1 -0
  79. package/lib/cjs/tests/api_tests/templated_message_link_in_href.test.d.ts +3 -0
  80. package/lib/cjs/tests/api_tests/templated_message_link_in_href.test.d.ts.map +1 -0
  81. package/lib/cjs/tests/api_tests/templated_message_link_in_href.test.js +233 -0
  82. package/lib/cjs/tests/api_tests/templated_message_link_in_href.test.js.map +1 -0
  83. package/lib/cjs/tests/api_tests/templated_message_links.test.d.ts +3 -0
  84. package/lib/cjs/tests/api_tests/templated_message_links.test.d.ts.map +1 -0
  85. package/lib/cjs/tests/api_tests/templated_message_links.test.js +235 -0
  86. package/lib/cjs/tests/api_tests/templated_message_links.test.js.map +1 -0
  87. package/lib/cjs/tests/api_tests/time_tracks.test.js +1 -1
  88. package/lib/cjs/tests/api_tests/time_tracks.test.js.map +1 -1
  89. package/lib/cjs/tests/api_tests/trigger_contains_matching.test.d.ts +5 -0
  90. package/lib/cjs/tests/api_tests/trigger_contains_matching.test.d.ts.map +1 -0
  91. package/lib/cjs/tests/api_tests/trigger_contains_matching.test.js +395 -0
  92. package/lib/cjs/tests/api_tests/trigger_contains_matching.test.js.map +1 -0
  93. package/lib/cjs/tests/api_tests/user_logs_restore_deleted.test.d.ts +5 -0
  94. package/lib/cjs/tests/api_tests/user_logs_restore_deleted.test.d.ts.map +1 -0
  95. package/lib/cjs/tests/api_tests/user_logs_restore_deleted.test.js +471 -0
  96. package/lib/cjs/tests/api_tests/user_logs_restore_deleted.test.js.map +1 -0
  97. package/lib/cjs/tests/api_tests/user_portal_settings.test.js +1 -1
  98. package/lib/cjs/tests/api_tests/user_portal_settings.test.js.map +1 -1
  99. package/lib/cjs/tests/api_tests/validation_behavior_locks.test.d.ts +2 -0
  100. package/lib/cjs/tests/api_tests/validation_behavior_locks.test.d.ts.map +1 -0
  101. package/lib/cjs/tests/api_tests/validation_behavior_locks.test.js +233 -0
  102. package/lib/cjs/tests/api_tests/validation_behavior_locks.test.js.map +1 -0
  103. package/lib/cjs/tests/api_tests/vital_review_trigger_action.test.d.ts +5 -0
  104. package/lib/cjs/tests/api_tests/vital_review_trigger_action.test.d.ts.map +1 -0
  105. package/lib/cjs/tests/api_tests/vital_review_trigger_action.test.js +569 -0
  106. package/lib/cjs/tests/api_tests/vital_review_trigger_action.test.js.map +1 -0
  107. package/lib/cjs/tests/public_endpoint_tests.js +3 -2
  108. package/lib/cjs/tests/public_endpoint_tests.js.map +1 -1
  109. package/lib/cjs/tests/setup.d.ts +16 -0
  110. package/lib/cjs/tests/setup.d.ts.map +1 -1
  111. package/lib/cjs/tests/setup.js +55 -8
  112. package/lib/cjs/tests/setup.js.map +1 -1
  113. package/lib/cjs/tests/setup_isolated.d.ts +9 -0
  114. package/lib/cjs/tests/setup_isolated.d.ts.map +1 -1
  115. package/lib/cjs/tests/setup_isolated.js +23 -2
  116. package/lib/cjs/tests/setup_isolated.js.map +1 -1
  117. package/lib/cjs/tests/socket_tests.d.ts.map +1 -1
  118. package/lib/cjs/tests/socket_tests.js +3 -2
  119. package/lib/cjs/tests/socket_tests.js.map +1 -1
  120. package/lib/cjs/tests/tests.d.ts.map +1 -1
  121. package/lib/cjs/tests/tests.js +180 -166
  122. package/lib/cjs/tests/tests.js.map +1 -1
  123. package/lib/cjs/tests/unit_tests/trigger_title_partials.test.d.ts +3 -0
  124. package/lib/cjs/tests/unit_tests/trigger_title_partials.test.d.ts.map +1 -0
  125. package/lib/cjs/tests/unit_tests/trigger_title_partials.test.js +118 -0
  126. package/lib/cjs/tests/unit_tests/trigger_title_partials.test.js.map +1 -0
  127. package/lib/cjs/tests/webhooks_tests.js +3 -2
  128. package/lib/cjs/tests/webhooks_tests.js.map +1 -1
  129. package/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  130. package/lib/esm/enduser.d.ts +2 -0
  131. package/lib/esm/enduser.d.ts.map +1 -1
  132. package/lib/esm/sdk.d.ts +6 -3
  133. package/lib/esm/sdk.d.ts.map +1 -1
  134. package/lib/esm/sdk.js +1 -0
  135. package/lib/esm/sdk.js.map +1 -1
  136. package/lib/esm/session.d.ts +2 -0
  137. package/lib/esm/session.d.ts.map +1 -1
  138. package/lib/esm/tests/api_tests/active_patient_count.test.js +1 -1
  139. package/lib/esm/tests/api_tests/active_patient_count.test.js.map +1 -1
  140. package/lib/esm/tests/api_tests/appointment_rescheduled_trigger.test.js +1 -1
  141. package/lib/esm/tests/api_tests/appointment_rescheduled_trigger.test.js.map +1 -1
  142. package/lib/esm/tests/api_tests/calendar_event_limits.test.js +5 -5
  143. package/lib/esm/tests/api_tests/calendar_event_limits.test.js.map +1 -1
  144. package/lib/esm/tests/api_tests/calendar_event_references_update.test.js +1 -1
  145. package/lib/esm/tests/api_tests/calendar_event_references_update.test.js.map +1 -1
  146. package/lib/esm/tests/api_tests/enduser_cross_access_isolation.test.js +1 -1
  147. package/lib/esm/tests/api_tests/enduser_cross_access_isolation.test.js.map +1 -1
  148. package/lib/esm/tests/api_tests/enduser_fields_sync.test.d.ts +21 -0
  149. package/lib/esm/tests/api_tests/enduser_fields_sync.test.d.ts.map +1 -0
  150. package/lib/esm/tests/api_tests/enduser_fields_sync.test.js +210 -0
  151. package/lib/esm/tests/api_tests/enduser_fields_sync.test.js.map +1 -0
  152. package/lib/esm/tests/api_tests/enduser_login_rate_limits.test.js +7 -7
  153. package/lib/esm/tests/api_tests/enduser_login_rate_limits.test.js.map +1 -1
  154. package/lib/esm/tests/api_tests/enduser_session_invalidation.test.js +4 -4
  155. package/lib/esm/tests/api_tests/enduser_session_invalidation.test.js.map +1 -1
  156. package/lib/esm/tests/api_tests/load_threads_care_team.test.d.ts +32 -0
  157. package/lib/esm/tests/api_tests/load_threads_care_team.test.d.ts.map +1 -0
  158. package/lib/esm/tests/api_tests/load_threads_care_team.test.js +252 -0
  159. package/lib/esm/tests/api_tests/load_threads_care_team.test.js.map +1 -0
  160. package/lib/esm/tests/api_tests/managed_content_enduser_access.test.js +1 -1
  161. package/lib/esm/tests/api_tests/managed_content_enduser_access.test.js.map +1 -1
  162. package/lib/esm/tests/api_tests/managed_content_file_access.test.js +1 -1
  163. package/lib/esm/tests/api_tests/managed_content_file_access.test.js.map +1 -1
  164. package/lib/esm/tests/api_tests/mdi_webhooks.test.d.ts.map +1 -1
  165. package/lib/esm/tests/api_tests/mdi_webhooks.test.js +21 -8
  166. package/lib/esm/tests/api_tests/mdi_webhooks.test.js.map +1 -1
  167. package/lib/esm/tests/api_tests/nutrition_tracking.test.js +1 -1
  168. package/lib/esm/tests/api_tests/nutrition_tracking.test.js.map +1 -1
  169. package/lib/esm/tests/api_tests/openloop_webhooks.test.js +1 -1
  170. package/lib/esm/tests/api_tests/openloop_webhooks.test.js.map +1 -1
  171. package/lib/esm/tests/api_tests/programs.test.d.ts +5 -0
  172. package/lib/esm/tests/api_tests/programs.test.d.ts.map +1 -0
  173. package/lib/esm/tests/api_tests/programs.test.js +365 -0
  174. package/lib/esm/tests/api_tests/programs.test.js.map +1 -0
  175. package/lib/esm/tests/api_tests/programs_trigger_filters.test.d.ts +5 -0
  176. package/lib/esm/tests/api_tests/programs_trigger_filters.test.d.ts.map +1 -0
  177. package/lib/esm/tests/api_tests/programs_trigger_filters.test.js +290 -0
  178. package/lib/esm/tests/api_tests/programs_trigger_filters.test.js.map +1 -0
  179. package/lib/esm/tests/api_tests/security/allowed-paths-confinement.test.js +1 -1
  180. package/lib/esm/tests/api_tests/security/allowed-paths-confinement.test.js.map +1 -1
  181. package/lib/esm/tests/api_tests/security/appointment-reschedule-ownership.test.d.ts +42 -0
  182. package/lib/esm/tests/api_tests/security/appointment-reschedule-ownership.test.d.ts.map +1 -0
  183. package/lib/esm/tests/api_tests/security/appointment-reschedule-ownership.test.js +479 -0
  184. package/lib/esm/tests/api_tests/security/appointment-reschedule-ownership.test.js.map +1 -0
  185. package/lib/esm/tests/api_tests/security/booking-info-idor-token-mint.test.js +1 -1
  186. package/lib/esm/tests/api_tests/security/booking-info-idor-token-mint.test.js.map +1 -1
  187. package/lib/esm/tests/api_tests/security/enduser-ai-summary-trust-gate.test.js +1 -1
  188. package/lib/esm/tests/api_tests/security/enduser-ai-summary-trust-gate.test.js.map +1 -1
  189. package/lib/esm/tests/api_tests/security/enduser-cross-create.test.js +1 -1
  190. package/lib/esm/tests/api_tests/security/enduser-cross-create.test.js.map +1 -1
  191. package/lib/esm/tests/api_tests/security/enduser-write-restrictions.test.js +1 -1
  192. package/lib/esm/tests/api_tests/security/enduser-write-restrictions.test.js.map +1 -1
  193. package/lib/esm/tests/api_tests/security/invite-user-enumeration.test.js +3 -3
  194. package/lib/esm/tests/api_tests/security/invite-user-enumeration.test.js.map +1 -1
  195. package/lib/esm/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.d.ts +32 -0
  196. package/lib/esm/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.d.ts.map +1 -0
  197. package/lib/esm/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.js +292 -0
  198. package/lib/esm/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.js.map +1 -0
  199. package/lib/esm/tests/api_tests/security/sanitize-user-html-with-iframes.test.d.ts.map +1 -1
  200. package/lib/esm/tests/api_tests/security/sanitize-user-html-with-iframes.test.js +4 -1
  201. package/lib/esm/tests/api_tests/security/sanitize-user-html-with-iframes.test.js.map +1 -1
  202. package/lib/esm/tests/api_tests/templated_message_date_fields.test.d.ts +3 -0
  203. package/lib/esm/tests/api_tests/templated_message_date_fields.test.d.ts.map +1 -0
  204. package/lib/esm/tests/api_tests/templated_message_date_fields.test.js +198 -0
  205. package/lib/esm/tests/api_tests/templated_message_date_fields.test.js.map +1 -0
  206. package/lib/esm/tests/api_tests/templated_message_link_in_href.test.d.ts +3 -0
  207. package/lib/esm/tests/api_tests/templated_message_link_in_href.test.d.ts.map +1 -0
  208. package/lib/esm/tests/api_tests/templated_message_link_in_href.test.js +229 -0
  209. package/lib/esm/tests/api_tests/templated_message_link_in_href.test.js.map +1 -0
  210. package/lib/esm/tests/api_tests/templated_message_links.test.d.ts +3 -0
  211. package/lib/esm/tests/api_tests/templated_message_links.test.d.ts.map +1 -0
  212. package/lib/esm/tests/api_tests/templated_message_links.test.js +231 -0
  213. package/lib/esm/tests/api_tests/templated_message_links.test.js.map +1 -0
  214. package/lib/esm/tests/api_tests/time_tracks.test.js +1 -1
  215. package/lib/esm/tests/api_tests/time_tracks.test.js.map +1 -1
  216. package/lib/esm/tests/api_tests/trigger_contains_matching.test.d.ts +5 -0
  217. package/lib/esm/tests/api_tests/trigger_contains_matching.test.d.ts.map +1 -0
  218. package/lib/esm/tests/api_tests/trigger_contains_matching.test.js +390 -0
  219. package/lib/esm/tests/api_tests/trigger_contains_matching.test.js.map +1 -0
  220. package/lib/esm/tests/api_tests/user_logs_restore_deleted.test.d.ts +5 -0
  221. package/lib/esm/tests/api_tests/user_logs_restore_deleted.test.d.ts.map +1 -0
  222. package/lib/esm/tests/api_tests/user_logs_restore_deleted.test.js +466 -0
  223. package/lib/esm/tests/api_tests/user_logs_restore_deleted.test.js.map +1 -0
  224. package/lib/esm/tests/api_tests/user_portal_settings.test.js +1 -1
  225. package/lib/esm/tests/api_tests/user_portal_settings.test.js.map +1 -1
  226. package/lib/esm/tests/api_tests/validation_behavior_locks.test.d.ts +2 -0
  227. package/lib/esm/tests/api_tests/validation_behavior_locks.test.d.ts.map +1 -0
  228. package/lib/esm/tests/api_tests/validation_behavior_locks.test.js +229 -0
  229. package/lib/esm/tests/api_tests/validation_behavior_locks.test.js.map +1 -0
  230. package/lib/esm/tests/api_tests/vital_review_trigger_action.test.d.ts +5 -0
  231. package/lib/esm/tests/api_tests/vital_review_trigger_action.test.d.ts.map +1 -0
  232. package/lib/esm/tests/api_tests/vital_review_trigger_action.test.js +564 -0
  233. package/lib/esm/tests/api_tests/vital_review_trigger_action.test.js.map +1 -0
  234. package/lib/esm/tests/public_endpoint_tests.js +3 -2
  235. package/lib/esm/tests/public_endpoint_tests.js.map +1 -1
  236. package/lib/esm/tests/setup.d.ts +16 -0
  237. package/lib/esm/tests/setup.d.ts.map +1 -1
  238. package/lib/esm/tests/setup.js +53 -7
  239. package/lib/esm/tests/setup.js.map +1 -1
  240. package/lib/esm/tests/setup_isolated.d.ts +9 -0
  241. package/lib/esm/tests/setup_isolated.d.ts.map +1 -1
  242. package/lib/esm/tests/setup_isolated.js +21 -1
  243. package/lib/esm/tests/setup_isolated.js.map +1 -1
  244. package/lib/esm/tests/socket_tests.d.ts.map +1 -1
  245. package/lib/esm/tests/socket_tests.js +3 -2
  246. package/lib/esm/tests/socket_tests.js.map +1 -1
  247. package/lib/esm/tests/tests.d.ts.map +1 -1
  248. package/lib/esm/tests/tests.js +180 -166
  249. package/lib/esm/tests/tests.js.map +1 -1
  250. package/lib/esm/tests/unit_tests/trigger_title_partials.test.d.ts +3 -0
  251. package/lib/esm/tests/unit_tests/trigger_title_partials.test.d.ts.map +1 -0
  252. package/lib/esm/tests/unit_tests/trigger_title_partials.test.js +115 -0
  253. package/lib/esm/tests/unit_tests/trigger_title_partials.test.js.map +1 -0
  254. package/lib/esm/tests/webhooks_tests.js +3 -2
  255. package/lib/esm/tests/webhooks_tests.js.map +1 -1
  256. package/lib/tsconfig.tsbuildinfo +1 -1
  257. package/package.json +22 -19
  258. package/src/sdk.ts +5 -1
  259. package/src/tests/api_tests/active_patient_count.test.ts +1 -1
  260. package/src/tests/api_tests/appointment_rescheduled_trigger.test.ts +1 -1
  261. package/src/tests/api_tests/calendar_event_references_update.test.ts +1 -1
  262. package/src/tests/api_tests/enduser_cross_access_isolation.test.ts +1 -1
  263. package/src/tests/api_tests/enduser_login_rate_limits.test.ts +7 -7
  264. package/src/tests/api_tests/enduser_session_invalidation.test.ts +4 -4
  265. package/src/tests/api_tests/managed_content_enduser_access.test.ts +1 -1
  266. package/src/tests/api_tests/managed_content_file_access.test.ts +1 -1
  267. package/src/tests/api_tests/mdi_webhooks.test.ts +9 -0
  268. package/src/tests/api_tests/nutrition_tracking.test.ts +1 -1
  269. package/src/tests/api_tests/openloop_webhooks.test.ts +1 -1
  270. package/src/tests/api_tests/security/allowed-paths-confinement.test.ts +1 -1
  271. package/src/tests/api_tests/security/booking-info-idor-token-mint.test.ts +1 -1
  272. package/src/tests/api_tests/security/enduser-ai-summary-trust-gate.test.ts +1 -1
  273. package/src/tests/api_tests/security/enduser-cross-create.test.ts +1 -1
  274. package/src/tests/api_tests/security/enduser-write-restrictions.test.ts +1 -1
  275. package/src/tests/api_tests/security/invite-user-enumeration.test.ts +3 -3
  276. package/src/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.ts +197 -0
  277. package/src/tests/api_tests/security/sanitize-user-html-with-iframes.test.ts +4 -1
  278. package/src/tests/api_tests/templated_message_date_fields.test.ts +146 -0
  279. package/src/tests/api_tests/templated_message_links.test.ts +192 -0
  280. package/src/tests/api_tests/time_tracks.test.ts +1 -1
  281. package/src/tests/api_tests/user_portal_settings.test.ts +1 -1
  282. package/src/tests/api_tests/validation_behavior_locks.test.ts +204 -0
  283. package/src/tests/public_endpoint_tests.ts +3 -2
  284. package/src/tests/setup.ts +43 -7
  285. package/src/tests/setup_isolated.ts +10 -0
  286. package/src/tests/socket_tests.ts +3 -2
  287. package/src/tests/tests.ts +10 -2
  288. package/src/tests/webhooks_tests.ts +4 -2
  289. package/test_generated.pdf +0 -0
  290. package/tsconfig.cjs.json +17 -0
@@ -0,0 +1,564 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ 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;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ require('source-map-support').install();
49
+ import { SYSTEM_REVIEWER_ID } from "@tellescope/constants";
50
+ import { assert_checks, setup_isolated_tenant, } from "../setup_isolated";
51
+ var host = process.env.API_URL || 'http://localhost:8080';
52
+ var RAND = function () { return Math.random().toString(36).slice(2, 10); };
53
+ /**
54
+ * Coverage for the "Review Vital Reading" automation trigger action, and — because the same change
55
+ * carved that action out of two shared dedupe mechanisms — for the dedupe mechanisms themselves.
56
+ *
57
+ * The action marks the reading in `journeyContext.observationId` as reviewed
58
+ * (`reviewedAt` + `reviewedBy = SYSTEM_REVIEWER_ID`), so a trigger's own gating (programs, enduser
59
+ * conditions, active hours) can decide what auto-reviews. Only the Vital Update event supplies an
60
+ * observationId, so the pairing is enforced by a schema relationship constraint.
61
+ *
62
+ * To be useful it has to run for EVERY matching reading, which means opting out of both things that
63
+ * normally collapse repeat fires:
64
+ * 1. the 60s `throttled_events` window, one fire per (trigger, enduser) — automation_triggers.ts
65
+ * 2. the per-batch `enduserIdTriggerTracker`, one fire per (trigger, enduser) per create batch,
66
+ * which a blood pressure reading trips because it creates SBP + DBP together — vitals.ts
67
+ *
68
+ * Both carve-outs are qualified by action type, and both live on code paths every other trigger
69
+ * shares. Checks G-I are the regression half of this suite: they pin that the ordinary behavior is
70
+ * unchanged for other actions and other events. Nothing else in the repo asserts trigger
71
+ * throttling — every other trigger suite is written to avoid it (one enduser per case) rather than
72
+ * to test it — so if these go, the platform-wide throttle has no coverage at all.
73
+ *
74
+ * This suite provisions its own throwaway tenant. That is not optional: `vital_configurations` are
75
+ * business-wide (handle_vital_create reads them with `enduserId: { $exists: false }` across the
76
+ * businessId), so on the shared fixture these configurations would classify other concurrently
77
+ * running suites' readings and theirs would bleed into these checks. It never calls `sdk.reset_db()`,
78
+ * which clears global throttle namespaces shared with other suites — which would be especially
79
+ * destructive here, where the throttle is the thing under test.
80
+ *
81
+ * Checks are separated by vital unit rather than by name, because a configuration applies to every
82
+ * reading of its unit across the tenant.
83
+ *
84
+ * Synchronization. Classification and trigger actions are asynchronous create side effects, so every
85
+ * read polls.
86
+ * - Positive checks poll directly on the condition they assert, which is sound on its own.
87
+ * - Negative checks ("this did NOT fire") need a barrier, or they would pass by reading too early.
88
+ * Two are used. Where a control trigger fires on the same reading, it is created AFTER the
89
+ * trigger under test so it runs last within `triggersForClassification` (the same ordering
90
+ * programs.test.ts relies on). Where the control would itself be throttled, the barrier is a
91
+ * Review Vital Reading trigger instead — it is throttle-exempt by construction, so its effect
92
+ * landing proves the later reading was processed.
93
+ */
94
+ var poll_for = function (get, done, attempts) {
95
+ if (attempts === void 0) { attempts = 20; }
96
+ return __awaiter(void 0, void 0, void 0, function () {
97
+ var value, i;
98
+ return __generator(this, function (_a) {
99
+ switch (_a.label) {
100
+ case 0: return [4 /*yield*/, get()];
101
+ case 1:
102
+ value = _a.sent();
103
+ i = 0;
104
+ _a.label = 2;
105
+ case 2:
106
+ if (!(i < attempts && !done(value))) return [3 /*break*/, 6];
107
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 250); })];
108
+ case 3:
109
+ _a.sent();
110
+ return [4 /*yield*/, get()];
111
+ case 4:
112
+ value = _a.sent();
113
+ _a.label = 5;
114
+ case 5:
115
+ i++;
116
+ return [3 /*break*/, 2];
117
+ case 6: return [2 /*return*/, value];
118
+ }
119
+ });
120
+ });
121
+ };
122
+ export var vital_review_trigger_action_checks = function () { return __awaiter(void 0, void 0, void 0, function () {
123
+ var checks, record, tenant, sdk_1, high_configuration, new_enduser, add_reading, is_system_reviewed_1, glucoseConfiguration, matchingEnduser, matchingReading_1, reviewedMatching, otherClassEnduser_1, otherClassReading, afterOtherClass, PRE_REVIEWED_AT, preReviewedEnduser_1, preReviewedReading, afterPreReviewed, sbpConfiguration, dbpConfiguration, bpEnduser, bpReadings, bpIds_1, bpAfter, bpmConfiguration, burstEnduser, burstFirst_1, burstSecond_1, burstSecondAfter, createError, err_1, validTrigger, updateError, err_2, afterUpdate, o2Configuration, o2Enduser_1, o2Second_1, o2After, feEnduser_1, feBarrierEnduser_1, feAfter, NOTIFICATION_TYPE_1, a1cConfiguration, flowConfiguration, batchEnduser, load_notifications, notifications, e_1;
124
+ var _a, _b, _c, _d;
125
+ return __generator(this, function (_e) {
126
+ switch (_e.label) {
127
+ case 0:
128
+ checks = [];
129
+ record = function (label, pass, detail) { return checks.push({ label: label, pass: pass, detail: detail }); };
130
+ _e.label = 1;
131
+ case 1:
132
+ _e.trys.push([1, , 68, 73]);
133
+ return [4 /*yield*/, setup_isolated_tenant({
134
+ name: "VitalReviewAction ".concat(RAND()),
135
+ users: [{ isAdmin: true }],
136
+ apiKeys: 0,
137
+ })];
138
+ case 2:
139
+ tenant = _e.sent();
140
+ sdk_1 = tenant.sdk;
141
+ high_configuration = function (unit, over) { return sdk_1.api.vital_configurations.createOne({
142
+ title: "Review action ".concat(unit, " ").concat(RAND()),
143
+ unit: unit,
144
+ ranges: [{ classification: 'High', comparison: { type: 'Greater Than', value: over } }],
145
+ }); };
146
+ new_enduser = function (label) { return sdk_1.api.endusers.createOne({ fname: 'Review', lname: label }); };
147
+ add_reading = function (enduserId, unit, value, extra) {
148
+ if (extra === void 0) { extra = {}; }
149
+ return (sdk_1.api.enduser_observations.createOne(__assign({ category: 'vital-signs', status: 'final', enduserId: enduserId, measurement: { unit: unit, value: value }, timestamp: new Date() }, extra)));
150
+ };
151
+ is_system_reviewed_1 = function (o) { return (!!o.reviewedAt && o.reviewedBy === SYSTEM_REVIEWER_ID); };
152
+ return [4 /*yield*/, sdk_1.api.vital_configurations.createOne({
153
+ title: "Review action glucose ".concat(RAND()),
154
+ unit: 'mg/dL',
155
+ ranges: [
156
+ { classification: 'High', comparison: { type: 'Greater Than', value: 200 } },
157
+ { classification: 'Low', comparison: { type: 'Less Than', value: 50 } },
158
+ ],
159
+ })
160
+ // created FIRST, so the control trigger below runs after it on the same reading
161
+ ];
162
+ case 3:
163
+ glucoseConfiguration = _e.sent();
164
+ // created FIRST, so the control trigger below runs after it on the same reading
165
+ return [4 /*yield*/, sdk_1.api.automation_triggers.createOne({
166
+ title: "Review High glucose ".concat(RAND()),
167
+ status: 'Active',
168
+ event: {
169
+ type: 'Vital Update',
170
+ info: { configurationIds: [glucoseConfiguration.id], classifications: ['High'] },
171
+ },
172
+ action: { type: 'Review Vital Reading', info: {} },
173
+ })
174
+ // control/barrier: matches both classifications, so its tag marks "this reading was processed"
175
+ ];
176
+ case 4:
177
+ // created FIRST, so the control trigger below runs after it on the same reading
178
+ _e.sent();
179
+ // control/barrier: matches both classifications, so its tag marks "this reading was processed"
180
+ return [4 /*yield*/, sdk_1.api.automation_triggers.createOne({
181
+ title: "Glucose processed marker ".concat(RAND()),
182
+ status: 'Active',
183
+ event: {
184
+ type: 'Vital Update',
185
+ info: { configurationIds: [glucoseConfiguration.id], classifications: ['High', 'Low'] },
186
+ },
187
+ action: { type: 'Add Tags', info: { tags: ['glucose-processed'] } },
188
+ })];
189
+ case 5:
190
+ // control/barrier: matches both classifications, so its tag marks "this reading was processed"
191
+ _e.sent();
192
+ return [4 /*yield*/, new_enduser('Matching')];
193
+ case 6:
194
+ matchingEnduser = _e.sent();
195
+ return [4 /*yield*/, add_reading(matchingEnduser.id, 'mg/dL', 250)]; // High
196
+ case 7:
197
+ matchingReading_1 = _e.sent() // High
198
+ ;
199
+ return [4 /*yield*/, poll_for(function () { return sdk_1.api.enduser_observations.getOne(matchingReading_1.id); }, is_system_reviewed_1)];
200
+ case 8:
201
+ reviewedMatching = _e.sent();
202
+ record('A: Review Vital Reading marks the reading that fired the trigger as system-reviewed', is_system_reviewed_1(reviewedMatching), "reviewedAt=".concat(JSON.stringify(reviewedMatching.reviewedAt), " reviewedBy=").concat(JSON.stringify(reviewedMatching.reviewedBy)));
203
+ return [4 /*yield*/, new_enduser('OtherClass')];
204
+ case 9:
205
+ otherClassEnduser_1 = _e.sent();
206
+ return [4 /*yield*/, add_reading(otherClassEnduser_1.id, 'mg/dL', 10)]; // Low
207
+ case 10:
208
+ otherClassReading = _e.sent() // Low
209
+ ;
210
+ return [4 /*yield*/, poll_for(function () { return sdk_1.api.endusers.getOne(otherClassEnduser_1.id); }, function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('glucose-processed')); })];
211
+ case 11:
212
+ _e.sent();
213
+ return [4 /*yield*/, sdk_1.api.enduser_observations.getOne(otherClassReading.id)];
214
+ case 12:
215
+ afterOtherClass = _e.sent();
216
+ record('D: a reading whose classification the trigger does not match is left unreviewed', !afterOtherClass.reviewedAt, "reviewedAt=".concat(JSON.stringify(afterOtherClass.reviewedAt))
217
+ + " (barrier tag seen, so the reading was processed)");
218
+ PRE_REVIEWED_AT = new Date('2020-01-02T03:04:05.000Z');
219
+ return [4 /*yield*/, new_enduser('PreReviewed')];
220
+ case 13:
221
+ preReviewedEnduser_1 = _e.sent();
222
+ return [4 /*yield*/, add_reading(preReviewedEnduser_1.id, 'mg/dL', 250, { reviewedAt: PRE_REVIEWED_AT })];
223
+ case 14:
224
+ preReviewedReading = _e.sent();
225
+ return [4 /*yield*/, poll_for(function () { return sdk_1.api.endusers.getOne(preReviewedEnduser_1.id); }, function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('glucose-processed')); })];
226
+ case 15:
227
+ _e.sent();
228
+ return [4 /*yield*/, sdk_1.api.enduser_observations.getOne(preReviewedReading.id)];
229
+ case 16:
230
+ afterPreReviewed = _e.sent();
231
+ record('E: an already-reviewed reading is not re-stamped', !!afterPreReviewed.reviewedAt
232
+ && new Date(afterPreReviewed.reviewedAt).getTime() === PRE_REVIEWED_AT.getTime()
233
+ && afterPreReviewed.reviewedBy !== SYSTEM_REVIEWER_ID, "reviewedAt=".concat(JSON.stringify(afterPreReviewed.reviewedAt), " (want ").concat(PRE_REVIEWED_AT.toISOString(), ")")
234
+ + " reviewedBy=".concat(JSON.stringify(afterPreReviewed.reviewedBy)));
235
+ return [4 /*yield*/, high_configuration('SBP', 200)];
236
+ case 17:
237
+ sbpConfiguration = _e.sent();
238
+ return [4 /*yield*/, high_configuration('DBP', 120)];
239
+ case 18:
240
+ dbpConfiguration = _e.sent();
241
+ return [4 /*yield*/, sdk_1.api.automation_triggers.createOne({
242
+ title: "Review High BP ".concat(RAND()),
243
+ status: 'Active',
244
+ event: {
245
+ type: 'Vital Update',
246
+ info: {
247
+ configurationIds: [sbpConfiguration.id, dbpConfiguration.id],
248
+ classifications: ['High'],
249
+ },
250
+ },
251
+ action: { type: 'Review Vital Reading', info: {} },
252
+ })
253
+ // one blood pressure reading = two observations in ONE create batch for ONE enduser, which is
254
+ // exactly what the per-batch tracker would otherwise collapse to a single fire
255
+ ];
256
+ case 19:
257
+ _e.sent();
258
+ return [4 /*yield*/, new_enduser('BloodPressure')];
259
+ case 20:
260
+ bpEnduser = _e.sent();
261
+ return [4 /*yield*/, sdk_1.api.enduser_observations.createSome([
262
+ {
263
+ category: 'vital-signs', status: 'final', enduserId: bpEnduser.id,
264
+ measurement: { unit: 'SBP', value: 250 }, timestamp: new Date(),
265
+ },
266
+ {
267
+ category: 'vital-signs', status: 'final', enduserId: bpEnduser.id,
268
+ measurement: { unit: 'DBP', value: 150 }, timestamp: new Date(),
269
+ },
270
+ ])];
271
+ case 21:
272
+ bpReadings = _e.sent();
273
+ bpIds_1 = bpReadings.created.map(function (o) { return o.id; });
274
+ return [4 /*yield*/, poll_for(function () { return Promise.all(bpIds_1.map(function (id) { return sdk_1.api.enduser_observations.getOne(id); })); }, function (os) { return os.every(is_system_reviewed_1); })];
275
+ case 22:
276
+ bpAfter = _e.sent();
277
+ record('B: both observations of a two-component reading created in one batch are reviewed', bpAfter.length === 2 && bpAfter.every(is_system_reviewed_1), bpAfter.map(function (o) { var _a; return "".concat(o.measurement.unit, ":").concat((_a = o.reviewedBy) !== null && _a !== void 0 ? _a : 'unreviewed'); }).join(' '));
278
+ return [4 /*yield*/, high_configuration('BPM', 150)];
279
+ case 23:
280
+ bpmConfiguration = _e.sent();
281
+ return [4 /*yield*/, sdk_1.api.automation_triggers.createOne({
282
+ title: "Review High BPM ".concat(RAND()),
283
+ status: 'Active',
284
+ event: {
285
+ type: 'Vital Update',
286
+ info: { configurationIds: [bpmConfiguration.id], classifications: ['High'] },
287
+ },
288
+ action: { type: 'Review Vital Reading', info: {} },
289
+ })
290
+ // Same enduser, same trigger, well inside the 60s window that would normally swallow the second.
291
+ // The second reading is only created once the first has been reviewed: the throttle record is
292
+ // written at the END of the fire it belongs to, so two readings posted back to back race it and
293
+ // both get through even with the carve-out removed. Waiting makes the second fire genuinely
294
+ // throttle-eligible, which is what gives this check its teeth.
295
+ ];
296
+ case 24:
297
+ _e.sent();
298
+ return [4 /*yield*/, new_enduser('Burst')];
299
+ case 25:
300
+ burstEnduser = _e.sent();
301
+ return [4 /*yield*/, add_reading(burstEnduser.id, 'BPM', 180)];
302
+ case 26:
303
+ burstFirst_1 = _e.sent();
304
+ return [4 /*yield*/, poll_for(function () { return sdk_1.api.enduser_observations.getOne(burstFirst_1.id); }, is_system_reviewed_1)];
305
+ case 27:
306
+ _e.sent();
307
+ return [4 /*yield*/, add_reading(burstEnduser.id, 'BPM', 190)];
308
+ case 28:
309
+ burstSecond_1 = _e.sent();
310
+ return [4 /*yield*/, poll_for(function () { return sdk_1.api.enduser_observations.getOne(burstSecond_1.id); }, is_system_reviewed_1)];
311
+ case 29:
312
+ burstSecondAfter = _e.sent();
313
+ record('C: a second reading inside the 60s window is still reviewed (throttle-exempt action)', is_system_reviewed_1(burstSecondAfter), "second reading reviewedBy=".concat(JSON.stringify(burstSecondAfter.reviewedBy))
314
+ + " (first reading was already reviewed, so the throttle record existed)");
315
+ createError = '';
316
+ _e.label = 30;
317
+ case 30:
318
+ _e.trys.push([30, 32, , 33]);
319
+ return [4 /*yield*/, sdk_1.api.automation_triggers.createOne({
320
+ title: "Review action wrong event ".concat(RAND()),
321
+ status: 'Active',
322
+ event: { type: 'Field Equals', info: { field: '0', value: 'anything' } },
323
+ action: { type: 'Review Vital Reading', info: {} },
324
+ })];
325
+ case 31:
326
+ _e.sent();
327
+ return [3 /*break*/, 33];
328
+ case 32:
329
+ err_1 = _e.sent();
330
+ createError = (_a = err_1 === null || err_1 === void 0 ? void 0 : err_1.message) !== null && _a !== void 0 ? _a : String(err_1);
331
+ return [3 /*break*/, 33];
332
+ case 33:
333
+ record('F: creating a Review Vital Reading trigger on a non-Vital Update event is rejected', createError.includes('Review Vital Reading') && createError.includes('Vital Update'), "error=".concat(JSON.stringify(createError) || '(none — the trigger was ACCEPTED)'));
334
+ return [4 /*yield*/, sdk_1.api.automation_triggers.createOne({
335
+ title: "Review action valid, to be broken ".concat(RAND()),
336
+ status: 'Active',
337
+ event: {
338
+ type: 'Vital Update',
339
+ info: { configurationIds: [bpmConfiguration.id], classifications: ['Critical High'] },
340
+ },
341
+ action: { type: 'Review Vital Reading', info: {} },
342
+ })];
343
+ case 34:
344
+ validTrigger = _e.sent();
345
+ updateError = '';
346
+ _e.label = 35;
347
+ case 35:
348
+ _e.trys.push([35, 37, , 38]);
349
+ return [4 /*yield*/, sdk_1.api.automation_triggers.updateOne(validTrigger.id, {
350
+ event: { type: 'Field Equals', info: { field: '0', value: 'anything' } },
351
+ })];
352
+ case 36:
353
+ _e.sent();
354
+ return [3 /*break*/, 38];
355
+ case 37:
356
+ err_2 = _e.sent();
357
+ updateError = (_b = err_2 === null || err_2 === void 0 ? void 0 : err_2.message) !== null && _b !== void 0 ? _b : String(err_2);
358
+ return [3 /*break*/, 38];
359
+ case 38: return [4 /*yield*/, sdk_1.api.automation_triggers.getOne(validTrigger.id)];
360
+ case 39:
361
+ afterUpdate = _e.sent();
362
+ record('F2: switching an existing Review Vital Reading trigger to a non-Vital Update event is rejected', updateError.includes('Review Vital Reading') && afterUpdate.event.type === 'Vital Update', "error=".concat(JSON.stringify(updateError) || '(none — the update was ACCEPTED)')
363
+ + " event=".concat(afterUpdate.event.type));
364
+ return [4 /*yield*/, high_configuration('O2 Sat%', 90)];
365
+ case 40:
366
+ o2Configuration = _e.sent();
367
+ return [4 /*yield*/, sdk_1.api.automation_triggers.createOne({
368
+ title: "O2 alert ".concat(RAND()),
369
+ status: 'Active',
370
+ event: {
371
+ type: 'Vital Update',
372
+ info: { configurationIds: [o2Configuration.id], classifications: ['High'] },
373
+ },
374
+ action: { type: 'Add Tags', info: { tags: ['o2-alert'] } },
375
+ })
376
+ // barrier for the second reading: throttle-exempt by construction, so its effect landing proves
377
+ // the reading was processed and the missing tag is a throttle, not a race
378
+ ];
379
+ case 41:
380
+ _e.sent();
381
+ // barrier for the second reading: throttle-exempt by construction, so its effect landing proves
382
+ // the reading was processed and the missing tag is a throttle, not a race
383
+ return [4 /*yield*/, sdk_1.api.automation_triggers.createOne({
384
+ title: "O2 review barrier ".concat(RAND()),
385
+ status: 'Active',
386
+ event: {
387
+ type: 'Vital Update',
388
+ info: { configurationIds: [o2Configuration.id], classifications: ['High'] },
389
+ },
390
+ action: { type: 'Review Vital Reading', info: {} },
391
+ })];
392
+ case 42:
393
+ // barrier for the second reading: throttle-exempt by construction, so its effect landing proves
394
+ // the reading was processed and the missing tag is a throttle, not a race
395
+ _e.sent();
396
+ return [4 /*yield*/, new_enduser('Oxygen')];
397
+ case 43:
398
+ o2Enduser_1 = _e.sent();
399
+ return [4 /*yield*/, add_reading(o2Enduser_1.id, 'O2 Sat%', 95)];
400
+ case 44:
401
+ _e.sent();
402
+ return [4 /*yield*/, poll_for(function () { return sdk_1.api.endusers.getOne(o2Enduser_1.id); }, function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('o2-alert')); })];
403
+ case 45:
404
+ _e.sent();
405
+ return [4 /*yield*/, sdk_1.api.endusers.updateOne(o2Enduser_1.id, { tags: [] }, { replaceObjectFields: true })];
406
+ case 46:
407
+ _e.sent();
408
+ return [4 /*yield*/, add_reading(o2Enduser_1.id, 'O2 Sat%', 97)];
409
+ case 47:
410
+ o2Second_1 = _e.sent();
411
+ return [4 /*yield*/, poll_for(function () { return sdk_1.api.enduser_observations.getOne(o2Second_1.id); }, is_system_reviewed_1)];
412
+ case 48:
413
+ _e.sent();
414
+ return [4 /*yield*/, sdk_1.api.endusers.getOne(o2Enduser_1.id)];
415
+ case 49:
416
+ o2After = _e.sent();
417
+ record('G: the 60s throttle still applies to a Vital Update trigger with an ordinary action', !((_c = o2After.tags) === null || _c === void 0 ? void 0 : _c.includes('o2-alert')), "tags=".concat(JSON.stringify(o2After.tags))
418
+ + " (the second reading was reviewed, so it was processed)");
419
+ // H. the throttle still applies to an entirely different event type. The carve-out lives in
420
+ // handle_actions_for_triggers_inner, which every trigger event shares.
421
+ return [4 /*yield*/, sdk_1.api.automation_triggers.createOne({
422
+ title: "Field equals throttle ".concat(RAND()),
423
+ status: 'Active',
424
+ event: { type: 'Field Equals', info: { field: '0', value: 'throttle-test' } },
425
+ action: { type: 'Add Tags', info: { tags: ['fe-fired'] } },
426
+ })];
427
+ case 50:
428
+ // H. the throttle still applies to an entirely different event type. The carve-out lives in
429
+ // handle_actions_for_triggers_inner, which every trigger event shares.
430
+ _e.sent();
431
+ return [4 /*yield*/, new_enduser('FieldEquals')];
432
+ case 51:
433
+ feEnduser_1 = _e.sent();
434
+ return [4 /*yield*/, sdk_1.api.endusers.updateOne(feEnduser_1.id, { fields: { '0': 'throttle-test' } })];
435
+ case 52:
436
+ _e.sent();
437
+ return [4 /*yield*/, poll_for(function () { return sdk_1.api.endusers.getOne(feEnduser_1.id); }, function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('fe-fired')); })];
438
+ case 53:
439
+ _e.sent();
440
+ return [4 /*yield*/, sdk_1.api.endusers.updateOne(feEnduser_1.id, { tags: [] }, { replaceObjectFields: true })];
441
+ case 54:
442
+ _e.sent();
443
+ return [4 /*yield*/, sdk_1.api.endusers.updateOne(feEnduser_1.id, { fields: { '0': 'something-else' } })];
444
+ case 55:
445
+ _e.sent();
446
+ return [4 /*yield*/, sdk_1.api.endusers.updateOne(feEnduser_1.id, { fields: { '0': 'throttle-test' } })
447
+ // barrier: the same trigger on a DIFFERENT enduser has no throttle record, so its tag landing
448
+ // shows the trigger is processing updates made after the throttled one
449
+ ];
450
+ case 56:
451
+ _e.sent();
452
+ return [4 /*yield*/, new_enduser('FieldEqualsBarrier')];
453
+ case 57:
454
+ feBarrierEnduser_1 = _e.sent();
455
+ return [4 /*yield*/, sdk_1.api.endusers.updateOne(feBarrierEnduser_1.id, { fields: { '0': 'throttle-test' } })];
456
+ case 58:
457
+ _e.sent();
458
+ return [4 /*yield*/, poll_for(function () { return sdk_1.api.endusers.getOne(feBarrierEnduser_1.id); }, function (e) { var _a; return !!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('fe-fired')); })];
459
+ case 59:
460
+ _e.sent();
461
+ return [4 /*yield*/, sdk_1.api.endusers.getOne(feEnduser_1.id)];
462
+ case 60:
463
+ feAfter = _e.sent();
464
+ record('H: the 60s throttle still applies to a non-vital event type (Field Equals)', !((_d = feAfter.tags) === null || _d === void 0 ? void 0 : _d.includes('fe-fired')), "tags=".concat(JSON.stringify(feAfter.tags))
465
+ + " (the same trigger fired for another enduser afterwards, so it was processing)");
466
+ NOTIFICATION_TYPE_1 = "review-tracker-".concat(RAND());
467
+ return [4 /*yield*/, high_configuration('A1C', 9)];
468
+ case 61:
469
+ a1cConfiguration = _e.sent();
470
+ return [4 /*yield*/, high_configuration('L/min', 300)];
471
+ case 62:
472
+ flowConfiguration = _e.sent();
473
+ return [4 /*yield*/, sdk_1.api.automation_triggers.createOne({
474
+ title: "Batch notification ".concat(RAND()),
475
+ status: 'Active',
476
+ event: {
477
+ type: 'Vital Update',
478
+ info: {
479
+ configurationIds: [a1cConfiguration.id, flowConfiguration.id],
480
+ classifications: ['High'],
481
+ },
482
+ },
483
+ action: {
484
+ type: 'Create User Notifications',
485
+ info: { message: 'Two readings arrived together', notificationType: NOTIFICATION_TYPE_1 },
486
+ },
487
+ })];
488
+ case 63:
489
+ _e.sent();
490
+ return [4 /*yield*/, new_enduser('BatchNotify')];
491
+ case 64:
492
+ batchEnduser = _e.sent();
493
+ return [4 /*yield*/, sdk_1.api.enduser_observations.createSome([
494
+ {
495
+ category: 'vital-signs', status: 'final', enduserId: batchEnduser.id,
496
+ measurement: { unit: 'A1C', value: 12 }, timestamp: new Date(),
497
+ },
498
+ {
499
+ category: 'vital-signs', status: 'final', enduserId: batchEnduser.id,
500
+ measurement: { unit: 'L/min', value: 400 }, timestamp: new Date(),
501
+ },
502
+ ])];
503
+ case 65:
504
+ _e.sent();
505
+ load_notifications = function () { return sdk_1.api.user_notifications.getSome({
506
+ filter: { type: NOTIFICATION_TYPE_1 },
507
+ }); };
508
+ return [4 /*yield*/, poll_for(load_notifications, function (n) { return n.length > 0; })
509
+ // keep polling past the first arrival, so a second fire would have time to show up
510
+ ];
511
+ case 66:
512
+ _e.sent();
513
+ return [4 /*yield*/, poll_for(load_notifications, function (n) { return n.length > 1; }, 8)];
514
+ case 67:
515
+ notifications = _e.sent();
516
+ record('I: the per-batch tracker still collapses other actions to one fire per batch', notifications.length === 1, "notifications=".concat(notifications.length, " (want 1, for a batch of 2 classifying readings)"));
517
+ return [3 /*break*/, 73];
518
+ case 68:
519
+ if (!tenant) return [3 /*break*/, 72];
520
+ _e.label = 69;
521
+ case 69:
522
+ _e.trys.push([69, 71, , 72]);
523
+ return [4 /*yield*/, tenant.teardown()];
524
+ case 70:
525
+ _e.sent();
526
+ return [3 /*break*/, 72];
527
+ case 71:
528
+ e_1 = _e.sent();
529
+ console.error('teardown failed', e_1);
530
+ return [3 /*break*/, 72];
531
+ case 72: return [7 /*endfinally*/];
532
+ case 73: return [2 /*return*/, checks];
533
+ }
534
+ });
535
+ }); };
536
+ /** Asserting wrapper, for standalone runs and for sequential use in the suite. */
537
+ export var vital_review_trigger_action_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
538
+ var _a, _b;
539
+ return __generator(this, function (_c) {
540
+ switch (_c.label) {
541
+ case 0:
542
+ _a = assert_checks;
543
+ _b = ['Review Vital Reading trigger action'];
544
+ return [4 /*yield*/, vital_review_trigger_action_checks()];
545
+ case 1:
546
+ _a.apply(void 0, _b.concat([_c.sent()]));
547
+ return [2 /*return*/];
548
+ }
549
+ });
550
+ }); };
551
+ // Allow running this test file independently
552
+ if (require.main === module) {
553
+ console.log("\uD83C\uDF10 Using API URL: ".concat(host));
554
+ vital_review_trigger_action_tests()
555
+ .then(function () {
556
+ console.log("✅ Review Vital Reading trigger action suite completed successfully");
557
+ process.exit(0);
558
+ })
559
+ .catch(function (error) {
560
+ console.error("❌ Review Vital Reading trigger action suite failed:", error);
561
+ process.exit(1);
562
+ });
563
+ }
564
+ //# sourceMappingURL=vital_review_trigger_action.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vital_review_trigger_action.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/vital_review_trigger_action.test.ts"],"names":[],"mappings":"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"}
@@ -37,13 +37,14 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
37
37
  import { async_test, log_header, } from "@tellescope/testing";
38
38
  import { Session, /* APIQuery */ } from "../sdk";
39
39
  import { PublicEndpoints } from "../public";
40
+ import { reset_test_tenant } from "./setup";
40
41
  var host = process.env.API_URL || 'http://localhost:8080';
41
42
  var _a = [process.env.TEST_EMAIL, process.env.TEST_PASSWORD], email = _a[0], password = _a[1];
42
43
  var sdk = new Session({ host: host });
43
44
  var sdkPub = PublicEndpoints({ host: host });
44
45
  if (!(email && password)) {
45
46
  console.error("Set TEST_EMAIL and TEST_PASSWORD");
46
- process.exit();
47
+ process.exit(1); // 1, not 0: an unconfigured run must not report success
47
48
  }
48
49
  var enduser_login_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
49
50
  var e, password, authToken;
@@ -91,7 +92,7 @@ var enduser_login_tests = function () { return __awaiter(void 0, void 0, void 0,
91
92
  return [4 /*yield*/, sdk.authenticate(email, password)];
92
93
  case 2:
93
94
  _a.sent();
94
- return [4 /*yield*/, sdk.reset_db()];
95
+ return [4 /*yield*/, reset_test_tenant(sdk)];
95
96
  case 3:
96
97
  _a.sent();
97
98
  return [4 /*yield*/, enduser_login_tests()];
@@ -1 +1 @@
1
- {"version":3,"file":"public_endpoint_tests.js","sourceRoot":"","sources":["../../../src/tests/public_endpoint_tests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"public_endpoint_tests.js","sourceRoot":"","sources":["../../../src/tests/public_endpoint_tests.ts"],"names":[],"mappings":"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"}