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