90 lines
1.7 KiB
TypeScript
90 lines
1.7 KiB
TypeScript
import {
|
|
Column,
|
|
CreateDateColumn,
|
|
Entity,
|
|
OneToMany,
|
|
PrimaryGeneratedColumn,
|
|
UpdateDateColumn,
|
|
} from 'typeorm';
|
|
import { Inbound } from '../../inbounds/entities/inbound.entity';
|
|
import { Subscription } from '../../subscriptions/entities/subscription.entity';
|
|
import { Tunnel } from '../../tunnels/entities/tunnel.entity';
|
|
|
|
export enum NodeAuthType {
|
|
Password = 'password',
|
|
Token = 'token',
|
|
}
|
|
|
|
export enum NodeProtocol {
|
|
Http = 'http',
|
|
Https = 'https',
|
|
}
|
|
|
|
@Entity()
|
|
export class Node {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@Column()
|
|
name: string;
|
|
|
|
@Column({ nullable: true })
|
|
url?: string;
|
|
|
|
@Column({ nullable: true })
|
|
host?: string;
|
|
|
|
@Column({ nullable: true })
|
|
domain?: string;
|
|
|
|
@Column({ nullable: true })
|
|
ip?: string;
|
|
|
|
@Column({ nullable: true })
|
|
flag?: string;
|
|
|
|
@Column({ type: 'int', nullable: true })
|
|
port?: number;
|
|
|
|
@Column({
|
|
type: 'enum',
|
|
enum: NodeProtocol,
|
|
default: NodeProtocol.Https,
|
|
nullable: true,
|
|
})
|
|
protocol?: NodeProtocol;
|
|
|
|
@Column({ type: 'enum', enum: NodeAuthType, default: NodeAuthType.Password })
|
|
authType: NodeAuthType;
|
|
|
|
@Column({ nullable: true })
|
|
login?: string;
|
|
|
|
@Column({ select: false, nullable: true })
|
|
password?: string;
|
|
|
|
@Column({ select: false, nullable: true })
|
|
token?: string;
|
|
|
|
@Column({ default: false })
|
|
isMain: boolean;
|
|
|
|
@Column({ nullable: true })
|
|
version?: string;
|
|
|
|
@OneToMany(() => Subscription, (subscription) => subscription.node)
|
|
subscriptions: Subscription[];
|
|
|
|
@OneToMany(() => Inbound, (inbound) => inbound.node)
|
|
inbounds: Inbound[];
|
|
|
|
@OneToMany(() => Tunnel, (tunnel) => tunnel.node)
|
|
tunnels: Tunnel[];
|
|
|
|
@CreateDateColumn()
|
|
createdAt: Date;
|
|
|
|
@UpdateDateColumn()
|
|
updatedAt: Date;
|
|
}
|