Skip to content
This repository has been archived by the owner on Feb 12, 2024. It is now read-only.

Commit

Permalink
fix: grpc server may not be enabled (#3834)
Browse files Browse the repository at this point in the history
Do not try to interrogate properties of the gRPC server without first
checking that it's enabled
  • Loading branch information
achingbrain committed Aug 25, 2021
1 parent e2f3cad commit 533845e
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 15 deletions.
35 changes: 22 additions & 13 deletions packages/ipfs-cli/src/commands/daemon.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,20 +100,29 @@ module.exports = {

try {
await daemon.start()
// @ts-ignore - _apiServers is possibly undefined
daemon._httpApi._apiServers.forEach(apiServer => {
print(`HTTP API listening on ${apiServer.info.ma}`)
})
// @ts-ignore - _grpcServer is possibly undefined
print(`gRPC listening on ${daemon._grpcServer.info.ma}`)

if (daemon._httpApi && daemon._httpApi._apiServers) {
daemon._httpApi._apiServers.forEach(apiServer => {
print(`HTTP API listening on ${apiServer.info.ma}`)
})
}

// @ts-ignore - _httpGateway is possibly undefined
daemon._httpGateway._gatewayServers.forEach(gatewayServer => {
print(`Gateway (read only) listening on ${gatewayServer.info.ma}`)
})
// @ts-ignore - _apiServers is possibly undefined
daemon._httpApi._apiServers.forEach(apiServer => {
print(`Web UI available at ${toUri(apiServer.info.ma)}/webui`)
})
if (daemon._grpcServer && daemon._grpcServer) {
print(`gRPC listening on ${daemon._grpcServer.info.ma}`)
}

if (daemon._httpGateway && daemon._httpGateway._gatewayServers) {
daemon._httpGateway._gatewayServers.forEach(gatewayServer => {
print(`Gateway (read only) listening on ${gatewayServer.info.ma}`)
})
}

if (daemon._httpApi && daemon._httpApi._apiServers) {
daemon._httpApi._apiServers.forEach(apiServer => {
print(`Web UI available at ${toUri(apiServer.info.ma)}/webui`)
})
}
} catch (err) {
if (err.code === 'ERR_REPO_NOT_INITIALIZED' || err.message.match(/uninitialized/i)) {
err.message = 'no initialized ipfs repo found in ' + repoPath + '\nplease run: jsipfs init'
Expand Down
7 changes: 7 additions & 0 deletions packages/ipfs-grpc-server/src/types.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Pushable } from 'it-pushable'
import { EventEmitter } from 'events'
import { Multiaddr } from 'multiaddr'

export interface Options {
socket?: WebsocketServer
Expand All @@ -16,8 +17,14 @@ export interface WebsocketMessage {
channel: any
}

export interface WebsocketServerInfo {
uri: string
ma: Multiaddr
}

export interface WebsocketServer extends EventEmitter {
// events
on: ((event: 'error', listener: (err: Error) => void) => this) & ((event: 'data', listener: (message: WebsocketMessage) => void) => this)
stop: () => Promise<void>
info: WebsocketServerInfo
}
7 changes: 5 additions & 2 deletions packages/ipfs-grpc-server/src/utils/web-socket-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ class Messages extends EventEmitter {
this._wss = wss
this.multiaddr = ''

this.info = {
uri: '',
ma: new Multiaddr('/ip4/127.0.0.1/tcp/0/ws')
}

wss.on('connection', (ws, request) => {
ws.on('error', error => debug(`WebSocket Error: ${error.stack}`))

Expand Down Expand Up @@ -86,8 +91,6 @@ class Messages extends EventEmitter {
}
} else {
this.info = {
address: info.address,
port: info.port,
uri: `http://${info.address}:${info.port}`,
ma: new Multiaddr(`/ip4/${info.address}/tcp/${info.port}/ws`)
}
Expand Down

0 comments on commit 533845e

Please sign in to comment.