fix: custom_nameservers should be dns_servers (#46)

* fix: custom_nameservers should be dns_servers

* fix ipv6 address conversion
This commit is contained in:
UUBulb
2024-12-13 22:27:05 +08:00
committed by GitHub
parent ff6318c961
commit 1c09c7d6e9
3 changed files with 423 additions and 353 deletions

View File

@@ -160,18 +160,88 @@ export function ip16Str(base64str: string) {
return ipv6BinaryToString(buf); return ipv6BinaryToString(buf);
} }
function ipv6BinaryToString(binary: Uint8Array) { const digits = '0123456789abcdef';
let parts: string[] = [];
for (let i = 0; i < binary.length; i += 2) { function appendHex(b: string[], x: number): void {
let hex = (binary[i] << 8 | binary[i + 1]).toString(16); if (x >= 0x1000) {
parts.push(hex); b.push(digits[(x >> 12) & 0xf]);
}
if (x >= 0x100) {
b.push(digits[(x >> 8) & 0xf]);
}
if (x >= 0x10) {
b.push(digits[(x >> 4) & 0xf]);
}
b.push(digits[x & 0xf]);
}
function ipv6BinaryToString(ip: Uint8Array): string {
let ipBytes: Uint8Array;
if (ip.length !== 16) {
ipBytes = new Uint8Array(16);
const len = Math.min(ip.length, 16);
ipBytes.set(ip.subarray(0, len));
} else {
ipBytes = ip;
} }
let ipv6 = parts.join(':'); const hextets: number[] = [];
for (let i = 0; i < 16; i += 2) {
hextets.push((ipBytes[i] << 8) | ipBytes[i + 1]);
}
ipv6 = ipv6.replace(/(:0)+$/, ''); let zeroStart = -1;
if (ipv6.indexOf('::') === -1 && parts.filter(p => p === '0').length > 1) { let zeroLength = 0;
ipv6 = ipv6.replace(/(:0)+/, '::');
for (let i = 0; i <= hextets.length;) {
let j = i;
while (j < hextets.length && hextets[j] === 0) {
j++;
}
const length = j - i;
if (length >= 2 && length > zeroLength) {
zeroStart = i;
zeroLength = length;
}
if (j === i) {
i++;
} else {
i = j;
}
}
const parts: string[] = [];
for (let i = 0; i < hextets.length; i++) {
if (zeroLength > 0 && i === zeroStart) {
parts.push('');
i += zeroLength - 1;
continue;
}
if (parts.length > 0) {
parts.push(':');
}
const b: string[] = [];
appendHex(b, hextets[i]);
parts.push(b.join(''));
}
let ipv6 = parts.join('');
if (ipv6.startsWith('::')) {
} else if (ipv6.startsWith(':')) {
ipv6 = ':' + ipv6;
}
if (ipv6.endsWith('::')) {
} else if (ipv6.endsWith(':')) {
ipv6 = ipv6 + ':';
}
if (ipv6 === '') {
ipv6 = '::';
} }
return ipv6; return ipv6;

View File

@@ -32,7 +32,7 @@ import {
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
const settingFormSchema = z.object({ const settingFormSchema = z.object({
custom_nameservers: asOptionalField(z.string()), dns_servers: asOptionalField(z.string()),
ignored_ip_notification: asOptionalField(z.string()), ignored_ip_notification: asOptionalField(z.string()),
ip_change_notification_group_id: z.coerce.number().int().min(0), ip_change_notification_group_id: z.coerce.number().int().min(0),
cover: z.coerce.number().int().min(1), cover: z.coerce.number().int().min(1),
@@ -285,7 +285,7 @@ export default function SettingsPage() {
/> />
<FormField <FormField
control={form.control} control={form.control}
name="custom_nameservers" name="dns_servers"
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel> <FormLabel>

View File

@@ -10,235 +10,235 @@
*/ */
export interface GithubComNezhahqNezhaModelCommonResponseAny { export interface GithubComNezhahqNezhaModelCommonResponseAny {
data?: any; data: any;
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayModelAlertRule { export interface GithubComNezhahqNezhaModelCommonResponseArrayModelAlertRule {
data?: ModelAlertRule[]; data: ModelAlertRule[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayModelCron { export interface GithubComNezhahqNezhaModelCommonResponseArrayModelCron {
data?: ModelCron[]; data: ModelCron[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayModelDDNSProfile { export interface GithubComNezhahqNezhaModelCommonResponseArrayModelDDNSProfile {
data?: ModelDDNSProfile[]; data: ModelDDNSProfile[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayModelNAT { export interface GithubComNezhahqNezhaModelCommonResponseArrayModelNAT {
data?: ModelNAT[]; data: ModelNAT[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayModelNotification { export interface GithubComNezhahqNezhaModelCommonResponseArrayModelNotification {
data?: ModelNotification[]; data: ModelNotification[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayModelNotificationGroupResponseItem { export interface GithubComNezhahqNezhaModelCommonResponseArrayModelNotificationGroupResponseItem {
data?: ModelNotificationGroupResponseItem[]; data: ModelNotificationGroupResponseItem[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayModelServer { export interface GithubComNezhahqNezhaModelCommonResponseArrayModelServer {
data?: ModelServer[]; data: ModelServer[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayModelServerGroupResponseItem { export interface GithubComNezhahqNezhaModelCommonResponseArrayModelServerGroupResponseItem {
data?: ModelServerGroupResponseItem[]; data: ModelServerGroupResponseItem[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayModelService { export interface GithubComNezhahqNezhaModelCommonResponseArrayModelService {
data?: ModelService[]; data: ModelService[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayModelServiceInfos { export interface GithubComNezhahqNezhaModelCommonResponseArrayModelServiceInfos {
data?: ModelServiceInfos[]; data: ModelServiceInfos[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayModelUser { export interface GithubComNezhahqNezhaModelCommonResponseArrayModelUser {
data?: ModelUser[]; data: ModelUser[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayModelWAFApiMock { export interface GithubComNezhahqNezhaModelCommonResponseArrayModelWAFApiMock {
data?: ModelWAFApiMock[]; data: ModelWAFApiMock[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayString { export interface GithubComNezhahqNezhaModelCommonResponseArrayString {
data?: string[]; data: string[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseArrayUint64 { export interface GithubComNezhahqNezhaModelCommonResponseArrayUint64 {
data?: number[]; data: number[];
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseModelForceUpdateResponse { export interface GithubComNezhahqNezhaModelCommonResponseModelForceUpdateResponse {
data?: ModelForceUpdateResponse; data: ModelForceUpdateResponse;
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseModelLoginResponse { export interface GithubComNezhahqNezhaModelCommonResponseModelLoginResponse {
data?: ModelLoginResponse; data: ModelLoginResponse;
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseModelProfile { export interface GithubComNezhahqNezhaModelCommonResponseModelProfile {
data?: ModelProfile; data: ModelProfile;
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseModelServiceResponse { export interface GithubComNezhahqNezhaModelCommonResponseModelServiceResponse {
data?: ModelServiceResponse; data: ModelServiceResponse;
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseModelSettingResponse { export interface GithubComNezhahqNezhaModelCommonResponseModelSettingResponse {
data?: ModelSettingResponse; data: ModelSettingResponse;
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface GithubComNezhahqNezhaModelCommonResponseUint64 { export interface GithubComNezhahqNezhaModelCommonResponseUint64 {
data?: number; data: number;
error?: string; error: string;
success?: boolean; success: boolean;
} }
export interface ModelAlertRule { export interface ModelAlertRule {
created_at?: string; created_at: string;
enable?: boolean; enable: boolean;
/** 失败时执行的触发任务id */ /** 失败时执行的触发任务id */
fail_trigger_tasks?: number[]; fail_trigger_tasks: number[];
id?: number; id: number;
name?: string; name: string;
/** 该报警规则所在的通知组 */ /** 该报警规则所在的通知组 */
notification_group_id?: number; notification_group_id: number;
/** 恢复时执行的触发任务id */ /** 恢复时执行的触发任务id */
recover_trigger_tasks?: number[]; recover_trigger_tasks: number[];
rules?: ModelRule[]; rules: ModelRule[];
/** 触发模式: 0-始终触发(默认) 1-单次触发 */ /** 触发模式: 0-始终触发(默认) 1-单次触发 */
trigger_mode?: number; trigger_mode: number;
updated_at?: string; updated_at: string;
} }
export interface ModelAlertRuleForm { export interface ModelAlertRuleForm {
enable?: boolean; enable?: boolean;
/** 失败时触发的任务id */ /** 失败时触发的任务id */
fail_trigger_tasks?: number[]; fail_trigger_tasks: number[];
/** @minLength 1 */ /** @minLength 1 */
name?: string; name: string;
notification_group_id?: number; notification_group_id: number;
/** 恢复时触发的任务id */ /** 恢复时触发的任务id */
recover_trigger_tasks?: number[]; recover_trigger_tasks: number[];
rules?: ModelRule[]; rules: ModelRule[];
/** @default 0 */ /** @default 0 */
trigger_mode?: number; trigger_mode: number;
} }
export interface ModelCreateFMResponse { export interface ModelCreateFMResponse {
session_id?: string; session_id: string;
} }
export interface ModelCreateTerminalResponse { export interface ModelCreateTerminalResponse {
server_id?: number; server_id: number;
server_name?: string; server_name: string;
session_id?: string; session_id: string;
} }
export interface ModelCron { export interface ModelCron {
command?: string; command: string;
/** 计划任务覆盖范围 (0:仅覆盖特定服务器 1:仅忽略特定服务器 2:由触发该计划任务的服务器执行) */ /** 计划任务覆盖范围 (0:仅覆盖特定服务器 1:仅忽略特定服务器 2:由触发该计划任务的服务器执行) */
cover?: number; cover: number;
created_at?: string; created_at: string;
cron_job_id?: number; cron_job_id: number;
id?: number; id: number;
/** 最后一次执行时间 */ /** 最后一次执行时间 */
last_executed_at?: string; last_executed_at: string;
/** 最后一次执行结果 */ /** 最后一次执行结果 */
last_result?: boolean; last_result: boolean;
name?: string; name: string;
/** 指定通知方式的分组 */ /** 指定通知方式的分组 */
notification_group_id?: number; notification_group_id: number;
/** 推送成功的通知 */ /** 推送成功的通知 */
push_successful?: boolean; push_successful: boolean;
/** 分钟 小时 天 月 星期 */ /** 分钟 小时 天 月 星期 */
scheduler?: string; scheduler: string;
servers?: number[]; servers: number[];
/** 0:计划任务 1:触发任务 */ /** 0:计划任务 1:触发任务 */
task_type?: number; task_type: number;
updated_at?: string; updated_at: string;
} }
export interface ModelCronForm { export interface ModelCronForm {
command?: string; command?: string;
/** @default 0 */ /** @default 0 */
cover?: number; cover: number;
/** @minLength 1 */ /** @minLength 1 */
name?: string; name: string;
notification_group_id?: number; notification_group_id: number;
push_successful?: boolean; push_successful?: boolean;
scheduler?: string; scheduler: string;
servers?: number[]; servers: number[];
/** /**
* 0:计划任务 1:触发任务 * 0:计划任务 1:触发任务
* @default 0 * @default 0
*/ */
task_type?: number; task_type: number;
} }
export interface ModelCycleTransferStats { export interface ModelCycleTransferStats {
from?: string; from: string;
max?: number; max: number;
min?: number; min: number;
name?: string; name: string;
next_update?: Record<string, string>; next_update: Record<string, string>;
server_name?: Record<string, string>; server_name: Record<string, string>;
to?: string; to: string;
transfer?: Record<string, number>; transfer: Record<string, number>;
} }
export interface ModelDDNSForm { export interface ModelDDNSForm {
access_id?: string; access_id?: string;
access_secret?: string; access_secret?: string;
domains?: string[]; domains: string[];
enable_ipv4?: boolean; enable_ipv4?: boolean;
enable_ipv6?: boolean; enable_ipv6?: boolean;
/** @default 3 */ /** @default 3 */
max_retries?: number; max_retries: number;
/** @minLength 1 */ /** @minLength 1 */
name?: string; name: string;
provider?: string; provider: string;
webhook_headers?: string; webhook_headers?: string;
/** @default 1 */ /** @default 1 */
webhook_method?: number; webhook_method?: number;
@@ -249,22 +249,22 @@ export interface ModelDDNSForm {
} }
export interface ModelDDNSProfile { export interface ModelDDNSProfile {
access_id?: string; access_id: string;
access_secret?: string; access_secret: string;
created_at?: string; created_at: string;
domains?: string[]; domains: string[];
enable_ipv4?: boolean; enable_ipv4: boolean;
enable_ipv6?: boolean; enable_ipv6: boolean;
id?: number; id: number;
max_retries?: number; max_retries: number;
name?: string; name: string;
provider?: string; provider: string;
updated_at?: string; updated_at: string;
webhook_headers?: string; webhook_headers: string;
webhook_method?: number; webhook_method: number;
webhook_request_body?: string; webhook_request_body: string;
webhook_request_type?: number; webhook_request_type: number;
webhook_url?: string; webhook_url: string;
} }
export interface ModelForceUpdateResponse { export interface ModelForceUpdateResponse {
@@ -274,148 +274,148 @@ export interface ModelForceUpdateResponse {
} }
export interface ModelFrontendTemplate { export interface ModelFrontendTemplate {
author?: string; author: string;
is_admin?: boolean; is_admin: boolean;
is_official?: boolean; is_official: boolean;
name?: string; name: string;
path?: string; path: string;
repository?: string; repository: string;
version?: string; version: string;
} }
export interface ModelGeoIP { export interface ModelGeoIP {
country_code?: string; country_code: string;
ip?: ModelIP; ip: ModelIP;
} }
export interface ModelHost { export interface ModelHost {
arch?: string; arch: string;
boot_time?: number; boot_time: number;
cpu?: string[]; cpu: string[];
disk_total?: number; disk_total: number;
gpu?: string[]; gpu: string[];
mem_total?: number; mem_total: number;
platform?: string; platform: string;
platform_version?: string; platform_version: string;
swap_total?: number; swap_total: number;
version?: string; version: string;
virtualization?: string; virtualization: string;
} }
export interface ModelHostState { export interface ModelHostState {
cpu?: number; cpu: number;
disk_used?: number; disk_used: number;
gpu?: number[]; gpu: number[];
load_1?: number; load_1: number;
load_15?: number; load_15: number;
load_5?: number; load_5: number;
mem_used?: number; mem_used: number;
net_in_speed?: number; net_in_speed: number;
net_in_transfer?: number; net_in_transfer: number;
net_out_speed?: number; net_out_speed: number;
net_out_transfer?: number; net_out_transfer: number;
process_count?: number; process_count: number;
swap_used?: number; swap_used: number;
tcp_conn_count?: number; tcp_conn_count: number;
temperatures?: ModelSensorTemperature[]; temperatures: ModelSensorTemperature[];
udp_conn_count?: number; udp_conn_count: number;
uptime?: number; uptime: number;
} }
export interface ModelIP { export interface ModelIP {
ipv4_addr?: string; ipv4_addr: string;
ipv6_addr?: string; ipv6_addr: string;
} }
export interface ModelLoginRequest { export interface ModelLoginRequest {
password?: string; password: string;
username?: string; username: string;
} }
export interface ModelLoginResponse { export interface ModelLoginResponse {
expire?: string; expire: string;
token?: string; token: string;
} }
export interface ModelNAT { export interface ModelNAT {
created_at?: string; created_at: string;
domain?: string; domain: string;
host?: string; host: string;
id?: number; id: number;
name?: string; name: string;
server_id?: number; server_id: number;
updated_at?: string; updated_at: string;
} }
export interface ModelNATForm { export interface ModelNATForm {
domain?: string; domain: string;
host?: string; host: string;
/** @minLength 1 */ /** @minLength 1 */
name?: string; name: string;
server_id?: number; server_id: number;
} }
export interface ModelNotification { export interface ModelNotification {
created_at?: string; created_at: string;
id?: number; id: number;
name?: string; name: string;
request_body?: string; request_body: string;
request_header?: string; request_header: string;
request_method?: number; request_method: number;
request_type?: number; request_type: number;
updated_at?: string; updated_at: string;
url?: string; url: string;
verify_tls?: boolean; verify_tls: boolean;
} }
export interface ModelNotificationForm { export interface ModelNotificationForm {
/** @minLength 1 */ /** @minLength 1 */
name?: string; name: string;
request_body?: string; request_body: string;
request_header?: string; request_header: string;
request_method?: number; request_method: number;
request_type?: number; request_type: number;
skip_check?: boolean; skip_check?: boolean;
url?: string; url: string;
verify_tls?: boolean; verify_tls?: boolean;
} }
export interface ModelNotificationGroup { export interface ModelNotificationGroup {
created_at?: string; created_at: string;
id?: number; id: number;
name?: string; name: string;
updated_at?: string; updated_at: string;
} }
export interface ModelNotificationGroupForm { export interface ModelNotificationGroupForm {
/** @minLength 1 */ /** @minLength 1 */
name?: string; name: string;
notifications?: number[]; notifications: number[];
} }
export interface ModelNotificationGroupResponseItem { export interface ModelNotificationGroupResponseItem {
group?: ModelNotificationGroup; group: ModelNotificationGroup;
notifications?: number[]; notifications: number[];
} }
export interface ModelProfile { export interface ModelProfile {
created_at?: string; created_at: string;
id?: number; id: number;
login_ip?: string; login_ip: string;
password?: string; password: string;
updated_at?: string; updated_at: string;
username?: string; username: string;
} }
export interface ModelProfileForm { export interface ModelProfileForm {
new_password?: string; new_password: string;
new_username?: string; new_username: string;
original_password?: string; original_password: string;
} }
export interface ModelRule { export interface ModelRule {
/** 覆盖范围 RuleCoverAll/IgnoreAll */ /** 覆盖范围 RuleCoverAll/IgnoreAll */
cover?: number; cover: number;
/** 流量统计周期 */ /** 流量统计周期 */
cycle_interval?: number; cycle_interval?: number;
/** 流量统计的开始时间 */ /** 流量统计的开始时间 */
@@ -438,7 +438,7 @@ export interface ModelRule {
* net_all_speed、transfer_in、transfer_out、transfer_all、offline * net_all_speed、transfer_in、transfer_out、transfer_all、offline
* transfer_in_cycle、transfer_out_cycle、transfer_all_cycle * transfer_in_cycle、transfer_out_cycle、transfer_all_cycle
*/ */
type?: string; type: string;
} }
export interface ModelSensorTemperature { export interface ModelSensorTemperature {
@@ -447,27 +447,27 @@ export interface ModelSensorTemperature {
} }
export interface ModelServer { export interface ModelServer {
created_at?: string; created_at: string;
/** DDNS配置 */ /** DDNS配置 */
ddns_profiles?: number[]; ddns_profiles?: number[];
/** 展示排序,越大越靠前 */ /** 展示排序,越大越靠前 */
display_index?: number; display_index: number;
/** 启用DDNS */ /** 启用DDNS */
enable_ddns?: boolean; enable_ddns: boolean;
geoip?: ModelGeoIP; geoip: ModelGeoIP;
/** 对游客隐藏 */ /** 对游客隐藏 */
hide_for_guest?: boolean; hide_for_guest: boolean;
host?: ModelHost; host: ModelHost;
id?: number; id: number;
last_active?: string; last_active: string;
name?: string; name: string;
/** 管理员可见备注 */ /** 管理员可见备注 */
note?: string; note: string;
/** 公开备注 */ /** 公开备注 */
public_note?: string; public_note: string;
state?: ModelHostState; state: ModelHostState;
updated_at?: string; updated_at: string;
uuid?: string; uuid: string;
} }
export interface ModelServerForm { export interface ModelServerForm {
@@ -477,12 +477,12 @@ export interface ModelServerForm {
* 展示排序,越大越靠前 * 展示排序,越大越靠前
* @default 0 * @default 0
*/ */
display_index?: number; display_index: number;
/** 启用DDNS */ /** 启用DDNS */
enable_ddns?: boolean; enable_ddns?: boolean;
/** 对游客隐藏 */ /** 对游客隐藏 */
hide_for_guest?: boolean; hide_for_guest?: boolean;
name?: string; name: string;
/** 管理员可见备注 */ /** 管理员可见备注 */
note?: string; note?: string;
/** 公开备注 */ /** 公开备注 */
@@ -490,190 +490,190 @@ export interface ModelServerForm {
} }
export interface ModelServerGroup { export interface ModelServerGroup {
created_at?: string; created_at: string;
id?: number; id: number;
name?: string; name: string;
updated_at?: string; updated_at: string;
} }
export interface ModelServerGroupForm { export interface ModelServerGroupForm {
/** @minLength 1 */ /** @minLength 1 */
name?: string; name: string;
servers?: number[]; servers: number[];
} }
export interface ModelServerGroupResponseItem { export interface ModelServerGroupResponseItem {
group?: ModelServerGroup; group: ModelServerGroup;
servers?: number[]; servers: number[];
} }
export interface ModelService { export interface ModelService {
cover?: number; cover: number;
created_at?: string; created_at: string;
duration?: number; duration: number;
enable_show_in_service?: boolean; enable_show_in_service: boolean;
enable_trigger_task?: boolean; enable_trigger_task: boolean;
/** 失败时执行的触发任务id */ /** 失败时执行的触发任务id */
fail_trigger_tasks?: number[]; fail_trigger_tasks: number[];
id?: number; id: number;
latency_notify?: boolean; latency_notify: boolean;
max_latency?: number; max_latency: number;
min_latency?: number; min_latency: number;
name?: string; name: string;
/** 当前服务监控所属的通知组 ID */ /** 当前服务监控所属的通知组 ID */
notification_group_id?: number; notification_group_id: number;
notify?: boolean; notify: boolean;
/** 恢复时执行的触发任务id */ /** 恢复时执行的触发任务id */
recover_trigger_tasks?: number[]; recover_trigger_tasks: number[];
skip_servers?: Record<string, boolean>; skip_servers: Record<string, boolean>;
target?: string; target: string;
type?: number; type: number;
updated_at?: string; updated_at: string;
} }
export interface ModelServiceForm { export interface ModelServiceForm {
cover?: number; cover: number;
duration?: number; duration: number;
enable_show_in_service?: boolean; enable_show_in_service?: boolean;
enable_trigger_task?: boolean; enable_trigger_task?: boolean;
fail_trigger_tasks?: number[]; fail_trigger_tasks: number[];
latency_notify?: boolean; latency_notify?: boolean;
/** @default 0 */ /** @default 0 */
max_latency?: number; max_latency: number;
/** @default 0 */ /** @default 0 */
min_latency?: number; min_latency: number;
/** @minLength 1 */ /** @minLength 1 */
name?: string; name: string;
notification_group_id?: number; notification_group_id: number;
notify?: boolean; notify?: boolean;
recover_trigger_tasks?: number[]; recover_trigger_tasks: number[];
skip_servers?: Record<string, boolean>; skip_servers: Record<string, boolean>;
target?: string; target: string;
type?: number; type: number;
} }
export interface ModelServiceInfos { export interface ModelServiceInfos {
avg_delay?: number[]; avg_delay: number[];
created_at?: number[]; created_at: number[];
monitor_id?: number; monitor_id: number;
monitor_name?: string; monitor_name: string;
server_id?: number; server_id: number;
server_name?: string; server_name: string;
} }
export interface ModelServiceResponse { export interface ModelServiceResponse {
cycle_transfer_stats?: Record<string, ModelCycleTransferStats>; cycle_transfer_stats: Record<string, ModelCycleTransferStats>;
services?: Record<string, ModelServiceResponseItem>; services: Record<string, ModelServiceResponseItem>;
} }
export interface ModelServiceResponseItem { export interface ModelServiceResponseItem {
current_down?: number; current_down: number;
current_up?: number; current_up: number;
delay?: number[]; delay: number[];
down?: number[]; down: number[];
service_name?: string; service_name: string;
total_down?: number; total_down: number;
total_up?: number; total_up: number;
up?: number[]; up: number[];
} }
export interface ModelSettingForm { export interface ModelSettingForm {
cover?: number; cover: number;
custom_code?: string; custom_code?: string;
custom_code_dashboard?: string; custom_code_dashboard?: string;
custom_nameservers?: string; dns_servers?: string;
enable_ip_change_notification?: boolean; enable_ip_change_notification?: boolean;
enable_plain_ip_in_notification?: boolean; enable_plain_ip_in_notification?: boolean;
ignored_ip_notification?: string; ignored_ip_notification?: string;
install_host?: string; install_host?: string;
/** IP变更提醒的通知组 */ /** IP变更提醒的通知组 */
ip_change_notification_group_id?: number; ip_change_notification_group_id: number;
/** @minLength 2 */ /** @minLength 2 */
language?: string; language: string;
/** 真实IP */ /** 真实IP */
real_ip_header?: string; real_ip_header?: string;
/** @minLength 1 */ /** @minLength 1 */
site_name?: string; site_name: string;
tls?: boolean; tls?: boolean;
user_template?: string; user_template?: string;
} }
export interface ModelSettingResponse { export interface ModelSettingResponse {
admin_template?: string; admin_template: string;
agent_secret_key?: string; agent_secret_key: string;
avg_ping_count?: number; avg_ping_count: number;
/** 覆盖范围0:提醒未被 IgnoredIPNotification 包含的所有服务器; 1:仅提醒被 IgnoredIPNotification 包含的服务器; */ /** 覆盖范围0:提醒未被 IgnoredIPNotification 包含的所有服务器; 1:仅提醒被 IgnoredIPNotification 包含的服务器; */
cover?: number; cover: number;
custom_code?: string; custom_code: string;
custom_code_dashboard?: string; custom_code_dashboard: string;
/** debug模式开关 */ /** debug模式开关 */
debug?: boolean; debug: boolean;
dns_servers?: string; dns_servers: string;
/** IP变更提醒 */ /** IP变更提醒 */
enable_ip_change_notification?: boolean; enable_ip_change_notification: boolean;
/** 通知信息IP不打码 */ /** 通知信息IP不打码 */
enable_plain_ip_in_notification?: boolean; enable_plain_ip_in_notification: boolean;
frontend_templates?: ModelFrontendTemplate[]; frontend_templates: ModelFrontendTemplate[];
/** 特定服务器IP多个服务器用逗号分隔 */ /** 特定服务器IP多个服务器用逗号分隔 */
ignored_ip_notification?: string; ignored_ip_notification: string;
/** [ServerID] -> bool(值为true代表当前ServerID在特定服务器列表内 */ /** [ServerID] -> bool(值为true代表当前ServerID在特定服务器列表内 */
ignored_ip_notification_server_ids?: Record<string, boolean>; ignored_ip_notification_server_ids: Record<string, boolean>;
install_host?: string; install_host: string;
ip_change_notification_group_id?: number; ip_change_notification_group_id: number;
jwt_secret_key?: string; jwt_secret_key: string;
/** 系统语言,默认 zh_CN */ /** 系统语言,默认 zh_CN */
language?: string; language: string;
listen_host?: string; listen_host: string;
listen_port?: number; listen_port: number;
/** 时区,默认为 Asia/Shanghai */ /** 时区,默认为 Asia/Shanghai */
location?: string; location: string;
/** 真实IP */ /** 真实IP */
real_ip_header?: string; real_ip_header: string;
site_name?: string; site_name: string;
tls?: boolean; tls: boolean;
user_template?: string; user_template: string;
version?: string; version: string;
} }
export interface ModelStreamServer { export interface ModelStreamServer {
country_code?: string; country_code: string;
/** 展示排序,越大越靠前 */ /** 展示排序,越大越靠前 */
display_index?: number; display_index: number;
host?: ModelHost; host: ModelHost;
id?: number; id: number;
last_active?: string; last_active: string;
name?: string; name: string;
/** 公开备注,只第一个数据包有值 */ /** 公开备注,只第一个数据包有值 */
public_note?: string; public_note: string;
state?: ModelHostState; state: ModelHostState;
} }
export interface ModelStreamServerData { export interface ModelStreamServerData {
now?: number; now: number;
servers?: ModelStreamServer[]; servers: ModelStreamServer[];
} }
export interface ModelTerminalForm { export interface ModelTerminalForm {
protocol?: string; protocol: string;
server_id?: number; server_id: number;
} }
export interface ModelUser { export interface ModelUser {
created_at?: string; created_at: string;
id?: number; id: number;
password?: string; password: string;
updated_at?: string; updated_at: string;
username?: string; username: string;
} }
export interface ModelUserForm { export interface ModelUserForm {
password?: string; password: string;
username?: string; username: string;
} }
export interface ModelWAFApiMock { export interface ModelWAFApiMock {
count?: number; count: number;
ip?: string; ip: string;
last_block_reason?: number; last_block_reason: number;
last_block_timestamp?: number; last_block_timestamp: number;
} }