@tellescope/sdk 1.256.16 → 2.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +3 -1
- 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/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 +180 -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 +6 -3
- 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/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 +180 -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/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 +10 -2
- package/src/tests/webhooks_tests.ts +4 -2
- package/test_generated.pdf +0 -0
- package/tsconfig.cjs.json +17 -0
|
@@ -0,0 +1,484 @@
|
|
|
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.appointment_reschedule_ownership_tests = exports.appointment_reschedule_ownership_checks = void 0;
|
|
51
|
+
require('source-map-support').install();
|
|
52
|
+
var setup_isolated_1 = require("../../setup_isolated");
|
|
53
|
+
var sdk_1 = require("../../../sdk");
|
|
54
|
+
var host = process.env.API_URL || 'http://localhost:8080';
|
|
55
|
+
var RAND = function () { return Math.random().toString(36).slice(2, 10); };
|
|
56
|
+
var userAttendeeIds = function (event) { var _a; return ((_a = event === null || event === void 0 ? void 0 : event.attendees) !== null && _a !== void 0 ? _a : []).filter(function (a) { return a.type === 'user'; }).map(function (a) { return a.id; }); };
|
|
57
|
+
var enduserAttendees = function (event) { var _a; return ((_a = event === null || event === void 0 ? void 0 : event.attendees) !== null && _a !== void 0 ? _a : []).filter(function (a) { return a.type === 'enduser'; }); };
|
|
58
|
+
/** the first enduser attendee — what routing.ts get_enduserId, event_handlers_v2, the EHR syncs and
|
|
59
|
+
* session_for_join_link all resolve as "the patient for this event" */
|
|
60
|
+
var primaryEnduserId = function (event) { var _a, _b; return (_b = (_a = enduserAttendees(event)[0]) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : ''; };
|
|
61
|
+
/**
|
|
62
|
+
* `calendar_events.book_appointment` must not act on a `rescheduledCalendarEventId` belonging to
|
|
63
|
+
* another patient.
|
|
64
|
+
*
|
|
65
|
+
* The handler loaded the reschedule target with `buildOrganizationWideQueries`, which is
|
|
66
|
+
* `buildAllQueries({ unrestricted: true })` and therefore never applies the `attendees.id` access
|
|
67
|
+
* constraint calendar_events declares — the effective filter was businessId only. Any authenticated
|
|
68
|
+
* enduser could pass a co-tenant's event id and (a) have that event stamped
|
|
69
|
+
* `rescheduledAt` / `rescheduledTo`, which the portal renders as "rescheduled or deleted", (b) have
|
|
70
|
+
* the victim attached as the primary enduser attendee of the replacement event, carrying the
|
|
71
|
+
* victim's `joinLinkToken` (a capability that resolves an event by token), and (c) receive the whole
|
|
72
|
+
* stored document back, including the victim's staff-authored `internalNotes`.
|
|
73
|
+
*
|
|
74
|
+
* Both lookup sites are guarded: the initial load and the re-lookup that performs the
|
|
75
|
+
* `rescheduledAt` write. A guard on only the first leaves the write path reachable.
|
|
76
|
+
*
|
|
77
|
+
* Also covered here, because they are the same "the portal UI was the only gate" bug:
|
|
78
|
+
* - `preventRescheduleInPortal` / `preventRescheduleMinutesInAdvance` were enforced only by
|
|
79
|
+
* portal/src/pages/Events.tsx, so a direct API call ignored both even for the owner.
|
|
80
|
+
* - Group events (`enduserAttendeeLimit > 1`): being an attendee is necessary but not sufficient,
|
|
81
|
+
* since any attendee rescheduling moves the appointment for everyone. The server now mirrors the
|
|
82
|
+
* portal's gate — a group event is reschedulable only when the template set
|
|
83
|
+
* `allowGroupReschedule`. The attendee the appointment belongs to (the first enduser attendee) is
|
|
84
|
+
* preserved on the replacement event, so a co-attendee rescheduling does not re-point the
|
|
85
|
+
* appointment at themselves. Carrying the REMAINING co-attendees over is unchanged pre-existing
|
|
86
|
+
* behaviour: they come along only when `replaceHostOnReschedule` is false, and not at all on the
|
|
87
|
+
* group-join branch, where a reschedule landing on an existing group event only appends the caller.
|
|
88
|
+
*
|
|
89
|
+
* Sections: A cross-enduser attempt, B the owner's own reschedule, C the reschedule window, D group
|
|
90
|
+
* events, E the caregiver / related-contact flow, F both replaceHostOnReschedule branches (E and F are
|
|
91
|
+
* regression controls — F mirrors tests.ts ~7372-7460, which only runs against the shared seeded
|
|
92
|
+
* tenant, and the attendee-copy loop changed here).
|
|
93
|
+
*
|
|
94
|
+
* RED (pre-fix): A1-A3 fail (the victim's event is stamped and a replacement carries them), C1/C2 and
|
|
95
|
+
* D1 fail (no server-side enforcement at all). GREEN: every positive control (B, D2, E, F) still
|
|
96
|
+
* passes, before and after.
|
|
97
|
+
*/
|
|
98
|
+
var appointment_reschedule_ownership_checks = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
99
|
+
var checks, record, tenant, sdk_2, secondHostId_1, dayOfWeekStartingSundayIndexedByZero, availability, makeTemplate, makeEnduser, _a, victim_1, attacker_1, slotTemplate, allBlocks_1, startTimes_1, hostsByStartTime_1, usedStartTimes_1, takeSlot_1, book_1, attempt, template_1, victimEvent_1, INTERNAL_NOTE, victimJoinToken_1, eventsWithVictimBefore_1, crossAttempt, victimEventAfter, eventsWithVictimAfter, ownReschedule, replacement, originalAfter, noPortalRescheduleTemplate_1, noPortalEvent_1, noPortalAttempt, noPortalAfter, windowTemplate_1, windowEvent_1, windowAttempt, windowAfter, groupTemplate_1, groupEvent_1, groupAttempt, groupAfter, groupReschedulableTemplate_1, groupReschedulable_1, groupRescheduleAttempt, caregiver_1, relatedContactTemplate_1, bookingPage, relatedContactEvent_1, caregiverReschedule, preserveHostsTemplate_1, preserveOriginal_1, preserveReplacement, replaceHostsTemplate_1, replaceOriginal_1, replaceReplacement, e_1;
|
|
100
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
101
|
+
return __generator(this, function (_l) {
|
|
102
|
+
switch (_l.label) {
|
|
103
|
+
case 0:
|
|
104
|
+
checks = [];
|
|
105
|
+
record = function (label, pass, detail) { return checks.push({ label: label, pass: pass, detail: detail }); };
|
|
106
|
+
_l.label = 1;
|
|
107
|
+
case 1:
|
|
108
|
+
_l.trys.push([1, , 46, 51]);
|
|
109
|
+
return [4 /*yield*/, (0, setup_isolated_1.setup_isolated_tenant)({
|
|
110
|
+
name: "reschedule ownership ".concat(RAND()),
|
|
111
|
+
users: [{ isAdmin: true }, { isAdmin: true }],
|
|
112
|
+
apiKeys: 0,
|
|
113
|
+
})];
|
|
114
|
+
case 2:
|
|
115
|
+
tenant = _l.sent();
|
|
116
|
+
sdk_2 = tenant.sdk;
|
|
117
|
+
secondHostId_1 = tenant.users[1].id;
|
|
118
|
+
dayOfWeekStartingSundayIndexedByZero = (new Date().getDay() + 1) % 7;
|
|
119
|
+
availability = {
|
|
120
|
+
weeklyAvailabilities: [{
|
|
121
|
+
dayOfWeekStartingSundayIndexedByZero: dayOfWeekStartingSundayIndexedByZero,
|
|
122
|
+
startTimeInMinutes: 60 * 9,
|
|
123
|
+
endTimeInMinutes: 60 * 17, // 5pm — 16 half-hour slots per occurrence
|
|
124
|
+
}],
|
|
125
|
+
timezone: 'America/New_York',
|
|
126
|
+
};
|
|
127
|
+
// both hosts, so the replaceHostOnReschedule branches below have a second user to swap in
|
|
128
|
+
return [4 /*yield*/, sdk_2.api.users.updateOne(sdk_2.userInfo.id, availability, { replaceObjectFields: true })];
|
|
129
|
+
case 3:
|
|
130
|
+
// both hosts, so the replaceHostOnReschedule branches below have a second user to swap in
|
|
131
|
+
_l.sent();
|
|
132
|
+
return [4 /*yield*/, sdk_2.api.users.updateOne(secondHostId_1, availability, { replaceObjectFields: true })];
|
|
133
|
+
case 4:
|
|
134
|
+
_l.sent();
|
|
135
|
+
makeTemplate = function (extra) {
|
|
136
|
+
if (extra === void 0) { extra = {}; }
|
|
137
|
+
return sdk_2.api.calendar_event_templates.createOne(__assign({ title: "reschedule test ".concat(RAND()), durationInMinutes: 30, confirmationEmailDisabled: true, confirmationSMSDisabled: true }, extra));
|
|
138
|
+
};
|
|
139
|
+
makeEnduser = function (label) { return __awaiter(void 0, void 0, void 0, function () {
|
|
140
|
+
var enduser, authToken, session;
|
|
141
|
+
return __generator(this, function (_a) {
|
|
142
|
+
switch (_a.label) {
|
|
143
|
+
case 0: return [4 /*yield*/, sdk_2.api.endusers.createOne({
|
|
144
|
+
email: "reschedule_".concat(label, "_").concat(Date.now(), "_").concat(RAND(), "@test.tellescope.com"),
|
|
145
|
+
})];
|
|
146
|
+
case 1:
|
|
147
|
+
enduser = _a.sent();
|
|
148
|
+
return [4 /*yield*/, sdk_2.api.endusers.generate_auth_token({ id: enduser.id })];
|
|
149
|
+
case 2:
|
|
150
|
+
authToken = (_a.sent()).authToken;
|
|
151
|
+
session = new sdk_1.EnduserSession({ host: host, authToken: authToken, enduser: enduser, businessId: tenant.businessId });
|
|
152
|
+
return [2 /*return*/, { enduser: enduser, session: session }];
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}); };
|
|
156
|
+
return [4 /*yield*/, Promise.all([makeEnduser('victim'), makeEnduser('attacker')])
|
|
157
|
+
// Every template here is a plain 30-minute one with no restrictions, so one availability query
|
|
158
|
+
// describes them all. Slots are handed out from that pool and never reused — deriving each booking
|
|
159
|
+
// from a fresh "earliest available" query instead makes the suite race with its own bookings
|
|
160
|
+
// (a booking from one template can land on a slot another template still advertises).
|
|
161
|
+
];
|
|
162
|
+
case 5:
|
|
163
|
+
_a = _l.sent(), victim_1 = _a[0], attacker_1 = _a[1];
|
|
164
|
+
return [4 /*yield*/, makeTemplate()];
|
|
165
|
+
case 6:
|
|
166
|
+
slotTemplate = _l.sent();
|
|
167
|
+
return [4 /*yield*/, victim_1.session.api.calendar_events.get_appointment_availability({
|
|
168
|
+
calendarEventTemplateId: slotTemplate.id,
|
|
169
|
+
from: new Date(Date.now() - 10000),
|
|
170
|
+
to: new Date(Date.now() + 15 * 24 * 60 * 60 * 1000),
|
|
171
|
+
})];
|
|
172
|
+
case 7:
|
|
173
|
+
allBlocks_1 = (_l.sent()).availabilityBlocks;
|
|
174
|
+
startTimes_1 = allBlocks_1.map(function (b) { return b.startTimeInMS; }).filter(function (t, i, all) { return all.indexOf(t) === i; }).sort(function (a, b) { return a - b; });
|
|
175
|
+
hostsByStartTime_1 = new Map(startTimes_1.map(function (t) { return [t, allBlocks_1.filter(function (b) { return b.startTimeInMS === t; }).map(function (b) { return b.userId; })]; }));
|
|
176
|
+
usedStartTimes_1 = new Set();
|
|
177
|
+
takeSlot_1 = function (hostId) {
|
|
178
|
+
var _a;
|
|
179
|
+
var startTimeInMS = startTimes_1.find(function (t) {
|
|
180
|
+
var _a;
|
|
181
|
+
return (!usedStartTimes_1.has(t) && (!hostId || ((_a = hostsByStartTime_1.get(t)) !== null && _a !== void 0 ? _a : []).includes(hostId)));
|
|
182
|
+
});
|
|
183
|
+
if (startTimeInMS === undefined)
|
|
184
|
+
throw new Error("no unused availability left".concat(hostId ? " for host ".concat(hostId) : ''));
|
|
185
|
+
usedStartTimes_1.add(startTimeInMS);
|
|
186
|
+
return { startTimeInMS: startTimeInMS, userId: hostId || ((_a = hostsByStartTime_1.get(startTimeInMS)) !== null && _a !== void 0 ? _a : [])[0] };
|
|
187
|
+
};
|
|
188
|
+
book_1 = function (as, templateId, opts) {
|
|
189
|
+
if (opts === void 0) { opts = {}; }
|
|
190
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
191
|
+
var slot;
|
|
192
|
+
return __generator(this, function (_a) {
|
|
193
|
+
switch (_a.label) {
|
|
194
|
+
case 0:
|
|
195
|
+
slot = opts.startTimeInMS !== undefined && opts.userId
|
|
196
|
+
? { startTimeInMS: opts.startTimeInMS, userId: opts.userId }
|
|
197
|
+
: takeSlot_1(opts.hostId);
|
|
198
|
+
return [4 /*yield*/, as.api.calendar_events.book_appointment(__assign(__assign(__assign({ calendarEventTemplateId: templateId, startTime: new Date(slot.startTimeInMS), userId: slot.userId }, opts.otherUserIds ? { otherUserIds: opts.otherUserIds } : {}), opts.bookingPageId ? { bookingPageId: opts.bookingPageId } : {}), opts.rescheduledCalendarEventId ? { rescheduledCalendarEventId: opts.rescheduledCalendarEventId } : {}))];
|
|
199
|
+
case 1: return [2 /*return*/, (_a.sent()).createdEvent];
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
};
|
|
204
|
+
attempt = function (run) { return __awaiter(void 0, void 0, void 0, function () {
|
|
205
|
+
return __generator(this, function (_a) {
|
|
206
|
+
return [2 /*return*/, (run()
|
|
207
|
+
.then(function (createdEvent) { return ({ rejected: false, createdEvent: createdEvent, payload: '' }); })
|
|
208
|
+
.catch(function (err) { return ({
|
|
209
|
+
rejected: true,
|
|
210
|
+
createdEvent: undefined,
|
|
211
|
+
payload: (function () {
|
|
212
|
+
var _a;
|
|
213
|
+
try {
|
|
214
|
+
return JSON.stringify({ data: (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.data, message: err === null || err === void 0 ? void 0 : err.message });
|
|
215
|
+
}
|
|
216
|
+
catch (_b) {
|
|
217
|
+
return String((err === null || err === void 0 ? void 0 : err.message) || err);
|
|
218
|
+
}
|
|
219
|
+
})(),
|
|
220
|
+
}); }))];
|
|
221
|
+
});
|
|
222
|
+
}); };
|
|
223
|
+
template_1 = slotTemplate;
|
|
224
|
+
return [4 /*yield*/, book_1(victim_1.session, template_1.id)];
|
|
225
|
+
case 8:
|
|
226
|
+
victimEvent_1 = _l.sent();
|
|
227
|
+
INTERNAL_NOTE = "staff-only note ".concat(RAND(), " not visible to another patient");
|
|
228
|
+
return [4 /*yield*/, sdk_2.api.calendar_events.updateOne(victimEvent_1.id, { internalNotes: INTERNAL_NOTE })];
|
|
229
|
+
case 9:
|
|
230
|
+
_l.sent();
|
|
231
|
+
victimJoinToken_1 = ((_b = victimEvent_1.attendees.find(function (a) { return a.type === 'enduser'; })) === null || _b === void 0 ? void 0 : _b.joinLinkToken) || '';
|
|
232
|
+
record('setup: victim booked an appointment with a joinLinkToken and staff internalNotes', !!victimEvent_1.id && !!victimJoinToken_1
|
|
233
|
+
&& victimEvent_1.attendees.some(function (a) { return a.type === 'enduser' && a.id === victim_1.enduser.id; }), "event=".concat(victimEvent_1.id, " attendees=").concat(JSON.stringify(victimEvent_1.attendees.map(function (a) { return ({ type: a.type, id: a.id }); }))));
|
|
234
|
+
return [4 /*yield*/, sdk_2.api.calendar_events.getSome({ limit: 100 })];
|
|
235
|
+
case 10:
|
|
236
|
+
eventsWithVictimBefore_1 = (_l.sent())
|
|
237
|
+
.filter(function (e) { return e.attendees.some(function (a) { return a.id === victim_1.enduser.id; }); })
|
|
238
|
+
.map(function (e) { return e.id; });
|
|
239
|
+
return [4 /*yield*/, attempt(function () { return book_1(attacker_1.session, template_1.id, {
|
|
240
|
+
rescheduledCalendarEventId: victimEvent_1.id,
|
|
241
|
+
}); })];
|
|
242
|
+
case 11:
|
|
243
|
+
crossAttempt = _l.sent();
|
|
244
|
+
record('A1: another enduser\'s book_appointment with the victim\'s rescheduledCalendarEventId is rejected', crossAttempt.rejected, crossAttempt.rejected
|
|
245
|
+
? "rejected: ".concat(crossAttempt.payload)
|
|
246
|
+
: "WRONGLY SUCCEEDED, created ".concat((_c = crossAttempt.createdEvent) === null || _c === void 0 ? void 0 : _c.id));
|
|
247
|
+
return [4 /*yield*/, sdk_2.api.calendar_events.getOne(victimEvent_1.id)];
|
|
248
|
+
case 12:
|
|
249
|
+
victimEventAfter = _l.sent();
|
|
250
|
+
record('A2: the victim\'s event is not stamped rescheduledAt / rescheduledTo', !victimEventAfter.rescheduledAt && !victimEventAfter.rescheduledTo, "rescheduledAt=".concat(String(victimEventAfter.rescheduledAt), " rescheduledTo=").concat(String(victimEventAfter.rescheduledTo)));
|
|
251
|
+
return [4 /*yield*/, sdk_2.api.calendar_events.getSome({ limit: 100 })];
|
|
252
|
+
case 13:
|
|
253
|
+
eventsWithVictimAfter = (_l.sent())
|
|
254
|
+
.filter(function (e) { return e.attendees.some(function (a) { return a.id === victim_1.enduser.id; }); })
|
|
255
|
+
.map(function (e) { return e.id; });
|
|
256
|
+
record('A3: no replacement event was created with the victim as an attendee', eventsWithVictimAfter.length === eventsWithVictimBefore_1.length
|
|
257
|
+
&& eventsWithVictimAfter.every(function (id) { return eventsWithVictimBefore_1.includes(id); }), "before=".concat(JSON.stringify(eventsWithVictimBefore_1), " after=").concat(JSON.stringify(eventsWithVictimAfter)));
|
|
258
|
+
record('A4: the rejection carries none of the victim\'s internalNotes, joinLinkToken or reminder config', !crossAttempt.payload.includes(INTERNAL_NOTE)
|
|
259
|
+
&& !(victimJoinToken_1 && crossAttempt.payload.includes(victimJoinToken_1))
|
|
260
|
+
&& !crossAttempt.payload.includes('"reminders"'), "response=".concat(crossAttempt.payload.slice(0, 400)));
|
|
261
|
+
return [4 /*yield*/, attempt(function () { return book_1(victim_1.session, template_1.id, {
|
|
262
|
+
rescheduledCalendarEventId: victimEvent_1.id,
|
|
263
|
+
}); })];
|
|
264
|
+
case 14:
|
|
265
|
+
ownReschedule = _l.sent();
|
|
266
|
+
record('B1: the owner can still reschedule their own appointment', !ownReschedule.rejected && !!((_d = ownReschedule.createdEvent) === null || _d === void 0 ? void 0 : _d.id), ownReschedule.rejected ? "rejected: ".concat(ownReschedule.payload) : "created ".concat(ownReschedule.createdEvent.id));
|
|
267
|
+
if (!!ownReschedule.rejected) return [3 /*break*/, 16];
|
|
268
|
+
replacement = ownReschedule.createdEvent;
|
|
269
|
+
return [4 /*yield*/, sdk_2.api.calendar_events.getOne(victimEvent_1.id)];
|
|
270
|
+
case 15:
|
|
271
|
+
originalAfter = _l.sent();
|
|
272
|
+
record('B2: the original event is stamped rescheduledAt / rescheduledTo -> the replacement', !!originalAfter.rescheduledAt && originalAfter.rescheduledTo === replacement.id, "rescheduledAt=".concat(String(originalAfter.rescheduledAt), " rescheduledTo=").concat(String(originalAfter.rescheduledTo), " replacement=").concat(replacement.id));
|
|
273
|
+
record('B3: internalNotes and the attendee set carry over to the replacement', replacement.internalNotes === INTERNAL_NOTE
|
|
274
|
+
&& replacement.attendees.some(function (a) { return a.type === 'enduser' && a.id === victim_1.enduser.id; })
|
|
275
|
+
&& replacement.attendees.some(function (a) { return a.type === 'user'; }), "internalNotes=".concat(JSON.stringify(replacement.internalNotes), " attendees=").concat(JSON.stringify(replacement.attendees.map(function (a) { return ({ type: a.type, id: a.id }); }))));
|
|
276
|
+
record('B4: the owner stays the primary attendee, keeps their OWN joinLinkToken, and no other enduser is attached', primaryEnduserId(replacement) === victim_1.enduser.id
|
|
277
|
+
&& replacement.attendees.filter(function (a) { return a.type === 'enduser'; }).every(function (a) { return a.id === victim_1.enduser.id; })
|
|
278
|
+
&& ((_e = replacement.attendees.find(function (a) { return a.type === 'enduser' && a.id === victim_1.enduser.id; })) === null || _e === void 0 ? void 0 : _e.joinLinkToken) === victimJoinToken_1, "enduser attendees=".concat(JSON.stringify(replacement.attendees.filter(function (a) { return a.type === 'enduser'; }).map(function (a) { return ({ id: a.id, sameToken: a.joinLinkToken === victimJoinToken_1 }); }))));
|
|
279
|
+
_l.label = 16;
|
|
280
|
+
case 16: return [4 /*yield*/, makeTemplate({ preventRescheduleInPortal: true })];
|
|
281
|
+
case 17:
|
|
282
|
+
noPortalRescheduleTemplate_1 = _l.sent();
|
|
283
|
+
return [4 /*yield*/, book_1(victim_1.session, noPortalRescheduleTemplate_1.id)];
|
|
284
|
+
case 18:
|
|
285
|
+
noPortalEvent_1 = _l.sent();
|
|
286
|
+
return [4 /*yield*/, attempt(function () { return book_1(victim_1.session, noPortalRescheduleTemplate_1.id, {
|
|
287
|
+
rescheduledCalendarEventId: noPortalEvent_1.id,
|
|
288
|
+
}); })];
|
|
289
|
+
case 19:
|
|
290
|
+
noPortalAttempt = _l.sent();
|
|
291
|
+
return [4 /*yield*/, sdk_2.api.calendar_events.getOne(noPortalEvent_1.id)];
|
|
292
|
+
case 20:
|
|
293
|
+
noPortalAfter = _l.sent();
|
|
294
|
+
record('C1: preventRescheduleInPortal is enforced on a direct API call by the owner', noPortalAttempt.rejected && !noPortalAfter.rescheduledAt, "rejected=".concat(noPortalAttempt.rejected, " detail=").concat(noPortalAttempt.payload || "created ".concat((_f = noPortalAttempt.createdEvent) === null || _f === void 0 ? void 0 : _f.id)));
|
|
295
|
+
return [4 /*yield*/, makeTemplate({ preventRescheduleMinutesInAdvance: 100000 })];
|
|
296
|
+
case 21:
|
|
297
|
+
windowTemplate_1 = _l.sent();
|
|
298
|
+
return [4 /*yield*/, book_1(victim_1.session, windowTemplate_1.id)];
|
|
299
|
+
case 22:
|
|
300
|
+
windowEvent_1 = _l.sent();
|
|
301
|
+
return [4 /*yield*/, attempt(function () { return book_1(victim_1.session, windowTemplate_1.id, {
|
|
302
|
+
rescheduledCalendarEventId: windowEvent_1.id,
|
|
303
|
+
}); })];
|
|
304
|
+
case 23:
|
|
305
|
+
windowAttempt = _l.sent();
|
|
306
|
+
return [4 /*yield*/, sdk_2.api.calendar_events.getOne(windowEvent_1.id)];
|
|
307
|
+
case 24:
|
|
308
|
+
windowAfter = _l.sent();
|
|
309
|
+
record('C2: preventRescheduleMinutesInAdvance is enforced on a direct API call by the owner', windowAttempt.rejected && !windowAfter.rescheduledAt, "rejected=".concat(windowAttempt.rejected, " detail=").concat(windowAttempt.payload || "created ".concat((_g = windowAttempt.createdEvent) === null || _g === void 0 ? void 0 : _g.id)));
|
|
310
|
+
return [4 /*yield*/, makeTemplate({ enduserAttendeeLimit: 2 })];
|
|
311
|
+
case 25:
|
|
312
|
+
groupTemplate_1 = _l.sent();
|
|
313
|
+
return [4 /*yield*/, book_1(victim_1.session, groupTemplate_1.id)];
|
|
314
|
+
case 26:
|
|
315
|
+
groupEvent_1 = _l.sent();
|
|
316
|
+
return [4 /*yield*/, book_1(attacker_1.session, groupTemplate_1.id, {
|
|
317
|
+
startTimeInMS: groupEvent_1.startTimeInMS,
|
|
318
|
+
userId: groupEvent_1.attendees.find(function (a) { return a.type === 'user'; }).id,
|
|
319
|
+
})];
|
|
320
|
+
case 27:
|
|
321
|
+
_l.sent();
|
|
322
|
+
return [4 /*yield*/, attempt(function () { return book_1(attacker_1.session, groupTemplate_1.id, {
|
|
323
|
+
rescheduledCalendarEventId: groupEvent_1.id,
|
|
324
|
+
}); })];
|
|
325
|
+
case 28:
|
|
326
|
+
groupAttempt = _l.sent();
|
|
327
|
+
return [4 /*yield*/, sdk_2.api.calendar_events.getOne(groupEvent_1.id)];
|
|
328
|
+
case 29:
|
|
329
|
+
groupAfter = _l.sent();
|
|
330
|
+
record('D1: a co-attendee cannot reschedule a group event without allowGroupReschedule', groupAttempt.rejected && !groupAfter.rescheduledAt, "rejected=".concat(groupAttempt.rejected, " rescheduledAt=").concat(String(groupAfter.rescheduledAt), " detail=").concat(groupAttempt.payload));
|
|
331
|
+
return [4 /*yield*/, makeTemplate({ enduserAttendeeLimit: 2, allowGroupReschedule: true })];
|
|
332
|
+
case 30:
|
|
333
|
+
groupReschedulableTemplate_1 = _l.sent();
|
|
334
|
+
return [4 /*yield*/, book_1(victim_1.session, groupReschedulableTemplate_1.id)];
|
|
335
|
+
case 31:
|
|
336
|
+
groupReschedulable_1 = _l.sent();
|
|
337
|
+
return [4 /*yield*/, book_1(attacker_1.session, groupReschedulableTemplate_1.id, {
|
|
338
|
+
startTimeInMS: groupReschedulable_1.startTimeInMS,
|
|
339
|
+
userId: groupReschedulable_1.attendees.find(function (a) { return a.type === 'user'; }).id,
|
|
340
|
+
})];
|
|
341
|
+
case 32:
|
|
342
|
+
_l.sent();
|
|
343
|
+
return [4 /*yield*/, attempt(function () { return book_1(attacker_1.session, groupReschedulableTemplate_1.id, {
|
|
344
|
+
rescheduledCalendarEventId: groupReschedulable_1.id,
|
|
345
|
+
}); })];
|
|
346
|
+
case 33:
|
|
347
|
+
groupRescheduleAttempt = _l.sent();
|
|
348
|
+
record('D2: with allowGroupReschedule a co-attendee may reschedule; both attend and the original primary is kept', !groupRescheduleAttempt.rejected
|
|
349
|
+
&& !!((_h = groupRescheduleAttempt.createdEvent) === null || _h === void 0 ? void 0 : _h.attendees.some(function (a) { return a.id === victim_1.enduser.id; }))
|
|
350
|
+
&& !!((_j = groupRescheduleAttempt.createdEvent) === null || _j === void 0 ? void 0 : _j.attendees.some(function (a) { return a.id === attacker_1.enduser.id; }))
|
|
351
|
+
// the co-attendee rescheduling must NOT become the event's derived patient
|
|
352
|
+
&& primaryEnduserId(groupRescheduleAttempt.createdEvent) === victim_1.enduser.id, groupRescheduleAttempt.rejected
|
|
353
|
+
? "rejected: ".concat(groupRescheduleAttempt.payload)
|
|
354
|
+
: "attendees=".concat(JSON.stringify(groupRescheduleAttempt.createdEvent.attendees.map(function (a) { return ({ type: a.type, id: a.id }); })))
|
|
355
|
+
+ " primaryEnduser=".concat(primaryEnduserId(groupRescheduleAttempt.createdEvent), " (want ").concat(victim_1.enduser.id, ")"));
|
|
356
|
+
return [4 /*yield*/, makeEnduser('caregiver')];
|
|
357
|
+
case 34:
|
|
358
|
+
caregiver_1 = _l.sent();
|
|
359
|
+
return [4 /*yield*/, sdk_2.api.endusers.updateOne(victim_1.enduser.id, {
|
|
360
|
+
relationships: [{ type: 'Caregiver', id: caregiver_1.enduser.id }],
|
|
361
|
+
}, { replaceObjectFields: true })];
|
|
362
|
+
case 35:
|
|
363
|
+
_l.sent();
|
|
364
|
+
return [4 /*yield*/, makeTemplate()];
|
|
365
|
+
case 36:
|
|
366
|
+
relatedContactTemplate_1 = _l.sent();
|
|
367
|
+
return [4 /*yield*/, sdk_2.api.appointment_booking_pages.createOne({
|
|
368
|
+
title: "related contacts ".concat(RAND()),
|
|
369
|
+
locationIds: [],
|
|
370
|
+
calendarEventTemplateIds: [relatedContactTemplate_1.id],
|
|
371
|
+
includeRelatedContactTypes: ['Caregiver'],
|
|
372
|
+
})];
|
|
373
|
+
case 37:
|
|
374
|
+
bookingPage = _l.sent();
|
|
375
|
+
return [4 /*yield*/, book_1(victim_1.session, relatedContactTemplate_1.id, { bookingPageId: bookingPage.id })];
|
|
376
|
+
case 38:
|
|
377
|
+
relatedContactEvent_1 = _l.sent();
|
|
378
|
+
record('E1: a related contact is attached as an attendee at booking time', relatedContactEvent_1.attendees.some(function (a) { return a.id === caregiver_1.enduser.id; }), "attendees=".concat(JSON.stringify(relatedContactEvent_1.attendees.map(function (a) { return ({ type: a.type, id: a.id }); })), " caregiver=").concat(caregiver_1.enduser.id));
|
|
379
|
+
return [4 /*yield*/, attempt(function () { return book_1(caregiver_1.session, relatedContactTemplate_1.id, {
|
|
380
|
+
rescheduledCalendarEventId: relatedContactEvent_1.id,
|
|
381
|
+
}); })];
|
|
382
|
+
case 39:
|
|
383
|
+
caregiverReschedule = _l.sent();
|
|
384
|
+
record('E2: the caregiver can still reschedule, and the PATIENT stays the primary enduser attendee', !caregiverReschedule.rejected
|
|
385
|
+
&& !!((_k = caregiverReschedule.createdEvent) === null || _k === void 0 ? void 0 : _k.attendees.some(function (a) { return a.id === caregiver_1.enduser.id; }))
|
|
386
|
+
// the appointment must still resolve to the patient: EHR sync, triggers/webhooks and
|
|
387
|
+
// session_for_join_link all read the first enduser attendee
|
|
388
|
+
&& primaryEnduserId(caregiverReschedule.createdEvent) === victim_1.enduser.id, caregiverReschedule.rejected
|
|
389
|
+
? "rejected: ".concat(caregiverReschedule.payload)
|
|
390
|
+
: "attendees=".concat(JSON.stringify(caregiverReschedule.createdEvent.attendees.map(function (a) { return ({ type: a.type, id: a.id }); })))
|
|
391
|
+
+ " primaryEnduser=".concat(primaryEnduserId(caregiverReschedule.createdEvent), " (want patient ").concat(victim_1.enduser.id, ")"));
|
|
392
|
+
return [4 /*yield*/, makeTemplate({ replaceHostOnReschedule: false })];
|
|
393
|
+
case 40:
|
|
394
|
+
preserveHostsTemplate_1 = _l.sent();
|
|
395
|
+
return [4 /*yield*/, book_1(victim_1.session, preserveHostsTemplate_1.id, {
|
|
396
|
+
hostId: sdk_2.userInfo.id,
|
|
397
|
+
otherUserIds: [secondHostId_1],
|
|
398
|
+
})];
|
|
399
|
+
case 41:
|
|
400
|
+
preserveOriginal_1 = _l.sent();
|
|
401
|
+
return [4 /*yield*/, attempt(function () { return book_1(victim_1.session, preserveHostsTemplate_1.id, {
|
|
402
|
+
hostId: secondHostId_1,
|
|
403
|
+
rescheduledCalendarEventId: preserveOriginal_1.id,
|
|
404
|
+
}); })];
|
|
405
|
+
case 42:
|
|
406
|
+
preserveReplacement = _l.sent();
|
|
407
|
+
record('F1: replaceHostOnReschedule false still preserves both user attendees', !preserveReplacement.rejected
|
|
408
|
+
&& userAttendeeIds(preserveReplacement.createdEvent).length === 2
|
|
409
|
+
&& userAttendeeIds(preserveReplacement.createdEvent).includes(sdk_2.userInfo.id)
|
|
410
|
+
&& userAttendeeIds(preserveReplacement.createdEvent).includes(secondHostId_1), preserveReplacement.rejected
|
|
411
|
+
? "rejected: ".concat(preserveReplacement.payload)
|
|
412
|
+
: "user attendees=".concat(JSON.stringify(userAttendeeIds(preserveReplacement.createdEvent))));
|
|
413
|
+
return [4 /*yield*/, makeTemplate({ replaceHostOnReschedule: true })];
|
|
414
|
+
case 43:
|
|
415
|
+
replaceHostsTemplate_1 = _l.sent();
|
|
416
|
+
return [4 /*yield*/, book_1(victim_1.session, replaceHostsTemplate_1.id, {
|
|
417
|
+
hostId: sdk_2.userInfo.id,
|
|
418
|
+
otherUserIds: [secondHostId_1],
|
|
419
|
+
})];
|
|
420
|
+
case 44:
|
|
421
|
+
replaceOriginal_1 = _l.sent();
|
|
422
|
+
return [4 /*yield*/, attempt(function () { return book_1(victim_1.session, replaceHostsTemplate_1.id, {
|
|
423
|
+
hostId: secondHostId_1,
|
|
424
|
+
rescheduledCalendarEventId: replaceOriginal_1.id,
|
|
425
|
+
}); })];
|
|
426
|
+
case 45:
|
|
427
|
+
replaceReplacement = _l.sent();
|
|
428
|
+
record('F2: replaceHostOnReschedule true still replaces the hosts and keeps the enduser attendee', !replaceReplacement.rejected
|
|
429
|
+
&& userAttendeeIds(replaceReplacement.createdEvent).length === 1
|
|
430
|
+
&& userAttendeeIds(replaceReplacement.createdEvent)[0] === secondHostId_1
|
|
431
|
+
&& replaceReplacement.createdEvent.attendees.filter(function (a) { return a.type === 'enduser'; }).length === 1
|
|
432
|
+
&& replaceReplacement.createdEvent.attendees.some(function (a) { return a.id === victim_1.enduser.id; }), replaceReplacement.rejected
|
|
433
|
+
? "rejected: ".concat(replaceReplacement.payload)
|
|
434
|
+
: "attendees=".concat(JSON.stringify(replaceReplacement.createdEvent.attendees.map(function (a) { return ({ type: a.type, id: a.id }); }))));
|
|
435
|
+
return [3 /*break*/, 51];
|
|
436
|
+
case 46:
|
|
437
|
+
if (!tenant) return [3 /*break*/, 50];
|
|
438
|
+
_l.label = 47;
|
|
439
|
+
case 47:
|
|
440
|
+
_l.trys.push([47, 49, , 50]);
|
|
441
|
+
return [4 /*yield*/, tenant.teardown()];
|
|
442
|
+
case 48:
|
|
443
|
+
_l.sent();
|
|
444
|
+
return [3 /*break*/, 50];
|
|
445
|
+
case 49:
|
|
446
|
+
e_1 = _l.sent();
|
|
447
|
+
console.error('teardown failed', e_1);
|
|
448
|
+
return [3 /*break*/, 50];
|
|
449
|
+
case 50: return [7 /*endfinally*/];
|
|
450
|
+
case 51: return [2 /*return*/, checks];
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
}); };
|
|
454
|
+
exports.appointment_reschedule_ownership_checks = appointment_reschedule_ownership_checks;
|
|
455
|
+
/** Asserting wrapper, for standalone runs and for sequential use in the suite. */
|
|
456
|
+
var appointment_reschedule_ownership_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
457
|
+
var _a, _b;
|
|
458
|
+
return __generator(this, function (_c) {
|
|
459
|
+
switch (_c.label) {
|
|
460
|
+
case 0:
|
|
461
|
+
_a = setup_isolated_1.assert_checks;
|
|
462
|
+
_b = ['book_appointment reschedule ownership'];
|
|
463
|
+
return [4 /*yield*/, (0, exports.appointment_reschedule_ownership_checks)()];
|
|
464
|
+
case 1:
|
|
465
|
+
_a.apply(void 0, _b.concat([_c.sent()]));
|
|
466
|
+
return [2 /*return*/];
|
|
467
|
+
}
|
|
468
|
+
});
|
|
469
|
+
}); };
|
|
470
|
+
exports.appointment_reschedule_ownership_tests = appointment_reschedule_ownership_tests;
|
|
471
|
+
// Allow running this test file independently
|
|
472
|
+
if (require.main === module) {
|
|
473
|
+
console.log("\uD83C\uDF10 Using API URL: ".concat(host));
|
|
474
|
+
(0, exports.appointment_reschedule_ownership_tests)()
|
|
475
|
+
.then(function () {
|
|
476
|
+
console.log("✅ book_appointment reschedule ownership test suite completed successfully");
|
|
477
|
+
process.exit(0);
|
|
478
|
+
})
|
|
479
|
+
.catch(function (error) {
|
|
480
|
+
console.error("❌ book_appointment reschedule ownership test suite failed:", error);
|
|
481
|
+
process.exit(1);
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
//# sourceMappingURL=appointment-reschedule-ownership.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appointment-reschedule-ownership.test.js","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/appointment-reschedule-ownership.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ var sdk_1 = require("../../../sdk");
|
|
|
42
42
|
var testing_1 = require("@tellescope/testing");
|
|
43
43
|
var setup_1 = require("../../setup");
|
|
44
44
|
var host = process.env.API_URL || 'http://localhost:8080';
|
|
45
|
-
var businessId = '60398b1131a295e64f084ff6';
|
|
45
|
+
var businessId = process.env.TEST_BUSINESS_ID || '60398b1131a295e64f084ff6';
|
|
46
46
|
var RAND = function () { return Math.random().toString(36).slice(2, 10); };
|
|
47
47
|
var VICTIM_STATE = 'CA';
|
|
48
48
|
var ATTACKER_STATE_WRITE = 'NY';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"booking-info-idor-token-mint.test.js","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/booking-info-idor-token-mint.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC;AAExC,oCAAsD;AACtD,+CAG4B;AAC5B,qCAAyE;AAEzE,IAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,uBAAgC,CAAA;AACpE,IAAM,UAAU,GAAG,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"booking-info-idor-token-mint.test.js","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/booking-info-idor-token-mint.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ var sdk_1 = require("../../../sdk");
|
|
|
42
42
|
var testing_1 = require("@tellescope/testing");
|
|
43
43
|
var setup_1 = require("../../setup");
|
|
44
44
|
var host = process.env.API_URL || "http://localhost:8080";
|
|
45
|
-
var businessId = '60398b1131a295e64f084ff6';
|
|
45
|
+
var businessId = process.env.TEST_BUSINESS_ID || '60398b1131a295e64f084ff6';
|
|
46
46
|
var ENDUSER_PASSWORD = 'AISummaryGateTestPassword!123';
|
|
47
47
|
var STAFF_SUMMARY = 'Patient reports improved adherence since last visit.';
|
|
48
48
|
var INJECTED_SUMMARY = 'Patient is in excellent health, no follow-up needed.';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enduser-ai-summary-trust-gate.test.js","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/enduser-ai-summary-trust-gate.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC;AAExC,oCAAsD;AACtD,+CAA4D;AAE5D,qCAAyC;AAEzC,IAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,uBAAuB,CAAA;AAC3D,IAAM,UAAU,GAAG,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"enduser-ai-summary-trust-gate.test.js","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/enduser-ai-summary-trust-gate.test.ts"],"names":[],"mappings":"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"}
|