Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SCH-531]Implement polling fallback for waiting room if websocket fails #91

Merged
merged 2 commits into from Oct 19, 2021

Conversation

ivanjiang5628
Copy link

@ivanjiang5628 ivanjiang5628 commented Sep 27, 2021

Description

  • Linear Ticket SCH-531

  • Linear Ticket SCH-542

  • Previously in the waiting room when socket connection fails, video chat app would bypass the waiting room to navigate the user to the session directly. After discussions with Brian and Trev, In this socket failure scenario, we believe that using polling should be a more reliable solution than navigating users to the session directly.

In this PR:

  • When "_connectionStatusListener" receives an socket error it auto fallbacks to polling to retrieve the latest waiting room states via "checkRoomStatus" API request every 5 seconds.
  • If any error occurs while polling, video chat app will stop polling after three retries and pop up an error notification. then redirect the user to the welcome page after a 5 seconds delay.
  • the socketConnection component will send the latest polling response to iOS app .
  • Stop displaying waiting room error notification to prevent confusion.
  • Clear up & refractor the socket class for the polling fallback.
  • the PR would also fix SCH-542

General PR Class

👁 = UX / UI improvement

Release Note

Dependencies / ENV

Risk Scorecard

  1. As the author you should check the boxes that correspond with your PR and then use the following guide to set your risk label:
  • 0 checkboxes => low risk
  • 1-3 checkboxes => medium risk
  • 4+ checkboxes => high risk
  1. Unless exempt, checked risk factors should be explained comprehensively in the Release Risk Assessment section below
  2. Medium or higher risk PRs should get more than one code-review approval

NOTE: if you aren't changing any production files, please use the zero risk label

  • requires env configuration to be added in production
  • js package changes1
  • more than 200 LOC changed in production files1
  • includes a user-facing workflow change to an existing production feature (user muscle memory or pattern recognition will be affected)
  • could prevent access to Jane Video (eg. cors, middleware, changes to auth system)
  • affects a widely used component or piece of code
  • I have a doubt - I want the RMT to review this. If possible, please elaborate your concerns in the risk assessment section.

1 No need to explain these risk factors below

Release Risk Assessment

Medium since it could prevent access to the video session from waiting room.

Demo Notes

Code Review

Resource: Dev Team Notion Page
Resource: Code Review Checklist

  • I clearly explained the WHY behind the work, in the Description above

Design

  • I added instructions for how to test, in the QA section below
  • I added specs for changes, or determined that none were required
  • I demoed this to the appropriate person
  • I considered both mobile & desktop views, or that wasn't relevant

Code

  • I committed code with informative git messages
  • I wrote readable code, or added comments if it was complex
  • I performed a self-review of my own code
  • I rebased my branch on the latest master

QA and Smoke Testing

