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