86 Commits

Author SHA1 Message Date
Jeremy Kahn
7556d491f3 chore(deps): update prettier 2024-04-07 16:59:49 -05:00
Jeremy Kahn
05b4615af9
feat(audio) [closes #230] Screenshare audio control (#248)
* feat(ui): present mic volume icon

* feat(ui): improve mic volume display

* refactor(ui): nest mic audio as a channel

* fix(ui): prevent volume control from reappearing for returning peers

* refactor(audio): update specific audio channel states

* refactor(audio): use enum for audio channel name

* refactor(types): improve audio type names

* feat(audio): wire up screen share audio

* refactor(networking): always provide stream metadata

* fix(audio): remove screen audio when stream ends

* fix(audio): stop audio when removing it

* feat(audio): show appropriate icon for channel

* fix(audio): clean up audio for leaving peers consistently

* fix(audio): use up-to-date peerAudios reference

* refactor(audio): simplify audio state updating

* refactor(audio): use functional setState to update peer list

* refactor(variables): rename peerAudios to peerAudioChannels

* refactor(types): consolidate stream types

* refactor(types): require stream type metadata
2024-04-01 21:25:12 -05:00
Jeremy Kahn
ea34058fa7
chore: Migrate from Create React App to Vite (#231)
* chore(vite): use vite

* fix(vite): alias lib directory

* chore(vite): set type: module

* chore: update vite and MUI

* fix(vite): make MUI components load

* fix: use node path resolution

* chore(vite): add svg support

* fix(vite): polyfill global

* fix(vite): use import.meta

* fix(vite): use correct svg module resolution

* chore(vite): migrate to vitest

* fix(vite): remove PUBLIC_URL

* fix(tests): mock audio service

* chore(deps): upgrade to react test library 14

* refactor(tests): simplify room test setup

* refactor(tests): make Date.now() mockable

* refactor(vite): remove bootstrap shim

* chore(deps): drop react-scripts

* chore(deps): remove source-map-explorer

Source maps do not currently work with MUI and Vite:
https://github.com/vitejs/vite/issues/15012

Because of this, source map utilities are currently removed.

* refactor(vite): use TypeScript for Vite config

* chore(actions): update actions config for new paths

* fix(service-worker): use VITE_HOMEPAGE for service worker resolution

* fix(vercel): use quotes for build command

* fix(vite): use import.meta.env.MODE

* fix(service-worker): use correct definition for publicUrl

* feat(vite): use vite-plugin-pwa

* fix(pwa): make update prompt work

* fix(types): use vite/client types

* docs(readme): update building instructions

* refactor(vite): simplify theme loading workaround

* refactor(vite): use manifest object

* docs(readme): update tool references

* chore(deps): run `npm audit fix`

* fix(vite): make syntax highlighter work consistently

See: https://github.com/react-syntax-highlighter/react-syntax-highlighter/issues/513

* fix(pwa): remove manifest.json references

* refactor(deps): remove jest references

* refactor(types): remove react-scripts reference

* chore(deps): use TypeScript 5

* refactor(tests): improve persisted storage mocking
2024-03-12 21:44:43 -05:00
Jeremy Kahn
94a4b2fb2e
refactor(services): Standardize services and lib organization (#226)
* refactor(Notification): use instance methods
* refactor(Audio): move to lib layer
* refactor(EncryptionService): rename instance to encryption
* refactor(ConnectionTest): move to lib
* refactor(FileTransfer): move to lib
* refactor(PeerRoom): move to lib
* refactor(sleep): move to lib
* refactor(type-guards): move to lib
* refactor(SerializationService): use standard instance name
* refactor(SettingsService): use standard instance name
2024-01-28 20:46:59 -06:00
Jeremy Kahn
15142f9328
fix(ui): [fixes #217] Give volume slider full width of peer list (#218)
* fix(ui): give volume slider full width of peer list
* refactor(PeerListItem): improve variable name
2023-12-09 20:04:44 -06:00
Jeremy Kahn
6cbfaacf1a
feat(verification): [closes #209] Verified peers (#216)
* refactor(bootstrap): add BootstrapShim
* feat(security): [#209] generate public/private keys
* refactor(encryption): move encryption utils to a service
* feat(encryption): [wip] implement convertCryptoKeyToString
* fix(user-settings): serialize crypto keys to strings
* feat(user-settings): deserialize user settings from IndexedDB
* feat(user-settings): upgrade persisted settings on boot
* feat(user-settings): automatically migrate persisted user settings
* refactor(encryption): simplify CryptoKey stringification
* refactor(encryption): DRY up EncryptionService
* feat(verification): send public key to new peers
* refactor(encryption): use class instance
* refactor(serialization): use class instance
* refactor(verification): [wip] create usePeerVerification hook
* feat(verification): encrypt verification token
* feat(verification): send encrypted token to peer
* feat(verification): verify peer
* refactor(verification): use enum for verification state
* feat(verification): expire verification requests
* fix(updatePeer): update with fresh state data
* feat(verification): display verification state
* refactor(usePeerVerification): store verification timer in Peer
* feat(verification): present tooltips explaining verification state
* feat(ui): show full page loading indicator
* feat(init): present bootup failure reasons
* refactor(init): move init to its own file
* feat(verification): show errors upon verification failure
* refactor(verification): move workaround to usePeerVerification
* feat(verification): present peer public keys
* refactor(verification): move peer public key rendering to its own component
* refactor(verification): only pass publicKey into renderer
* feat(verification): show user's own public key
* refactor(naming): rename Username to UserInfo
* refactor(loading): encapsulate height styling
* feat(verification): improve user messaging
* refactor(style): improve formatting and variable names
* feat(verification): add user info tooltip
* docs(verification): explain verification
2023-12-09 17:47:05 -06:00
Jeremy Kahn
826f53fb45 feat(ui): show full room name in tooltip 2023-11-23 15:26:32 -06:00
Jeremy Kahn
b9ec16ad4d feat(ui): show divider in app bar 2023-11-23 15:26:32 -06:00
Jeremy Kahn
7bceba5acb
feat(ui) [closes #160] Move transcript scrollbar to content window edge (#212)
* feat(ui): [closes #160] move transcript scrollbar to edge of container
* feat(ui): prevent controls from obscuring transcript
* feat(ui): hide unnecessary hide controls button
2023-11-23 12:26:07 -06:00
Jeremy Kahn
54f7b2dd93
fix(deps): [fixes #185] Upgrade vulnerable versions and remove ipfs-core (#193)
* fix(deps): omit ipfs-core
* fix(deps): use @svgr/plugin-svgo/nth-check@2.0.1
* fix(deps): use resolve-url-loader/postcss@8.4.31
* chore(deps): rebuild package-lock.json
* chore(actions): update actions
2023-10-29 14:49:49 -05:00
Jeremy Kahn
f6a3e30da2
feat(sdk): Implement Chitchatter SDK (#183)
* feat(sdk): render iframe in chat-room component
* fix(ci): install optional dependencies
* feat(sdk): allow subset of attributes
* feat(sdk): accept root-domain attribute
* feat(sdk): accept custom room name or use sane default
* feat(sdk): set allowed features
* feat(sdk): add sdk instructions to embed code dialog
* fix(sdk): use dynamic rootUrl
* fix(sdk): use static defaultRoot
* feat(sdk): send config from SDK to chat
* fix(sdk): expire poller
* fix(sdk): pass parent domain to iframe via query param
* refactor(sdk): type message event data
* feat(sdk): send user id to chat frame
* feat(sdk): handle some attribute updates
* chore(package): add build:sdk:watch script
* refactor(sdk): move more code to updateIframeAttributes
* feat(sdk): support changing rooms
* feat(sdk): support more user settings
* docs(sdk): add SDK section to README
* feat(sdk): render root-url in embed code if necessary
* refactor(sdk): use map for chat room attributes
* fix(sdk): unbind event listener when chat-room is disconnected
* fix(sdk): properly tear down receipt listener
* fix(sdk): send config when frame reloads
* feat(sdk): listen for config updates
* feat(sdk): request config from sdk instead of sending it repeatedly
* refactor(sdk): use type guard for config message
* fix(sdk): use settings from SDK when there is no preexisting persisted data
* fix(sdk): observe all iframe attributes
* refactor(sdk): simplify bootup logic
* feat(sdk): improve embed code display
2023-10-28 11:42:58 -05:00
Jeremy Kahn
44cbfa2005 feat(shell): improve chitchatter link styling 2023-10-12 20:48:57 -05:00
Jeremy Kahn
6ab7a3e8d9 feat(shell): show chitchatter link in embedded environments 2023-10-12 10:02:52 -05:00
Jeremy Kahn
92c04d2872 fix(shell): remove extraneous Divider 2023-10-12 09:54:16 -05:00
Jeremy Kahn
37ed65df9a refactor(shell): de-DRY DrawerHeader 2023-10-12 09:52:38 -05:00
Jeremy Kahn
257737c65c refactor(shell): move more logic to PeerListHeader 2023-10-12 09:18:16 -05:00
Jeremy Kahn
dfd4131959 refactor(shell): move MuiDrawer out of PeerList 2023-10-12 09:03:38 -05:00
Jeremy Kahn
b82e339f86 refactor(imports): use default MUI component imports 2023-10-10 09:51:01 -05:00
Jeremy Kahn
1370b9d197 feat(embed): enable fullscreen 2023-10-09 09:42:12 -05:00
Jeremy Kahn
cbd0da50f6 fix(embed): [#92] improve embedded display on wider screens 2023-10-08 13:51:49 -05:00
Jeremy Kahn
7acf267558
feat(embed): [closes #92] Embed support (#177)
* feat(embed): [#92] hide unnecessary UI when embedded
* feat(embed): [#92] provide embed code
2023-10-08 13:19:46 -05:00
Jeremy Kahn
d06bbcf0f4
feat(shell): [closes #155] Handle unsupported environments (#161)
* feat(shell): [#155] show error in unsupported environment
* feat(shell): [#155] show details about unsupported environment
2023-09-07 09:28:29 -05:00
Jeremy Kahn
e597a667a1
feat(chat): [closes #13] Active typing indicators (#133)
* feat(typing-indicator): wire up handleMessageChange
* feat(typing-indicator): send typing: true status
* feat(typing-indicator): expire typing state
* feat(typing-indicator): update typing state received from peers
* refactor(shell): add updatePeer utility
* feat(typing-indicator): display peer typing status
* feat(typing-indicator): reset typing status when a message is sent
* feat(typing-indicator): move indicator below message form
* feat(typing-indicator): keep status text to one line
2023-07-27 21:06:35 -05:00
Jeremy Kahn
9b9d294f98
feat(connection-test): [closes #127] Explain tracker connection problems (#130)
* feat(connection-test): [closes #127] explain tracker connection problems
2023-07-16 17:45:16 -05:00
Jeremy Kahn
f67dbb60d3
feat(connection-test): display failed tracker connections (#129) 2023-07-14 17:21:25 -05:00
Jeremy Kahn
291ed0c2b9
feat(connection-test): Display tracker connection status (#128)
* feat(ConnectionTest): track tracker state
* feat(ConnectionTest): show tracker searching state
* chore(deps): use github:jeremyckahn/trystero#feature/get-tracker-connections
* feat(connection-test): hide network indicator in non-room routes
* feat(connection-test): show peer searching status
* feat(connection-test): hide peer searching UI when not in a room
2023-07-13 09:50:54 -05:00
Jeremy Kahn
ec9c9f61ce feat(ConnectionTestResults): [closes #124] explain connection types 2023-06-17 14:53:09 -05:00
Jeremy Kahn
88fad17357 fix: improve connection loss handling 2023-03-28 09:38:57 -05:00
Jeremy Kahn
38509019fd fix: clean up old rtcPeerConnections 2023-03-28 09:13:35 -05:00
Jeremy Kahn
a4b7c8e9ce fix: expire network status checks 2023-03-28 07:46:43 -05:00
Jeremy Kahn
3977a82224
feat: Connection status (#119)
* feat: implement ConnectionTest
* feat: display connection results
* feat: keep network status up to date
2023-03-27 21:51:33 -05:00
Jeremy Kahn
4cf75b15b0
feat: [closes #15] Show connection type (#117)
* feat: [#15] implement getPeerConnectionTypes
* feat: [#15] display connection type icon
* refactor: extract PeerListItem to its own file
* feat: [#15] show connection details via tooltip
* fix: style stable peer name
2023-03-25 14:40:07 -05:00
Jeremy Kahn
87ffd1df56 feat: improve spacing around peer counter 2023-03-22 09:27:52 -05:00
Jeremy Kahn
7ba62c030b refactor: remove numberOfPeers state 2023-03-15 10:10:17 -05:00
Jeremy Kahn
d6f9b10ce2 feat: don't automatically close sidebars 2023-03-15 10:10:17 -05:00
Jeremy Kahn
446ca466c7 feat: default sidebars to open on wide screens 2023-03-15 10:10:17 -05:00
Jeremy Kahn
37af59f89e
feat: [closes #94] Show build hash (#95)
* feat: show build hash in Drawer
* feat: add link to GitHub commit for build
2023-03-05 12:22:02 -06:00
Jeremy Kahn
dfe510e642
feat: [closes #76] Custom usernames (#93)
* feat: add Username component
* feat: set custom username state
* feat: update custom username on input blur
* feat: inform peers of username updates
* feat: display username for peers
* feat: show static name in parentheses
* feat: use display name in message notification
* feat: remove username display from Shell Drawer
* feat: persist customUsername
2023-03-04 12:55:37 -06:00
Jeremy Kahn
870a13eac1
feat: [closes #77] Peer audio volume control (#90)
* feat: add AudioVolume component
* feat: show volume slider label value
* feat: update audio volume icon
* feat: mute/unmute when volume icon is clicked
* feat: show peer dividers
2023-02-26 18:26:53 -06:00
Jeremy Kahn
d7287b5f6d
feat: [closes #86] Encrypted file transfers (#87)
* feat: [#86] encrypt torrent data before upload
* feat: [#86] decrypt torrent data after download
* feat: [#86] use room ID as encryption key
* feat: [#86] show alerts for encryption activity
* feat: [#86] show progress indicator while encrypting files
2023-02-11 17:29:57 -06:00
Nasal Daemon
8493ddade5
Give video display as much space as possible (#84)
* Move room tools to top of page to use full width
Allow messages to be hidden while video is displaying
Allow video display to utilise all available width
Track unread messages while they are hidden
* Better portrait behaviour
* Show room controls by default
* Show room controls at same time as app bar
Improve video height calc.

Co-authored-by: Jeremy Kahn <jeremyckahn@gmail.com>
2023-01-23 21:50:14 -06:00
Nasal Daemon
fcec242194
[closes #75] Easier sharing of private rooms (#81)
* Add URL secret reading logic
* Add private url share dialog
* Salt password hash with roomId
* Don't allow incorrect password to be entered

Co-authored-by: Jeremy Kahn <jeremyckahn@gmail.com>
2023-01-08 14:37:30 -06:00
Jeremy Kahn
5d3d019cd6
feat: [closes #33] Render inline media (#73)
* refactor: pass inline media upload data to useRoom
* feat: render inline media
* fix: don't rescind inline media file offers
* refactor: send file offer metadata object
* fix: enable re-seeding of inline media files
* feat: show loading indicator for inline media
* feat: rescind any evicted inline media
* feat: display media rendering failure message
* feat: prevent user from uploading file if message is sending
2022-11-28 21:18:41 -06:00
Jeremy Kahn
fdf80b8292 feat: improve drawer layout 2022-11-26 09:49:02 -06:00
Jeremy Kahn
37250fddf5 fix: prevent peer list from obscuring room 2022-11-25 10:40:13 -06:00
Jeremy Kahn
f006e76e80
feat: [closes #21] File sharing (#72)
* feat: [#21] stand up file sharing controls UI
* feat: [#21] implement basic file transfer
* feat: [#21] save transferred file
* feat: [#21] transfer file via WebTorrent
* fix: use external streamsaver assets
* feat: [#21] initiate download by receiver click
* fix: enable re-downloading of shared files
* feat: [#21] implement sharing of multiple files
* chore: enable offline development
* feat: cache torrents in IndexedDB
* feat: show alert when download is aborted
* feat: [#21] clean up torrent data when principal offerer rescinds it
* feat: clean up cached torrents on page unload
* feat: show file transfer progress
* fix: download files sequentially
* feat: clean up file transfers when leaving the room
* feat: clean up broken downloads upon leaving the page
* fix: allow download animation to complete
* feat: show tooltip for download button
* feat: make file transfers work in browser private modes
* feat: disable file share controls while creating offer
2022-11-24 00:16:34 -06:00
Jeremy Kahn
75a804abbd
feat: [closes #67] Screen sharing (#68)
* feat: [#67] stand up useRoomScreenShare hook
* feat: [#67] stand up RoomScreenShareControls
* feat: [#67] display screen share streams
* fix: [#67] don't flip screen share preview
* feat: don't display screen share controls in unsupported environments
* fix: [#67] always remove media streams for exiting peers
2022-11-13 17:11:09 -06:00
Jeremy Kahn
51a17a72a3 fix: always show link button 2022-11-06 20:52:56 -06:00
Jeremy Kahn
19d0faaccc refactor: move video stream data into new room context 2022-11-06 20:49:48 -06:00
Jeremy Kahn
828e3c12b9
feat: [closes #20] Video support (#64)
* refactor: nest ChatTranscript
* feat: set up video controls
* feat: show self video
* feat: show peer video
* feat: improve audio/video controls display
* feat: flip self video
* feat: improve device selection labels
2022-11-06 13:36:15 -06:00