@tellescope/sdk 2.0.0-beta.1 → 2.0.0-beta.2

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/CLAUDE.md +24 -0
  2. package/env.example +6 -0
  3. package/lib/cjs/sdk.d.ts +373 -3
  4. package/lib/cjs/sdk.d.ts.map +1 -1
  5. package/lib/cjs/sdk.js.map +1 -1
  6. package/lib/cjs/tests/api_tests/booking_prevent_upcoming_duplicate.test.d.ts +22 -0
  7. package/lib/cjs/tests/api_tests/booking_prevent_upcoming_duplicate.test.d.ts.map +1 -0
  8. package/lib/cjs/tests/api_tests/booking_prevent_upcoming_duplicate.test.js +506 -0
  9. package/lib/cjs/tests/api_tests/booking_prevent_upcoming_duplicate.test.js.map +1 -0
  10. package/lib/cjs/tests/api_tests/enduser_fields_sync.test.d.ts +3 -1
  11. package/lib/cjs/tests/api_tests/enduser_fields_sync.test.d.ts.map +1 -1
  12. package/lib/cjs/tests/api_tests/enduser_fields_sync.test.js +3 -1
  13. package/lib/cjs/tests/api_tests/enduser_fields_sync.test.js.map +1 -1
  14. package/lib/cjs/tests/api_tests/enduser_observations_auto_review.test.d.ts +3 -1
  15. package/lib/cjs/tests/api_tests/enduser_observations_auto_review.test.d.ts.map +1 -1
  16. package/lib/cjs/tests/api_tests/enduser_observations_auto_review.test.js +3 -1
  17. package/lib/cjs/tests/api_tests/enduser_observations_auto_review.test.js.map +1 -1
  18. package/lib/cjs/tests/api_tests/form_vital_reading.test.d.ts +7 -0
  19. package/lib/cjs/tests/api_tests/form_vital_reading.test.d.ts.map +1 -0
  20. package/lib/cjs/tests/api_tests/form_vital_reading.test.js +461 -0
  21. package/lib/cjs/tests/api_tests/form_vital_reading.test.js.map +1 -0
  22. package/lib/cjs/tests/api_tests/journey_statistics_cache.test.d.ts +26 -0
  23. package/lib/cjs/tests/api_tests/journey_statistics_cache.test.d.ts.map +1 -0
  24. package/lib/cjs/tests/api_tests/journey_statistics_cache.test.js +232 -0
  25. package/lib/cjs/tests/api_tests/journey_statistics_cache.test.js.map +1 -0
  26. package/lib/cjs/tests/api_tests/journey_step_manual_count.test.d.ts +34 -0
  27. package/lib/cjs/tests/api_tests/journey_step_manual_count.test.d.ts.map +1 -0
  28. package/lib/cjs/tests/api_tests/journey_step_manual_count.test.js +243 -0
  29. package/lib/cjs/tests/api_tests/journey_step_manual_count.test.js.map +1 -0
  30. package/lib/cjs/tests/api_tests/load_threads_care_team.test.d.ts +3 -1
  31. package/lib/cjs/tests/api_tests/load_threads_care_team.test.d.ts.map +1 -1
  32. package/lib/cjs/tests/api_tests/load_threads_care_team.test.js +3 -1
  33. package/lib/cjs/tests/api_tests/load_threads_care_team.test.js.map +1 -1
  34. package/lib/cjs/tests/api_tests/organization_signup.test.d.ts +3 -1
  35. package/lib/cjs/tests/api_tests/organization_signup.test.d.ts.map +1 -1
  36. package/lib/cjs/tests/api_tests/organization_signup.test.js +3 -1
  37. package/lib/cjs/tests/api_tests/organization_signup.test.js.map +1 -1
  38. package/lib/cjs/tests/api_tests/phone_embed_leave_message.test.d.ts +7 -0
  39. package/lib/cjs/tests/api_tests/phone_embed_leave_message.test.d.ts.map +1 -0
  40. package/lib/cjs/tests/api_tests/phone_embed_leave_message.test.js +571 -0
  41. package/lib/cjs/tests/api_tests/phone_embed_leave_message.test.js.map +1 -0
  42. package/lib/cjs/tests/api_tests/programs.test.d.ts +3 -1
  43. package/lib/cjs/tests/api_tests/programs.test.d.ts.map +1 -1
  44. package/lib/cjs/tests/api_tests/programs.test.js +73 -17
  45. package/lib/cjs/tests/api_tests/programs.test.js.map +1 -1
  46. package/lib/cjs/tests/api_tests/public_form_case_insensitive_match.test.d.ts +7 -0
  47. package/lib/cjs/tests/api_tests/public_form_case_insensitive_match.test.d.ts.map +1 -0
  48. package/lib/cjs/tests/api_tests/public_form_case_insensitive_match.test.js +733 -0
  49. package/lib/cjs/tests/api_tests/public_form_case_insensitive_match.test.js.map +1 -0
  50. package/lib/cjs/tests/api_tests/security/add-to-journey-foreign-enduserid.test.d.ts +3 -1
  51. package/lib/cjs/tests/api_tests/security/add-to-journey-foreign-enduserid.test.d.ts.map +1 -1
  52. package/lib/cjs/tests/api_tests/security/add-to-journey-foreign-enduserid.test.js +3 -1
  53. package/lib/cjs/tests/api_tests/security/add-to-journey-foreign-enduserid.test.js.map +1 -1
  54. package/lib/cjs/tests/api_tests/security/appointment-reschedule-ownership.test.d.ts +3 -1
  55. package/lib/cjs/tests/api_tests/security/appointment-reschedule-ownership.test.d.ts.map +1 -1
  56. package/lib/cjs/tests/api_tests/security/appointment-reschedule-ownership.test.js +3 -1
  57. package/lib/cjs/tests/api_tests/security/appointment-reschedule-ownership.test.js.map +1 -1
  58. package/lib/cjs/tests/api_tests/security/file-link-session-confinement.test.d.ts +3 -1
  59. package/lib/cjs/tests/api_tests/security/file-link-session-confinement.test.d.ts.map +1 -1
  60. package/lib/cjs/tests/api_tests/security/file-link-session-confinement.test.js +3 -1
  61. package/lib/cjs/tests/api_tests/security/file-link-session-confinement.test.js.map +1 -1
  62. package/lib/cjs/tests/api_tests/security/form-logic-js-execution.test.d.ts +3 -1
  63. package/lib/cjs/tests/api_tests/security/form-logic-js-execution.test.d.ts.map +1 -1
  64. package/lib/cjs/tests/api_tests/security/form-logic-js-execution.test.js +3 -1
  65. package/lib/cjs/tests/api_tests/security/form-logic-js-execution.test.js.map +1 -1
  66. package/lib/cjs/tests/api_tests/security/formsort_webhook_auth_field_lock.test.d.ts.map +1 -1
  67. package/lib/cjs/tests/api_tests/security/formsort_webhook_auth_field_lock.test.js +424 -39
  68. package/lib/cjs/tests/api_tests/security/formsort_webhook_auth_field_lock.test.js.map +1 -1
  69. package/lib/cjs/tests/api_tests/security/register_business_id_injection.test.js +2 -2
  70. package/lib/cjs/tests/api_tests/security/register_business_id_injection.test.js.map +1 -1
  71. package/lib/cjs/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.d.ts +3 -1
  72. package/lib/cjs/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.d.ts.map +1 -1
  73. package/lib/cjs/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.js +3 -1
  74. package/lib/cjs/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.js.map +1 -1
  75. package/lib/cjs/tests/api_tests/session_for_join_link.test.d.ts +10 -0
  76. package/lib/cjs/tests/api_tests/session_for_join_link.test.d.ts.map +1 -0
  77. package/lib/cjs/tests/api_tests/session_for_join_link.test.js +147 -0
  78. package/lib/cjs/tests/api_tests/session_for_join_link.test.js.map +1 -0
  79. package/lib/cjs/tests/api_tests/set_fields_order_templates.test.d.ts.map +1 -1
  80. package/lib/cjs/tests/api_tests/set_fields_order_templates.test.js +191 -88
  81. package/lib/cjs/tests/api_tests/set_fields_order_templates.test.js.map +1 -1
  82. package/lib/cjs/tests/api_tests/stripe_checkout_items.test.d.ts +17 -0
  83. package/lib/cjs/tests/api_tests/stripe_checkout_items.test.d.ts.map +1 -0
  84. package/lib/cjs/tests/api_tests/stripe_checkout_items.test.js +219 -0
  85. package/lib/cjs/tests/api_tests/stripe_checkout_items.test.js.map +1 -0
  86. package/lib/cjs/tests/api_tests/stripe_multiple_customer_ids.test.d.ts +5 -0
  87. package/lib/cjs/tests/api_tests/stripe_multiple_customer_ids.test.d.ts.map +1 -0
  88. package/lib/cjs/tests/api_tests/stripe_multiple_customer_ids.test.js +396 -0
  89. package/lib/cjs/tests/api_tests/stripe_multiple_customer_ids.test.js.map +1 -0
  90. package/lib/cjs/tests/api_tests/tickets_bulk_assign_from_queue.test.d.ts +3 -1
  91. package/lib/cjs/tests/api_tests/tickets_bulk_assign_from_queue.test.d.ts.map +1 -1
  92. package/lib/cjs/tests/api_tests/tickets_bulk_assign_from_queue.test.js +3 -1
  93. package/lib/cjs/tests/api_tests/tickets_bulk_assign_from_queue.test.js.map +1 -1
  94. package/lib/cjs/tests/api_tests/totp_mfa.test.d.ts.map +1 -1
  95. package/lib/cjs/tests/api_tests/totp_mfa.test.js +37 -31
  96. package/lib/cjs/tests/api_tests/totp_mfa.test.js.map +1 -1
  97. package/lib/cjs/tests/api_tests/trigger_contains_matching.test.d.ts +3 -1
  98. package/lib/cjs/tests/api_tests/trigger_contains_matching.test.d.ts.map +1 -1
  99. package/lib/cjs/tests/api_tests/trigger_contains_matching.test.js +3 -1
  100. package/lib/cjs/tests/api_tests/trigger_contains_matching.test.js.map +1 -1
  101. package/lib/cjs/tests/api_tests/user_logs_restore_deleted.test.d.ts +3 -1
  102. package/lib/cjs/tests/api_tests/user_logs_restore_deleted.test.d.ts.map +1 -1
  103. package/lib/cjs/tests/api_tests/user_logs_restore_deleted.test.js +3 -1
  104. package/lib/cjs/tests/api_tests/user_logs_restore_deleted.test.js.map +1 -1
  105. package/lib/cjs/tests/api_tests/vital_review_trigger_action.test.d.ts +3 -1
  106. package/lib/cjs/tests/api_tests/vital_review_trigger_action.test.d.ts.map +1 -1
  107. package/lib/cjs/tests/api_tests/vital_review_trigger_action.test.js +3 -1
  108. package/lib/cjs/tests/api_tests/vital_review_trigger_action.test.js.map +1 -1
  109. package/lib/cjs/tests/api_tests/vitl_push.test.d.ts +7 -0
  110. package/lib/cjs/tests/api_tests/vitl_push.test.d.ts.map +1 -0
  111. package/lib/cjs/tests/api_tests/vitl_push.test.js +341 -0
  112. package/lib/cjs/tests/api_tests/vitl_push.test.js.map +1 -0
  113. package/lib/cjs/tests/setup_isolated.d.ts +48 -0
  114. package/lib/cjs/tests/setup_isolated.d.ts.map +1 -1
  115. package/lib/cjs/tests/setup_isolated.js +119 -1
  116. package/lib/cjs/tests/setup_isolated.js.map +1 -1
  117. package/lib/cjs/tests/tests.d.ts.map +1 -1
  118. package/lib/cjs/tests/tests.js +374 -292
  119. package/lib/cjs/tests/tests.js.map +1 -1
  120. package/lib/cjs/tests/unit_tests/isolated_suite_discovery.test.d.ts +2 -0
  121. package/lib/cjs/tests/unit_tests/isolated_suite_discovery.test.d.ts.map +1 -0
  122. package/lib/cjs/tests/unit_tests/isolated_suite_discovery.test.js +201 -0
  123. package/lib/cjs/tests/unit_tests/isolated_suite_discovery.test.js.map +1 -0
  124. package/lib/cjs/tests/unit_tests/programs_conditional_logic.test.d.ts +3 -0
  125. package/lib/cjs/tests/unit_tests/programs_conditional_logic.test.d.ts.map +1 -0
  126. package/lib/cjs/tests/unit_tests/programs_conditional_logic.test.js +120 -0
  127. package/lib/cjs/tests/unit_tests/programs_conditional_logic.test.js.map +1 -0
  128. package/lib/cjs/tests/webhooks_tests.js +44 -34
  129. package/lib/cjs/tests/webhooks_tests.js.map +1 -1
  130. package/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  131. package/lib/esm/sdk.d.ts +373 -3
  132. package/lib/esm/sdk.d.ts.map +1 -1
  133. package/lib/esm/sdk.js.map +1 -1
  134. package/lib/esm/tests/api_tests/booking_prevent_upcoming_duplicate.test.d.ts +22 -0
  135. package/lib/esm/tests/api_tests/booking_prevent_upcoming_duplicate.test.d.ts.map +1 -0
  136. package/lib/esm/tests/api_tests/booking_prevent_upcoming_duplicate.test.js +501 -0
  137. package/lib/esm/tests/api_tests/booking_prevent_upcoming_duplicate.test.js.map +1 -0
  138. package/lib/esm/tests/api_tests/enduser_fields_sync.test.d.ts +3 -1
  139. package/lib/esm/tests/api_tests/enduser_fields_sync.test.d.ts.map +1 -1
  140. package/lib/esm/tests/api_tests/enduser_fields_sync.test.js +2 -0
  141. package/lib/esm/tests/api_tests/enduser_fields_sync.test.js.map +1 -1
  142. package/lib/esm/tests/api_tests/enduser_observations_auto_review.test.d.ts +3 -1
  143. package/lib/esm/tests/api_tests/enduser_observations_auto_review.test.d.ts.map +1 -1
  144. package/lib/esm/tests/api_tests/enduser_observations_auto_review.test.js +2 -0
  145. package/lib/esm/tests/api_tests/enduser_observations_auto_review.test.js.map +1 -1
  146. package/lib/esm/tests/api_tests/form_vital_reading.test.d.ts +7 -0
  147. package/lib/esm/tests/api_tests/form_vital_reading.test.d.ts.map +1 -0
  148. package/lib/esm/tests/api_tests/form_vital_reading.test.js +456 -0
  149. package/lib/esm/tests/api_tests/form_vital_reading.test.js.map +1 -0
  150. package/lib/esm/tests/api_tests/journey_statistics_cache.test.d.ts +26 -0
  151. package/lib/esm/tests/api_tests/journey_statistics_cache.test.d.ts.map +1 -0
  152. package/lib/esm/tests/api_tests/journey_statistics_cache.test.js +227 -0
  153. package/lib/esm/tests/api_tests/journey_statistics_cache.test.js.map +1 -0
  154. package/lib/esm/tests/api_tests/journey_step_manual_count.test.d.ts +34 -0
  155. package/lib/esm/tests/api_tests/journey_step_manual_count.test.d.ts.map +1 -0
  156. package/lib/esm/tests/api_tests/journey_step_manual_count.test.js +238 -0
  157. package/lib/esm/tests/api_tests/journey_step_manual_count.test.js.map +1 -0
  158. package/lib/esm/tests/api_tests/load_threads_care_team.test.d.ts +3 -1
  159. package/lib/esm/tests/api_tests/load_threads_care_team.test.d.ts.map +1 -1
  160. package/lib/esm/tests/api_tests/load_threads_care_team.test.js +2 -0
  161. package/lib/esm/tests/api_tests/load_threads_care_team.test.js.map +1 -1
  162. package/lib/esm/tests/api_tests/organization_signup.test.d.ts +3 -1
  163. package/lib/esm/tests/api_tests/organization_signup.test.d.ts.map +1 -1
  164. package/lib/esm/tests/api_tests/organization_signup.test.js +2 -0
  165. package/lib/esm/tests/api_tests/organization_signup.test.js.map +1 -1
  166. package/lib/esm/tests/api_tests/phone_embed_leave_message.test.d.ts +7 -0
  167. package/lib/esm/tests/api_tests/phone_embed_leave_message.test.d.ts.map +1 -0
  168. package/lib/esm/tests/api_tests/phone_embed_leave_message.test.js +566 -0
  169. package/lib/esm/tests/api_tests/phone_embed_leave_message.test.js.map +1 -0
  170. package/lib/esm/tests/api_tests/programs.test.d.ts +3 -1
  171. package/lib/esm/tests/api_tests/programs.test.d.ts.map +1 -1
  172. package/lib/esm/tests/api_tests/programs.test.js +72 -16
  173. package/lib/esm/tests/api_tests/programs.test.js.map +1 -1
  174. package/lib/esm/tests/api_tests/public_form_case_insensitive_match.test.d.ts +7 -0
  175. package/lib/esm/tests/api_tests/public_form_case_insensitive_match.test.d.ts.map +1 -0
  176. package/lib/esm/tests/api_tests/public_form_case_insensitive_match.test.js +728 -0
  177. package/lib/esm/tests/api_tests/public_form_case_insensitive_match.test.js.map +1 -0
  178. package/lib/esm/tests/api_tests/security/add-to-journey-foreign-enduserid.test.d.ts +3 -1
  179. package/lib/esm/tests/api_tests/security/add-to-journey-foreign-enduserid.test.d.ts.map +1 -1
  180. package/lib/esm/tests/api_tests/security/add-to-journey-foreign-enduserid.test.js +2 -0
  181. package/lib/esm/tests/api_tests/security/add-to-journey-foreign-enduserid.test.js.map +1 -1
  182. package/lib/esm/tests/api_tests/security/appointment-reschedule-ownership.test.d.ts +3 -1
  183. package/lib/esm/tests/api_tests/security/appointment-reschedule-ownership.test.d.ts.map +1 -1
  184. package/lib/esm/tests/api_tests/security/appointment-reschedule-ownership.test.js +2 -0
  185. package/lib/esm/tests/api_tests/security/appointment-reschedule-ownership.test.js.map +1 -1
  186. package/lib/esm/tests/api_tests/security/file-link-session-confinement.test.d.ts +3 -1
  187. package/lib/esm/tests/api_tests/security/file-link-session-confinement.test.d.ts.map +1 -1
  188. package/lib/esm/tests/api_tests/security/file-link-session-confinement.test.js +2 -0
  189. package/lib/esm/tests/api_tests/security/file-link-session-confinement.test.js.map +1 -1
  190. package/lib/esm/tests/api_tests/security/form-logic-js-execution.test.d.ts +3 -1
  191. package/lib/esm/tests/api_tests/security/form-logic-js-execution.test.d.ts.map +1 -1
  192. package/lib/esm/tests/api_tests/security/form-logic-js-execution.test.js +2 -0
  193. package/lib/esm/tests/api_tests/security/form-logic-js-execution.test.js.map +1 -1
  194. package/lib/esm/tests/api_tests/security/formsort_webhook_auth_field_lock.test.d.ts.map +1 -1
  195. package/lib/esm/tests/api_tests/security/formsort_webhook_auth_field_lock.test.js +424 -39
  196. package/lib/esm/tests/api_tests/security/formsort_webhook_auth_field_lock.test.js.map +1 -1
  197. package/lib/esm/tests/api_tests/security/register_business_id_injection.test.js +2 -2
  198. package/lib/esm/tests/api_tests/security/register_business_id_injection.test.js.map +1 -1
  199. package/lib/esm/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.d.ts +3 -1
  200. package/lib/esm/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.d.ts.map +1 -1
  201. package/lib/esm/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.js +2 -0
  202. package/lib/esm/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.js.map +1 -1
  203. package/lib/esm/tests/api_tests/session_for_join_link.test.d.ts +10 -0
  204. package/lib/esm/tests/api_tests/session_for_join_link.test.d.ts.map +1 -0
  205. package/lib/esm/tests/api_tests/session_for_join_link.test.js +142 -0
  206. package/lib/esm/tests/api_tests/session_for_join_link.test.js.map +1 -0
  207. package/lib/esm/tests/api_tests/set_fields_order_templates.test.d.ts.map +1 -1
  208. package/lib/esm/tests/api_tests/set_fields_order_templates.test.js +191 -88
  209. package/lib/esm/tests/api_tests/set_fields_order_templates.test.js.map +1 -1
  210. package/lib/esm/tests/api_tests/stripe_checkout_items.test.d.ts +17 -0
  211. package/lib/esm/tests/api_tests/stripe_checkout_items.test.d.ts.map +1 -0
  212. package/lib/esm/tests/api_tests/stripe_checkout_items.test.js +214 -0
  213. package/lib/esm/tests/api_tests/stripe_checkout_items.test.js.map +1 -0
  214. package/lib/esm/tests/api_tests/stripe_multiple_customer_ids.test.d.ts +5 -0
  215. package/lib/esm/tests/api_tests/stripe_multiple_customer_ids.test.d.ts.map +1 -0
  216. package/lib/esm/tests/api_tests/stripe_multiple_customer_ids.test.js +388 -0
  217. package/lib/esm/tests/api_tests/stripe_multiple_customer_ids.test.js.map +1 -0
  218. package/lib/esm/tests/api_tests/tickets_bulk_assign_from_queue.test.d.ts +3 -1
  219. package/lib/esm/tests/api_tests/tickets_bulk_assign_from_queue.test.d.ts.map +1 -1
  220. package/lib/esm/tests/api_tests/tickets_bulk_assign_from_queue.test.js +2 -0
  221. package/lib/esm/tests/api_tests/tickets_bulk_assign_from_queue.test.js.map +1 -1
  222. package/lib/esm/tests/api_tests/totp_mfa.test.d.ts.map +1 -1
  223. package/lib/esm/tests/api_tests/totp_mfa.test.js +37 -31
  224. package/lib/esm/tests/api_tests/totp_mfa.test.js.map +1 -1
  225. package/lib/esm/tests/api_tests/trigger_contains_matching.test.d.ts +3 -1
  226. package/lib/esm/tests/api_tests/trigger_contains_matching.test.d.ts.map +1 -1
  227. package/lib/esm/tests/api_tests/trigger_contains_matching.test.js +2 -0
  228. package/lib/esm/tests/api_tests/trigger_contains_matching.test.js.map +1 -1
  229. package/lib/esm/tests/api_tests/user_logs_restore_deleted.test.d.ts +3 -1
  230. package/lib/esm/tests/api_tests/user_logs_restore_deleted.test.d.ts.map +1 -1
  231. package/lib/esm/tests/api_tests/user_logs_restore_deleted.test.js +2 -0
  232. package/lib/esm/tests/api_tests/user_logs_restore_deleted.test.js.map +1 -1
  233. package/lib/esm/tests/api_tests/vital_review_trigger_action.test.d.ts +3 -1
  234. package/lib/esm/tests/api_tests/vital_review_trigger_action.test.d.ts.map +1 -1
  235. package/lib/esm/tests/api_tests/vital_review_trigger_action.test.js +2 -0
  236. package/lib/esm/tests/api_tests/vital_review_trigger_action.test.js.map +1 -1
  237. package/lib/esm/tests/api_tests/vitl_push.test.d.ts +7 -0
  238. package/lib/esm/tests/api_tests/vitl_push.test.d.ts.map +1 -0
  239. package/lib/esm/tests/api_tests/vitl_push.test.js +333 -0
  240. package/lib/esm/tests/api_tests/vitl_push.test.js.map +1 -0
  241. package/lib/esm/tests/setup_isolated.d.ts +48 -0
  242. package/lib/esm/tests/setup_isolated.d.ts.map +1 -1
  243. package/lib/esm/tests/setup_isolated.js +114 -0
  244. package/lib/esm/tests/setup_isolated.js.map +1 -1
  245. package/lib/esm/tests/tests.d.ts.map +1 -1
  246. package/lib/esm/tests/tests.js +375 -293
  247. package/lib/esm/tests/tests.js.map +1 -1
  248. package/lib/esm/tests/unit_tests/isolated_suite_discovery.test.d.ts +2 -0
  249. package/lib/esm/tests/unit_tests/isolated_suite_discovery.test.d.ts.map +1 -0
  250. package/lib/esm/tests/unit_tests/isolated_suite_discovery.test.js +174 -0
  251. package/lib/esm/tests/unit_tests/isolated_suite_discovery.test.js.map +1 -0
  252. package/lib/esm/tests/unit_tests/programs_conditional_logic.test.d.ts +3 -0
  253. package/lib/esm/tests/unit_tests/programs_conditional_logic.test.d.ts.map +1 -0
  254. package/lib/esm/tests/unit_tests/programs_conditional_logic.test.js +117 -0
  255. package/lib/esm/tests/unit_tests/programs_conditional_logic.test.js.map +1 -0
  256. package/lib/esm/tests/webhooks_tests.js +44 -34
  257. package/lib/esm/tests/webhooks_tests.js.map +1 -1
  258. package/lib/tsconfig.tsbuildinfo +1 -1
  259. package/package.json +12 -11
  260. package/src/sdk.ts +3 -2
  261. package/src/tests/api_tests/booking_prevent_upcoming_duplicate.test.ts +541 -0
  262. package/src/tests/api_tests/enduser_fields_sync.test.ts +4 -0
  263. package/src/tests/api_tests/enduser_observations_auto_review.test.ts +4 -0
  264. package/src/tests/api_tests/form_vital_reading.test.ts +393 -0
  265. package/src/tests/api_tests/journey_statistics_cache.test.ts +237 -0
  266. package/src/tests/api_tests/journey_step_manual_count.test.ts +220 -0
  267. package/src/tests/api_tests/load_threads_care_team.test.ts +4 -0
  268. package/src/tests/api_tests/organization_signup.test.ts +4 -0
  269. package/src/tests/api_tests/phone_embed_leave_message.test.ts +541 -0
  270. package/src/tests/api_tests/programs.test.ts +351 -0
  271. package/src/tests/api_tests/public_form_case_insensitive_match.test.ts +632 -0
  272. package/src/tests/api_tests/security/add-to-journey-foreign-enduserid.test.ts +4 -0
  273. package/src/tests/api_tests/security/appointment-reschedule-ownership.test.ts +4 -0
  274. package/src/tests/api_tests/security/file-link-session-confinement.test.ts +4 -0
  275. package/src/tests/api_tests/security/form-logic-js-execution.test.ts +4 -0
  276. package/src/tests/api_tests/security/formsort_webhook_auth_field_lock.test.ts +225 -0
  277. package/src/tests/api_tests/security/register_business_id_injection.test.ts +2 -2
  278. package/src/tests/api_tests/security/rich-text-answer-sanitized-on-write.test.ts +4 -0
  279. package/src/tests/api_tests/session_for_join_link.test.ts +99 -0
  280. package/src/tests/api_tests/set_fields_order_templates.test.ts +94 -9
  281. package/src/tests/api_tests/stripe_checkout_items.test.ts +186 -0
  282. package/src/tests/api_tests/tickets_bulk_assign_from_queue.test.ts +4 -0
  283. package/src/tests/api_tests/totp_mfa.test.ts +10 -5
  284. package/src/tests/api_tests/trigger_contains_matching.test.ts +4 -0
  285. package/src/tests/api_tests/user_logs_restore_deleted.test.ts +4 -0
  286. package/src/tests/api_tests/vital_review_trigger_action.test.ts +455 -0
  287. package/src/tests/api_tests/vitl_push.test.ts +323 -0
  288. package/src/tests/setup_isolated.ts +140 -0
  289. package/src/tests/tests.ts +124 -30
  290. package/src/tests/unit_tests/isolated_suite_discovery.test.ts +178 -0
  291. package/src/tests/unit_tests/programs_conditional_logic.test.ts +189 -0
  292. package/src/tests/webhooks_tests.ts +6 -1
  293. package/test_generated.pdf +0 -0
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.ISOLATED_SUITE = exports.journey_statistics_cache_tests = exports.journey_statistics_cache_checks = void 0;
40
+ require('source-map-support').install();
41
+ var setup_isolated_1 = require("../setup_isolated");
42
+ var RAND = function () { return Math.random().toString(36).slice(2, 10); };
43
+ /**
44
+ * Coverage for the caching added to GET /v1/journeys/statistics.
45
+ *
46
+ * The aggregation behind this endpoint runs past the proxy's 30s socket timeout on large tenants,
47
+ * so the handler now stores each complete result in the `cache` collection and can serve it back
48
+ * without aggregating (`cachedOnly: true`). The editor paints the stored blob on mount and decides
49
+ * for itself when to rebuild.
50
+ *
51
+ * `setup_isolated` rather than the shared fixture because these checks assert on the COMPLETE
52
+ * per-step counts of a journey — on the shared org, other journey suites leave automated_actions
53
+ * behind and every "exactly these counts" assertion would be flaky. It also gives each run its own
54
+ * businessId, which is what the cache key is scoped by.
55
+ *
56
+ * automated_actions are created directly rather than by driving a real journey: the counts are what
57
+ * is under test, and seeding them makes the expected numbers exact and the test fast.
58
+ *
59
+ * The >30s path itself is not automatable here — it needs a tenant whose aggregation genuinely
60
+ * exceeds the proxy timeout. What IS covered is the contract the fix rests on: a non-cachedOnly
61
+ * call stores a blob, and a later cachedOnly call returns that same blob without recomputing.
62
+ */
63
+ var journey_statistics_cache_checks = function () { return __awaiter(void 0, void 0, void 0, function () {
64
+ var checks, record, tenant, sdk_1, sdkNonAdmin, _a, journey_1, uncachedJourney, step_1, enduser_1, seed, neverComputed, fresh, freshForStep, fromCache, stillUncached, rebuilt, afterRebuild, stepsOnly, stepsOnlyForStep, asNonAdmin, err_1;
65
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3;
66
+ return __generator(this, function (_4) {
67
+ switch (_4.label) {
68
+ case 0:
69
+ checks = [];
70
+ record = function (label, pass, detail) { return checks.push({ label: label, pass: pass, detail: detail }); };
71
+ _4.label = 1;
72
+ case 1:
73
+ _4.trys.push([1, 16, 17, 19]);
74
+ return [4 /*yield*/, (0, setup_isolated_1.setup_isolated_tenant)({
75
+ name: "JourneyStatisticsCache ".concat(RAND()),
76
+ users: [{ isAdmin: true }, { roles: ['Non-Admin'] }],
77
+ apiKeys: 0,
78
+ })];
79
+ case 2:
80
+ tenant = _4.sent();
81
+ sdk_1 = tenant.sdk, sdkNonAdmin = tenant.sdkNonAdmin;
82
+ return [4 /*yield*/, Promise.all([
83
+ sdk_1.api.journeys.createOne({ title: "Stats Cache ".concat(RAND()) }),
84
+ sdk_1.api.journeys.createOne({ title: "Never Computed ".concat(RAND()) }),
85
+ ])];
86
+ case 3:
87
+ _a = _4.sent(), journey_1 = _a[0], uncachedJourney = _a[1];
88
+ return [4 /*yield*/, sdk_1.api.automation_steps.createOne({
89
+ journeyId: journey_1.id,
90
+ action: { type: 'setEnduserStatus', info: { status: 'Cached Stats' } },
91
+ events: [{ type: 'onJourneyStart', info: {} }],
92
+ })];
93
+ case 4:
94
+ step_1 = _4.sent();
95
+ return [4 /*yield*/, sdk_1.api.endusers.createOne({
96
+ fname: 'Stats', lname: 'Cache', email: "dontsend-stats-cache-".concat(RAND(), "@tellescope.com"),
97
+ })
98
+ // 2 finished, 1 active, 1 cancelled => count 4. processAfter is far future so the worker
99
+ // cannot process (and so mutate) these out from under the assertions.
100
+ ];
101
+ case 5:
102
+ enduser_1 = _4.sent();
103
+ seed = function (status) { return sdk_1.api.automated_actions.createOne({
104
+ journeyId: journey_1.id,
105
+ automationStepId: step_1.id,
106
+ enduserId: enduser_1.id,
107
+ processAfter: Date.now() + 1000000,
108
+ status: status,
109
+ event: { type: 'onJourneyStart', info: {} },
110
+ action: { type: 'setEnduserStatus', info: { status: 'Cached Stats' } },
111
+ }); };
112
+ return [4 /*yield*/, Promise.all([seed('finished'), seed('finished'), seed('active'), seed('cancelled')])
113
+ /* ====== 1. cachedOnly on a journey that was never computed ====== */
114
+ ];
115
+ case 6:
116
+ _4.sent();
117
+ return [4 /*yield*/, sdk_1.api.journeys.get_journey_statistics({
118
+ journeyId: uncachedJourney.id, cachedOnly: true,
119
+ })];
120
+ case 7:
121
+ neverComputed = _4.sent();
122
+ record('1a. cachedOnly on an uncached journey returns empty steps, not an error', !!neverComputed.statistics && Object.keys((_b = neverComputed.statistics.steps) !== null && _b !== void 0 ? _b : {}).length === 0, "statistics=".concat(JSON.stringify(neverComputed.statistics)));
123
+ // the absence of cachedAt is the whole signal the editor uses to decide to rebuild. If this
124
+ // ever starts returning a timestamp for a journey that was never computed, the editor would
125
+ // paint zeroes and never recompute them.
126
+ record('1b. cachedOnly on an uncached journey returns NO cachedAt', neverComputed.cachedAt === undefined || neverComputed.cachedAt === null, "cachedAt=".concat(JSON.stringify(neverComputed.cachedAt)));
127
+ return [4 /*yield*/, sdk_1.api.journeys.get_journey_statistics({ journeyId: journey_1.id })];
128
+ case 8:
129
+ fresh = _4.sent();
130
+ freshForStep = (_d = (_c = fresh.statistics) === null || _c === void 0 ? void 0 : _c.steps) === null || _d === void 0 ? void 0 : _d[step_1.id];
131
+ record('2a. a plain call (no new parameter) still returns the per-step counts', !!freshForStep
132
+ && freshForStep.count === 4
133
+ && freshForStep.finishedCount === 2
134
+ && freshForStep.activeCount === 1
135
+ && freshForStep.cancelledCount === 1
136
+ && freshForStep.errorCount === 0, "steps[".concat(step_1.id, "]=").concat(JSON.stringify(freshForStep)));
137
+ record('2b. a plain call returns a cachedAt for the result it just stored', !!fresh.cachedAt && !isNaN(new Date(fresh.cachedAt).getTime()), "cachedAt=".concat(JSON.stringify(fresh.cachedAt)));
138
+ // engagement ran (there is a step id), so clicked must be a real 0 rather than absent —
139
+ // absent is what drives the editor's "Opens and link clicks are unavailable" line
140
+ record('2c. engagement ran, so clicked is 0 rather than absent', (freshForStep === null || freshForStep === void 0 ? void 0 : freshForStep.clicked) === 0, "clicked=".concat(JSON.stringify(freshForStep === null || freshForStep === void 0 ? void 0 : freshForStep.clicked)));
141
+ return [4 /*yield*/, sdk_1.api.journeys.get_journey_statistics({
142
+ journeyId: journey_1.id, cachedOnly: true,
143
+ })];
144
+ case 9:
145
+ fromCache = _4.sent();
146
+ record('3a. cachedOnly returns the stored statistics verbatim', JSON.stringify(fromCache.statistics) === JSON.stringify(fresh.statistics), "cached=".concat(JSON.stringify(fromCache.statistics), " fresh=").concat(JSON.stringify(fresh.statistics)));
147
+ // the same timestamp is the proof that cachedOnly SERVED the blob rather than recomputing it
148
+ record('3b. cachedOnly returns the stored cachedAt, proving it did not recompute', !!fromCache.cachedAt && new Date(fromCache.cachedAt).getTime() === new Date(fresh.cachedAt).getTime(), "cached=".concat(JSON.stringify(fromCache.cachedAt), " fresh=").concat(JSON.stringify(fresh.cachedAt)));
149
+ return [4 /*yield*/, sdk_1.api.journeys.get_journey_statistics({
150
+ journeyId: uncachedJourney.id, cachedOnly: true,
151
+ })];
152
+ case 10:
153
+ stillUncached = _4.sent();
154
+ record('4. computing one journey does not populate another journey\'s blob', (stillUncached.cachedAt === undefined || stillUncached.cachedAt === null)
155
+ && Object.keys((_f = (_e = stillUncached.statistics) === null || _e === void 0 ? void 0 : _e.steps) !== null && _f !== void 0 ? _f : {}).length === 0, "cachedAt=".concat(JSON.stringify(stillUncached.cachedAt), " steps=").concat(JSON.stringify((_g = stillUncached.statistics) === null || _g === void 0 ? void 0 : _g.steps)));
156
+ /* ====== 5. a rebuild refreshes the stored blob ====== */
157
+ return [4 /*yield*/, seed('finished')]; // a 5th action, so a rebuild must produce different numbers
158
+ case 11:
159
+ /* ====== 5. a rebuild refreshes the stored blob ====== */
160
+ _4.sent(); // a 5th action, so a rebuild must produce different numbers
161
+ return [4 /*yield*/, sdk_1.api.journeys.get_journey_statistics({ journeyId: journey_1.id })];
162
+ case 12:
163
+ rebuilt = _4.sent();
164
+ record('5a. a rebuild picks up records added since the blob was stored', ((_k = (_j = (_h = rebuilt.statistics) === null || _h === void 0 ? void 0 : _h.steps) === null || _j === void 0 ? void 0 : _j[step_1.id]) === null || _k === void 0 ? void 0 : _k.count) === 5
165
+ && ((_o = (_m = (_l = rebuilt.statistics) === null || _l === void 0 ? void 0 : _l.steps) === null || _m === void 0 ? void 0 : _m[step_1.id]) === null || _o === void 0 ? void 0 : _o.finishedCount) === 3, "steps[".concat(step_1.id, "]=").concat(JSON.stringify((_q = (_p = rebuilt.statistics) === null || _p === void 0 ? void 0 : _p.steps) === null || _q === void 0 ? void 0 : _q[step_1.id])));
166
+ record('5b. the rebuild advanced cachedAt', !!rebuilt.cachedAt && new Date(rebuilt.cachedAt).getTime() >= new Date(fresh.cachedAt).getTime(), "rebuilt=".concat(JSON.stringify(rebuilt.cachedAt), " previous=").concat(JSON.stringify(fresh.cachedAt)));
167
+ return [4 /*yield*/, sdk_1.api.journeys.get_journey_statistics({
168
+ journeyId: journey_1.id, cachedOnly: true,
169
+ })];
170
+ case 13:
171
+ afterRebuild = _4.sent();
172
+ record('5c. the refreshed blob is what a later cachedOnly read returns', ((_t = (_s = (_r = afterRebuild.statistics) === null || _r === void 0 ? void 0 : _r.steps) === null || _s === void 0 ? void 0 : _s[step_1.id]) === null || _t === void 0 ? void 0 : _t.count) === 5, "steps[".concat(step_1.id, "]=").concat(JSON.stringify((_v = (_u = afterRebuild.statistics) === null || _u === void 0 ? void 0 : _u.steps) === null || _v === void 0 ? void 0 : _v[step_1.id])));
173
+ return [4 /*yield*/, sdk_1.api.journeys.get_journey_statistics({
174
+ journeyId: journey_1.id, metric: 'steps',
175
+ })];
176
+ case 14:
177
+ stepsOnly = _4.sent();
178
+ stepsOnlyForStep = (_x = (_w = stepsOnly.statistics) === null || _w === void 0 ? void 0 : _w.steps) === null || _x === void 0 ? void 0 : _x[step_1.id];
179
+ record('6a. metric: \'steps\' still returns the counts', (stepsOnlyForStep === null || stepsOnlyForStep === void 0 ? void 0 : stepsOnlyForStep.count) === 5 && (stepsOnlyForStep === null || stepsOnlyForStep === void 0 ? void 0 : stepsOnlyForStep.finishedCount) === 3, "steps[".concat(step_1.id, "]=").concat(JSON.stringify(stepsOnlyForStep)));
180
+ record('6b. metric: \'steps\' does not return opens/clicked', (stepsOnlyForStep === null || stepsOnlyForStep === void 0 ? void 0 : stepsOnlyForStep.opens) === undefined && (stepsOnlyForStep === null || stepsOnlyForStep === void 0 ? void 0 : stepsOnlyForStep.clicked) === undefined, "opens=".concat(JSON.stringify(stepsOnlyForStep === null || stepsOnlyForStep === void 0 ? void 0 : stepsOnlyForStep.opens), " clicked=").concat(JSON.stringify(stepsOnlyForStep === null || stepsOnlyForStep === void 0 ? void 0 : stepsOnlyForStep.clicked)));
181
+ return [4 /*yield*/, sdkNonAdmin.api.journeys.get_journey_statistics({
182
+ journeyId: journey_1.id, cachedOnly: true,
183
+ })];
184
+ case 15:
185
+ asNonAdmin = _4.sent();
186
+ record('7. a non-admin staff user can still read journey statistics', ((_0 = (_z = (_y = asNonAdmin.statistics) === null || _y === void 0 ? void 0 : _y.steps) === null || _z === void 0 ? void 0 : _z[step_1.id]) === null || _0 === void 0 ? void 0 : _0.count) === 5, "steps[".concat(step_1.id, "]=").concat(JSON.stringify((_2 = (_1 = asNonAdmin.statistics) === null || _1 === void 0 ? void 0 : _1.steps) === null || _2 === void 0 ? void 0 : _2[step_1.id])));
187
+ return [3 /*break*/, 19];
188
+ case 16:
189
+ err_1 = _4.sent();
190
+ record('unexpected error', false, (_3 = err_1 === null || err_1 === void 0 ? void 0 : err_1.message) !== null && _3 !== void 0 ? _3 : JSON.stringify(err_1));
191
+ return [3 /*break*/, 19];
192
+ case 17: return [4 /*yield*/, (tenant === null || tenant === void 0 ? void 0 : tenant.teardown())];
193
+ case 18:
194
+ _4.sent();
195
+ return [7 /*endfinally*/];
196
+ case 19: return [2 /*return*/, checks];
197
+ }
198
+ });
199
+ }); };
200
+ exports.journey_statistics_cache_checks = journey_statistics_cache_checks;
201
+ var journey_statistics_cache_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
202
+ var _a, _b;
203
+ return __generator(this, function (_c) {
204
+ switch (_c.label) {
205
+ case 0:
206
+ _a = setup_isolated_1.assert_checks;
207
+ _b = ['Journey statistics cache'];
208
+ return [4 /*yield*/, (0, exports.journey_statistics_cache_checks)()];
209
+ case 1:
210
+ _a.apply(void 0, _b.concat([_c.sent()]));
211
+ return [2 /*return*/];
212
+ }
213
+ });
214
+ }); };
215
+ exports.journey_statistics_cache_tests = journey_statistics_cache_tests;
216
+ /** Enrolls this suite in the auto-discovered parallel pool — see run_discovered_isolated_suites. */
217
+ exports.ISOLATED_SUITE = { name: 'Journey statistics cache', run: exports.journey_statistics_cache_checks };
218
+ // Allow running this test file independently
219
+ if (require.main === module) {
220
+ var host = process.env.API_URL || 'http://localhost:8080';
221
+ console.log("\uD83C\uDF10 Using API URL: ".concat(host));
222
+ (0, exports.journey_statistics_cache_tests)()
223
+ .then(function () {
224
+ console.log("✅ Journey statistics cache test suite completed successfully");
225
+ process.exit(0);
226
+ })
227
+ .catch(function (error) {
228
+ console.error("❌ Journey statistics cache test suite failed:", error);
229
+ process.exit(1);
230
+ });
231
+ }
232
+ //# sourceMappingURL=journey_statistics_cache.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey_statistics_cache.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/journey_statistics_cache.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { Check, IsolatedSuite } from "../setup_isolated";
2
+ /**
3
+ * The backend contract behind the Journey editor's manual per-step count.
4
+ *
5
+ * When the journey statistics aggregation cannot produce numbers, a step node offers a "Get count"
6
+ * link that counts that one step through the ORDINARY automated_actions read — no new endpoint:
7
+ *
8
+ * automated_actions.getSome({ returnCount: true, filter: { automationStepId } })
9
+ * automated_actions.getSome({ returnCount: true, filter: { automationStepId, status: 'finished' } })
10
+ *
11
+ * Two properties the UI depends on and that nothing else covers:
12
+ *
13
+ * 1. `returnCount` resolves to `{ count }` (not a list), and `filter` is actually applied to the
14
+ * count — `queries.count` takes a different code path from `findPage`, so "the filter is
15
+ * honoured" is a real assertion, not a tautology. A count that ignored `filter` would silently
16
+ * report the whole tenant's automated_actions on every step.
17
+ * 2. The count is session-scoped the same way the list read is, so it equals the number of rows
18
+ * the step drawer lists for that same session. This is what makes a lower number for a
19
+ * restricted user correct rather than a bug — and it is asserted by comparing the count with
20
+ * the rows, for an admin and for a non-admin, rather than by hardcoding either access level.
21
+ *
22
+ * `setup_isolated` because every assertion here is an exact count over a whole businessId
23
+ * partition; on the shared org, other journey suites leave automated_actions behind.
24
+ *
25
+ * automated_actions are seeded directly rather than by driving a real journey: the counts are what
26
+ * is under test, and seeding makes the expected numbers exact and the run fast. `processAfter` is
27
+ * far in the future so the worker cannot process (and so mutate) them mid-assertion.
28
+ */
29
+ export declare const journey_step_manual_count_checks: () => Promise<Check[]>;
30
+ /** Asserting wrapper, for standalone runs. */
31
+ export declare const journey_step_manual_count_tests: () => Promise<void>;
32
+ /** Enrolls this suite in the auto-discovered parallel pool — see run_discovered_isolated_suites. */
33
+ export declare const ISOLATED_SUITE: IsolatedSuite;
34
+ //# sourceMappingURL=journey_step_manual_count.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey_step_manual_count.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/journey_step_manual_count.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,EAEL,aAAa,EACd,MAAM,mBAAmB,CAAA;AAI1B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,gCAAgC,QAAa,QAAQ,KAAK,EAAE,CAmKxE,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,+BAA+B,qBAE3C,CAAA;AAED,oGAAoG;AACpG,eAAO,MAAM,cAAc,EAAE,aAA4F,CAAA"}
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ 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;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.ISOLATED_SUITE = exports.journey_step_manual_count_tests = exports.journey_step_manual_count_checks = void 0;
51
+ require('source-map-support').install();
52
+ var setup_isolated_1 = require("../setup_isolated");
53
+ var RAND = function () { return Math.random().toString(36).slice(2, 10); };
54
+ /**
55
+ * The backend contract behind the Journey editor's manual per-step count.
56
+ *
57
+ * When the journey statistics aggregation cannot produce numbers, a step node offers a "Get count"
58
+ * link that counts that one step through the ORDINARY automated_actions read — no new endpoint:
59
+ *
60
+ * automated_actions.getSome({ returnCount: true, filter: { automationStepId } })
61
+ * automated_actions.getSome({ returnCount: true, filter: { automationStepId, status: 'finished' } })
62
+ *
63
+ * Two properties the UI depends on and that nothing else covers:
64
+ *
65
+ * 1. `returnCount` resolves to `{ count }` (not a list), and `filter` is actually applied to the
66
+ * count — `queries.count` takes a different code path from `findPage`, so "the filter is
67
+ * honoured" is a real assertion, not a tautology. A count that ignored `filter` would silently
68
+ * report the whole tenant's automated_actions on every step.
69
+ * 2. The count is session-scoped the same way the list read is, so it equals the number of rows
70
+ * the step drawer lists for that same session. This is what makes a lower number for a
71
+ * restricted user correct rather than a bug — and it is asserted by comparing the count with
72
+ * the rows, for an admin and for a non-admin, rather than by hardcoding either access level.
73
+ *
74
+ * `setup_isolated` because every assertion here is an exact count over a whole businessId
75
+ * partition; on the shared org, other journey suites leave automated_actions behind.
76
+ *
77
+ * automated_actions are seeded directly rather than by driving a real journey: the counts are what
78
+ * is under test, and seeding makes the expected numbers exact and the run fast. `processAfter` is
79
+ * far in the future so the worker cannot process (and so mutate) them mid-assertion.
80
+ */
81
+ var journey_step_manual_count_checks = function () { return __awaiter(void 0, void 0, void 0, function () {
82
+ var checks, record, tenant, sdk_1, sdkNonAdmin, journey_1, makeStep, _a, countedStep, otherStep, emptyStep, enduser_1, seed, count_for, rows_for, total, finished, otherTotal, emptyTotal, _b, adminRows, adminFinishedRows, _c, nonAdminTotal, nonAdminFinished, _d, nonAdminRows, nonAdminFinishedRows;
83
+ var _e, _f, _g, _h, _j, _k, _l, _m;
84
+ return __generator(this, function (_o) {
85
+ switch (_o.label) {
86
+ case 0:
87
+ checks = [];
88
+ record = function (label, pass, detail) { return checks.push({ label: label, pass: pass, detail: detail }); };
89
+ _o.label = 1;
90
+ case 1:
91
+ _o.trys.push([1, , 14, 16]);
92
+ return [4 /*yield*/, (0, setup_isolated_1.setup_isolated_tenant)({
93
+ name: "JourneyStepManualCount ".concat(RAND()),
94
+ users: [{ isAdmin: true }, { roles: ['Non-Admin'] }],
95
+ apiKeys: 0,
96
+ })];
97
+ case 2:
98
+ tenant = _o.sent();
99
+ sdk_1 = tenant.sdk, sdkNonAdmin = tenant.sdkNonAdmin;
100
+ return [4 /*yield*/, sdk_1.api.journeys.createOne({ title: "Manual Count ".concat(RAND()) })];
101
+ case 3:
102
+ journey_1 = _o.sent();
103
+ makeStep = function (status) { return sdk_1.api.automation_steps.createOne({
104
+ journeyId: journey_1.id,
105
+ action: { type: 'setEnduserStatus', info: { status: status } },
106
+ events: [{ type: 'onJourneyStart', info: {} }],
107
+ }); };
108
+ return [4 /*yield*/, Promise.all([
109
+ makeStep('Counted'), makeStep('Other'), makeStep('Empty'),
110
+ ])];
111
+ case 4:
112
+ _a = _o.sent(), countedStep = _a[0], otherStep = _a[1], emptyStep = _a[2];
113
+ return [4 /*yield*/, sdk_1.api.endusers.createOne({
114
+ fname: 'Manual', lname: 'Count', email: "dontsend-manual-count-".concat(RAND(), "@tellescope.com"),
115
+ })];
116
+ case 5:
117
+ enduser_1 = _o.sent();
118
+ seed = function (automationStepId, status) { return (sdk_1.api.automated_actions.createOne({
119
+ journeyId: journey_1.id,
120
+ automationStepId: automationStepId,
121
+ enduserId: enduser_1.id,
122
+ processAfter: Date.now() + 1000000,
123
+ status: status,
124
+ event: { type: 'onJourneyStart', info: {} },
125
+ action: { type: 'setEnduserStatus', info: { status: 'Counted' } },
126
+ })); };
127
+ // countedStep: 3 finished, 2 active, 1 cancelled, 1 error => total 7, finished 3.
128
+ // The non-finished statuses matter: the UI shows Total and Finished only, so a count that
129
+ // quietly excluded cancelled/error rows would still look plausible with a simpler fixture.
130
+ return [4 /*yield*/, Promise.all([
131
+ seed(countedStep.id, 'finished'), seed(countedStep.id, 'finished'), seed(countedStep.id, 'finished'),
132
+ seed(countedStep.id, 'active'), seed(countedStep.id, 'active'),
133
+ seed(countedStep.id, 'cancelled'),
134
+ seed(countedStep.id, 'error'),
135
+ // a second step, so a filter that was dropped would report 9 rather than 7
136
+ seed(otherStep.id, 'finished'), seed(otherStep.id, 'active'),
137
+ ])
138
+ /* ================= helpers ================= */
139
+ // getSome is typed Promise<T[]>, but a returnCount read resolves to { count }
140
+ ];
141
+ case 6:
142
+ // countedStep: 3 finished, 2 active, 1 cancelled, 1 error => total 7, finished 3.
143
+ // The non-finished statuses matter: the UI shows Total and Finished only, so a count that
144
+ // quietly excluded cancelled/error rows would still look plausible with a simpler fixture.
145
+ _o.sent();
146
+ count_for = function (session, automationStepId, status) { return __awaiter(void 0, void 0, void 0, function () {
147
+ return __generator(this, function (_a) {
148
+ switch (_a.label) {
149
+ case 0: return [4 /*yield*/, session.api.automated_actions.getSome({
150
+ returnCount: true,
151
+ filter: __assign({ automationStepId: automationStepId }, (status ? { status: status } : {})),
152
+ })];
153
+ case 1: return [2 /*return*/, _a.sent()];
154
+ }
155
+ });
156
+ }); };
157
+ rows_for = function (session, automationStepId, status) { return (session.api.automated_actions.getSome({
158
+ limit: 100,
159
+ filter: __assign({ automationStepId: automationStepId }, (status ? { status: status } : {})),
160
+ })); };
161
+ return [4 /*yield*/, count_for(sdk_1, countedStep.id)];
162
+ case 7:
163
+ total = _o.sent();
164
+ record('1a. returnCount resolves to { count }, not a list of records', !Array.isArray(total) && typeof (total === null || total === void 0 ? void 0 : total.count) === 'number', "response=".concat(JSON.stringify(total)));
165
+ record('1b. the count is filtered to the step, counting every status', (total === null || total === void 0 ? void 0 : total.count) === 7, "count=".concat(JSON.stringify(total === null || total === void 0 ? void 0 : total.count), ", expected 7 (3 finished + 2 active + 1 cancelled + 1 error)"));
166
+ return [4 /*yield*/, count_for(sdk_1, countedStep.id, 'finished')];
167
+ case 8:
168
+ finished = _o.sent();
169
+ record('1c. adding status: finished narrows the same count', (finished === null || finished === void 0 ? void 0 : finished.count) === 3, "count=".concat(JSON.stringify(finished === null || finished === void 0 ? void 0 : finished.count), ", expected 3"));
170
+ return [4 /*yield*/, count_for(sdk_1, otherStep.id)];
171
+ case 9:
172
+ otherTotal = _o.sent();
173
+ record('1d. a different step counts separately, so the filter is genuinely applied', (otherTotal === null || otherTotal === void 0 ? void 0 : otherTotal.count) === 2, "count=".concat(JSON.stringify(otherTotal === null || otherTotal === void 0 ? void 0 : otherTotal.count), ", expected 2 (and NOT 9, the tenant-wide total)"));
174
+ return [4 /*yield*/, count_for(sdk_1, emptyStep.id)];
175
+ case 10:
176
+ emptyTotal = _o.sent();
177
+ record('1e. a step with no automated actions counts 0 rather than erroring', (emptyTotal === null || emptyTotal === void 0 ? void 0 : emptyTotal.count) === 0, "count=".concat(JSON.stringify(emptyTotal === null || emptyTotal === void 0 ? void 0 : emptyTotal.count)));
178
+ return [4 /*yield*/, Promise.all([
179
+ rows_for(sdk_1, countedStep.id),
180
+ rows_for(sdk_1, countedStep.id, 'finished'),
181
+ ])];
182
+ case 11:
183
+ _b = _o.sent(), adminRows = _b[0], adminFinishedRows = _b[1];
184
+ record('2a. the admin count equals the rows the same session can list', (total === null || total === void 0 ? void 0 : total.count) === adminRows.length && (finished === null || finished === void 0 ? void 0 : finished.count) === adminFinishedRows.length, "count=".concat(total === null || total === void 0 ? void 0 : total.count, " vs rows=").concat(adminRows.length, ";")
185
+ + " finished count=".concat(finished === null || finished === void 0 ? void 0 : finished.count, " vs rows=").concat(adminFinishedRows.length));
186
+ return [4 /*yield*/, Promise.all([
187
+ count_for(sdkNonAdmin, countedStep.id),
188
+ count_for(sdkNonAdmin, countedStep.id, 'finished'),
189
+ ])];
190
+ case 12:
191
+ _c = _o.sent(), nonAdminTotal = _c[0], nonAdminFinished = _c[1];
192
+ return [4 /*yield*/, Promise.all([
193
+ rows_for(sdkNonAdmin, countedStep.id),
194
+ rows_for(sdkNonAdmin, countedStep.id, 'finished'),
195
+ ])];
196
+ case 13:
197
+ _d = _o.sent(), nonAdminRows = _d[0], nonAdminFinishedRows = _d[1];
198
+ record('3a. a non-admin count equals the rows that non-admin can list', (nonAdminTotal === null || nonAdminTotal === void 0 ? void 0 : nonAdminTotal.count) === nonAdminRows.length
199
+ && (nonAdminFinished === null || nonAdminFinished === void 0 ? void 0 : nonAdminFinished.count) === nonAdminFinishedRows.length, "count=".concat(nonAdminTotal === null || nonAdminTotal === void 0 ? void 0 : nonAdminTotal.count, " vs rows=").concat(nonAdminRows.length, ";")
200
+ + " finished count=".concat(nonAdminFinished === null || nonAdminFinished === void 0 ? void 0 : nonAdminFinished.count, " vs rows=").concat(nonAdminFinishedRows.length));
201
+ // a restricted session may legitimately count lower, but never higher than the admin
202
+ record('3b. a non-admin never counts more than the admin', ((_e = nonAdminTotal === null || nonAdminTotal === void 0 ? void 0 : nonAdminTotal.count) !== null && _e !== void 0 ? _e : 0) <= ((_f = total === null || total === void 0 ? void 0 : total.count) !== null && _f !== void 0 ? _f : 0)
203
+ && ((_g = nonAdminFinished === null || nonAdminFinished === void 0 ? void 0 : nonAdminFinished.count) !== null && _g !== void 0 ? _g : 0) <= ((_h = finished === null || finished === void 0 ? void 0 : finished.count) !== null && _h !== void 0 ? _h : 0), "non-admin total=".concat(nonAdminTotal === null || nonAdminTotal === void 0 ? void 0 : nonAdminTotal.count, " vs admin ").concat(total === null || total === void 0 ? void 0 : total.count, ";")
204
+ + " non-admin finished=".concat(nonAdminFinished === null || nonAdminFinished === void 0 ? void 0 : nonAdminFinished.count, " vs admin ").concat(finished === null || finished === void 0 ? void 0 : finished.count));
205
+ record('3c. finished never exceeds the total, for either session', ((_j = finished === null || finished === void 0 ? void 0 : finished.count) !== null && _j !== void 0 ? _j : 0) <= ((_k = total === null || total === void 0 ? void 0 : total.count) !== null && _k !== void 0 ? _k : 0)
206
+ && ((_l = nonAdminFinished === null || nonAdminFinished === void 0 ? void 0 : nonAdminFinished.count) !== null && _l !== void 0 ? _l : 0) <= ((_m = nonAdminTotal === null || nonAdminTotal === void 0 ? void 0 : nonAdminTotal.count) !== null && _m !== void 0 ? _m : 0), "admin ".concat(finished === null || finished === void 0 ? void 0 : finished.count, "/").concat(total === null || total === void 0 ? void 0 : total.count, ", non-admin ").concat(nonAdminFinished === null || nonAdminFinished === void 0 ? void 0 : nonAdminFinished.count, "/").concat(nonAdminTotal === null || nonAdminTotal === void 0 ? void 0 : nonAdminTotal.count));
207
+ return [2 /*return*/, checks];
208
+ case 14: return [4 /*yield*/, (tenant === null || tenant === void 0 ? void 0 : tenant.teardown())];
209
+ case 15:
210
+ _o.sent();
211
+ return [7 /*endfinally*/];
212
+ case 16: return [2 /*return*/];
213
+ }
214
+ });
215
+ }); };
216
+ exports.journey_step_manual_count_checks = journey_step_manual_count_checks;
217
+ /** Asserting wrapper, for standalone runs. */
218
+ var journey_step_manual_count_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
219
+ var _a, _b;
220
+ return __generator(this, function (_c) {
221
+ switch (_c.label) {
222
+ case 0:
223
+ _a = setup_isolated_1.assert_checks;
224
+ _b = ['Journey step manual count'];
225
+ return [4 /*yield*/, (0, exports.journey_step_manual_count_checks)()];
226
+ case 1:
227
+ _a.apply(void 0, _b.concat([_c.sent()]));
228
+ return [2 /*return*/];
229
+ }
230
+ });
231
+ }); };
232
+ exports.journey_step_manual_count_tests = journey_step_manual_count_tests;
233
+ /** Enrolls this suite in the auto-discovered parallel pool — see run_discovered_isolated_suites. */
234
+ exports.ISOLATED_SUITE = { name: 'Journey step manual count', run: exports.journey_step_manual_count_checks };
235
+ // Allow running this test file independently
236
+ if (require.main === module) {
237
+ var host = process.env.API_URL || 'http://localhost:8080';
238
+ console.log("\uD83C\uDF10 Using API URL: ".concat(host));
239
+ (0, exports.journey_step_manual_count_tests)()
240
+ .then(function () { console.log("✅ Journey step manual count tests passed"); process.exit(0); })
241
+ .catch(function (error) { console.error("❌ Journey step manual count tests failed:", error); process.exit(1); });
242
+ }
243
+ //# sourceMappingURL=journey_step_manual_count.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey_step_manual_count.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/journey_step_manual_count.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Check } from "../setup_isolated";
1
+ import { Check, IsolatedSuite } from "../setup_isolated";
2
2
  /**
3
3
  * Coverage for the `careTeamUserIds` parameter on `load_threads` (GET /v1/inbox-threads/load).
4
4
  *
@@ -29,4 +29,6 @@ import { Check } from "../setup_isolated";
29
29
  export declare const load_threads_care_team_checks: () => Promise<Check[]>;
30
30
  /** Asserting wrapper, for standalone runs and for sequential use in the suite. */
