brave / brave-talk Goto Github PK
View Code? Open in Web Editor NEWUnlimited private video calls with your friends and colleagues
License: Mozilla Public License 2.0
Unlimited private video calls with your friends and colleagues
License: Mozilla Public License 2.0
with master, staging, and development branches for the beta site. the alpha site branches can stay here.
before releasing, please have a security review to ensure we aren't leaking anything...
also: we would keep this repo private, just mark it deprecated...
development-beta
, staging-beta
and master-beta
to that repo, dropping the beta suffixdevelopment-dev
branch works tooAt this point all development must move to brave-talk.
brave-talk
publicres ipsa loquitur
Res ipsa loquitur
This repo uses Prettier
as a code review tool. @diracdeltas brought to our attention, however, that a majority of other Brave repos use Standard
as their code review tool.
Standard
is a linter AND can function as a formatter while Prettier
is only formatter. This means Standard
fixes formatting just like Prettier
but also catches code quality issues.
https://prettier.io/docs/en/comparison.html
Complete Standard
documentation:
https://standardjs.com/
I believe we will have to use the TypeScript variant.
https://standardjs.com/#can-i-use-a-javascript-language-variant-like-flow-or-typescript
Consecutive newline characters message not shown on desktop
iOS | Desktop |
---|---|
![]() |
![]() |
Consistency across platforms
cc: @mrose17
This was disabled for #81 ... since the issue hasn't re-appeared, we should probably re-enable the expiration.
At a meeting this morning, we noticed someone joined with a virtual-background already configured, but it wasn't applied for the first second or so after they joined, and I could see their real environment.
This is unpleasant if someone is relying on that feature to protect their privacy. We should make sure not to send video until the background replacement is functioning.
See #50 (comment) for details. codeql is set up in #103 but may need someone to set it up as a required status check for PRs in github settings after it is merged.
On the brave talk home page, in addition to the "start a call" button add a "create a link for later" button.
This should:
I.e. all the same steps as actually creating the room, but instead of opening the call it copies the url to the clipboard.
I can't repro this now but I've run into this twice now so figured I would file an issue and update it if it happens again.
Every now and then Brave Talk spins indefinitely for me i.e. I would go to a room and it would be stuck in a loading phase. This has happened on both Brave Nightly and Stable. Unfortunately I forgot to capture a screenshot + console log, I'll come back and update this issue if it happens again.
@fmarier mentioned that this might happen if I'm on Secure DNS + on VPN.
cc @mrose17
On e.g. conference room systems used just for Brave Talk, the home page may remain displayed for many hours.
If there are recordings, this will continue to show long-expired recording links. It also may potentially be using an old version of the brave talk code.
When sitting on the home page for a long time, Talk should periodically refresh - perhaps a multi-hour http meta refresh would be sufficient, although this might interrupt calls which would not be desirable.
Thanks to @bradleyrichter for the report.
We have very limited visibility of talk product usage currently, making it difficult to prioritise product changes. This issue proposes improvements to stats collection, with the aim of carefully ensuring we do not break user's privacy.
Currently the subscriptions service logs and presents to metabase each time a room is created, with the following data:
Column | Description |
---|---|
name | the room name |
tier | paid (for subscribers) or free (for 1:1 calls) |
head_count | the number of JWT's issued to allow entry to the room (incremented every time a new JWT is issued) |
created_at | when the room was initially created |
Note head_count represents the total number of people who have been issued a token to enter the room. So a weekly meeting of 60 people would present a head count of 60*4 = 240 over a typical month.
Two particular cases make analysis difficult currently:
This issue proposes that in addition to the above we log and present to metabase each time we issue a token for entry to a room:
Column | Description |
---|---|
room_identifier | a unique identifier derived from the room_name e.g. hash(room_name + nonce) |
timestamp | when the event happened |
event | "created" - the room was created; "joined" - a ticket to join the room was issued; "moderator-renew" - a renewal of the moderator ticket was issued |
new_mau | true or false: was this use flagged to 8x8 as a new monthly active user? |
tier | paid (for subscribers) or free (for 1:1 calls) - only populated on "created" events |
No additional data is stored against these events, just those four fields. In particular there is no link to the user, the subscriber or user agent.
With this data, we can better understand long term usage of rooms, and better predict our cost base - addressing both of the limitations noted above.
This approach will be subject to privacy review before implementation.
The question is where to get the data from...
When a moderator sets a passcode, persist this in the subscription service.
This requires webhook support, which is being investigated.
Change 1x1 rooms in the free tier to allow 4 people. All other features remain the same, including the Ads-enabled requirement. The change affects new rooms only. See spec for details. https://docs.google.com/document/d/1Y066v3YFLNYg4UzKvUYzOV-PaB3Gbwqmdmv4mXGKiDg/edit#
After 3 times, set extension_promo_dismissed
to true
It would be great to have some kind of an icon that only appears on top level UI when a Talk session is active. The button would go back to a Brave talk video. I find I sometimes lose the tab too easily because it’s mixed with other tabs. I wouldn’t want the button there when no Talk session is active though.
Perhaps using a different task bar icon is another possibility.
I think the media icon might be the best place to put it where playing videos go.
Show proper message when a user doesn't select any POAP/NFT when creating a Web3 Talk room
Start Web3 call
Sorry, you are not a subscriber
message instead of showing the actual reasonShould show the actual reason for not creating the room
cc: @mrose17
Dropdown chevron should be in alignment with the expand/collapse buttons
https://talk.brave.software
Start a Web3 call
cc: @mrose17
Every participant is shown as Moderator
Should only show the room creator as Moderator
cc: @mrose17
This is a fork/branch of the Jitsi calendar plugin in order to add a Brave Talk confab URL to a calendar entry. The idea is to put the CRX file on Brave Talk so folks who use Google Calendar can add a confab URL to the calendar invite, e.g.,
(Note that the icons are still Jitsi icons. These will be updated to Brave Talk icons soon.)
Warning message is not shown when domain is different
cc: @mrose17
Failed to connect wallet message when Wallet onboarding is triggered
https://talk.brave.software
and click on Start Web3 Call
Failed to connect wallet
message doesn't trigger a page refresh automatically to connect to WalletOnce onboarding is done closing wallet tab or switching back to Talk tab should trigger page refresh to connect Wallet and create the call
cc: @mrose17
i can't figure out where some of the text and images are coming from. it is rather odd.
This issue overtakes brave/brave-together#185 ... it originally suggested we maintain a "allowed" list of sites that included talk.brave.com, so the user wouldn't have the friction of having to allow A/C for confabs, nor the confusion if they "fat-fingered" the response.
rather than make a precedent for the "allowed" list, it is suggested that the permissions dialog be very prominent.
i'm not sure what such a design would entail, but that's the current thinking.
No option to go to premium page when trying to start a web3 call without premium account
https://talk.brave.software
and click on Start a Web3 Call
Start 1:1 Web3 call
Sorry, you are not a subscriber
but nothing moreWeb3 Calls Require Brave Talk Premium Subscription
Probably better to show the response message on the page and have a link for https://account.brave.com/
to navigate for subscription
cc: @mrose17
cf., #8 (comment)
Fixed by #27
It appears that we're logging some things that don't need to be logged such as the JWT token stored in the local storage and some erranious TimeLimitedCredential
which aren't normally supposed to be logged. If you want examples of the data I was seeing in my console, check out this slack message (https://bravesoftware.slack.com/archives/C021S0FN3V1/p1678981705173359). I don't want to post the specific information here publicly since at least the JWT is sensitive.
Some of this information may have been appearing if people were using developer builds to access the call though, so we should double check if this is something unique to when @mrose17 @tackley and @johnhalbert were on a call or if this is actually information that's being leaked in production.
Cancel Sign request spits out JSON response instead of cancelled message
https://talk.brave.software
and create a Web3 Talk roomStart 1:1 Web3 call
buttonHave a well formatted message instead of JSON response
We should put an additional message and link, "Click here to sign up for a paid account and remove these limits" or some such and link that directly to the Brave Talk checkout. This will help interested users know what to do next.
disableTileEnlargement
- set to false
to have files enlarge to cover the screen with a 16:9 ratio.
autoHideWhileChatIsOpen
- set to true
to have the toolbar autohide when the chat window is open.
Res ipsa loquitur
These would be valuable even if they were limited to intra-brave conversations
so something like talk.brave.com/@pes10k
from brave/brave-together#183: Provide subscribed users to create a custom URL that can be shortened and shared for calls. Current implementation has a big alphanumeric value after domain which is not easy to remember or spell out. Can make the feature a premium option and allow user customization for future.
an additional feature would be to automate the save-as-shortcut functionality when creating a vanity confab url
brave/brave-together#258 implemented logic to try to resolve the subscriber vs non-subscriber race condition when starting a call from the slack /talk
plugin. This works great if at least one person trying to join the call is already logged in as a subscriber on the browser that slack chose to open.
However, if that's not the case, it appears to get stuck in a loop and the user may have to resort to using a competitors' product. The only way out of the loop is to hack the url to remove ?create=y
.
See e.g. https://bravesoftware.slack.com/archives/C01BC0K5QP7/p1636646236160700 and https://bravesoftware.slack.com/archives/C01BC0K5QP7/p1636390882144400.
When showing the "waiting for a subscriber" message we should additionally provide buttons to "create a 1:1 room" and "login".
cf., #220
The bootstrap code doesn't need to block the home page loading; however, the code has always loaded synchronously in the home page.
A recent issue with pinning to a previous JAAS release required a change to the code -- #785 -- that loads the bootstrap; however, the loading continues to be synchronous.
Since the launch of the service, no one has ever noticed the synchronous behavior. An enhancement to load the code asynchronously with the home page would be good.
Somehow the refresh token for one of my rooms disappeared? How, I don't know. All I know is I went to the room and the JWT didn't have moderator-privileges. I am sure that I was in the room within the last 10 days!
Low resolution image for Brave Talk on wallet connect panel
Good resolution image on wallet panel
cc: @mrose17 @brave/design-team
In order to cater for both short and longer lived feature development (especially those that require review), update the branching strategy to support this, following the pattern established by
prod
=> releases to talk.brave.com (production)
main
=> releases to staging
dev
=> releases to development
main
to prod
that's basically "make production === stage". These are the only PRs that should go to prod
.main
should only happen when we think the feature is ready to release.main
and keep adding commits there until it's ready to release.dev
- but don't delete the feature branch. Repeatedly merge the feature that feature branch to dev
as work progresses. Merges to dev
do not require PRs.main
- with a PR and security review if required. Do not merge until all reviews are completed.dev
to match main
just to keep the history tidy.prod
branch matching current maindev
branch matching current developmentdevelopment
and staging
brancheswhen nft/poap calls fail, report this to the user.
whenever reporting, put the text above the button (not below) and make the text larger and bolder. here is what we see now:
when mousing over the Avatar NFTs, the user should see a tooltip with the title of the NFT or collection
style the "Call permission type" text to be the same size as the drop-down text for "NFT Collection / POAP"
if a premium subscriber, the text should be "Start premium Web3 call" instead of "Start free 1:1 Web3 call"
cf., #821
cf., #823
cf., #179 (comment)
How things work right now:
API changes:
recordingStatusChange
event is sent to all participants when a recording/stops starts, i.e., { "on": true, "mode": "file" }
or { "on": false, "mode": "file" }
recordingLinkAvailable
event is sent only to the moderator when recording starts, e.g., { link: "https://..." }
https://api-vo.jitsi.net/jaas-recordings/link/details?url={{URL}}
-- is available to return { expiresAt: ... }
Site changes (for moderator only):
localStorage
, and entries are automatically pruned as they expire.cf., https://bravesoftware.slack.com/archives/C012FR6DJCV/p1589923420001500
if the tab is large enough, the percentage should be less...
There is some interest in having the chatbox be resizable. This problematic with tile management. The solution is to implement a chatbox in a separate iframe. Here is the API from Jitsi:
Chat messages APIs:
Remove chat button from toolbar
(if button removed there's no need for hiding the chat box by toggling it https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-iframe#togglechat - but if needed we can expose an isChatOpen to get current state)
Send Message:
https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-iframe#sendchatmessage
Message received event:
https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-iframe#incomingmessage
https://jitsi.github.iojitsi.github.io
IFrame API · Jitsi Meet Handbook
Embedding the Jitsi Meet API into your site or app enables you to host and provide secure video meetings with your colleagues, teams, and stakeholders. The Meet API provides a full complement of comprehensive meeting features.
https://jitsi.github.iojitsi.github.io
IFrame API · Jitsi Meet Handbook
Embedding the Jitsi Meet API into your site or app enables you to host and provide secure video meetings with your colleagues, teams, and stakeholders. The Meet API provides a full complement of comprehensive meeting features.
https://jitsi.github.iojitsi.github.io
IFrame API · Jitsi Meet Handbook
Embedding the Jitsi Meet API into your site or app enables you to host and provide secure video meetings with your colleagues, teams, and stakeholders. The Meet API provides a full complement of comprehensive meeting features.
Step one: find out the current status of adding i18n
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.