Files
frp/web/frps/src/utils/client.ts

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)
}
}