1 import CliTable3 from 'cli-table3'
2 import { ensureDir } from 'fs-extra'
3 import { Client as NetIPC } from 'net-ipc'
4 import { ConfigManager } from '../config-manager'
5 import { IPCReponse, IPCReponseData, IPCRequest } from './shared'
7 export class IPCClient {
11 await ensureDir(ConfigManager.Instance.getSocketDirectory())
13 const socketPath = ConfigManager.Instance.getSocketPath()
15 this.netIPC = new NetIPC({ path: socketPath })
18 await this.netIPC.connect()
20 if (err.code === 'ECONNREFUSED') {
22 'This runner is not currently running in server mode on this system. ' +
23 'Please run it using the `server` command first (in another terminal for example) and then retry your command.'
31 async askRegister (options: {
33 registrationToken: string
35 runnerDescription?: string
37 const req: IPCRequest = {
42 const { success, error } = await this.netIPC.request(req) as IPCReponse
44 if (success) console.log('PeerTube instance registered')
45 else console.error('Could not register PeerTube instance on runner server side', error)
48 async askUnregister (options: {
51 const req: IPCRequest = {
56 const { success, error } = await this.netIPC.request(req) as IPCReponse
58 if (success) console.log('PeerTube instance unregistered')
59 else console.error('Could not unregister PeerTube instance on runner server side', error)
62 async askListRegistered () {
63 const req: IPCRequest = {
64 type: 'list-registered'
67 const { success, error, data } = await this.netIPC.request(req) as IPCReponse<IPCReponseData>
69 console.error('Could not list registered PeerTube instances', error)
73 const table = new CliTable3({
74 head: [ 'instance', 'runner name', 'runner description' ]
77 for (const server of data.servers) {
78 table.push([ server.url, server.runnerName, server.runnerDescription ])
81 console.log(table.toString())