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

Feat: Quiet is trying to connect... and Sending... on messages when not connected to other peers #1706 #2367

Open
wants to merge 73 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 39 commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
fe4a5da
Add "Quiet is trying to connect..." panel
ikoenigsknecht Mar 14, 2024
bc32de6
Most of the way to "Sending..." and graying out logic
ikoenigsknecht Mar 15, 2024
4f6968e
Sending... and graying out text, files, and images when unsent as wel…
ikoenigsknecht Mar 15, 2024
7df7ab0
Don't use this logic on fresh communities
ikoenigsknecht Mar 15, 2024
b9e1371
Remove commented out code
ikoenigsknecht Mar 15, 2024
d259f7b
Don't change display on info message
ikoenigsknecht Mar 15, 2024
7d561f3
Formatting
ikoenigsknecht Mar 15, 2024
926535a
Better peer disconnect/connect handling
ikoenigsknecht Mar 17, 2024
f498f04
Update desktop tests
ikoenigsknecht Mar 19, 2024
f89ce95
Merge branch 'develop' into feat/1706-connection-status-desktop
ikoenigsknecht Mar 19, 2024
7079682
Linting
ikoenigsknecht Mar 19, 2024
394d5dd
Remove unused luxon import
ikoenigsknecht Mar 19, 2024
3b368de
Downgrade block scoping babel plugin to fix regression in their code
ikoenigsknecht Mar 19, 2024
4103352
Merge branch 'develop' into feat/1706-connection-status-desktop
ikoenigsknecht Mar 20, 2024
c868c9d
test updates
ikoenigsknecht Mar 21, 2024
2ee6209
Merge branch 'develop' into feat/1706-connection-status-desktop
ikoenigsknecht Mar 21, 2024
f7acbe1
Retries and more stable tests
ikoenigsknecht Mar 22, 2024
cce5b24
Fix tests around registration messages
ikoenigsknecht Mar 22, 2024
bb920fd
Fix bad conditions
ikoenigsknecht Mar 22, 2024
efd0041
Update snapshots with new data-testids
ikoenigsknecht Mar 22, 2024
cf23bf4
Wrong user
ikoenigsknecht Mar 22, 2024
de76808
More test fixes
ikoenigsknecht Mar 22, 2024
d07be65
More test fixes
ikoenigsknecht Mar 22, 2024
418247f
Fix package changes I accidentally pushed
ikoenigsknecht Mar 22, 2024
f93f74f
Update snapshot
ikoenigsknecht Mar 22, 2024
3f1d20a
Why is this now failing?
ikoenigsknecht Mar 22, 2024
ac1d851
Fix test
ikoenigsknecht Mar 22, 2024
d2445fc
Update tests
ikoenigsknecht Mar 23, 2024
2dc1385
Run all rtl tests again
ikoenigsknecht Mar 23, 2024
e95a91e
E2E debugging
ikoenigsknecht Mar 23, 2024
c2f6c74
Get logs from state manager and desktop renderer in node console
ikoenigsknecht Mar 24, 2024
9ba0a33
Fix backwards compatibility tests
ikoenigsknecht Mar 24, 2024
9fcae84
Fix issue with cypress not recognizing console constructor
ikoenigsknecht Mar 24, 2024
5641cf3
Fix imports
ikoenigsknecht Mar 24, 2024
fc34a09
Delete test.log that was added by mistake
ikoenigsknecht Mar 25, 2024
210b9a7
Update changelogs
ikoenigsknecht Mar 25, 2024
aae84af
Update CHANGELOG.md
ikoenigsknecht Mar 25, 2024
21f0a3b
Mild logger refactor
ikoenigsknecht Mar 25, 2024
5b4f4e3
Pull lfs in checkout
ikoenigsknecht Mar 25, 2024
778158a
Share code for determining if message is unsent
ikoenigsknecht Mar 27, 2024
24632d6
Updates from PR comments
ikoenigsknecht Mar 27, 2024
ff6cea0
Merge branch 'develop' into feat/1706-connection-status-desktop
ikoenigsknecht Mar 27, 2024
b8370ed
Add more desktop tests
ikoenigsknecht Mar 27, 2024
bc34b16
Fix: Not initializing on reconnection when general channel was delete…
ikoenigsknecht Apr 4, 2024
f96aed5
Merge branch 'develop' into feat/1706-connection-status-desktop
ikoenigsknecht Apr 4, 2024
af7844b
Delete files that were deleted on develop
ikoenigsknecht Apr 4, 2024
0e587b1
Publish
leblowl Apr 4, 2024
7786e26
Update packages CHANGELOG.md
leblowl Apr 4, 2024
6e88e98
Merge from 2.2.0
ikoenigsknecht Apr 5, 2024
1f82559
Merge branch '2.2.0' into feat/1706-connection-status-desktop
ikoenigsknecht Apr 5, 2024
9b0be80
Add some extra test cases
ikoenigsknecht Apr 5, 2024
e1fd059
Remove tor initialized emit I added and add some logging
ikoenigsknecht Apr 8, 2024
c35ec3c
fix: hanging process functionality killing wrong processes (#2419)
leblowl Apr 8, 2024
b45a1ec
Merge branch '2.2.0' into feat/1706-connection-status-desktop
ikoenigsknecht Apr 8, 2024
595d896
fix: Adds a quick fix for the iOS sync issue after suspend (#2414)
leblowl Apr 8, 2024
d368170
Merge branch '2.2.0' into feat/1706-connection-status-desktop
ikoenigsknecht Apr 9, 2024
212e306
stashing
ikoenigsknecht Apr 9, 2024
26852ed
stashing
ikoenigsknecht Apr 9, 2024
c089c68
fix: Remove unused dmPublicKey to prevent UI delay during joining (#2…
leblowl Apr 10, 2024
7855f00
refactor: Remove SET_COMMUNITY_METADATA event (#2408)
leblowl Apr 10, 2024
fef2a8e
Merge from 2.2.0
ikoenigsknecht Apr 10, 2024
572a28a
Test fix and remove logs
ikoenigsknecht Apr 11, 2024
98435ef
Better peer sorting and updated initial diallng
ikoenigsknecht Apr 11, 2024
da66df8
Fix tests
ikoenigsknecht Apr 11, 2024
e1de945
Fix snapshots
ikoenigsknecht Apr 11, 2024
7018ad6
Revert "Better peer sorting and updated initial diallng"
ikoenigsknecht Apr 12, 2024
64d3596
Merge from develop
ikoenigsknecht Apr 12, 2024
e204f6a
revert merge from 2.2.0
ikoenigsknecht Apr 29, 2024
82c7782
Revert "Merge branch '2.2.0' into feat/1706-connection-status-desktop"
ikoenigsknecht Apr 29, 2024
2fcc975
Revert "Merge branch '2.2.0' into feat/1706-connection-status-desktop"
ikoenigsknecht Apr 29, 2024
c79df0b
Revert "Merge branch '2.2.0' into feat/1706-connection-status-desktop"
ikoenigsknecht Apr 29, 2024
2a657b5
Update Changelog
ikoenigsknecht Apr 29, 2024
35499d2
merge from develop
ikoenigsknecht Apr 29, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 3 additions & 6 deletions .github/workflows/e2e-android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,15 @@ jobs:
runs-on: [self-hosted, macOS, ARM64, android]

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
lfs: true

- name: Install dependencies
run: |
npm i
npm run lerna bootstrap --scope @quiet/eslint-config,@quiet/logger,@quiet/common,@quiet/types,@quiet/state-manager,@quiet/backend,@quiet/identity,@quiet/mobile,backend-bundle

- name: Pull binaries
run: |
git lfs install
git lfs pull

- name: Pass local config
run : |
cat << EOF >> packages/mobile/android/local.properties
Expand Down
9 changes: 3 additions & 6 deletions .github/workflows/e2e-ios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,15 @@ jobs:
runs-on: [self-hosted, macOS, ARM64, iOS]

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
lfs: true

- name: Install dependencies
run: |
npm i
npm run lerna bootstrap --scope @quiet/eslint-config,@quiet/logger,@quiet/common,@quiet/types,@quiet/state-manager,@quiet/backend,@quiet/identity,@quiet/mobile,backend-bundle

- name: Pull binaries
run: |
git lfs install
git lfs pull

- name: Install pods
run: |
cd packages/mobile/ios
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,17 @@

* Use ack for CREATE_NETWORK and simplify
* Refactored package.json to have consistent license "GPL-3.0-or-later"
* Logging from all sources can be written to node console

# Fixes

* Fixes channel name creation logic
* Allow JPEG and GIF files as profile photos ([#2332](https://github.com/TryQuiet/quiet/issues/2332))

# New Features

* Adds connection status information to messages panel on desktop when no peers are connected ([#1706](https://github.com/TryQuiet/quiet/issues/1706))

[2.1.2]

# Refactorings:
Expand Down
Empty file added bs.log
Empty file.
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@
"postpublish": "node copy-changelog.js && git add . && git commit -m 'Update packages CHANGELOG.md' && git push",
"start:desktop": "lerna run --scope @quiet/desktop start",
"lint:all": "lerna run lint",
"distAndRunE2ETests:mac:local": "lerna run --scope @quiet/desktop distMac:local && lerna run --scope e2e-tests test:localBinary --",
"clean": "lerna clean",
"bootstrap": "lerna bootstrap",
"bootstrap:clean": "npm run clean && npm run bootstrap",
"lerna:run:desktop": "lerna run --scope @quiet/desktop",
"distAndRunE2ETests:mac:local": "npm run lerna:run:desktop distMac:local && lerna run --scope e2e-tests test:localBinary --",
"prepare": "husky",
"lint-staged": "lerna run lint-staged"
},
Expand Down
4 changes: 4 additions & 0 deletions packages/backend/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@

* Refactor: Consolidate profile photo validation and match magic byte check to type check

* Refactor: Updates peer connecting events to include updating peers DB and refactors some payload types ([#1706](https://github.com/TryQuiet/quiet/issues/1706))

* Refactor: Update Tor initialized status when Tor is connected ([#1706](https://github.com/TryQuiet/quiet/issues/1706))

[2.0.3-alpha.6]

* Fix: filter out invalid peer addresses in peer list. Update peer list in localdb.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import {
type PermsData,
type UserProfile,
type UserProfilesStoredEvent,
PeersNetworkDataPayload,
} from '@quiet/types'
import { CONFIG_OPTIONS, QUIET_DIR, SERVER_IO_PROVIDER, SOCKS_PROXY_AGENT } from '../const'
import { ConfigOptions, GetPorts, ServerIoProviderTypes } from '../types'
Expand Down Expand Up @@ -394,10 +395,26 @@ export class ConnectionsManagerService extends EventEmitter implements OnModuleI
}

await this.libp2pService.createInstance(params)

// Libp2p event listeners
this.libp2pService.on(Libp2pEvents.PEER_CONNECTED, (payload: { peers: string[] }) => {
this.libp2pService.on(Libp2pEvents.PEER_CONNECTED, async (payload: PeersNetworkDataPayload) => {
const peerStats: { [peerId: string]: NetworkStats } = await payload.peers.reduce(
async (updateObj, peer) => {
return {
...(await updateObj),
[peer.peer]: {
peerId: peer.peer,
lastSeen: peer.lastSeen,
connectionTime: peer.connectionDuration,
} as NetworkStats,
}
},
Promise.resolve({} as { [peerId: string]: NetworkStats })
)
await this.localDbService.update(LocalDBKeys.PEERS, peerStats)
this.serverIoProvider.io.emit(SocketActionTypes.PEER_CONNECTED, payload)
})

this.libp2pService.on(Libp2pEvents.PEER_DISCONNECTED, async (payload: NetworkDataPayload) => {
const peerPrevStats = await this.localDbService.find(LocalDBKeys.PEERS, payload.peer)
const prev = peerPrevStats?.connectionTime || 0
Expand All @@ -414,6 +431,7 @@ export class ConnectionsManagerService extends EventEmitter implements OnModuleI
// BARTEK: Potentially obsolete to send this to state-manager
this.serverIoProvider.io.emit(SocketActionTypes.PEER_DISCONNECTED, payload)
})

await this.storageService.init(_peerId)
// We can use Nest for dependency injection, but I think since the
// registration service depends on the storage service being
Expand Down
34 changes: 27 additions & 7 deletions packages/backend/src/nest/libp2p/libp2p.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,13 @@ import { mplex } from '@libp2p/mplex'
import { multiaddr } from '@multiformats/multiaddr'
import { Inject, Injectable } from '@nestjs/common'
import { createLibp2pAddress, createLibp2pListenAddress } from '@quiet/common'
import { ConnectionProcessInfo, type NetworkDataPayload, PeerId, SocketActionTypes } from '@quiet/types'
import {
ConnectionProcessInfo,
type NetworkDataPayload,
PeerId,
SocketActionTypes,
PeersNetworkDataPayload,
} from '@quiet/types'
import crypto from 'crypto'
import { EventEmitter } from 'events'
import { Agent } from 'https'
Expand Down Expand Up @@ -153,20 +159,32 @@ export class Libp2pService extends EventEmitter {
})

this.libp2pInstance.addEventListener('peer:connect', async peer => {
this.logger(`Connecting peer: ${JSON.stringify(peer)}`)
const remotePeerId = peer.detail.remotePeer.toString()
const localPeerId = peerId.toString()
this.logger(`${localPeerId} connected to ${remotePeerId}`)

this.connectedPeers.set(remotePeerId, DateTime.utc().valueOf())
this.logger(`${localPeerId} is connected to ${this.connectedPeers.size} peers`)
const now = DateTime.utc()
this.connectedPeers.set(remotePeerId, now.valueOf())
this.logger(`${localPeerId} is now connected to ${this.connectedPeers.size} peers`)
this.logger(`${localPeerId} has ${this.libp2pInstance?.getConnections().length} open connections`)

this.emit(Libp2pEvents.PEER_CONNECTED, {
peers: [remotePeerId],
})
const payload: PeersNetworkDataPayload = {
peers: [
{
peer: remotePeerId,
lastSeen: now.toSeconds(),
connectionDuration: 0,
},
],
}

this.logger(`Emitting ${Libp2pEvents.PEER_CONNECTED} event with payload ${JSON.stringify(payload)}`)
this.emit(Libp2pEvents.PEER_CONNECTED, payload)
})

this.libp2pInstance.addEventListener('peer:disconnect', async peer => {
this.logger(`Disconnecting peer: ${JSON.stringify(peer)}`)
const remotePeerId = peer.detail.remotePeer.toString()
const localPeerId = peerId.toString()
this.logger(`${localPeerId} disconnected from ${remotePeerId}`)
Expand All @@ -187,12 +205,14 @@ export class Libp2pService extends EventEmitter {
const connectionDuration: number = connectionEndTime - connectionStartTime

this.connectedPeers.delete(remotePeerId)
this.logger(`${localPeerId} is connected to ${this.connectedPeers.size} peers`)
this.logger(`${localPeerId} is now connected to ${this.connectedPeers.size} peers`)
const peerStat: NetworkDataPayload = {
peer: remotePeerId,
connectionDuration,
lastSeen: connectionEndTime,
}

this.logger(`Emitting ${Libp2pEvents.PEER_DISCONNECTED} event with payload ${JSON.stringify(peerStat)}`)
this.emit(Libp2pEvents.PEER_DISCONNECTED, peerStat)
})

Expand Down
9 changes: 6 additions & 3 deletions packages/backend/src/nest/tor/tor-control.service.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Inject, Injectable } from '@nestjs/common'
import net from 'net'
import { CONFIG_OPTIONS, TOR_CONTROL_PARAMS } from '../const'
import { ConfigOptions } from '../types'
import { CONFIG_OPTIONS, SERVER_IO_PROVIDER, TOR_CONTROL_PARAMS } from '../const'
import { ConfigOptions, ServerIoProviderTypes } from '../types'
import { TorControlAuthType, TorControlParams } from './tor.types'
import Logger from '../common/logger'
import { SocketActionTypes } from '@quiet/types'

@Injectable()
export class TorControl {
Expand All @@ -14,7 +15,8 @@ export class TorControl {

constructor(
@Inject(TOR_CONTROL_PARAMS) public torControlParams: TorControlParams,
@Inject(CONFIG_OPTIONS) public configOptions: ConfigOptions
@Inject(CONFIG_OPTIONS) public configOptions: ConfigOptions,
@Inject(SERVER_IO_PROVIDER) public readonly serverIoProvider: ServerIoProviderTypes
) {
this.isSending = false
}
Expand Down Expand Up @@ -63,6 +65,7 @@ export class TorControl {
this.logger(`Connecting to Tor, host: ${this.torControlParams.host} port: ${this.torControlParams.port}`)
await this._connect()
this.logger('Tor connected')
this.serverIoProvider.io.emit(SocketActionTypes.TOR_INITIALIZED)
return
} catch (e) {
this.logger(e)
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/tsconfig.build.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"target": "ES2020",
"module": "ES2022",
"strict": true,
"declaration": true,
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
Expand Down
4 changes: 2 additions & 2 deletions packages/common/src/sortPeers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ export const filterAndSortPeers = (
}
}

const peerList = mostWantedPeers.map(peerId => {
const peerList = mostWantedPeers.map(peer => {
return peersAddresses.find(peerAddress => {
const id = peerAddress.split('/')[7]
if (id === peerId.peerId) {
if (id === peer.peerId) {
peersAddresses.splice(peersAddresses.indexOf(peerAddress), 1)
return true
}
Expand Down
6 changes: 6 additions & 0 deletions packages/desktop/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
[unreleased]

# New Features

* Adds connection status information to messages panel when no peers are connected ([#1706](https://github.com/TryQuiet/quiet/issues/1706))

# Refactorings:

* Use ack for CREATE_NETWORK and simplify
* Refactored package.json to have consistent license "GPL-3.0-or-later"
* Updates all logging from renderer to write to the node console
* Updates usages of `act` in tests to use `@testing-library/react` to avoid errors/warnings

# Fixes

Expand Down