mirror of
https://github.com/fatedier/frp.git
synced 2026-07-16 17:29:16 +08:00
66 lines
1.7 KiB
TypeScript
66 lines
1.7 KiB
TypeScript
import { formatDistanceToNow } from './format'
|
|
import type { ClientInfoData, ClientStatus } from '../types/client'
|
|
|
|
export class Client {
|
|
key: string
|
|
user: string
|
|
clientID: string
|
|
runID: string
|
|
version: string
|
|
wireProtocol: string
|
|
hostname: string
|
|
ip: string
|
|
firstConnectedAt: Date
|
|
lastConnectedAt: Date
|
|
disconnectedAt?: Date
|
|
online: boolean
|
|
status: ClientStatus
|
|
|
|
constructor(data: ClientInfoData) {
|
|
this.key = data.key
|
|
this.user = data.user
|
|
this.clientID = data.clientID
|
|
this.runID = data.runID
|
|
this.version = data.version || ''
|
|
this.wireProtocol = data.wireProtocol || ''
|
|
this.hostname = data.hostname
|
|
this.ip = data.clientIP || ''
|
|
this.firstConnectedAt = new Date(data.firstConnectedAt * 1000)
|
|
this.lastConnectedAt = new Date(data.lastConnectedAt * 1000)
|
|
if (data.disconnectedAt && data.disconnectedAt > 0) {
|
|
this.disconnectedAt = new Date(data.disconnectedAt * 1000)
|
|
}
|
|
this.online = data.online
|
|
this.status = data.status || {
|
|
phase: this.online ? 'online' : 'offline',
|
|
curConns: 0,
|
|
proxyCount: 0,
|
|
}
|
|
}
|
|
|
|
get displayName(): string {
|
|
if (this.clientID) {
|
|
return this.user ? `${this.user}.${this.clientID}` : this.clientID
|
|
}
|
|
return this.runID
|
|
}
|
|
|
|
get wireProtocolLabel(): string {
|
|
if (!this.wireProtocol) return ''
|
|
return `Protocol ${this.wireProtocol}`
|
|
}
|
|
|
|
get firstConnectedAgo(): string {
|
|
return formatDistanceToNow(this.firstConnectedAt)
|
|
}
|
|
|
|
get lastConnectedAgo(): string {
|
|
return formatDistanceToNow(this.lastConnectedAt)
|
|
}
|
|
|
|
get disconnectedAgo(): string {
|
|
if (!this.disconnectedAt) return ''
|
|
return formatDistanceToNow(this.disconnectedAt)
|
|
}
|
|
}
|