31
31
  export declare const load_threads_care_team_tests: () => Promise<void>;
32
+ /** Enrolls this suite in the auto-discovered parallel pool — see run_discovered_isolated_suites. */
33
+ export declare const ISOLATED_SUITE: IsolatedSuite;
32
34
  //# sourceMappingURL=load_threads_care_team.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"load_threads_care_team.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/load_threads_care_team.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,EAEN,MAAM,mBAAmB,CAAA;AAM1B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,6BAA6B,QAAa,QAAQ,KAAK,EAAE,CAuJrE,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,4BAA4B,qBAExC,CAAA"}
1
+ {"version":3,"file":"load_threads_care_team.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/load_threads_care_team.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,EAEL,aAAa,EACd,MAAM,mBAAmB,CAAA;AAM1B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,6BAA6B,QAAa,QAAQ,KAAK,EAAE,CAuJrE,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,4BAA4B,qBAExC,CAAA;AAED,oGAAoG;AACpG,eAAO,MAAM,cAAc,EAAE,aAAsF,CAAA"}
@@ -56,7 +56,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
56
56
  return to.concat(ar || Array.prototype.slice.call(from));
57
57
  };
58
58
  Object.defineProperty(exports, "__esModule", { value: true });
59
- exports.load_threads_care_team_tests = exports.load_threads_care_team_checks = void 0;
59
+ exports.ISOLATED_SUITE = exports.load_threads_care_team_tests = exports.load_threads_care_team_checks = void 0;
60
60
  require('source-map-support').install();
61
61
  var setup_isolated_1 = require("../setup_isolated");
62
62
  var host = process.env.API_URL || 'http://localhost:8080';
@@ -241,6 +241,8 @@ var load_threads_care_team_tests = function () { return __awaiter(void 0, void 0
241
241
  });
242
242
  }); };
243
243
  exports.load_threads_care_team_tests = load_threads_care_team_tests;
244
+ /** Enrolls this suite in the auto-discovered parallel pool — see run_discovered_isolated_suites. */
245
+ exports.ISOLATED_SUITE = { name: 'Load threads care team', run: exports.load_threads_care_team_checks };
244
246
  // Allow running this test file independently
245
247
  if (require.main === module) {
246
248
  console.log("\uD83C\uDF10 Using API URL: ".concat(host));