Steps to Reproduce

  1. Please deploy SCH-531-test-branch to s8 sandbox (This build will pass an incorrect socket token to jitsi and make jitsi's websocket connection unavailable)
    image

  2. Create an online appointment on s8

  3. Open a jitsi web app or iOS app (the functionality should work on both desktop & mobile devices)

  4. When socket fails can see an "Unable to connect socket.io" error in the browser console
    image

  5. Jitsi would auto fallback to polling to retrieve the latest room states

  6. The waiting room should work as usual

we could open the network tab in chrome dev tools to monitor the polling request sent every 5 seconds.

We also need to switch back to a build(i.e., sch-1006) that doesn't break the socket connection in S8 and smoke test the waiting room to ensure the socket connection works properly.

Fixed / Expected Behaviour

Jane Desktop

Other Considerations

  • Will this affect other parts of the app or views?
  • How can the success of this work be confirmed after release to production?
  • What QA have you already done?

Screenshots

Before

After

@ivanjiang5628 ivanjiang5628 self-assigned this Sep 27, 2021
@ivanjiang5628 ivanjiang5628 added the Risk - Low Low risk of disruption to codebase or infrastructure. label Sep 27, 2021
@ivanjiang5628 ivanjiang5628 changed the title use long polling fallback when socket server fails in SocketConnectio… polling fallback when socket server fails Sep 27, 2021
@ivanjiang5628 ivanjiang5628 force-pushed the polling-fallback-when-socket-fails branch from b558335 to a61aeef Compare September 27, 2021 04:05
@ivanjiang5628 ivanjiang5628 marked this pull request as ready for review September 27, 2021 16:19
@ivanjiang5628 ivanjiang5628 changed the title polling fallback when socket server fails [SCH-531]Implement polling fallback for waiting room if websocket fails Sep 27, 2021
@linear
Copy link

linear bot commented Sep 27, 2021

SCH-531 Implement polling fallback for waiting room if websocket fails

Previously in the waiting room if the socket connection failed, the video chat app would bypass the waiting room to redirect the user to the session directly. After discussions with Brian and Trev, In this socket failure scenario, polling should be a more reliable solution than navigating users to join the session directly.

@ivanjiang5628 ivanjiang5628 added this to In Development in Telehealth Roll-Out Board Sep 27, 2021
@ivanjiang5628 ivanjiang5628 added Risk - Med Medium risk of disruption to codebase or infrastructure. and removed Risk - Low Low risk of disruption to codebase or infrastructure. labels Sep 27, 2021
@ivanjiang5628 ivanjiang5628 force-pushed the polling-fallback-when-socket-fails branch 2 times, most recently from 5ff14d4 to 901eb41 Compare September 29, 2021 18:16
@ivanjiang5628 ivanjiang5628 moved this from In Development to Waiting for Code Review in Telehealth Roll-Out Board Sep 29, 2021
@JuliaMoniqueRix JuliaMoniqueRix added the demoed Demoed with a PO or key stakeholder label Sep 30, 2021
@JuliaMoniqueRix
Copy link

Demo / Pre QA Testing

Error message achieved!

Waiting area error

@ivanjiang5628 ivanjiang5628 force-pushed the polling-fallback-when-socket-fails branch 2 times, most recently from 21cf57a to eefe039 Compare October 1, 2021 21:27
@ivanjiang5628 ivanjiang5628 force-pushed the polling-fallback-when-socket-fails branch from eefe039 to 13a7fcd Compare October 4, 2021 02:11
@ivanjiang5628 ivanjiang5628 force-pushed the polling-fallback-when-socket-fails branch from 13a7fcd to 6f0f019 Compare October 4, 2021 04:44
@@ -185,10 +184,6 @@ export function updateParticipantReadyStatus(status: string): void {
})
.catch(error => {
sendAnalytics(createWaitingAreaParticipantStatusChangedEvent('failed'));
window.APP.store.dispatch(showErrorNotification({
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stop displaying this error notification due to a user complaint

Copy link

@hollandmatt hollandmatt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

@ivanjiang5628 ivanjiang5628 moved this from Waiting for Code Review to Code Review Approved / In QA in Telehealth Roll-Out Board Oct 6, 2021
@ivanjiang5628 ivanjiang5628 force-pushed the polling-fallback-when-socket-fails branch 3 times, most recently from a21ec47 to e96ba30 Compare October 7, 2021 01:32
@ivanjiang5628 ivanjiang5628 moved this from Code Review Approved / In QA to Waiting for Code Review in Telehealth Roll-Out Board Oct 7, 2021
@ivanjiang5628 ivanjiang5628 force-pushed the polling-fallback-when-socket-fails branch 2 times, most recently from 916b944 to 60c4cf6 Compare October 7, 2021 02:46
@ivanjiang5628 ivanjiang5628 force-pushed the polling-fallback-when-socket-fails branch from 60c4cf6 to 1ac2b38 Compare October 7, 2021 17:09
@ivanjiang5628 ivanjiang5628 moved this from Waiting for Code Review to Code Review Approved / In QA in Telehealth Roll-Out Board Oct 8, 2021
@CasTodesco
Copy link

CasTodesco commented Oct 8, 2021

Before Testing

  • CI must be passing
  • No conflicts
  • No unresolved reviews/changes requested
  • No additional changes/pushes from dev since the last round of QA
  • NA Release note is sufficient for #features
  • Read through Notion / Linear Issue / Slack Convo / Demo video
  • Read through comments

Developer's Recommended Test Plan

  • Please deploy SCH-531-test-branch to s8 sandbox (This build will pass an incorrect socket token to jitsi and make jitsi's websocket connection unavailable)
  • Create an online appointment on s8
  • Open a jitsi web app or iOS app (the functionality should work on both desktop & mobile devices)
  • When socket fails can see an "Unable to connect socket.io" error in the browser console
    Screen Shot 2021-10-08 at 11 16 00 AM
  • Jitsi would auto fallback to polling to retrieve the latest room states
  • The waiting room should work as usual
  • we could open the network tab in chrome dev tools to monitor the polling request sent every 5 seconds.
  • We also need to switch back to a build(i.e., sch-1006) that doesn't break the socket connection in S8 and smoke test the waiting room to ensure the socket connection works properly.

Additional Thoughts on Testing

Mobile, Browsers, Jane Desktop

  • chrome
  • iOS mobile
  • firefox
  • safari
  • opera
  • android

Regression Testing / Exploratory

Peer Review for Moderate Risk or Higher

  • Peer Review

Pass Story on QA Board / Mark Scheduled for Release in Linear

  • LGTM

For new features and improvements to UX: Add test cases to Steve Hong's Notion Document

  • Steve has my test cases

Labels

  • Portfolio Team label is added
  • T-shirt label is added

Move PR on Roll Out Board

  • Moved from QA to Patch Release Candidate

@CasTodesco CasTodesco self-assigned this Oct 8, 2021
@CasTodesco CasTodesco moved this from Code Review Approved / In QA to Ready for Release in Telehealth Roll-Out Board Oct 8, 2021
@ivanjiang5628 ivanjiang5628 merged commit 4478bf7 into master Oct 19, 2021
ivanjiang5628 added a commit that referenced this pull request Nov 4, 2021
[SCH-531]Implement polling fallback for waiting room if websocket fails
@ivanjiang5628 ivanjiang5628 moved this from Ready for Release to Merged in Telehealth Roll-Out Board Jan 3, 2022
ivanjiang5628 added a commit that referenced this pull request Mar 29, 2022
* fix(rn,filmstrip) avoid fast scroll trigggering visibility notifications

An item won't be considered visible until it has been visible for 500ms.

* fix(rn,filmstrip) simplify code

viewableItems always comes in order and indexes are always ascending. In
addition, if the array comes empty (I saw it happen on Android at least, when
scrolling like a maniac) we'd calculate the right value, instead of Infinity.

* fix(sounds) fix reaction sound names

- Remove unicode charcters from filenames
- Simplify code for copying them to the iOS SDK

* fix(rn,ParticipantPane) optimize

Use a FlatList to avoid loading all participants at once.

* feat(ios) update dropbox authentication to PKCE flow

* lang: Update portuguese translation (jitsi#9836)

* Update portuguese translation

Translate "dialog”, "virtualBackground”, "info” and "settings" sections

* fix "you" translation

* revert "you" translation to original

* lang: Added and edited translations for vi (jitsi#9850)

Co-authored-by: cfriedlander <chagai.friedlander@aarenet.com>

* lang: Update i18n Occitan (jitsi#9853)

Some update.
Been up to line 253 at the moment

* lang: Update main-sv.json (jitsi#9862)

* fix(notifications) throttle join notifications for 2 seconds

* fix(lang,notifications) make join notification text more generic

* feat(notifications) skip join notifications when meetings grow large

* fix(external-api): Avoid naming event 'error'

- EventEmmitter treats 'error' as a special case and throws error.

* chore(config): Whitelist `disableRecordAudioNotification` config

* fix(android): renames amplitudereactnative project to use react-native- pattern

* task(android): updates sdk version

* chore(config) fix spacing

Removed a redundant space under maxBitratesVideo.

* fix(toolbox): Show dominant speaker name only when in conference

* feat(rtcstats): send dominant speaker stats (jitsi#9883)

* send dominant speaker stats

* fix lint

* chore(deps) lib-jitsi-meet@latest

* fix(LocalSdpMunger): do not fake video sdp when screen sharing
* fix(JitsiConference) avoid extra processing if the room was left
* fix(moderator) remove unneeded log

jitsi/lib-jitsi-meet@b0d27fa...28a5355

* feat(config): Add config option for e2ee label

* fix(prejoin) Fix buttons positioning for 3rd party

* feat: Turn on enableLayerSuspension option by default. (jitsi#9894)

* fix(config) Add more info about enableLayerSuspension option.

* chore(deps) lib-jitsi-meet@latest

* Update config.js

Co-authored-by: Saúl Ibarra Corretgé <s@saghul.net>

Co-authored-by: Saúl Ibarra Corretgé <s@saghul.net>

* feat(rn) add polyfill for the performance API

Implements: https://developer.mozilla.org/en-US/docs/Web/API/Performance
Ref: https://github.com/oblador/react-native-performance

* feat(config) add connection indicators flags

* feat(responsive-ui): Keep aspect ratio for filmstrip self view on mobile web (jitsi#9848)

* feat(responsive-ui): Keep aspect ratio for filmstrip self view on mobile web

Right now filmstrip displays self view in landscape mode.
With these changes the aspect ratio of the self view will be maintained
so on portrait mode the thumbnail will be displayed vertically.
Of course this makes sense only on mobile web.

* Code review

* Fix height

* feat: Dynamically limit the number of participants in a room (jitsi#9880)

* Dynamically limit the number of participants in a room

* Remove log

* fix(config): Add separate entries for the e2ee labels

* feat(config) Add config for disabled sound id's

- unify naming for sound id values

* feat(doc) revamp README

* fix(rn,polyfills) fix Performance polyfill

We need to re-override now() to avoid a recursion error. Also I missed the
default export.

* feat: new prosody module to report census of all rooms (jitsi#9901)

* new prosody module to report census of all rooms

* changed to use util to check if it's a test room

* improved docs

* more doc improvements

* updated to use muc_domain_prefix

* facepalm

* fix(notifications): Added  user join notification keys

* lang: Complete translation to Portuguese (jitsi#9871)

* Complete translation to Portuguese

* "reactions" and "connectedThreePlusMembers" fix

* additional bcp47 languages

* chore(deps) lib-jitsi-meet@latest

* fix(RTCUtils) Return false for device change checks on mobile Safari.

jitsi/lib-jitsi-meet@735943b...ad1f06d

* fix(settings) Disable mic/camera selection on mobile safari.
Creating a preview of the same audio/video track kills the tracks that is already being shared in the conference. Therefore, disable camera/mic selection in the settings dialog while the user is in the call. The devices are selectable from the prejoin screen settings dialog.

* feat: Add configuration to disable removing raised hand on dominant speaker (jitsi#9641)

* Add configuration to disable removing raised hand on dominant speaker change

* Fix lint problem

* Avoid dispatching unnecessary action

* Fix lint problem

* feat: Add configuration to disable chat emoticons jitsi#9889 (jitsi#9899)

* feat: Additional setting to order participants in speaker stats (jitsi#9751)

* Additional setting to order participants in speaker stats jitsi#9742

* Setting to order speaker stats optimisations jitsi#9742

* Lint fixes jitsi#9742

* Replace APP references jitsi#9742

* Lint fixes jitsi#9742

* Setting to order speaker stats optimisations 2 jitsi#9742

* Lint fixes jitsi#9742

* Remove unnecessary param jitsi#9742

* Add more speaker-stats reducer _updateStats docs  jitsi#9742

* feat(external_api): Command to set participant volume

* fix(prejoin): Change avatar color to match in-meeting one

* fix(rn,shared-video,invite-dialog) fix placehoolder text color to be visible

* feat(av-moderation) Updated Advanced moderation (jitsi#9875)

Co-authored-by: Vlad Piersec <vlad.piersec@8x8.com>

* fix(context-menu) Hide toolbars when participant context menu opened (jitsi#9842)

- hide toolbars only when in tile view
- fix community issue: jitsi#9818

* Thumbnail reordering and participant pane enhancements.

* fix(participant-pane) Use the sorted participant list from redux instead of sorting it on every render making it better performant. Match the participant order with that of the order in the filmstrip. Also move the participants with raised hand to the top of the list.

* ref(filmstrip) Move enableThumbnailReordering flag to testing section.

* fix(participants) Add new selectors for getting sorted participants.

* fix: Add different text when disablePolls is enabled/disabled (jitsi#9900)

* Add different text when disablePolls is enabled/disabled jitsi#9890

* Add different text when disablePolls is enabled/disabled v2 jitsi#9890

* lang: update German translation (jitsi#9921)

Signed-off-by: Christoph Settgast <csett86@web.de>

* chore(deps) lib-jitsi-meet@latest

* ref(JitsiConference): don't crash on wrong oldTrack (jitsi#1709)

jitsi/lib-jitsi-meet@ad1f06d...64cdf69

* Use redux for local tracks instead of conference.js (jitsi#9920)

* do not use this.local video

* move tracks initialized flag around

* do not use this.localAudio

* untangle use audio/video stream methods

It should be safe to call setVideoMuteStatus and
setAudioMuteStatus regardless of the prejoin page
visibility state.

* add NO-OP to use track methods and fix crash
in _setLocalAudioVideoStreams on not a promise

* use allSettled

* feat: Whitelists enableUnifiedOnChrome.

Whitelists it, so we can run tests by setting it to false.

* chore(deps) lib-jitsi-meet@latest

* fix(replaceTrack):  Don't wrap Error in Error.

jitsi/lib-jitsi-meet@64cdf69...fbf85bd

* feat(toolbar-buttons): Add event for notify overwritten toolbar buttons

* fix(context-menus) Fix participant context menus/toolbar overflow menu

- on ipads, long touch open dialog now opens the context menu to the left of the thumbnail as expected
- on ipads, now we close context menus on tap out
- fix case when participant context menu's height > tileview videos' height causing scroll on videos pane
- keep toolbox open while the overflow menu is shown
- keep remote participant video thumbnail in filmstrip visible even if toolbox is hidden, if context menu is opened
- Fix bug where toolbox could be completely disabled

* Show reactions buttons at all times

Don't send reactions via the channel if there's only one participant in the meeting

* feat(android) expose channels ids

* fix(rn) disable pip while authorising dropbox

* fix(shared-video) make placeholder translatable

Also fix capitalization.

* fix(rn,shared-video) validate URLs to avoid crashes on the native side

* fix(rn,conference) count fake participants when checking if lonely meeting

A shared video participant counts, so the lonely meeting invite options can
disappear.

* feat(rn,conference) show invite button on the top navbar

* fix(conference.js): add tracks to the conference

* fix(av-moderation) Advanced moderation improvements (jitsi#9935)

* Update moderation in effect notifications

Only display one notification for each media type. Display notification for keyboard shortcuts as well

* Update muted remotely notification

Display name of moderator in the notification

* Fix indentation on moderation menu

* Update text for video moderation

* Added moderator label in participant pane

* Update microphone icon in participant list

For participants that speak, or are noisy, but aren't dominant speaker, the icon in the participant list will look the same as the dominant speaker icon but will not change their position in the list

* Added sound for asked to unmute notification

* Code review changes

* Code review changes

Use simple var instead of function for audio media state

* Move constants to constants file

* Moved constants from notifications to av-moderation

* fix(rn,conference) show underlay when tapping navbar buttons

* fix(feedback): Scroll to the top when opening feedback dialog

* feat(rn,connection) enable XMPP WebSocket on mobile

Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>

* feat((rn,config) add a/b test flag to enable XMPP WebSockets on mobile

* fix(filmstrip) Fix filmstrip on RN when thumbnail reordering is disabled.

* fix(context-menus) Don't show volume slider on iOS web

* fix(device-selection) Do not create preview when mic selection is disabled.
This fixes an issue on mobile Safari when audio is lost after the user opens the device selection menu.

* fix(Filmstrip) fix not being able to scroll

* fix(prejoin) implement ux improvements for mobile (jitsi#9939)

* android: fix initializing soloader from Activity context

It has to be an application context.

* fix: Fixes undefined error causing to stop reloads.

Jibri was hitting a problem where it reloads and in certain cases (remote user is screensharing) we hit this participant undefined, which stops reload and stops recording.
It is still not obvious why we try to render this on leaving the conference and for a participant that is not in the conference ... this re-render should not happen as this component should be removed from its parent when the participant is not existing.

* chore(deps) lib-jitsi-meet@latest

* fix: Reads shard name and from disco-info if available.
* chore(deps): bump sdp-interop to get another fix for ICE restart
* update sdp-interop to include Unified ICE restart fix

jitsi/lib-jitsi-meet@fbf85bd...609e3d5

* fix(recorder): tile view

In the case of the recorder we were not taking into account that the
local thumbnail is not visible. This was braking the rendering  and
positioning of the thumbnails in tile view.

* fix(lang) update Russian translation

Co-authored-by: Alexey Matveev <malex@1forma.ru>

* fix(jaas) do not show overriden unsupported browser page for jaas users (jitsi#9962)

* fix(notifications) Fix recording start notif not disappearing

* feat(conference-info-header) Make conference info header configurable. (jitsi#9638)

* chore(deps) lib-jitsi-meet@latest

* fix(JitsiConference) Check for room before calling isFocus method on the room object.
* fix(Jingle) Reverse the order of ssrcs signaled for Firefox. This fixes an issue where the bridge doesn't forward the HD stream from Firefox to other users in the call. The order of the ssrcs produced by the browser is from Highest resolution to lowest whereas the bridge assumes it to be from lowest to highest as is the case in Chrome and Safari.
* fix(codec-selection): Impose VP9 bitrates only when VP9 is the negotiated codec. If Jicofo doesn't offer VP9 but the client expresses a preference for VP9, VP9 bitrates were being imposed before.

jitsi/lib-jitsi-meet@609e3d5...3b8baa9

* feat(e2ee) disable e2ee when large number of participants

* fix(responsive-ui): Shrink self view when in portrait mode on mobile web

* fix(config,notifications) fix rendering moderator notifications (jitsi#9986)

Move DISABLE_FOCUS_INDICATOR from interface_config.js to config.js (disableModeratorIndicator).

* fix(reactions) Reactions improvements (jitsi#9964)

* Register shortcuts on mount

* Changed icon for reactions menu

* Enable reactions by default

* Fix unreadCount bug

When having unread messages and sending a reaction the unread count now shows the correct count

* Fix overflow menu bottom color when reactions are enabled

* Revert raise hand icon

* Update raise hand functionality

On desktop show raise button with arrow for reactions. Only show raise hand in the reactions menu on mobile

* Fix lint error

Add required prop to ToolboxButtonWithIcon

* Legacy support for enable reactions

If disableReactions is undefined treat it as true

* Remove unnecessary code

* Fix unread counter showing negative count

* Fix unreadCount with reactions

UnreadCount ignores all reactions messages

* Fixed typo

* Fix background color

* feat(api): Expose event used for sending browser support

* fix(av-moderation) Display Allow Video instead of Ask to Unmute (jitsi#9991)

When the user is allowed audio but not video display Allow Video button instead of Ask to Unmute

* feat(rn,av-moderation) updated advanced moderation on Native

Updated participants list to:
- show Moderator label
- show correct status icons (red for force muted)
- show participants in the right order

Updated moderation to:
- show moderation menu at all times
- make moderation options functional

Updated notifications:
- fixed raise hand to show name
- display moderator rights granted

Updated mute/ stop video for all dialogs to include moderation toggles

Added ask to unmute button

Fix comments on ask to unmute

Co-authored-by: robertpin <robert.pin9@gmail.com>

* chore(rn,versions) bump sdk version

* fix(av-moderation) - Mute/ stop video except no longer change moderation status

Mute everyone else no longer disables moderation

* Fix stop everyone's video

Stop everyone's video now also stops screensharing for the moderator that did the action, not just video

* fix(participants-pane) bring back lobby reject button

It got accidentally removed in:
jitsi@1dc8bfa#diff-ef66b8ab7c899b16d6c1102b3c812aa45509f95e11267cbfdbd0674143e94575

* fix(lobby) don't mix web and native actions on the same file

USe actions.any for common actions.

* fix(toolbox) don't mix web and native actions on the same file

* fix(ios) fix black screen when using Bluetooth in iOS 15

Fixes: jitsi#9996

On iOS 15 Bluetooth devices are reported twice for some reason, one with the
normal type "Bluetooth" but another type without a know (to me) type, and the
uid ends in "-reference".

While we send those unkwno devices to JS, we were not filtering them properly.
This patch skips them altogether.

* fix(rn) add default value when retrieving e2ee redux state

* fix(lang) update occitan translation

* fix(ios) create audio track early

In iOS 15 we observe that not creating the audio track early may result in not
getting audio after unmuting for the first time.

Creating the audio track early means the first unmute doesn't need to add the
track to the conference, resulting in a much faster operation.

Note that creating the track early doesn't mean we will start unmuted, the track
will be muted.

* fix(chat): Hide scroll bar on chat input

Based on this suggestion jitsi#9958

* fix(subject): Keep subject centered when chat panel is open

* fix(av-moderation) Only stop screensharing on Stop everyone's video

* fix(toolbar) Fix toolbar always visible; refactors

- deprecate `INITIAL_TOOLBAR_TIMEOUT`, `TOOLBAR_ALWAYS_VISIBLE`, `TOOLBAR_TIMEOUT`

* chore(interface-config) Group deprecated configs

* fix: Speaker stats search fix jitsi#9751 (jitsi#10019)

* Optimization of speaker stats display names jitsi#9751

* Fix speaker stats search for empty string jitsi#9751

* fix(lang) update french translation

* fix(av-moderation) Stop screensharing and video on moderation start

When video moderation starts, stop screensharing and ignore if video was on when sharing started

* feat(dynamic-branding): Add branding option for virtual backgrounds

* fix: Fixes errors in prosody about string formatting and nil values. (jitsi#10037)

* fix: Fixes errors in prosody about string formatting and nil values.

error   Traceback[c2s]: /usr/lib/prosody/util/format.lua:59: invalid option '%b' to 'format'
stack traceback:

mod_polls.lua:25: attempt to index local 'data' (a nil value)
stack traceback:

* squash: Fix more formatting concatenation.

* lang: Update main-ar.json (jitsi#10034)

Adding missing keys and translate them

* lang: minor fix in russian localization (jitsi#10027)

* - minor fix in russian localization

* - minor localization fix

Co-authored-by: Alexey Matveev <malex@1forma.ru>

* fix(av-moderation) Improve advanced moderation (jitsi#10004)

* fix(av-moderation) Improve advanced moderation

Hide moderator label on disasbleModeratorIndicator
 - On disasbleModeratorIndicator config hide moderator label from participants pane

Add Ask to Unmute button to mobile web

* Fix lint error

* fix(android) removes unnecessary parcel processing

* fix(lang) update Occitan translation

* fix(config) fix prejoin throwing a TypeError due to late config initialization (jitsi#10041)

* fix(android) disables uncompressed native libs usage

* fix(invite) fix video rooms not being displayed in invite search

* feat(av-moderation) Ask to Unmute and remove from Whitelist (jitsi#10043)

* feat(av-moderation) Ask to Unmute and remove from Whitelist

Make Ask to Unmute work without moderation
Add remove from moderation whitelist functionality

* chore(deps) lib-jitsi-meet@latest

* feat(av-moderation) Remove from moderation whitelist functionality (jitsi#1729)
* fix(chore) corrected typo in log message
* fix(e2ee) replace nullish coalescing with or
* fix(e2ee) restore initial key when RATCHET_WINDOW_SIZE reached

jitsi/lib-jitsi-meet@3b8baa9...0646bc3

Co-authored-by: Дамян Минков <damencho@jitsi.org>

* fix: Fix speaker stats search dependency and remove duplicate logic jitsi#9751 (jitsi#10045)

* Fix speaker stats search dependency and remove duplicate logic jitsi#9751

* Fix speaker stats component render on update jitsi#9751

* feat(rtcstats): remove SDP transmission jitsi#10054

* feat(lang) add helper script for manual translations

It updates the main language file for a given locale from the canonical one and
sets the empty string on the missing keys. No longer used keys are discarded.

* fix(lang) sample run of the translations updating script

* feat(ios) drop support for iOS 11

* chore(deps) lib-jitsi-meet@latest

* fix(Jingle) Log the extracted info from Jingle IQ.
* ref(Jingle) Alpha sort and prefix the local functions with '_'
* ref(Jingle) Log formatted source information. Instead of logging the full IQs for Jingle messages like session-initiate, source-add and source-remove which can be very long, log just the formatted source information.
* ref(RTC) rename iceConfig to pcConfig. It makes more sense to call it pcConfig since it is the RTCConfiguration object passed to the WebRTC peerconnection.
* fix(logging) Log only the imp events on remote tracks. Log only the important events that we care about on the HTMLMediaElement that the remote tracks are attached to.

jitsi/lib-jitsi-meet@0646bc3...ae70962

* fix(logging) Remove logs that are very chatty.
The receiver video constraints that are actually sent to the bridge are logged in LJM and need not be logged in the application.

* fix(chore): Don't show react "unique key" warning

* fix(ios) fix crash on WebSocket errors

Bacckport
facebook/react-native@748aa13

Fixes:

~~~
Fatal Exception: NSInvalidArgumentException
0  CoreFoundation                 0x129708 __exceptionPreprocess
1  libobjc.A.dylib                0x287a8 objc_exception_throw
2  CoreFoundation                 0x19b9c8 -[__NSCFString characterAtIndex:].cold.1
3  CoreFoundation                 0x1a7a20 -[__NSPlaceholderDictionary initWithCapacity:].cold.1
4  CoreFoundation                 0x164c0 -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]
5  CoreFoundation                 0x8de0 +[NSDictionary dictionaryWithObjects:forKeys:count:]
6  JitsiMeetSDK                   0x5704b4 -[RCTWebSocketModule webSocket:didFailWithError:] + 168 (RCTWebSocketModule.m:168)
7  JitsiMeetSDK                   0x54a5ec __33-[RCTSRWebSocket _failWithError:]_block_invoke_2 + 622 (RCTSRWebSocket.m:622)
8  libdispatch.dylib              0x2a84 _dispatch_call_block_and_release
9  libdispatch.dylib              0x481c _dispatch_client_callout
10 libdispatch.dylib              0xc004 _dispatch_lane_serial_drain
11 libdispatch.dylib              0xcc00 _dispatch_lane_invoke
12 libdispatch.dylib              0x174bc _dispatch_workloop_worker_thread
13 libsystem_pthread.dylib        0x37a4 _pthread_wqthread
14 libsystem_pthread.dylib        0xa74c start_wqthread
~~~

* feat(external-api) add data-channel-open event

Signals that the bridge channel is open. It may take a few ms to get established
after the conference join, so applications might be interested in using it once
ready.

* feat(android) target sdk 31

* fix(Prejoin): Join click before conference.init()

* fix(prejoin): Prevent double joining conference.

* chore(deps) lib-jitsi-meet@latest

* fix(browser-support) fix detecting iOS browsers correctly
* fix(JitsiConference):2 instances for the same room
* ref: sendMuteStatus is not async

jitsi/lib-jitsi-meet@ae70962...c15dda1

* feat: Simplify AV moderation participant approve/remove message and fix array usage. (jitsi#10062)

* feat: Simplify av moderation participant approve/remove message.

There is no point of having messages like:
{
  "room": "myroom@conference.mydomain.com",
  "type": "av_moderation",
  "mediaType": "audio",
  "removed": true,
  "approved": true
}

* fix: Fixes array in json.

fix: Fixes array in json.

* fix: Fixes jitsi#9869 Lobby and wrong password case.

* chore(deps) lib-jitsi-meet@latest

* fix(xmpp): disable RTX for Firefox < 93, because it results in random SSRC order
* fix(Jingle): stop reverting the SSRCs from Firefox

jitsi/lib-jitsi-meet@c15dda1...7a56f7b

* feat(android) extract notification channel name

* chore(deps) lib-jitsi-meet@latest

* fix(JitsiConference) make sure isE2EEEnabled() returns a boolean
* fix(loggging) fix exceptions on mobile

jitsi/lib-jitsi-meet@7a56f7b...afc1c34

* fix(rn,conference) fix unmute when "everyone starts muted" is set

Since iOS 15 we really need the audio stream to exist, so make sure we don't
destroy it even when "everyone starts muted" is set, we'll just mute it.

Fixes: jitsi#10053

* chore(deps): update react-native-webrtc@1.92.2

Fixes a crash on Android

* fix: Fixes displaying country names which has multiple names listed.

Some countries have multiple names listed in i18n-iso-countries, like US -> ['United States of America', 'USA'].

* fix(av-moderation) Check for moderation support

Show av moderation toggles on mute all / stop everyone's video dialogs only if moderation is supported
Show Ask to Unmute only for moderators

* fix: Skips setting language for transcriptions if not enabled.

* chore(deps) lib-jitsi-meet@latest

* fix: Avoids sending empty nick in presence.

jitsi/lib-jitsi-meet@afc1c34...b5288c2

* fix(config, reactions) Added config option to disable reaction sounds (jitsi#10046)

* fix(reactions) Remove vpaas check for reactions webhook (jitsi#10089)

Reactions will be sent if webhookProxyUrl is set in config.js

* fix(av-moderation) Show Mute button when participant is unmuted (jitsi#10090)

Show Mute button instead of always showing Ask to Unmute

Added aria-label

* fix(av-moderation) Fix Ask to Unmute

Make ask to unmute work even if the participant is already whitelisted for audio

* call module that checks the jwt against the access service

* lang: Update main-it.json (jitsi#10088)

* Update main-it.json

* Update main-it.json

added a missing comma...

* Update main-it.json

added all the missing commas...

* Update main-it.json

will this be the last comma I left behind? Who knows...

* lang: added and translated all missing keys on turkish translation (jitsi#10050)

* feat(screenshot-capture) Updated screensharing screenshot capture

Changed screen capture to non effect. Effects are used to alter the stream, this feature does not need to alter the stream, it just needs access to it

Changed image diff library. Previous library diff’ed the whole image, the new one has en early return threshold

Use ImageCaptureAPI to take the screenshot. Added polyfill for it and polyfill for createImageBitmap

Added analytics

* fix(av-moderation) Update function that calculates quick action button

* feat(config): Add config option for making display name read only

* fix(tracks) Always add audio track on Safari.
This fixes an issue where Safari users cannot hear remote audio if they join audio/video muted. The browser throws the following error when the application tries to execute play on the audio element: 'NotAllowedError: The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.' This started happening in Safari 15.

* janeify the app a little bit

* change meta browser icon to jane

* Update README.md

* force mobile to open desktop view

tweaks for mobile browser

* use jwt token auth server for development

* send beacon back to jane when exiting a chat

* Update README.md

* TEL-53 add window.close() to "hangup" function

TEL-38 remove info-dialog button and popover.

* TEL-72 & store the last visited jwt URL to localstorage, bring back IOS mobile browser checking condition

* replace watermark.png

* fix the thunk getState issue in react native

* switch "DEFAULT_SERVER_URL" to jwt server url for React native. and stop sending beacon temporarily.

* better refresh last visited url logic

* move the refresh last url function to connection.js.

* send started_at back to Jane

* remove video resolution constraint setting for firefox

* Add bugsnag to bundle and change the app store redirecting link url.

* remove refresh last visited URL.

* update sendBeacon condition for Test call.

* keep browser's url params

* add refresh page button

* Update jane video chat logo and add version number to index.html's static asset url

* add bugsnag notify action to conference and connection listener

* update RefreshButton component

RefreshButton will only show if there is only one participant and no remote tracks from RTC.

* add "isPad" condition for redirecting user to app store in safari on ipad.

* update index.html's js/css assets src path version.

* hide "screen share" button on android device.

* Update conference reducer and action for dispatching the correct startedAt time to participant_left endpoint.

Also bring back the duration timer.

* remove unused code

* rename "CONFERENCE_STARTED_TIME_CHANGED"  to "SET_CONFERENCE_START_TIME"

* disable using Gravatar or other avatar services

* fix the refresh button is blocking the setting button issue

* front end app will not use prosody's conference duration.

* remove watermark logo's a link

* Remove "Beer kiss face blush heart" from smileys emoji.

* html-webpack-plugin for generating assets version number

* add WaitingMessage component as the reminder for the first call participant

* update index.html & webpack config

* fix watermark issue in welcome page

* remove unused code and update the appointment start timestamp condition

* fix moment locale issue in "WaitingMessage" component.

* make eslint happy

* make flow & lint happy.....

* update the conferenceWillLeave send beacon condition.

* Copied template from janeapp/jane

* Remove sections not relevant to this repo

* Add note/link: how to test video-chat inside Jane Desktop locally

* Copy relevant updates from template in janeapp/jane

* Remove parts irrelevant to this repo

* only instantiate bugsnag client in production env.

* add ProximaNova regular thin semi-bold fonts

* Merge pull request #38 from janeapp/IMPT-3-Create-custom-events-and-property-for-sending-more-participant-statistics-data-to-amplitude

* Merge pull request #37 from janeapp/TEL-277-Feature-flag-for-Selectable-HD-quality-(web)

[TEL-277] Feature flag for selectable hd quality (web)

* Merge pull request #45 from janeapp/IMPT-398-Only-send-the-Poor-connection-events-to-Amplitude

[IMPT-398] Only send the Poor connection events to Amplitude

* Merge pull request #51 from janeapp/IMPT-362-Pad-the-video-so-it-can-be-a-max-of-N-pixels

[IMPT-362] Pad the video so it can be a max of N pixels

* Merge pull request #53 from janeapp/SCH-263-HD-video-quality-alert

[SCH-263] HD video quality alert

* Merge pull request #50 from janeapp/IMPT-41-Use-the-time-format-from-Jane

[IMPT-41] Use the time format from Jane

* Merge pull request #25 from janeapp/TEL-290-Jane-waiting-area-component

[IMPT-60] Telehealth waiting area/ practitioner tool (web)

* Merge pull request #55 from janeapp/Fix-sd-video-feed-is-too-small

[Fix] SD Video feed is too small

* Merge pull request #56 from janeapp/SCH-301-Make-language-consistent-in-Waiting-Room-UI

[SCH-301] Make language consistent in Waiting Room UI

* Build a nginx web container using the compiled video-chat app (#67)

* Build a nginx web container using the compiled video-chat app

* Add apple-app-site-association file

* Inject bugsnag api key from env before compiling

* Log real client IPs in nginx container (#78)

* Set nginx real IP header and log format

This is so we log the IP that the client is connecting from, and not
just the ALB IP.

* Activate custom log format

* Merge pull request #60 from janeapp/SCH-322-Update-the-authentication-failed-error-modal-in-jitsi

[SCH-322] Update the "authentication failed" error notification in jitsi

* Merge pull request #62 from janeapp/SCH-340-video-chat-app-sends-the-participant-left-post-request-twice-to-jane

[SCH-340] Video chat web app sends "left waiting room" signal twice to Jane when user hangs up the call

* Merge pull request #70 from janeapp/LANG-19-Telehealth-Translations-jitsi-web-app

[LANG-19] Telehealth Translations (Web app)

* Merge pull request #79 from janeapp/fix-contrasting-brightness-shades-in-the-video

[Fix] strange contrasting brightness shades in the video

* Merge pull request #85 from janeapp/SCH-460-Telehealth-video-is-zooming-in-and-out-during-call

[SCH-460] Telehealth video is zooming in and out during call (web app)

* Merge pull request #76 from janeapp/SCH-393-Display-Treatment-length-not-scheduled-length-in-Appointment-Moda

[SCH-393][Web app] Display Treatment length not scheduled length in Appointment Modal

* Merge pull request #69 from janeapp/SCH-373-Move-Appointment-details-modal-to-the-side-of-the-screen

[SCH-373] Move Appointment details modal to the side of the screen

* Merge pull request #82 from janeapp/jane-online-appointments-activity-log

Jane Online Appointments Activity Log [Web app]

* Merge pull request #89 from janeapp/increase-the-z-index-of-the-waiting-room-modal

Increase the z-index of the waiting room modal

* Merge pull request #88 from janeapp/SCH-525-Analytics-events-to-track-waiting-room-socket-message-and-admit-button-actions

[SCH-525][Web app] Analytics events to track waiting room socket message and admit button actions

* Merge pull request #92 from janeapp/make-the-modal-text-responsive

Make the waiting room modal text responsive

* Merge pull request #93 from janeapp/fix-video-zooming-in-and-out-on-firefox

[Fix] video is zooming in and out on firefox

* Merge pull request #91 from janeapp/polling-fallback-when-socket-fails

[SCH-531]Implement polling fallback for waiting room if websocket fails

* Merge pull request #96 from janeapp/fix-connectionPromise-is-undefined

[SCH-665] Conference connection is undefined when user joins the session from waiting room [web app]

* Enable the nginx stub_status endpoint for datadog monitoring

* Merge pull request #100 from janeapp/fix-connectionPromise-is-undefined-follow-up-PR

Fix connection promise is undefined (follow-up)

* Disable e2eping

* Change builder stage from node:latest to node:lts

Looks like latest switched from node 16 to 17 yesterday, and this has
errors.

* Update builder image to use node:16 instead of node:lts

To make sure we pin node version 16

* waiting room button ui fix

* remove unused toolbar buttons.

* Remove testing section which effectively enables firefox simulcast

Also add some default values to make sure they are set as expected

* Allow setting channelLastN with env var

* Disable unneeded features and reduce minimum height constraint

* Go back to 180 minimum height

It doesn't go any lower in my testing

* disable the reactions menu.

* disable jitsi remote control

* fix lint & flow errors

* Do not instantiate Transport Object for RN webview page & remove unused code

* remove unused button for test call

* stop showing the room name and video quality display in conference info.

* Change domain name from meet.jitsi to meet.jane

(cherry picked from commit ad5eacc)

Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>
Co-authored-by: Hristo Terezov <hristo@jitsi.org>
Co-authored-by: Alex Bumbu <alex.bumbu@8x8.com>
Co-authored-by: José Luís Andrade <32515675+jluisfa@users.noreply.github.com>
Co-authored-by: chagai95 <31655082+chagai95@users.noreply.github.com>
Co-authored-by: cfriedlander <chagai.friedlander@aarenet.com>
Co-authored-by: Mejans <61360811+Mejans@users.noreply.github.com>
Co-authored-by: phict <phict4@hotmail.com>
Co-authored-by: hmuresan <horatiu.muresan@8x8.com>
Co-authored-by: tmoldovan8x8 <62697631+tmoldovan8x8@users.noreply.github.com>
Co-authored-by: Cross <github@dillfrescott.com>
Co-authored-by: Vlad Piersec <vlad.piersec@8x8.com>
Co-authored-by: Andrei Gavrilescu <51706180+andrei-gavrilescu@users.noreply.github.com>
Co-authored-by: Jaya Allamsetty <jaya.allamsetty@8x8.com>
Co-authored-by: Jaya Allamsetty <54324652+jallamsetty1@users.noreply.github.com>
Co-authored-by: Saúl Ibarra Corretgé <s@saghul.net>
Co-authored-by: Tudor D. Pop <tudor.dan.pop7@gmail.com>
Co-authored-by: vp8x8 <37841821+vp8x8@users.noreply.github.com>
Co-authored-by: abora8x8 <56257143+abora8x8@users.noreply.github.com>
Co-authored-by: Horatiu Muresan <39557534+horymury@users.noreply.github.com>
Co-authored-by: scott boone <sawall@users.noreply.github.com>
Co-authored-by: ashiqhassan95 <ashiqhassan95@gmail.com>
Co-authored-by: Andrei Gavrilescu <gavrilescu.andrei90@gmail.com>
Co-authored-by: dimitardelchev93 <43634401+dimitardelchev93@users.noreply.github.com>
Co-authored-by: Izak Glasencnik <izak.glasencnik@gmail.com>
Co-authored-by: robertpin <robert.pin9@gmail.com>
Co-authored-by: csett86 <csett86@web.de>
Co-authored-by: Paweł Domas <pawel.domas@jitsi.org>
Co-authored-by: Дамян Минков <damencho@jitsi.org>
Co-authored-by: Pawel Domas <2965063+paweldomas@users.noreply.github.com>
Co-authored-by: Avram Tudor <tudor.potecaru@gmail.com>
Co-authored-by: Alexey Matveev <develop.iapps@gmail.com>
Co-authored-by: Alexey Matveev <malex@1forma.ru>
Co-authored-by: titus.moldovan <titus.moldovan@8x8.com>
Co-authored-by: Damien Fetis <damien.fetis@renater.fr>
Co-authored-by: Ali Alhaidary <75235623+ali-alhaidary@users.noreply.github.com>
Co-authored-by: Tudor-Ovidiu Avram <tudor.potecaru@8x8.com>
Co-authored-by: alexbratu92 <alexbratu92@gmail.com>
Co-authored-by: chipechop <chipechop@users.noreply.github.com>
Co-authored-by: Suleyman BİLGİN <hi@suleyman.dev>
Co-authored-by: zain <zain@jane.app>
Co-authored-by: Zain Amarshi <zamarshi1@gmail.com>
Co-authored-by: Ivan Jiang <>
Co-authored-by: gerbus <christopher.x.gerber@gmail.com>
Co-authored-by: Chris Warren <chris.warren@jane.app>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
demoed Demoed with a PO or key stakeholder Risk - Med Medium risk of disruption to codebase or infrastructure.
5 participants